Skip to content
Closed
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
6 changes: 6 additions & 0 deletions src/actions/base-actions.js
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,12 @@ export const snackbarSuccessHandler = (message) => (dispatch, state) =>
state
);

export const snackbarWarningHandler = (message) => (dispatch, state) =>
setSnackbarMessage({ ...message, type: "warning", code: CODE_200 })(
dispatch,
state
);

export const snackbarErrorMsg = (message) => (dispatch, state) =>
setSnackbarMessage({ ...message, type: "error", code: CODE_200 })(
dispatch,
Expand Down
52 changes: 38 additions & 14 deletions src/actions/sponsor-pages-actions.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,11 @@ import {
getAccessTokenSafely,
normalizeSelectAllField
} from "../utils/methods";
import { snackbarErrorHandler, snackbarSuccessHandler } from "./base-actions";
import {
snackbarErrorHandler,
snackbarSuccessHandler,
snackbarWarningHandler
} from "./base-actions";
import {
DEFAULT_CURRENT_PAGE,
DEFAULT_ORDER_DIR,
Expand Down Expand Up @@ -228,26 +232,46 @@ export const saveSponsorManagedPage =
});
}

const normalizedEntity = normalizeSponsorManagedPage(entity);
const selectedPageIds = entity.pages ?? [];
const { managedPages } = getState().sponsorState;
const existingPageIds = new Set(managedPages.pages?.map((p) => p.id) ?? []);
const newPageIds = selectedPageIds.filter((id) => !existingPageIds.has(id));
const alreadyCount = selectedPageIds.length - newPageIds.length;
const successTitle = T.translate("general.success");

if (selectedPageIds.length && !newPageIds.length) {
dispatch(
snackbarWarningHandler({
title: successTitle,
html: T.translate(
"edit_sponsor.pages_tab.managed_page_already_added",
{ alreadyCount }
)
})
);
dispatch(stopLoading());
return { skipped: true, reason: "already-added" };
}

const html =
alreadyCount > 0
? T.translate("edit_sponsor.pages_tab.managed_page_partially_added", {
addedCount: newPageIds.length,
alreadyCount
})
: T.translate("edit_sponsor.pages_tab.managed_page_created");

return postRequest(
null,
createAction(SPONSOR_MANAGED_PAGE_ADDED),
`${window.SPONSOR_PAGES_API_URL}/api/v1/summits/${currentSummit.id}/sponsors/${sponsorId}/managed-pages`,
normalizedEntity,
normalizeSponsorManagedPage({ ...entity, pages: newPageIds }),
snackbarErrorHandler
)(params)(dispatch)
.then(() => {
dispatch(
snackbarSuccessHandler({
title: T.translate("general.success"),
html: T.translate("edit_sponsor.pages_tab.managed_page_created")
})
);
})
.finally(() => {
dispatch(stopLoading());
});
.then(() =>
dispatch(snackbarSuccessHandler({ title: successTitle, html }))
)
.finally(() => dispatch(stopLoading()));
};

export const deleteSponsorManagedPage =
Expand Down
2 changes: 2 additions & 0 deletions src/i18n/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -2548,6 +2548,8 @@
"custom_page_created": "Custom Sponsor Page created successfully",
"managed_page_saved": "Sponsor Managed Page saved successfully",
"managed_page_created": "Sponsor Managed Page created successfully",
"managed_page_already_added": "Selected page(s) have already been added ({alreadyCount}).",
"managed_page_partially_added": "Added {addedCount} page(s). {alreadyCount} page(s) were already added.",
"page_delete_warning": "Please verify you want to delete {page}"
},
"cart_tab": {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,12 @@ jest.mock(
return (
<div data-testid="add-sponsor-page-template-popup">
<button onClick={onClose}>Close</button>
<button onClick={() => onSubmit({ id: 1, name: "Test" })}>
<button onClick={() => onSubmit({ pages: [1], add_ons: [] })}>
Submit
</button>
<button onClick={() => onSubmit({ pages: [1, 2], add_ons: [] })}>
Submit Mixed
</button>
</div>
);
}
Expand Down Expand Up @@ -370,6 +373,98 @@ describe("SponsorPagesTab", () => {
screen.queryByTestId("page-template-popup")
).not.toBeInTheDocument();
});

it("should send template selection to action for duplicate managed pages", async () => {
renderWithRedux(
<SponsorPagesTab
sponsor={createSponsor()}
summitId={1}
summitTZ="UTC"
/>,
{
initialState: {
...defaultState,
sponsorPagePagesListState: {
...defaultState.sponsorPagePagesListState,
managedPages: {
...defaultState.sponsorPagePagesListState.managedPages,
pages: [createManagedPage(1)],
totalItems: 1
}
}
}
}
);

const usingTemplateButton = screen.getByText(
"edit_sponsor.pages_tab.using_template"
);

await act(async () => {
await userEvent.click(usingTemplateButton);
});

expect(
screen.getByTestId("add-sponsor-page-template-popup")
).toBeInTheDocument();

const submitButton = screen.getByText("Submit");
await act(async () => {
await userEvent.click(submitButton);
});

expect(saveSponsorManagedPage).toHaveBeenCalledWith({
pages: [1],
add_ons: []
});
expect(
screen.queryByTestId("add-sponsor-page-template-popup")
).not.toBeInTheDocument();
});

it("should send mixed template selection to action", async () => {
renderWithRedux(
<SponsorPagesTab
sponsor={createSponsor()}
summitId={1}
summitTZ="UTC"
/>,
{
initialState: {
...defaultState,
sponsorPagePagesListState: {
...defaultState.sponsorPagePagesListState,
managedPages: {
...defaultState.sponsorPagePagesListState.managedPages,
pages: [createManagedPage(1)],
totalItems: 1
}
}
}
}
);

const usingTemplateButton = screen.getByText(
"edit_sponsor.pages_tab.using_template"
);

await act(async () => {
await userEvent.click(usingTemplateButton);
});

const submitMixedButton = screen.getByText("Submit Mixed");
await act(async () => {
await userEvent.click(submitMixedButton);
});

expect(saveSponsorManagedPage).toHaveBeenCalledWith({
pages: [1, 2],
add_ons: []
});
expect(
screen.queryByTestId("add-sponsor-page-template-popup")
).not.toBeInTheDocument();
});
});

it("should call archiveCustomizedPage for non-archived item", async () => {
Expand Down
Loading