diff --git a/src/actions/sponsor-pages-actions.js b/src/actions/sponsor-pages-actions.js index 78091a090..810640027 100644 --- a/src/actions/sponsor-pages-actions.js +++ b/src/actions/sponsor-pages-actions.js @@ -15,6 +15,7 @@ import { createAction, getRequest, postRequest, + deleteRequest, startLoading, stopLoading, authErrorHandler, @@ -23,12 +24,17 @@ import { import T from "i18n-react/dist/i18n-react"; import { getAccessTokenSafely } from "../utils/methods"; import { snackbarErrorHandler, snackbarSuccessHandler } from "./base-actions"; -import { DEFAULT_CURRENT_PAGE, DEFAULT_ORDER_DIR, DEFAULT_PER_PAGE } from "../utils/constants"; +import { + DEFAULT_CURRENT_PAGE, + DEFAULT_ORDER_DIR, + DEFAULT_PER_PAGE +} from "../utils/constants"; 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_DELETED = "SPONSOR_MANAGED_PAGE_DELETED"; export const REQUEST_SPONSOR_CUSTOMIZED_PAGES = "REQUEST_SPONSOR_CUSTOMIZED_PAGES"; @@ -107,7 +113,7 @@ export const getSponsorManagedPages = const params = { page, - fields: "id,code,name,kind,modules_count,allowed_add_ons", + fields: "id,code,name,kind,modules_count,allowed_add_ons,assigned_type", per_page: perPage, access_token: accessToken }; @@ -135,6 +141,35 @@ export const getSponsorManagedPages = }); }; +export const deleteSponsorManagedPage = + (pageId) => async (dispatch, getState) => { + const { currentSummitState } = getState(); + const accessToken = await getAccessTokenSafely(); + const { currentSummit } = currentSummitState; + const params = { access_token: accessToken }; + + dispatch(startLoading()); + + return deleteRequest( + null, + createAction(SPONSOR_MANAGED_PAGE_DELETED)({ pageId }), + `${window.SPONSOR_PAGES_API_URL}/api/v1/summits/${currentSummit.id}/managed-pages/${pageId}`, + null, + snackbarErrorHandler + )(params)(dispatch) + .then(() => { + dispatch( + snackbarSuccessHandler({ + title: T.translate("general.success"), + html: T.translate("show_pages.page_delete_success") + }) + ); + }) + .finally(() => { + dispatch(stopLoading()); + }); + }; + /* ************************************************************************ */ /* CUSTOMIZED PAGES */ /* ************************************************************************ */ diff --git a/src/components/mui/table/mui-table.js b/src/components/mui/table/mui-table.js index 5f8b9d55b..1bff9c33c 100644 --- a/src/components/mui/table/mui-table.js +++ b/src/components/mui/table/mui-table.js @@ -43,6 +43,7 @@ const MuiTable = ({ onEdit, onArchive, onDelete, + canDelete = () => true, deleteDialogTitle = null, deleteDialogBody = null }) => { @@ -244,12 +245,14 @@ const MuiTable = ({ : {}) }} > - handleDelete(row)} - > - - + {canDelete(row) && ( + handleDelete(row)} + > + + + )} )} diff --git a/src/pages/sponsors/sponsor-pages-tab/index.js b/src/pages/sponsors/sponsor-pages-tab/index.js index f14224c8f..91b4e2ae9 100644 --- a/src/pages/sponsors/sponsor-pages-tab/index.js +++ b/src/pages/sponsors/sponsor-pages-tab/index.js @@ -25,12 +25,16 @@ import { import AddIcon from "@mui/icons-material/Add"; import { getSponsorManagedPages, - getSponsorCustomizedPages + getSponsorCustomizedPages, + deleteSponsorManagedPage } 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 { + DEFAULT_CURRENT_PAGE, + SPONSOR_MANAGED_PAGE_ASSIGNMENT +} from "../../../utils/constants"; const SponsorPagesTab = ({ term, @@ -38,7 +42,8 @@ const SponsorPagesTab = ({ managedPages, customizedPages, getSponsorManagedPages, - getSponsorCustomizedPages + getSponsorCustomizedPages, + deleteSponsorManagedPage }) => { useEffect(() => { getSponsorManagedPages(); @@ -151,6 +156,17 @@ const SponsorPagesTab = ({ }; const handleManagedDelete = (itemId) => { + deleteSponsorManagedPage(itemId).then(() => { + const { perPage, order, orderDir } = managedPages; + getSponsorManagedPages( + term, + DEFAULT_CURRENT_PAGE, + perPage, + order, + orderDir, + hideArchived + ); + }); console.log("DELETE MANAGED ", itemId); }; @@ -333,6 +349,9 @@ const SponsorPagesTab = ({ onSort={handleManagedSort} onEdit={handleManagedEdit} onDelete={handleManagedDelete} + canDelete={(row) => + row.assigned_type === SPONSOR_MANAGED_PAGE_ASSIGNMENT.EXPLICIT + } onArchive={handleArchiveManagedPage} /> @@ -346,5 +365,6 @@ const mapStateToProps = ({ sponsorPagePagesListState }) => ({ export default connect(mapStateToProps, { getSponsorManagedPages, - getSponsorCustomizedPages + getSponsorCustomizedPages, + deleteSponsorManagedPage })(SponsorPagesTab); diff --git a/src/utils/constants.js b/src/utils/constants.js index 3983fbeb5..2ba8e8a66 100644 --- a/src/utils/constants.js +++ b/src/utils/constants.js @@ -264,3 +264,8 @@ export const SPONSOR_USER_ASSIGNMENT_TYPE = { EXISTING: "existing", NEW: "new" }; + +export const SPONSOR_MANAGED_PAGE_ASSIGNMENT = { + EXPLICIT: "Explicit", + IMPLICIT: "Implicit" +};