diff --git a/src/actions/sponsor-actions.js b/src/actions/sponsor-actions.js index 94c116f0c..30f56a6af 100644 --- a/src/actions/sponsor-actions.js +++ b/src/actions/sponsor-actions.js @@ -29,7 +29,7 @@ import { fetchErrorHandler, postFile } from "openstack-uicore-foundation/lib/utils/actions"; -import debounce from "lodash/debounce" +import debounce from "lodash/debounce"; import URI from "urijs"; import { getAccessTokenSafely } from "../utils/methods"; import { normalizeLeadReportSettings } from "../models/lead-report-settings"; @@ -64,10 +64,6 @@ export const SPONSOR_TIER_DELETED = "SPONSOR_TIER_DELETED"; export const REQUEST_SPONSOR_SPONSORSHIPS = "REQUEST_SPONSOR_SPONSORSHIPS"; export const RECEIVE_SPONSOR_SPONSORSHIPS = "RECEIVE_SPONSOR_SPONSORSHIPS"; export const SET_SELECTED_SPONSORSHIP = "SET_SELECTED_SPONSORSHIP"; -export const REQUEST_SPONSOR_SPONSORSHIPS_ADDONS = - "REQUEST_SPONSOR_SPONSORSHIPS_ADDONS"; -export const RECEIVE_SPONSOR_SPONSORSHIPS_ADDONS = - "RECEIVE_SPONSOR_SPONSORSHIPS_ADDONS"; export const SPONSOR_SPONSORSHIPS_ADDON_ADDED = "SPONSOR_SPONSORSHIPS_ADDON_ADDED"; export const SPONSOR_SPONSORSHIPS_ADDON_UPDATED = @@ -356,7 +352,7 @@ export const addSponsorToSummit = (entity) => async (dispatch, getState) => { .finally(() => dispatch(stopLoading())); }; -export const getSponsorTiers = +export const getSponsorSponsorships = ( sponsorId, currentPage = DEFAULT_CURRENT_PAGE, @@ -483,30 +479,6 @@ const normalizeTiersForSponsor = (entity) => { return normalizedEntity; }; -export const getSponsorshipAddons = (sponsorshipId) => async (dispatch) => { - const { currentSummitState } = getState(); - const accessToken = await getAccessTokenSafely(); - const { currentSummit } = currentSummitState; - const { - entity: { id: sponsorId } - } = currentSponsorState; - - const params = { - access_token: accessToken - }; - - dispatch(startLoading()); - - return getRequest( - createAction(REQUEST_SPONSOR_SPONSORSHIPS_ADDONS), - createAction(RECEIVE_SPONSOR_SPONSORSHIPS_ADDONS), - `${window.API_BASE_URL}/api/v1/summits/${currentSummit.id}/sponsors/${sponsorId}/sponsorships/${sponsorshipId}/addons`, - authErrorHandler - )(params)(dispatch).then(() => { - dispatch(stopLoading()); - }); -}; - export const setSelectedSponsorship = (sponsorship) => (dispatch) => { dispatch(createAction(SET_SELECTED_SPONSORSHIP)({ sponsorship })); }; diff --git a/src/actions/sponsor-forms-actions.js b/src/actions/sponsor-forms-actions.js index 2df0b36a6..53a8e7eb5 100644 --- a/src/actions/sponsor-forms-actions.js +++ b/src/actions/sponsor-forms-actions.js @@ -637,8 +637,11 @@ const normalizeSponsorManagedForm = (entity) => { }; export const getSponsorManagedForm = (formId) => async (dispatch, getState) => { - const { currentSummitState } = getState(); + const { currentSummitState, currentSponsorState } = getState(); const { currentSummit } = currentSummitState; + const { + entity: { id: sponsorId } + } = currentSponsorState; const accessToken = await getAccessTokenSafely(); dispatch(startLoading()); @@ -654,7 +657,7 @@ export const getSponsorManagedForm = (formId) => async (dispatch, getState) => { return getRequest( null, createAction(RECEIVE_SPONSOR_CUSTOMIZED_FORM), - `${window.PURCHASES_API_URL}/api/v1/summits/${currentSummit.id}/show-forms/${formId}`, + `${window.PURCHASES_API_URL}/api/v1/summits/${currentSummit.id}/sponsors/${sponsorId}/managed-forms/${formId}`, snackbarErrorHandler )(params)(dispatch).then(() => { dispatch(stopLoading()); diff --git a/src/pages/sponsors/__tests__/edit-sponsor-page.test.js b/src/pages/sponsors/__tests__/edit-sponsor-page.test.js index 4bec7b1c6..48af66530 100644 --- a/src/pages/sponsors/__tests__/edit-sponsor-page.test.js +++ b/src/pages/sponsors/__tests__/edit-sponsor-page.test.js @@ -23,7 +23,7 @@ jest.mock("../../../actions/sponsor-actions", () => ({ getSponsorMaterials: jest.fn(() => ({ type: "MOCK_ACTION" })), getSponsorSocialNetworks: jest.fn(() => ({ type: "MOCK_ACTION" })), getSponsorLeadReportSettingsMeta: jest.fn(() => ({ type: "MOCK_ACTION" })), - getSponsorTiers: jest.fn(() => ({ type: "MOCK_ACTION" })), + getSponsorSponsorships: jest.fn(() => ({ type: "MOCK_ACTION" })), getExtraQuestionMeta: jest.fn(() => ({ type: "MOCK_ACTION" })), resetSponsorForm: jest.fn(() => ({ type: "MOCK_ACTION" })) })); diff --git a/src/pages/sponsors/sponsor-page/index.js b/src/pages/sponsors/sponsor-page/index.js index ea3c6f03e..b1e93748c 100644 --- a/src/pages/sponsors/sponsor-page/index.js +++ b/src/pages/sponsors/sponsor-page/index.js @@ -21,7 +21,7 @@ import { getSponsorLeadReportSettingsMeta, getSponsorMaterials, getSponsorSocialNetworks, - getSponsorTiers, + getSponsorSponsorships, resetSponsorForm } from "../../../actions/sponsor-actions"; import { getSponsorPurchasesMeta } from "../../../actions/sponsor-settings-actions"; @@ -39,7 +39,7 @@ const SponsorPage = ({ getSponsorMaterials, getSponsorSocialNetworks, getSponsorLeadReportSettingsMeta, - getSponsorTiers, + getSponsorSponsorships, getExtraQuestionMeta, getSponsorPurchasesMeta }) => { @@ -49,7 +49,7 @@ const SponsorPage = ({ getSponsorMaterials(entity.id); getSponsorSocialNetworks(entity.id); getSponsorLeadReportSettingsMeta(entity.id); - getSponsorTiers(entity.id); + getSponsorSponsorships(entity.id); getExtraQuestionMeta(); getSponsorPurchasesMeta(); } else { @@ -103,7 +103,7 @@ export default connect(mapStateToProps, { getSponsorMaterials, getSponsorSocialNetworks, getSponsorLeadReportSettingsMeta, - getSponsorTiers, + getSponsorSponsorships, getExtraQuestionMeta, getSponsorPurchasesMeta })(SponsorPage); diff --git a/src/pages/sponsors/sponsor-page/tabs/sponsor-forms-tab/components/customized-form/__tests__/customized-form-popup.test.js b/src/pages/sponsors/sponsor-page/tabs/sponsor-forms-tab/components/customized-form/__tests__/customized-form-popup.test.js index 5afdce9d6..036ca9781 100644 --- a/src/pages/sponsors/sponsor-page/tabs/sponsor-forms-tab/components/customized-form/__tests__/customized-form-popup.test.js +++ b/src/pages/sponsors/sponsor-page/tabs/sponsor-forms-tab/components/customized-form/__tests__/customized-form-popup.test.js @@ -18,15 +18,24 @@ jest.mock("actions/sponsor-forms-actions", () => ({ jest.mock("../customized-form", () => ({ __esModule: true, - default: ({ onSubmit, isSaving }) => ( - - ) + default: ({ onSubmit, isSaving, sponsor, summitId }) => { + const sponsorshipIds = (sponsor?.sponsorships || []).map((s) => s.id); + return ( + <> + + + + ); + } })); describe("CustomizedFormPopup", () => { @@ -41,17 +50,34 @@ describe("CustomizedFormPopup", () => { } }; - const sponsor = { + const createSponsor = (overrides = {}) => ({ id: 1, - sponsorships_collection: { - sponsorships: [] - } - }; + sponsorships: [{ id: 42 }], + ...overrides + }); + + const sponsor = createSponsor(); beforeEach(() => { jest.clearAllMocks(); }); + it("passes sponsorship ids and summitId to the form as queryParams", () => { + renderWithRedux( + , + { initialState } + ); + + const el = screen.getByTestId("addon-query-params"); + expect(JSON.parse(el.dataset.params)).toEqual([69, 1, [42, 99]]); + }); + it("keeps modal open when save fails", async () => { const onClose = jest.fn(); const onSaved = jest.fn(); diff --git a/src/pages/sponsors/sponsor-page/tabs/sponsor-forms-tab/components/customized-form/customized-form.js b/src/pages/sponsors/sponsor-page/tabs/sponsor-forms-tab/components/customized-form/customized-form.js index a793c2bfd..a1530e1c0 100644 --- a/src/pages/sponsors/sponsor-page/tabs/sponsor-forms-tab/components/customized-form/customized-form.js +++ b/src/pages/sponsors/sponsor-page/tabs/sponsor-forms-tab/components/customized-form/customized-form.js @@ -54,9 +54,7 @@ const CustomizedForm = ({ isSaving = false, onSubmit }) => { - const sponsorships = sponsor.sponsorships_collection.sponsorships.map( - (e) => e.id - ); + const sponsorshipIds = sponsor.sponsorships?.map((e) => e.id) || []; const formik = useFormik( { @@ -126,7 +124,7 @@ const CustomizedForm = ({ name="allowed_add_ons" queryFunction={querySponsorAddons} // params for function, except input - queryParams={[summitId, sponsor.id, sponsorships]} + queryParams={[summitId, sponsor.id, sponsorshipIds]} showSelectAll getGroupId={(addon) => addon.sponsorship.type.id} getGroupLabel={(addon) => addon.sponsorship.type.type.name} diff --git a/src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/index.js b/src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/index.js index dea556c59..ee86dd44f 100644 --- a/src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/index.js +++ b/src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/index.js @@ -23,8 +23,7 @@ import { deleteExtraQuestion, getSponsorExtraQuestion, getSponsorLeadReportSettingsMeta, - getSponsorshipAddons, - getSponsorTiers, + getSponsorSponsorships, removeAddonToSponsorship, removeTierFromSponsor, resetSponsorExtraQuestionForm, @@ -40,10 +39,9 @@ const SponsorGeneralForm = ({ sponsor, member, currentSummit, - getSponsorTiers, + getSponsorSponsorships, addTierToSponsor, removeTierFromSponsor, - getSponsorshipAddons, setSelectedSponsorship, saveAddonsToSponsorship, removeAddonToSponsorship, @@ -57,7 +55,7 @@ const SponsorGeneralForm = ({ updateExtraQuestionOrder }) => { const handleSponsorshipPaginate = (page, perPage, order, orderDir) => { - getSponsorTiers(sponsor.id, page, perPage, order, orderDir); + getSponsorSponsorships(sponsor.id, page, perPage, order, orderDir); }; return ( @@ -70,7 +68,6 @@ const SponsorGeneralForm = ({ onSponsorshipPaginate={handleSponsorshipPaginate} onSponsorshipAdd={addTierToSponsor} onSponsorshipDelete={removeTierFromSponsor} - getSponsorshipAddons={getSponsorshipAddons} onSponsorshipSelect={setSelectedSponsorship} onSponsorshipAddonSave={saveAddonsToSponsorship} onSponsorshipAddonRemove={removeAddonToSponsorship} @@ -108,10 +105,9 @@ const mapStateToProps = ({ export default connect(mapStateToProps, { getSponsorLeadReportSettingsMeta, - getSponsorTiers, + getSponsorSponsorships, addTierToSponsor, removeTierFromSponsor, - getSponsorshipAddons, saveAddonsToSponsorship, removeAddonToSponsorship, setSelectedSponsorship, diff --git a/src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/sponsorship.js b/src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/sponsorship.js index c8eca25f8..2b3ccbd75 100644 --- a/src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/sponsorship.js +++ b/src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/sponsorship.js @@ -28,7 +28,6 @@ const Sponsorship = ({ onSponsorshipPaginate, onSponsorshipAdd, onSponsorshipDelete, - getSponsorshipAddons, onSponsorshipSelect, onSponsorshipAddonSave, onSponsorshipAddonRemove @@ -186,7 +185,6 @@ const Sponsorship = ({ sponsorship={selectedSponsorship} summitId={summitId} open={showManageTierAddonsPopup} - getSponsorshipAddons={getSponsorshipAddons} onSponsorshipAddonRemove={onSponsorshipAddonRemove} onClose={handleCloseManageAddonsPopup} onSubmit={handleAddSponsorshipAddon} diff --git a/src/pages/sponsors/sponsor-page/tabs/sponsor-pages-tab/__tests__/sponsor-pages-tab.test.js b/src/pages/sponsors/sponsor-page/tabs/sponsor-pages-tab/__tests__/sponsor-pages-tab.test.js index e327132cd..287193861 100644 --- a/src/pages/sponsors/sponsor-page/tabs/sponsor-pages-tab/__tests__/sponsor-pages-tab.test.js +++ b/src/pages/sponsors/sponsor-page/tabs/sponsor-pages-tab/__tests__/sponsor-pages-tab.test.js @@ -73,7 +73,7 @@ jest.mock("../../../../../../actions/summit-actions", () => ({ const createSponsor = (overrides = {}) => ({ id: 1, - sponsorships_collection: { sponsorships: [] }, + sponsorships: [], ...overrides }); @@ -125,7 +125,7 @@ const defaultState = { } }, currentSponsorState: { - entity: { id: 1, sponsorships_collection: { sponsorships: [] } }, + entity: { id: 1, sponsorships: [] }, errors: {} } }; diff --git a/src/pages/sponsors/sponsor-page/tabs/sponsor-pages-tab/index.js b/src/pages/sponsors/sponsor-page/tabs/sponsor-pages-tab/index.js index cec79b3ff..2c5e82b44 100644 --- a/src/pages/sponsors/sponsor-page/tabs/sponsor-pages-tab/index.js +++ b/src/pages/sponsors/sponsor-page/tabs/sponsor-pages-tab/index.js @@ -381,9 +381,7 @@ const SponsorPagesTab = ({ ) ]; - const sponsorshipIds = sponsor.sponsorships_collection.sponsorships.map( - (e) => e.id - ); + const sponsorshipIds = sponsor.sponsorships?.map((e) => e.id) || []; return ( diff --git a/src/reducers/sponsors/sponsor-reducer.js b/src/reducers/sponsors/sponsor-reducer.js index 142bca97e..9736a35db 100644 --- a/src/reducers/sponsors/sponsor-reducer.js +++ b/src/reducers/sponsors/sponsor-reducer.js @@ -129,6 +129,7 @@ export const DEFAULT_ENTITY = { extra_questions: [], lead_report_setting: {}, available_lead_report_columns: [], + sponsorships: [], sponsorships_collection: DEFAULT_SPONSORHIPS_STATE }; @@ -163,6 +164,10 @@ const sponsorReducer = (state = DEFAULT_STATE, action) => { } } + if (!Array.isArray(entity.sponsorships)) { + entity.sponsorships = []; + } + if (!entity.lead_report_setting) entity.lead_report_setting = {}; return {