Skip to content
318 changes: 318 additions & 0 deletions src/actions/sponsor-forms-actions.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ import {
DEFAULT_PER_PAGE
} from "../utils/constants";
import { snackbarErrorHandler, snackbarSuccessHandler } from "./base-actions";
import { amountToCents } from "../utils/currency";

export const REQUEST_SPONSOR_FORMS = "REQUEST_SPONSOR_FORMS";
export const RECEIVE_SPONSOR_FORMS = "RECEIVE_SPONSOR_FORMS";
Expand Down Expand Up @@ -64,6 +65,31 @@ export const SPONSOR_CUSTOMIZED_FORM_DELETED =
export const SPONSOR_CUSTOMIZED_FORM_ARCHIVED_CHANGED =
"SPONSOR_CUSTOMIZED_FORM_ARCHIVED_CHANGED";

export const RECEIVE_SPONSOR_CUSTOMIZED_FORM_ITEMS =
"RECEIVE_SPONSOR_CUSTOMIZED_FORM_ITEMS";
export const REQUEST_SPONSOR_CUSTOMIZED_FORM_ITEMS =
"REQUEST_SPONSOR_CUSTOMIZED_FORM_ITEMS";
export const RECEIVE_SPONSOR_CUSTOMIZED_FORM_ITEM =
"RECEIVE_SPONSOR_CUSTOMIZED_FORM_ITEM";
export const SPONSOR_CUSTOMIZED_FORM_ITEM_DELETED =
"SPONSOR_CUSTOMIZED_FORM_ITEM_DELETED";
export const SPONSOR_CUSTOMIZED_FORM_ITEM_ARCHIVED =
"SPONSOR_CUSTOMIZED_FORM_ITEM_ARCHIVED";
export const SPONSOR_CUSTOMIZED_FORM_ITEM_UNARCHIVED =
"SPONSOR_CUSTOMIZED_FORM_ITEM_UNARCHIVED";
export const UPDATE_SPONSOR_FORM_MANAGED_ITEM =
"UPDATE_SPONSOR_FORM_MANAGED_ITEM";
export const SPONSOR_FORM_MANAGED_ITEM_UPDATED =
"SPONSOR_FORM_MANAGED_ITEM_UPDATED";
export const SPONSOR_FORM_MANAGED_ITEM_ADDED =
"SPONSOR_FORM_MANAGED_ITEM_ADDED";
export const SPONSOR_FORM_MANAGED_ITEM_DELETED =
"SPONSOR_FORM_MANAGED_ITEM_DELETED";
export const SPONSOR_CUSTOMIZED_FORM_ITEMS_ADDED =
"SPONSOR_CUSTOMIZED_FORM_ITEMS_ADDED";
export const RESET_SPONSOR_FORM_MANAGED_ITEM =
"RESET_SPONSOR_FORM_MANAGED_ITEM";

// ITEMS
export const REQUEST_SPONSOR_FORM_ITEMS = "REQUEST_SPONSOR_FORM_ITEMS";
export const RECEIVE_SPONSOR_FORM_ITEMS = "RECEIVE_SPONSOR_FORM_ITEMS";
Expand Down Expand Up @@ -632,6 +658,60 @@ export const getSponsorCustomizedForm =
});
};

export const getSponsorCustomizedFormItems =
(
formId,
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 filter = [];

dispatch(startLoading());

if (term) {
const escapedTerm = escapeFilterValue(term);
filter.push(`name=@${escapedTerm},code=@${escapedTerm}`);
}

const params = {
page,
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_FORM_ITEMS),
createAction(RECEIVE_SPONSOR_CUSTOMIZED_FORM_ITEMS),
`${window.PURCHASES_API_URL}/api/v1/summits/${currentSummit.id}/sponsors/${sponsorId}/sponsor-forms/${formId}/items`,
authErrorHandler
)(params)(dispatch).then(() => {
dispatch(stopLoading());
});
};

