From 3d3d13926ad500c42c6aafccb1ff3cc9b024e12c Mon Sep 17 00:00:00 2001 From: Priscila Moneo Date: Wed, 17 Jun 2026 15:39:17 -0300 Subject: [PATCH] fix: page templates date field required Signed-off-by: Priscila Moneo --- .../page-templates/page-template-list-page.js | 1 + .../page-template-popup/index.js | 10 +++--- .../page-template-media-request-module.js | 34 +++++++++++------- .../page-template-modules-form.js | 13 +++++-- src/utils/__tests__/page-template.test.js | 36 ++++++++++++++++++- src/utils/constants.js | 4 +++ src/utils/page-template.js | 3 +- 7 files changed, 79 insertions(+), 22 deletions(-) diff --git a/src/pages/sponsors-global/page-templates/page-template-list-page.js b/src/pages/sponsors-global/page-templates/page-template-list-page.js index 0b4b05d21..5f0bc4d53 100644 --- a/src/pages/sponsors-global/page-templates/page-template-list-page.js +++ b/src/pages/sponsors-global/page-templates/page-template-list-page.js @@ -285,6 +285,7 @@ const PageTemplateListPage = ({ pageTemplate={pageTemplate} onClose={handleClosePageDialog} onSave={handleSavePageTemplate} + isGlobal /> )} {openCloneDialog && ( diff --git a/src/pages/sponsors-global/page-templates/page-template-popup/index.js b/src/pages/sponsors-global/page-templates/page-template-popup/index.js index 91a7b2068..46636cea3 100644 --- a/src/pages/sponsors-global/page-templates/page-template-popup/index.js +++ b/src/pages/sponsors-global/page-templates/page-template-popup/index.js @@ -41,7 +41,8 @@ const PageTemplatePopup = ({ summitId, sponsorId, sponsorshipIds, - title + title, + isGlobal }) => { const popupTitle = title ?? @@ -82,7 +83,7 @@ const PageTemplatePopup = ({ kind: yup.string().equals([PAGES_MODULE_KINDS.MEDIA]), name: yup.string().required(T.translate("validation.required")), type: yup.string().required(T.translate("validation.required")), - upload_deadline: yup.date().required(T.translate("validation.required")), + upload_deadline: yup.date().nullable(), description: yup.string().required(T.translate("validation.required")), max_file_size: yup.number().when("type", { is: PAGE_MODULES_MEDIA_TYPES.FILE, @@ -301,7 +302,7 @@ const PageTemplatePopup = ({ - + @@ -323,7 +324,8 @@ PageTemplatePopup.propTypes = { sponsorshipIds: PropTypes.array, summitId: PropTypes.number, sponsorId: PropTypes.number, - title: PropTypes.string + title: PropTypes.string, + isGlobal: PropTypes.bool }; export default PageTemplatePopup; diff --git a/src/pages/sponsors-global/page-templates/page-template-popup/modules/page-template-media-request-module.js b/src/pages/sponsors-global/page-templates/page-template-popup/modules/page-template-media-request-module.js index 72f11853e..610959506 100644 --- a/src/pages/sponsors-global/page-templates/page-template-popup/modules/page-template-media-request-module.js +++ b/src/pages/sponsors-global/page-templates/page-template-popup/modules/page-template-media-request-module.js @@ -8,10 +8,14 @@ import MuiFormikDatepicker from "openstack-uicore-foundation/lib/components/mui/ import MuiFormikTextField from "../../../../../components/mui/formik-inputs/mui-formik-textfield"; import MuiFormikRadioGroup from "../../../../../components/mui/formik-inputs/mui-formik-radio-group"; import MuiFormikFilesizeField from "../../../../../components/mui/formik-inputs/mui-formik-file-size-field"; -import { PAGE_MODULES_MEDIA_TYPES } from "../../../../../utils/constants"; +import { + COLUMN_6, + COLUMN_12, + PAGE_MODULES_MEDIA_TYPES +} from "../../../../../utils/constants"; import MuiFormikSelect from "../../../../../components/mui/formik-inputs/mui-formik-select"; -const MediaRequestModule = ({ baseName, index, mediaFileTypes }) => { +const MediaRequestModule = ({ baseName, index, mediaFileTypes, isGlobal }) => { const { values } = useFormikContext(); const buildFieldName = (field) => `${baseName}[${index}].${field}`; @@ -47,7 +51,7 @@ const MediaRequestModule = ({ baseName, index, mediaFileTypes }) => { - + {T.translate("page_template_list.page_crud.name")} @@ -57,15 +61,17 @@ const MediaRequestModule = ({ baseName, index, mediaFileTypes }) => { margin="none" /> - - - {T.translate("page_template_list.page_crud.upload_deadline")} - - - + {!isGlobal && ( + + + {T.translate("page_template_list.page_crud.upload_deadline")} + + + + )} {mediaType === PAGE_MODULES_MEDIA_TYPES.FILE && ( <> @@ -129,7 +135,9 @@ const MediaRequestModule = ({ baseName, index, mediaFileTypes }) => { MediaRequestModule.propTypes = { baseName: PropTypes.string.isRequired, - index: PropTypes.number.isRequired + index: PropTypes.number.isRequired, + mediaFileTypes: PropTypes.array.isRequired, + isGlobal: PropTypes.bool }; const mapStateToProps = ({ mediaUploadState }) => ({ diff --git a/src/pages/sponsors-global/page-templates/page-template-popup/page-template-modules-form.js b/src/pages/sponsors-global/page-templates/page-template-popup/page-template-modules-form.js index 67bf40ecc..0ee76ecc0 100644 --- a/src/pages/sponsors-global/page-templates/page-template-popup/page-template-modules-form.js +++ b/src/pages/sponsors-global/page-templates/page-template-popup/page-template-modules-form.js @@ -25,7 +25,7 @@ import DocumentDownloadModule from "./modules/page-template-document-download-mo import MediaRequestModule from "./modules/page-template-media-request-module"; import { getAllMediaFileTypes } from "../../../../actions/media-file-type-actions"; -const PageModules = ({ name = "modules", getAllMediaFileTypes }) => { +const PageModules = ({ name = "modules", getAllMediaFileTypes, isGlobal }) => { const { values, setFieldValue, errors, submitCount } = useFormikContext(); const modules = getIn(values, name) || []; const moduleErrors = getIn(errors, name); @@ -129,7 +129,13 @@ const PageModules = ({ name = "modules", getAllMediaFileTypes }) => { case PAGES_MODULE_KINDS.DOCUMENT: return ; case PAGES_MODULE_KINDS.MEDIA: - return ; + return ( + + ); default: return null; } @@ -225,7 +231,8 @@ const PageModules = ({ name = "modules", getAllMediaFileTypes }) => { }; PageModules.propTypes = { - name: PropTypes.string + name: PropTypes.string, + isGlobal: PropTypes.bool }; const mapStateToProps = () => ({}); diff --git a/src/utils/__tests__/page-template.test.js b/src/utils/__tests__/page-template.test.js index 60d402b48..68b7b4a81 100644 --- a/src/utils/__tests__/page-template.test.js +++ b/src/utils/__tests__/page-template.test.js @@ -93,6 +93,30 @@ describe("normalizePageTemplateModules", () => { const [result] = normalizePageTemplateModules([module]); expect(result.max_file_size).toBe(2048); }); + + it("should omit upload_deadline from payload when null (global template)", () => { + const module = { + kind: PAGES_MODULE_KINDS.MEDIA, + type: PAGE_MODULES_MEDIA_TYPES.FILE, + upload_deadline: null, + file_type_id: 3, + max_file_size: 1024 + }; + const [result] = normalizePageTemplateModules([module]); + expect(result).not.toHaveProperty("upload_deadline"); + }); + + it("should omit upload_deadline from payload when undefined", () => { + const module = { + kind: PAGES_MODULE_KINDS.MEDIA, + type: PAGE_MODULES_MEDIA_TYPES.FILE, + upload_deadline: undefined, + file_type_id: 3, + max_file_size: 1024 + }; + const [result] = normalizePageTemplateModules([module]); + expect(result).not.toHaveProperty("upload_deadline"); + }); }); describe("MEDIA kind — INPUT type", () => { @@ -116,7 +140,17 @@ describe("normalizePageTemplateModules", () => { type: PAGE_MODULES_MEDIA_TYPES.INPUT }; const [result] = normalizePageTemplateModules([module]); - expect(result.upload_deadline).toBeUndefined(); + expect(result).not.toHaveProperty("upload_deadline"); + }); + + it("should omit upload_deadline from payload when null (global template)", () => { + const module = { + kind: PAGES_MODULE_KINDS.MEDIA, + type: PAGE_MODULES_MEDIA_TYPES.INPUT, + upload_deadline: null + }; + const [result] = normalizePageTemplateModules([module]); + expect(result).not.toHaveProperty("upload_deadline"); }); }); diff --git a/src/utils/constants.js b/src/utils/constants.js index 4b217d060..858f1f13b 100644 --- a/src/utils/constants.js +++ b/src/utils/constants.js @@ -154,8 +154,12 @@ export const ONE_HUNDRED = 100; export const COLUMN_4 = 4; +export const COLUMN_6 = 6; + export const COLUMN_8 = 8; +export const COLUMN_12 = 12; + export const DEFAULT_Z_INDEX = 1; export const HIGH_Z_INDEX = 9999; diff --git a/src/utils/page-template.js b/src/utils/page-template.js index c57d8d831..775be4541 100644 --- a/src/utils/page-template.js +++ b/src/utils/page-template.js @@ -46,6 +46,8 @@ export const normalizePageTemplateModules = (modules = [], timeZone = null) => normalizedModule.upload_deadline = timeZone ? moment.tz(module.upload_deadline, timeZone).unix() : moment.utc(module.upload_deadline).unix(); + } else { + delete normalizedModule.upload_deadline; } if (module.file_type_id) { @@ -81,4 +83,3 @@ export const normalizePageTemplateModules = (modules = [], timeZone = null) => return normalizedModule; }); - \ No newline at end of file