feat(events): add travel fund deadline date support#727
Conversation
Surface travel_fund_end_date from ANALYTICS.PLATINUM_LFX_ONE.EVENT_REGISTRATIONS in the Travel Funding Application experience: - Display application deadline on each event card in the travel-fund picker; shows 'Application Deadline not set' when the field is null - Suppress events whose deadline has passed via a new excludePastTravelFundDeadline query option (SQL: TRAVEL_FUND_END_DATE IS NULL OR TRAVEL_FUND_END_DATE >= CURRENT_DATE()) - Add 'Deadline' column to the submitted Travel Fund Requests table Refs: https://linuxfoundation.atlassian.net/browse/LFXV2-1856 Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com> Signed-off-by: David Deal <ddeal@linuxfoundation.org>
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (1)
🚧 Files skipped from review as they are similar to previous changes (1)
WalkthroughAdds travel-fund application deadline data to shared interfaces, returns and maps the deadline from server queries, optionally filters out events with past deadlines, and displays formatted deadlines in two frontend components when request type is "travel-fund". ChangesTravel fund deadline filtering and display
🎯 3 (Moderate) | ⏱️ ~25 minutes 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
Pull request overview
Adds travel fund application deadline support across the events API and Travel Funding UI.
Changes:
- Extends shared event/request models and server queries with
TRAVEL_FUND_END_DATE. - Adds an
excludePastTravelFundDeadlinefilter for travel-fund event selection. - Displays application deadlines in the event picker and submitted travel fund requests table.
Reviewed changes
Copilot reviewed 8 out of 8 changed files in this pull request and generated 8 comments.
Show a summary per file
| File | Description |
|---|---|
packages/shared/src/interfaces/events.interface.ts |
Adds deadline fields and query option types. |
apps/lfx-one/src/server/services/events.service.ts |
Fetches, filters, and maps travel fund deadline data. |
apps/lfx-one/src/server/controllers/events.controller.ts |
Parses and forwards the new deadline exclusion query option. |
apps/lfx-one/src/app/shared/services/events.service.ts |
Sends the new query parameter to /api/events. |
apps/lfx-one/src/app/modules/events/my-events-dashboard/components/event-selection/event-selection.component.ts |
Enables deadline filtering for travel-fund selection. |
apps/lfx-one/src/app/modules/events/my-events-dashboard/components/event-selection/event-selection.component.html |
Displays deadline or fallback text on travel-fund event cards. |
apps/lfx-one/src/app/modules/events/my-events-dashboard/components/event-request-list/event-request-list.component.ts |
Imports DatePipe for deadline rendering. |
apps/lfx-one/src/app/modules/events/my-events-dashboard/components/event-request-list/event-request-list.component.html |
Adds a travel-fund-only Deadline column. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
🚀 Deployment StatusYour branch has been deployed to: https://ui-pr-727.dev.v2.cluster.linuxfound.info Deployment Details:
The deployment will be automatically removed when this PR is closed. |
MRashad26
left a comment
There was a problem hiding this comment.
Strict pass against ~/LFX/code-enforcer-agent.md. Feature works end-to-end and the column-only-when-travel-fund pattern is clean. Four findings worth a look — one UX inconsistency in the new column, one type-shape concern, one rendering-strategy inconsistency, and one timezone edge case in the SQL filter.
dealako
left a comment
There was a problem hiding this comment.
This PR cleanly surfaces travel_fund_end_date from the PLATINUM view into both the travel-fund picker and the submitted-requests table. The structure is solid — conditional rendering is properly gated on requestType === 'travel-fund', the SQL filter uses CURRENT_DATE() correctly, and the shared type additions are appropriately scoped.
One required fix before merge: Both row mappers (mapRowToVisaRequest line 1008, mapRowToEvent line 1053) pass row.TRAVEL_FUND_END_DATE ?? null without normalizing to YYYY-MM-DD. Snowflake's Node.js driver returns DATE columns as JavaScript Date objects, which Express serializes as UTC timestamps ("2026-07-05T00:00:00.000Z"). Angular's DatePipe then interprets this in the user's local timezone — users west of UTC can see Jul 4 for a Jul 5 deadline. Fix: use formatDateToISOString(row.TRAVEL_FUND_END_DATE) ?? null in both mappers (add formatDateToISOString to the existing @lfx-one/shared/utils import on line 38 — it's already exported).
Two nits noted inline (test ID naming, interface comment accuracy) — neither is a blocker.
…t id [LFXV2-1856] - Normalize TRAVEL_FUND_END_DATE to YYYY-MM-DD in both mapRowToVisaRequest and mapRowToEvent; raw Snowflake DATE values serialize as UTC timestamps which DatePipe renders in local timezone (off-by-one for users west of UTC) - Rename deadline column test id from '-sort-deadline' to '-deadline-header' to avoid implying the column is sortable - Correct interface comment on VisaRequestRow.TRAVEL_FUND_END_DATE and VisaRequest.travelFundEndDate to accurately describe when the field is null Refs: https://linuxfoundation.atlassian.net/browse/LFXV2-1856 Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> Signed-off-by: David Deal <ddeal@linuxfoundation.org>
|
Addressed all actionable AI review feedback in 72a572f: Fixed (3 items):
Out of scope (noted for follow-up):
|
…FXV2-1856] The past/registered branch of getMyEvents did not include TRAVEL_FUND_END_DATE in its SELECT list, making MyEventRow.TRAVEL_FUND_END_DATE undefined at runtime for past event rows despite the interface typing it as string | null. The mapper handled undefined safely (falsy -> null), but the interface contract was inaccurate. Adding the column to the past-events SELECT makes both branches consistent with the shared row type. Refs: https://linuxfoundation.atlassian.net/browse/LFXV2-1856 Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> Signed-off-by: David Deal <ddeal@linuxfoundation.org>
Review Feedback Addressed (Round 2)Commit: 49b934f Change Made
No Change Needed
Threads Resolved3 of 3 unresolved threads addressed in this iteration. All 17 review threads on this PR are now resolved. |
Summary
Surface
travel_fund_end_datefromANALYTICS.PLATINUM_LFX_ONE.EVENT_REGISTRATIONSin the Travel Funding Application experience:excludePastTravelFundDeadlinequery option (TRAVEL_FUND_END_DATE IS NULL OR TRAVEL_FUND_END_DATE >= CURRENT_DATE())Changes
Jira: LFXV2-1856