Skip to content

Commit 2d0991f

Browse files
committed
Put metadata in its own formik field in event/series create dialog
Instead of putting the metadata field directly alongside other values in formik, put them in their field. This makes our code more explicit and allows us to avoid overly general typescript typings.
1 parent db31e98 commit 2d0991f

9 files changed

Lines changed: 37 additions & 36 deletions

File tree

src/components/events/partials/ModalTabsAndPages/NewMetadataPage.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,13 +57,13 @@ const NewMetadataPage = ({
5757
{field.type === "mixed_text" &&
5858
field.collection?.length !== 0 ? (
5959
<Field
60-
name={catalog.flavor + "_" + field.id}
60+
name={"metadata" + "." + catalog.flavor + "_" + field.id}
6161
fieldInfo={field}
6262
component={RenderMultiField}
6363
/>
6464
) : (
6565
<Field
66-
name={catalog.flavor + "_" + field.id}
66+
name={"metadata" + "." + catalog.flavor + "_" + field.id}
6767
metadataField={field}
6868
isFirstField={index === 0 && key === 0}
6969
component={RenderField}

src/components/events/partials/wizards/NewEventSummary.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ interface RequiredFormProps {
3939
configuration: { [key: string]: string }
4040
policies: TransformedAcl[]
4141
uploadAssetsTrack?: UploadAssetsTrack[]
42-
[key: string]: unknown, // Metadata fields
42+
metadata: { [key: string]: unknown }
4343
}
4444

4545
const NewEventSummary = <T extends RequiredFormProps>({
@@ -75,7 +75,7 @@ const NewEventSummary = <T extends RequiredFormProps>({
7575
value: File,
7676
}[] = [];
7777
for (let i = 0; uploadAssetOptions.length > i; i++) {
78-
const fieldValue = formik.values[uploadAssetOptions[i].id] as File;
78+
const fieldValue = formik.values.metadata[uploadAssetOptions[i].id] as File;
7979
if (fieldValue) {
8080
const displayOverride = uploadAssetOptions[i].displayOverride as ParseKeys;
8181
setUploadAssetsNonTrack(uploadAssetsNonTrack.concat({
@@ -104,7 +104,7 @@ const NewEventSummary = <T extends RequiredFormProps>({
104104
<MetadataSummaryTable
105105
metadataCatalogs={[metadataEvents]}
106106
// @ts-expect-error: Metadata not correctly typed
107-
formikValues={formik.values}
107+
formikValues={formik.values.metadata}
108108
header={"EVENTS.EVENTS.NEW.METADATA.CAPTION"}
109109
/>
110110

@@ -113,7 +113,7 @@ const NewEventSummary = <T extends RequiredFormProps>({
113113
<MetadataSummaryTable
114114
metadataCatalogs={extendedMetadata}
115115
// @ts-expect-error: Metadata not correctly typed
116-
formikValues={formik.values}
116+
formikValues={formik.values.metadata}
117117
header={"EVENTS.EVENTS.NEW.METADATA_EXTENDED.CAPTION"}
118118
/>
119119
)}

src/components/events/partials/wizards/NewEventWizard.tsx

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -269,15 +269,15 @@ const getInitialValues = (
269269
aclDefaultActions?: string[],
270270
aclDefaultTemplate?: AclTemplate,
271271
) => {
272-
let initialValues = initialFormValuesNewEvents;
272+
const initialValues = initialFormValuesNewEvents;
273273

274274
// Transform metadata fields provided by backend (saved in redux)
275-
initialValues = { ...initialValues, ...getInitialMetadataFieldValues(
275+
initialValues.metadata = { ...initialValues.metadata, ...getInitialMetadataFieldValues(
276276
metadataFields,
277277
) };
278278

279279
for (const catalog of extendedMetadata) {
280-
initialValues = { ...initialValues, ...getInitialMetadataFieldValues(
280+
initialValues.metadata = { ...initialValues.metadata, ...getInitialMetadataFieldValues(
281281
catalog,
282282
) };
283283
}
@@ -290,17 +290,17 @@ const getInitialValues = (
290290
// Transform additional metadata for source (provided by constant in newEventConfig)
291291
if (sourceMetadata.UPLOAD) {
292292
sourceMetadata.UPLOAD.metadata.forEach(field => {
293-
initialValues[field.id] = field.value;
293+
initialValues.metadata[field.id] = field.value;
294294
});
295295
}
296296
if (sourceMetadata.SCHEDULE_SINGLE) {
297297
sourceMetadata.SCHEDULE_SINGLE.metadata.forEach(field => {
298-
initialValues[field.id] = field.value;
298+
initialValues.metadata[field.id] = field.value;
299299
});
300300
}
301301
if (sourceMetadata.SCHEDULE_MULTIPLE) {
302302
sourceMetadata.SCHEDULE_MULTIPLE.metadata.forEach(field => {
303-
initialValues[field.id] = field.value;
303+
initialValues.metadata[field.id] = field.value;
304304
});
305305
}
306306

@@ -318,11 +318,6 @@ const getInitialValues = (
318318
};
319319
}
320320

321-
// Add all initial form values known upfront listed in newEventsConfig
322-
for (const [key, value] of Object.entries(initialFormValuesNewEvents)) {
323-
initialValues[key] = value;
324-
}
325-
326321
const defaultDate = new Date();
327322

328323
// fill times with some default values

src/components/events/partials/wizards/NewSeriesSummary.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ interface RequiredFormProps {
2020
theme: string,
2121
policies: TransformedAcl[],
2222
selectedPage?: TobiraPage,
23+
metadata: { [key: string]: unknown }
2324
}
2425

2526
const NewSeriesSummary = <T extends RequiredFormProps>({
@@ -47,7 +48,7 @@ const NewSeriesSummary = <T extends RequiredFormProps>({
4748
<MetadataSummaryTable
4849
metadataCatalogs={[metadataSeries]}
4950
// @ts-expect-error TS(7006):
50-
formikValues={formik.values}
51+
formikValues={formik.values.metadata}
5152
header={"EVENTS.SERIES.NEW.METADATA.CAPTION"}
5253
/>
5354

@@ -56,8 +57,7 @@ const NewSeriesSummary = <T extends RequiredFormProps>({
5657
<MetadataSummaryTable
5758
metadataCatalogs={extendedMetadata}
5859
// @ts-expect-error TS(7006):
59-
formikValues={formik.values}
60-
formikInitialValues={formik.initialValues}
60+
formikValues={formik.values.metadata}
6161
header={"EVENTS.SERIES.NEW.METADATA_EXTENDED.CAPTION"}
6262
/>
6363
) : null}

src/components/events/partials/wizards/NewSeriesWizard.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ const NewSeriesWizard = ({
142142
const handleSubmit = (
143143
values:
144144
{
145-
[key: string]: any;
145+
metadata: { [key: string]: unknown }
146146
policies: TransformedAcl[];
147147
theme: string;
148148
},
@@ -247,7 +247,7 @@ const getInitialValues = (
247247
aclDefaultActions: string[],
248248
aclDefaultTemplate?: AclTemplate,
249249
) => {
250-
let initialValues = initialFormValuesNewSeries;
250+
const initialValues = initialFormValuesNewSeries;
251251

252252
// Transform metadata fields provided by backend (saved in redux)
253253
let metadataInitialValues = getInitialMetadataFieldValues(
@@ -260,7 +260,7 @@ const getInitialValues = (
260260
) };
261261
}
262262

263-
initialValues = { ...initialValues, ...metadataInitialValues };
263+
initialValues.metadata = { ...initialValues, ...metadataInitialValues };
264264

265265
initialValues["policies"] = [
266266
{

src/configs/modalConfig.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ export const initialFormValuesNewEvents: {
3434
aclTemplate: string,
3535
policies: TransformedAcl[],
3636
uploadAssetsTrack?: UploadAssetsTrack[]
37-
[key: string]: unknown, // Metadata fields that are getting added later
37+
metadata: { [key: string]: unknown }
3838
} = {
3939
sourceMode: "UPLOAD",
4040
scheduleStartDate: new Date().toISOString(),
@@ -52,6 +52,7 @@ export const initialFormValuesNewEvents: {
5252
configuration: {},
5353
aclTemplate: "",
5454
policies: [],
55+
metadata: {},
5556
};
5657

5758
// constants for hours and minutes (used in selection for start/end time and duration)
@@ -104,7 +105,8 @@ export const initialFormValuesNewSeries: {
104105

105106
breadcrumbs: TobiraPage[],
106107
selectedPage?: TobiraPage,
107-
[key: string]: unknown, // Metadata fields that are getting added later
108+
aclTemplate?: string,
109+
metadata: { [key: string]: unknown }
108110
} = {
109111
policies: [
110112
{
@@ -117,6 +119,7 @@ export const initialFormValuesNewSeries: {
117119
theme: "",
118120
breadcrumbs: [],
119121
selectedPage: undefined,
122+
metadata: {},
120123
};
121124

122125
// All fields for new theme form that are fix and not depending on response of backend

src/slices/eventSlice.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -450,7 +450,7 @@ export const postNewEvent = (params: {
450450
scheduleStartMinute: string,
451451
sourceMode: string,
452452
uploadAssetsTrack?: UploadAssetsTrack[],
453-
[key: string]: unknown,
453+
metadata: { [key: string]: unknown },
454454
},
455455
metadataInfo: MetadataCatalog,
456456
extendedMetadata: MetadataCatalog[],
@@ -477,11 +477,11 @@ export const postNewEvent = (params: {
477477
// prepare metadata provided by user
478478
const metadata = prepareMetadataFieldsForPost(
479479
[metadataInfo],
480-
values,
480+
values.metadata,
481481
);
482482
const extendedMetadataCatalogs = prepareMetadataFieldsForPost(
483483
extendedMetadata,
484-
values,
484+
values.metadata,
485485
);
486486

487487
// if source mode is UPLOAD than also put metadata fields of that in metadataFields
@@ -494,7 +494,7 @@ export const postNewEvent = (params: {
494494
for (const smetadata of sourceMetadata.UPLOAD.metadata) {
495495
metadata[0].fields = metadata[0].fields.concat({
496496
id: smetadata.id,
497-
value: values[smetadata.id],
497+
value: values.metadata[smetadata.id],
498498
type: smetadata.type,
499499
});
500500
}
@@ -542,7 +542,7 @@ export const postNewEvent = (params: {
542542
type: values.sourceMode,
543543
metadata: {
544544
start: startDate,
545-
device: values.location,
545+
device: values.metadata.location,
546546
inputs: values.inputs ? values.inputs.join(",") : "",
547547
end: endDate,
548548
duration: duration.toString(),
@@ -596,12 +596,12 @@ export const postNewEvent = (params: {
596596
}
597597
for (let i = 0; uploadAssetOptions.length > i; i++) {
598598
if (
599-
!!values[uploadAssetOptions[i].id] &&
599+
!!values.metadata[uploadAssetOptions[i].id] &&
600600
values.sourceMode === "UPLOAD"
601601
) {
602602
formData.append(
603603
uploadAssetOptions[i].id + ".0",
604-
values[uploadAssetOptions[i].id] as File,
604+
values.metadata[uploadAssetOptions[i].id] as File,
605605
);
606606
assets.options = assets.options.concat(uploadAssetOptions[i]);
607607
}

src/slices/seriesSlice.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,6 @@ export const fetchSeriesThemes = createAppAsyncThunk("series/fetchSeriesThemes",
184184
// post new series to backend
185185
export const postNewSeries = (params: {
186186
values: {
187-
[key: string]: any;
188187
policies: TransformedAcl[],
189188
// contributor: string[],
190189
// creator: string[],
@@ -198,6 +197,7 @@ export const postNewSeries = (params: {
198197
// title: string,
199198
selectedPage?: TobiraPage,
200199
breadcrumbs?: TobiraPage[],
200+
metadata: { [key: string]: unknown }
201201
},
202202
metadataInfo: MetadataCatalog,
203203
extendedMetadata: MetadataCatalog[]
@@ -207,11 +207,11 @@ export const postNewSeries = (params: {
207207
// prepare metadata provided by user
208208
const metadata = prepareMetadataFieldsForPost(
209209
[metadataInfo],
210-
values,
210+
values.metadata,
211211
);
212212
const extendedMetadataCatalogs = prepareMetadataFieldsForPost(
213213
extendedMetadata,
214-
values,
214+
values.metadata,
215215
);
216216

217217
// metadata for post request

src/utils/validate.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,10 @@ export const MetadataSchema = (catalog: MetadataCatalog) => {
6868
for (const [key, value] of Object.entries(schema)) {
6969
schemaKeyReplace[catalog.flavor + "_" + key] = value;
7070
}
71-
const validateSchema = Yup.object().shape(schemaKeyReplace);
71+
72+
const validateSchema = Yup.object({
73+
metadata: Yup.object(schemaKeyReplace),
74+
});
7275

7376
return validateSchema;
7477
};

0 commit comments

Comments
 (0)