diff --git a/src/actions/sponsor-cart-actions.js b/src/actions/sponsor-cart-actions.js index 6f03ad1e7..0aa49f97c 100644 --- a/src/actions/sponsor-cart-actions.js +++ b/src/actions/sponsor-cart-actions.js @@ -201,10 +201,11 @@ export const getSponsorFormsForCart = orderDir = DEFAULT_ORDER_DIR ) => async (dispatch, getState) => { - const { currentSummitState } = getState(); + const { currentSummitState, currentSponsorState } = getState(); const { currentSummit } = currentSummitState; + const { entity: sponsor } = currentSponsorState; const accessToken = await getAccessTokenSafely(); - const filter = ["has_items==1"]; + const filter = []; dispatch(startLoading()); @@ -215,7 +216,7 @@ export const getSponsorFormsForCart = const params = { page: currentPage, - fields: "id,code,name,items", + fields: "id,code,name,items_count", per_page: DEFAULT_PER_PAGE, access_token: accessToken }; @@ -233,7 +234,7 @@ export const getSponsorFormsForCart = return getRequest( createAction(REQUEST_CART_AVAILABLE_FORMS), createAction(RECEIVE_CART_AVAILABLE_FORMS), - `${window.PURCHASES_API_URL}/api/v1/summits/${currentSummit.id}/show-forms`, + `${window.PURCHASES_API_URL}/api/v1/summits/${currentSummit.id}/sponsors/${sponsor.id}/available-forms`, authErrorHandler, { term, order, orderDir, currentPage } )(params)(dispatch).then(() => { diff --git a/src/actions/sponsor-forms-actions.js b/src/actions/sponsor-forms-actions.js index 4fa43055c..ca26562fd 100644 --- a/src/actions/sponsor-forms-actions.js +++ b/src/actions/sponsor-forms-actions.js @@ -766,7 +766,7 @@ export const getSponsorCustomizedForm = const params = { fields: - "id,code,name,is_archived,opens_at,instructions,expires_at,items_count,allowed_add_ons,meta_fields", + "id,code,name,is_archived,opens_at,instructions,expires_at,items_count,allowed_add_ons,meta_fields,apply_to_all_add_ons", expand: "allowed_add_ons,meta_fields,meta_fields.values", access_token: accessToken }; diff --git a/src/i18n/en.json b/src/i18n/en.json index bf2730055..62bbc3f23 100644 --- a/src/i18n/en.json +++ b/src/i18n/en.json @@ -2449,7 +2449,8 @@ "add_form_using_template": "Add Form Using Template", "add_selected_form_template": "Add Selected Form Template", "customized_form": { - "title": "Create New Form", + "new_form_title": "Create New Form", + "edit_form_title": "Edit Form", "code": "Code", "name": "Name", "addons": "Add-ons", diff --git a/src/pages/sponsors/sponsor-page/tabs/sponsor-cart-tab/components/edit-form/index.js b/src/pages/sponsors/sponsor-page/tabs/sponsor-cart-tab/components/edit-form/index.js index 7834c28b4..3a6aa2c62 100644 --- a/src/pages/sponsors/sponsor-page/tabs/sponsor-cart-tab/components/edit-form/index.js +++ b/src/pages/sponsors/sponsor-page/tabs/sponsor-cart-tab/components/edit-form/index.js @@ -157,10 +157,8 @@ const buildInitialValues = (form, timeZone) => { const buildValidationSchema = (items) => { const schema = items.reduce((acc, item) => { - item.meta_fields.map((f) => { - acc[`i-${item.form_item_id}-c-${f.class_field}-f-${f.type_id}`] = - getYupValidation(f); - }); + const quantityKey = `i-${item.form_item_id}-c-global-f-quantity`; + // notes acc[`i-${item.form_item_id}-c-global-f-notes`] = yup.string( T.translate("validation.string") @@ -181,12 +179,22 @@ const buildValidationSchema = (items) => { globalQtySchema = globalQtySchema.required( T.translate("validation.required") ); - acc[`i-${item.form_item_id}-c-global-f-quantity`] = globalQtySchema; + acc[quantityKey] = globalQtySchema; // custom rate acc[`i-${item.form_item_id}-c-global-f-custom_rate`] = yup.number( T.translate("validation.number") ); + item.meta_fields.map((f) => { + acc[`i-${item.form_item_id}-c-${f.class_field}-f-${f.type_id}`] = yup + .mixed() + .when(quantityKey, { + is: (val) => val > 0, + then: () => getYupValidation(f), + otherwise: () => yup.mixed().notRequired() + }); + }); + return acc; }, {}); diff --git a/src/pages/sponsors/sponsor-page/tabs/sponsor-cart-tab/components/select-form-dialog/__tests__/select-form-dialog.test.js b/src/pages/sponsors/sponsor-page/tabs/sponsor-cart-tab/components/select-form-dialog/__tests__/select-form-dialog.test.js index d5118ceb7..298658f7f 100644 --- a/src/pages/sponsors/sponsor-page/tabs/sponsor-cart-tab/components/select-form-dialog/__tests__/select-form-dialog.test.js +++ b/src/pages/sponsors/sponsor-page/tabs/sponsor-cart-tab/components/select-form-dialog/__tests__/select-form-dialog.test.js @@ -122,19 +122,19 @@ const mockForms = [ id: 1, code: "FORM001", name: "Installation Form", - item_count: 5 + items_count: 5 }, { id: 2, code: "FORM002", name: "Dismantle Form", - item_count: 3 + items_count: 3 }, { id: 3, code: "FORM003", name: "Setup Form", - item_count: 8 + items_count: 8 } ]; diff --git a/src/pages/sponsors/sponsor-page/tabs/sponsor-cart-tab/components/select-form-dialog/index.js b/src/pages/sponsors/sponsor-page/tabs/sponsor-cart-tab/components/select-form-dialog/index.js index bb9bb5d04..8b4631380 100644 --- a/src/pages/sponsors/sponsor-page/tabs/sponsor-cart-tab/components/select-form-dialog/index.js +++ b/src/pages/sponsors/sponsor-page/tabs/sponsor-cart-tab/components/select-form-dialog/index.js @@ -103,7 +103,7 @@ const SelectFormDialog = ({ sortable: true }, { - columnKey: "item_count", + columnKey: "items_count", header: T.translate("general.items"), sortable: false } diff --git a/src/pages/sponsors/sponsor-page/tabs/sponsor-forms-tab/components/customized-form/customized-form-popup.js b/src/pages/sponsors/sponsor-page/tabs/sponsor-forms-tab/components/customized-form/customized-form-popup.js index 479e3b46a..49741509a 100644 --- a/src/pages/sponsors/sponsor-page/tabs/sponsor-forms-tab/components/customized-form/customized-form-popup.js +++ b/src/pages/sponsors/sponsor-page/tabs/sponsor-forms-tab/components/customized-form/customized-form-popup.js @@ -95,7 +95,11 @@ const CustomizedFormPopup = ({ component="div" > - {T.translate("edit_sponsor.forms_tab.customized_form.title")} + {T.translate( + `edit_sponsor.forms_tab.customized_form.${ + formId ? "edit_form_title" : "new_form_title" + }` + )} { ? epochToMomentTimeZone(expires_at, summitTZ) : null; + normalized.allowed_add_ons = data.apply_to_all_add_ons + ? ["all"] + : data.allowed_add_ons; + return normalized; }; diff --git a/src/reducers/sponsors/sponsor-page-cart-list-reducer.js b/src/reducers/sponsors/sponsor-page-cart-list-reducer.js index 80a19d34e..bf60ffd23 100644 --- a/src/reducers/sponsors/sponsor-page-cart-list-reducer.js +++ b/src/reducers/sponsors/sponsor-page-cart-list-reducer.js @@ -62,11 +62,6 @@ const DEFAULT_STATE = { cartOwner: null }; -const mapForm = (formData) => ({ - ...formData, - item_count: `${formData.items.length} items` -}); - const sponsorPageCartListReducer = (state = DEFAULT_STATE, action) => { const { type, payload } = action; @@ -164,9 +159,7 @@ const sponsorPageCartListReducer = (state = DEFAULT_STATE, action) => { } = payload.response; const forms = - currentPage === 1 - ? data.map(mapForm) - : [...state.availableForms.forms, ...data.map(mapForm)]; + currentPage === 1 ? data : [...state.availableForms.forms, ...data]; const availableForms = { ...state.availableForms,