diff --git a/src/utils/hendelseFilteringUtils.tsx b/src/utils/hendelseFilteringUtils.tsx index e4401d73..2c915b4f 100644 --- a/src/utils/hendelseFilteringUtils.tsx +++ b/src/utils/hendelseFilteringUtils.tsx @@ -184,7 +184,7 @@ export const getSortedEventsFromSortingType = ( return sortEventsOnVeileder(personregister, veiledere, type); case 'UKE_ASC': case 'UKE_DESC': - return sortEventsOnWeek(personregister, type); + return sortEventsOnTilfelleVarighet(personregister, type); case 'DATO_ASC': case 'DATO_DESC': return sortEventsOnFrist(personregister, type); @@ -289,27 +289,43 @@ const sortEventsOnName = ( : Object.fromEntries(sorted.reverse()); }; -const sortEventsOnWeek = ( +const sortEventsOnTilfelleVarighet = ( personregister: PersonregisterState, order: SortingType ): PersonregisterState => { const sorted = Object.entries(personregister).sort( ([, persondataA], [, persondataB]) => { - const startDateA = - persondataA.latestOppfolgingstilfelle?.oppfolgingstilfelleStart; - const startDateB = - persondataB.latestOppfolgingstilfelle?.oppfolgingstilfelleStart; - if (!startDateA) return order === 'UKE_ASC' ? -1 : 1; - if (!startDateB) return order === 'UKE_ASC' ? 1 : -1; - if (startDateA > startDateB) return order === 'UKE_ASC' ? -1 : 1; - if (startDateA < startDateB) return order === 'UKE_ASC' ? 1 : -1; - return 0; + const varighetA = persondataA.latestOppfolgingstilfelle?.varighetUker; + const varighetB = persondataB.latestOppfolgingstilfelle?.varighetUker; + if (!varighetA) return order === 'UKE_ASC' ? -1 : 1; + if (!varighetB) return order === 'UKE_ASC' ? 1 : -1; + const compareVarighet = + order === 'UKE_ASC' ? varighetA - varighetB : varighetB - varighetA; + return compareVarighet === 0 + ? compareTilfelleStart(persondataA, persondataB, order) + : compareVarighet; } ); return Object.fromEntries(sorted); }; +const compareTilfelleStart = ( + persondataA: PersonData, + persondataB: PersonData, + order: SortingType +) => { + const startDateA = + persondataA.latestOppfolgingstilfelle?.oppfolgingstilfelleStart; + const startDateB = + persondataB.latestOppfolgingstilfelle?.oppfolgingstilfelleStart; + if (!startDateA) return order === 'UKE_ASC' ? -1 : 1; + if (!startDateB) return order === 'UKE_ASC' ? 1 : -1; + if (startDateA > startDateB) return order === 'UKE_ASC' ? -1 : 1; + if (startDateA < startDateB) return order === 'UKE_ASC' ? 1 : -1; + return 0; +}; + const sortEventsOnFrist = ( personregister: PersonregisterState, order: 'DATO_ASC' | 'DATO_DESC' diff --git a/test/utils/hendelseFilteringUtilsTest.ts b/test/utils/hendelseFilteringUtilsTest.ts index 69c57145..b67d5dec 100644 --- a/test/utils/hendelseFilteringUtilsTest.ts +++ b/test/utils/hendelseFilteringUtilsTest.ts @@ -82,6 +82,112 @@ describe('hendelseFilteringUtils', () => { expect(Object.values(result)[1]?.navn).to.deep.equal('Bjarne Bjarne'); expect(Object.values(result)[2]?.navn).to.deep.equal('Agnes Agnes'); }); + + describe('sort by sykefravar varighet uker', () => { + const personWithLongestVarighet: PersonData = { + ...createPersonDataWithName('Agnes Agnes'), + latestOppfolgingstilfelle: { + varighetUker: 10, + virksomhetList: [], + oppfolgingstilfelleStart: new Date('2023-01-01'), + oppfolgingstilfelleEnd: new Date('2023-03-15'), + }, + }; + const personWithShortestVarighet: PersonData = { + ...createPersonDataWithName('Bjarne Bjarne'), + latestOppfolgingstilfelle: { + varighetUker: 4, + virksomhetList: [], + oppfolgingstilfelleStart: new Date('2023-02-01'), + oppfolgingstilfelleEnd: new Date('2023-02-28'), + }, + }; + const personWithEarliestTilfelleStart: PersonData = { + ...createPersonDataWithName('Agnes Agnes'), + latestOppfolgingstilfelle: { + varighetUker: 8, + virksomhetList: [], + oppfolgingstilfelleStart: new Date('2023-01-01'), + oppfolgingstilfelleEnd: new Date('2023-03-01'), + }, + }; + const personWithLatestTilfelleStart: PersonData = { + ...createPersonDataWithName('Bjarne Bjarne'), + latestOppfolgingstilfelle: { + varighetUker: 8, + virksomhetList: [], + oppfolgingstilfelleStart: new Date('2023-02-01'), + oppfolgingstilfelleEnd: new Date('2023-04-01'), + }, + }; + + it('sorts by varighet uker ascending', () => { + const result = getSortedEventsFromSortingType( + { + '09128034883': personWithLongestVarighet, + '16624407794': personWithShortestVarighet, + }, + [], + 'UKE_ASC' + ); + expect(Object.values(result)[0]?.navn).to.deep.equal( + personWithShortestVarighet.navn + ); + expect(Object.values(result)[1]?.navn).to.deep.equal( + personWithLongestVarighet.navn + ); + }); + + it('sorts by varighet uker descending', () => { + const result = getSortedEventsFromSortingType( + { + '09128034883': personWithLongestVarighet, + '16624407794': personWithShortestVarighet, + }, + [], + 'UKE_DESC' + ); + expect(Object.values(result)[0]?.navn).to.deep.equal( + personWithLongestVarighet.navn + ); + expect(Object.values(result)[1]?.navn).to.deep.equal( + personWithShortestVarighet.navn + ); + }); + + it('sorts by tilfelle-start if equal varighet uker ascending', () => { + const result = getSortedEventsFromSortingType( + { + '09128034883': personWithEarliestTilfelleStart, + '16624407794': personWithLatestTilfelleStart, + }, + [], + 'UKE_ASC' + ); + expect(Object.values(result)[0]?.navn).to.deep.equal( + personWithLatestTilfelleStart.navn + ); + expect(Object.values(result)[1]?.navn).to.deep.equal( + personWithEarliestTilfelleStart.navn + ); + }); + it('sorts by tilfelle-start if equal varighet uker descending', () => { + const result = getSortedEventsFromSortingType( + { + '09128034883': personWithEarliestTilfelleStart, + '16624407794': personWithLatestTilfelleStart, + }, + [], + 'UKE_DESC' + ); + expect(Object.values(result)[0]?.navn).to.deep.equal( + personWithEarliestTilfelleStart.navn + ); + expect(Object.values(result)[1]?.navn).to.deep.equal( + personWithLatestTilfelleStart.navn + ); + }); + }); describe('sort by frist', () => { it('Sorts by aktivitetskrav avventer-frist ascending', () => { const personWithEarliestFrist: PersonData = {