Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
73130ac
Lagre soek design
betsytraran Jun 27, 2025
e0b25a5
Post lagret soek
betsytraran Jun 27, 2025
e892a24
Div tilpasninger paa lagring og visning av siste soek
betsytraran Jul 2, 2025
1d6d003
Merge branch 'master' of https://github.com/navikt/testnorge into fea…
betsytraran Aug 4, 2025
d01d96b
Forbedret forhold mellom siste soek og form
betsytraran Aug 7, 2025
5d77169
Tilpass visning av chips
betsytraran Aug 7, 2025
2bf682b
Lagring av soek med adresse + div fix
betsytraran Aug 8, 2025
0651a59
Handle change list
betsytraran Aug 14, 2025
5f98d96
Fix lagring av skjerming
betsytraran Aug 15, 2025
8f72daa
Fix toem kategori
betsytraran Aug 15, 2025
6580fbc
Merge branch 'master' of https://github.com/navikt/testnorge into fea…
betsytraran Aug 15, 2025
072119e
Fix
betsytraran Aug 19, 2025
85f2ecc
Merge branch 'master' of https://github.com/navikt/testnorge into fea…
betsytraran Aug 19, 2025
27590e8
Fix lagring og visning av miljoer
betsytraran Aug 20, 2025
2d6bf82
Set isLoading paa felter i tenor-soek
betsytraran Aug 20, 2025
5b3ab8b
Oppsett av siste soek i tenor-soek + div tilpasninger
betsytraran Sep 10, 2025
c1b98c7
Div bugfix paa TextInput DateInput Monthpicker ++
betsytraran Sep 12, 2025
bd79c54
Fikset merge conflicts
betsytraran Sep 12, 2025
5359058
Soekefelter statsborgerskap
betsytraran Sep 15, 2025
2a7e8d4
Merge branch 'master' of https://github.com/navikt/testnorge into fea…
betsytraran Sep 15, 2025
08f11ef
Omskrivning av DollySoek og div opprydning
betsytraran Sep 16, 2025
c4c1a83
Merge branch 'master' of https://github.com/navikt/testnorge into fea…
betsytraran Sep 25, 2025
63bd515
Felles handleclick paa sistesoek
betsytraran Sep 25, 2025
af50e33
Fix empty category tenorsoek
betsytraran Sep 25, 2025
14b9536
Opprydning siste soek
betsytraran Sep 25, 2025
cf96758
Merge branch 'master' of https://github.com/navikt/testnorge into fea…
betsytraran Sep 25, 2025
c6e34b2
Fix brukernavnvelger
betsytraran Sep 25, 2025
333c8e7
Deploy test #deploy-test-frontend
betsytraran Sep 26, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ dollyTest(

expect(screen.getByText('Tester kodeverk')).toBeInTheDocument()

expect(screen.getByText('Henter verdier ...')).toBeInTheDocument()
expect(screen.getByText('Laster ...')).toBeInTheDocument()

worker.use(
// override the initial kodeverk request handler to return non-empty list
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,8 @@ export const DateInput = ({
useEffect(() => {
if (!fieldValue) {
setFormattedValue('')
} else {
setFormattedValue(formatDate(fieldValue))
}
}, [fieldValue])

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { Label } from '@/components/ui/form/inputs/label/Label'
import { InputWrapper } from '@/components/ui/form/inputWrapper/InputWrapper'
import { MonthPicker, useMonthpicker } from '@navikt/ds-react'
import { addYears, isDate, subYears } from 'date-fns'
import { addYears, isDate, isSameDay, subYears } from 'date-fns'
import { useFormContext } from 'react-hook-form'
import * as _ from 'lodash-es'
import { useEffect } from 'react'
Expand Down Expand Up @@ -35,7 +35,7 @@ export const Monthpicker = ({
? date
: new Date(date)

const { monthpickerProps, inputProps, reset } = useMonthpicker({
const { monthpickerProps, inputProps, reset, setSelected } = useMonthpicker({
fromDate: minDate || subYears(new Date(), 125),
toDate: maxDate || addYears(new Date(), 5),
onMonthChange: (selectedDate) => {
Expand All @@ -52,6 +52,11 @@ export const Monthpicker = ({
useEffect(() => {
if (!eksisterendeVerdi && inputProps.value) {
reset()
} else if (
eksisterendeVerdi &&
!isSameDay(new Date(formattedDate), new Date(monthpickerProps.selected))
) {
setSelected(formattedDate)
}
}, [eksisterendeVerdi])

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ export const Select = ({

const getPlaceholder = () => {
if (isLoading) {
return 'Henter verdier ...'
return 'Laster ...'
} else if (options?.length === 0) {
return 'Ingen tilgjengelige verdier'
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,9 +95,7 @@ export const TextInput = ({
setFieldValue(formValue || '')
} else if (!useControlled) {
const propValue = value
if (propValue !== undefined) {
setFieldValue(propValue || '')
}
setFieldValue(propValue || '')
}
}, [value, formValue, useControlled])

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
import { useHentLagredeSoek } from '@/utils/hooks/useSoek'
import { Chips, VStack } from '@navikt/ds-react'
import * as _ from 'lodash-es'
import { isDate, isSameDay, isValid } from 'date-fns'

export enum soekType {
dolly = 'DOLLY',
tenor = 'TENOR',
}

const listOptions = [
'registreRequest',
'miljoer',
'utenlandskPersonIdentifikasjon',
'roller',
'inntekt.inntektstyper',
'inntekt.forskuddstrekk',
]

export const SisteSoek = ({ type, formValues, handleChange, handleChangeList }) => {
Copy link
Preview

Copilot AI Sep 26, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The component parameters are not typed. Consider adding TypeScript interfaces for better type safety and developer experience.

Copilot uses AI. Check for mistakes.

const { lagredeSoek } = useHentLagredeSoek(type)

const lagredeSoekData = []
lagredeSoek?.forEach((soek) => {
Object.entries(soek?.soekVerdi)?.forEach((verdi) => {
if (listOptions.includes(verdi[0]) && Array.isArray(verdi[1])) {
verdi[1]?.forEach((item) => {
if (!lagredeSoekData?.some((i) => i.value === item.value)) {
lagredeSoekData.push(item)
}
})
} else if (verdi[1]?.path && !lagredeSoekData?.some((item) => item.path === verdi[1]?.path)) {
lagredeSoekData.push(verdi[1])
}
})
})

const isSelected = (option) => {
const { path, value } = option
const formValue = _.get(formValues, path)
if (listOptions.includes(path)) {
return formValue?.includes(value)
} else if (
formValue?.length > 8 &&
isDate(new Date(formValue)) &&
isValid(new Date(formValue))
) {
return isSameDay(new Date(formValue), new Date(value))
}
return formValue === value
}

const handleClick = (option) => {
const formValue = _.get(formValues, option.path)
if (listOptions.includes(option.path)) {
const listValues = formValue || []
handleChangeList(
!listValues?.includes(option.value)
? [...listValues, option.value]
: listValues?.filter((item) => item !== option.value),
option.path,
option.label,
)
} else if (
formValue?.length > 8 &&
isDate(new Date(formValue)) &&
isValid(new Date(formValue))
) {
handleChange(
!isSameDay(new Date(formValue), new Date(option.value)) ? option.value : null,
option.path,
option.label,
)
} else {
handleChange(formValue !== option.value ? option.value : null, option.path, option.label)
}
}

return (
<VStack gap="3" style={{ marginBottom: '15px' }}>
<Chips>
{lagredeSoekData?.slice(0, 10).map((option, idx) => (
<Chips.Toggle
key={option.label}
selected={isSelected(option)}
onClick={() => handleClick(option)}
>
{option.label}
</Chips.Toggle>
))}
</Chips>
</VStack>
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ export default ({ eksisterendeBrukernavn, organisasjon, addToSession }: Brukerna
resolver: yupResolver(validation),
mode: 'onChange',
})

const [loading, setLoading] = useState(false)
const [error, setError] = useState(null as string | null)

Expand Down Expand Up @@ -115,8 +116,15 @@ export default ({ eksisterendeBrukernavn, organisasjon, addToSession }: Brukerna
size="large"
defaultValue={eksisterendeBrukernavn}
isDisabled={loading || !!eksisterendeBrukernavn}
useControlled
/>
<DollyTextInput
name="epost"
label="Epost"
size="large"
isDisabled={loading}
useControlled
Comment on lines +119 to +126
Copy link
Preview

Copilot AI Sep 26, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[nitpick] The useControlled prop is added to both inputs but there's inconsistent formatting - the first input has it as a separate line while the second has it inline. For consistency, both should follow the same pattern.

Copilot uses AI. Check for mistakes.

/>
<DollyTextInput name="epost" label="Epost" size="large" isDisabled={loading} />
<ButtonDiv>
<NavButton
type="submit"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,97 @@
import Title from '../../components/title'
import { Hjelpetekst } from '@/components/hjelpetekst/Hjelpetekst'
import { bottom } from '@popperjs/core'
import { SoekForm } from '@/pages/dollySoek/SoekForm'
import { dollySoekLocalStorageKey, SoekForm } from '@/pages/dollySoek/SoekForm'
import { SisteSoek, soekType } from '@/components/ui/soekForm/SisteSoek'
import { useEffect, useRef, useState } from 'react'
import { useForm } from 'react-hook-form'
import * as _ from 'lodash-es'
import { dollySoekInitialValues } from '@/pages/dollySoek/dollySoekInitialValues'
import { DollyApi } from '@/service/Api'
import { codeToNorskLabel } from '@/utils/DataFormatter'

export default () => {
const [lagreSoekRequest, setLagreSoekRequest] = useState({})
const lagreSoekRequestRef = useRef(lagreSoekRequest)

useEffect(() => {
lagreSoekRequestRef.current = lagreSoekRequest
}, [lagreSoekRequest])

useEffect(() => {
return () => {
if (Object.keys(lagreSoekRequestRef.current).length > 0) {
DollyApi.lagreSoek(lagreSoekRequestRef.current, soekType.dolly)
.then((response) => console.log(response))
.catch((error) => console.error(error))
}
}
}, [])

const localStorageValue = localStorage.getItem(dollySoekLocalStorageKey)
const initialValues = localStorageValue ? JSON.parse(localStorageValue) : dollySoekInitialValues

const initialValuesClone = _.cloneDeep(initialValues)
const formMethods = useForm({
mode: 'onChange',
defaultValues: initialValuesClone,
})

const [formRequest, setFormRequest] = useState(initialValues)

const setRequest = (request: any) => {
localStorage.setItem(dollySoekLocalStorageKey, JSON.stringify(request))
setFormRequest(request)
}

const { watch, reset } = formMethods
const values = watch()

const handleChange = (value: any, path: string, label: string) => {
const updatedRequest = { ...values, side: 0, seed: null }
_.set(updatedRequest, path, value)
reset(updatedRequest)
setRequest(updatedRequest)
if (value) {
setLagreSoekRequest({
...lagreSoekRequest,
[path]: {
path: path,
value: value,
label: label,
},
})
} else {
setLagreSoekRequest({
...lagreSoekRequest,
[path]: undefined,
})
}
}

const handleChangeList = (value: any, path: string, label: string) => {
const list = value?.map((item: any) => item.value ?? item)
const updatedRequest = { ...values, [path]: list, side: 0, seed: null }
reset(updatedRequest)
setRequest(updatedRequest)
if (value?.length > 0) {
const request = value.map((i) => ({
path: path,
value: i.value ?? i,
label: label?.includes(':') ? label : `${label}: ${i.label ?? codeToNorskLabel(i)}`,
}))
setLagreSoekRequest({
...lagreSoekRequest,
[path]: request,
})
} else {
setLagreSoekRequest({
...lagreSoekRequest,
[path]: [],
})
}
}

return (
<div>
<div className="flexbox--align-center--justify-start">
Expand All @@ -13,7 +101,22 @@ export default () => {
eksisterende personer til nye formål.
</Hjelpetekst>
</div>
<SoekForm />
<SisteSoek
type={soekType.dolly}
formValues={formMethods.watch()}
handleChange={handleChange}
handleChangeList={handleChangeList}
/>
<SoekForm
formMethods={formMethods}
localStorageValue={localStorageValue}
handleChange={handleChange}
handleChangeList={handleChangeList}
setRequest={setRequest}
formRequest={formRequest}
lagreSoekRequest={lagreSoekRequest}
setLagreSoekRequest={setLagreSoekRequest}
/>
</div>
)
}
Loading