From bcffbfbce1abefec0b8f8fc22ebb480bb65df027 Mon Sep 17 00:00:00 2001 From: Santiago Palenque Date: Wed, 25 Mar 2026 15:09:24 -0300 Subject: [PATCH 1/2] fix: sponsor form default values and some style changes --- package.json | 3 +- .../__tests__/FormItemTable.test.js | 15 +++++ .../components/ItemTableField.js | 18 +++--- src/components/mui/FormItemTable/index.js | 5 +- src/components/mui/ItemSettingsModal/index.js | 21 ++++--- .../formik-inputs/mui-formik-datepicker.js | 3 +- .../mui-formik-dropdown-checkbox.js | 20 ++++++- .../mui-formik-dropdown-radio.js | 16 ++++- .../mui/formik-inputs/mui-formik-select-v2.js | 58 +++++++++++++++++++ .../formik-inputs/mui-formik-timepicker.js | 3 +- src/i18n/en.json | 1 + .../components/edit-form/index.js | 24 ++++---- 12 files changed, 151 insertions(+), 36 deletions(-) create mode 100644 src/components/mui/formik-inputs/mui-formik-select-v2.js diff --git a/package.json b/package.json index 481979eac..919ab3873 100644 --- a/package.json +++ b/package.json @@ -211,6 +211,7 @@ "testEnvironment": "jsdom", "setupFilesAfterEnv": [ "/testSetupFile.js" - ] + ], + "maxWorkers": 4 } } diff --git a/src/components/mui/FormItemTable/__tests__/FormItemTable.test.js b/src/components/mui/FormItemTable/__tests__/FormItemTable.test.js index 67dbfb264..ec2dda612 100644 --- a/src/components/mui/FormItemTable/__tests__/FormItemTable.test.js +++ b/src/components/mui/FormItemTable/__tests__/FormItemTable.test.js @@ -201,6 +201,21 @@ jest.mock("../../formik-inputs/mui-formik-select", () => ({ ) })); +jest.mock("../../formik-inputs/mui-formik-select-v2", () => ({ + __esModule: true, + default: ({ name, label, options }) => ( + + ) +})); + jest.mock("../../formik-inputs/mui-formik-checkbox", () => ({ __esModule: true, default: ({ name, label }) => ( diff --git a/src/components/mui/FormItemTable/components/ItemTableField.js b/src/components/mui/FormItemTable/components/ItemTableField.js index 2c668044c..38191ff73 100644 --- a/src/components/mui/FormItemTable/components/ItemTableField.js +++ b/src/components/mui/FormItemTable/components/ItemTableField.js @@ -12,21 +12,20 @@ * */ import React from "react"; -import { MenuItem } from "@mui/material"; import MuiFormikCheckbox from "../../formik-inputs/mui-formik-checkbox"; import MuiFormikDropdownCheckbox from "../../formik-inputs/mui-formik-dropdown-checkbox"; import MuiFormikDropdownRadio from "../../formik-inputs/mui-formik-dropdown-radio"; import MuiFormikDatepicker from "../../formik-inputs/mui-formik-datepicker"; import MuiFormikTimepicker from "../../formik-inputs/mui-formik-timepicker"; import MuiFormikTextField from "../../formik-inputs/mui-formik-textfield"; -import MuiFormikSelect from "../../formik-inputs/mui-formik-select"; +import MuiFormikSelectV2 from "../../formik-inputs/mui-formik-select-v2"; const ItemTableField = ({ rowId, field, timeZone, label = "" }) => { const name = `i-${rowId}-c-${field.class_field}-f-${field.type_id}`; switch (field.type) { case "CheckBox": - return ; + return ; case "CheckBoxList": return ( { ); case "ComboBox": return ( - - {field.values.map((v) => ( - - {v.value} - - ))} - + ({ value: v.id, label: v.value }))} + /> ); case "Text": return ( diff --git a/src/components/mui/FormItemTable/index.js b/src/components/mui/FormItemTable/index.js index db3ae210f..8114f9b7b 100644 --- a/src/components/mui/FormItemTable/index.js +++ b/src/components/mui/FormItemTable/index.js @@ -244,7 +244,10 @@ const FormItemTable = ({ {currencyAmountFromCents(row.rates.onsite)} {extraColumns.map((exc) => ( - + { }} /> {itemFields.map((exc) => ( - + - + ))} diff --git a/src/components/mui/formik-inputs/mui-formik-datepicker.js b/src/components/mui/formik-inputs/mui-formik-datepicker.js index 591ba6b24..69d3a0af0 100644 --- a/src/components/mui/formik-inputs/mui-formik-datepicker.js +++ b/src/components/mui/formik-inputs/mui-formik-datepicker.js @@ -25,7 +25,8 @@ const MuiFormikDatepicker = ({ name, label, required, ...props }) => { onBlur: handleBlur, error: meta.touched && Boolean(meta.error), helperText: meta.touched && meta.error, - fullWidth: true + fullWidth: true, + size: "small" }, day: { sx: { diff --git a/src/components/mui/formik-inputs/mui-formik-dropdown-checkbox.js b/src/components/mui/formik-inputs/mui-formik-dropdown-checkbox.js index 52c5d1699..536b7e4eb 100644 --- a/src/components/mui/formik-inputs/mui-formik-dropdown-checkbox.js +++ b/src/components/mui/formik-inputs/mui-formik-dropdown-checkbox.js @@ -16,6 +16,7 @@ import { Checkbox, Divider, FormControl, + InputLabel, ListItemText, MenuItem, Select @@ -23,8 +24,16 @@ import { import { useField } from "formik"; import T from "i18n-react/dist/i18n-react"; -const MuiFormikDropdownCheckbox = ({ name, options, ...rest }) => { +const MuiFormikDropdownCheckbox = ({ + name, + label, + options, + placeholder, + ...rest +}) => { const [field, meta, helpers] = useField(name); + const finalPlaceholder = + placeholder || T.translate("general.select_an_option"); const allSelected = options.every(({ value }) => field.value?.includes(value) ); @@ -46,9 +55,16 @@ const MuiFormikDropdownCheckbox = ({ name, options, ...rest }) => { return ( + {label && ( + + {label} + + )} { + const [field, meta] = useField(name); + const finalPlaceholder = + placeholder || T.translate("general.select_an_option"); + + return ( + + {label && {label}} + + {meta.touched && meta.error && ( + {meta.error} + )} + + ); +}; + +MuiFormikSelectV2.propTypes = { + name: PropTypes.string.isRequired, + options: PropTypes.array.isRequired +}; + +export default MuiFormikSelectV2; diff --git a/src/components/mui/formik-inputs/mui-formik-timepicker.js b/src/components/mui/formik-inputs/mui-formik-timepicker.js index bfc4af55e..f261cf9be 100644 --- a/src/components/mui/formik-inputs/mui-formik-timepicker.js +++ b/src/components/mui/formik-inputs/mui-formik-timepicker.js @@ -19,7 +19,7 @@ import { TimePicker } from "@mui/x-date-pickers/TimePicker"; import { useField } from "formik"; -const MuiFormikTimepicker = ({ name, minTime, maxTime, timeZone }) => { +const MuiFormikTimepicker = ({ name, label, minTime, maxTime, timeZone }) => { const [field, meta, helpers] = useField(name); return ( @@ -35,6 +35,7 @@ const MuiFormikTimepicker = ({ name, minTime, maxTime, timeZone }) => { slotProps={{ textField: { name, + label, error: meta.touched && Boolean(meta.error), helperText: meta.touched && meta.error, size: "small", diff --git a/src/i18n/en.json b/src/i18n/en.json index 38bff22d6..f2c051c37 100644 --- a/src/i18n/en.json +++ b/src/i18n/en.json @@ -80,6 +80,7 @@ "sort_by": "Sort By", "sort_asc_label": "A-Z", "sort_desc_label": "Z-A", + "select_an_option": "Select an option", "placeholders": { "search_speakers": "Search Speakers by Name, Email, Speaker Id or Member Id", "select_acceptance_criteria": "Select acceptance criteria", diff --git a/src/pages/sponsors/sponsor-cart-tab/components/edit-form/index.js b/src/pages/sponsors/sponsor-cart-tab/components/edit-form/index.js index 13463473d..cf40affb9 100644 --- a/src/pages/sponsors/sponsor-cart-tab/components/edit-form/index.js +++ b/src/pages/sponsors/sponsor-cart-tab/components/edit-form/index.js @@ -34,16 +34,20 @@ const parseValue = (item, timeZone) => { return item.current_value ? parseInt(item.current_value) : item.minimum_quantity || 0; - case "ComboBox": + case "RadioButtonList": + case "ComboBox": { + const defaultVal = item.values.find((v) => v.is_default)?.id; + return item.current_value || defaultVal || ""; + } + case "CheckBoxList": { + const defaultVal = item.values.find((v) => v.is_default)?.id; + return item.current_value || defaultVal || []; + } case "Text": case "TextArea": return item.current_value || ""; case "CheckBox": return item.current_value ? item.current_value === "True" : false; - case "CheckBoxList": - return item.current_value || []; - case "RadioButtonList": - return item.current_value || ""; case "Time": return item.current_value ? moment.tz(item.current_value, "HH:mm", timeZone) @@ -152,12 +156,10 @@ const buildInitialValues = (form, timeZone) => { const buildValidationSchema = (items) => { const schema = items.reduce((acc, item) => { - item.meta_fields - .filter((f) => f.class_field === "Form") - .map((f) => { - acc[`i-${item.form_item_id}-c-${f.class_field}-f-${f.type_id}`] = - getYupValidation(f); - }); + item.meta_fields.map((f) => { + acc[`i-${item.form_item_id}-c-${f.class_field}-f-${f.type_id}`] = + getYupValidation(f); + }); // notes acc[`i-${item.form_item_id}-c-global-f-notes`] = yup.string( T.translate("validation.string") From ec7fcd0f68ffe77947d040e7a0fdca7d308b947a Mon Sep 17 00:00:00 2001 From: Santiago Palenque Date: Wed, 25 Mar 2026 15:38:46 -0300 Subject: [PATCH 2/2] fix: checkboxlist default value --- .../sponsors/sponsor-cart-tab/components/edit-form/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/sponsors/sponsor-cart-tab/components/edit-form/index.js b/src/pages/sponsors/sponsor-cart-tab/components/edit-form/index.js index cf40affb9..fcbc38cd3 100644 --- a/src/pages/sponsors/sponsor-cart-tab/components/edit-form/index.js +++ b/src/pages/sponsors/sponsor-cart-tab/components/edit-form/index.js @@ -41,7 +41,7 @@ const parseValue = (item, timeZone) => { } case "CheckBoxList": { const defaultVal = item.values.find((v) => v.is_default)?.id; - return item.current_value || defaultVal || []; + return item.current_value || (defaultVal ? [defaultVal] : []); } case "Text": case "TextArea":