diff --git a/src/moduler/aktivitet/visning/AktivitetvisningContainer.tsx b/src/moduler/aktivitet/visning/AktivitetvisningContainer.tsx index 3f4cb4dbf..54433a3cb 100644 --- a/src/moduler/aktivitet/visning/AktivitetvisningContainer.tsx +++ b/src/moduler/aktivitet/visning/AktivitetvisningContainer.tsx @@ -64,7 +64,7 @@ const AktivitetvisningContainer = () => { return ( - + {valgtAktivitet ? ( ) : ( diff --git a/src/moduler/aktivitet/visning/AktivitetvisningModal.tsx b/src/moduler/aktivitet/visning/AktivitetvisningModal.tsx index 5936d1ffc..7075bd0a8 100644 --- a/src/moduler/aktivitet/visning/AktivitetvisningModal.tsx +++ b/src/moduler/aktivitet/visning/AktivitetvisningModal.tsx @@ -13,11 +13,11 @@ import { selectErBruker } from '../../identitet/identitet-selector'; import { selectAktivitetFeilmeldinger } from '../aktivitet-selector'; import { selectArenaFeilmeldinger } from '../arena-aktivitet-selector'; import { skalMarkereForhaandsorienteringSomLest } from './avtalt-container/utilsForhaandsorientering'; +import { useSelectedAktivitet } from './useSelectedAktivitet'; const DIALOG_TEKST = 'Alle endringer blir borte hvis du ikke lagrer. Er du sikker på at du vil lukke siden?'; interface Props { - aktivitet?: AlleAktiviteter; avhengigheter: Avhengighet[]; children: React.ReactNode; } @@ -25,7 +25,8 @@ interface Props { const emptySelector = () => []; const AktivitetvisningModal = (props: Props) => { - const { aktivitet, avhengigheter, children } = props; + const { avhengigheter, children } = props; + const aktivitet = useSelectedAktivitet(); const dirty = useContext(DirtyContext); const navigate = useNavigate(); const { hovedsideRoute } = useRoutes(); diff --git a/src/moduler/aktivitet/visning/referat/ReferatContainer.tsx b/src/moduler/aktivitet/visning/referat/ReferatContainer.tsx index 3438b7e73..0fc6615b3 100644 --- a/src/moduler/aktivitet/visning/referat/ReferatContainer.tsx +++ b/src/moduler/aktivitet/visning/referat/ReferatContainer.tsx @@ -1,16 +1,18 @@ -import { isAfter, parseISO } from 'date-fns'; +import { isBefore, parseISO, subMinutes } from 'date-fns'; import React, { useState } from 'react'; import { useSelector } from 'react-redux'; -import { MOTE_TYPE, SAMTALEREFERAT_TYPE } from '../../../../constant'; -import { Status } from '../../../../createGenericSlice'; +import { MOTE_TYPE } from '../../../../constant'; import { AktivitetStatus } from '../../../../datatypes/aktivitetTypes'; -import { MoteAktivitet, SamtalereferatAktivitet } from '../../../../datatypes/internAktivitetTypes'; +import { + MoteAktivitet, + SamtalereferatAktivitet, + VeilarbAktivitetType, +} from '../../../../datatypes/internAktivitetTypes'; import useAppDispatch from '../../../../felles-komponenter/hooks/useAppDispatch'; import { useErVeileder } from '../../../../Provider'; import { selectErUnderOppfolging } from '../../../oppfolging-status/oppfolging-selector'; import { publiserReferat } from '../../aktivitet-actions'; -import { selectAktivitetStatus } from '../../aktivitet-selector'; import OppdaterReferatForm from './OppdaterReferatForm'; import ReferatVisning from './ReferatVisning'; @@ -18,50 +20,56 @@ interface Props { aktivitet: MoteAktivitet | SamtalereferatAktivitet; } +const sjekkErFullførtEllerAvbrutt = (status: AktivitetStatus) => + [AktivitetStatus.AVBRUTT, AktivitetStatus.FULLFOERT].includes(status); + +const sjekKanIkkeHaReferat = ( + aktivitetType: VeilarbAktivitetType.MOTE_TYPE | VeilarbAktivitetType.SAMTALEREFERAT_TYPE, + fraDato: string, + erFullfortEllerAvbrutt: boolean, +) => { + /* Kan ikke opprette referat på møter som ikke har vært */ + if (aktivitetType === MOTE_TYPE && !erFullfortEllerAvbrutt) { + const now = new Date(); + const fraDatoMedSlack = subMinutes(parseISO(fraDato), 15); + return isBefore(now, fraDatoMedSlack); + } else { + return false; + } +}; + const ReferatContainer = (props: Props) => { const { aktivitet } = props; + const { referat, erReferatPublisert, type: aktivitetType } = aktivitet; const dispatch = useAppDispatch(); - const [isOppdaterReferat, setOppdaterReferat] = useState(false); + const [oppdatererReferat, setOppdatererReferat] = useState(false); - const publiserer = useSelector(selectAktivitetStatus) === (Status.PENDING || Status.RELOADING); const erVeileder = useErVeileder(); const underOppfolging = useSelector(selectErUnderOppfolging); - const { referat, erReferatPublisert, type: aktivitetType } = aktivitet; - - const erFullførtEllerAvbrutt = [AktivitetStatus.AVBRUTT, AktivitetStatus.FULLFOERT].includes(aktivitet.status); - const kanHaReferat = - (aktivitetType === MOTE_TYPE && (isAfter(new Date(), parseISO(aktivitet.fraDato)) || erFullførtEllerAvbrutt)) || - aktivitetType === SAMTALEREFERAT_TYPE; - - const erAktivAktivitet = - !aktivitet.historisk && - underOppfolging && - aktivitet.status !== AktivitetStatus.AVBRUTT && - aktivitet.status !== AktivitetStatus.FULLFOERT; - - if (!kanHaReferat) return null; - + const erFullførtEllerAvbrutt = sjekkErFullførtEllerAvbrutt(aktivitet.status); + const kanIkkeHaReferatEnda = sjekKanIkkeHaReferat(aktivitetType, aktivitet.fraDato, erFullførtEllerAvbrutt); + const erAktivAktivitet = !aktivitet.historisk && underOppfolging && !erFullførtEllerAvbrutt; const manglerReferat = erVeileder && !referat && erAktivAktivitet; - if (manglerReferat || isOppdaterReferat) { - return setOppdaterReferat(false)} />; - } - if (referat) { + if (kanIkkeHaReferatEnda) { + return null; + } else if (manglerReferat || oppdatererReferat) { + return setOppdatererReferat(false)} />; + } else if (referat) { return ( dispatch(publiserReferat(aktivitet))} - publiserer={publiserer} erReferatPublisert={erReferatPublisert} - startOppdaterReferat={() => setOppdaterReferat(true)} + startOppdaterReferat={() => setOppdatererReferat(true)} /> ); + } else { + return null; } - - return null; }; export default ReferatContainer; diff --git a/src/moduler/aktivitet/visning/referat/ReferatVisning.tsx b/src/moduler/aktivitet/visning/referat/ReferatVisning.tsx index d94068a98..109c81261 100644 --- a/src/moduler/aktivitet/visning/referat/ReferatVisning.tsx +++ b/src/moduler/aktivitet/visning/referat/ReferatVisning.tsx @@ -1,26 +1,27 @@ import { Alert, Button, Heading } from '@navikt/ds-react'; import React from 'react'; -import { useSelector } from 'react-redux'; +import { useDispatch, useSelector } from 'react-redux'; import EkspanderbartTekstomrade from '../../../../felles-komponenter/EkspanderbartTekstomrade'; import { div as HiddenIfDiv } from '../../../../felles-komponenter/hidden-if/hidden-if'; import { useErVeileder } from '../../../../Provider'; import { selectPubliserReferatFeil } from '../../../feilmelding/feil-selector'; import Feilmelding from '../../../feilmelding/Feilmelding'; +import { selectAktivitetStatus } from '../../aktivitet-selector'; +import { Status } from '../../../../createGenericSlice'; interface Props { referat: string; erAktivAktivitet: boolean; dispatchPubliserReferat: () => void; - publiserer: boolean; erReferatPublisert: boolean; startOppdaterReferat: () => void; } const ReferatVisning = (props: Props) => { + const publiserer = useSelector(selectAktivitetStatus) === (Status.PENDING || Status.RELOADING); const erVeileder = useErVeileder(); - const { erAktivAktivitet, referat, dispatchPubliserReferat, publiserer, erReferatPublisert, startOppdaterReferat } = - props; + const { erAktivAktivitet, referat, dispatchPubliserReferat, erReferatPublisert, startOppdaterReferat } = props; const feil = useSelector(selectPubliserReferatFeil); diff --git a/src/moduler/aktivitet/visning/useSelectedAktivitet.ts b/src/moduler/aktivitet/visning/useSelectedAktivitet.ts new file mode 100644 index 000000000..23c01c584 --- /dev/null +++ b/src/moduler/aktivitet/visning/useSelectedAktivitet.ts @@ -0,0 +1,10 @@ +import { useParams } from 'react-router-dom'; +import { useSelector } from 'react-redux'; +import { selectAktivitetMedId } from '../aktivitetlisteSelector'; +import { RootState } from '../../../store'; + +export const useSelectedAktivitet = () => { + const { id } = useParams<{ id: string }>(); + const aktivitetId = id; + return useSelector((state: RootState) => (aktivitetId ? selectAktivitetMedId(state, aktivitetId) : undefined)); +};