Skip to content

Commit a9d966b

Browse files
author
Anders Rognstad
committed
IS-1710: Move avventer dato to frist column with icon
1 parent 5db9f38 commit a9d966b

File tree

9 files changed

+111
-46
lines changed

9 files changed

+111
-46
lines changed

mock/data/personoversiktEnhetMock.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ export const personoversiktEnhetMock: PersonOversiktStatusDTO[] = [
114114
aktivitetskrav: AktivitetskravStatus.AVVENT,
115115
aktivitetskravActive: false,
116116
aktivitetskravSistVurdert: new Date('2022-12-01T10:12:05.913826'),
117-
aktivitetskravVurderingFrist: null,
117+
aktivitetskravVurderingFrist: new Date('2022-12-10'),
118118
oppfolgingsplanLPSBistandUbehandlet: null,
119119
dialogmotekandidat: undefined,
120120
motestatus: undefined,
@@ -159,7 +159,7 @@ export const personoversiktEnhetMock: PersonOversiktStatusDTO[] = [
159159
aktivitetskrav: AktivitetskravStatus.AVVENT,
160160
aktivitetskravActive: false,
161161
aktivitetskravSistVurdert: new Date('2022-12-01T10:12:05.913826'),
162-
aktivitetskravVurderingFrist: null,
162+
aktivitetskravVurderingFrist: new Date('2022-12-10'),
163163
dialogmotesvarUbehandlet: false,
164164
behandlerdialogUbehandlet: false,
165165
aktivitetskravVurderStansUbehandlet: false,
@@ -232,7 +232,7 @@ export const personoversiktEnhetMock: PersonOversiktStatusDTO[] = [
232232
aktivitetskrav: AktivitetskravStatus.AVVENT,
233233
aktivitetskravActive: false,
234234
aktivitetskravSistVurdert: new Date('1984-01-19T10:12:05.913826'),
235-
aktivitetskravVurderingFrist: null,
235+
aktivitetskravVurderingFrist: new Date('2023-12-10'),
236236
behandlerdialogUbehandlet: false,
237237
aktivitetskravVurderStansUbehandlet: false,
238238
trengerOppfolging: false,
@@ -322,7 +322,7 @@ export const personoversiktEnhetMock: PersonOversiktStatusDTO[] = [
322322
aktivitetskrav: AktivitetskravStatus.AVVENT,
323323
aktivitetskravActive: false,
324324
aktivitetskravSistVurdert: new Date('2022-12-01T10:12:05.913826'),
325-
aktivitetskravVurderingFrist: null,
325+
aktivitetskravVurderingFrist: new Date('2022-12-10'),
326326
behandlerdialogUbehandlet: false,
327327
aktivitetskravVurderStansUbehandlet: false,
328328
trengerOppfolging: false,
@@ -527,7 +527,7 @@ export const personoversiktEnhetMock: PersonOversiktStatusDTO[] = [
527527
aktivitetskrav: AktivitetskravStatus.AVVENT,
528528
aktivitetskravActive: false,
529529
aktivitetskravSistVurdert: new Date('2020-12-01T10:12:05.913826'),
530-
aktivitetskravVurderingFrist: null,
530+
aktivitetskravVurderingFrist: new Date('2022-12-10'),
531531
behandlerdialogUbehandlet: false,
532532
aktivitetskravVurderStansUbehandlet: false,
533533
trengerOppfolging: false,
@@ -556,7 +556,7 @@ export const personoversiktEnhetMock: PersonOversiktStatusDTO[] = [
556556
aktivitetskrav: AktivitetskravStatus.AVVENT,
557557
aktivitetskravActive: false,
558558
aktivitetskravSistVurdert: new Date('2022-12-01T10:12:05.913826'),
559-
aktivitetskravVurderingFrist: null,
559+
aktivitetskravVurderingFrist: new Date('2022-12-20'),
560560
dialogmotesvarUbehandlet: false,
561561
behandlerdialogUbehandlet: false,
562562
aktivitetskravVurderStansUbehandlet: false,

package-lock.json

Lines changed: 7 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
"author": "DigiSyfo <[email protected]>",
2323
"license": "ISC",
2424
"dependencies": {
25+
"@navikt/aksel-icons": "5.11.2",
2526
"@navikt/ds-css": "5.11.1",
2627
"@navikt/ds-react": "5.11.1",
2728
"@navikt/fnrvalidator": "1.1.4",

src/components/FristColumn.tsx

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import { PersonData } from '@/api/types/personregisterTypes';
2+
import { toReadableDate } from '@/utils/dateUtils';
3+
import { HourglassTopFilledIcon } from '@navikt/aksel-icons';
4+
import React from 'react';
5+
import { AktivitetskravStatus } from '@/api/types/personoversiktTypes';
6+
import { Tooltip } from '@navikt/ds-react';
7+
import styled from 'styled-components';
8+
9+
const FristColumnWrapper = styled.div`
10+
display: flex;
11+
`;
12+
13+
interface FristColumnProps {
14+
personData: PersonData;
15+
}
16+
17+
export const FristColumn = ({ personData }: FristColumnProps) => {
18+
const showAvventerFrist =
19+
personData.aktivitetskrav === AktivitetskravStatus.AVVENT;
20+
21+
return (
22+
<FristColumnWrapper>
23+
{showAvventerFrist && (
24+
<>
25+
<Tooltip content="Avventer" arrow={false}>
26+
<HourglassTopFilledIcon aria-hidden fontSize="1.5rem" />
27+
</Tooltip>
28+
{toReadableDate(personData.aktivitetskravVurderingFrist)}
29+
</>
30+
)}
31+
</FristColumnWrapper>
32+
);
33+
};

src/components/Labels.tsx

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,7 @@ import React from 'react';
22
import { PersonData } from '@/api/types/personregisterTypes';
33
import { getReadableSkjermingskode } from '@/utils/personDataUtil';
44
import styled from 'styled-components';
5-
import { AktivitetskravStatus } from '@/api/types/personoversiktTypes';
6-
import { EtikettFokus } from 'nav-frontend-etiketter';
7-
import { toReadableDate } from '@/utils/dateUtils';
5+
import { Tag } from '@navikt/ds-react';
86

97
const LabelColumnWrapper = styled.div`
108
padding: 0.5em 0;
@@ -21,24 +19,13 @@ interface LabelColumnProps {
2119
export const Labels = ({ personData }: LabelColumnProps) => {
2220
const showSkjermingskode =
2321
personData.skjermingskode && personData.skjermingskode !== 'INGEN';
24-
const showAktivitetskrav =
25-
personData.aktivitetskrav === AktivitetskravStatus.AVVENT;
26-
const avventerDato = personData.aktivitetskravVurderingFrist;
2722

2823
return (
2924
<LabelColumnWrapper>
3025
{showSkjermingskode && (
31-
<EtikettFokus mini>
26+
<Tag variant="warning" size="small">
3227
{getReadableSkjermingskode(personData.skjermingskode)}
33-
</EtikettFokus>
34-
)}
35-
36-
{showAktivitetskrav && (
37-
<EtikettFokus mini>
38-
{avventerDato
39-
? `Avventer (${toReadableDate(avventerDato)})`
40-
: 'Avventer'}
41-
</EtikettFokus>
28+
</Tag>
4229
)}
4330
</LabelColumnWrapper>
4431
);

src/components/Personrad.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import { getEarliestDate, getWeeksBetween } from '@/utils/dateUtils';
1414
import { PersonRadVirksomhetColumn } from '@/components/PersonRadVirksomhetColumn';
1515
import { Labels } from '@/components/Labels';
1616
import { OppfolgingstilfelleDTO } from '@/api/types/personoversiktTypes';
17+
import { FristColumn } from '@/components/FristColumn';
1718

1819
interface PersonradProps {
1920
fnr: string;
@@ -95,7 +96,7 @@ export const Personrad = (props: PersonradProps): ReactElement => {
9596
}}
9697
/>
9798
</Column>
98-
<Column xs={'3'}>{lenkeTilModiaEnkeltperson(personData, onClick)}</Column>
99+
<Column xs={'2'}>{lenkeTilModiaEnkeltperson(personData, onClick)}</Column>
99100
<Column xs={'2'}>
100101
{lenkeTilModiaEnkeltpersonFnr(personData, fnr, onClick)}
101102
</Column>
@@ -104,6 +105,9 @@ export const Personrad = (props: PersonradProps): ReactElement => {
104105
</Column>
105106
<Column xs={'2'}>{veilederName}</Column>
106107
<Column xs={'1'}>{oppfolgingstilfelleLengthInWeeks}</Column>
108+
<Column xs={'1'}>
109+
<FristColumn personData={personData} />
110+
</Column>
107111
<Column xs={'2'}>
108112
<Labels personData={personData} />
109113
</Column>

src/components/Sorteringsrad.tsx

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ const tekster = {
1414
overskriftBruker: 'Bruker',
1515
overskriftVeileder: 'Veileder',
1616
virksomhet: 'Virksomhet',
17-
varighetSykefravar: 'Varighet sykefravær',
17+
varighetSykefravar: 'Sykefravær',
18+
frist: 'Frist',
1819
};
1920

2021
export const GrayChevron = styled(Chevron)`
@@ -116,7 +117,7 @@ const Sorteringsrad = ({ onSortClick }: SortingRowProps): ReactElement => {
116117
extraText: <p>, Fornavn</p>,
117118
sortingTypeAsc: 'NAME_ASC',
118119
sortingTypeDesc: 'NAME_DESC',
119-
xs: '3',
120+
xs: '2',
120121
},
121122
{
122123
sortingText: tekster.fodselsnummer,
@@ -146,6 +147,13 @@ const Sorteringsrad = ({ onSortClick }: SortingRowProps): ReactElement => {
146147
sortingTypeDesc: 'UKE_DESC',
147148
xs: '1',
148149
},
150+
{
151+
sortingText: tekster.frist,
152+
extraText: null,
153+
sortingTypeAsc: 'DATO_ASC',
154+
sortingTypeDesc: 'DATO_DESC',
155+
xs: '1',
156+
},
149157
];
150158

151159
return (

src/utils/hendelseFilteringUtils.tsx

Lines changed: 42 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -156,25 +156,37 @@ export type SortingType =
156156
| 'VEILEDER_DESC'
157157
| 'UKE_ASC'
158158
| 'UKE_DESC'
159+
| 'DATO_ASC'
160+
| 'DATO_DESC'
159161
| 'NONE';
160162

161163
export const getSortedEventsFromSortingType = (
162164
personregister: PersonregisterState,
163165
veiledere: Veileder[],
164166
type: SortingType
165167
): PersonregisterState => {
166-
if (type === 'NAME_ASC' || type === 'NAME_DESC') {
167-
return sortEventsOnName(personregister, type);
168-
} else if (type === 'FNR_ASC' || type === 'FNR_DESC') {
169-
return sortEventsOnFnr(personregister, type);
170-
} else if (type === 'COMPANY_ASC' || type === 'COMPANY_DESC') {
171-
return sortEventsOnCompanyName(personregister, type);
172-
} else if (type === 'VEILEDER_ASC' || type === 'VEILEDER_DESC') {
173-
return sortEventsOnVeileder(personregister, veiledere, type);
174-
} else if (type === 'UKE_ASC' || type === 'UKE_DESC') {
175-
return sortEventsOnWeek(personregister, type);
168+
switch (type) {
169+
case 'NAME_ASC':
170+
case 'NAME_DESC':
171+
return sortEventsOnName(personregister, type);
172+
case 'FNR_ASC':
173+
case 'FNR_DESC':
174+
return sortEventsOnFnr(personregister, type);
175+
case 'COMPANY_ASC':
176+
case 'COMPANY_DESC':
177+
return sortEventsOnCompanyName(personregister, type);
178+
case 'VEILEDER_ASC':
179+
case 'VEILEDER_DESC':
180+
return sortEventsOnVeileder(personregister, veiledere, type);
181+
case 'UKE_ASC':
182+
case 'UKE_DESC':
183+
return sortEventsOnWeek(personregister, type);
184+
case 'DATO_ASC':
185+
case 'DATO_DESC':
186+
return sortEventsOnFrist(personregister, type);
187+
case 'NONE':
188+
return personregister;
176189
}
177-
return personregister;
178190
};
179191

180192
const sortVeiledereByLastName = (
@@ -293,3 +305,22 @@ const sortEventsOnWeek = (
293305

294306
return Object.fromEntries(sorted);
295307
};
308+
309+
const sortEventsOnFrist = (
310+
personregister: PersonregisterState,
311+
order: 'DATO_ASC' | 'DATO_DESC'
312+
): PersonregisterState => {
313+
const sorted = Object.entries(personregister).sort(
314+
([, persondataA], [, persondataB]) => {
315+
const fristDateA = persondataA.aktivitetskravVurderingFrist;
316+
const fristDateB = persondataB.aktivitetskravVurderingFrist;
317+
if (!fristDateA) return order === 'DATO_ASC' ? -1 : 1;
318+
if (!fristDateB) return order === 'DATO_ASC' ? 1 : -1;
319+
if (fristDateA > fristDateB) return order === 'DATO_ASC' ? -1 : 1;
320+
if (fristDateA < fristDateB) return order === 'DATO_ASC' ? 1 : -1;
321+
return 0;
322+
}
323+
);
324+
325+
return Object.fromEntries(sorted);
326+
};

test/components/Personrad.test.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -105,16 +105,16 @@ describe('Personrad', () => {
105105
expect(screen.getByText('diskresjonsmerket')).to.exist;
106106
});
107107

108-
it('Skal rendre label med frist-dato for aktivitetskrav AVVENT', () => {
108+
it('Skal rendre frist-dato for aktivitetskrav AVVENT', () => {
109109
renderPersonrad(personDataAktivitetskravAvventMedFrist);
110110

111-
expect(screen.getByText('Avventer (01.04.2023)')).to.exist;
111+
expect(screen.getByText('01.04.2023')).to.exist;
112112
});
113113

114-
it('Skal rendre label uten frist-dato for aktivitetskrav AVVENT når frist mangler', () => {
114+
it('Rendrer ingen frist-dato for aktivitetskrav AVVENT når frist mangler', () => {
115115
renderPersonrad(personDataAktivitetskravAvventUtenFrist);
116116

117-
expect(screen.getByText('Avventer')).to.exist;
117+
expect(screen.queryByText('01.04.2023')).to.not.exist;
118118
});
119119

120120
it('Viser riktig utregning av varighet på sykefraværet', () => {

0 commit comments

Comments
 (0)