Skip to content

Instantly share code, notes, and snippets.

@amponce
Last active April 17, 2025 17:13
Show Gist options
  • Save amponce/37533ab3c3ff10d3951a90f80e7332c1 to your computer and use it in GitHub Desktop.
Save amponce/37533ab3c3ff10d3951a90f80e7332c1 to your computer and use it in GitHub Desktop.
Benefits Team

Claims‑Status File Relationship Map

🔍 Scan Summary

  • Files scanned: 226
  • Entry file: src/applications/claims-status/routes.jsx
  • Direct route components: 16
  • Feature‑toggle refs: 15

🗺️ Routes & Dependencies

components/TogglerRoute.jsx

No local dependencies

containers/YourClaimsPageV2.jsx

  • actions/types.js
  • components/AppealsUnavailable.jsx
  • components/ClaimCard/ClaimCard.jsx
  • components/ClaimCard/ClaimCardLink.jsx
  • components/ClaimCard/index.jsx
  • components/ClaimsAppealsUnavailable.jsx
  • components/ClaimsBreadcrumbs.jsx
  • components/ClaimsListItem.jsx
  • components/ClaimsUnavailable.jsx
  • components/FeaturesWarning.jsx
  • components/NeedHelp.jsx
  • components/NoClaims.jsx
  • components/StemClaimListItem.jsx
  • components/appeals-v2/AppealListItem.jsx
  • components/claim-letters/ClaimLetterSection.jsx
  • constants.js
  • selectors/index.js
  • utils/helpers.js
  • utils/page.js
  • utils/withRouter.jsx

containers/YourClaimLetters/index.jsx

  • actions/index.js
  • actions/types.js
  • components/ClaimsBreadcrumbs.jsx
  • components/WIP.jsx
  • components/appeals-v2/Decision.jsx
  • components/claim-letters/ClaimLetterList.jsx
  • components/claim-letters/ClaimLetterListItem.jsx
  • constants.js
  • containers/YourClaimLetters/errorComponents/NoLettersContent.jsx
  • containers/YourClaimLetters/errorComponents/ServerErrorContent.jsx
  • containers/YourClaimLetters/errorComponents/UnauthenticatedContent.jsx
  • selectors/index.js
  • tests/e2e/fixtures/mocks/mock-api/index.js
  • utils/appeals-v2-helpers.jsx
  • utils/helpers.js
  • utils/page.js

containers/ClaimPage.jsx

No local dependencies

containers/ClaimStatusPage.jsx

  • actions/index.js
  • actions/types.js
  • components/AddingDetails.jsx
  • components/ClaimContentionList.jsx
  • components/ClaimDetailLayout.jsx
  • components/ClaimStatusHeader.jsx
  • components/ClaimsBreadcrumbs.jsx
  • components/ClaimsUnavailable.jsx
  • components/DueDate.jsx
  • components/IndexLink.jsx
  • components/NeedHelp.jsx
  • components/Notification.jsx
  • components/TabItem.jsx
  • components/TabNav.jsx
  • components/appeals-v2/Decision.jsx
  • components/claim-files-tab/FilesNeeded.jsx
  • components/claim-status-tab/ClosedClaimAlert.jsx
  • components/claim-status-tab/NextSteps.jsx
  • components/claim-status-tab/Payments.jsx
  • components/claim-status-tab/RecentActivity.jsx
  • components/claim-status-tab/WhatWeAreDoing.jsx
  • components/claim-status-tab/WhatYouNeedToDo.jsx
  • constants.js
  • tests/e2e/fixtures/mocks/mock-api/index.js
  • utils/appeals-v2-helpers.jsx
  • utils/evidenceDictionary.jsx
  • utils/helpers.js
  • utils/page.js

containers/StemClaimStatusPage.jsx

  • actions/index.js
  • actions/types.js
  • components/ClaimsBreadcrumbs.jsx
  • components/ClaimsUnavailable.jsx
  • components/StemAskVAQuestions.jsx
  • components/StemDeniedDetails.jsx
  • components/appeals-v2/Decision.jsx
  • constants.js
  • tests/e2e/fixtures/mocks/mock-api/index.js
  • utils/appeals-v2-helpers.jsx
  • utils/helpers.js
  • utils/page.js
  • utils/withRouter.jsx

