From 2a83510d08a5f9fbbf849b2c9ad461955582b694 Mon Sep 17 00:00:00 2001 From: Tomi Korkalainen <77731851+tkork@users.noreply.github.com> Date: Thu, 8 Sep 2022 12:16:13 +0300 Subject: [PATCH] =?UTF-8?q?fix:=20Aseta=20julkaistut=20perustiedot=20n?= =?UTF-8?q?=C3=A4kyville=20kansalaispuolella=20(#356)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- i18n.js | 1 + .../kansalaisnakyma/PalauteLomakeDialogi.tsx | 36 +- src/locales/fi/common.json | 3 +- src/locales/fi/projekti.json | 8 - src/locales/fi/suunnittelu.json | 50 ++ src/locales/sv/common.json | 3 +- src/locales/sv/projekti.json | 8 - src/locales/sv/suunnittelu.json | 50 ++ src/pages/suunnitelma/[oid]/suunnittelu.tsx | 517 +++++++++--------- 9 files changed, 367 insertions(+), 309 deletions(-) create mode 100644 src/locales/fi/suunnittelu.json create mode 100644 src/locales/sv/suunnittelu.json diff --git a/i18n.js b/i18n.js index 2050128dc..cca2f18c0 100644 --- a/i18n.js +++ b/i18n.js @@ -9,6 +9,7 @@ module.exports = { "/yllapito/projekti/[oid]/nahtavillaolo": ["aineisto"], "/yllapito/projekti/[oid]/hyvaksymispaatos": ["aineisto"], "/suunnitelma/[oid]/hyvaksymismenettelyssa": ["hyvaksymismenettelyssa"], + "/suunnitelma/[oid]/suunnittelu": ["suunnittelu"], }, loadLocaleFrom: (lang, ns) => // You can use a dynamic import, fetch, whatever. You should diff --git a/src/components/projekti/kansalaisnakyma/PalauteLomakeDialogi.tsx b/src/components/projekti/kansalaisnakyma/PalauteLomakeDialogi.tsx index 5be6c21dd..113a55bb3 100644 --- a/src/components/projekti/kansalaisnakyma/PalauteLomakeDialogi.tsx +++ b/src/components/projekti/kansalaisnakyma/PalauteLomakeDialogi.tsx @@ -8,7 +8,7 @@ import { FormProvider, useForm, UseFormProps, Controller, FieldError } from "rea import { palauteSchema } from "src/schemas/vuorovaikutus"; import { yupResolver } from "@hookform/resolvers/yup"; import useTranslation from "next-translate/useTranslation"; -import { VuorovaikutusJulkinen, ProjektiJulkinen, PalauteInput, api } from "@services/api"; +import { VuorovaikutusJulkinen, PalauteInput, api } from "@services/api"; import { formatDate } from "src/util/dateUtils"; import TextInput from "@components/form/TextInput"; import Textarea from "@components/form/Textarea"; @@ -24,7 +24,7 @@ interface Props { open: boolean; onClose: () => void; vuorovaikutus: VuorovaikutusJulkinen; - projekti: ProjektiJulkinen; + projektiOid: string; } interface PalauteFormInput { @@ -45,7 +45,7 @@ const defaultValues = { liite: null, }; -export default function PalauteLomakeDialogi({ open, onClose, projekti, vuorovaikutus }: Props): ReactElement { +export default function PalauteLomakeDialogi({ open, onClose, projektiOid, vuorovaikutus }: Props): ReactElement { const { t } = useTranslation(); const [tiedosto, setTiedosto] = useState(undefined); const [formIsSubmitting, setFormIsSubmitting] = useState(false); @@ -92,7 +92,7 @@ export default function PalauteLomakeDialogi({ open, onClose, projekti, vuorovai (Object.keys(palauteFinalValues) as Array).forEach((key) => { if (!palauteFinalValues[key]) delete palauteFinalValues[key]; }); - await api.lisaaPalaute(projekti.oid, palauteFinalValues); + await api.lisaaPalaute(projektiOid, palauteFinalValues); showSuccessMessage(t("common:ilmoitukset.tallennus_onnistui")); onClose(); setKiitosDialogiOpen(true); @@ -103,7 +103,7 @@ export default function PalauteLomakeDialogi({ open, onClose, projekti, vuorovai } setFormIsSubmitting(false); }, - [talletaTiedosto, projekti, onClose, showErrorMessage, showSuccessMessage, reset, t, tiedosto] + [tiedosto, projektiOid, showSuccessMessage, t, onClose, reset, talletaTiedosto, showErrorMessage] ); return ( @@ -112,10 +112,7 @@ export default function PalauteLomakeDialogi({ open, onClose, projekti, vuorovai

{t("projekti:voit_jattaa_palautetta")}

- {t("projekti:kysymykset_ja_palautteet").replace( - "xx.xx.xxxx", - formatDate(vuorovaikutus.kysymyksetJaPalautteetViimeistaan) - )} + {t("projekti:kysymykset_ja_palautteet").replace("xx.xx.xxxx", formatDate(vuorovaikutus.kysymyksetJaPalautteetViimeistaan))}

@@ -125,18 +122,14 @@ export default function PalauteLomakeDialogi({ open, onClose, projekti, vuorovai label={t("common:etunimi")} {...register("etunimi")} error={ - errors?.etunimi?.message - ? ({ message: t(`common:virheet.${errors.etunimi.message}`) } as FieldError) - : undefined + errors?.etunimi?.message ? ({ message: t(`common:virheet.${errors.etunimi.message}`) } as FieldError) : undefined } />
- +
@@ -275,13 +265,7 @@ interface KiitosProps { export function KiitosDialogi({ open, onClose }: KiitosProps): ReactElement { const { t } = useTranslation(); return ( - +

{t("projekti:palautelomake.olemme_vastaanottaneet_viestisi")}

{t("projekti:palautelomake.kaikki_viestit_kasitellaan")}

diff --git a/src/locales/fi/common.json b/src/locales/fi/common.json index 3aa5e51f2..61fb61082 100644 --- a/src/locales/fi/common.json +++ b/src/locales/fi/common.json @@ -108,5 +108,6 @@ "valittu_tiedosto": "Valittu tiedosto", "hae_tiedosto": "Hae tiedosto", "sulje": "Sulje", - "liite": "Liite" + "liite": "Liite", + "klo": "klo" } diff --git a/src/locales/fi/projekti.json b/src/locales/fi/projekti.json index 8c60ca18b..8ff019c7b 100644 --- a/src/locales/fi/projekti.json +++ b/src/locales/fi/projekti.json @@ -114,14 +114,6 @@ "paivitetty": "Päivitetty", "oid": "oid", "oikopolut": "Oikopolut", - "suunnittelun_eteneminen": "Suunnittelun eteneminen", - "arvio_seuraavan_vaiheen_alkamisesta": "Arvio seuraavan vaiheen alkamisesta", - "vaikuttamisen_mahdollisuudet_ja_aikataulut": "Osallistumisen ja vaikuttamisen mahdollisuudet ja aikataulut", - "tulevat_vuorovaikutustilaisuudet": "Tulevat vuorovaikutustilaisuudet", - "menneet_vuorovaikutustilaisuudet": "Menneet vuorovaikutustilaisuudet", - "esittelyaineisto_ja_suunnitelmaluonnokset": "Esittelyaineisto ja suunnitelmaluonnokset", - "muut_materiaalit": "Muut esittelymateriaalit", - "video_materiaalit": "Enakkoon kuvattu videoesittely", "paatos": "Päätös", "nahtavillaolo": { "suunnitteluhankkeen_kuvaus": "Suunnitteluhankkeen kuvaus", diff --git a/src/locales/fi/suunnittelu.json b/src/locales/fi/suunnittelu.json new file mode 100644 index 000000000..ce70f9b68 --- /dev/null +++ b/src/locales/fi/suunnittelu.json @@ -0,0 +1,50 @@ +{ + "otsikko": "Tutustu hankkeeseen ja vuorovaikuta", + "perustiedot": { + "suunnitteluhankkeen_kuvaus": "Suunnitteluhankkeen kuvaus", + "suunnittelun_eteneminen": "Suunnittelun eteneminen", + "arvio_seuraavan_vaiheen_alkamisesta": "Arvio seuraavan vaiheen alkamisesta" + }, + "vuorovaikuttaminen": { + "otsikko": "Osallistumisen ja vaikuttamisen mahdollisuudet ja aikataulut", + "voit_osallistua_vuorovaikutuksiin": "Voit osallistua vuorovaikutustilaisuuksiin, tutustua suunnittelu- ja esittelyaineistoihin sekä jättää palautteen tai kysyä hankkeesta. Osallistumalla sinulla on mahdollisuus vaikuttaa hankkeen suunnitteluun.", + "aineistot_ovat_tutustuttavissa": "

Suunnitelmaluonnokset ja esittelyaineistot ovat tutustuttavissa alempaa tältä sivulta. Siirry aineistoihin.

", + "kysymykset_ja_palautteet": "

Kysymykset ja palautteet toivotaan esitettävän {{paivamaara}} mennessä. Siirry lomakkeelle.

" + }, + "videoesittely": { + "otsikko": "Enakkoon kuvattu videoesittely", + "tutustu": "Tutustu ennalta kuvattuun videoesittelyyn alta.", + "ei_kelvollinen": "Videolinkki ei ole kelvollinen" + }, + "muut_materiaalit": { + "otsikko": "Muut esittelymateriaalit" + }, + "aineistot": { + "otsikko": "Esittelyaineisto ja suunnitelmaluonnokset", + "julkaistaan": "Aineistot ja luonnokset julkaistaan lähempänä vuorovaikutustilaisuutta.", + "ovat_tutustuttavissa": "Suunnitelmaluonnokset ja esittelyaineistot ovat tutustuttavissa {{paivamaara}} asti.", + "voi_tutustua": "Suunnitelmaluonnoksiin ja esittelyaineistoihin voi tutustua alla olevista materiaaleista.", + "esittelyaineisto": "Esittelyaineisto", + "suunnitelmaluonnokset": "Suunnitelmaluonnokset" + }, + "tilaisuudet": { + "julkaistaan_pian": "Vuorovaikutustilaisuudet julkaistaan mahdollisimman pian. Vuorovaikutustilaisuuksien yhteydessä julkaistaan myös Kysymykset ja palautteet -lomake.", + "tulevat_tilaisuudet": "Tulevat vuorovaikutustilaisuudet", + "menneet_tilaisuudet": "Menneet vuorovaikutustilaisuudet", + "paikalla": { + "osoite": "Osoite: {{osoite}}, {{postinumero}} {{postitoimipaikka}}", + "yleisotilaisuus_jarjestetaan": "Yleisötilaisuus järjestetään fyysisenä tilaisuutena ylläolevassa osoitteessa." + }, + "soittoaika": { + "voit_soittaa": "Voit soittaa alla esitetyille henkilöille myös soittoajan ulkopuolella, mutta parhaiten tavoitat heidät esitettynä ajankohtana." + }, + "verkossa": { + "yleisotilaisuus_jarjestetaan_verkkotapahtumana": "Yleisötilaisuus järjestetään suorana verkkotapahtumana.", + "tilaisuus_toteutetaan_teamsin": "Tilaisuus toteutetaan Teamsin välityksellä. Teams-sovelluksen asentamista omalle laitteelle ei edellytetä. Liittymislinkki toimii Internet-selaimella tietokoneella tai mobiililaitteella.", + "liity_tilaisuuteen": "Liity tilaisuuteen: Tilaisuuden liittymislinkki julkaistaan tässä kaksi (2) tuntia ennen tilaisuuden alkua ja poistetaan tilaisuuden jälkeen." + } + }, + "ladattava_kuulutus": { + "otsikko": "Ladattava kuulutus" + } +} diff --git a/src/locales/sv/common.json b/src/locales/sv/common.json index b591059da..2f4265618 100644 --- a/src/locales/sv/common.json +++ b/src/locales/sv/common.json @@ -106,5 +106,6 @@ "valittu_tiedosto": "RUOTSIKSI Valittu tiedosto", "hae_tiedosto": "RUOTSIKSI Hae tiedosto", "sulje": "RUOTSIKSI Sulje", - "liite": "RUOTSIKSI Liite" + "liite": "RUOTSIKSI Liite", + "klo": "RUOTSIKSI klo" } diff --git a/src/locales/sv/projekti.json b/src/locales/sv/projekti.json index 7f2ce5bdd..e0d305472 100644 --- a/src/locales/sv/projekti.json +++ b/src/locales/sv/projekti.json @@ -114,14 +114,6 @@ "paivitetty": "RUOTSIKSI Päivitetty", "oid": "RUOTSIKSI oid", "oikopolut": "RUOTSIKSI Oikopolut", - "suunnittelun_eteneminen": "RUOTSIKSI Suunnittelun eteneminen", - "arvio_seuraavan_vaiheen_alkamisesta": "RUOTSIKSI Arvio seuraavan vaiheen alkamisesta", - "vaikuttamisen_mahdollisuudet_ja_aikataulut": "RUOTSIKSI Osallistumisen ja vaikuttamisen mahdollisuudet ja aikataulut", - "tulevat_vuorovaikutustilaisuudet": "RUOTSIKSI Tulevat vuorovaikutustilaisuudet", - "menneet_vuorovaikutustilaisuudet": "RUOTSIKSI Menneet vuorovaikutustilaisuudet", - "esittelyaineisto_ja_suunnitelmaluonnokset": "RUOTSIKSI Esittelyaineisto ja suunnitelmaluonnokset", - "muut_materiaalit": "RUOTSIKSI Muut esittelymateriaalit", - "video_materiaalit": "RUOTSIKSI Enakkoon kuvattu videoesittely", "paatos": "RUOTSIKSI Päätös", "nahtavillaolo": { "suunnitteluhankkeen_kuvaus": "RUOTSIKSI Suunnitteluhankkeen kuvaus", diff --git a/src/locales/sv/suunnittelu.json b/src/locales/sv/suunnittelu.json new file mode 100644 index 000000000..494b7f739 --- /dev/null +++ b/src/locales/sv/suunnittelu.json @@ -0,0 +1,50 @@ +{ + "otsikko": "RUOTSIKSI Tutustu hankkeeseen ja vuorovaikuta", + "perustiedot": { + "suunnitteluhankkeen_kuvaus": "RUOTSIKSI Suunnitteluhankkeen kuvaus", + "suunnittelun_eteneminen": "RUOTSIKSI Suunnittelun eteneminen", + "arvio_seuraavan_vaiheen_alkamisesta": "RUOTSIKSI Arvio seuraavan vaiheen alkamisesta" + }, + "vuorovaikuttaminen": { + "otsikko": "RUOTSIKSI Osallistumisen ja vaikuttamisen mahdollisuudet ja aikataulut", + "voit_osallistua_vuorovaikutuksiin": "RUOTSIKSI Voit osallistua vuorovaikutustilaisuuksiin, tutustua suunnittelu- ja esittelyaineistoihin sekä jättää palautteen tai kysyä hankkeesta. Osallistumalla sinulla on mahdollisuus vaikuttaa hankkeen suunnitteluun.", + "aineistot_ovat_tutustuttavissa": "RUOTSIKSI

Suunnitelmaluonnokset ja esittelyaineistot ovat tutustuttavissa alempaa tältä sivulta. Siirry aineistoihin.

", + "kysymykset_ja_palautteet": "RUOTSIKSI

Kysymykset ja palautteet toivotaan esitettävän {{paivamaara}} mennessä. Siirry lomakkeelle.

" + }, + "videoesittely": { + "otsikko": "RUOTSIKSI Enakkoon kuvattu videoesittely", + "tutustu": "RUOTSIKSI Tutustu ennalta kuvattuun videoesittelyyn alta.", + "ei_kelvollinen": "RUOTSIKSI Videolinkki ei ole kelvollinen" + }, + "muut_materiaalit": { + "otsikko": "RUOTSIKSI Muut esittelymateriaalit" + }, + "aineistot": { + "otsikko": "RUOTSIKSI Esittelyaineisto ja suunnitelmaluonnokset", + "julkaistaan": "RUOTSIKSI Aineistot ja luonnokset julkaistaan lähempänä vuorovaikutustilaisuutta.", + "ovat_tutustuttavissa": "RUOTSIKSI Suunnitelmaluonnokset ja esittelyaineistot ovat tutustuttavissa {{paivamaara}} asti.", + "voi_tutustua": "RUOTSIKSI Suunnitelmaluonnoksiin ja esittelyaineistoihin voi tutustua alla olevista materiaaleista.", + "esittelyaineisto": "RUOTSIKSI Esittelyaineisto", + "suunnitelmaluonnokset": "RUOTSIKSI Suunnitelmaluonnokset" + }, + "tilaisuudet": { + "julkaistaan_pian": "RUOTSIKSI Vuorovaikutustilaisuudet julkaistaan mahdollisimman pian. Vuorovaikutustilaisuuksien yhteydessä julkaistaan myös Kysymykset ja palautteet -lomake.", + "tulevat_tilaisuudet": "RUOTSIKSI Tulevat vuorovaikutustilaisuudet", + "menneet_tilaisuudet": "RUOTSIKSI Menneet vuorovaikutustilaisuudet", + "paikalla": { + "osoite": "RUOTSIKSI Osoite: {{osoite}}, {{postinumero}} {{postitoimipaikka}}", + "yleisotilaisuus_jarjestetaan": "RUOTSIKSI Yleisötilaisuus järjestetään fyysisenä tilaisuutena ylläolevassa osoitteessa." + }, + "soittoaika": { + "voit_soittaa": "RUOTSIKSI Voit soittaa alla esitetyille henkilöille myös soittoajan ulkopuolella, mutta parhaiten tavoitat heidät esitettynä ajankohtana." + }, + "verkossa": { + "yleisotilaisuus_jarjestetaan_verkkotapahtumana": "RUOTSIKSI Yleisötilaisuus järjestetään suorana verkkotapahtumana.", + "tilaisuus_toteutetaan_teamsin": "RUOTSIKSI Tilaisuus toteutetaan Teamsin välityksellä. Teams-sovelluksen asentamista omalle laitteelle ei edellytetä. Liittymislinkki toimii Internet-selaimella tietokoneella tai mobiililaitteella.", + "liity_tilaisuuteen": "RUOTSIKSI Liity tilaisuuteen: Tilaisuuden liittymislinkki julkaistaan tässä kaksi (2) tuntia ennen tilaisuuden alkua ja poistetaan tilaisuuden jälkeen." + } + }, + "ladattava_kuulutus": { + "otsikko": "RUOTSIKSI Ladattava kuulutus" + } +} diff --git a/src/pages/suunnitelma/[oid]/suunnittelu.tsx b/src/pages/suunnitelma/[oid]/suunnittelu.tsx index ce4627239..2a41c6aab 100644 --- a/src/pages/suunnitelma/[oid]/suunnittelu.tsx +++ b/src/pages/suunnitelma/[oid]/suunnittelu.tsx @@ -1,4 +1,4 @@ -import React, { ReactElement, useState } from "react"; +import React, { FC, ReactElement, useCallback, useState } from "react"; import ProjektiJulkinenPageLayout from "@components/projekti/kansalaisnakyma/ProjektiJulkinenPageLayout"; import Section from "@components/layout/Section"; import { useProjektiJulkinen } from "src/hooks/useProjektiJulkinen"; @@ -9,7 +9,14 @@ import dayjs from "dayjs"; import HeadphonesIcon from "@mui/icons-material/Headphones"; import LocationCityIcon from "@mui/icons-material/LocationCity"; import LocalPhoneIcon from "@mui/icons-material/LocalPhone"; -import { VuorovaikutusJulkinen, VuorovaikutusTilaisuus, VuorovaikutusTilaisuusTyyppi } from "@services/api"; +import { + ProjektiJulkinen, + SuunnitteluSopimus, + SuunnitteluVaiheJulkinen, + VuorovaikutusJulkinen, + VuorovaikutusTilaisuus, + VuorovaikutusTilaisuusTyyppi, +} from "@services/api"; import capitalize from "lodash/capitalize"; import { SoittoajanYhteystieto } from "@components/projekti/suunnitteluvaihe/VuorovaikutusMahdollisuudet"; import { PageProps } from "@pages/_app"; @@ -22,263 +29,255 @@ import useKansalaiskieli from "src/hooks/useKansalaiskieli"; import useProjektiBreadcrumbsJulkinen from "src/hooks/useProjektiBreadcrumbsJulkinen"; import FormatDate from "@components/FormatDate"; import { splitFilePath } from "../../../util/fileUtil"; +import classNames from "classnames"; +import Trans from "next-translate/Trans"; export default function Suunnittelu({ setRouteLabels }: PageProps): ReactElement { - const [palauteLomakeOpen, setPalauteLomakeOpen] = useState(false); + const { t } = useTranslation("suunnittelu"); + useProjektiBreadcrumbsJulkinen(setRouteLabels); const { data: projekti } = useProjektiJulkinen(); - const { t } = useTranslation(); + + if (!projekti?.suunnitteluVaihe) { + return <>; + } + + return ( + + + + + ); +} + +const Perustiedot: FC<{ suunnitteluVaihe: SuunnitteluVaiheJulkinen }> = ({ suunnitteluVaihe }) => { + const { t } = useTranslation("suunnittelu"); const kieli = useKansalaiskieli(); + return ( +
+ +

{t("perustiedot.suunnitteluhankkeen_kuvaus")}

+

{suunnitteluVaihe.hankkeenKuvaus?.[kieli]}

+
+ {suunnitteluVaihe.suunnittelunEteneminenJaKesto && ( + +

{t("perustiedot.suunnittelun_eteneminen")}

+

{suunnitteluVaihe.suunnittelunEteneminenJaKesto}

+
+ )} + +

{t("perustiedot.arvio_seuraavan_vaiheen_alkamisesta")}

+

{suunnitteluVaihe.arvioSeuraavanVaiheenAlkamisesta}

+
+
+ ); +}; - useProjektiBreadcrumbsJulkinen(setRouteLabels); +const VuorovaikutusTiedot: FC<{ + vuorovaikutus: VuorovaikutusJulkinen | undefined; + projekti: ProjektiJulkinen; + suunnitteluVaihe: SuunnitteluVaiheJulkinen; + suunnittelusopimus: SuunnitteluSopimus | null | undefined; + projektiHenkilot: ProjektiKayttajaJulkinen[] | null | undefined; + projektiOid: string; +}> = ({ suunnittelusopimus, vuorovaikutus, projektiHenkilot, projektiOid }) => { + const [palauteLomakeOpen, setPalauteLomakeOpen] = useState(false); + const { t } = useTranslation("suunnittelu"); + const kieli = useKansalaiskieli(); const today = dayjs(); - if (!projekti || !projekti.suunnitteluVaihe) { - return <>; - } - const suunnitteluVaihe = projekti.suunnitteluVaihe; - const vuorovaikutus: VuorovaikutusJulkinen | undefined = suunnitteluVaihe.vuorovaikutukset?.[0]; - if (!vuorovaikutus) { - return <>; - } - const tulevatTilaisuudet = vuorovaikutus.vuorovaikutusTilaisuudet?.filter((t) => + const tulevatTilaisuudet = vuorovaikutus?.vuorovaikutusTilaisuudet?.filter((t) => dayjs(t.paivamaara).isAfter(today || dayjs(t.paivamaara).isSame(today)) ); - const menneetTilaisuudet = vuorovaikutus.vuorovaikutusTilaisuudet?.filter((t) => - dayjs(t.paivamaara).isBefore(today) - ); - - const yhteystiedotListana = - vuorovaikutus.vuorovaikutusYhteystiedot?.map((yhteystieto) => t("common:yhteystieto", yhteystieto)) || []; + const menneetTilaisuudet = vuorovaikutus?.vuorovaikutusTilaisuudet?.filter((t) => dayjs(t.paivamaara).isBefore(today)); - const suunnittelusopimus = projekti?.aloitusKuulutusJulkaisut?.[0].suunnitteluSopimus; + const yhteystiedotListana = vuorovaikutus?.vuorovaikutusYhteystiedot?.map((yhteystieto) => t("common:yhteystieto", yhteystieto)) || []; - const suunnitelmaluonnokset = vuorovaikutus.suunnitelmaluonnokset; - const esittelyaineistot = vuorovaikutus.esittelyaineistot; + const suunnitelmaluonnokset = vuorovaikutus?.suunnitelmaluonnokset; + const esittelyaineistot = vuorovaikutus?.esittelyaineistot; - const kutsuPDFPath = splitFilePath(vuorovaikutus.vuorovaikutusPDFt?.[kieli]?.kutsuPDFPath); + const kutsuPDFPath = splitFilePath(vuorovaikutus?.vuorovaikutusPDFt?.[kieli]?.kutsuPDFPath); return ( - - <> -
- -

{t(`projekti:ui-otsikot.suunnitteluhankkeen_kuvaus`)}

-

{suunnitteluVaihe.hankkeenKuvaus?.[kieli]}

-
- -

{t(`projekti:ui-otsikot.suunnittelun_eteneminen`)}

-

{suunnitteluVaihe.suunnittelunEteneminenJaKesto}

-
+ <> +
+ +

{t("vuorovaikuttaminen.otsikko")}

+

{t("vuorovaikuttaminen.voit_osallistua_vuorovaikutuksiin")}

+ {vuorovaikutus && ( + <> + , a: }} /> + , a: }} + /> + + )} +
+ +

{t("tilaisuudet.tulevat_tilaisuudet")}

+ {!!tulevatTilaisuudet?.length && !!projektiHenkilot ? ( + + ) : ( +

{t("tilaisuudet.julkaistaan_pian")}

+ )} +
+ {!!menneetTilaisuudet?.length && !!projektiHenkilot && ( -

{t(`projekti:ui-otsikot.arvio_seuraavan_vaiheen_alkamisesta`)}

-

{suunnitteluVaihe.arvioSeuraavanVaiheenAlkamisesta}

+

{t("tilaisuudet.menneet_tilaisuudet")}

+
-
-
- -

{t(`projekti:ui-otsikot.vaikuttamisen_mahdollisuudet_ja_aikataulut`)}

- {!vuorovaikutus && ( + )} + +

{t("aineistot.otsikko")}

+ {/* TODO: oma laskuri aineistoijen esilla ololle, mielellaan valmiiksi jo taustapalvelusta saatuna */} + {vuorovaikutus ? ( +

+ {t("aineistot.ovat_tutustuttavissa", { + paivamaara: formatDate(dayjs(vuorovaikutus.vuorovaikutusJulkaisuPaiva).add(30, "day")), + })} +

+ ) : ( +

{t("aineistot.julkaistaan")}

+ )} + {esittelyaineistot?.length && ( + <> +
{t("aineistot.esittelyaineisto")}
+ {esittelyaineistot.map((aineisto) => + aineisto.tiedosto ? ( + + {aineisto.tiedosto.split("/").reduce((_acc, cur) => cur, "")} + + ) : null + )} + + )} + {!!suunnitelmaluonnokset?.length && ( + <> +
{t("aineistot.suunnitelmaluonnokset")}
+ {suunnitelmaluonnokset.map((aineisto) => + aineisto.tiedosto ? ( + + {aineisto.tiedosto.split("/").reduce((_acc, cur) => cur, "")} + + ) : null + )} + + )} + {!!vuorovaikutus?.videot?.length && ( + <> +
{t(`videoesittely.otsikko`)}
+

{t("videoesittely.tutustu")}

+ {vuorovaikutus.videot?.map((video, index) => { + return ( + + {(parseVideoURL(video.url) && ) || ( +

<{t("videoesittely.ei_kelvollinen")}>

+ )} +
+ ); + })} + + )} + {vuorovaikutus?.suunnittelumateriaali?.url && ( + <> +
{t(`muut_materiaalit.otsikko`)}
+

{vuorovaikutus.suunnittelumateriaali.nimi}

- Voit osallistua vuorovaikutustilaisuuksiin, tutustua suunnittelu- ja esittelyaineistoihin sekä jättää - palautteen tai kysyä hankkeesta. Osallistumalla sinulla on mahdollisuus vaikuttaa hankkeen - suunnitteluun. + {vuorovaikutus.suunnittelumateriaali.url}

- )} - {vuorovaikutus && ( - <> -

- Voit osallistua vuorovaikutustilaisuuksiin, tutustua suunnittelu- ja esittelyaineistoihin sekä jättää - palautteen tai kysyä hankkeesta. Osallistumalla sinulla on mahdollisuus vaikuttaa hankkeen - suunnitteluun. -

-

- Suunnitelmaluonnokset ja esittelyaineistot ovat tutustuttavissa sivun alareunassa.{" "} - Siirry aineistoihin. -

-

- Kysymykset ja palautteet toivotaan esitettävän{" "} - {formatDate(vuorovaikutus.kysymyksetJaPalautteetViimeistaan)} mennessä.{" "} - Siirry lomakkeelle. -

- - )} - - -

{t(`projekti:ui-otsikot.tulevat_vuorovaikutustilaisuudet`)}

- {(!vuorovaikutus || !tulevatTilaisuudet || tulevatTilaisuudet.length < 1) && ( -

Vuorovaikutustilaisuudet julkaistaan mahdollisimman pian.

- )} - {tulevatTilaisuudet && ( -
- {tulevatTilaisuudet - ?.sort((a, b) => { - if (dayjs(a.paivamaara).isBefore(dayjs(b.paivamaara))) { - return -1; - } - if (dayjs(a.paivamaara).isAfter(dayjs(b.paivamaara))) { - return 1; - } - return 0; - }) - .map((tilaisuus, index) => { - return ( -
-
- - -
- -
- ); - })} -
- )} -
- {menneetTilaisuudet && menneetTilaisuudet.length > 0 && ( - -

{t(`projekti:ui-otsikot.menneet_vuorovaikutustilaisuudet`)}

-
- {menneetTilaisuudet - ?.sort((a, b) => { - if (dayjs(a.paivamaara).isBefore(dayjs(b.paivamaara))) { - return -1; - } - if (dayjs(a.paivamaara).isAfter(dayjs(b.paivamaara))) { - return 1; - } - return 0; - }) - .map((tilaisuus, index) => { - return ( -
-
- - -
- -
- ); - })} -
-
+ )} + +
+ {!!vuorovaikutus?.vuorovaikutusYhteystiedot?.length && ( +
-

{t(`projekti:ui-otsikot.esittelyaineisto_ja_suunnitelmaluonnokset`)}

- {!vuorovaikutus &&

Aineistot ja luonnokset julkaistaan lähempänä vuorovaikutustilaisuutta.

} - {/* TODO: oma laskuri aineistoijen esilla ololle, mielellaan valmiiksi jo taustapalvelusta saatuna */} - {vuorovaikutus && ( -

- Suunnitelmaluonnokset ja esittelyaineistot ovat tutustuttavissa{" "} - {formatDate(dayjs(vuorovaikutus.vuorovaikutusJulkaisuPaiva).add(30, "day"))} asti -

- )} - {esittelyaineistot && esittelyaineistot.length > 0 && ( - <> -
{t(`projekti:esittelyaineistot`)}
- {esittelyaineistot?.map((aineisto) => - aineisto.tiedosto ? ( - - {aineisto.tiedosto.split("/").reduce((_acc, cur) => cur, "") || "Linkki"} - - ) : null - )} - - )} - {suunnitelmaluonnokset && suunnitelmaluonnokset.length > 0 && ( - <> -
{t(`projekti:suunnitelmaluonnokset`)}
- {suunnitelmaluonnokset?.map((aineisto) => - aineisto.tiedosto ? ( - - {aineisto.tiedosto.split("/").reduce((_acc, cur) => cur, "") || "Linkki"} - - ) : null - )} - - )} - {vuorovaikutus.videot && vuorovaikutus.videot.length > 0 && ( - <> -
{t(`projekti:ui-otsikot.video_materiaalit`)}
-

Tutustu ennalta kuvattuun videoesittelyyn alta.

- {vuorovaikutus.videot?.map((video, index) => { - return ( - - {(parseVideoURL(video.url) && ( - - )) ||

<Videolinkki ei ole kelvollinen>

} -
- ); - })} - - )} - {vuorovaikutus.suunnittelumateriaali?.url && ( - <> -
{t(`projekti:ui-otsikot.muut_materiaalit`)}
-

{vuorovaikutus.suunnittelumateriaali.nimi}

-

- - {vuorovaikutus.suunnittelumateriaali.url} - -

- - )} +
{t("common:yhteystiedot")}
+

+ {t("common:lisatietoja_antavat", { + yhteystiedot: yhteystiedotListana.join(", "), + count: yhteystiedotListana.length, + })} + {/* TODO vaihda projektin suunnittelusopimustietoihin kun saatavilla */} + {suunnittelusopimus && ( + <> + {` ${t("common:ja")} `} + {suunnittelusopimus.etunimi} {suunnittelusopimus.sukunimi} puh. {suunnittelusopimus.puhelinnumero}{" "} + {suunnittelusopimus.email} ({capitalize(suunnittelusopimus.kunta)}). + + )} +

- {vuorovaikutus && - vuorovaikutus.vuorovaikutusYhteystiedot && - vuorovaikutus.vuorovaikutusYhteystiedot.length > 0 && ( -
- -
{t("common:yhteystiedot")}
-

- {t("common:lisatietoja_antavat", { - yhteystiedot: yhteystiedotListana.join(", "), - count: yhteystiedotListana.length, - })} - {/* TODO vaihda projektin suunnittelusopimustietoihin kun saatavilla */} - {suunnittelusopimus && ( - <> - {` ${t("common:ja")} `} - {suunnittelusopimus.etunimi} {suunnittelusopimus.sukunimi} puh. {suunnittelusopimus.puhelinnumero}{" "} - {suunnittelusopimus.email} ({capitalize(suunnittelusopimus.kunta)}). - - )} -

-
-
- )} - {vuorovaikutus && ( - <> - setPalauteLomakeOpen(true)} - /> - setPalauteLomakeOpen(false)} - projekti={projekti} - /> - - )} -

{t(`ui-otsikot.ladattava_kuulutus`)}

- - {kutsuPDFPath.fileName} ({kutsuPDFPath.fileExt}) - () - - - + )} + {vuorovaikutus && ( + <> + setPalauteLomakeOpen(true)} /> + setPalauteLomakeOpen(false)} + projektiOid={projektiOid} + /> +

{t(`ladattava_kuulutus.otsikko`)}

+ + {kutsuPDFPath.fileName} ({kutsuPDFPath.fileExt}) ( + ) + + + )} + ); -} +}; + +const TilaisuusLista: FC<{ tilaisuudet: VuorovaikutusTilaisuus[]; projektiHenkilot: ProjektiKayttajaJulkinen[]; inaktiivinen?: true }> = ({ + tilaisuudet, + projektiHenkilot, + inaktiivinen, +}) => { + const sortTilaisuudet = useCallback((a, b) => { + if (dayjs(a.paivamaara).isBefore(dayjs(b.paivamaara))) { + return -1; + } + if (dayjs(a.paivamaara).isAfter(dayjs(b.paivamaara))) { + return 1; + } + return 0; + }, []); + + return ( +
+ {tilaisuudet.sort(sortTilaisuudet).map((tilaisuus, index) => { + return ( +
+
+ + +
+ +
+ ); + })} +
+ ); +}; function TilaisuusContent({ tilaisuus, @@ -287,29 +286,29 @@ function TilaisuusContent({ tilaisuus: VuorovaikutusTilaisuus; projektiHenkilot: ProjektiKayttajaJulkinen[] | null | undefined; }) { + const { t } = useTranslation("suunnittelu"); return ( <> {tilaisuus && tilaisuus.tyyppi === VuorovaikutusTilaisuusTyyppi.PAIKALLA && (

- Osoite: {tilaisuus.osoite}, {tilaisuus.postinumero} {tilaisuus.postitoimipaikka} + {t("tilaisuus_paikalla.osoite", { + osoite: tilaisuus.osoite, + postinumero: tilaisuus.postinumero, + postitoimipaikka: tilaisuus.postitoimipaikka, + })}

- Yleisötilaisuus järjestetään fyysisenä tilaisuutena ylläolevassa osoitteessa.{" "} - {tilaisuus.Saapumisohjeet ? capitalize(tilaisuus.Saapumisohjeet) : undefined} + {t("tilaisuus_paikalla.yleisotilaisuus_jarjestetaan")} + {tilaisuus.Saapumisohjeet && capitalize(" " + tilaisuus.Saapumisohjeet)}

)} {tilaisuus && tilaisuus.tyyppi === VuorovaikutusTilaisuusTyyppi.SOITTOAIKA && (
-

- Voit soittaa alla esitetyille henkilöille myös soittoajan ulkopuolella, mutta parhaiten tavoitat heidät - esitettynä ajankohtana. -

+

{t("tilaisuus_soittoaika.voit_soittaa")}

{tilaisuus.projektiYhteysHenkilot - ?.map( - (yhteyshenkilo) => projektiHenkilot?.find((hlo) => yhteyshenkilo === hlo.id) as ProjektiKayttajaJulkinen - ) + ?.map((yhteyshenkilo) => projektiHenkilot?.find((hlo) => yhteyshenkilo === hlo.id) as ProjektiKayttajaJulkinen) .map((yhteystieto: ProjektiKayttajaJulkinen) => { return (

@@ -325,15 +324,9 @@ function TilaisuusContent({ )} {tilaisuus && tilaisuus.tyyppi === VuorovaikutusTilaisuusTyyppi.VERKOSSA && (

-

Yleisötilaisuus järjestetään suorana verkkotapahtumana.

-

- Tilaisuus toteutetaan Teamsin välityksellä. Teams-sovelluksen asentamista omalle laitteelle ei edellytetä. - Liittymislinkki toimii Internet-selaimella tietokoneella tai mobiililaitteella. -

-

- Liity tilaisuuteen: Tilaisuuden liittymislinkki julkaistaan tässä kaksi (2) tuntia ennen tilaisuuden alkua - ja poistetaan tilaisuuden jälkeen. -

+

{t("tilaisuus_verkossa.yleisotilaisuus_jarjestetaan_verkkotapahtumana")}

+

{t("tilaisuus_verkossa.tilaisuus_toteutetaan_teamsin")}

+

{t("tilaisuus_verkossa.liity_tilaisuuteen")}

)} @@ -343,15 +336,9 @@ function TilaisuusContent({ function TilaisuusIcon({ tyyppi, inactive }: { tyyppi: VuorovaikutusTilaisuusTyyppi; inactive?: true }) { return ( <> - {tyyppi === VuorovaikutusTilaisuusTyyppi.PAIKALLA && ( - - )} - {tyyppi === VuorovaikutusTilaisuusTyyppi.SOITTOAIKA && ( - - )} - {tyyppi === VuorovaikutusTilaisuusTyyppi.VERKOSSA && ( - - )} + {tyyppi === VuorovaikutusTilaisuusTyyppi.PAIKALLA && } + {tyyppi === VuorovaikutusTilaisuusTyyppi.SOITTOAIKA && } + {tyyppi === VuorovaikutusTilaisuusTyyppi.VERKOSSA && } ); } @@ -362,8 +349,8 @@ function TilaisuusTitle({ tilaisuus }: { tilaisuus: VuorovaikutusTilaisuus }) { return (

- {capitalize(t(`common:viikonpaiva_${dayjs(tilaisuus.paivamaara).day()}`))} {formatDate(tilaisuus.paivamaara)}{" "} - klo {tilaisuus.alkamisAika}-{tilaisuus.paattymisAika} + {capitalize(t(`common:viikonpaiva_${dayjs(tilaisuus.paivamaara).day()}`))} {formatDate(tilaisuus.paivamaara)} {t("common:klo")}{" "} + {tilaisuus.alkamisAika}-{tilaisuus.paattymisAika} {tilaisuus.nimi ? `, ${capitalize(tilaisuus.nimi)}` : undefined}