diff --git a/src/components/projekti/suunnitteluvaihe/EsitettavatYhteystiedot.tsx b/src/components/projekti/suunnitteluvaihe/EsitettavatYhteystiedot.tsx index 1cf5b68da..00f7a95f3 100644 --- a/src/components/projekti/suunnitteluvaihe/EsitettavatYhteystiedot.tsx +++ b/src/components/projekti/suunnitteluvaihe/EsitettavatYhteystiedot.tsx @@ -88,7 +88,7 @@ export default function EsitettavatYhteystiedot({ vuorovaikutusnro }: Props): Re } return ( -
+

Vuorovaikuttamisen yhteyshenkilöt

diff --git a/src/components/projekti/suunnitteluvaihe/IlmoituksenVastaanottajat.tsx b/src/components/projekti/suunnitteluvaihe/IlmoituksenVastaanottajat.tsx index 83a7ff26a..856b1f609 100644 --- a/src/components/projekti/suunnitteluvaihe/IlmoituksenVastaanottajat.tsx +++ b/src/components/projekti/suunnitteluvaihe/IlmoituksenVastaanottajat.tsx @@ -11,6 +11,7 @@ import Section from "@components/layout/Section"; import SectionContent from "@components/layout/SectionContent"; import HassuGrid from "@components/HassuGrid"; import dayjs from "dayjs"; +import { useProjekti } from "src/hooks/useProjekti"; interface HelperType { kunnat?: FieldError | { nimi?: FieldError | undefined; sahkoposti?: FieldError | undefined }[] | undefined; @@ -34,6 +35,7 @@ type FormFields = { export default function IlmoituksenVastaanottajat({ kirjaamoOsoitteet, vuorovaikutus }: Props): ReactElement { const { t } = useTranslation("commonFI"); + const { data: projekti } = useProjekti(); const julkinen = !!vuorovaikutus?.julkinen; @@ -42,11 +44,8 @@ export default function IlmoituksenVastaanottajat({ kirjaamoOsoitteet, vuorovaik control, formState: { errors }, setValue, - watch, } = useFormContext(); - const ilmoituksenVastaanottajat = watch("suunnitteluVaihe.vuorovaikutus.ilmoituksenVastaanottajat"); - const { fields: kuntaFields } = useFieldArray({ control, name: "suunnitteluVaihe.vuorovaikutus.ilmoituksenVastaanottajat.kunnat", @@ -61,15 +60,6 @@ export default function IlmoituksenVastaanottajat({ kirjaamoOsoitteet, vuorovaik name: "suunnitteluVaihe.vuorovaikutus.ilmoituksenVastaanottajat.viranomaiset", }); - const getKuntanimi = (index: number) => { - const nimi = ilmoituksenVastaanottajat?.kunnat?.[index].nimi; - if (!nimi) { - return; - } - - return formatProperNoun(nimi); - }; - if (!kirjaamoOsoitteet) { return <>; } @@ -233,7 +223,11 @@ export default function IlmoituksenVastaanottajat({ kirjaamoOsoitteet, vuorovaik {...register(`suunnitteluVaihe.vuorovaikutus.ilmoituksenVastaanottajat.kunnat.${index}.nimi`)} readOnly /> - + >; - saveForm: (e?: React.BaseSyntheticEvent | undefined) => Promise; - updateFormContext: () => void; -} - -export default function LuonnoksetJaAineistot({ - saveForm, - vuorovaikutus, - muokkaustila, - setMuokkaustila, - updateFormContext, -}: Props) { - const { data: projekti } = useProjekti(); - const [esittelyAineistoDialogOpen, setEsittelyAineistoDialogOpen] = useState(false); - const [suunnitelmaLuonnoksetDialogOpen, setSuunnitelmaLuonnoksetDialogOpen] = useState(false); - const [expandedEsittelyAineisto, setExpandedEsittelyAineisto] = useState([]); - const [expandedSuunnitelmaLuonnokset, setExpandedSuunnitelmaLuonnokset] = useState([]); - - const julkinen = vuorovaikutus?.julkinen; - - const { control, register, formState, reset, setValue, watch } = useFormContext(); - - const esittelyAineistotFieldArray = useFieldArray({ - control, - name: "suunnitteluVaihe.vuorovaikutus.esittelyaineistot", - }); - - const suunnitelmaLuonnoksetFieldArray = useFieldArray({ - control, - name: "suunnitteluVaihe.vuorovaikutus.suunnitelmaluonnokset", - }); - - const { - fields: videotFields, - append: appendVideot, - remove: removeVideot, - } = useFieldArray({ - control, - name: "suunnitteluVaihe.vuorovaikutus.videot", - }); - - const esittelyaineistot = watch("suunnitteluVaihe.vuorovaikutus.esittelyaineistot"); - const suunnitelmaluonnokset = watch("suunnitteluVaihe.vuorovaikutus.suunnitelmaluonnokset"); - - const areAineistoKategoriesExpanded = !!expandedEsittelyAineisto.length || !!expandedSuunnitelmaLuonnokset.length; - - return ( - <> - {!muokkaustila && julkinen && ( -

- -

Suunnitelmaluonnokset ja esittelyaineistot

- {!!vuorovaikutus?.videot?.length && ( - -
Videoesittely
- {vuorovaikutus.videot.map((video) => ( -
- - {video.url} - -
- ))} -
- )} - {!vuorovaikutus?.suunnitelmaluonnokset?.length && !vuorovaikutus?.esittelyaineistot?.length && ( - -

Lisää suunnitelmalle luonnokset ja esittelyaineistot Muokkaa-painikkeesta.

-
- )} - {!!vuorovaikutus?.esittelyaineistot?.length && ( - -
Esittelyaineistot
- {vuorovaikutus.esittelyaineistot.map((aineisto) => ( -
- - {aineisto.nimi} - -
- ))} -
- )} - {!!vuorovaikutus?.suunnitelmaluonnokset?.length && ( - -
Suunnitelmaluonnokset
- {vuorovaikutus.suunnitelmaluonnokset.map((aineisto) => ( -
- - {aineisto.nimi} - -
- ))} -
- )} - {vuorovaikutus?.suunnittelumateriaali?.nimi && ( - -
Muu esittelymateriaali
-
{vuorovaikutus.suunnittelumateriaali.nimi}
-
- - {vuorovaikutus.suunnittelumateriaali.url} - -
-
- )} -
- )} -
- - {julkinen ? ( - -

- Suunnitelmaluonnokset ja esittelyaineistot -

- - - - -
- ) : ( -

Suunnitelmaluonnokset ja esittelyaineistot

- )} -

- Esittelyvideo tulee olla ladattuna erilliseen videojulkaisupalveluun (esim. Youtube) ja videon katselulinkki - tuodaan sille tarkoitettuun kenttään. Luonnokset ja muut materiaalit tuodaan Projektivelhosta. - Suunnitelmaluonnokset ja esittelyaineistot on mahdollista. Suunnitelmaluonnokset ja aineistot julkaistaan - palvelun julkisella puolella vuorovaikutuksen julkaisupäivänä. -

- - Huomioithan, että suunnitelmaluonnoksien ja esittelyaineistojen tulee täyttää saavutettavuusvaatimukset. - -
- -
Suunnitelmaluonnokset ja esittelyaineistot
-

Aineistoille tulee valita kategoria / otsikko, jonka alla ne esitetään palvelun julkisella puolella.

-

- Aineistojen järjestys kunkin otsikon alla määräytyy listan järjestyksen mukaan. Voit vaihtaa järjestystä - tarttumalla hiirellä raahaus-ikonista ja siirtämällä rivin paikkaa. -

- { - if (areAineistoKategoriesExpanded) { - setExpandedEsittelyAineisto([]); - setExpandedSuunnitelmaLuonnokset([]); - } else { - setExpandedEsittelyAineisto([0]); - setExpandedSuunnitelmaLuonnokset([0]); - } - }} - iconComponent={ - - - - - } - > - {areAineistoKategoriesExpanded ? "Sulje" : "Avaa"} kaikki kategoriat - - - {projekti?.oid && vuorovaikutus && !!esittelyaineistot?.length ? ( - - ) : ( -

Ei esittelyaineistoa. Aloita aineistojen tuonti painamalla Tuo Aineistoja -painiketta.

- )} - - ), - }, - ]} - /> - - setEsittelyAineistoDialogOpen(false)} - onSubmit={(aineistot) => { - const value = esittelyaineistot || []; - aineistot.forEach((aineisto) => { - if (!find(value, { dokumenttiOid: aineisto.dokumenttiOid })) { - value.push(aineisto); - } - }); - updateFormContext(); - setValue("suunnitteluVaihe.vuorovaikutus.esittelyaineistot", value); - }} - /> - - {vuorovaikutus && !!suunnitelmaluonnokset?.length ? ( - - ) : ( -

Ei esittelyaineistoa. Aloita aineistojen tuonti painamalla Tuo Aineistoja -painiketta.

- )} - - ), - }, - ]} - /> - - setSuunnitelmaLuonnoksetDialogOpen(false)} - onSubmit={(aineistot) => { - const value = suunnitelmaluonnokset || []; - aineistot.forEach((aineisto) => { - if (!find(value, { dokumenttiOid: aineisto.dokumenttiOid })) { - value.push(aineisto); - } - }); - updateFormContext(); - setValue("suunnitteluVaihe.vuorovaikutus.suunnitelmaluonnokset", value); - }} - /> -
- -
Ennalta kuvattu videoesittely
- {videotFields.map((field, index) => ( - - - {!!index && ( -
-
- { - event.preventDefault(); - removeVideot(index); - }} - /> -
-
- -
-
- )} -
- ))} - -
- -
Muut esittelymateriaalit
-