containers/FilesPage.jsx

  • actions/index.js
  • actions/types.js
  • components/AddingDetails.jsx
  • components/AskVAToDecide.jsx
  • components/ClaimContentionList.jsx
  • components/ClaimDetailLayout.jsx
  • components/ClaimsBreadcrumbs.jsx
  • components/ClaimsUnavailable.jsx
  • components/DueDate.jsx
  • components/IndexLink.jsx
  • components/MailMessage.jsx
  • components/NeedHelp.jsx
  • components/Notification.jsx
  • components/TabItem.jsx
  • components/TabNav.jsx
  • components/UploadStatus.jsx
  • components/appeals-v2/Decision.jsx
  • components/claim-files-tab/AddFilesForm.jsx
  • components/claim-files-tab/AdditionalEvidencePage.jsx
  • components/claim-files-tab/ClaimFileHeader.jsx
  • components/claim-files-tab/DocumentsFiled.jsx
  • components/claim-files-tab/FilesNeeded.jsx
  • components/claim-files-tab/FilesOptional.jsx
  • components/claim-files-tab/RemoveFileModal.jsx
  • constants.js
  • selectors/index.js
  • tests/e2e/fixtures/mocks/mock-api/index.js
  • utils/appeals-v2-helpers.jsx
  • utils/evidenceDictionary.jsx
  • utils/helpers.js
  • utils/page.js
  • utils/withRouter.jsx

containers/AskVAPage.jsx

  • actions/types.js
  • components/ClaimsBreadcrumbs.jsx
  • components/NeedHelp.jsx
  • constants.js
  • utils/helpers.js
  • utils/page.js
  • utils/withRouter.jsx

containers/DocumentRequestPage.jsx

  • actions/types.js
  • components/ClaimsBreadcrumbs.jsx
  • components/DueDate.jsx
  • components/MailMessage.jsx
  • components/NeedHelp.jsx
  • components/Notification.jsx
  • components/UploadStatus.jsx
  • components/claim-document-request-pages/Default5103EvidenceNotice.jsx
  • components/claim-document-request-pages/DefaultPage.jsx
  • components/claim-files-tab/AddFilesForm.jsx
  • components/claim-files-tab/RemoveFileModal.jsx
  • constants.js
  • selectors/index.js
  • utils/evidenceDictionary.jsx
  • utils/helpers.js
  • utils/page.js
  • utils/withRouter.jsx

containers/ClaimEstimationPage.jsx

  • actions/types.js
  • components/ClaimsBreadcrumbs.jsx
  • components/NeedHelp.jsx
  • constants.js
  • utils/helpers.js
  • utils/page.js

containers/AppealsV2StatusPage.jsx

  • components/appeals-v2/Alert.jsx
  • components/appeals-v2/AlertsList.jsx
  • components/appeals-v2/CurrentStatus.jsx
  • components/appeals-v2/Decision.jsx
  • components/appeals-v2/Docket.jsx
  • components/appeals-v2/DocketCard.jsx
  • components/appeals-v2/Expander.jsx
  • components/appeals-v2/NextEvent.jsx
  • components/appeals-v2/PastEvent.jsx
  • components/appeals-v2/Timeline.jsx
  • components/appeals-v2/WhatsNext.jsx
  • constants.js
  • utils/appeals-v2-helpers.jsx

containers/AppealsV2DetailPage.jsx

  • components/appeals-v2/Decision.jsx
  • components/appeals-v2/Issues.jsx
  • constants.js
  • utils/appeals-v2-helpers.jsx

containers/AppealInfo.jsx

  • actions/index.js
  • actions/types.js
  • components/ClaimsBreadcrumbs.jsx
  • components/CopyOfExam.jsx
  • components/IndexLink.jsx
  • components/NeedHelp.jsx
  • components/TabItem.jsx
  • components/appeals-v2/AppealHeader.jsx
  • components/appeals-v2/AppealHelpSidebar.jsx
  • components/appeals-v2/AppealNotFound.jsx
  • components/appeals-v2/AppealsV2TabNav.jsx
  • components/appeals-v2/Decision.jsx
  • constants.js
  • tests/e2e/fixtures/mocks/mock-api/index.js
  • utils/appeals-v2-helpers.jsx
  • utils/page.js
  • utils/withRouter.jsx

containers/ClaimsStatusApp.jsx

  • actions/index.js
  • components/ClaimsAppealsUnavailable.jsx
  • components/appeals-v2/Decision.jsx
  • constants.js
  • selectors/index.js
  • tests/e2e/fixtures/mocks/mock-api/index.js
  • utils/appeals-v2-helpers.jsx
  • utils/datadog-rum/initializeRealUserMonitoring.js
  • utils/datadog-rum/useBrowserMonitoring.js

containers/OverviewPage.jsx

  • actions/index.js
  • actions/types.js
  • components/AddingDetails.jsx
  • components/ClaimContentionList.jsx
  • components/ClaimDetailLayout.jsx
  • components/ClaimPhase.jsx
  • components/ClaimTimeline.jsx
  • components/ClaimsBreadcrumbs.jsx
  • components/ClaimsUnavailable.jsx
  • components/IndexLink.jsx
  • components/NeedHelp.jsx
  • components/Notification.jsx
  • components/PhaseBackWarning.jsx
  • components/TabItem.jsx
  • components/TabNav.jsx
  • components/appeals-v2/Decision.jsx
  • components/claim-overview-tab/ClaimOverviewHeader.jsx
  • components/claim-overview-tab/ClaimPhaseStepper.jsx
  • components/claim-overview-tab/DesktopClaimPhaseDiagram.jsx
  • components/claim-overview-tab/MobileClaimPhaseDiagram.jsx
  • constants.js
  • tests/e2e/fixtures/mocks/mock-api/index.js
  • utils/appeals-v2-helpers.jsx
  • utils/helpers.js
  • utils/page.js