export const saveSponsorCustomizedForm =
(entity) => async (dispatch, getState) => {
const { currentSummitState, currentSponsorState } = getState();
Expand Down Expand Up @@ -1208,3 +1288,241 @@ export const addInventoryItems =
dispatch(stopLoading());
});
};

export const saveSponsorFormManagedItem =
(formId, entity) => async (dispatch, getState) => {
const { currentSummitState, currentSponsorState } = getState();
const accessToken = await getAccessTokenSafely();
const { currentSummit } = currentSummitState;
const {
entity: { id: sponsorId }
} = currentSponsorState;

dispatch(startLoading());

const params = {
access_token: accessToken
};

const normalizedEntity = normalizeManagedItem(entity);

if (entity.id) {
return putRequest(
createAction(UPDATE_SPONSOR_FORM_MANAGED_ITEM),
createAction(SPONSOR_FORM_MANAGED_ITEM_UPDATED),
`${window.PURCHASES_API_URL}/api/v1/summits/${currentSummit.id}/sponsors/${sponsorId}/sponsor-forms/${formId}/items/${entity.id}`,
normalizedEntity,
snackbarErrorHandler,
entity
)(params)(dispatch).then(() => {
dispatch(stopLoading());
dispatch(
snackbarSuccessHandler({
title: T.translate("general.success"),
html: T.translate(
"edit_sponsor.forms_tab.form_manage_items.item_updated"
)
})
);
});
}

const successMessage = {
title: T.translate("general.done"),
html: T.translate(
"edit_sponsor.forms_tab.form_manage_items.item_created"
),
type: "success"
};

return postRequest(
createAction(UPDATE_SPONSOR_FORM_MANAGED_ITEM),
createAction(SPONSOR_FORM_MANAGED_ITEM_ADDED),
`${window.PURCHASES_API_URL}/api/v1/summits/${currentSummit.id}/sponsors/${sponsorId}/sponsor-forms/${formId}/items`,
normalizedEntity,
snackbarErrorHandler,
entity
)(params)(dispatch).then(() => {
dispatch(snackbarSuccessHandler(successMessage));
});
};

export const resetSponsorFormManagedItem = () => (dispatch) => {
dispatch(createAction(RESET_SPONSOR_FORM_MANAGED_ITEM)({}));
};

const normalizeManagedItem = (entity) => {
const normalizedEntity = { ...entity };
normalizedEntity.meta_fields = normalizedEntity.meta_fields?.filter(
(mf) => mf.name
);
normalizedEntity.images = normalizedEntity.images?.filter(
(img) => img.file_path
);

if (entity.early_bird_rate === "" || entity.early_bird_rate === undefined)
delete normalizedEntity.early_bird_rate;
else
normalizedEntity.early_bird_rate = amountToCents(
normalizedEntity.early_bird_rate
);

if (entity.standard_rate === "" || entity.standard_rate === undefined)
delete normalizedEntity.standard_rate;
else
normalizedEntity.standard_rate = amountToCents(
normalizedEntity.standard_rate
);

if (entity.onsite_rate === "" || entity.onsite_rate === undefined)
delete normalizedEntity.onsite_rate;
else
normalizedEntity.onsite_rate = amountToCents(normalizedEntity.onsite_rate);

return normalizedEntity;
};

export const deleteSponsorFormManagedItem =
(formId, itemId) => async (dispatch, getState) => {
const { currentSummitState, currentSponsorState } = getState();
const accessToken = await getAccessTokenSafely();
const { currentSummit } = currentSummitState;
const {
entity: { id: sponsorId }
} = currentSponsorState;

dispatch(startLoading());

const params = {
access_token: accessToken
};

return deleteRequest(
null,
createAction(SPONSOR_FORM_MANAGED_ITEM_DELETED)({ itemId }),
`${window.PURCHASES_API_URL}/api/v1/summits/${currentSummit.id}/sponsors/${sponsorId}/sponsor-forms/${formId}/items/${itemId}`,
null,
snackbarErrorHandler
)(params)(dispatch)
.then(() => {
dispatch(
snackbarSuccessHandler({
title: T.translate("general.success"),
html: T.translate("sponsor_forms.form_delete_success")
})
);
})
.finally(() => {
dispatch(stopLoading());
});
};

