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 && (
+ <>
+
+
+ >
+ )}
+ {renderGroupedOptions()}
+ >
+ );
+ };
+
const IconWithLoading = useMemo(() => getCustomIcon(loading), [loading]);
return (
@@ -243,54 +317,7 @@ const MuiFormikSelectGroup = ({
error={Boolean(error)}
IconComponent={IconWithLoading}
>
- {loading ? (
-
- ) : (
- <>
- {showSelectAll && options.length > 0 && (
- <>
-
-
- >
- )}
- {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 (
+
+ );
+};
+
+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")}
+ />
+
+
+
+
+
+
+ }
+ sx={{ height: "36px" }}
+ >
+ {T.translate("edit_sponsor.pages_tab.using_template")}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {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,