diff --git a/src/actions/sponsor-cart-actions.js b/src/actions/sponsor-cart-actions.js index cbbf74a5a..3d5cf0cd4 100644 --- a/src/actions/sponsor-cart-actions.js +++ b/src/actions/sponsor-cart-actions.js @@ -16,6 +16,7 @@ import { createAction, getRequest, deleteRequest, + putRequest, startLoading, stopLoading } from "openstack-uicore-foundation/lib/utils/actions"; @@ -28,6 +29,7 @@ import { ERROR_CODE_404 } from "../utils/constants"; export const REQUEST_SPONSOR_CART = "REQUEST_SPONSOR_CART"; export const RECEIVE_SPONSOR_CART = "RECEIVE_SPONSOR_CART"; export const SPONSOR_CART_FORM_DELETED = "SPONSOR_CART_FORM_DELETED"; +export const SPONSOR_CART_FORM_LOCKED = "SPONSOR_CART_FORM_LOCKED"; const customErrorHandler = (err, res) => (dispatch, state) => { const code = err.status; @@ -82,35 +84,82 @@ export const getSponsorCart = }); }; +export const deleteSponsorCartForm = (formId) => async (dispatch, getState) => { + const { currentSummitState, currentSponsorState } = getState(); + const { currentSummit } = currentSummitState; + const { + entity: { id: sponsorId } + } = currentSponsorState; + const accessToken = await getAccessTokenSafely(); + const params = { access_token: accessToken }; -export const deleteSponsorCartForm = - (formId) => async (dispatch, getState) => { - const { currentSummitState, currentSponsorState } = getState(); - const { currentSummit } = currentSummitState; - const { - entity: { id: sponsorId } - } = currentSponsorState; - const accessToken = await getAccessTokenSafely(); - const params = { access_token: accessToken }; + dispatch(startLoading()); - dispatch(startLoading()); + return deleteRequest( + null, + createAction(SPONSOR_CART_FORM_DELETED)({ formId }), + `${window.PURCHASES_API_URL}/api/v1/summits/${currentSummit.id}/sponsors/${sponsorId}/carts/current/forms/${formId}`, + null, + snackbarErrorHandler + )(params)(dispatch) + .then(() => { + getSponsorCart()(dispatch, getState); + dispatch( + snackbarSuccessHandler({ + title: T.translate("general.success"), + html: T.translate("sponsor_forms.form_delete_success") + }) + ); + }) + .finally(() => { + dispatch(stopLoading()); + }); +}; - return deleteRequest( - null, - createAction(SPONSOR_CART_FORM_DELETED)({ formId }), - `${window.PURCHASES_API_URL}/api/v1/summits/${currentSummit.id}/sponsors/${sponsorId}/sponsor-forms/${formId}`, - null, - snackbarErrorHandler - )(params)(dispatch) - .then(() => { - dispatch( - snackbarSuccessHandler({ - title: T.translate("general.success"), - html: T.translate("sponsor_forms.form_delete_success") - }) - ); - }) - .finally(() => { - dispatch(stopLoading()); - }); - }; \ No newline at end of file +export const lockSponsorCartForm = (formId) => async (dispatch, getState) => { + const { currentSummitState, currentSponsorState } = getState(); + const { currentSummit } = currentSummitState; + const { entity: sponsor } = currentSponsorState; + + const accessToken = await getAccessTokenSafely(); + + const params = { + access_token: accessToken + }; + + dispatch(startLoading()); + + putRequest( + null, + createAction(SPONSOR_CART_FORM_LOCKED)({ formId, locked: true }), + `${window.SPONSOR_USERS_API_URL}/api/v1/shows/${currentSummit.id}/sponsors/${sponsor.id}/carts/current/forms/${formId}/lock`, + {}, + snackbarErrorHandler + )(params)(dispatch) + .catch(console.log) // need to catch promise reject + .finally(() => { + dispatch(stopLoading()); + }); +}; + +export const unlockSponsorCartForm = (formId) => async (dispatch, getState) => { + const { currentSummitState, currentSponsorState } = getState(); + const { currentSummit } = currentSummitState; + const { entity: sponsor } = currentSponsorState; + const accessToken = await getAccessTokenSafely(); + const params = { access_token: accessToken }; + + dispatch(startLoading()); + + return deleteRequest( + null, + createAction(SPONSOR_CART_FORM_LOCKED)({ formId, locked: false }), + `${window.SPONSOR_USERS_API_URL}/api/v1/shows/${currentSummit.id}/sponsors/${sponsor.id}/carts/current/forms/${formId}/lock`, + null, + snackbarErrorHandler + )(params)(dispatch) + .catch(console.log) // need to catch promise reject + .finally(() => { + dispatch(stopLoading()); + }); +}; diff --git a/src/pages/sponsors/sponsor-cart-tab/index.js b/src/pages/sponsors/sponsor-cart-tab/index.js index 4d1d9b564..c41d0f587 100644 --- a/src/pages/sponsors/sponsor-cart-tab/index.js +++ b/src/pages/sponsors/sponsor-cart-tab/index.js @@ -27,7 +27,9 @@ import LockClosedIcon from "@mui/icons-material/Lock"; import AddIcon from "@mui/icons-material/Add"; import { deleteSponsorCartForm, - getSponsorCart + getSponsorCart, + lockSponsorCartForm, + unlockSponsorCartForm } from "../../../actions/sponsor-cart-actions"; import SearchInput from "../../../components/mui/search-input"; import { TotalRow } from "../../../components/mui/table/extra-rows"; @@ -39,7 +41,9 @@ const SponsorCartTab = ({ sponsor, summitId, getSponsorCart, - deleteSponsorCartForm + deleteSponsorCartForm, + lockSponsorCartForm, + unlockSponsorCartForm }) => { const [openPopup, setOpenPopup] = useState(null); const [formEdit, setFormEdit] = useState(null); @@ -64,8 +68,12 @@ const SponsorCartTab = ({ deleteSponsorCartForm(itemId); }; - const handleLock = (item) => { - console.log("LOCK : ", item); + const handleLock = (form) => { + if (form.is_locked) { + unlockSponsorCartForm(form.form_id); + } else { + lockSponsorCartForm(form.form_id); + } }; const handlePayCreditCard = () => { @@ -227,5 +235,7 @@ const mapStateToProps = ({ sponsorPageCartListState }) => ({ export default connect(mapStateToProps, { getSponsorCart, - deleteSponsorCartForm + deleteSponsorCartForm, + lockSponsorCartForm, + unlockSponsorCartForm })(SponsorCartTab); diff --git a/src/reducers/sponsors/sponsor-page-cart-list-reducer.js b/src/reducers/sponsors/sponsor-page-cart-list-reducer.js index 93c012b85..7d12f3429 100644 --- a/src/reducers/sponsors/sponsor-page-cart-list-reducer.js +++ b/src/reducers/sponsors/sponsor-page-cart-list-reducer.js @@ -17,7 +17,8 @@ import { SET_CURRENT_SUMMIT } from "../../actions/summit-actions"; import { REQUEST_SPONSOR_CART, RECEIVE_SPONSOR_CART, - SPONSOR_CART_FORM_DELETED + SPONSOR_CART_FORM_DELETED, + SPONSOR_CART_FORM_LOCKED } from "../../actions/sponsor-cart-actions"; const DEFAULT_STATE = { @@ -70,6 +71,24 @@ const sponsorPageCartListReducer = (state = DEFAULT_STATE, action) => { } }; } + case SPONSOR_CART_FORM_LOCKED: { + const { formId, locked } = payload; + + const forms = state.cart.forms.map((form) => { + if (form.form_id === formId) { + return {...form, locked}; + } + return form; + }); + + return { + ...state, + cart: { + ...state.cart, + forms + } + }; + } default: return state; }