diff --git a/src/actions/page-template-actions.js b/src/actions/page-template-actions.js index f008bb15d..3340525b2 100644 --- a/src/actions/page-template-actions.js +++ b/src/actions/page-template-actions.js @@ -30,6 +30,7 @@ import { DEFAULT_ORDER_DIR, DEFAULT_PER_PAGE, PAGE_MODULES_DOWNLOAD, + PAGE_MODULES_MEDIA_TYPES, PAGES_MODULE_KINDS } from "../utils/constants"; import { snackbarErrorHandler, snackbarSuccessHandler } from "./base-actions"; @@ -56,10 +57,7 @@ export const getPageTemplates = orderDir = DEFAULT_ORDER_DIR, hideArchived = false ) => - async (dispatch, getState) => { - const { currentSummitState } = getState(); - const { currentSummit } = currentSummitState; - const summitTZ = currentSummit.time_zone?.name; + async (dispatch) => { const accessToken = await getAccessTokenSafely(); const filter = []; @@ -97,7 +95,7 @@ export const getPageTemplates = createAction(RECEIVE_PAGE_TEMPLATES), `${window.SPONSOR_PAGES_API_URL}/api/v1/page-templates`, authErrorHandler, - { order, orderDir, page, perPage, term, hideArchived, summitTZ } + { order, orderDir, page, perPage, term, hideArchived } )(params)(dispatch).then(() => { dispatch(stopLoading()); }); @@ -153,15 +151,22 @@ const normalizeEntity = (entity) => { normalizedEntity.modules = entity.modules.map((module) => { const normalizedModule = { ...module }; - if (module.kind === PAGES_MODULE_KINDS.MEDIA && module.upload_deadline) { - normalizedModule.upload_deadline = moment - .utc(module.upload_deadline) - .unix(); - } + if (module.kind === PAGES_MODULE_KINDS.MEDIA) { + if (module.upload_deadline) { + normalizedModule.upload_deadline = moment + .utc(module.upload_deadline) + .unix(); + } - if (module.kind === PAGES_MODULE_KINDS.MEDIA && module.file_type_id) { - normalizedModule.file_type_id = - module.file_type_id?.value || module.file_type_id; + if (module.file_type_id) { + normalizedModule.file_type_id = + module.file_type_id?.value || module.file_type_id; + } + + if (module.type === PAGE_MODULES_MEDIA_TYPES.INPUT) { + delete normalizedModule.file_type_id; + delete normalizedModule.max_file_size; + } } if (module.kind === PAGES_MODULE_KINDS.DOCUMENT) { diff --git a/src/actions/show-pages-actions.js b/src/actions/show-pages-actions.js index 05b90ee28..4c7333767 100644 --- a/src/actions/show-pages-actions.js +++ b/src/actions/show-pages-actions.js @@ -113,7 +113,7 @@ export const getShowPage = (pageId) => async (dispatch, getState) => { const params = { access_token: accessToken, - expand: "modules,modules.file_type" + expand: "modules" }; return getRequest( 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 7e17f757d..69d128c21 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 @@ -30,7 +30,8 @@ import { getPageTemplates, getPageTemplate, savePageTemplate, - unarchivePageTemplate + unarchivePageTemplate, + resetPageTemplateForm } from "../../../actions/page-template-actions"; import MuiTable from "../../../components/mui/table/mui-table"; import SearchInput from "../../../components/mui/search-input"; @@ -40,6 +41,7 @@ import PageTemplateClonePopup from "./page-template-clone-popup"; const PageTemplateListPage = ({ pageTemplates, + pageTemplate, currentPage, perPage, term, @@ -53,9 +55,9 @@ const PageTemplateListPage = ({ unarchivePageTemplate, savePageTemplate, deletePageTemplate, - summitTZ + resetPageTemplateForm }) => { - const [pageTemplateId, setPageTemplateId] = useState(null); + const [openPageDialog, setOpenPageDialog] = useState(false); const [openCloneDialog, setOpenCloneDialog] = useState(false); useEffect(() => { @@ -104,7 +106,8 @@ const PageTemplateListPage = ({ }; const handleNewPageTemplate = () => { - setPageTemplateId("new"); + resetPageTemplateForm(); + setOpenPageDialog(true); }; const handleClonePageTemplate = () => { @@ -112,7 +115,7 @@ const PageTemplateListPage = ({ }; const handleSavePageTemplate = (entity) => { - savePageTemplate(entity).then(() => setPageTemplateId(null)); + savePageTemplate(entity).then(() => setOpenPageDialog(false)); }; const handleArchive = (item) => @@ -121,7 +124,7 @@ const PageTemplateListPage = ({ : archivePageTemplate(item.id); const handleEdit = (row) => { - getPageTemplate(row.id).then(() => setPageTemplateId(row.id)); + getPageTemplate(row.id).then(() => setOpenPageDialog(true)); }; const handleDelete = (row) => { @@ -137,6 +140,11 @@ const PageTemplateListPage = ({ ); }; + const handleClosePageDialog = () => { + resetPageTemplateForm(); + setOpenPageDialog(false); + }; + const columns = [ { columnKey: "code", @@ -268,10 +276,10 @@ const PageTemplateListPage = ({ )} setPageTemplateId(null)} + open={openPageDialog} + pageTemplate={pageTemplate} + onClose={handleClosePageDialog} onSave={handleSavePageTemplate} - summitTZ={summitTZ} /> ({ - ...pageTemplateListState +const mapStateToProps = ({ pageTemplateListState, pageTemplateState }) => ({ + ...pageTemplateListState, + pageTemplate: pageTemplateState.entity }); export default connect(mapStateToProps, { @@ -291,5 +300,6 @@ export default connect(mapStateToProps, { archivePageTemplate, unarchivePageTemplate, savePageTemplate, - deletePageTemplate + deletePageTemplate, + resetPageTemplateForm })(PageTemplateListPage); 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 506151bbc..faa6a89b5 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 @@ -1,6 +1,5 @@ import React from "react"; import T from "i18n-react/dist/i18n-react"; -import { connect } from "react-redux"; import PropTypes from "prop-types"; import { Box, @@ -18,10 +17,8 @@ import AddIcon from "@mui/icons-material/Add"; import CloseIcon from "@mui/icons-material/Close"; import { FormikProvider, useFormik } from "formik"; import * as yup from "yup"; -import { epochToMomentTimeZone } from "openstack-uicore-foundation/lib/utils/methods"; import MuiFormikTextField from "../../../../components/mui/formik-inputs/mui-formik-textfield"; import PageModules from "./page-template-modules-form"; -import { resetPageTemplateForm } from "../../../../actions/page-template-actions"; import { BYTES_PER_MB, PAGES_MODULE_KINDS, @@ -29,40 +26,7 @@ import { PAGE_MODULES_DOWNLOAD } from "../../../../utils/constants"; -const normalizeModules = (modules = [], summitTZ = "UTC") => - modules.map((m) => { - if (m.kind === PAGES_MODULE_KINDS.MEDIA) { - const normalizeModule = { ...m }; - if (m.upload_deadline) { - normalizeModule.upload_deadline = epochToMomentTimeZone( - m.upload_deadline, - summitTZ - ); - } - if (m.file_type) { - normalizeModule.file_type_id = { - value: m.file_type.id, - label: `${m.file_type.name} (${m.file_type.allowed_extensions})` - }; - } - return normalizeModule; - } - return m; - }); - -const PageTemplatePopup = ({ - pageTemplate, - open, - onClose, - onSave, - summitTZ, - resetPageTemplateForm -}) => { - const handleClose = () => { - resetPageTemplateForm(); - onClose(); - }; - +const PageTemplatePopup = ({ pageTemplate, open, onClose, onSave }) => { const addModule = (moduleData) => { const modules = formik.values.modules || []; const newModule = { @@ -163,10 +127,7 @@ const PageTemplatePopup = ({ }); const formik = useFormik({ - initialValues: { - ...pageTemplate, - modules: normalizeModules(pageTemplate?.modules, summitTZ) || [] - }, + initialValues: pageTemplate, validationSchema: yup.object().shape({ code: yup.string().required(T.translate("validation.required")), name: yup.string().required(T.translate("validation.required")), @@ -184,12 +145,12 @@ const PageTemplatePopup = ({ }); return ( - + {T.translate("page_template_list.page_crud.title")} - handleClose()} sx={{ mr: 1 }}> + @@ -271,14 +232,7 @@ const PageTemplatePopup = ({ PageTemplatePopup.propTypes = { open: PropTypes.bool.isRequired, onClose: PropTypes.func.isRequired, - onSave: PropTypes.func.isRequired, - summitTZ: PropTypes.string.isRequired + onSave: PropTypes.func.isRequired }; -const mapStateToProps = ({ pageTemplateState }) => ({ - pageTemplate: pageTemplateState.entity -}); - -export default connect(mapStateToProps, { - resetPageTemplateForm -})(PageTemplatePopup); +export default PageTemplatePopup; diff --git a/src/pages/sponsors/show-pages-list-page/index.js b/src/pages/sponsors/show-pages-list-page/index.js index 47b100a4c..7fb7c55fa 100644 --- a/src/pages/sponsors/show-pages-list-page/index.js +++ b/src/pages/sponsors/show-pages-list-page/index.js @@ -47,7 +47,6 @@ const ShowPagesListPage = ({ orderDir, hideArchived, totalCount, - summitTZ, currentShowPage, getShowPages, archiveShowPage, @@ -120,6 +119,11 @@ const ShowPagesListPage = ({ setOpenPopup(null); }; + const handleNewShowPage = () => { + resetShowPageForm(); + setOpenPopup("pageTemplate"); + }; + const columns = [ { columnKey: "code", @@ -207,7 +211,7 @@ const ShowPagesListPage = ({ variant="contained" size="medium" fullWidth - onClick={() => setOpenPopup("pageTemplate")} + onClick={handleNewShowPage} startIcon={} sx={{ height: "36px" }} > @@ -248,7 +252,6 @@ const ShowPagesListPage = ({ pageTemplate={currentShowPage} onClose={handleTemplatePopupClose} onSave={handleSaveShowPage} - summitTZ={summitTZ} /> ); diff --git a/src/reducers/sponsors/show-pages-list-reducer.js b/src/reducers/sponsors/show-pages-list-reducer.js index 8e244d437..52ff5abb5 100644 --- a/src/reducers/sponsors/show-pages-list-reducer.js +++ b/src/reducers/sponsors/show-pages-list-reducer.js @@ -12,6 +12,7 @@ * */ import { LOGOUT_USER } from "openstack-uicore-foundation/lib/security/actions"; +import { epochToMomentTimeZone } from "openstack-uicore-foundation/lib/utils/methods"; import { RECEIVE_SHOW_PAGE, RECEIVE_SHOW_PAGES, @@ -114,9 +115,24 @@ const showPagesListReducer = (state = DEFAULT_STATE, action) => { }; } case RECEIVE_SHOW_PAGE: { - const showPage = payload.response; + const pageData = payload.response; - return { ...state, currentShowPage: showPage }; + const currentShowPage = { + ...pageData, + modules: pageData.modules.map((m) => ({ + ...m, + ...(m.upload_deadline + ? { + upload_deadline: epochToMomentTimeZone( + m.upload_deadline, + state.summitTZ || "UTC" + ) + } + : {}) + })) + }; + + return { ...state, currentShowPage }; } case SHOW_PAGE_DELETED: { const { pageId } = payload; diff --git a/src/reducers/sponsors_inventory/page-template-list-reducer.js b/src/reducers/sponsors_inventory/page-template-list-reducer.js index f62e32403..15a4f0ee1 100644 --- a/src/reducers/sponsors_inventory/page-template-list-reducer.js +++ b/src/reducers/sponsors_inventory/page-template-list-reducer.js @@ -30,8 +30,7 @@ const DEFAULT_STATE = { lastPage: 1, perPage: 10, totalPageTemplates: 0, - hideArchived: false, - summitTZ: null + hideArchived: false }; const pageTemplateListReducer = (state = DEFAULT_STATE, action = {}) => {