feat: DAH-4006/4007 create invite to interview document list page#2843
feat: DAH-4006/4007 create invite to interview document list page#2843fwextensions wants to merge 13 commits intomainfrom
Conversation
…le projects - Create InviteToInterviewDocuments.tsx modeled on InviteToApplyDocuments - Add ~130 translation keys under inviteToInterviewPage.documents.* - 6 document sections: identity, proof of income, bank statements, rental history, child custody, housing assistance - Reuses existing invite-to-apply styles and shared components
- Add Rails route: /listings/:id/invite-to-interview - Create InviteToInterviewPageController with simple index action - Create Slim view template rendering InviteToInterviewPage React component - Add invite-to-interview.tsx entry point with feature flag guard - Register InviteToInterviewPage in react_application.tsx - Add InviteToInterview to AppPages enum - Update rails_best_practices.yml whitelist
Wiz Scan Summary
To detect these findings earlier in the dev lifecycle, try using Wiz Code VS Code Extension. |
There was a problem hiding this comment.
PII
More Details
| Attribute | Value |
|---|---|
| Data Classifier | PII/Name |
| Data Classifier ID | BUILTIN-125 |
Sampled Examples
| Key | Value |
|---|---|
| assistance.contact.helpLine.title1 | Frc*o |
| assistance.contact.questionsAboutListings.title1 | D****A |
Rule ID: BUILTIN-125
To ignore this finding as an exception, reply to this conversation with #wiz_ignore reason
If you'd like to ignore this finding in all future scans, add an exception in the .wiz file (learn more) or create an Ignore Rule (learn more).
To get more details on how to remediate this issue using AI, reply to this conversation with #wiz remediate
There was a problem hiding this comment.
Really? You're flagging Francisco and DAHLIA as people's names? 🙄
There was a problem hiding this comment.
Pull request overview
Adds a new Rails + React page for the “Invite to Interview” flow, exposing a documents checklist UI for a listing and wiring it into the existing ReactOnRails app bootstrapping and i18n system.
Changes:
- Add a new Rails route, controller, and Slim view for
/listings/:id/invite-to-interview. - Register and implement a new React page (
InviteToInterviewPage) and its documents/checklist content component. - Add a new
AppPagesenum entry and introduce English translation strings for the new page.
Reviewed changes
Copilot reviewed 9 out of 9 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| config/routes.rb | Adds the new invite-to-interview route. |
| config/rails_best_practices.yml | Allows the new controller methods in rails_best_practices config. |
| app/controllers/invite_to_interview_page_controller.rb | New controller that renders the React entrypoint with asset props. |
| app/views/invite_to_interview_page/invite_to_interview.html.slim | Renders the InviteToInterviewPage React component. |
| app/javascript/packs/react_application.tsx | Registers the new React entrypoint with ReactOnRails. |
| app/javascript/util/routeUtil.ts | Adds AppPages.InviteToInterview for page tracking/setup. |
| app/javascript/pages/inviteToApply/invite-to-interview.tsx | New React entrypoint that fetches listing + renders checklist component. |
| app/javascript/pages/inviteToApply/InviteToInterviewDocuments.tsx | Implements the invite-to-interview documents/checklist page UI. |
| app/assets/json/translations/react/en.json | Adds English i18n strings for the new page. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| "inviteToInterviewPage.documents.title": "What you need for %{listingName}", | ||
| "inviteToInterviewPage.documents.provide": "Provide:", | ||
| "inviteToInterviewPage.documents.checkWhatYouNeed.title": "Check what you need", | ||
| "inviteToInterviewPage.documents.checkWhatYouNeed.p1": "You must provide these documents for <strong>yourself</strong> and <strong>anyone else</strong> you will live with:", | ||
| "inviteToInterviewPage.documents.checkWhatYouNeed.p2": "<a href='%{link}'>Documents to confirm identity</a>", |
There was a problem hiding this comment.
New invite-to-interview translation keys were added only to en.json. The app also ships es.json, zh.json, and tl.json, and these keys are currently missing there, which will lead to missing-string fallbacks (often rendering the raw key) for non-English users. Please add corresponding entries (even temporarily duplicating English) to the other locale files or ensure the i18n system has a defined fallback behavior for these keys.
- Route is now /listings/:id/invite-to-interview/documents - Controller action renamed from index to documents - React entry point accepts documentsPath prop like I2A pattern - Leaves room for future I2I landing pages at /invite-to-interview
Add child margin, list styles, and icon list styles to .accordionContent so elements inside accordions have the same vertical spacing as elements in the main page sections.
Replace hardcoded office hours translation with listing.Office_Hours field from Salesforce data. Remove unused officeHoursValue key.
- Create InviteToInterviewSubmitYourInfo component with schedule appointment flow, gather documents, and attend appointment steps - Add deadline passed/active banner handling - Add What to expect after appointment and housing counselor sections - Wire up invite-to-interview.tsx entry point to render the new page - Add Rails route and controller index action for /listings/:id/invite-to-interview - Add 33 new translation strings under inviteToInterviewPage.submitYourInfo.* - Update rails_best_practices.yml with new controller action
- Create InviteToInterviewWithdrawn with same card layout as I2A, body text references appointment instead of document submission - Create InviteToInterviewWaitlist (new page type) with waitlist explanation, listing link, and change-answer section - Create InviteToInterviewDeadlinePassed with leasing agent contact - Wire all response pages into invite-to-interview.tsx entry point with JWT handling mirroring the I2A pattern - Update controller with JWT decode/encode and response routing - Add 13 new translation strings for response pages
…tMeLater Aligns naming convention with the I2A counterpart (InviteToApplyContactMeLater)
- Jest: 10 tests covering deadline passed, withdrawn, contact me later, submit your info page, schedule button visibility, and documents page - RSpec: controller specs for index (with/without params, JWT handling), documents action, and React layout usage - Fix stale InviteToInterviewWaitlist reference in entry point
The bloom-housing Button component doesn't forward the style prop directly. Using nativeButtonProps to pass it through to the DOM element.
Description
Implements the yes/no/later response and document list pages for I2I. For now, the new files are in
pages/inviteToApply, but these will probably be reorganized or combined during refactoring.Jira ticket
https://sfgovdt.jira.com/browse/DAH-4006
https://sfgovdt.jira.com/browse/DAH-4007
Screenshots
Before requesting eng review
Version Control
angularif it contains updates to Angular codetype: TICKET-NUMBER Descriptionformat, useDAH-000if it does not need a ticketurgent: Descriptionformat if it is urgent and does not need a ticketCode quality
Code conventions
.scssstylesheets andui-seedstokens, rather than inline styles or TailwindReview instructions
Request eng review
needs reviewlabelHousing Enggroup to automatically assign reviewers, and/or assign specific engineersBefore merging
Request product acceptance (PA) testing
needs product acceptancelabel)