containers/Standard5103NoticePage.jsx

  • components/ClaimsBreadcrumbs.jsx
  • components/NeedHelp.jsx
  • components/claim-document-request-pages/Default5103EvidenceNotice.jsx
  • constants.js
  • utils/page.js
  • utils/withRouter.jsx

🚩 Feature Toggles

File Toggle Name
components/claim-document-request-pages/DefaultPage.jsx cstFriendlyEvidenceRequests
components/claim-files-tab/AddFilesForm.jsx cstFriendlyEvidenceRequests
containers/DocumentRequestPage.jsx cst5103UpdateEnabled
containers/FilesPage.jsx cst5103UpdateEnabled
containers/OverviewPage.jsx cstClaimPhases
containers/YourClaimsPageV2.jsx FEATURE_FLAG_NAMES
containers/YourClaimsPageV2.jsx FEATURE_FLAG_NAMES
selectors/index.js FEATURE_FLAG_NAMES
selectors/index.js FEATURE_FLAG_NAMES
selectors/index.js FEATURE_FLAG_NAMES
selectors/index.js FEATURE_FLAG_NAMES
selectors/index.js FEATURE_FLAG_NAMES
selectors/index.js FEATURE_FLAG_NAMES
utils/appeals-v2-helpers.jsx cstIncludeDdlBoaLetters
utils/appeals-v2-helpers.jsx cstIncludeDdlBoaLetters
node scripts/map-claims-status-relations.js
# Claims‑Status File Relationship Map

## Scan Summary

- **Files scanned:** 226
- **Entry file:** `src/applications/claims-status/routes.jsx`
- **Direct route components:** 16
- **Total feature‑toggle refs:** 15

## Routes & Dependencies

### `components/TogglerRoute.jsx`

_No local dependencies_

### `containers/YourClaimsPageV2.jsx`

- `src/applications/claims-status/actions/types.js`
- `src/applications/claims-status/components/AppealsUnavailable.jsx`
- `src/applications/claims-status/components/ClaimCard/ClaimCard.jsx`
- `src/applications/claims-status/components/ClaimCard/ClaimCardLink.jsx`
- `src/applications/claims-status/components/ClaimCard/index.jsx`
- `src/applications/claims-status/components/ClaimsAppealsUnavailable.jsx`
- `src/applications/claims-status/components/ClaimsBreadcrumbs.jsx`
- `src/applications/claims-status/components/ClaimsListItem.jsx`
- `src/applications/claims-status/components/ClaimsUnavailable.jsx`
- `src/applications/claims-status/components/FeaturesWarning.jsx`
- `src/applications/claims-status/components/NeedHelp.jsx`
- `src/applications/claims-status/components/NoClaims.jsx`
- `src/applications/claims-status/components/StemClaimListItem.jsx`
- `src/applications/claims-status/components/appeals-v2/AppealListItem.jsx`
- `src/applications/claims-status/components/claim-letters/ClaimLetterSection.jsx`
- `src/applications/claims-status/constants.js`
- `src/applications/claims-status/selectors/index.js`
- `src/applications/claims-status/utils/helpers.js`
- `src/applications/claims-status/utils/page.js`
- `src/applications/claims-status/utils/withRouter.jsx`

### `containers/YourClaimLetters/index.jsx`

- `src/applications/claims-status/actions/index.js`
- `src/applications/claims-status/actions/types.js`
- `src/applications/claims-status/components/ClaimsBreadcrumbs.jsx`
- `src/applications/claims-status/components/WIP.jsx`
- `src/applications/claims-status/components/appeals-v2/Decision.jsx`
- `src/applications/claims-status/components/claim-letters/ClaimLetterList.jsx`
- `src/applications/claims-status/components/claim-letters/ClaimLetterListItem.jsx`
- `src/applications/claims-status/constants.js`
- `src/applications/claims-status/containers/YourClaimLetters/errorComponents/NoLettersContent.jsx`
- `src/applications/claims-status/containers/YourClaimLetters/errorComponents/ServerErrorContent.jsx`
- `src/applications/claims-status/containers/YourClaimLetters/errorComponents/UnauthenticatedContent.jsx`
- `src/applications/claims-status/selectors/index.js`
- `src/applications/claims-status/tests/e2e/fixtures/mocks/mock-api/index.js`
- `src/applications/claims-status/utils/appeals-v2-helpers.jsx`
- `src/applications/claims-status/utils/helpers.js`
- `src/applications/claims-status/utils/page.js`