export const getSponsorFormManagedItem =
(formId, itemId) => async (dispatch, getState) => {
const { currentSummitState, currentSponsorState } = getState();
const accessToken = await getAccessTokenSafely();
const { currentSummit } = currentSummitState;
const {
entity: { id: sponsorId }
} = currentSponsorState;

dispatch(startLoading());

const params = {
access_token: accessToken
};

return getRequest(
null,
createAction(RECEIVE_SPONSOR_CUSTOMIZED_FORM_ITEM),
`${window.PURCHASES_API_URL}/api/v1/summits/${currentSummit.id}/sponsors/${sponsorId}/sponsor-forms/${formId}/items/${itemId}`,
authErrorHandler
)(params)(dispatch).then(() => {
dispatch(stopLoading());
});
};

export const addSponsorManagedFormItems =
(formId, itemIds) => async (dispatch, getState) => {
const { currentSummitState, currentSponsorState } = getState();
const accessToken = await getAccessTokenSafely();
const { currentSummit } = currentSummitState;
const {
entity: { id: sponsorId }
} = currentSponsorState;

dispatch(startLoading());

const params = {
access_token: accessToken
};

return postRequest(
null,
createAction(SPONSOR_CUSTOMIZED_FORM_ITEMS_ADDED),
`${window.PURCHASES_API_URL}/api/v1/summits/${currentSummit.id}/sponsors/${sponsorId}/sponsor-forms/${formId}/items/clone`,
{ inventory_item_ids: itemIds },
snackbarErrorHandler
)(params)(dispatch)
.then(() => {
dispatch(getSponsorCustomizedFormItems(formId));
dispatch(
snackbarSuccessHandler({
title: T.translate("general.success"),
html: T.translate(
"sponsor_form_item_list.add_from_inventory.items_added"
)
})
);
})
.catch(snackbarErrorHandler) // need to catch promise reject
.finally(() => {
dispatch(stopLoading());
});
};

export const archiveSponsorCustomizedFormItem =
(formId, itemId) => async (dispatch, getState) => {
const { currentSummitState, currentSponsorState } = getState();
const accessToken = await getAccessTokenSafely();
const { currentSummit } = currentSummitState;
const {
entity: { id: sponsorId }
} = currentSponsorState;
const params = { access_token: accessToken };

dispatch(startLoading());

return putRequest(
null,
createAction(SPONSOR_CUSTOMIZED_FORM_ITEM_ARCHIVED),
`${window.PURCHASES_API_URL}/api/v1/summits/${currentSummit.id}/sponsors/${sponsorId}/sponsor-forms/${formId}/items/${itemId}/archive`,
null,
snackbarErrorHandler
)(params)(dispatch).then(() => {
dispatch(stopLoading());
});
};

export const unarchiveSponsorCustomizedFormItem =
(formId, itemId) => async (dispatch, getState) => {
const { currentSummitState, currentSponsorState } = getState();
const accessToken = await getAccessTokenSafely();
const { currentSummit } = currentSummitState;
const {
entity: { id: sponsorId }
} = currentSponsorState;
const params = { access_token: accessToken };

dispatch(startLoading());

return deleteRequest(
null,
createAction(SPONSOR_CUSTOMIZED_FORM_ITEM_UNARCHIVED)({ itemId }),
`${window.PURCHASES_API_URL}/api/v1/summits/${currentSummit.id}/sponsors/${sponsorId}/sponsor-forms/${formId}/items/${itemId}/archive`,
null,
snackbarErrorHandler
)(params)(dispatch).then(() => {
dispatch(stopLoading());
});
};
Loading