From 420cc8a58104b7b62267a787247a5e2eb2f8f803 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Castillo?= Date: Sat, 31 Jan 2026 11:10:45 -0300 Subject: [PATCH] fix: add endpoints and ux for archive/unarchive sponsor pages MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tomás Castillo --- src/actions/sponsor-pages-actions.js | 61 +++++++++++++++++++ .../sponsors/sponsor-pages-list-page/index.js | 18 ++++-- .../sponsors/sponsor-pages-list-reducer.js | 24 +++++++- 3 files changed, 97 insertions(+), 6 deletions(-) diff --git a/src/actions/sponsor-pages-actions.js b/src/actions/sponsor-pages-actions.js index cb7355d1d..f26619551 100644 --- a/src/actions/sponsor-pages-actions.js +++ b/src/actions/sponsor-pages-actions.js @@ -16,6 +16,8 @@ import { createAction, getRequest, postRequest, + putRequest, + deleteRequest, startLoading, stopLoading } from "openstack-uicore-foundation/lib/utils/actions"; @@ -32,6 +34,9 @@ import { snackbarErrorHandler, snackbarSuccessHandler } from "./base-actions"; export const REQUEST_SPONSOR_PAGES = "REQUEST_SPONSOR_PAGES"; export const RECEIVE_SPONSOR_PAGES = "RECEIVE_SPONSOR_PAGES"; +export const SPONSOR_PAGE_ARCHIVED = "SPONSOR_PAGE_ARCHIVED"; +export const SPONSOR_PAGE_UNARCHIVED = "SPONSOR_PAGE_UNARCHIVED"; + export const GLOBAL_PAGE_CLONED = "GLOBAL_PAGE_CLONED"; export const getSponsorPages = @@ -133,3 +138,59 @@ export const cloneGlobalPage = }) .finally(() => dispatch(stopLoading())); }; + +export const archiveSponsorPage = (pageId) => async (dispatch, getState) => { + const { currentSummitState } = getState(); + const { currentSummit } = currentSummitState; + const accessToken = await getAccessTokenSafely(); + const params = { access_token: accessToken }; + + dispatch(startLoading()); + + return putRequest( + null, + createAction(SPONSOR_PAGE_ARCHIVED)({ pageId }), + `${window.SPONSOR_PAGES_API_URL}/api/v1/summits/${currentSummit.id}/show-pages/${pageId}/archive`, + null, + snackbarErrorHandler + )(params)(dispatch) + .then(() => { + dispatch( + snackbarSuccessHandler({ + title: T.translate("general.success"), + html: T.translate("sponsor_pages.archived") + }) + ); + }) + .finally(() => { + dispatch(stopLoading()); + }); +}; + +export const unarchiveSponsorPage = (pageId) => async (dispatch, getState) => { + const { currentSummitState } = getState(); + const { currentSummit } = currentSummitState; + const accessToken = await getAccessTokenSafely(); + const params = { access_token: accessToken }; + + dispatch(startLoading()); + + return deleteRequest( + null, + createAction(SPONSOR_PAGE_UNARCHIVED)({ pageId }), + `${window.SPONSOR_PAGES_API_URL}/api/v1/summits/${currentSummit.id}/show-pages/${pageId}/archive`, + null, + snackbarErrorHandler + )(params)(dispatch) + .then(() => { + dispatch( + snackbarSuccessHandler({ + title: T.translate("general.success"), + html: T.translate("sponsor_pages.unarchived") + }) + ); + }) + .finally(() => { + dispatch(stopLoading()); + }); +}; diff --git a/src/pages/sponsors/sponsor-pages-list-page/index.js b/src/pages/sponsors/sponsor-pages-list-page/index.js index b453cb6ad..68d6fe1ff 100644 --- a/src/pages/sponsors/sponsor-pages-list-page/index.js +++ b/src/pages/sponsors/sponsor-pages-list-page/index.js @@ -23,7 +23,11 @@ import { Grid2 } from "@mui/material"; import AddIcon from "@mui/icons-material/Add"; -import { getSponsorPages } from "../../../actions/sponsor-pages-actions"; +import { + getSponsorPages, + archiveSponsorPage, + unarchiveSponsorPage +} from "../../../actions/sponsor-pages-actions"; import { getSponsorForm } from "../../../actions/sponsor-forms-actions"; import CustomAlert from "../../../components/mui/custom-alert"; import MuiTable from "../../../components/mui/table/mui-table"; @@ -39,6 +43,8 @@ const SponsorPagesListPage = ({ hideArchived, totalCount, getSponsorPages, + archiveSponsorPage, + unarchiveSponsorPage, getSponsorForm }) => { const [openPopup, setOpenPopup] = useState(null); @@ -77,10 +83,10 @@ const SponsorPagesListPage = ({ // deleteSponsorForm(itemId); }; - const handleArchiveItem = (item) => console.log("archive ITEM...", item); - // item.is_archived - // ? unarchiveSponsorForm(item.id) - // : archiveSponsorForm(item.id); + const handleArchiveItem = (item) => + item.is_archived + ? unarchiveSponsorPage(item.id) + : archiveSponsorPage(item.id); const handleHideArchivedForms = (ev) => { getSponsorPages( @@ -230,5 +236,7 @@ const mapStateToProps = ({ sponsorPagesListState }) => ({ export default connect(mapStateToProps, { getSponsorPages, + archiveSponsorPage, + unarchiveSponsorPage, getSponsorForm })(SponsorPagesListPage); diff --git a/src/reducers/sponsors/sponsor-pages-list-reducer.js b/src/reducers/sponsors/sponsor-pages-list-reducer.js index 41c4f2a43..2a57d10b1 100644 --- a/src/reducers/sponsors/sponsor-pages-list-reducer.js +++ b/src/reducers/sponsors/sponsor-pages-list-reducer.js @@ -14,7 +14,9 @@ import { LOGOUT_USER } from "openstack-uicore-foundation/lib/security/actions"; import { RECEIVE_SPONSOR_PAGES, - REQUEST_SPONSOR_PAGES + REQUEST_SPONSOR_PAGES, + SPONSOR_PAGE_ARCHIVED, + SPONSOR_PAGE_UNARCHIVED } from "../../actions/sponsor-pages-actions"; import { SET_CURRENT_SUMMIT } from "../../actions/summit-actions"; import { PAGES_MODULE_KINDS } from "../../utils/constants"; @@ -82,6 +84,26 @@ const sponsorPagesListReducer = (state = DEFAULT_STATE, action) => { lastPage }; } + case SPONSOR_PAGE_ARCHIVED: { + const { pageId } = payload; + const pages = state.sponsorPages.map((page) => + page.id === pageId ? { ...page, is_archived: true } : page + ); + return { + ...state, + sponsorPages: [...pages] + }; + } + case SPONSOR_PAGE_UNARCHIVED: { + const { pageId } = payload; + const pages = state.sponsorPages.map((page) => + page.id === pageId ? { ...page, is_archived: false } : page + ); + return { + ...state, + sponsorPages: [...pages] + }; + } default: return state; }