### `containers/ClaimPage.jsx`

_No local dependencies_

### `containers/ClaimStatusPage.jsx`

- `src/applications/claims-status/actions/index.js`
- `src/applications/claims-status/actions/types.js`
- `src/applications/claims-status/components/AddingDetails.jsx`
- `src/applications/claims-status/components/ClaimContentionList.jsx`
- `src/applications/claims-status/components/ClaimDetailLayout.jsx`
- `src/applications/claims-status/components/ClaimStatusHeader.jsx`
- `src/applications/claims-status/components/ClaimsBreadcrumbs.jsx`
- `src/applications/claims-status/components/ClaimsUnavailable.jsx`
- `src/applications/claims-status/components/DueDate.jsx`
- `src/applications/claims-status/components/IndexLink.jsx`
- `src/applications/claims-status/components/NeedHelp.jsx`
- `src/applications/claims-status/components/Notification.jsx`
- `src/applications/claims-status/components/TabItem.jsx`
- `src/applications/claims-status/components/TabNav.jsx`
- `src/applications/claims-status/components/appeals-v2/Decision.jsx`
- `src/applications/claims-status/components/claim-files-tab/FilesNeeded.jsx`
- `src/applications/claims-status/components/claim-status-tab/ClosedClaimAlert.jsx`
- `src/applications/claims-status/components/claim-status-tab/NextSteps.jsx`
- `src/applications/claims-status/components/claim-status-tab/Payments.jsx`
- `src/applications/claims-status/components/claim-status-tab/RecentActivity.jsx`
- `src/applications/claims-status/components/claim-status-tab/WhatWeAreDoing.jsx`
- `src/applications/claims-status/components/claim-status-tab/WhatYouNeedToDo.jsx`
- `src/applications/claims-status/constants.js`
- `src/applications/claims-status/tests/e2e/fixtures/mocks/mock-api/index.js`
- `src/applications/claims-status/utils/appeals-v2-helpers.jsx`
- `src/applications/claims-status/utils/evidenceDictionary.jsx`
- `src/applications/claims-status/utils/helpers.js`
- `src/applications/claims-status/utils/page.js`

### `containers/StemClaimStatusPage.jsx`

- `src/applications/claims-status/actions/index.js`
- `src/applications/claims-status/actions/types.js`
- `src/applications/claims-status/components/ClaimsBreadcrumbs.jsx`
- `src/applications/claims-status/components/ClaimsUnavailable.jsx`
- `src/applications/claims-status/components/StemAskVAQuestions.jsx`
- `src/applications/claims-status/components/StemDeniedDetails.jsx`
- `src/applications/claims-status/components/appeals-v2/Decision.jsx`
- `src/applications/claims-status/constants.js`
- `src/applications/claims-status/tests/e2e/fixtures/mocks/mock-api/index.js`
- `src/applications/claims-status/utils/appeals-v2-helpers.jsx`
- `src/applications/claims-status/utils/helpers.js`
- `src/applications/claims-status/utils/page.js`
- `src/applications/claims-status/utils/withRouter.jsx`

### `containers/FilesPage.jsx`

- `src/applications/claims-status/actions/index.js`
- `src/applications/claims-status/actions/types.js`
- `src/applications/claims-status/components/AddingDetails.jsx`
- `src/applications/claims-status/components/AskVAToDecide.jsx`
- `src/applications/claims-status/components/ClaimContentionList.jsx`
- `src/applications/claims-status/components/ClaimDetailLayout.jsx`
- `src/applications/claims-status/components/ClaimsBreadcrumbs.jsx`
- `src/applications/claims-status/components/ClaimsUnavailable.jsx`
- `src/applications/claims-status/components/DueDate.jsx`
- `src/applications/claims-status/components/IndexLink.jsx`
- `src/applications/claims-status/components/MailMessage.jsx`
- `src/applications/claims-status/components/NeedHelp.jsx`
- `src/applications/claims-status/components/Notification.jsx`
- `src/applications/claims-status/components/TabItem.jsx`
- `src/applications/claims-status/components/TabNav.jsx`
- `src/applications/claims-status/components/UploadStatus.jsx`
- `src/applications/claims-status/components/appeals-v2/Decision.jsx`
- `src/applications/claims-status/components/claim-files-tab/AddFilesForm.jsx`
- `src/applications/claims-status/components/claim-files-tab/AdditionalEvidencePage.jsx`
- `src/applications/claims-status/components/claim-files-tab/ClaimFileHeader.jsx`
- `src/applications/claims-status/components/claim-files-tab/DocumentsFiled.jsx`
- `src/applications/claims-status/components/claim-files-tab/FilesNeeded.jsx`
- `src/applications/claims-status/components/claim-files-tab/FilesOptional.jsx`
- `src/applications/claims-status/components/claim-files-tab/RemoveFileModal.jsx`
- `src/applications/claims-status/constants.js`
- `src/applications/claims-status/selectors/index.js`
- `src/applications/claims-status/tests/e2e/fixtures/mocks/mock-api/index.js`
- `src/applications/claims-status/utils/appeals-v2-helpers.jsx`
- `src/applications/claims-status/utils/evidenceDictionary.jsx`
- `src/applications/claims-status/utils/helpers.js`
- `src/applications/claims-status/utils/page.js`
- `src/applications/claims-status/utils/withRouter.jsx`

