Skip to content

Commit

Permalink
fix: hassu 891 hassu 892 aineistojen UI (#337)
Browse files Browse the repository at this point in the history
* SuunnitelmatJaAineistot-muokkaustilassa alakategorioita ei näytetä, jos ne ovat tyhjiä.

* Nahtavillaolovaiheen aineistot näkyvät virkamiehen lukunäkymässä oikein.

* Nähtävilläolovaiheen kansalaisnäkymässä ei näytetä otsikkoja aineistojen ALAkategorioille, joissa ei ole aineistoja (pääkategorioiden otsikot näytetään aina).

* Virkamiespuolen lukunäkymässä näkyy aina pääkategorioiden otsikot, vaikka kategoria olisi tyhjä.

* Korjaa virhe kuulutusvaiheen infolootien näyttölogiikassa.
  • Loading branch information
ValheKouneli authored Aug 26, 2022
1 parent cee6bc4 commit b77e46a
Show file tree
Hide file tree
Showing 5 changed files with 121 additions and 66 deletions.
16 changes: 16 additions & 0 deletions common/aineistoKategoriat.ts
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,22 @@ export const getNestedCategoryIds: (kategoriat: AineistoKategoria[]) => string[]
return kategoriaIds;
};

export function kategorianAllaOlevienAineistojenMaara(
aineistoNahtavilla: Aineisto[],
kategoria: AineistoKategoria
): number {
const kategorianAineistojenMaara = aineistoNahtavilla.filter(
(aineisto) => aineisto.kategoriaId === kategoria.id
).length;
if (!kategoria.alaKategoriat || kategoria.alaKategoriat.length === 0) {
return kategorianAineistojenMaara;
} else {
return kategoria.alaKategoriat.reduce((acc, kategoria) => {
return acc + kategorianAllaOlevienAineistojenMaara(aineistoNahtavilla, kategoria);
}, kategorianAineistojenMaara);
}
}

export const getNestedAineistoMaaraForCategory = (
aineistot: (Aineisto | AineistoInput)[],
kategoria: AineistoKategoria
Expand Down
63 changes: 40 additions & 23 deletions src/components/projekti/common/KansalaisenAineistoNakyma.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@ export default function KansalaisenAineistoNakyma({ projekti, kuulutus }: Props)
aineistoKategoriat={aineistoKategoriat.listKategoriat()}
aineistot={kuulutus.aineistoNahtavilla}
expandedState={[expandedAineistoKategoriat, setExpandedAineistoKategoriat]}
paakategoria={true}
/>
</SectionContent>
);
Expand All @@ -100,30 +101,44 @@ interface AineistoKategoriaAccordionProps {
aineistoKategoriat?: AineistoKategoria[];
aineistot?: Aineisto[] | null;
expandedState: [React.Key[], React.Dispatch<React.Key[]>];
paakategoria?: boolean;
}

