Skip to content

Commit a3dd474

Browse files
authored
Merge pull request #3780 from navikt/bugfix/kontaktpanel-og-ny-guppe
Bugfix/kontaktpanel og ny guppe
2 parents 2a359e6 + d6ce369 commit a3dd474

File tree

6 files changed

+115
-116
lines changed

6 files changed

+115
-116
lines changed

apps/dolly-frontend/src/main/js/src/components/feedback/KontaktinfoPanel.tsx

+18-12
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { ChatElipsisIcon, EnvelopeClosedIcon } from '@navikt/aksel-icons'
44
import '@/styles/variables.less'
55
import Icon from '@/components/ui/icon/Icon'
66
import { TestComponentSelectors } from '#/mocks/Selectors'
7+
import { useCurrentBruker } from '@/utils/hooks/useBruker'
78

89
const Panel = styled.div`
910
background-color: #0067c5;
@@ -30,6 +31,9 @@ const Header = styled.div`
3031
`
3132

3233
export const KontaktinfoPanel = ({ setOpenState, openKontaktskjema }: any) => {
34+
const { currentBruker } = useCurrentBruker()
35+
const bankIdBruker = currentBruker?.brukertype === 'BANKID'
36+
3337
const closePanel = () => setOpenState(false)
3438

3539
return (
@@ -41,9 +45,22 @@ export const KontaktinfoPanel = ({ setOpenState, openKontaktskjema }: any) => {
4145
</Button>
4246
</Header>
4347
<p>
44-
Team Dolly er tilgjengelige på Slack (#dolly), e-post ([email protected]), og via kontaktskjema.
48+
{`Team Dolly er tilgjengelige på ${bankIdBruker ? '' : 'Slack (#dolly), '}e-post ([email protected]), og via kontaktskjema.`}
4549
</p>
4650
<VStack gap="2">
51+
{!bankIdBruker && (
52+
<a href={'https://nav-it.slack.com/archives/CA3P9NGA2'} target="_blank">
53+
<Button
54+
variant="secondary"
55+
iconPosition="left"
56+
icon={<Icon kind="slack" />}
57+
style={{ width: '100%' }}
58+
onClick={closePanel}
59+
>
60+
Gå til Slack-kanal
61+
</Button>
62+
</a>
63+
)}
4764
<a href={'mailto:[email protected]'}>
4865
<Button
4966
variant="secondary"
@@ -55,17 +72,6 @@ export const KontaktinfoPanel = ({ setOpenState, openKontaktskjema }: any) => {
5572
Send e-post
5673
</Button>
5774
</a>
58-
<a href={'https://nav-it.slack.com/archives/CA3P9NGA2'} target="_blank">
59-
<Button
60-
variant="secondary"
61-
iconPosition="left"
62-
icon={<Icon kind="slack" />}
63-
style={{ width: '100%' }}
64-
onClick={closePanel}
65-
>
66-
Gå til Slack-kanal
67-
</Button>
68-
</a>
6975
<Button
7076
data-testid={TestComponentSelectors.BUTTON_OPEN_KONTAKTSKJEMA}
7177
variant="secondary"

apps/dolly-frontend/src/main/js/src/components/redigerGruppe/RedigerGruppe.tsx

+89-78
Original file line numberDiff line numberDiff line change
@@ -1,94 +1,95 @@
1-
import React from 'react'
2-
import NavButton from '@/components/ui/button/NavButton/NavButton'
3-
import * as yup from 'yup'
4-
import Loading from '@/components/ui/loading/Loading'
5-
import { FormTextInput } from '@/components/ui/form/inputs/textInput/TextInput'
6-
7-
import './RedigerGruppe.less'
81
import { useNavigate } from 'react-router'
9-
import { REGEX_BACKEND_GRUPPER, useMatchMutate } from '@/utils/hooks/useMutate'
10-
import { TestComponentSelectors } from '#/mocks/Selectors'
112
import { useGruppeById } from '@/utils/hooks/useGruppe'
12-
import * as _ from 'lodash-es'
3+
import { REGEX_BACKEND_GRUPPER, useMatchMutate } from '@/utils/hooks/useMutate'
134
import { Form, FormProvider, useForm } from 'react-hook-form'
145
import { yupResolver } from '@hookform/resolvers/yup'
6+
import * as Yup from 'yup'
7+
import { DollyApi } from '@/service/Api'
8+
import React, { useState } from 'react'
9+
import Loading from '@/components/ui/loading/Loading'
10+
import NavButton from '@/components/ui/button/NavButton/NavButton'
11+
import { TestComponentSelectors } from '#/mocks/Selectors'
12+
import { FormTextInput } from '@/components/ui/form/inputs/textInput/TextInput'
13+
import './RedigerGruppe.less'
14+
import { Alert } from '@navikt/ds-react'
1515

1616
type Props = {
17-
gruppeId?: string
18-
createGruppe: (arg0: any) => any
19-
createOrUpdateFetching: boolean
20-
updateGruppe: (arg0: number, arg1: any) => any
21-
onCancel: () => void
22-
error: {
23-
message: string
24-
}
17+
gruppeId: string
18+
onCancel: Function
2519
}
2620

27-
const validation = () =>
28-
yup.object().shape({
29-
navn: yup.string().trim().required('Navn er et påkrevd felt').max(30, 'Maksimalt 30 bokstaver'),
30-
hensikt: yup
31-
.string()
32-
.trim()
33-
.required('Gi en beskrivelse av hensikten med gruppen')
34-
.max(200, 'Maksimalt 200 bokstaver'),
35-
})
36-
const RedigerGruppe = ({
37-
gruppeId,
38-
createGruppe,
39-
createOrUpdateFetching,
40-
updateGruppe,
41-
onCancel,
42-
error,
43-
}: Props): JSX.Element => {
21+
const validation = Yup.object().shape({
22+
navn: Yup.string().trim().required('Gi gruppen et navn').max(30, 'Maksimalt 30 bokstaver'),
23+
hensikt: Yup.string()
24+
.trim()
25+
.required('Beskriv hensikten med gruppen')
26+
.max(200, 'Maksimalt 200 bokstaver'),
27+
})
28+
29+
export const RedigerGruppe = ({ gruppeId, onCancel }: Props) => {
4430
const navigate = useNavigate()
4531
const { gruppe } = useGruppeById(gruppeId)
46-
const erRedigering = gruppe?.id !== undefined
32+
const erRedigering = gruppeId !== undefined
33+
34+
const [feilmelding, setFeilmelding] = useState('')
35+
const [isLoading, setIsLoading] = useState(false)
36+
4737
const initialValues = {
48-
navn: _.get(gruppe, 'navn', ''),
49-
hensikt: _.get(gruppe, 'hensikt', ''),
38+
navn: gruppe?.navn || '',
39+
hensikt: gruppe?.hensikt || '',
5040
}
41+
5142
const mutate = useMatchMutate()
5243
const formMethods = useForm({
53-
mode: 'onChange',
44+
mode: 'all',
5445
defaultValues: initialValues,
55-
resolver: yupResolver(validation()),
46+
resolver: yupResolver(validation),
5647
})
5748

58-
const onHandleSubmit = async (
59-
values: {
60-
hensikt: any
61-
navn: any
62-
},
63-
_actions: any,
64-
) => {
65-
const groupValues = {
66-
hensikt: values.hensikt,
67-
navn: values.navn,
68-
}
69-
erRedigering
70-
? await updateGruppe(gruppe.id, groupValues).then(() => {
71-
return mutate(REGEX_BACKEND_GRUPPER)
72-
})
73-
: await createGruppe(groupValues).then(
74-
(response: {
75-
value: {
76-
data: {
77-
id: any
78-
}
79-
}
80-
}) => {
81-
const gruppeId = response.value?.data?.id
82-
if (gruppeId) {
83-
navigate(`/gruppe/${gruppeId}`)
84-
}
85-
},
86-
)
87-
return !error && onCancel()
49+
const handleCreateGruppe = () => {
50+
setIsLoading(true)
51+
DollyApi.createGruppe({
52+
navn: formMethods.watch('navn'),
53+
hensikt: formMethods.watch('hensikt'),
54+
}).then((response: any) => {
55+
if (response.error) {
56+
setFeilmelding('Noe gikk galt under oppretting av gruppe: ' + response.error)
57+
setIsLoading(false)
58+
} else {
59+
setFeilmelding('')
60+
setIsLoading(false)
61+
const gruppeId = response.data?.id
62+
if (gruppeId) {
63+
navigate(`/gruppe/${gruppeId}`)
64+
}
65+
}
66+
})
67+
}
68+
69+
const handleUpdateGruppe = () => {
70+
setIsLoading(true)
71+
DollyApi.updateGruppe(gruppeId, {
72+
navn: formMethods.watch('navn'),
73+
hensikt: formMethods.watch('hensikt'),
74+
}).then((response: any) => {
75+
if (response.error) {
76+
setFeilmelding('Noe gikk galt under redigering av gruppe: ' + response.error)
77+
setIsLoading(false)
78+
} else {
79+
setFeilmelding('')
80+
setIsLoading(false)
81+
onCancel()
82+
return mutate(REGEX_BACKEND_GRUPPER)
83+
}
84+
})
8885
}
8986

90-
if (createOrUpdateFetching) {
91-
return <Loading label="oppdaterer gruppe" />
87+
if (isLoading) {
88+
return (
89+
<div style={{ marginBottom: '15px' }}>
90+
<Loading label="Oppdaterer gruppe ..." />
91+
</div>
92+
)
9293
}
9394

9495
const buttons = (
@@ -97,6 +98,17 @@ const RedigerGruppe = ({
9798
data-testid={TestComponentSelectors.BUTTON_OPPRETT}
9899
variant={'primary'}
99100
type={'submit'}
101+
onClick={() => {
102+
formMethods.trigger(['navn', 'hensikt'])
103+
formMethods.setValue('navn', formMethods.getValues('navn'), {
104+
shouldValidate: true,
105+
shouldTouch: true,
106+
})
107+
formMethods.setValue('hensikt', formMethods.getValues('hensikt'), {
108+
shouldValidate: true,
109+
shouldTouch: true,
110+
})
111+
}}
100112
>
101113
{erRedigering ? 'Lagre' : 'Opprett og gå til gruppe'}
102114
</NavButton>
@@ -112,7 +124,7 @@ const RedigerGruppe = ({
112124
control={formMethods.control}
113125
className={'opprett-tabellrad'}
114126
autoComplete={'off'}
115-
onSubmit={formMethods.handleSubmit(onHandleSubmit)}
127+
onSubmit={formMethods.handleSubmit(erRedigering ? handleUpdateGruppe : handleCreateGruppe)}
116128
>
117129
<div className="fields">
118130
<FormTextInput
@@ -132,13 +144,12 @@ const RedigerGruppe = ({
132144
/>
133145
{buttons}
134146
</div>
135-
{error && (
136-
<div className="opprett-error">
137-
<span>{error.message}</span>
138-
</div>
147+
{feilmelding && (
148+
<Alert variant={'error'} size={'small'} style={{ margin: '0 10px 15px' }}>
149+
{feilmelding}
150+
</Alert>
139151
)}
140152
</Form>
141153
</FormProvider>
142154
)
143155
}
144-
export default RedigerGruppe

apps/dolly-frontend/src/main/js/src/components/redigerGruppe/RedigerGruppeConnector.tsx

-20
This file was deleted.

apps/dolly-frontend/src/main/js/src/components/ui/form/inputs/textInput/TextInput.tsx

+4-2
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ export const TextInput = ({
8181
}: TextInputProps) => {
8282
const {
8383
register,
84-
formState: { touchedFields },
84+
formState: { touchedFields, errors },
8585
setValue,
8686
watch,
8787
getFieldState,
@@ -94,8 +94,10 @@ export const TextInput = ({
9494
const feil =
9595
getFieldState(`manual.${name}`)?.error ||
9696
getFieldState(name)?.error ||
97-
getFieldState(fieldName)?.error
97+
getFieldState(fieldName)?.error ||
98+
errors[name]
9899
const visFeil = feil && (errorContext?.showError || isTouched)
100+
99101
const css = cn('skjemaelement__input', className, {
100102
'skjemaelement__input--harFeil': visFeil,
101103
})

apps/dolly-frontend/src/main/js/src/pages/gruppe/GruppeHeader/GruppeHeader.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import React, { Fragment } from 'react'
22
import { useDispatch, useSelector } from 'react-redux'
33
import Button from '@/components/ui/button/Button'
44
import useBoolean from '@/utils/hooks/useBoolean'
5-
import RedigerGruppeConnector from '@/components/redigerGruppe/RedigerGruppeConnector'
65
import { EksporterExcel } from '@/pages/gruppe/EksporterExcel/EksporterExcel'
76
import { SlettButton } from '@/components/ui/button/SlettButton/SlettButton'
87
import { LaasButton } from '@/components/ui/button/LaasButton/LaasButton'
@@ -21,6 +20,7 @@ import Icon from '@/components/ui/icon/Icon'
2120
import { TestComponentSelectors } from '#/mocks/Selectors'
2221
import Loading from '@/components/ui/loading/Loading'
2322
import FavoriteButton from '@/components/ui/button/FavoriteButton/FavoriteButton'
23+
import { RedigerGruppe } from '@/components/redigerGruppe/RedigerGruppe'
2424
import { actions } from '@/ducks/gruppe'
2525
import { createLoadingSelector } from '@/ducks/loading'
2626
import { useGruppeById } from '@/utils/hooks/useGruppe'
@@ -167,7 +167,7 @@ const GruppeHeader = ({ gruppeId }: GruppeHeaderProps) => {
167167
</div>
168168
</div>
169169
</header>
170-
{visRedigerState && <RedigerGruppeConnector gruppeId={gruppeId} onCancel={skjulRediger} />}
170+
{visRedigerState && <RedigerGruppe gruppeId={gruppeId} onCancel={skjulRediger} />}
171171
{viserGjenopprettModal && (
172172
<GjenopprettGruppe onClose={skjulGjenopprettModal} gruppeId={gruppeId} />
173173
)}

apps/dolly-frontend/src/main/js/src/pages/gruppeOversikt/GruppeOversikt.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import React, { useEffect, useState } from 'react'
22
import useBoolean from '@/utils/hooks/useBoolean'
33
import NavButton from '@/components/ui/button/NavButton/NavButton'
4-
import RedigerGruppeConnector from '@/components/redigerGruppe/RedigerGruppeConnector'
54
import Icon from '@/components/ui/icon/Icon'
65
import Liste from './Liste'
76
import { useCurrentBruker } from '@/utils/hooks/useBruker'
@@ -14,6 +13,7 @@ import { ToggleGroup } from '@navikt/ds-react'
1413
import styled from 'styled-components'
1514
import { TestComponentSelectors } from '#/mocks/Selectors'
1615
import FinnPersonBestilling from '@/pages/gruppeOversikt/FinnPersonBestilling'
16+
import { RedigerGruppe } from '@/components/redigerGruppe/RedigerGruppe'
1717

1818
type GruppeOversiktProps = {
1919
importerteZIdenter: any
@@ -95,7 +95,7 @@ const GruppeOversikt = ({ searchActive, sideStoerrelse, sidetall }: GruppeOversi
9595
{!bankIdBruker && <FinnPersonBestilling />}
9696
</div>
9797

98-
{visNyGruppeState && <RedigerGruppeConnector onCancel={skjulNyGruppe} />}
98+
{visNyGruppeState && <RedigerGruppe onCancel={skjulNyGruppe} />}
9999

100100
{!bankIdBruker && (
101101
<StyledDiv className="gruppe--flex-column-center">

0 commit comments

Comments
 (0)