### `containers/AskVAPage.jsx`

- `src/applications/claims-status/actions/types.js`
- `src/applications/claims-status/components/ClaimsBreadcrumbs.jsx`
- `src/applications/claims-status/components/NeedHelp.jsx`
- `src/applications/claims-status/constants.js`
- `src/applications/claims-status/utils/helpers.js`
- `src/applications/claims-status/utils/page.js`
- `src/applications/claims-status/utils/withRouter.jsx`

### `containers/DocumentRequestPage.jsx`

- `src/applications/claims-status/actions/types.js`
- `src/applications/claims-status/components/ClaimsBreadcrumbs.jsx`
- `src/applications/claims-status/components/DueDate.jsx`
- `src/applications/claims-status/components/MailMessage.jsx`
- `src/applications/claims-status/components/NeedHelp.jsx`
- `src/applications/claims-status/components/Notification.jsx`
- `src/applications/claims-status/components/UploadStatus.jsx`
- `src/applications/claims-status/components/claim-document-request-pages/Default5103EvidenceNotice.jsx`
- `src/applications/claims-status/components/claim-document-request-pages/DefaultPage.jsx`
- `src/applications/claims-status/components/claim-files-tab/AddFilesForm.jsx`
- `src/applications/claims-status/components/claim-files-tab/RemoveFileModal.jsx`
- `src/applications/claims-status/constants.js`
- `src/applications/claims-status/selectors/index.js`
- `src/applications/claims-status/utils/evidenceDictionary.jsx`
- `src/applications/claims-status/utils/helpers.js`
- `src/applications/claims-status/utils/page.js`
- `src/applications/claims-status/utils/withRouter.jsx`

### `containers/ClaimEstimationPage.jsx`

- `src/applications/claims-status/actions/types.js`
- `src/applications/claims-status/components/ClaimsBreadcrumbs.jsx`
- `src/applications/claims-status/components/NeedHelp.jsx`
- `src/applications/claims-status/constants.js`
- `src/applications/claims-status/utils/helpers.js`
- `src/applications/claims-status/utils/page.js`

### `containers/AppealsV2StatusPage.jsx`

- `src/applications/claims-status/components/appeals-v2/Alert.jsx`
- `src/applications/claims-status/components/appeals-v2/AlertsList.jsx`
- `src/applications/claims-status/components/appeals-v2/CurrentStatus.jsx`
- `src/applications/claims-status/components/appeals-v2/Decision.jsx`
- `src/applications/claims-status/components/appeals-v2/Docket.jsx`
- `src/applications/claims-status/components/appeals-v2/DocketCard.jsx`
- `src/applications/claims-status/components/appeals-v2/Expander.jsx`
- `src/applications/claims-status/components/appeals-v2/NextEvent.jsx`
- `src/applications/claims-status/components/appeals-v2/PastEvent.jsx`
- `src/applications/claims-status/components/appeals-v2/Timeline.jsx`
- `src/applications/claims-status/components/appeals-v2/WhatsNext.jsx`
- `src/applications/claims-status/constants.js`
- `src/applications/claims-status/utils/appeals-v2-helpers.jsx`

### `containers/AppealsV2DetailPage.jsx`

- `src/applications/claims-status/components/appeals-v2/Decision.jsx`
- `src/applications/claims-status/components/appeals-v2/Issues.jsx`
- `src/applications/claims-status/constants.js`
- `src/applications/claims-status/utils/appeals-v2-helpers.jsx`

### `containers/AppealInfo.jsx`

- `src/applications/claims-status/actions/index.js`
- `src/applications/claims-status/actions/types.js`
- `src/applications/claims-status/components/ClaimsBreadcrumbs.jsx`
- `src/applications/claims-status/components/CopyOfExam.jsx`
- `src/applications/claims-status/components/IndexLink.jsx`
- `src/applications/claims-status/components/NeedHelp.jsx`
- `src/applications/claims-status/components/TabItem.jsx`
- `src/applications/claims-status/components/appeals-v2/AppealHeader.jsx`
- `src/applications/claims-status/components/appeals-v2/AppealHelpSidebar.jsx`
- `src/applications/claims-status/components/appeals-v2/AppealNotFound.jsx`
- `src/applications/claims-status/components/appeals-v2/AppealsV2TabNav.jsx`
- `src/applications/claims-status/components/appeals-v2/Decision.jsx`
- `src/applications/claims-status/constants.js`
- `src/applications/claims-status/tests/e2e/fixtures/mocks/mock-api/index.js`
- `src/applications/claims-status/utils/appeals-v2-helpers.jsx`
- `src/applications/claims-status/utils/page.js`
- `src/applications/claims-status/utils/withRouter.jsx`