const AineistoKategoriaAccordion = (props: AineistoKategoriaAccordionProps) => {
const { t } = useTranslation("aineisto");

return props.aineistoKategoriat ? (
<HassuAccordion
items={props.aineistoKategoriat?.map((kategoria) => {
const aineistot = props.aineistot?.filter(
(aineisto) =>
kategoria.id === aineisto.kategoriaId ||
kategoria.alaKategoriat?.some((alakategoria) => alakategoria.id === aineisto.kategoriaId)
);
return {
title: `${t(`aineisto-kategoria-nimi.${kategoria.id}`)} (${aineistot?.length || 0})`,
content: (
<SuunnitelmaAineistoKategoriaContent
aineistot={aineistot}
kategoria={kategoria}
expandedState={props.expandedState}
/>
),
id: kategoria.id,
};
})}
items={props.aineistoKategoriat
?.filter((kategoria) => {
if (props.paakategoria) {
return true;
}
const aineistot = props.aineistot?.filter(
(aineisto) =>
kategoria.id === aineisto.kategoriaId ||
kategoria.alaKategoriat?.some((alakategoria) => alakategoria.id === aineisto.kategoriaId)
);
return !!aineistot?.length;
})
.map((kategoria) => {
const aineistot = props.aineistot?.filter(
(aineisto) =>
kategoria.id === aineisto.kategoriaId ||
kategoria.alaKategoriat?.some((alakategoria) => alakategoria.id === aineisto.kategoriaId)
);
return {
title: `${t(`aineisto-kategoria-nimi.${kategoria.id}`)} (${aineistot?.length || 0})`,
content: (
<SuunnitelmaAineistoKategoriaContent
aineistot={aineistot}
kategoria={kategoria}
expandedState={props.expandedState}
/>
),
id: kategoria.id,
};
})}
expandedState={props.expandedState}
/>
) : null;
Expand Down Expand Up @@ -157,11 +172,13 @@ const SuunnitelmaAineistoKategoriaContent = (props: SuunnitelmaAineistoKategoria
) : (
<p>Kategoriassa ei ole aineistoa</p>
)}
<AineistoKategoriaAccordion
aineistoKategoriat={props.kategoria.alaKategoriat}
aineistot={props.aineistot}
expandedState={props.expandedState}
/>
{!!props.aineistot?.length && (
<AineistoKategoriaAccordion
aineistoKategoriat={props.kategoria.alaKategoriat}
aineistot={props.aineistot}
expandedState={props.expandedState}
/>
)}
</>
);
};
8 changes: 8 additions & 0 deletions src/components/projekti/common/SuunnitelmatJaAineistot.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,14 @@ const SuunnitelmaAineistoAlakategoriaAccordion = (props: SuunnitelmaAineistoAlak
const { t } = useTranslation("aineisto");
const aineistoNahtavilla = watch("aineistoNahtavilla");
const aineistoNahtavillaFlat = Object.values(aineistoNahtavilla || {}).flat();
const aineistojenMaara = props.alakategoriat.reduce((acc, cur) => {
return acc + getNestedAineistoMaaraForCategory(aineistoNahtavillaFlat, cur);
}, 0);

if (!aineistojenMaara) {
return null;
}

return (
<HassuAccordion
expandedState={props.expandedAineistoState}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,11 @@ import Section from "@components/layout/Section";
import HassuAineistoNimiExtLink from "@components/projekti/HassuAineistoNimiExtLink";
import { Stack } from "@mui/material";
import { NahtavillaoloVaiheJulkaisu } from "@services/api";
import { AineistoKategoria, aineistoKategoriat, getNestedAineistoMaaraForCategory } from "common/aineistoKategoriat";
import {
AineistoKategoria,
aineistoKategoriat,
kategorianAllaOlevienAineistojenMaara,
} from "common/aineistoKategoriat";
import useTranslation from "next-translate/useTranslation";
import React, { FC, useMemo } from "react";
import { useProjekti } from "src/hooks/useProjekti";
Expand Down Expand Up @@ -50,6 +54,7 @@ export default function Lukunakyma() {
<AineistoNahtavillaAccordion
kategoriat={aineistoKategoriat.listKategoriat()}
julkaisu={julkaisu as NahtavillaoloVaiheJulkaisu}
paakategoria={true}
/>
</Section>
<Section smallGaps>
Expand Down Expand Up @@ -115,48 +120,56 @@ export default function Lukunakyma() {
interface AineistoNahtavillaAccordionProps {
julkaisu: NahtavillaoloVaiheJulkaisu;
kategoriat: AineistoKategoria[];
paakategoria?: boolean;
}

const AineistoNahtavillaAccordion: FC<AineistoNahtavillaAccordionProps> = ({ julkaisu, kategoriat }) => {
const AineistoNahtavillaAccordion: FC<AineistoNahtavillaAccordionProps> = ({ julkaisu, kategoriat, paakategoria }) => {
const { t } = useTranslation("aineisto");
const accordionItems: AccordionItem[] = useMemo(
() =>
kategoriat
.filter((kategoria) => julkaisu.aineistoNahtavilla?.some((aineisto) => aineisto.kategoriaId === kategoria.id))
.map<AccordionItem>((kategoria) => ({
id: kategoria.id,
title: (
<span>
{t(`aineisto-kategoria-nimi.${kategoria.id}`)}
{" (" + getNestedAineistoMaaraForCategory(julkaisu.aineistoNahtavilla || [], kategoria) + ")"}
</span>
),
content: (
<>
{julkaisu.aineistoNahtavilla && (
<Stack direction="column" rowGap={2}>
{julkaisu.aineistoNahtavilla
.filter((aineisto) => aineisto.kategoriaId === kategoria.id)
.map((aineisto) => (
<span key={aineisto.dokumenttiOid}>
<HassuAineistoNimiExtLink
tiedostoPolku={aineisto.tiedosto}
aineistoNimi={aineisto.nimi}
sx={{ mr: 3 }}
target="_blank"
/>
{aineisto.tuotu && formatDateTime(aineisto.tuotu)}
</span>
))}
</Stack>
)}
{kategoria.alaKategoriat && (
<AineistoNahtavillaAccordion julkaisu={julkaisu} kategoriat={kategoria.alaKategoriat} />
)}
</>
),
})),
[t, julkaisu, kategoriat]
.filter((kategoria) => {
return (
julkaisu.aineistoNahtavilla &&
(paakategoria || kategorianAllaOlevienAineistojenMaara(julkaisu.aineistoNahtavilla, kategoria))
);
})
.map<AccordionItem>((kategoria) => {
return {
id: kategoria.id,
title: (
<span>
{t(`aineisto-kategoria-nimi.${kategoria.id}`)}
{" (" + kategorianAllaOlevienAineistojenMaara(julkaisu.aineistoNahtavilla || [], kategoria) + ")"}
</span>
),
content: (
<>
{julkaisu.aineistoNahtavilla && (
<Stack direction="column" rowGap={2}>
{julkaisu.aineistoNahtavilla
.filter((aineisto) => aineisto.kategoriaId === kategoria.id)
.map((aineisto) => (
<span key={aineisto.dokumenttiOid}>
<HassuAineistoNimiExtLink
tiedostoPolku={aineisto.tiedosto}
aineistoNimi={aineisto.nimi}
sx={{ mr: 3 }}
target="_blank"
/>
{aineisto.tuotu && formatDateTime(aineisto.tuotu)}
</span>
))}
</Stack>
)}
{kategoria.alaKategoriat && (
<AineistoNahtavillaAccordion julkaisu={julkaisu} kategoriat={kategoria.alaKategoriat} />
)}
</>
),
};
}),
[t, julkaisu, kategoriat, paakategoria]
);
return !!accordionItems.length ? <HassuAccordion items={accordionItems} /> : null;
};
13 changes: 7 additions & 6 deletions src/pages/yllapito/projekti/[oid]/hyvaksymispaatos.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -67,12 +67,13 @@ export default function Hyvaksymispaatos({ setRouteLabels }: PageProps): ReactEl
<FormatDate date={hyvaksymisPaatosVaiheJulkaisu.kuulutusVaihePaattyyPaiva} />.
</Notification>
)}
{hyvaksymisPaatosVaiheJulkaisu?.tila !== HyvaksymisPaatosVaiheTila.HYVAKSYTTY && (
<Notification type={NotificationType.WARN}>
Kuulutus nähtäville asettamisesta odottaa hyväksyntää. Tarkasta kuulutus ja a) hyväksy tai b) palaute
kuulutus korjattavaksi, jos havaitset puutteita tai virheen.
</Notification>
)}
{hyvaksymisPaatosVaiheJulkaisu &&
hyvaksymisPaatosVaiheJulkaisu?.tila === HyvaksymisPaatosVaiheTila.ODOTTAA_HYVAKSYNTAA && (
<Notification type={NotificationType.WARN}>
Kuulutus nähtäville asettamisesta odottaa hyväksyntää. Tarkasta kuulutus ja a) hyväksy tai b) palauta
kuulutus korjattavaksi, jos havaitset puutteita tai virheen.
</Notification>
)}
</Section>
<Tabs
tabStyle="Underlined"
Expand Down

0 comments on commit b77e46a

Please sign in to comment.