Skip to content

Commit

Permalink
1114: add function to sort applications by status
Browse files Browse the repository at this point in the history
  • Loading branch information
f1sh1918 committed Sep 6, 2023
1 parent 9198828 commit 685c6e2
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import formatDateWithTimezone from '../../util/formatDate'
import getApiBaseUrl from '../../util/getApiBaseUrl'
import { useAppToaster } from '../AppToaster'
import JsonFieldView, { GeneralJsonField } from './JsonFieldView'
import VerificationsView, { VerificationsQuickIndicator } from './VerificationsView'
import VerificationsView, { VerificationStatus, VerificationsQuickIndicator, getStatus } from './VerificationsView'
import usePrintApplication from './hooks/usePrintApplication'

export type Application = GetApplicationsQuery['applications'][number]
Expand Down Expand Up @@ -178,13 +178,33 @@ export class ApplicationViewComponent extends React.Component<{
}
}

const sortByStatus = (a: number, b: number): number => {
return a - b
}

const sortByDate = (a: Date, b: Date): number => {
return b.getTime() - a.getTime()
}

const getVerificationStatus = (status: number[]): VerificationStatus => {
if (status.every(val => val === VerificationStatus.Verified)) return VerificationStatus.Verified
if (status.every(val => val === VerificationStatus.Rejected)) return VerificationStatus.Rejected
return VerificationStatus.Awaiting
}

// Applications will be sorted by unique status which means fully verified/rejected and within this status by creation date
const sortApplications = (applications: Application[]): Application[] =>
applications
.map(application => ({ ...application, status: getVerificationStatus(application.verifications.map(getStatus)) }))
.sort((a, b) => sortByStatus(a.status, b.status) || sortByDate(new Date(a.createdDate), new Date(b.createdDate)))

const ApplicationsOverview = (props: { applications: Application[] }) => {
const [updatedApplications, setUpdatedApplications] = useState(props.applications)
const { applicationIdForPrint, printApplicationById } = usePrintApplication()

return (
<FlipMove style={{ display: 'flex', justifyContent: 'center', flexWrap: 'wrap' }}>
{updatedApplications.map(application => (
{sortApplications(updatedApplications).map(application => (
<ApplicationViewComponent
isSelectedForPrint={application.id === applicationIdForPrint}
printApplicationById={printApplicationById}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,10 @@ const verifiedIcon = 'tick-circle'
const rejectedIcon = 'cross-circle'
const awaitingIcon = 'help'

enum VerificationStatus {
export enum VerificationStatus {
Verified,
Awaiting,
Rejected,
Awaiting,
}

const getIconByStatus = (status: VerificationStatus) => {
Expand Down Expand Up @@ -46,7 +46,7 @@ const Indicator = ({ status, text }: { status: VerificationStatus; text: ReactNo
)
}

const getStatus = (verification: Application['verifications'][number]) => {
export const getStatus = (verification: Application['verifications'][number]) => {
if (!!verification.verifiedDate) {
return VerificationStatus.Verified
} else if (!!verification.rejectedDate) {
Expand Down

0 comments on commit 685c6e2

Please sign in to comment.