-
Notifications
You must be signed in to change notification settings - Fork 19
/
page-settings-general-feature.tsx
77 lines (67 loc) · 2.19 KB
/
page-settings-general-feature.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
import { useEffect, useState } from 'react'
import { FieldValues, FormProvider, useForm } from 'react-hook-form'
import { useDispatch, useSelector } from 'react-redux'
import { useParams } from 'react-router-dom'
import { editDatabase, selectDatabaseById } from '@qovery/domains/database'
import { DatabaseEntity } from '@qovery/shared/interfaces'
import { AppDispatch, RootState } from '@qovery/store'
import PageSettingsGeneral from '../../ui/page-settings-general/page-settings-general'
export const handleSubmit = (data: FieldValues, database: DatabaseEntity) => {
const cloneDatabase = Object.assign({}, database as DatabaseEntity)
cloneDatabase.name = data['name']
cloneDatabase.description = data['description']
cloneDatabase.accessibility = data['accessibility']
return cloneDatabase
}
export function PageSettingsGeneralFeature() {
const { databaseId = '' } = useParams()
const dispatch = useDispatch<AppDispatch>()
const database = useSelector<RootState, DatabaseEntity | undefined>((state) => selectDatabaseById(state, databaseId))
const [loading, setLoading] = useState(false)
const methods = useForm({
mode: 'onChange',
reValidateMode: 'onChange',
})
const onSubmit = methods.handleSubmit((data) => {
if (data && database) {
setLoading(true)
const cloneDatabase = handleSubmit(data, database)
dispatch(
editDatabase({
databaseId: databaseId,
data: cloneDatabase,
})
)
.unwrap()
.then(() => setLoading(false))
.catch((e) => {
setLoading(false)
console.error(e)
})
}
})
useEffect(() => {
methods.reset({
name: database?.name,
description: database?.description,
type: database?.type,
mode: database?.mode,
version: database?.version,
accessibility: database?.accessibility,
})
}, [
methods,
database?.name,
database?.description,
database?.type,
database?.mode,
database?.version,
database?.accessibility,
])
return (
<FormProvider {...methods}>
<PageSettingsGeneral onSubmit={onSubmit} loading={loading} />
</FormProvider>
)
}
export default PageSettingsGeneralFeature