@@ -5,6 +5,7 @@ import { Layout } from '@app/components/layout'
55import useInstanceState from '@app/components/projects/versions/deployments/instances/use-instance-state'
66import useDeploymentState from '@app/components/projects/versions/deployments/use-deployment-state'
77import CommonConfigSection from '@app/components/projects/versions/images/config/common-config-section'
8+ import configToFilters from '@app/components/projects/versions/images/config/config-to-filters'
89import CraneConfigSection from '@app/components/projects/versions/images/config/crane-config-section'
910import DagentConfigSection from '@app/components/projects/versions/images/config/dagent-config-section'
1011import EditImageJson from '@app/components/projects/versions/images/edit-image-json'
@@ -34,13 +35,12 @@ import {
3435} from '@app/models'
3536import { TeamRoutes } from '@app/routes'
3637import { withContextAuthorization } from '@app/utils'
37- import { jsonErrorOf , getMergedContainerConfigFieldErrors , ContainerConfigValidationErrors } from '@app/validations'
38+ import { ContainerConfigValidationErrors , getMergedContainerConfigFieldErrors , jsonErrorOf } from '@app/validations'
3839import { getCruxFromContext } from '@server/crux-api'
3940import { NextPageContext } from 'next'
4041import useTranslation from 'next-translate/useTranslation'
41- import { useEffect , useState } from 'react'
42+ import { useCallback , useEffect , useState } from 'react'
4243import toast from 'react-hot-toast'
43- import configToFilters from '@app/components/projects/versions/images/config/config-to-filters'
4444
4545interface InstanceDetailsPageProps {
4646 deployment : DeploymentRoot
@@ -103,28 +103,21 @@ const InstanceDetailsPage = (props: InstanceDetailsPageProps) => {
103103 setFilters ( current => configToFilters ( current , state . config ) )
104104 } , [ state . config ] )
105105
106- const onChange = ( newConfig : Partial < InstanceContainerConfigData > ) => {
107- const applied : InstanceContainerConfigData = {
108- ...state . config ,
109- ...newConfig ,
110- }
111-
112- const merged = mergeConfigs ( instance . image . config , applied )
113- const errors = getMergedContainerConfigFieldErrors ( merged , t )
114- setFieldErrors ( errors )
115- setJsonError ( jsonErrorOf ( errors ) )
116-
117- actions . onPatch ( instance . id , newConfig )
118- }
106+ const setErrorsForConfig = useCallback (
107+ ( imageConfig , instanceConfig ) => {
108+ const merged = mergeConfigs ( imageConfig , instanceConfig )
109+ const errors = getMergedContainerConfigFieldErrors ( merged , t )
110+ setFieldErrors ( errors )
111+ setJsonError ( jsonErrorOf ( errors ) )
112+ } ,
113+ [ t ] ,
114+ )
119115
120- const onResetSection = ( section : ImageConfigProperty ) => {
121- const newConfig = actions . resetSection ( section )
116+ useEffect ( ( ) => {
117+ setErrorsForConfig ( instance . image . config , instance . config )
118+ } , [ instance . image . config , instance . config , setErrorsForConfig ] )
122119
123- const merged = mergeConfigs ( instance . image . config , newConfig )
124- const errors = getMergedContainerConfigFieldErrors ( merged , t )
125- setFieldErrors ( errors )
126- setJsonError ( jsonErrorOf ( errors ) )
127- }
120+ const onChange = ( newConfig : Partial < InstanceContainerConfigData > ) => actions . onPatch ( instance . id , newConfig )
128121
129122 const pageLink : BreadcrumbLink = {
130123 name : t ( 'common:container' ) ,
@@ -206,7 +199,7 @@ const InstanceDetailsPage = (props: InstanceDetailsPageProps) => {
206199 config = { state . config }
207200 resetableConfig = { state . resetableConfig }
208201 onChange = { onChange }
209- onResetSection = { onResetSection }
202+ onResetSection = { actions . resetSection }
210203 editorOptions = { editorState }
211204 fieldErrors = { fieldErrors }
212205 configType = "instance"
@@ -221,7 +214,7 @@ const InstanceDetailsPage = (props: InstanceDetailsPageProps) => {
221214 config = { state . config }
222215 resetableConfig = { state . resetableConfig }
223216 onChange = { onChange }
224- onResetSection = { onResetSection }
217+ onResetSection = { actions . resetSection }
225218 editorOptions = { editorState }
226219 fieldErrors = { fieldErrors }
227220 configType = "instance"
@@ -234,7 +227,7 @@ const InstanceDetailsPage = (props: InstanceDetailsPageProps) => {
234227 config = { state . config }
235228 resetableConfig = { state . resetableConfig }
236229 onChange = { onChange }
237- onResetSection = { onResetSection }
230+ onResetSection = { actions . resetSection }
238231 editorOptions = { editorState }
239232 fieldErrors = { fieldErrors }
240233 configType = "instance"
0 commit comments