Birthday Anniversary Control
Technology Stack:
- Power Apps Component Framework (PCF)
- React (TypeScript)
Purpose
This PCF control renders a React-based EventCard that shows the next Birthday and Work Anniversary for a user, calculated from input dates. It also allows users to download .ics calendar files to add these events to their personal calendars.
Functional Overview
Responsibilities:
- Reads input values: dateOfBirth and joiningDate
- Passes them as props to the EventCard React component
- Renders content using createRoot from React 18
- No output or two-way data binding
- Cleanup logic is currently empty
React Component: EventCard
Props:
Name | Type | Description |
dateOfBirth | Date | User’s date of birth |
joiningDate | Date | User’s joining date |
Core Features
- getNextOccurrence: Calculates the next occurrence of a date (e.g., birthday or work anniversary) from today.
- calculateYears: Computes age or years worked based on current date.
- isUpcoming: Checks if an event is within 7 days from today and adds visual cue if true.
- formatDate: Formats date to a user-friendly string.
- generateICSFile: Creates downloadable .ics calendar event files.
UI Structure
Main Card: Title - "Upcoming Events"
Events Rendered:
Event | Icon | Info | Extras |
Birthday | 🎉 | Date, Age | Add to Calendar button |
Work Anniversary | 🏆 | Date, Years Worked | Add to Calendar button |
If upcoming | ❗ |
| Notification badge |
Accessibility
- Container uses role='region' and aria-label='Upcoming Events'
- Proper semantic tags are used for clarity
- Each event item has clear labels and icons
Inputs
Property | Type | Required | Source | Default Value |
dateOfBirth | Date | Yes | PCF | Current Date |
joiningDate | Date | Yes | PCF | Current Date |
Dependencies
- React for UI rendering
- createRoot for DOM mount
- Blob and URL APIs for ICS generation
Potential Enhancements
- Allow setting the number of 'upcoming days' threshold via input
- Add localization support
- Define outputs if data should sync back to the model-driven app
Comments
Post a Comment