Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Filing process routing - Phase 2 (Live data) #406

Merged
merged 54 commits into from
Apr 30, 2024
Merged
Show file tree
Hide file tree
Changes from 38 commits
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
8688b34
fix: [axiosService] Add missing POST parameter
meissadia Apr 2, 2024
6822d26
[Filing Routing] Phase 1 - Mock Filing progress
meissadia Apr 5, 2024
9849158
[Filing Routing] Phase 1 - Separate routes per step
meissadia Apr 5, 2024
fea91e3
fix: axiosService.request - remove unneeded `data` param in favor of …
meissadia Apr 9, 2024
46971d5
fix: useMemo to avoid duplicate placeholder objects being generated
meissadia Apr 9, 2024
2c2de5f
fix: FilingStepWrapper.helpers - remove unused eslint rule disables
meissadia Apr 9, 2024
bc14e84
[Filing Routing] Phase 1 - Mock Filing progress
meissadia Apr 5, 2024
2cbd121
[Filing Routing] Phase 1 - Separate routes per step
meissadia Apr 5, 2024
e7d28d1
fix: useMemo to avoid duplicate placeholder objects being generated
meissadia Apr 9, 2024
9c52113
fix: FilingStepWrapper.helpers - remove unused eslint rule disables
meissadia Apr 9, 2024
d912fc7
Update imports after rebase
meissadia Apr 9, 2024
9257eb7
Update imports after rebase part 2
meissadia Apr 9, 2024
c60e6e6
Add "tasks" to our mock filing
meissadia Apr 9, 2024
2867e7b
Sync axiosService file
meissadia Apr 9, 2024
cd9a385
Filing step - Display "current" highlight even if step is incomplete
meissadia Apr 9, 2024
b937bc4
Filing - Placeholder for "is step complete?" status
meissadia Apr 9, 2024
5b6c4f3
Filing step - Improve spacing between step indicators
meissadia Apr 10, 2024
c0be487
Filing steps - Remove custom hook that contained routes, which helps …
meissadia Apr 10, 2024
f66f7b3
Merge branch 'main' into 331-filing-routing_phase1-mock-data
meissadia Apr 10, 2024
0c0d989
Filing steps - Revamp flex alignment of page elements
meissadia Apr 10, 2024
cd69c7b
[ScreenReaderOnly] Component: Extract from Filing step indicator code…
meissadia Apr 10, 2024
e64c41c
Filing steps - More dynamic routes (year and lei from the url)
meissadia Apr 10, 2024
a0dcab9
Filing steps - Add TODO to check on StepIndicator widths
meissadia Apr 10, 2024
74506f3
Merge branch 'main' into 331-filing-routing_phase1-mock-data
meissadia Apr 11, 2024
f8f1bdc
fix: [axiosService] Always include "body" for post/put/patch requests
meissadia Apr 18, 2024
502c82c
feat: [API]
meissadia Apr 18, 2024
152ceb6
feat: [FilingOverview] Determine and link to next incomplete step
meissadia Apr 19, 2024
4ebc759
feat: [Filing] Display current Institution's progress within the subm…
meissadia Apr 19, 2024
a0fa68b
feat: [Filing] Placeholder pages for Filing steps
meissadia Apr 19, 2024
77c7ea0
fix: [Institution card] Routing logic for a Submissio n with a previo…
meissadia Apr 19, 2024
e2ca8d2
feat: [FileSubmission] Integrate Filing step indicator and navigation…
meissadia Apr 19, 2024
3b1f9a7
Merge branch 'main' into 331-filing-routing_phase2-live-data
meissadia Apr 22, 2024
45c787c
feat: [Filing Steps] Split out the FilingSteps and FilingNavButtons i…
meissadia Apr 25, 2024
d6a0aa8
fix: [Filing Steps] Adjust font color/weight based on step status
meissadia Apr 25, 2024
26799d8
Merge branch 'main' into 331-filing-routing_phase2-live-data
meissadia Apr 25, 2024
be097dd
Merge main
meissadia Apr 26, 2024
dc1e91f
task: More compact error/loading checks
meissadia Apr 26, 2024
9baf597
fix(Upload - Infinite Loading): adjusted the useGetLatestSubmission s…
shindigira Apr 26, 2024
a7caaf4
alternative solution to react-query settings changes on useGetSubmiss…
shindigira Apr 27, 2024
3b0e54f
removed unnecessary variable
shindigira Apr 27, 2024
1d1bf6e
removed unusued
shindigira Apr 27, 2024
d70c852
best solution for initial check
shindigira Apr 27, 2024
47b360a
disabled refetch on window focus
shindigira Apr 27, 2024
527bbf1
task: [useFilingAndSubmissionInfo] Simplify fetching logic
meissadia Apr 29, 2024
211a45f
fix: [FileSubmission] New Filers get stuck in "Loading" state on init…
meissadia Apr 29, 2024
95f6108
task: [useFilingAndSubmissionInfo] Set staletime to 0
meissadia Apr 29, 2024
8438199
task: [useFilingAndSubmissionInfo] Utilize useGetSubmissionLatest hook
meissadia Apr 29, 2024
614ca43
task: [fetchSubmissionLatest] Delete
meissadia Apr 29, 2024
4612751
Merge branch 'main' into 331-filing-routing_phase2-live-data
meissadia Apr 29, 2024
17b71eb
task: Utilize some of the Design System colors that have been integra…
meissadia Apr 29, 2024
d661744
fix: [useFilingAndSubmissionInfo] Ensure Filing is created before fet…
meissadia Apr 29, 2024
963a7ca
task: Use fetchFilingSubmissionLatest
meissadia Apr 29, 2024
ece66c6
task: Extend FilingStatusAsString enum
meissadia Apr 30, 2024
f6fb212
task: Cleanup unused code
meissadia Apr 30, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
9 changes: 0 additions & 9 deletions src/App.tsx
Expand Up @@ -17,7 +17,6 @@ import FilingContact from 'pages/Filing/FilingApp/FilingContact';
import FilingErrors from 'pages/Filing/FilingApp/FilingErrors';
import FilingOverview from 'pages/Filing/FilingApp/FilingOverviewPage';
import FilingSubmit from 'pages/Filing/FilingApp/FilingSubmit';
import FilingUpload from 'pages/Filing/FilingApp/FilingUpload';
import FilingWarnings from 'pages/Filing/FilingApp/FilingWarnings';
import UpdateFinancialProfile from 'pages/Filing/UpdateFinancialProfile';
import ViewUserProfile from 'pages/Filing/ViewUserProfile';
Expand Down Expand Up @@ -198,14 +197,6 @@ export default function App(): ReactElement {
</ProtectedRoute>
}
/>
<Route
path='/filing/:year/:lei/upload-w-status'
element={
<ProtectedRoute {...ProtectedRouteAuthorizations}>
<FilingUpload />
</ProtectedRoute>
}
/>
<Route
path='/filing/:year/:lei/errors'
element={
Expand Down
1 change: 0 additions & 1 deletion src/api/oidc.ts
@@ -1,4 +1,3 @@

export interface OidcConfig {
authority: string;
client_id: string;
Expand Down
18 changes: 18 additions & 0 deletions src/api/requests/createFiling.ts
@@ -0,0 +1,18 @@
import { request } from 'api/axiosService';
import type { SblAuthProperties } from 'api/useSblAuth';
import type { FilingPeriodType, FilingType } from 'types/filingTypes';

export const createFiling = async (
auth: SblAuthProperties,
lei: string,
filingPeriod: FilingPeriodType,
): Promise<FilingType> => {
return request<FilingType>({
url: `/v1/filing/institutions/${lei}/filings/${filingPeriod}`,
method: 'post',
headers: { Authorization: `Bearer ${auth.user?.access_token}` },
body: 'no-body',
});
};

export default createFiling;
18 changes: 18 additions & 0 deletions src/api/requests/fetchSubmissionLatest.tsx
@@ -0,0 +1,18 @@
import { request } from 'api/axiosService';
import type { SblAuthProperties } from 'api/useSblAuth';
import type { FilingPeriodType, SubmissionResponse } from 'types/filingTypes';
import type { InstitutionDetailsApiType } from 'types/formTypes';

export const fetchSubmissionLatest = async (
meissadia marked this conversation as resolved.
Show resolved Hide resolved
auth: SblAuthProperties,
lei: InstitutionDetailsApiType['lei'],
filingPeriod: FilingPeriodType,
): Promise<SubmissionResponse> => {
return request({
url: `/v1/filing/institutions/${lei}/filings/${filingPeriod}/submissions/latest`,
method: 'get',
headers: { Authorization: `Bearer ${auth.user?.access_token}` },
});
};

export default fetchSubmissionLatest;
4 changes: 3 additions & 1 deletion src/api/requests/index.ts
@@ -1,9 +1,11 @@
export { default as createFiling } from './createFiling';
export { default as fetchAssociatedInstitutions } from './fetchAssociatedInstitutions';
export { default as fetchFiling } from './fetchFiling';
export { default as fetchInstitutionDetails } from './fetchInstitutionDetails';
export { default as fetchInstitutions } from './fetchInstitutions';
export { default as fetchIsDomainAllowed } from './fetchIsDomainAllowed';
export { default as fetchSubmissionLatest } from './fetchSubmissionLatest';
export { default as fetchUserProfile } from './fetchUserProfile';
export { default as submitUpdateFinancialProfile } from './submitUpdateFinancialProfile';
export { default as submitUserProfile } from './submitUserProfile';
export { default as submitUserProfileFi } from './submitUserProfileFi';

10 changes: 9 additions & 1 deletion src/components/StepIndicator.tsx
Expand Up @@ -58,10 +58,18 @@ export function Step({
}: StepType): JSX.Element {
const statusAdjusted = isCurrent ? STEP_CURRENT : status;
const border = `border-0 border-t-8 border-solid ${stepStyleMap[statusAdjusted]}`;
const font = 'text-lg font-medium';
let font = 'text-lg';
const flex = 'basis-0 grow';
const margin = hasMargin ? 'ml-[0.938rem]' : '';

// Font weight
if (isCurrent) font += ' font-semibold';
else if (status === STEP_COMPLETE) font += ' font-medium';
else font += ' font-normal';

// Font color
font += status === STEP_COMPLETE ? ' text-black' : ' text-grayDark';

return (
<div
aria-current={isCurrent}
Expand Down
65 changes: 37 additions & 28 deletions src/pages/Filing/FilingApp/FileSubmission.tsx
Expand Up @@ -10,11 +10,10 @@ import InlineStatus from 'components/InlineStatus';
import Input from 'components/Input';
import { Link } from 'components/Link';
import SectionIntro from 'components/SectionIntro';
import StepIndicator, { mockSteps } from 'components/StepIndicator';
import { Button, Heading, TextIntroduction } from 'design-system-react';
import type { ChangeEvent } from 'react';
import { useEffect, useRef, useState } from 'react';
import { Navigate, useLocation, useParams } from 'react-router-dom';
import { useLocation, useParams } from 'react-router-dom';
import useGetSubmissionLatest from 'utils/useGetSubmissionLatest';

import type { AxiosResponse } from 'axios';
Expand All @@ -26,18 +25,19 @@ import {
FILE_SIZE_LIMIT_2GB,
FILE_SIZE_LIMIT_ERROR_MESSAGE,
} from 'utils/constants';
import useInstitutionDetails from 'utils/useInstitutionDetails';
import FileDetailsUpload from './FileDetailsUpload';
import FileDetailsValidation from './FileDetailsValidation';
import FileSubmissionAlert from './FileSubmissionAlert';
import type { InstitutionDataType } from './InstitutionCard.types';
import { FilingNavButtons } from './FilingNavButtons';
import { FilingSteps } from './FilingSteps';
import InstitutionHeading from './InstitutionHeading';

export function FileSubmission(): JSX.Element {
const abortController = new AbortController();
const { lei, year } = useParams();
const location = useLocation();
const { state, pathname } = location as {
state: InstitutionDataType;
const { pathname } = location as {
pathname: Location['pathname'];
};

Expand Down Expand Up @@ -114,7 +114,6 @@ export function FileSubmission(): JSX.Element {
);

if (event.target.files && event.target.files.length > 0 && lei && year) {
resetUpload();
mutateUpload({ file: event.target.files[0], fileSizeTest });
}

Expand Down Expand Up @@ -144,8 +143,25 @@ export function FileSubmission(): JSX.Element {
isLoadingUpload ||
isFetchingGetSubmissionLatest ||
!currentSuccess ||
dataGetSubmissionLatest.state ===
FileSubmissionState.SUBMISSION_UPLOAD_MALFORMED;
(dataGetSubmissionLatest.state &&
[
FileSubmissionState.UPLOAD_FAILED,
meissadia marked this conversation as resolved.
Show resolved Hide resolved
FileSubmissionState.SUBMISSION_UPLOAD_MALFORMED,
FileSubmissionState.VALIDATION_ERROR,
FileSubmissionState.VALIDATION_EXPIRED,
].includes(dataGetSubmissionLatest.state));

const {
data: institution,
isLoading: isLoadingInstitution,
isError: isErrorInstitution,
} = useInstitutionDetails(lei);

const institutionName = isLoadingInstitution
? 'Loading...'
: isErrorInstitution
? ''
: institution.name;

/* Cancels pending GetSubmissionLatest retry on unmount */
useEffect(() => {
Expand All @@ -155,21 +171,17 @@ export function FileSubmission(): JSX.Element {
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [pathname]);

/* Incorrect parameters handling - User must click on 'Upload' link otherwise redirect to /filing */
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
if (!state?.name) {
return <Navigate replace to='/filing' />;
}

return (
<div id='file-submission' className='min-h-[80vh]'>
<div className='mx-auto mb-[3.75rem] max-w-[75rem]'>
<StepIndicator steps={mockSteps} />
</div>
<FilingSteps />
<FormWrapper>
<FormHeaderWrapper>
<div className='mb-[0.9375rem]'>
<InstitutionHeading eyebrow name={state.name} filingPeriod={year} />
<InstitutionHeading
eyebrow
name={institutionName}
filingPeriod={year}
/>
</div>
<TextIntroduction
heading='Upload file'
Expand Down Expand Up @@ -425,18 +437,15 @@ export function FileSubmission(): JSX.Element {
</>
) : null}
</FieldGroup>
<Button
className='mt-[1.875rem]'
appearance='primary'
iconRight='right'
label='Save and continue'
// TODO: route to next step
onClick={() => console.log('Save and continue -- clicked!')}
size='default'
disabled={disableButtonCriteria}
/>
</FormMain>
) : null}
<FilingNavButtons
hrefNext={`/filing/${year}/${lei}/errors`}
labelNext='Save and continue'
hrefPrevious='/filing'
labelPrevious='Return to Filing Overview'
isStepComplete={!disableButtonCriteria}
/>
</FormWrapper>
</div>
);
Expand Down
45 changes: 23 additions & 22 deletions src/pages/Filing/FilingApp/FilingComplete.tsx
@@ -1,30 +1,31 @@
import { useMemo } from 'react';
import { Grid } from 'design-system-react';
import { useParams } from 'react-router-dom';
import { FilingStatusAsNumber } from 'types/filingTypes';
import { FilingStepWrapper } from './FilingStepWrapper';
import { createMockFiling } from './FilingStepWrapper.helpers';
import { FilingNavButtons } from './FilingNavButtons';
import { FilingSteps } from './FilingSteps';

function FilingComplete(): JSX.Element {
function FilingSubmit(): JSX.Element {
const { lei, year } = useParams();

const mockFiling = useMemo(
() =>
createMockFiling({
status: FilingStatusAsNumber.SUBMISSION_ACCEPTED,
contact_info: true, // TODO: Should be a Contact object
}),
[],
);

return (
<FilingStepWrapper
heading='Filing - Complete'
hrefPrevious={`/filing/${year}/${lei}/submit`}
currentFiling={mockFiling}
>
FILING SUMMARY CONTENT GOES HERE
</FilingStepWrapper>
<>
<FilingSteps />
<Grid.Wrapper center>
<Grid.Row>
<Grid.Column width={8} className='u-mt15'>
FILING SUMMARY CONTENT GOES HERE
</Grid.Column>
</Grid.Row>
<Grid.Row>
<Grid.Column width={8} className='u-mt15'>
<FilingNavButtons
hrefPrevious={`/filing/${year}/${lei}/submit`}
isStepComplete // TODO: Derive actual step status
/>
</Grid.Column>
</Grid.Row>
</Grid.Wrapper>
</>
);
}

export default FilingComplete;
export default FilingSubmit;
43 changes: 22 additions & 21 deletions src/pages/Filing/FilingApp/FilingContact.tsx
@@ -1,30 +1,31 @@
import { useMemo } from 'react';
import { Grid } from 'design-system-react';
import { useParams } from 'react-router-dom';
import { FilingStatusAsNumber } from 'types/filingTypes';
meissadia marked this conversation as resolved.
Show resolved Hide resolved
import { FilingStepWrapper } from './FilingStepWrapper';
import { createMockFiling } from './FilingStepWrapper.helpers';
import { FilingNavButtons } from './FilingNavButtons';
import { FilingSteps } from './FilingSteps';

function FilingContact(): JSX.Element {
const { lei, year } = useParams();

const mockFiling = useMemo(
() =>
createMockFiling({
status: FilingStatusAsNumber.VALIDATION_WITH_WARNINGS,
contact_info: true, // TODO: Should be a Contact object
}),
[],
);

return (
<FilingStepWrapper
heading='Filing - Point of Contact'
hrefPrevious={`/filing/${year}/${lei}/warnings`}
hrefNext={`/filing/${year}/${lei}/submit`}
currentFiling={mockFiling}
>
CONTACT CONTENT GOES HERE
</FilingStepWrapper>
<>
<FilingSteps />
<Grid.Wrapper center>
<Grid.Row>
<Grid.Column width={8} className='u-mt15'>
CONTACT CONTENT GOES HERE
</Grid.Column>
</Grid.Row>
<Grid.Row>
<Grid.Column width={8} className='u-mt15'>
<FilingNavButtons
hrefPrevious={`/filing/${year}/${lei}/warnings`}
hrefNext={`/filing/${year}/${lei}/submit`}
isStepComplete // TODO: Derive actual step status
/>
</Grid.Column>
</Grid.Row>
</Grid.Wrapper>
</>
);
}

Expand Down
42 changes: 22 additions & 20 deletions src/pages/Filing/FilingApp/FilingErrors.tsx
@@ -1,29 +1,31 @@
import { useMemo } from 'react';
import { Grid } from 'design-system-react';
import { useParams } from 'react-router-dom';
import { FilingStatusAsNumber } from 'types/filingTypes';
import { FilingStepWrapper } from './FilingStepWrapper';
import { createMockFiling } from './FilingStepWrapper.helpers';
import { FilingNavButtons } from './FilingNavButtons';
import { FilingSteps } from './FilingSteps';

function FilingErrors(): JSX.Element {
const { lei, year } = useParams();

const mockFiling = useMemo(
() =>
createMockFiling({
status: FilingStatusAsNumber.VALIDATION_WITH_ERRORS,
}),
[],
);

return (
<FilingStepWrapper
heading='Filing - Errors'
hrefPrevious={`/filing/${year}/${lei}/upload-w-status`}
hrefNext={`/filing/${year}/${lei}/warnings`}
currentFiling={mockFiling}
>
ERROR CONTENT GOES HERE
</FilingStepWrapper>
<>
<FilingSteps />
<Grid.Wrapper center>
<Grid.Row>
<Grid.Column width={8} className='u-mt15'>
ERROR CONTENT GOES HERE
</Grid.Column>
</Grid.Row>
<Grid.Row>
<Grid.Column width={8} className='u-mt15'>
<FilingNavButtons
hrefPrevious={`/filing/${year}/${lei}/upload`}
hrefNext={`/filing/${year}/${lei}/warnings`}
isStepComplete // TODO: Derive actual step status
/>
</Grid.Column>
</Grid.Row>
</Grid.Wrapper>
</>
);
}

Expand Down