diff --git a/src/actions/sponsor-pages-actions.js b/src/actions/sponsor-pages-actions.js index cb7355d1d..66beca17e 100644 --- a/src/actions/sponsor-pages-actions.js +++ b/src/actions/sponsor-pages-actions.js @@ -34,6 +34,15 @@ export const RECEIVE_SPONSOR_PAGES = "RECEIVE_SPONSOR_PAGES"; export const GLOBAL_PAGE_CLONED = "GLOBAL_PAGE_CLONED"; +export const REQUEST_SPONSOR_MANAGED_PAGES = "REQUEST_SPONSOR_MANAGED_PAGES"; +export const RECEIVE_SPONSOR_MANAGED_PAGES = "RECEIVE_SPONSOR_MANAGED_PAGES"; +export const SPONSOR_MANAGED_PAGE_ADDED = "SPONSOR_MANAGED_PAGE_ADDED"; + +export const REQUEST_SPONSOR_CUSTOMIZED_PAGES = + "REQUEST_SPONSOR_CUSTOMIZED_PAGES"; +export const RECEIVE_SPONSOR_CUSTOMIZED_PAGES = + "RECEIVE_SPONSOR_CUSTOMIZED_PAGES"; + export const getSponsorPages = ( term = "", @@ -133,3 +142,166 @@ export const cloneGlobalPage = }) .finally(() => dispatch(stopLoading())); }; + +/* ************************************************************************ */ +/* MANAGED PAGES */ +/* ************************************************************************ */ + +export const getSponsorManagedPages = + ( + term = "", + page = DEFAULT_CURRENT_PAGE, + perPage = DEFAULT_PER_PAGE, + order = "id", + orderDir = DEFAULT_ORDER_DIR, + hideArchived = false + ) => + async (dispatch, getState) => { + const { currentSummitState, currentSponsorState } = getState(); + const { currentSummit } = currentSummitState; + const { + entity: { id: sponsorId } + } = currentSponsorState; + const accessToken = await getAccessTokenSafely(); + const summitTZ = currentSummit.time_zone.name; + const filter = []; + + dispatch(startLoading()); + + if (term) { + const escapedTerm = escapeFilterValue(term); + filter.push(`name=@${escapedTerm},code=@${escapedTerm}`); + } + + const params = { + page, + fields: "id,code,name,kind,modules_count,allowed_add_ons", + per_page: perPage, + access_token: accessToken + }; + + if (hideArchived) filter.push("is_archived==0"); + + if (filter.length > 0) { + params["filter[]"] = filter; + } + + // order + if (order != null && orderDir != null) { + const orderDirSign = orderDir === 1 ? "" : "-"; + params.order = `${orderDirSign}${order}`; + } + + return getRequest( + createAction(REQUEST_SPONSOR_MANAGED_PAGES), + createAction(RECEIVE_SPONSOR_MANAGED_PAGES), + `${window.SPONSOR_PAGES_API_URL}/api/v1/summits/${currentSummit.id}/sponsors/${sponsorId}/managed-pages`, + authErrorHandler, + { order, orderDir, page, perPage, term, hideArchived, summitTZ } + )(params)(dispatch).then(() => { + dispatch(stopLoading()); + }); + }; + +export const saveSponsorManagedPage = + (entity) => async (dispatch, getState) => { + const { currentSummitState, currentSponsorState } = getState(); + const { currentSummit } = currentSummitState; + const { + entity: { id: sponsorId } + } = currentSponsorState; + const accessToken = await getAccessTokenSafely(); + + dispatch(startLoading()); + + const normalizedEntity = normalizeSponsorManagedPage(entity); + + const params = { + access_token: accessToken, + fields: "id,code,name,kind,modules_count,allowed_add_ons" + }; + + return postRequest( + null, + createAction(SPONSOR_MANAGED_PAGE_ADDED), + `${window.SPONSOR_PAGES_API_URL}/api/v1/summits/${currentSummit.id}/sponsors/${sponsorId}/managed-pages`, + normalizedEntity, + snackbarErrorHandler + )(params)(dispatch).then(() => { + dispatch(stopLoading()); + }); + }; + +const normalizeSponsorManagedPage = (entity) => { + const normalizedEntity = { + show_page_ids: entity.pages, + allowed_add_ons: entity.add_ons.map((a) => a.id), + apply_to_all_add_ons: false + }; + + if (entity.add_ons.includes("all")) { + normalizedEntity.apply_to_all_add_ons = true; + normalizedEntity.allowed_add_ons = []; + } + + return normalizedEntity; +}; +/* ************************************************************************ */ +/* CUSTOMIZED PAGES */ +/* ************************************************************************ */ + +export const getSponsorCustomizedPages = + ( + term = "", + page = DEFAULT_CURRENT_PAGE, + perPage = DEFAULT_PER_PAGE, + order = "id", + orderDir = DEFAULT_ORDER_DIR, + hideArchived = false + ) => + async (dispatch, getState) => { + const { currentSummitState, currentSponsorState } = getState(); + const { currentSummit } = currentSummitState; + const { + entity: { id: sponsorId } + } = currentSponsorState; + const accessToken = await getAccessTokenSafely(); + const summitTZ = currentSummit.time_zone.name; + const filter = []; + + dispatch(startLoading()); + + if (term) { + const escapedTerm = escapeFilterValue(term); + filter.push(`name=@${escapedTerm},code=@${escapedTerm}`); + } + + const params = { + page, + fields: "id,code,name,kind,modules_count,allowed_add_ons", + per_page: perPage, + access_token: accessToken + }; + + if (hideArchived) filter.push("is_archived==0"); + + if (filter.length > 0) { + params["filter[]"] = filter; + } + + // order + if (order != null && orderDir != null) { + const orderDirSign = orderDir === 1 ? "" : "-"; + params.order = `${orderDirSign}${order}`; + } + + return getRequest( + createAction(REQUEST_SPONSOR_CUSTOMIZED_PAGES), + createAction(RECEIVE_SPONSOR_CUSTOMIZED_PAGES), + `${window.SPONSOR_PAGES_API_URL}/api/v1/summits/${currentSummit.id}/sponsors/${sponsorId}/sponsor-pages`, + authErrorHandler, + { order, orderDir, page, perPage, term, hideArchived, summitTZ } + )(params)(dispatch).then(() => { + dispatch(stopLoading()); + }); + }; diff --git a/src/components/mui/formik-inputs/mui-formik-select-group.js b/src/components/mui/formik-inputs/mui-formik-select-group.js index 9a1261d0a..60be7c1df 100644 --- a/src/components/mui/formik-inputs/mui-formik-select-group.js +++ b/src/components/mui/formik-inputs/mui-formik-select-group.js @@ -44,6 +44,7 @@ const MuiFormikSelectGroup = ({ selectAllLabel = "Select All", getOptionLabel = (item) => item.name, getOptionValue = (item) => item.id, + noOptionsLabel = "No items", getGroupId = null, getGroupLabel = null, disabled = false @@ -213,6 +214,79 @@ const MuiFormikSelectGroup = ({ .flat() .filter(Boolean); + const renderMenuContent = () => { + if (loading) { + return ( + + + + ); + } + + if (options.length === 0) { + return ( + + + + ); + } + + return ( + <> + {showSelectAll && ( + <> + { + // custom event value to select all + handleChange({ target: { value: ["selectAll"] } }); + }} + > + 0 && !isAllSelected} + sx={{ + p: 1, + "& svg": { + fontSize: 24 + } + }} + /> + + + + + )} + {renderGroupedOptions()} + + ); + }; + const IconWithLoading = useMemo(() => getCustomIcon(loading), [loading]); return ( @@ -243,54 +317,7 @@ const MuiFormikSelectGroup = ({ error={Boolean(error)} IconComponent={IconWithLoading} > - {loading ? ( - - - - ) : ( - <> - {showSelectAll && options.length > 0 && ( - <> - { - // custom event value to select all - handleChange({ target: { value: ["selectAll"] } }); - }} - > - 0 && !isAllSelected} - sx={{ - p: 1, - "& svg": { - fontSize: 24 - } - }} - /> - - - - - )} - {renderGroupedOptions()} - - )} + {renderMenuContent()} {error && (
{ + + + {sponsorFormItemRoute ? ( diff --git a/src/pages/sponsors/sponsor-pages-tab/components/add-sponsor-page-template-popup/index.js b/src/pages/sponsors/sponsor-pages-tab/components/add-sponsor-page-template-popup/index.js new file mode 100644 index 000000000..9ebbb049e --- /dev/null +++ b/src/pages/sponsors/sponsor-pages-tab/components/add-sponsor-page-template-popup/index.js @@ -0,0 +1,311 @@ +import React, { useEffect, useState } from "react"; +import T from "i18n-react/dist/i18n-react"; +import { connect } from "react-redux"; +import PropTypes from "prop-types"; +import { + Box, + Button, + Checkbox, + Dialog, + DialogActions, + DialogContent, + DialogTitle, + Divider, + FormControlLabel, + Grid2, + IconButton, + TextField, + Typography +} from "@mui/material"; +import SwapVertIcon from "@mui/icons-material/SwapVert"; +import SearchIcon from "@mui/icons-material/Search"; +import CloseIcon from "@mui/icons-material/Close"; +import * as yup from "yup"; +import { FormikProvider, useFormik } from "formik"; +import MuiTable from "../../../../../components/mui/table/mui-table"; +import MenuButton from "../../../../../components/mui/menu-button"; +import { querySponsorAddons } from "../../../../../actions/sponsor-actions"; +import { getSponsorPages } from "../../../../../actions/sponsor-pages-actions"; +import { FIVE_PER_PAGE } from "../../../../../utils/constants"; +import MuiFormikSelectGroup from "../../../../../components/mui/formik-inputs/mui-formik-select-group"; + +const AddSponsorPageTemplatePopup = ({ + onClose, + onSubmit, + sponsorPages, + currentPage, + perPage, + order, + orderDir, + totalCount, + term = "", + getSponsorPages, + sponsor, + summitId +}) => { + const [searchTerm, setSearchTerm] = useState(""); + const [selectedPages, setSelectedPages] = useState([]); + + const sponsorshipIds = sponsor.sponsorships.map((e) => e.id); + + const sponsorshipTypeIds = sponsor.sponsorships.map((e) => e.type.id); + + const formik = useFormik({ + initialValues: { + add_ons: [] + }, + validationSchema: yup.object({ + add_ons: yup + .array() + .test( + "add_ons-required", + "Select at least one add-on", + (value) => value?.includes("all") || value?.length > 0 + ) + }), + onSubmit: (values) => { + const { add_ons } = values; + const entity = { + pages: selectedPages, + add_ons + }; + onSubmit(entity); + }, + enableReinitialize: true + }); + + useEffect(() => { + getSponsorPages( + term, + currentPage, + FIVE_PER_PAGE, + order, + orderDir, + false, + sponsorshipTypeIds + ); + }, []); + + const handlePageChange = (page) => { + getSponsorPages( + term, + page, + FIVE_PER_PAGE, + order, + orderDir, + false, + sponsorshipTypeIds + ); + }; + + const handleSort = (key, dir) => { + getSponsorPages( + term, + currentPage, + FIVE_PER_PAGE, + key, + dir, + false, + sponsorshipTypeIds + ); + }; + + const handleOnSearch = (ev) => { + if (ev.key === "Enter") + getSponsorPages( + searchTerm, + currentPage, + perPage, + order, + orderDir, + false, + sponsorshipTypeIds + ); + }; + + const handleSelected = (id, isSelected) => { + if (isSelected) { + setSelectedPages([...selectedPages, id]); + return; + } + const updatedSelected = selectedPages.filter((e) => e !== id); + setSelectedPages(updatedSelected); + }; + + const handleClose = () => { + onClose(); + }; + + const tableOptions = { + sortCol: order, + sortDir: orderDir + }; + + const columns = [ + { + columnKey: "select", + header: "", + width: 30, + align: "center", + render: (row) => ( + handleSelected(row.id, ev.target.checked)} + /> + } + /> + ) + }, + { + columnKey: "code", + header: T.translate("edit_sponsor.pages_tab.code"), + sortable: false + }, + { + columnKey: "name", + header: T.translate("edit_sponsor.pages_tab.name"), + sortable: false + }, + { + columnKey: "info_mod", + header: T.translate("edit_sponsor.pages_tab.info_mod") + }, + { + columnKey: "upload_mod", + header: T.translate("edit_sponsor.pages_tab.upload_mod") + }, + { + columnKey: "download_mod", + header: T.translate("edit_sponsor.pages_tab.download_mod") + } + ]; + + return ( + + + + {T.translate("edit_sponsor.pages_tab.add_page_using_template")} + + handleClose()} sx={{ mr: 1 }}> + + + + + + + + + addon.sponsorship.type.id} + getGroupLabel={(addon) => addon.sponsorship.type.type.name} + noOptionsLabel={T.translate( + "edit_sponsor.pages_tab.no_add_ons" + )} + placeholder={T.translate( + "edit_sponsor.placeholders.select_add_ons" + )} + /> + + + + {selectedPages.length} items selected + + + + handleSort("name", 1) }, + { label: "Z-A", onClick: () => handleSort("name", 0) } + ]} + > + sort by + + + + + } + }} + onChange={(event) => setSearchTerm(event.target.value)} + onKeyDown={handleOnSearch} + fullWidth + sx={{ + "& .MuiOutlinedInput-root": { + height: "36px" + } + }} + /> + + + + + {sponsorPages.length > 0 && ( + + + + )} + + + + + + + + + ); +}; + +AddSponsorPageTemplatePopup.propTypes = { + onClose: PropTypes.func.isRequired +}; + +const mapStateToProps = ({ sponsorPagesListState }) => ({ + ...sponsorPagesListState +}); + +export default connect(mapStateToProps, { + getSponsorPages +})(AddSponsorPageTemplatePopup); diff --git a/src/pages/sponsors/sponsor-pages-tab/index.js b/src/pages/sponsors/sponsor-pages-tab/index.js new file mode 100644 index 000000000..811801bc8 --- /dev/null +++ b/src/pages/sponsors/sponsor-pages-tab/index.js @@ -0,0 +1,371 @@ +/** + * Copyright 2024 OpenStack Foundation + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * */ + +import React, { useEffect, useState } from "react"; +import { connect } from "react-redux"; +import T from "i18n-react/dist/i18n-react"; +import { + Box, + Button, + Checkbox, + FormControlLabel, + FormGroup, + Grid2 +} from "@mui/material"; +import AddIcon from "@mui/icons-material/Add"; +import { + getSponsorManagedPages, + getSponsorCustomizedPages, + saveSponsorManagedPage +} from "../../../actions/sponsor-pages-actions"; +import CustomAlert from "../../../components/mui/custom-alert"; +import SearchInput from "../../../components/mui/search-input"; +import MuiTable from "../../../components/mui/table/mui-table"; +import { DEFAULT_CURRENT_PAGE } from "../../../utils/constants"; +import AddSponsorPageTemplatePopup from "./components/add-sponsor-page-template-popup"; + +const SponsorPagesTab = ({ + sponsor, + summitId, + term, + hideArchived, + managedPages, + customizedPages, + getSponsorManagedPages, + getSponsorCustomizedPages, + saveSponsorManagedPage +}) => { + const [openPopup, setOpenPopup] = useState(null); + + useEffect(() => { + getSponsorManagedPages(); + getSponsorCustomizedPages(); + }, []); + + const handleManagedPageChange = (page) => { + const { perPage, order, orderDir } = managedPages; + getSponsorManagedPages(term, page, perPage, order, orderDir, hideArchived); + }; + + const handleManagedPerPageChange = (newPerPage) => { + const { currentPage, order, orderDir } = managedPages; + getSponsorManagedPages( + term, + currentPage, + newPerPage, + order, + orderDir, + hideArchived + ); + }; + + const handleManagedSort = (key, dir) => { + const { currentPage, perPage } = managedPages; + getSponsorManagedPages(term, currentPage, perPage, key, dir, hideArchived); + }; + + const handleCustomizedPageChange = (page) => { + const { perPage, order, orderDir } = customizedPages; + getSponsorCustomizedPages( + term, + page, + perPage, + order, + orderDir, + hideArchived + ); + }; + + const handleCustomizedPerPageChange = (newPerPage) => { + const { currentPage, order, orderDir } = customizedPages; + getSponsorCustomizedPages( + term, + currentPage, + newPerPage, + order, + orderDir, + hideArchived + ); + }; + + const handleCustomizedSort = (key, dir) => { + const { currentPage, perPage } = customizedPages; + + getSponsorCustomizedPages( + term, + currentPage, + perPage, + key, + dir, + hideArchived + ); + }; + + const handleSearch = (searchTerm) => { + const { + perPage: perPageManaged, + order: orderManaged, + orderDir: orderDirManaged + } = managedPages; + const { + perPage: perPageCustomized, + order: orderCustomized, + orderDir: orderDirCustomized + } = customizedPages; + getSponsorManagedPages( + searchTerm, + DEFAULT_CURRENT_PAGE, + perPageManaged, + orderManaged, + orderDirManaged, + hideArchived + ); + getSponsorCustomizedPages( + searchTerm, + DEFAULT_CURRENT_PAGE, + perPageCustomized, + orderCustomized, + orderDirCustomized, + hideArchived + ); + }; + + const handleUsingTemplate = () => { + setOpenPopup("template"); + }; + + const handleArchiveCustomizedPage = (item) => + console.log("ARCHIVE CUSTOMIZED ", item); + + const handleArchiveManagedPage = (item) => + console.log("ARCHIVE MANAGED ", item); + + const handleManagedEdit = (item) => { + console.log("EDIT MANAGED ", item); + }; + + const handleManagedDelete = (itemId) => { + console.log("DELETE MANAGED ", itemId); + }; + + const handleCustomizedEdit = (item) => { + console.log("EDIT CUSTOMIZED ", item); + }; + + const handleCustomizedDelete = (itemId) => { + console.log("DELETE CUSTOMIZED ", itemId); + }; + + const handleHideArchived = (ev) => { + getSponsorManagedPages( + term, + DEFAULT_CURRENT_PAGE, + managedPages.perPage, + managedPages.order, + managedPages.orderDir, + ev.target.checked + ); + getSponsorCustomizedPages( + term, + DEFAULT_CURRENT_PAGE, + customizedPages.perPage, + customizedPages.order, + customizedPages.orderDir, + ev.target.checked + ); + }; + + const handleSaveManagedPageFromTemplate = (entity) => { + saveSponsorManagedPage(entity).then(() => { + setOpenPopup(null); + getSponsorManagedPages(); + }); + }; + + const baseColumns = (name) => [ + { + columnKey: "name", + header: name, + sortable: true + }, + { + columnKey: "code", + header: T.translate("edit_sponsor.pages_tab.code"), + sortable: true + }, + { + columnKey: "allowed_add_ons", + header: T.translate("edit_sponsor.pages_tab.add_ons"), + sortable: true, + render: (row) => + row.allowed_add_ons?.length > 0 + ? row.allowed_add_ons.map((a) => `${a.type} ${a.name}`).join(", ") + : "" + }, + { + columnKey: "info_mod", + header: T.translate("edit_sponsor.pages_tab.info_mod") + }, + { + columnKey: "upload_mod", + header: T.translate("edit_sponsor.pages_tab.upload_mod") + }, + { + columnKey: "download_mod", + header: T.translate("edit_sponsor.pages_tab.download_mod") + } + ]; + + const managedPagesColumns = [ + ...baseColumns(T.translate("edit_sponsor.pages_tab.managed_pages")) + ]; + + const customizedPagesColumns = [ + ...baseColumns( + T.translate("edit_sponsor.pages_tab.sponsor_customized_pages") + ) + ]; + + return ( + + + + + + {managedPages.totalCount + customizedPages.totalCount}{" "} + {T.translate("edit_sponsor.pages_tab.pages")} + + + + + + } + label={T.translate("edit_sponsor.pages_tab.hide_archived")} + /> + + + + + + + + + + + + +
+ +
+ +
+ +
+ + {openPopup === "template" && ( + setOpenPopup(null)} + /> + )} +
+ ); +}; + +const mapStateToProps = ({ sponsorPagePagesListState }) => ({ + ...sponsorPagePagesListState +}); + +export default connect(mapStateToProps, { + getSponsorManagedPages, + saveSponsorManagedPage, + getSponsorCustomizedPages +})(SponsorPagesTab); diff --git a/src/reducers/sponsors/sponsor-page-pages-list-reducer.js b/src/reducers/sponsors/sponsor-page-pages-list-reducer.js new file mode 100644 index 000000000..b5e799ea0 --- /dev/null +++ b/src/reducers/sponsors/sponsor-page-pages-list-reducer.js @@ -0,0 +1,154 @@ +/** + * Copyright 2019 OpenStack Foundation + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * */ + +import { LOGOUT_USER } from "openstack-uicore-foundation/lib/security/actions"; +import { + REQUEST_SPONSOR_MANAGED_PAGES, + RECEIVE_SPONSOR_MANAGED_PAGES, + RECEIVE_SPONSOR_CUSTOMIZED_PAGES, + REQUEST_SPONSOR_CUSTOMIZED_PAGES +} from "../../actions/sponsor-pages-actions"; +import { SET_CURRENT_SUMMIT } from "../../actions/summit-actions"; + +const DEFAULT_STATE = { + managedPages: { + pages: [], + order: "name", + orderDir: 1, + currentPage: 1, + lastPage: 1, + perPage: 10, + totalCount: 0 + }, + customizedPages: { + pages: [], + order: "name", + orderDir: 1, + currentPage: 1, + lastPage: 1, + perPage: 10, + totalCount: 0 + }, + term: "", + hideArchived: false, + summitTZ: "" +}; + +const sponsorPagePagesListReducer = (state = DEFAULT_STATE, action) => { + const { type, payload } = action; + + switch (type) { + case SET_CURRENT_SUMMIT: + case LOGOUT_USER: { + return DEFAULT_STATE; + } + case REQUEST_SPONSOR_MANAGED_PAGES: { + const { order, orderDir, page, perPage, term, summitTZ, hideArchived } = + payload; + + return { + ...state, + managedPages: { + ...state.managedPages, + order, + orderDir, + pages: [], + currentPage: page, + perPage + }, + term, + summitTZ, + hideArchived + }; + } + case REQUEST_SPONSOR_CUSTOMIZED_PAGES: { + const { order, orderDir, page, perPage, term, summitTZ, hideArchived } = + payload; + + return { + ...state, + customizedPages: { + ...state.customizedPages, + order, + orderDir, + pages: [], + currentPage: page, + perPage + }, + term, + summitTZ, + hideArchived + }; + } + case RECEIVE_SPONSOR_MANAGED_PAGES: { + const { + current_page: currentPage, + total, + last_page: lastPage + } = payload.response; + + const pages = payload.response.data.map((a) => ({ + id: a.id, + code: a.code, + name: a.name, + allowed_add_ons: a.allowed_add_ons, + info_mod: a.modules_count.info_modules_count, + upload_mod: a.modules_count.document_download_modules_count, + download_mod: a.modules_count.media_request_modules_count + })); + + return { + ...state, + managedPages: { + ...state.managedPages, + pages, + currentPage, + totalCount: total, + lastPage + } + }; + } + case RECEIVE_SPONSOR_CUSTOMIZED_PAGES: { + const { + current_page: currentPage, + total, + last_page: lastPage + } = payload.response; + + const pages = payload.response.data.map((a) => ({ + id: a.id, + code: a.code, + name: a.name, + allowed_add_ons: a.allowed_add_ons, + info_mod: a.modules_count.info_modules_count, + upload_mod: a.modules_count.media_request_modules_count, + download_mod: a.modules_count.document_download_modules_count + })); + + return { + ...state, + customizedPages: { + ...state.customizedPages, + pages, + currentPage, + totalCount: total, + lastPage + } + }; + } + default: + return state; + } +}; + +export default sponsorPagePagesListReducer; diff --git a/src/store.js b/src/store.js index ae9386539..978711df4 100644 --- a/src/store.js +++ b/src/store.js @@ -168,6 +168,7 @@ import sponsorCustomizedFormReducer from "./reducers/sponsors/sponsor-customized import sponsorPageCartListReducer from "./reducers/sponsors/sponsor-page-cart-list-reducer"; import sponsorCustomizedFormItemsListReducer from "./reducers/sponsors/sponsor-customized-form-items-list-reducer.js"; import sponsorPagesListReducer from "./reducers/sponsors/sponsor-pages-list-reducer.js"; +import sponsorPagePagesListReducer from "./reducers/sponsors/sponsor-page-pages-list-reducer.js"; // default: localStorage if web, AsyncStorage if react-native @@ -255,6 +256,7 @@ const reducers = persistCombineReducers(config, { sponsorUsersListState: sponsorUsersListReducer, sponsorPageFormsListState: sponsorPageFormsListReducer, sponsorPageCartListState: sponsorPageCartListReducer, + sponsorPagePagesListState: sponsorPagePagesListReducer, sponsorCustomizedFormState: sponsorCustomizedFormReducer, sponsorCustomizedFormItemsListState: sponsorCustomizedFormItemsListReducer, currentSponsorPromocodeListState: sponsorPromocodeListReducer, @@ -307,7 +309,7 @@ const reducers = persistCombineReducers(config, { sponsoredProjectState: sponsoredProjectReducer, sponsoredProjectSponsorshipTypeState: sponsoredProjectSponsorshipTypeReducer, sponsoredProjectSponsorshipTypeSupportingCompanyState: - sponsoredProjectSponsorshipTypeSupportingCompanyReducer, + sponsoredProjectSponsorshipTypeSupportingCompanyReducer, scheduleSettingsState: scheduleSettingsReducer, scheduleSettingsListState: scheduleSettingsListReducer, currentSelectionPlanExtraQuestionState: selectionPlanExtraQuestionReducer,