@@ -8,6 +8,7 @@ import { useNavigate } from '@tanstack/react-router'
88import { useAppDispatch , useAppSelector } from '~/store/app'
99import { removePiece , updatePiece } from '~/store/pieces'
1010import { useToasts } from '../toasts/useToasts'
11+ import { MyErrorBoundary } from '../../util/errorBoundary'
1112
1213export function PiecePropertiesForm ( { piece } : { piece : Piece } ) {
1314 const dispatch = useAppDispatch ( )
@@ -116,79 +117,92 @@ export function PiecePropertiesForm({ piece }: { piece: Piece }) {
116117
117118 { manifest ?. payload ?. map ( ( fieldInfo ) => {
118119 return (
119- < form . Field
120- key = { `payload.${ fieldInfo . id } ` }
121- name = { `payload.${ fieldInfo . id } ` }
122- children = { ( field ) => (
123- < >
124- < Form . Group className = "mb-3" >
125- < Form . Label htmlFor = { field . name } > { fieldInfo . label } : </ Form . Label >
120+ < MyErrorBoundary >
121+ < form . Field
122+ key = { `payload.${ fieldInfo . id } ` }
123+ name = { `payload.${ fieldInfo . id } ` }
124+ children = { ( field ) => (
125+ < >
126+ < Form . Group className = "mb-3" >
127+ < Form . Label htmlFor = { field . name } > { fieldInfo . label } : </ Form . Label >
126128
127- { fieldInfo . type === 'string' && (
128- < Form . Control
129- name = { field . name }
130- type = "text"
131- // eslint-disable-next-line @typescript-eslint/no-explicit-any
132- value = { field . state . value as any }
133- onBlur = { field . handleBlur }
134- onChange = { ( e ) => field . handleChange ( e . target . value ) }
135- />
136- ) }
137-
138- { fieldInfo . type === 'number' && (
139- < Form . Control
140- name = { field . name }
141- type = "number"
142- value = { Number ( field . state . value ) }
143- onBlur = { field . handleBlur }
144- onChange = { ( e ) => field . handleChange ( Number ( e . target . value ) ) }
145- />
146- ) }
129+ { fieldInfo . type === 'string' && (
130+ < Form . Control
131+ name = { field . name }
132+ type = "text"
133+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
134+ value = { field . state . value as any }
135+ onBlur = { field . handleBlur }
136+ onChange = { ( e ) => field . handleChange ( e . target . value ) }
137+ />
138+ ) }
147139
148- { fieldInfo . type === 'boolean' && (
149- < Form . Switch
150- name = { field . name }
151- type = "text"
152- checked = { Boolean ( field . state . value ) }
153- onBlur = { field . handleBlur }
154- onChange = { ( e ) => field . handleChange ( e . target . checked ) }
155- />
156- ) }
157- { fieldInfo . type === 'ograf-form' && (
158- < ReactOGrafForm
159- schema = { fieldInfo . ografManifest ?. schema as OGrafForm . GDDSchema }
160- data = { field . state . value }
161- onDataChangeCallback = { ( value : unknown ) => {
162- field . handleChange ( value as typeof field . state . value )
163- } }
164- />
165- ) }
140+ { fieldInfo . type === 'number' && (
141+ < Form . Control
142+ name = { field . name }
143+ type = "number"
144+ value = { Number ( field . state . value ) }
145+ onBlur = { field . handleBlur }
146+ onChange = { ( e ) => field . handleChange ( Number ( e . target . value ) ) }
147+ />
148+ ) }
166149
167- { fieldInfo . type === 'enum' && (
168- < >
169- < Form . Select
150+ { fieldInfo . type === 'boolean' && (
151+ < Form . Switch
170152 name = { field . name }
171- value = { String ( field . state . value ) }
153+ type = "text"
154+ checked = { Boolean ( field . state . value ) }
172155 onBlur = { field . handleBlur }
173- onChange = { ( e ) => {
174- console . log ( e . target . value )
175- field . handleChange ( e . target . value )
156+ onChange = { ( e ) => field . handleChange ( e . target . checked ) }
157+ />
158+ ) }
159+ { fieldInfo . type === 'ograf-form' && (
160+ < ReactOGrafForm
161+ schema = { fieldInfo . ografManifest ?. schema as OGrafForm . GDDSchema }
162+ data = { field . state . value }
163+ onDataChangeCallback = { ( value : unknown ) => {
164+ field . handleChange ( value as typeof field . state . value )
176165 } }
177- >
178- { fieldInfo . enumValues ?. map ( ( ev , i ) => (
179- < option key = { i } value = { ev . value } >
180- { ev . label }
181- </ option >
182- ) ) }
183- </ Form . Select >
184- </ >
185- ) }
186- { fieldInfo . type === 'const' && < span > { field . state . value } </ span > }
187- </ Form . Group >
188- < FieldInfo field = { field } />
189- </ >
190- ) }
191- />
166+ />
167+ ) }
168+
169+ { fieldInfo . type === 'enum' && (
170+ < >
171+ < Form . Select
172+ name = { field . name }
173+ value = { String ( field . state . value ) }
174+ onBlur = { field . handleBlur }
175+ onChange = { ( e ) => {
176+ console . log ( e . target . value )
177+ field . handleChange ( e . target . value )
178+ } }
179+ >
180+ { fieldInfo . enumValues ?. map ( ( ev , i ) => (
181+ < option key = { i } value = { ev . value } >
182+ { ev . label }
183+ </ option >
184+ ) ) }
185+ </ Form . Select >
186+ </ >
187+ ) }
188+ { fieldInfo . type === 'const' && (
189+ < span >
190+ { typeof field . state . value === 'object'
191+ ? JSON . stringify ( field . state . value )
192+ : String ( field . state . value ) }
193+ </ span >
194+ ) }
195+ { fieldInfo . type === 'const-hidden' && (
196+ < span >
197+ < i > --Hidden--</ i >
198+ </ span >
199+ ) }
200+ </ Form . Group >
201+ < FieldInfo field = { field } />
202+ </ >
203+ ) }
204+ />
205+ </ MyErrorBoundary >
192206 )
193207 } ) }
194208
0 commit comments