Skip to content

Commit

Permalink
Histark med flere dokumenter
Browse files Browse the repository at this point in the history
  • Loading branch information
betsytraran committed Feb 4, 2025
1 parent 4c51558 commit 7e93ffc
Show file tree
Hide file tree
Showing 2 changed files with 144 additions and 150 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
import { FormSelect } from '@/components/ui/form/inputs/select/Select'
import { Option } from '@/service/SelectOptionsOppslag'
import * as _ from 'lodash-es'
import { getYearRangeOptions } from '@/utils/DataFormatter'
import { FormDatepicker } from '@/components/ui/form/inputs/datepicker/Datepicker'
import { FormTextInput } from '@/components/ui/form/inputs/textInput/TextInput'
import { FileObject, FileUpload, VStack } from '@navikt/ds-react'
import { DisplayFormError } from '@/components/ui/toast/DisplayFormError'
import React, { useEffect, useState } from 'react'
import { useNavEnheter } from '@/utils/hooks/useNorg2'

type Vedlegg = {
file: File
error: boolean
reasons: string[]
}

enum Kodeverk {
TEMA = 'Tema',
}

export const HistarkDokument = ({ path, formMethods }) => {
const [vedlegg, setVedlegg] = useState<FileObject[]>(formMethods.watch(`${path}.vedlegg`) || [])
const [selectedNavEnhet, setSelectedNavEnhet] = useState(
formMethods.watch(`${path}.enhetsnummer`),
)

const { navEnheter = [] } = useNavEnheter()

useEffect(() => {
handleVedleggChange(vedlegg)
}, [vedlegg])

const handleVedleggChange = (filer: Vedlegg[]) => {
setVedlegg(filer)
formMethods.setValue(`${path}.vedlegg`, filer)
formMethods.setValue(`${path}.tittel`, null)
formMethods.setValue(`${path}.antallSider`, null)
formMethods.setValue(`${path}.fysiskDokument`, null)

filer.forEach((fil: Vedlegg, index: number) => {
const reader = new FileReader()
reader.onabort = () => console.warn('file reading was aborted')
reader.onerror = () => console.error('file reading has failed')
reader.onload = () => {
const binaryStr = reader.result?.slice(28)
formMethods.setValue(`${path}.tittel`, fil.file?.name)
formMethods.setValue(`${path}.antallSider`, 1)
formMethods.setValue(`${path}.fysiskDokument`, binaryStr)
}
reader.readAsDataURL(fil.file)
})
formMethods.trigger(path)
}

return (
<div className="flexbox--column">
<div className="flexbox--flex-wrap">
<div className="flexbox--full-width">
<FormSelect
name={`${path}.temakoder`}
label="Temakoder"
kodeverk={Kodeverk.TEMA}
size="full-width"
isClearable={false}
isMulti={true}
/>
</div>
<FormSelect
name={'navenhet'}
fieldName={`${path}.enhetsnavn`}
value={selectedNavEnhet}
onChange={(selected: Option) => {
formMethods.setValue(`${path}.enhetsnummer`, selected?.value || null)
formMethods.setValue(`${path}.enhetsnavn`, selected?.label || null)
setSelectedNavEnhet(selected?.value)
formMethods.trigger(path)
}}
label={'NAV-enhet'}
size={'xlarge'}
options={navEnheter}
isLoading={_.isEmpty(navEnheter)}
/>
<FormSelect
name={`${path}.startYear`}
label="Startår"
options={getYearRangeOptions(1980, 2025)}
afterChange={() => formMethods.trigger(path)}
/>
<FormSelect
name={`${path}.endYear`}
label="Sluttår"
options={getYearRangeOptions(1980, 2025)}
afterChange={() => formMethods.trigger(path)}
/>
<FormDatepicker
format={'DD.MM.YYYY HH:mm'}
name={`${path}.skanningsTidspunkt`}
label="Skanningstidspunkt"
visHvisAvhuket={false}
/>
{/*//TODO: Maa denne vaere en enum? Funka feks med 'NAV_NO'. Se kodeverk Mottakskanaler*/}
<FormTextInput
name={`${path}.skanner`}
label="Skanner"
visHvisAvhuket={false}
size={'xsmall'}
/>
<FormTextInput
name={`${path}.skannested`}
label="Skannested"
visHvisAvhuket={false}
size={'xsmall'}
/>
<div className="flexbox--full-width">
<VStack gap="4" style={{ marginTop: '10px' }}>
<FileUpload.Dropzone
label="Last opp vedlegg til dokumentet"
accept=".pdf"
fileLimit={{ max: 1, current: vedlegg.length }}
multiple={false}
onSelect={setVedlegg}
/>
{vedlegg.map((file: FileObject) => (
<FileUpload.Item
as="li"
key={file.file?.name}
file={file.file}
button={{
action: 'delete',
onClick: () => setVedlegg([]),
}}
/>
))}
</VStack>
</div>
<DisplayFormError path={`${path}.tittel`} errorMessage={'Vedlegg er påkrevd'} />
</div>
</div>
)
}
Original file line number Diff line number Diff line change
@@ -1,30 +1,12 @@
import React, { useEffect, useState } from 'react'
import React from 'react'
import { Vis } from '@/components/bestillingsveileder/VisAttributt'
import { Kategori } from '@/components/ui/form/kategori/Kategori'
import { FormSelect } from '@/components/ui/form/inputs/select/Select'
import Panel from '@/components/ui/panel/Panel'
import { erForsteEllerTest, panelError } from '@/components/ui/form/formUtils'
import { FormDollyFieldArray } from '@/components/ui/form/fieldArray/DollyFieldArray'
import { useNavEnheter } from '@/utils/hooks/useNorg2'
import * as _ from 'lodash-es'
import { Option } from '@/service/SelectOptionsOppslag'
import { FormTextInput } from '@/components/ui/form/inputs/textInput/TextInput'
import { useFormContext } from 'react-hook-form'
import { FormDatepicker } from '@/components/ui/form/inputs/datepicker/Datepicker'
import { getYearRangeOptions } from '@/utils/DataFormatter'
import { initialHistark } from '@/components/fagsystem/histark/form/initialValues'
import { DisplayFormError } from '@/components/ui/toast/DisplayFormError'
import { FileUpload, Heading, VStack } from '@navikt/ds-react'

