Skip to content

Commit

Permalink
endre til å lese fra OppgaveFilter fremfor OppgaveTilstand
Browse files Browse the repository at this point in the history
  • Loading branch information
anderslysne committed Feb 26, 2025
1 parent 56cfb4e commit 5394207
Show file tree
Hide file tree
Showing 10 changed files with 85 additions and 106 deletions.
5 changes: 1 addition & 4 deletions src/Pages/Hovedside/SisteSaker.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -43,10 +43,7 @@ const SisteSaker = () => {
tekstsoek: '',
sortering: SakSortering.NyesteFørst,
sakstyper: [],
oppgaveFilter: {
oppgaveTilstand: [],
harPåminnelseUtløst: false,
},
oppgaveFilter: []
});

useSessionStateForside();
Expand Down
5 changes: 1 addition & 4 deletions src/Pages/OrganisasjonsDetaljerProvider.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -35,10 +35,7 @@ export const OrganisasjonsDetaljerProvider: FunctionComponent<{
tekstsoek: '',
sortering: SakSortering.NyesteFørst,
sakstyper: [],
oppgaveFilter: {
oppgaveTilstand: [],
harPåminnelseUtløst: false,
},
oppgaveFilter: [],
});

useEffect(() => {
Expand Down
24 changes: 9 additions & 15 deletions src/Pages/Saksoversikt/FilterChips.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import React, { ReactNode, useMemo, useState } from 'react';
import { Button, Chips, Heading } from '@navikt/ds-react';
import { oppgaveTilstandTilTekst } from './Saksfilter/Saksfilter';
import { filterTypeTilTekst } from './Saksfilter/Saksfilter';
import { VirksomhetChips } from './Saksfilter/VirksomhetChips';
import { Set } from 'immutable';
import { count, flatUtTre } from '../../utils/util';
Expand Down Expand Up @@ -34,10 +34,7 @@ export const FilterChips = () => {
virksomheter: Set(),
sortering: saksoversiktState.filter.sortering,
sakstyper: [],
oppgaveFilter: {
oppgaveTilstand: [],
harPåminnelseUtløst: false,
},
oppgaveFilter: []
});
amplitudeChipClick('tøm-alle-filtre', 'tøm-falle-filtre');
};
Expand Down Expand Up @@ -104,24 +101,21 @@ export const FilterChips = () => {
</Chips.Removable>
)
),
...oppgaveFilter.oppgaveTilstand.map((oppgavetilstand) => (
...oppgaveFilter.map((filterType) => (
<Chips.Removable
variant="neutral"
key={oppgavetilstand}
key={filterType}
onClick={() => {
setFilter({
...saksoversiktState.filter,
oppgaveFilter: {
...oppgaveFilter,
oppgaveTilstand: saksoversiktState.filter.oppgaveFilter.oppgaveTilstand.filter(
(it) => it != oppgavetilstand
),
},
oppgaveFilter: saksoversiktState.filter.oppgaveFilter.filter(
(it) => it != filterType
),
});
amplitudeChipClick('oppgave', oppgavetilstand);
amplitudeChipClick('oppgave', filterType);
}}
>
{oppgaveTilstandTilTekst(oppgavetilstand)}
{filterTypeTilTekst(filterType)}
</Chips.Removable>
)),
//TODO: legg til påminnelse chip
Expand Down
58 changes: 27 additions & 31 deletions src/Pages/Saksoversikt/Saksfilter/Saksfilter.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,17 @@ import { Filter, useSaksoversiktContext } from '../SaksoversiktProvider';
import { gql, TypedDocumentNode, useQuery } from '@apollo/client';
import { ServerError } from '@apollo/client/link/utils';

export const oppgaveTilstandTilTekst = (oppgavetilstand: OppgaveTilstand) => {
switch (oppgavetilstand) {
case OppgaveTilstand.Ny:
export const OppgaveFilterType = {
...OppgaveTilstand,
PåminnelseUtløst: 'NY_MED_PÅMINNELSE_UTLØST',
} as const;

export const filterTypeTilTekst = (oppgaveFilter: string) => {
switch (oppgaveFilter) {
case OppgaveFilterType.Ny:
return 'Uløste oppgaver';
case OppgaveFilterType.PåminnelseUtløst:
return 'Med påminnelse';
default:
return '';
}
Expand Down Expand Up @@ -373,51 +380,40 @@ const OpprettInntektsmelding = () => {

const OppgaveFilter = () => {
const {
saksoversiktState: { filter, oppgaveTilstandInfo },
saksoversiktState: { filter, oppgaveFilterInfo },
transitions: { setFilter },
} = useSaksoversiktContext();

const antallUløsteOppgaver = oppgaveTilstandInfo?.find(
(oppgaveTilstand) => oppgaveTilstand.tilstand === OppgaveTilstand.Ny
)?.antall;
const hentAntallAvType = (type: string) =>
oppgaveFilterInfo?.find((filterInfo) => filterInfo.filterType === type)?.antall ?? 0;

function oppdaterFilter(valgtFilter: any[]) {
const oppgaveFilter = {
harPåminnelseUtløst: valgtFilter.includes('påminnelseUtløst'),
oppgaveTilstand: valgtFilter.filter((e) => Object.values(OppgaveTilstand).includes(e)),
};
setFilter({
...filter,
oppgaveFilter: oppgaveFilter,
});
}

// Litt småfunky hvordan checkboxene må håndteres, da vi ønsker at det skal oppleves som en felles checkbox group samtidig som en av checkboxene skal styre et filter som ikke passer helt inn
const checkboxGroupValue = (
filter.oppgaveFilter.harPåminnelseUtløst ? ['påminnelseUtløst'] : []
).concat(filter.oppgaveFilter.oppgaveTilstand);
const antallUløsteOppgaver = hentAntallAvType(OppgaveFilterType.Ny);
const antallUløsteOppgaverMedPåminnelse = hentAntallAvType(OppgaveFilterType.PåminnelseUtløst);

return (
<>
<CheckboxGroup
value={checkboxGroupValue}
value={filter.oppgaveFilter}
legend={'Oppgaver'}
onChange={(valgteOppgavetilstander) => oppdaterFilter(valgteOppgavetilstander)}
onChange={(valgteOppgavetilstander) =>
setFilter({
...filter,
oppgaveFilter: valgteOppgavetilstander,
})
}
>
<Checkbox
value={OppgaveTilstand.Ny}
value={OppgaveFilterType.Ny}
onClick={(e) => amplitudeFilterKlikk('oppgave', OppgaveTilstand.Ny, e.target)}
>
<BodyShort>
{oppgaveTilstandTilTekst(OppgaveTilstand.Ny)}
{oppgaveTilstandInfo ? ` (${antallUløsteOppgaver ?? '0'})` : ''}
{`${filterTypeTilTekst(OppgaveFilterType.Ny)} (${antallUløsteOppgaver})`}
</BodyShort>
</Checkbox>
{filter.oppgaveFilter.oppgaveTilstand.includes(OppgaveTilstand.Ny) && (
<Checkbox value={'påminnelseUtløst'} className={'underfilter'}>
{filter.oppgaveFilter.includes(OppgaveFilterType.Ny) && (
<Checkbox value={OppgaveFilterType.PåminnelseUtløst} className={'underfilter'}>
<BodyShort>
{'Har påmminelse'}
{' (0)'}
{`${filterTypeTilTekst(OppgaveFilterType.PåminnelseUtløst)} (${antallUløsteOppgaverMedPåminnelse})`}
</BodyShort>
</Checkbox>
)}
Expand Down
40 changes: 12 additions & 28 deletions src/Pages/Saksoversikt/SaksoversiktProvider.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,7 @@ import { SIDE_SIZE } from './Saksoversikt';
import amplitude from '../../utils/amplitude';
import { finnBucketForAntall } from '../../utils/funksjonerForAmplitudeLogging';
import {
OppgaveTilstand,
OppgaveTilstandInfo,
OppgaveFilterInfo,
Sak,
SakerResultat,
SakSortering,
Expand All @@ -23,11 +22,6 @@ import {
import Immutable, { Set } from 'immutable';
import * as Record from '../../utils/Record';

export type OppgaveFilter = {
oppgaveTilstand: OppgaveTilstand[];
harPåminnelseUtløst: boolean;
};

export type SaksoversiktTransitions = {
setFilter: (filter: Filter) => void;
setValgtFilterId: (id: string | undefined) => void;
Expand All @@ -44,7 +38,7 @@ export type SaksoversiktState =
totaltAntallSaker: number | undefined;
forrigeSaker: Array<Sak> | null;
sakstyper: Array<Sakstype> | undefined;
oppgaveTilstandInfo: Array<OppgaveTilstandInfo> | undefined;
oppgaveFilterInfo: Array<OppgaveFilterInfo> | undefined;
startTid: Date;
}
| {
Expand All @@ -55,7 +49,7 @@ export type SaksoversiktState =
saker: Array<Sak>;
sakstyper: Array<Sakstype>;
totaltAntallSaker: number;
oppgaveTilstandInfo: Array<OppgaveTilstandInfo>;
oppgaveFilterInfo: Array<OppgaveFilterInfo>;
}
| {
state: 'error';
Expand All @@ -64,7 +58,7 @@ export type SaksoversiktState =
sider: number | undefined;
sakstyper: Array<Sakstype> | undefined;
totaltAntallSaker: number | undefined;
oppgaveTilstandInfo: Array<OppgaveTilstandInfo> | undefined;
oppgaveFilterInfo: Array<OppgaveFilterInfo> | undefined;
};

export type Filter = {
Expand All @@ -73,10 +67,7 @@ export type Filter = {
tekstsoek: string;
sortering: SakSortering;
sakstyper: string[];
oppgaveFilter: {
oppgaveTilstand: OppgaveTilstand[];
harPåminnelseUtløst: boolean;
};
oppgaveFilter: string[]
};

export type SaksoversiktContext = {
Expand Down Expand Up @@ -122,7 +113,7 @@ export const SaksOversiktProvider: FunctionComponent<PropsWithChildren> = (props
sider: undefined,
totaltAntallSaker: undefined,
sakstyper: undefined,
oppgaveTilstandInfo: undefined,
oppgaveFilterInfo: undefined,
startTid: new Date(),
});

Expand Down Expand Up @@ -196,7 +187,7 @@ const reduce = (current: SaksoversiktState, action: Action): SaksoversiktState =
valgtFilterId: current.valgtFilterId,
sider: current.sider,
sakstyper: current.sakstyper,
oppgaveTilstandInfo: current.oppgaveTilstandInfo,
oppgaveFilterInfo: current.oppgaveFilterInfo,
startTid: new Date(),
totaltAntallSaker: current.totaltAntallSaker,
forrigeSaker: finnForrigeSaker(current),
Expand All @@ -207,12 +198,12 @@ const reduce = (current: SaksoversiktState, action: Action): SaksoversiktState =
filter: current.filter,
valgtFilterId: current.valgtFilterId,
sider: current.sider,
totaltAntallSaker: current.totaltAntallSaker,
sakstyper: current.sakstyper,
oppgaveTilstandInfo: current.oppgaveTilstandInfo,
totaltAntallSaker: current.totaltAntallSaker,
oppgaveFilterInfo: current.oppgaveFilterInfo,
};
case 'lasting-ferdig':
const { totaltAntallSaker, saker, oppgaveTilstandInfo, sakstyper } = action.resultat;
const { totaltAntallSaker, saker, oppgaveFilterInfo, sakstyper } = action.resultat;
const sider = Math.ceil(totaltAntallSaker / SIDE_SIZE);
return {
state: 'done',
Expand All @@ -222,7 +213,7 @@ const reduce = (current: SaksoversiktState, action: Action): SaksoversiktState =
saker: saker,
sakstyper: sakstyper,
totaltAntallSaker: totaltAntallSaker,
oppgaveTilstandInfo: oppgaveTilstandInfo,
oppgaveFilterInfo: oppgaveFilterInfo,
};
}
};
Expand All @@ -238,13 +229,6 @@ const finnForrigeSaker = (state: SaksoversiktState): Array<Sak> | null => {
}
};

export function equalOppgaveFilter(a: OppgaveFilter, b: OppgaveFilter) {
return (
a.harPåminnelseUtløst === b.harPåminnelseUtløst &&
equalAsSets(a.oppgaveTilstand, b.oppgaveTilstand)
);
}

export function equalAsSets(a: string[], b: string[]) {
return a.length === b.length && a.every((aa) => b.includes(aa));
}
Expand All @@ -255,4 +239,4 @@ export const equalFilter = (a: Filter, b: Filter): boolean =>
Immutable.is(a.virksomheter, b.virksomheter) &&
a.sortering === b.sortering &&
equalAsSets(a.sakstyper, b.sakstyper) &&
equalOppgaveFilter(a.oppgaveFilter, b.oppgaveFilter);
equalAsSets(a.oppgaveFilter, b.oppgaveFilter);
18 changes: 6 additions & 12 deletions src/Pages/Saksoversikt/useOversiktSessionStorage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
import { useEffect, useMemo, useState } from 'react';
import { useSearchParams } from 'react-router-dom';
import { useSessionStorage } from '../../hooks/useStorage';
import { equalAsSets, equalOppgaveFilter, Filter, OppgaveFilter } from './SaksoversiktProvider';
import { OppgaveTilstand, SakSortering } from '../../api/graphql-types';
import { equalAsSets, Filter } from './SaksoversiktProvider';
import { SakSortering } from '../../api/graphql-types';
import { Set } from 'immutable';
import amplitude from '../../utils/amplitude';
import { z } from 'zod';
Expand All @@ -20,7 +20,7 @@ type SessionStateSaksoversikt = {
virksomhetsnumre: string[] | 'ALLEBEDRIFTER';
sortering: SakSortering;
sakstyper: string[];
oppgaveFilter: OppgaveFilter;
oppgaveFilter: string[];
valgtFilterId?: string;
};
type SessionStateForside = {
Expand Down Expand Up @@ -74,7 +74,7 @@ export const equalSessionState = (a: SessionState, b: SessionState): boolean =>
a.valgtFilterId === b.valgtFilterId &&
equalVirksomhetsnumre(a, b) &&
equalAsSets(a.sakstyper, b.sakstyper) &&
equalOppgaveFilter(a.oppgaveFilter, b.oppgaveFilter)
equalAsSets(a.oppgaveFilter, b.oppgaveFilter)
);
} else {
return false;
Expand Down Expand Up @@ -109,10 +109,7 @@ const defaultSessionState: SessionStateSaksoversikt = {
virksomhetsnumre: 'ALLEBEDRIFTER',
sortering: SakSortering.NyesteFørst,
sakstyper: [],
oppgaveFilter: {
oppgaveTilstand: [],
harPåminnelseUtløst: false,
},
oppgaveFilter: [],
valgtFilterId: undefined,
};

Expand All @@ -123,10 +120,7 @@ const FilterFromSessionState = z.object({
virksomhetsnumre: z.union([z.array(z.string()), z.literal('ALLEBEDRIFTER')]),
sortering: z.nativeEnum(SakSortering),
sakstyper: z.array(z.string()),
oppgaveFilter: z.object({
oppgaveTilstand: z.array(z.nativeEnum(OppgaveTilstand)),
harPåminnelseUtløst: z.boolean(),
}),
oppgaveFilter: z.array(z.string()),
valgtFilterId: z.string().optional(),
});

Expand Down
10 changes: 5 additions & 5 deletions src/Pages/Saksoversikt/useSaker.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import { Organisasjon } from '../OrganisasjonerOgTilgangerContext';
import { ServerError } from '@apollo/client/link/utils';
import { flatUtTre } from '../../utils/util';
import { useOrganisasjonerOgTilgangerContext } from '../OrganisasjonerOgTilgangerContext';
import { OppgaveFilterType } from './Saksfilter/Saksfilter';

type SakerResultat = Pick<Query, 'saker'>;

Expand Down Expand Up @@ -87,10 +88,6 @@ const HENT_SAKER: TypedDocumentNode<SakerResultat> = gql`
}
feilAltinn
totaltAntallSaker
oppgaveTilstandInfo {
tilstand
antall
}
oppgaveFilterInfo {
filterType
antall
Expand Down Expand Up @@ -161,12 +158,15 @@ export function useSaker(
[organisasjonstre, virksomheter]
);

//TODO: Endre dette etter at vi har lag ttil støtte for påminnelse utløst i bakcend
const oppgaveTilstand = oppgaveFilter.filter((it) => it !== OppgaveFilterType.PåminnelseUtløst);

const variables = {
virksomhetsnumre,
tekstsoek: tekstsoek === '' ? null : tekstsoek,
sortering: sortering,
sakstyper: sakstyper.length === 0 ? null : inkluderInntektsmelding(sakstyper),
oppgaveTilstand: oppgaveFilter.oppgaveTilstand.length === 0 ? null : oppgaveFilter.oppgaveTilstand, //TODO: endre disse til å sende inn filteret?
oppgaveTilstand: oppgaveTilstand.length === 0 ? null : oppgaveTilstand,
offset: ((side ?? 0) - 1) * pageSize /* if undefined, we should not send */,
limit: pageSize,
};
Expand Down
7 changes: 7 additions & 0 deletions src/api/graphql-types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,12 @@ export type OppgaveTilstandInfo = {
tilstand: OppgaveTilstand;
};

export type OppgaveFilterInfo = {
__typename?: 'OppgaveFilterInfo';
antall: Scalars['Int']['output'];
filterType: String;
};

export type Query = {
__typename?: 'Query';
kommendeKalenderavtaler: KalenderavtalerResultat;
Expand Down Expand Up @@ -258,6 +264,7 @@ export type SakerResultat = {
__typename?: 'SakerResultat';
feilAltinn: Scalars['Boolean']['output'];
oppgaveTilstandInfo: Array<OppgaveTilstandInfo>;
oppgaveFilterInfo: Array<OppgaveFilterInfo>;
saker: Array<Sak>;
/** Hvilke sakstyper (med antall) som finnes for valgte virksomheter. */
sakstyper: Array<Sakstype>;
Expand Down
Loading

0 comments on commit 5394207

Please sign in to comment.