Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
163 changes: 65 additions & 98 deletions src/actions/promocode-actions.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,15 +20,13 @@ import {
createAction,
stopLoading,
startLoading,
showMessage,
showSuccessMessage,
getCSV,
authErrorHandler,
snackbarErrorHandler,
snackbarSuccessHandler,
escapeFilterValue,
postFile
} from "openstack-uicore-foundation/lib/utils/actions";
import history from "../history";
import { checkOrFilter, getAccessTokenSafely } from "../utils/methods";
import { getAccessTokenSafely } from "../utils/methods";
import { DEFAULT_PER_PAGE } from "../utils/constants";

export const EXISTING_SPEAKERS_PROMO_CODE = 1;
Expand Down Expand Up @@ -59,33 +57,9 @@ export const GET_ASSIGNED_SPEAKERS_LOCALLY = "GET_ASSIGNED_SPEAKERS_LOCALLY";
export const REQUEST_ASSIGNED_SPEAKERS = "REQUEST_ASSIGNED_SPEAKERS";
export const RECEIVE_ASSIGNED_SPEAKERS = "RECEIVE_ASSIGNED_SPEAKERS";

const parseFilters = (filters, term = null) => {
const filter = [];

if (filters?.typeFilter && filters.typeFilter !== "ALL") {
filter.push(`type==${filters.typeFilter}`);
}

if (filters?.creatorFilter && filters.creatorFilter !== "ALL") {
filter.push(`creator_email==${filters.creatorFilter.email}`);
}

if (filters?.assigneeFilter && filters.assigneeFilter !== "ALL") {
filter.push(
`owner_email==${filters.assigneeFilter.email},contact_email==${filters.assigneeFilter.email}`
);
}

if (
Array.isArray(filters?.classNamesFilter) &&
filters.classNamesFilter.length > 0
) {
filter.push(`class_name==${filters.classNamesFilter.join("||")}`);
}

if (Array.isArray(filters?.tagsFilter) && filters.tagsFilter.length > 0) {
filter.push(`tag_id==${filters.tagsFilter.map((t) => t.id).join("||")}`);
}
// filters is GridFilter's parsedFilter (already or()-wrapped when joined by ANY); the search term is always ANDed
const parseFilters = (filters = [], term = null) => {
const filter = Array.isArray(filters) ? [...filters] : [];

if (term) {
const escapedTerm = escapeFilterValue(term);
Expand All @@ -103,7 +77,7 @@ const parseFilters = (filters, term = null) => {
filter.push(searchString);
}

return checkOrFilter(filters, filter);
return filter;
};

const normalizeEntity = (entity) => {
Expand Down Expand Up @@ -175,7 +149,7 @@ export const getPromocodeMeta = () => async (dispatch, getState) => {
null,
createAction(RECEIVE_PROMOCODE_META),
`${window.API_BASE_URL}/api/v1/summits/${currentSummit.id}/promo-codes/metadata`,
authErrorHandler
snackbarErrorHandler
)(params)(dispatch).then(() => {
dispatch(stopLoading());
});
Expand All @@ -188,7 +162,7 @@ export const getPromocodes =
perPage = DEFAULT_PER_PAGE,
order = "code",
orderDir = 1,
filters = {},
filters = [],
extraColumns = []
) =>
async (dispatch, getState) => {
Expand Down Expand Up @@ -230,7 +204,7 @@ export const getPromocodes =
createAction(REQUEST_PROMOCODES),
createAction(RECEIVE_PROMOCODES),
`${window.API_BASE_URL}/api/v1/summits/${currentSummit.id}/promo-codes`,
authErrorHandler,
snackbarErrorHandler,
{ page, perPage, order, orderDir, term, filters, extraColumns }
)(params)(dispatch).then(() => {
dispatch(stopLoading());
Expand All @@ -256,7 +230,7 @@ export const getPromocode = (promocodeId) => async (dispatch, getState) => {
null,
createAction(RECEIVE_PROMOCODE),
`${window.API_BASE_URL}/api/v1/summits/${currentSummit.id}/promo-codes/${promocodeId}`,
authErrorHandler
snackbarErrorHandler
)(params)(dispatch).then(() => {
dispatch(stopLoading());
});
Expand All @@ -266,61 +240,56 @@ export const resetPromocodeForm = () => (dispatch) => {
dispatch(createAction(RESET_PROMOCODE_FORM)({}));
};

export const savePromocode =
(entity, isSponsor) => async (dispatch, getState) => {
const { currentSummitState } = getState();
const accessToken = await getAccessTokenSafely();
const { currentSummit } = currentSummitState;

dispatch(startLoading());

const normalizedEntity = normalizeEntity(entity);
export const savePromocode = (entity) => async (dispatch, getState) => {
const { currentSummitState } = getState();
dispatch(startLoading());
const accessToken = await getAccessTokenSafely();
const { currentSummit } = currentSummitState;

const params = {
expand:
"owner,sponsor,sponsor.company,sponsor.sponsorship,speaker,tickets,ticket_type,ticket_types_rules,tags,allowed_ticket_types",
access_token: accessToken
};
const normalizedEntity = normalizeEntity(entity);

if (entity.id) {
return putRequest(
createAction(UPDATE_PROMOCODE),
createAction(PROMOCODE_UPDATED),
`${window.API_BASE_URL}/api/v1/summits/${currentSummit.id}/promo-codes/${entity.id}`,
normalizedEntity,
authErrorHandler,
entity
)(params)(dispatch).then(() => {
dispatch(
showSuccessMessage(T.translate("edit_promocode.promocode_saved"))
);
});
}
const successMessage = {
title: T.translate("general.done"),
html: T.translate("edit_promocode.promocode_created"),
type: "success"
};
const params = {
expand:
"owner,sponsor,sponsor.company,sponsor.sponsorship,speaker,tickets,ticket_type,ticket_types_rules,tags,allowed_ticket_types",
access_token: accessToken
};

return postRequest(
if (entity.id) {
return putRequest(
createAction(UPDATE_PROMOCODE),
createAction(PROMOCODE_ADDED),
`${window.API_BASE_URL}/api/v1/summits/${currentSummit.id}/promo-codes`,
createAction(PROMOCODE_UPDATED),
`${window.API_BASE_URL}/api/v1/summits/${currentSummit.id}/promo-codes/${entity.id}`,
normalizedEntity,
authErrorHandler,
snackbarErrorHandler,
entity
)(params)(dispatch).then((payload) => {
dispatch(
showMessage(successMessage, () => {
history.push(
`/app/summits/${currentSummit.id}${
isSponsor ? "/sponsors" : ""
}/promocodes/${payload.response.id}`
);
snackbarSuccessHandler({
title: T.translate("general.success"),
html: T.translate("edit_promocode.promocode_saved")
})
);
return payload;
});
};
}

return postRequest(
createAction(UPDATE_PROMOCODE),
createAction(PROMOCODE_ADDED),
`${window.API_BASE_URL}/api/v1/summits/${currentSummit.id}/promo-codes`,
normalizedEntity,
snackbarErrorHandler,
entity
)(params)(dispatch).then((payload) => {
dispatch(
snackbarSuccessHandler({
title: T.translate("general.success"),
html: T.translate("edit_promocode.promocode_created")
})
);
return payload;
});
};

export const deletePromocode = (promocodeId) => async (dispatch, getState) => {
const { currentSummitState } = getState();
Expand All @@ -336,7 +305,7 @@ export const deletePromocode = (promocodeId) => async (dispatch, getState) => {
createAction(PROMOCODE_DELETED)({ promocodeId }),
`${window.API_BASE_URL}/api/v1/summits/${currentSummit.id}/promo-codes/${promocodeId}`,
null,
authErrorHandler
snackbarErrorHandler
)(params)(dispatch).then(() => {
dispatch(stopLoading());
});
Expand All @@ -356,21 +325,19 @@ export const sendEmail = (promocodeId) => async (dispatch, getState) => {
createAction(EMAIL_SENT),
`${window.API_BASE_URL}/api/v1/summits/${currentSummit.id}/promo-codes/${promocodeId}/mail`,
null,
authErrorHandler
snackbarErrorHandler
)(params)(dispatch).then(() => {
dispatch(stopLoading());
dispatch(
showMessage(
T.translate("general.done"),
T.translate("general.mail_sent"),
"success"
)
snackbarSuccessHandler({
title: T.translate("general.success"),
html: T.translate("general.email_sent")
})
);
});
};

export const exportPromocodes =
(term = null, order = "code", orderDir = 1, filters = {}) =>
(term = null, order = "code", orderDir = 1, filters = []) =>
async (dispatch, getState) => {
const { currentSummitState } = getState();
const accessToken = await getAccessTokenSafely();
Expand Down Expand Up @@ -424,7 +391,7 @@ export const addBadgeFeatureToPromocode =
createAction(BADGE_FEATURE_ADDED)({ badgeFeature }),
`${window.API_BASE_URL}/api/v1/summits/${currentSummit.id}/promo-codes/${promocodeId}/badge-features/${badgeFeature.id}`,
{},
authErrorHandler
snackbarErrorHandler
)(params)(dispatch).then(() => {
dispatch(stopLoading());
});
Expand All @@ -447,7 +414,7 @@ export const removeBadgeFeatureFromPromocode =
createAction(BADGE_FEATURE_REMOVED)({ badgeFeatureId }),
`${window.API_BASE_URL}/api/v1/summits/${currentSummit.id}/promo-codes/${promocodeId}/badge-features/${badgeFeatureId}`,
null,
authErrorHandler
snackbarErrorHandler
)(params)(dispatch).then(() => {
dispatch(stopLoading());
});
Expand All @@ -470,7 +437,7 @@ export const addDiscountTicket = (ticket) => async (dispatch, getState) => {
createAction(DISCOUNT_TICKET_ADDED),
`${window.API_BASE_URL}/api/v1/summits/${currentSummit.id}/promo-codes/${ticket.owner_id}/ticket-types/${ticket.ticket_type_id}`,
ticket,
authErrorHandler
snackbarErrorHandler
)(params)(dispatch).then(() => {
dispatch(stopLoading());
});
Expand All @@ -491,7 +458,7 @@ export const deleteDiscountTicket =
createAction(DISCOUNT_TICKET_DELETED)({ ticketId }),
`${window.API_BASE_URL}/api/v1/summits/${currentSummit.id}/promo-codes/${promocodeId}/ticket-types/${ticketTypeId}`,
null,
authErrorHandler
snackbarErrorHandler
)(params)(dispatch).then(() => {
dispatch(stopLoading());
});
Expand All @@ -512,7 +479,7 @@ export const importPromoCodesCSV = (file) => async (dispatch, getState) => {
`${window.API_BASE_URL}/api/v1/summits/${currentSummit.id}/promo-codes/csv`,
file,
{},
authErrorHandler
snackbarErrorHandler
)(params)(dispatch).then(() => {
dispatch(stopLoading());
window.location.reload();
Expand Down Expand Up @@ -581,7 +548,7 @@ export const getAssignedSpeakers =
createAction(REQUEST_ASSIGNED_SPEAKERS),
createAction(RECEIVE_ASSIGNED_SPEAKERS),
`${window.API_BASE_URL}/api/v1/summits/${currentSummit.id}/${promoCodeRoute}/${entity.id}/speakers`,
authErrorHandler,
snackbarErrorHandler,
{ entity, order, orderDir, page, term }
)(params)(dispatch).then(() => {
dispatch(stopLoading());
Expand All @@ -606,7 +573,7 @@ export const assignSpeaker = (entity) => async (dispatch, getState) => {
createAction(SPEAKER_ASSIGNED),
`${window.API_BASE_URL}/api/v1/summits/${currentSummit.id}/speakers-promo-codes/${entity.id}/speakers/${entity.speaker.id}`,
null,
authErrorHandler
snackbarErrorHandler
)(params)(dispatch).then(() => {
dispatch(stopLoading());
dispatch(getAssignedSpeakers(entity));
Expand Down Expand Up @@ -638,7 +605,7 @@ export const unAssignSpeaker =
createAction(SPEAKER_UNASSIGNED)({ speakerId }),
`${window.API_BASE_URL}/api/v1/summits/${currentSummit.id}/speakers-promo-codes/${promocodeId}/speakers/${speakerId}`,
null,
authErrorHandler
snackbarErrorHandler
)(params)(dispatch).then(() => {
dispatch(stopLoading());
});
Expand Down
Loading
Loading