Skip to content

Commit 5765b4c

Browse files
committed
feat: include ograf manifest
1 parent dd70ae0 commit 5765b4c

5 files changed

Lines changed: 194 additions & 158 deletions

File tree

‎backend/src/background/api/settings.ts‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,13 @@ function getOGrafManifest(id: string, manifest: OGraf.GraphicsManifest): TypeMan
249249
type: ManifestFieldType.OGrafForm,
250250
ografManifest: manifest,
251251
defaultValue: manifest.schema ? getDefaultDataFromSchema(manifest.schema) : undefined
252+
},
253+
{
254+
id: 'ograf-manifest',
255+
label: 'OGraf Manifest',
256+
type: ManifestFieldType.ConstHidden,
257+
includeInName: false,
258+
defaultValue: manifest
252259
}
253260
]
254261
} satisfies TypeManifest

‎backend/src/background/interfaces.ts‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,8 @@ export enum ManifestFieldType {
137137
Boolean = 'boolean',
138138
OGrafForm = 'ograf-form',
139139
Const = 'const',
140+
/** A constant field that is hidden from the user interface */
141+
ConstHidden = 'const-hidden',
140142
Enum = 'enum'
141143
}
142144
export enum TypeManifestEntity {

‎frontend/src/components/rundown/piecePropertiesForm.tsx‎

Lines changed: 81 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { useNavigate } from '@tanstack/react-router'
88
import { useAppDispatch, useAppSelector } from '~/store/app'
99
import { removePiece, updatePiece } from '~/store/pieces'
1010
import { useToasts } from '../toasts/useToasts'
11+
import { MyErrorBoundary } from '../../util/errorBoundary'
1112

1213
export 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}:&nbsp;</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}:&nbsp;</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

‎frontend/src/components/settings/typeManifestForm/lib/importOGrafManifest.ts‎

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,16 @@ function getOGrafManifest(id: string, manifest: OGraf.GraphicsManifest): TypeMan
4949
{
5050
id: 'ograf-data',
5151
label: 'OGraf Data',
52-
type: 'ograf-form' as ManifestFieldType,
52+
type: 'ograf-form' as ManifestFieldType.OGrafForm,
5353
ografManifest: manifest,
5454
defaultValue: getDefaultDataFromSchema(manifest.schema)
55+
},
56+
{
57+
id: 'ograf-manifest',
58+
label: 'OGraf Manifest',
59+
type: 'const-hidden' as ManifestFieldType.ConstHidden,
60+
includeInName: false,
61+
defaultValue: manifest
5562
}
5663
]
5764
} satisfies TypeManifest

0 commit comments

Comments
 (0)