### `containers/ClaimsStatusApp.jsx`

- `src/applications/claims-status/actions/index.js`
- `src/applications/claims-status/components/ClaimsAppealsUnavailable.jsx`
- `src/applications/claims-status/components/appeals-v2/Decision.jsx`
- `src/applications/claims-status/constants.js`
- `src/applications/claims-status/selectors/index.js`
- `src/applications/claims-status/tests/e2e/fixtures/mocks/mock-api/index.js`
- `src/applications/claims-status/utils/appeals-v2-helpers.jsx`
- `src/applications/claims-status/utils/datadog-rum/initializeRealUserMonitoring.js`
- `src/applications/claims-status/utils/datadog-rum/useBrowserMonitoring.js`

### `containers/OverviewPage.jsx`

- `src/applications/claims-status/actions/index.js`
- `src/applications/claims-status/actions/types.js`
- `src/applications/claims-status/components/AddingDetails.jsx`
- `src/applications/claims-status/components/ClaimContentionList.jsx`
- `src/applications/claims-status/components/ClaimDetailLayout.jsx`
- `src/applications/claims-status/components/ClaimPhase.jsx`
- `src/applications/claims-status/components/ClaimTimeline.jsx`
- `src/applications/claims-status/components/ClaimsBreadcrumbs.jsx`
- `src/applications/claims-status/components/ClaimsUnavailable.jsx`
- `src/applications/claims-status/components/IndexLink.jsx`
- `src/applications/claims-status/components/NeedHelp.jsx`
- `src/applications/claims-status/components/Notification.jsx`
- `src/applications/claims-status/components/PhaseBackWarning.jsx`
- `src/applications/claims-status/components/TabItem.jsx`
- `src/applications/claims-status/components/TabNav.jsx`
- `src/applications/claims-status/components/appeals-v2/Decision.jsx`
- `src/applications/claims-status/components/claim-overview-tab/ClaimOverviewHeader.jsx`
- `src/applications/claims-status/components/claim-overview-tab/ClaimPhaseStepper.jsx`
- `src/applications/claims-status/components/claim-overview-tab/DesktopClaimPhaseDiagram.jsx`
- `src/applications/claims-status/components/claim-overview-tab/MobileClaimPhaseDiagram.jsx`
- `src/applications/claims-status/constants.js`
- `src/applications/claims-status/tests/e2e/fixtures/mocks/mock-api/index.js`
- `src/applications/claims-status/utils/appeals-v2-helpers.jsx`
- `src/applications/claims-status/utils/helpers.js`
- `src/applications/claims-status/utils/page.js`

### `containers/Standard5103NoticePage.jsx`

- `src/applications/claims-status/components/ClaimsBreadcrumbs.jsx`
- `src/applications/claims-status/components/NeedHelp.jsx`
- `src/applications/claims-status/components/claim-document-request-pages/Default5103EvidenceNotice.jsx`
- `src/applications/claims-status/constants.js`
- `src/applications/claims-status/utils/page.js`
- `src/applications/claims-status/utils/withRouter.jsx`

## Feature Toggles

| File | Toggle Name |
| ---- | ----------- |
| `src/applications/claims-status/components/claim-document-request-pages/DefaultPage.jsx` | `cstFriendlyEvidenceRequests` |
| `src/applications/claims-status/components/claim-files-tab/AddFilesForm.jsx` | `cstFriendlyEvidenceRequests` |
| `src/applications/claims-status/containers/DocumentRequestPage.jsx` | `cst5103UpdateEnabled` |
| `src/applications/claims-status/containers/FilesPage.jsx` | `cst5103UpdateEnabled` |
| `src/applications/claims-status/containers/OverviewPage.jsx` | `cstClaimPhases` |
| `src/applications/claims-status/containers/YourClaimsPageV2.jsx` | `FEATURE_FLAG_NAMES` |
| `src/applications/claims-status/containers/YourClaimsPageV2.jsx` | `FEATURE_FLAG_NAMES` |
| `src/applications/claims-status/selectors/index.js` | `FEATURE_FLAG_NAMES` |
| `src/applications/claims-status/selectors/index.js` | `FEATURE_FLAG_NAMES` |
| `src/applications/claims-status/selectors/index.js` | `FEATURE_FLAG_NAMES` |
| `src/applications/claims-status/selectors/index.js` | `FEATURE_FLAG_NAMES` |
| `src/applications/claims-status/selectors/index.js` | `FEATURE_FLAG_NAMES` |
| `src/applications/claims-status/selectors/index.js` | `FEATURE_FLAG_NAMES` |
| `src/applications/claims-status/utils/appeals-v2-helpers.jsx` | `cstIncludeDdlBoaLetters` |
| `src/applications/claims-status/utils/appeals-v2-helpers.jsx` | `cstIncludeDdlBoaLetters` |
@amponce
Copy link
Author

