Skip to content

Commit 5070bea

Browse files
committed
Merge branch 'avoid-general-typing-for-metadata-in-create-modals' of Arnei/opencast-admin-interface into r/19.x
Pull request #1503 Put metadata in its own formik field in event/series create dialog
2 parents b32241e + 2d0991f commit 5070bea

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
@@ -263,15 +263,15 @@ const getInitialValues = (
263263
aclDefaultActions?: string[],
264264
aclDefaultTemplate?: AclTemplate,
265265
) => {
266-
let initialValues = initialFormValuesNewEvents;
266+
const initialValues = initialFormValuesNewEvents;
267267

268268
// Transform metadata fields provided by backend (saved in redux)
269-
initialValues = { ...initialValues, ...getInitialMetadataFieldValues(
269+
initialValues.metadata = { ...initialValues.metadata, ...getInitialMetadataFieldValues(
270270
metadataFields,
271271
) };
272272

273273
for (const catalog of extendedMetadata) {
274-
initialValues = { ...initialValues, ...getInitialMetadataFieldValues(
274+
initialValues.metadata = { ...initialValues.metadata, ...getInitialMetadataFieldValues(
275275
catalog,
276276
) };
277277
}
@@ -284,17 +284,17 @@ const getInitialValues = (
284284
// Transform additional metadata for source (provided by constant in newEventConfig)
285285
if (sourceMetadata.UPLOAD) {
286286
sourceMetadata.UPLOAD.metadata.forEach(field => {
287-
initialValues[field.id] = field.value;
287+
initialValues.metadata[field.id] = field.value;
288288
});
289289
}
290290
if (sourceMetadata.SCHEDULE_SINGLE) {
291291
sourceMetadata.SCHEDULE_SINGLE.metadata.forEach(field => {
292-
initialValues[field.id] = field.value;
292+
initialValues.metadata[field.id] = field.value;
293293
});
294294
}
295295
if (sourceMetadata.SCHEDULE_MULTIPLE) {
296296
sourceMetadata.SCHEDULE_MULTIPLE.metadata.forEach(field => {
297-
initialValues[field.id] = field.value;
297+
initialValues.metadata[field.id] = field.value;
298298
});
299299
}
300300

@@ -312,11 +312,6 @@ const getInitialValues = (
312312
};
313313
}
314314

315-
// Add all initial form values known upfront listed in newEventsConfig
316-
for (const [key, value] of Object.entries(initialFormValuesNewEvents)) {
317-
initialValues[key] = value;
318-
}
319-
320315
const defaultDate = new Date();
321316

322317
// 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
},
@@ -241,7 +241,7 @@ const getInitialValues = (
241241
aclDefaultActions: string[],
242242
aclDefaultTemplate?: AclTemplate,
243243
) => {
244-
let initialValues = initialFormValuesNewSeries;
244+
const initialValues = initialFormValuesNewSeries;
245245

246246
// Transform metadata fields provided by backend (saved in redux)
247247
let metadataInitialValues = getInitialMetadataFieldValues(
@@ -254,7 +254,7 @@ const getInitialValues = (
254254
) };
255255
}
256256

257-
initialValues = { ...initialValues, ...metadataInitialValues };
257+
initialValues.metadata = { ...initialValues, ...metadataInitialValues };
258258

259259
initialValues["policies"] = [
260260
{

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
@@ -452,7 +452,7 @@ export const postNewEvent = (params: {
452452
scheduleStartMinute: string,
453453
sourceMode: string,
454454
uploadAssetsTrack?: UploadAssetsTrack[],
455-
[key: string]: unknown,
455+
metadata: { [key: string]: unknown },
456456
},
457457
metadataInfo: MetadataCatalog,
458458
extendedMetadata: MetadataCatalog[],
@@ -479,11 +479,11 @@ export const postNewEvent = (params: {
479479
// prepare metadata provided by user
480480
const metadata = prepareMetadataFieldsForPost(
481481
[metadataInfo],
482-
values,
482+
values.metadata,
483483
);
484484
const extendedMetadataCatalogs = prepareMetadataFieldsForPost(
485485
extendedMetadata,
486-
values,
486+
values.metadata,
487487
);
488488

489489
// if source mode is UPLOAD than also put metadata fields of that in metadataFields
@@ -496,7 +496,7 @@ export const postNewEvent = (params: {
496496
for (const smetadata of sourceMetadata.UPLOAD.metadata) {
497497
metadata[0].fields = metadata[0].fields.concat({
498498
id: smetadata.id,
499-
value: values[smetadata.id],
499+
value: values.metadata[smetadata.id],
500500
type: smetadata.type,
501501
});
502502
}
@@ -544,7 +544,7 @@ export const postNewEvent = (params: {
544544
type: values.sourceMode,
545545
metadata: {
546546
start: startDate,
547-
device: values.location,
547+
device: values.metadata.location,
548548
inputs: values.inputs ? values.inputs.join(",") : "",
549549
end: endDate,
550550
duration: duration.toString(),
@@ -598,12 +598,12 @@ export const postNewEvent = (params: {
598598
}
599599
for (let i = 0; uploadAssetOptions.length > i; i++) {
600600
if (
601-
!!values[uploadAssetOptions[i].id] &&
601+
!!values.metadata[uploadAssetOptions[i].id] &&
602602
values.sourceMode === "UPLOAD"
603603
) {
604604
formData.append(
605605
uploadAssetOptions[i].id + ".0",
606-
values[uploadAssetOptions[i].id] as File,
606+
values.metadata[uploadAssetOptions[i].id] as File,
607607
);
608608
assets.options = assets.options.concat(uploadAssetOptions[i]);
609609
}

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)