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
170 changes: 69 additions & 101 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 All @@ -41,7 +39,6 @@ export const RECEIVE_PROMOCODES = "RECEIVE_PROMOCODES";
export const RECEIVE_PROMOCODE = "RECEIVE_PROMOCODE";
export const RECEIVE_PROMOCODE_META = "RECEIVE_PROMOCODE_META";
export const RESET_PROMOCODE_FORM = "RESET_PROMOCODE_FORM";
export const UPDATE_PROMOCODE = "UPDATE_PROMOCODE";
export const PROMOCODE_UPDATED = "PROMOCODE_UPDATED";
export const PROMOCODE_ADDED = "PROMOCODE_ADDED";
export const PROMOCODE_DELETED = "PROMOCODE_DELETED";
Expand All @@ -59,33 +56,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 +76,7 @@ const parseFilters = (filters, term = null) => {
filter.push(searchString);
}

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

const normalizeEntity = (entity) => {
Expand Down Expand Up @@ -175,7 +148,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 +161,7 @@ export const getPromocodes =
perPage = DEFAULT_PER_PAGE,
order = "code",
orderDir = 1,
filters = {},
filters = [],
extraColumns = []
) =>
async (dispatch, getState) => {
Expand Down Expand Up @@ -230,7 +203,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 +229,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 +239,58 @@ 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());
export const savePromocode = (entity) => async (dispatch, getState) => {
const { currentSummitState } = getState();
dispatch(startLoading());
const accessToken = await getAccessTokenSafely();
const { currentSummit } = currentSummitState;

const normalizedEntity = normalizeEntity(entity);
const normalizedEntity = normalizeEntity(entity);

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

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(() => {
if (entity.id) {
return putRequest(
null,
createAction(PROMOCODE_UPDATED),
`${window.API_BASE_URL}/api/v1/summits/${currentSummit.id}/promo-codes/${entity.id}`,
normalizedEntity,
snackbarErrorHandler
)(params)(dispatch)
.then((payload) => {
dispatch(
showSuccessMessage(T.translate("edit_promocode.promocode_saved"))
snackbarSuccessHandler({
title: T.translate("general.success"),
html: T.translate("edit_promocode.promocode_saved")
})
);
});
}
const successMessage = {
title: T.translate("general.done"),
html: T.translate("edit_promocode.promocode_created"),
type: "success"
};
return payload;
})
.finally(() => dispatch(stopLoading()));
}

return postRequest(
createAction(UPDATE_PROMOCODE),
createAction(PROMOCODE_ADDED),
`${window.API_BASE_URL}/api/v1/summits/${currentSummit.id}/promo-codes`,
normalizedEntity,
authErrorHandler,
entity
)(params)(dispatch).then((payload) => {
return postRequest(
null,
createAction(PROMOCODE_ADDED),
`${window.API_BASE_URL}/api/v1/summits/${currentSummit.id}/promo-codes`,
normalizedEntity,
snackbarErrorHandler
)(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_created")
})
);
});
};
return payload;
})
.finally(() => dispatch(stopLoading()));
};

export const deletePromocode = (promocodeId) => async (dispatch, getState) => {
const { currentSummitState } = getState();
Expand All @@ -336,7 +306,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 +326,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 +392,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 +415,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 +438,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 +459,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 +480,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 +549,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 +574,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 +606,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