type Vedlegg = {
file: File
error: boolean
reasons: string[]
}

enum Kodeverk {
TEMA = 'Tema',
}
import { HistarkDokument } from '@/components/fagsystem/histark/form/HistarkDokument'

const histarkAttributt = 'histark'

Expand All @@ -34,42 +16,6 @@ const HistarkForm = () => {
return null
}

const sessionDokumenter = formMethods.watch('histark.vedlegg')
const [files, setFiles] = useState(sessionDokumenter || [])
const [selectedNavEnhet, setSelectedNavEnhet] = useState(
formMethods.watch('histark.dokumenter.0.enhetsnummer'),
)

const { navEnheter = [] } = useNavEnheter()

useEffect(() => {
handleVedleggChange(files)
}, [files])

//TODO: Tilpasses for flere vedlegg? Eller gaa tilbake til ett vedlegg per histark?
const handleVedleggChange = (filer: Vedlegg[]) => {
setFiles(filer)
formMethods.setValue('histark.vedlegg', filer)
formMethods.setValue('histark.dokumenter.0.tittel', null)
formMethods.setValue('histark.dokumenter.0.antallSider', null)
formMethods.setValue('histark.dokumenter.0.fysiskDokument', null)

filer.forEach((fil: Vedlegg, index: number) => {
const reader = new FileReader()
reader.onabort = () => console.warn('file reading was aborted')
reader.onerror = () => console.error('file reading has failed')
reader.onload = () => {
const binaryStr = reader.result?.slice(28)
formMethods.setValue(`histark.dokumenter.${index}.tittel`, fil.file?.name)
formMethods.setValue(`histark.dokumenter.${index}.antallSider`, 1)
formMethods.setValue(`histark.dokumenter.${index}.fysiskDokument`, binaryStr)
}
reader.readAsDataURL(fil.file)
})
formMethods.trigger('histark.dokumenter')
formMethods.trigger('histark.vedlegg')
}

return (
// @ts-ignore
<Vis attributt={histarkAttributt}>
Expand All @@ -87,100 +33,7 @@ const HistarkForm = () => {
newEntry={initialHistark}
canBeEmpty={false}
>
{(path: string) => (
<div className="flexbox--column">
<div className="flexbox--flex-wrap">
<div className="flexbox--full-width">
<FormSelect
name={`${path}.temakoder`}
label="Temakoder"
kodeverk={Kodeverk.TEMA}
size="full-width"
isClearable={false}
isMulti={true}
/>
</div>
<FormSelect
name={'navenhet'}
fieldName={`${path}.enhetsnavn`}
value={selectedNavEnhet}
onChange={(selected: Option) => {
formMethods.setValue(`${path}.enhetsnummer`, selected?.value || null)
formMethods.setValue(`${path}.enhetsnavn`, selected?.label || null)
setSelectedNavEnhet(selected?.value)
formMethods.trigger(path)
}}
label={'NAV-enhet'}
size={'xlarge'}
options={navEnheter}
isLoading={_.isEmpty(navEnheter)}
/>
<FormSelect
name={`${path}.startYear`}
label="Startår"
options={getYearRangeOptions(1980, 2025)}
afterChange={() => formMethods.trigger(path)}
/>
<FormSelect
name={`${path}.endYear`}
label="Sluttår"
options={getYearRangeOptions(1980, 2025)}
afterChange={() => formMethods.trigger(path)}
/>
<FormDatepicker
format={'DD.MM.YYYY HH:mm'}
name={`${path}.skanningsTidspunkt`}
label="Skanningstidspunkt"
visHvisAvhuket={false}
/>
<FormTextInput
name={`${path}.skanner`}
label="Skanner"
visHvisAvhuket={false}
size={'xsmall'}
/>
<FormTextInput
name={`${path}.skannested`}
label="Skannested"
visHvisAvhuket={false}
size={'xsmall'}
/>
<div className="flexbox--full-width">
<VStack gap="4" style={{ marginTop: '10px' }}>
<FileUpload.Dropzone
label="Last opp vedlegg til dokumentet"
// description={`Du kan laste opp PDF-filer. Maks 10 filer.`}
accept=".pdf"
// fileLimit={{ max: 10, current: files.length }}
multiple={false}
onSelect={setFiles}
/>
{files?.length > 0 && (
<VStack gap="2">
<Heading level="3" size="xsmall">
{`Vedlegg (${files?.length})`}
</Heading>
<VStack as="ul" gap="3">
{files.map((file: Vedlegg) => (
<FileUpload.Item
as="li"
key={file.file?.name}
file={file.file}
button={{
action: 'delete',
onClick: () => setFiles([]),
}}
/>
))}
</VStack>
</VStack>
)}
</VStack>
</div>
<DisplayFormError path={`${path}.tittel`} errorMessage={'Vedlegg er påkrevd'} />
</div>
</div>
)}
{(path: string) => <HistarkDokument path={path} formMethods={formMethods} />}
</FormDollyFieldArray>
</Kategori>
</Panel>
Expand Down

0 comments on commit 7e93ffc

Please sign in to comment.