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'
8
1
import { useNavigate } from 'react-router'
9
- import { REGEX_BACKEND_GRUPPER , useMatchMutate } from '@/utils/hooks/useMutate'
10
- import { TestComponentSelectors } from '#/mocks/Selectors'
11
2
import { useGruppeById } from '@/utils/hooks/useGruppe'
12
- import * as _ from 'lodash-es '
3
+ import { REGEX_BACKEND_GRUPPER , useMatchMutate } from '@/utils/hooks/useMutate '
13
4
import { Form , FormProvider , useForm } from 'react-hook-form'
14
5
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'
15
15
16
16
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
25
19
}
26
20
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 ) => {
44
30
const navigate = useNavigate ( )
45
31
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
+
47
37
const initialValues = {
48
- navn : _ . get ( gruppe , ' navn' , '' ) ,
49
- hensikt : _ . get ( gruppe , ' hensikt' , '' ) ,
38
+ navn : gruppe ?. navn || '' ,
39
+ hensikt : gruppe ?. hensikt || '' ,
50
40
}
41
+
51
42
const mutate = useMatchMutate ( )
52
43
const formMethods = useForm ( {
53
- mode : 'onChange ' ,
44
+ mode : 'all ' ,
54
45
defaultValues : initialValues ,
55
- resolver : yupResolver ( validation ( ) ) ,
46
+ resolver : yupResolver ( validation ) ,
56
47
} )
57
48
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
+ } )
88
85
}
89
86
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
+ )
92
93
}
93
94
94
95
const buttons = (
@@ -97,6 +98,17 @@ const RedigerGruppe = ({
97
98
data-testid = { TestComponentSelectors . BUTTON_OPPRETT }
98
99
variant = { 'primary' }
99
100
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
+ } }
100
112
>
101
113
{ erRedigering ? 'Lagre' : 'Opprett og gå til gruppe' }
102
114
</ NavButton >
@@ -112,7 +124,7 @@ const RedigerGruppe = ({
112
124
control = { formMethods . control }
113
125
className = { 'opprett-tabellrad' }
114
126
autoComplete = { 'off' }
115
- onSubmit = { formMethods . handleSubmit ( onHandleSubmit ) }
127
+ onSubmit = { formMethods . handleSubmit ( erRedigering ? handleUpdateGruppe : handleCreateGruppe ) }
116
128
>
117
129
< div className = "fields" >
118
130
< FormTextInput
@@ -132,13 +144,12 @@ const RedigerGruppe = ({
132
144
/>
133
145
{ buttons }
134
146
</ 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 >
139
151
) }
140
152
</ Form >
141
153
</ FormProvider >
142
154
)
143
155
}
144
- export default RedigerGruppe
0 commit comments