- Muu esittelymateraali on järjestelmän ulkopuolelle julkaistua suunnitelmaan liittyvää materiaalia. Muun - esittelymateriaalin lisääminen on vapaaehtoista.{" "} -

- - -
-
- - ); -} - -enum SuunnitteluVaiheAineistoTyyppi { - ESITTELYAINEISTOT = "ESITTELYAINEISTOT", - SUUNNITELMALUONNOKSET = "SUUNNITELMALUONNOKSET", -} - -type FormAineisto = FieldArrayWithId< - VuorovaikutusFormValues, - "suunnitteluVaihe.vuorovaikutus.esittelyaineistot", - "id" -> & - Pick; - -interface AineistoTableProps { - aineistoTyyppi: SuunnitteluVaiheAineistoTyyppi; - esittelyAineistotFieldArray: UseFieldArrayReturn< - VuorovaikutusFormValues, - "suunnitteluVaihe.vuorovaikutus.esittelyaineistot", - "id" - >; - suunnitelmaLuonnoksetFieldArray: UseFieldArrayReturn< - VuorovaikutusFormValues, - "suunnitteluVaihe.vuorovaikutus.suunnitelmaluonnokset", - "id" - >; - register: UseFormRegister; - watch: UseFormWatch; - vuorovaikutus: Vuorovaikutus; - formState: FormState; -} - -const AineistoTable = ({ - aineistoTyyppi, - suunnitelmaLuonnoksetFieldArray, - esittelyAineistotFieldArray, - register, - watch, - vuorovaikutus, - formState, -}: AineistoTableProps) => { - const { append: appendToOtherArray } = - aineistoTyyppi === SuunnitteluVaiheAineistoTyyppi.ESITTELYAINEISTOT - ? suunnitelmaLuonnoksetFieldArray - : esittelyAineistotFieldArray; - - const { fields, remove } = - aineistoTyyppi === SuunnitteluVaiheAineistoTyyppi.ESITTELYAINEISTOT - ? esittelyAineistotFieldArray - : suunnitelmaLuonnoksetFieldArray; - - const fieldArrayName = - aineistoTyyppi === SuunnitteluVaiheAineistoTyyppi.ESITTELYAINEISTOT - ? "suunnitteluVaihe.vuorovaikutus.esittelyaineistot" - : "suunnitteluVaihe.vuorovaikutus.suunnitelmaluonnokset"; - - const otherFieldArrayName = - aineistoTyyppi === SuunnitteluVaiheAineistoTyyppi.ESITTELYAINEISTOT - ? "suunnitteluVaihe.vuorovaikutus.suunnitelmaluonnokset" - : "suunnitteluVaihe.vuorovaikutus.esittelyaineistot"; - - const enrichedFields = useMemo( - () => - fields.map((field) => { - const aineistoData = [ - ...(vuorovaikutus.esittelyaineistot || []), - ...(vuorovaikutus.suunnitelmaluonnokset || []), - ]; - const { tila, tuotu, tiedosto } = - aineistoData.find(({ dokumenttiOid }) => dokumenttiOid === field.dokumenttiOid) || {}; - - return { tila, tuotu, tiedosto, ...field }; - }), - [fields, vuorovaikutus] - ); - - const otherAineistoWatch = watch(otherFieldArrayName); - - const columns = useMemo[]>( - () => [ - { - Header: "Aineisto", - width: 250, - accessor: (aineisto) => { - const index = enrichedFields.findIndex((row) => row.dokumenttiOid === aineisto.dokumenttiOid); - const errorpath = - aineistoTyyppi === SuunnitteluVaiheAineistoTyyppi.ESITTELYAINEISTOT - ? "esittelyaineistot" - : "suunnitelmaluonnokset"; - const errorMessage = (formState.errors as any).suunnitteluVaihe?.vuorovaikutus?.[errorpath]?.[index]?.message; - return ( - <> - - {errorMessage &&

{errorMessage}

} - - - - ); - }, - }, - { - Header: "Tuotu", - accessor: (aineisto) => (aineisto.tuotu ? formatDateTime(aineisto.tuotu) : undefined), - }, - { - Header: "Kategoria", - accessor: (aineisto) => { - const index = enrichedFields.findIndex((row) => row.dokumenttiOid === aineisto.dokumenttiOid); - return ( - + + + ); + }, + }, + { + Header: "Tuotu", + accessor: (aineisto) => (aineisto.tuotu ? formatDateTime(aineisto.tuotu) : undefined), + }, + { + Header: "Kategoria", + accessor: (aineisto) => { + const index = enrichedFields.findIndex((row) => row.dokumenttiOid === aineisto.dokumenttiOid); + return ( +