amponce commented Apr 17, 2025

#!/usr/bin/env node

/**
 * map-claims-status-relations.js
 *
 * - Scans src/applications/claims-status for .js/.jsx/.ts/.tsx files
 * - Builds a local‑file import graph & feature‑toggle list
 * - Generates:
 *    • claims-status-report.md   — Markdown overview
 *    • claims-status-graph.dot   — Graphviz dot (clustered)
 *    • claims-status-graph.html  — Self‑contained HTML with legend & Viz.js
 */

const fs   = require('fs');
const path = require('path');
const util = require('util');

const readFile = util.promisify(fs.readFile);
const readDir  = util.promisify(fs.readdir);
const stat     = util.promisify(fs.stat);

// —— CONFIG ——
const APP_DIR      = path.join(process.cwd(), 'src/applications/claims-status');
const ENTRY_FILE   = path.join(APP_DIR, 'routes.jsx');
const EXTENSIONS   = ['.js', '.jsx', '.ts', '.tsx'];
const FEATURE_REGEX = [
  /Toggler\.TOGGLE_NAMES\.([A-Za-z0-9_]+)/g,
  /useFeatureFlag\(\s*['"`]([^'"`]+)['"`]\s*\)/g,
  /FEATURE_[A-Z0-9_]+/g,
  /\bFeatureToggle\b/g,
];

// —— STORAGE ——
const fileGraph       = {};  // filePath → [local deps]
const collectedToggles = []; // { file, toggle }

/** Recursively find all code files under `dir` */
async function findAllFiles(dir) {
  let files = [];
  for (const name of await readDir(dir)) {
    const full = path.join(dir, name);
    const info = await stat(full);
    if (info.isDirectory() && name !== 'node_modules') {
      files = files.concat(await findAllFiles(full));
    } else if (info.isFile() && EXTENSIONS.includes(path.extname(full))) {
      files.push(full);
    }
  }
  return files;
}

/** Resolve a local import (`./Foo` or `../Bar`) to a disk file */
function resolveLocalImport(from, imp) {
  if (!imp.startsWith('.')) return null;
  const base = path.resolve(path.dirname(from), imp);
  for (const ext of EXTENSIONS) {
    if (fs.existsSync(base + ext)) return base + ext;
    if (fs.existsSync(path.join(base, 'index' + ext))) {
      return path.join(base, 'index' + ext);
    }
  }
  return null;
}

/** Parse a file for imports & feature toggles */
async function parseFile(fp) {
  const src     = await readFile(fp, 'utf8');
  const imports = [];

  // ES imports
  for (const m of src.matchAll(/import\s+.*?['"](.+?)['"]/g)) {
    const r = resolveLocalImport(fp, m[1]);
    if (r) imports.push(r);
  }
  // CommonJS requires
  for (const m of src.matchAll(/require$begin:math:text$\\s*['"](.+?)['"]\\s*$end:math:text$/g)) {
    const r = resolveLocalImport(fp, m[1]);
    if (r) imports.push(r);
  }
  // feature toggles
  FEATURE_REGEX.forEach((re) => {
    for (const m of src.matchAll(re)) {
      collectedToggles.push({ file: fp, toggle: m[1] || m[0] });
    }
  });

  fileGraph[fp] = imports;
}

/** Build the full graph by parsing every file */
async function buildGraph() {
  if (!fs.existsSync(APP_DIR)) {
    console.error(`❌ Directory not found: ${APP_DIR}`);
    process.exit(1);
  }
  const allFiles = await findAllFiles(APP_DIR);
  for (const f of allFiles) await parseFile(f);
  return allFiles;
}

/** DFS to collect all transitive deps of a root file */
function collectDeps(root) {
  const seen = new Set(), out = new Set();
  (function dfs(fp) {
    if (seen.has(fp)) return;
    seen.add(fp);
    for (const dep of fileGraph[fp] || []) {
      if (dep.startsWith(APP_DIR)) {
        out.add(dep);
        dfs(dep);
      }
    }
  })(root);
  out.delete(root);
  return Array.from(out).sort();
}

/** Generate clustered, filtered Graphviz DOT (routes→containers→components) */
function generateDot() {
  const containers = new Set();
  const components = new Set();
  let edges = '';

  // 1) Direct containers from routes.jsx
  (fileGraph[ENTRY_FILE] || []).forEach((d) => {
    if (d.includes('/containers/')) {
      const c = path.relative(APP_DIR, d);
      containers.add(c);
      edges += `"routes.jsx" -> "${c}";\n`;
    }
  });

  // 2) Components from each container
  containers.forEach((cRel) => {
    const abs = path.join(APP_DIR, cRel);
    (fileGraph[abs] || []).forEach((d) => {
      if (d.includes('/components/') && !d.includes('/test')) {
        const comp = path.relative(APP_DIR, d);
        components.add(comp);
        edges += `"${cRel}" -> "${comp}";\n`;
      }
    });
  });

  return `
digraph G {
  rankdir=TB;
  node [fontname="Arial"];

  subgraph cluster_pages {
    label="Entry";
    color=lightgrey;
    "routes.jsx";
  }

  subgraph cluster_containers {
    label="Containers";
    color=blue;
    ${[...containers].map(c => `"${c}";`).join('\n    ')}
  }

  subgraph cluster_components {
    label="Components";
    color=green;
    ${[...components].map(c => `"${c}";`).join('\n    ')}
  }

  // edges
  ${edges}
}
`;
}

/** Generate self‑contained HTML with inline DOT, legend & Viz.js */
function generateHtml(dot) {
  const dotJs = JSON.stringify(dot);
  return `<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8"/>
  <title>Claims‑Status Dependency Graph</title>
  <style>
    body { margin:0; }
    #graph { width:100vw; height:100vh; }
    #legend {
      position:absolute; top:10px; left:10px;
      background:white; padding:8px; border:1px solid #ccc;
      font-family:sans-serif; font-size:14px;
    }
    #legend div { margin-bottom:4px; }
    #legend span { display:inline-block; width:12px; height:12px; margin-right:6px; vertical-align:middle; }
  </style>
  <script src="https://unpkg.com/[email protected]/viz.js"></script>
  <script src="https://unpkg.com/[email protected]/full.render.js"></script>
</head>
<body>
  <div id="legend">
    <div><span style="background:lightgrey;"></span>Entry (routes.jsx)</div>
    <div><span style="background:blue;"></span>Containers</div>
    <div><span style="background:green;"></span>Components</div>
  </div>
  <div id="graph"></div>
  <div id="error" style="color:red;padding:1rem;font-family:sans-serif;"></div>
  <script>
    const dot = ${dotJs};
    const viz = new Viz();
    viz.renderSVGElement(dot)
      .then(svg => document.getElementById('graph').appendChild(svg))
      .catch(err => {
        console.error(err);
        document.getElementById('error').textContent = 'Error: ' + err.message;
      });
  </script>
</body>
</html>`;
}

// —— MAIN ——
(async function main() {
  const allFiles = await buildGraph();
  const total    = allFiles.length;
  const routes   = (fileGraph[ENTRY_FILE] || []).filter(f => f.startsWith(APP_DIR));

  // — Markdown report —
  let md = '# Claims‑Status File Relationship Map\n\n';
  md += '## 🔍 Scan Summary\n\n';
  md += `- **Files scanned:** ${total}\n`;
  md += `- **Entry file:** \`${path.relative(process.cwd(), ENTRY_FILE)}\`\n`;
  md += `- **Direct route components:** ${routes.length}\n`;
  md += `- **Feature‑toggle refs:** ${collectedToggles.length}\n\n`;

  md += '## 🗺️ Routes & Dependencies\n\n';
  routes.forEach((r) => {
    md += `### \`${path.relative(APP_DIR, r)}\`\n\n`;
    const deps = collectDeps(r);
    if (deps.length) {
      deps.forEach(d => {
        md += `- \`${path.relative(APP_DIR, d)}\`\n`;
      });
    } else {
      md += '_No local dependencies_\n';
    }
    md += '\n';
  });

  md += '## 🚩 Feature Toggles\n\n';
  md += '| File | Toggle Name |\n| ---- | ----------- |\n';
  collectedToggles.forEach(({ file, toggle }) => {
    md += `| \`${path.relative(APP_DIR, file)}\` | \`${toggle}\` |\n`;
  });

  fs.writeFileSync('claims-status-report.md', md, 'utf8');

  // — DOT & HTML outputs —
  const dot  = generateDot();
  fs.writeFileSync('claims-status-graph.dot', dot, 'utf8');

  const html = generateHtml(dot);
  fs.writeFileSync('claims-status-graph.html', html, 'utf8');

  console.log('✅ Generated:');
  console.log('  • claims-status-report.md');
  console.log('  • claims-status-graph.dot');
  console.log('  • claims-status-graph.html');
})().catch(err => {
  console.error(err);
  process.exit(1);
});```

run

node scripts/map-claims-status-relations.js
npx http-server . -p 8000

 

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment