diff --git a/.browserslistrc b/.browserslistrc index 2c90ae7e7..cc009b0a2 100644 --- a/.browserslistrc +++ b/.browserslistrc @@ -1,2 +1,4 @@ -> 0.25% -not dead +Chrome >= 117 +Edge >= 121 +Firefox >= 121 +Safari >= 17 diff --git a/package.json b/package.json index 2f3b04fbf..c4aaad5cd 100644 --- a/package.json +++ b/package.json @@ -39,9 +39,9 @@ "@emotion/react": "^11.14.0", "@emotion/styled": "^11.14.0", "@fontsource/roboto": "^5.1.1", - "@mui/icons-material": "^6.4.3", - "@mui/material": "^6.4.3", - "@mui/x-date-pickers": "^7.26.0", + "@mui/icons-material": "^9.0.0", + "@mui/material": "^9.0.0", + "@mui/x-date-pickers": "^9.0.0", "@react-pdf/renderer": "4.3.0", "@sentry/react": "^8.32.0", "@sentry/webpack-plugin": "^2.22.4", @@ -49,7 +49,7 @@ "@stripe/stripe-js": "^8.5.3", "@types/googlemaps": "^3.39.3", "@types/markerclustererplus": "^2.1.29", - "@types/react": "^16.9.32", + "@types/react": "^18.0.0", "@uiw/codemirror-theme-sublime": "^4.21.23", "@uiw/react-codemirror": "^4.21.7", "@uiw/react-color-sketch": "^2.1.0", @@ -92,14 +92,14 @@ "moment": "^2.29.1", "moment-duration-format": "^2.3.2", "moment-timezone": "^0.5.33", - "openstack-uicore-foundation": "5.0.34", + "openstack-uicore-foundation": "6.0.0-beta.4", "p-limit": "^6.1.0", "path-browserify": "^1.0.1", "postcss-loader": "^6.2.1", "process": "^0.11.10", "prop-types": "^15.8.1", "qr-scanner": "^1.4.2", - "react": "^16.13.1", + "react": "^18.0.0", "react-accessible-treeview": "^2.6.2", "react-beautiful-dnd": "^13.1.1", "react-bootstrap": "^0.31.5", @@ -110,7 +110,7 @@ "react-device-detect": "^2.2.2", "react-dnd": "^16.0.0", "react-dnd-html5-backend": "^16.0.0", - "react-dom": "^16.13.1", + "react-dom": "^18.0.0", "react-dropzone": "^4.2.13", "react-final-form": "^6.5.9", "react-google-maps": "^9.4.5", @@ -148,9 +148,9 @@ "@babel/eslint-parser": "^7.24.7", "@testing-library/dom": "^10.1.0", "@testing-library/jest-dom": "^6.4.2", - "@testing-library/react": "12.1.5", + "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^14.5.2", - "@types/react-dom": "16.9.24", + "@types/react-dom": "^18.0.0", "babel-jest": "^30.3.0", "css-minimizer-webpack-plugin": "^4.2.2", "eslint": "8.2.0", diff --git a/src/components/audit-logs/index.js b/src/components/audit-logs/index.js index 81cb2a9d6..8977779b4 100644 --- a/src/components/audit-logs/index.js +++ b/src/components/audit-logs/index.js @@ -1,8 +1,8 @@ import React, { useEffect, useState } from "react"; -import FreeTextSearch from "openstack-uicore-foundation/lib/components/free-text-search" -import Table from "openstack-uicore-foundation/lib/components/table" -import Dropdown from "openstack-uicore-foundation/lib/components/inputs/dropdown" -import MemberInput from "openstack-uicore-foundation/lib/components/inputs/member-input" +import FreeTextSearch from "openstack-uicore-foundation/lib/components/free-text-search"; +import Table from "openstack-uicore-foundation/lib/components/table"; +import Dropdown from "openstack-uicore-foundation/lib/components/inputs/dropdown"; +import MemberInput from "openstack-uicore-foundation/lib/components/inputs/member-input"; import DateTimePicker from "openstack-uicore-foundation/lib/components/inputs/datetimepicker"; import T from "i18n-react"; import { epochToMomentTimeZone } from "openstack-uicore-foundation/lib/utils/methods"; @@ -215,9 +215,7 @@ const AuditLogs = ({ /> -
-
handleChangeDateFilter(ev, false)} timezone={currentSummit.time_zone_id} value={epochToMomentTimeZone( @@ -272,17 +265,17 @@ const AuditLogs = ({ currentSummit.time_zone_id )} className="event-list-date-picker" + inputProps={{ + placeholder: T.translate( + "audit_log.placeholders.created_date_from" + ) + }} />
handleChangeDateFilter(ev, true)} timezone={currentSummit.time_zone_id} value={epochToMomentTimeZone( @@ -290,16 +283,19 @@ const AuditLogs = ({ currentSummit.time_zone_id )} className="event-list-date-picker" + inputProps={{ + placeholder: T.translate( + "audit_log.placeholders.created_date_to" + ) + }} />
)}
- {logEntries.length === 0 && (
{T.translate("audit_log.no_log_entries")}
)} - {logEntries.length > 0 && ( <> ({ translate: (key) => key })); -jest.mock("react-select", () => function MockSelect({ id, value, options, onChange }) { - return ( - - ); - }); - -jest.mock("../../../inputs/media-upload-type-input", () => function MockMediaUploadTypeInput({ id, value, onChange }) { - return ( - onChange({ target: { value: e.target.value } })} - /> - ); - }); +jest.mock( + "react-select", + () => + function MockSelect({ id, value, options, onChange }) { + return ( + + ); + } +); + +jest.mock( + "../../../inputs/media-upload-type-input", + () => + function MockMediaUploadTypeInput({ id, value, onChange }) { + return ( + onChange({ target: { value: e.target.value } })} + /> + ); + } +); describe("MediaTypeFilter", () => { const baseProps = { diff --git a/src/components/forms/badge-form.js b/src/components/forms/badge-form.js index ed30b9d7b..4fa02d10c 100644 --- a/src/components/forms/badge-form.js +++ b/src/components/forms/badge-form.js @@ -401,11 +401,6 @@ class BadgeForm extends React.Component { this.handleChangePrintDate(ev, false) @@ -416,15 +411,15 @@ class BadgeForm extends React.Component { )} className="badge-print-date-picker" renderInput={renderInput} - /> - + this.handleChangePrintDate(ev, true) @@ -435,6 +430,11 @@ class BadgeForm extends React.Component { )} className="badge-print-date-picker" renderInput={renderInput} + inputProps={{ + placeholder: T.translate( + "edit_ticket.placeholders.print_date_to" + ) + }} /> - - + + {disabled ? ( diff --git a/src/components/mui/formik-inputs/company-input-mui.js b/src/components/mui/formik-inputs/company-input-mui.js index 301a451a0..18fd3d0f5 100644 --- a/src/components/mui/formik-inputs/company-input-mui.js +++ b/src/components/mui/formik-inputs/company-input-mui.js @@ -172,20 +172,23 @@ const CompanyInputMUI = ({ error={Boolean(error)} helperText={error || ""} slotProps={{ - ...params.InputProps, - inputLabel: { shrink: false }, - sx: { - "& input::placeholder": { - color: "#00000061", - opacity: 1 - } + ...params.slotProps, + input: { + ...(params.slotProps?.input || {}), + sx: { + "& input::placeholder": { + color: "#00000061", + opacity: 1 + } + }, + endAdornment: ( + <> + {loading && } + {params.slotProps.input?.endAdornment} + + ) }, - endAdornment: ( - <> - {loading && } - {params.InputProps?.endAdornment} - - ) + inputLabel: { shrink: false } }} /> )} diff --git a/src/components/mui/formik-inputs/item-price-tiers.js b/src/components/mui/formik-inputs/item-price-tiers.js index 43b6f5825..9657f22bd 100644 --- a/src/components/mui/formik-inputs/item-price-tiers.js +++ b/src/components/mui/formik-inputs/item-price-tiers.js @@ -5,7 +5,7 @@ import { Box, Checkbox, FormControlLabel, - Grid2, + Grid, InputLabel, TextField } from "@mui/material"; @@ -32,11 +32,11 @@ const ItemPriceTiers = ({ readOnly = false }) => { }; return ( - + {TIERS.map(({ field, label }) => { const isEnabled = enabled[field]; return ( - + { /> )} - + ); })} - + ); }; diff --git a/src/components/mui/formik-inputs/mui-formik-async-select.js b/src/components/mui/formik-inputs/mui-formik-async-select.js index 852417e1a..3357a440c 100644 --- a/src/components/mui/formik-inputs/mui-formik-async-select.js +++ b/src/components/mui/formik-inputs/mui-formik-async-select.js @@ -95,15 +95,18 @@ const MuiFormikAsyncAutocomplete = ({ error={Boolean(error)} helperText={error || ""} slotProps={{ + ...params.slotProps, + input: { - ...params.InputProps, + ...params.slotProps.input, endAdornment: ( <> {loading && } - {params.InputProps?.endAdornment} + {params.slotProps.input?.endAdornment} ) }, + inputLabel: { shrink: false } }} sx={{ diff --git a/src/components/mui/formik-inputs/mui-sponsor-input.js b/src/components/mui/formik-inputs/mui-sponsor-input.js index a3f818e28..bfcfc7cdf 100644 --- a/src/components/mui/formik-inputs/mui-sponsor-input.js +++ b/src/components/mui/formik-inputs/mui-sponsor-input.js @@ -133,20 +133,23 @@ const MuiSponsorInput = ({ error={Boolean(error)} helperText={errorMessage || ""} slotProps={{ - ...params.InputProps, - inputLabel: { shrink: false }, - sx: { - "& input::placeholder": { - color: "#00000061", - opacity: 1 - } + ...params.slotProps, + input: { + ...params.slotProps.input, + endAdornment: ( + <> + {loading && } + {params.slotProps.input?.endAdornment} + + ) }, - endAdornment: ( - <> - {loading && } - {params.InputProps?.endAdornment} - - ) + inputLabel: { shrink: false } + }} + sx={{ + "& input::placeholder": { + color: "#00000061", + opacity: 1 + } }} /> )} diff --git a/src/components/mui/formik-inputs/sponsorship-input-mui.js b/src/components/mui/formik-inputs/sponsorship-input-mui.js index 230d685e8..3aae69b84 100644 --- a/src/components/mui/formik-inputs/sponsorship-input-mui.js +++ b/src/components/mui/formik-inputs/sponsorship-input-mui.js @@ -129,20 +129,23 @@ const SponsorshipTypeInputMUI = ({ error={Boolean(error)} helperText={errorMessage || ""} slotProps={{ - ...params.InputProps, - inputLabel: { shrink: false }, - sx: { - "& input::placeholder": { - color: "#00000061", - opacity: 1 - } + ...params.slotProps, + input: { + ...params.slotProps.input, + endAdornment: ( + <> + {loading && } + {params.slotProps.input?.endAdornment} + + ) }, - endAdornment: ( - <> - {loading && } - {params.InputProps?.endAdornment} - - ) + inputLabel: { shrink: false } + }} + sx={{ + "& input::placeholder": { + color: "#00000061", + opacity: 1 + } }} /> )} diff --git a/src/components/mui/showConfirmDialog.js b/src/components/mui/showConfirmDialog.js index ee3a368fd..effb06c0a 100644 --- a/src/components/mui/showConfirmDialog.js +++ b/src/components/mui/showConfirmDialog.js @@ -1,4 +1,4 @@ -import ReactDOM from "react-dom"; +import { createRoot } from "react-dom/client"; import React from "react"; import ConfirmDialog from "./confirm-dialog"; @@ -14,9 +14,10 @@ const showConfirmDialog = ({ new Promise((resolve) => { const container = document.createElement("div"); document.body.appendChild(container); + const root = createRoot(container); const close = (answer) => { - ReactDOM.unmountComponentAtNode(container); + root.unmount(); container.remove(); resolve(answer); }; @@ -24,7 +25,7 @@ const showConfirmDialog = ({ const handleConfirm = () => close(true); const handleCancel = () => close(false); - ReactDOM.render( + root.render( , - container + /> ); }); diff --git a/src/components/schedule-builder/schedule-admin-empty-spots-modal.js b/src/components/schedule-builder/schedule-admin-empty-spots-modal.js index c167182d2..c1fdcb1ee 100644 --- a/src/components/schedule-builder/schedule-admin-empty-spots-modal.js +++ b/src/components/schedule-builder/schedule-admin-empty-spots-modal.js @@ -9,27 +9,40 @@ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. - **/ -import { Modal, Button, FormGroup, FormControl } from "react-bootstrap"; + */ import React from "react"; -import DateTimePicker from "openstack-uicore-foundation/lib/components/inputs/datetimepicker" -import SummitVenuesSelect from "openstack-uicore-foundation/lib/components/inputs/summit-venues-select"; -import moment from "moment-timezone"; +import { Modal, Button, FormGroup, FormControl } from "react-bootstrap"; import T from "i18n-react/dist/i18n-react"; +import moment from "moment-timezone"; +import DateTimePicker from "openstack-uicore-foundation/lib/components/inputs/datetimepicker"; +import SummitVenuesSelect from "openstack-uicore-foundation/lib/components/inputs/summit-venues-select"; +import { MILLISECONDS_IN_SECOND } from "../../utils/constants"; + +const DEFAULT_START_HOUR = 7; +const DEFAULT_END_HOUR = 19; +const END_OF_DAY_HOUR = 23; +const END_OF_HOUR = 59; +const MIN_GAP_MINUTES = 5; class ScheduleAdminEmptySpotsModal extends React.Component { constructor(props) { super(props); const { currentSummit } = this.props; - let defaultValueStart = moment - .tz(currentSummit.start_date * 1000, currentSummit.time_zone.name) - .hour(7) + const defaultValueStart = moment + .tz( + currentSummit.start_date * MILLISECONDS_IN_SECOND, + currentSummit.time_zone.name + ) + .hour(DEFAULT_START_HOUR) .minute(0) .second(0); - let defaultValueEnd = moment - .tz(currentSummit.start_date * 1000, currentSummit.time_zone.name) - .hour(19) + const defaultValueEnd = moment + .tz( + currentSummit.start_date * MILLISECONDS_IN_SECOND, + currentSummit.time_zone.name + ) + .hour(DEFAULT_END_HOUR) .minute(0) .second(0); @@ -56,7 +69,7 @@ class ScheduleAdminEmptySpotsModal extends React.Component { isValidForm() { let valid = true; - for (var key in this.validationState) { + for (const key in this.validationState) { valid = valid && this.validationState[key]; } return valid; @@ -66,32 +79,32 @@ class ScheduleAdminEmptySpotsModal extends React.Component { if (!this.isValidForm()) return; this.props.onFindEmptySpots({ currentLocation: this.state.currentLocation.value, - dateFrom: this.state.dateFrom.valueOf() / 1000, - dateTo: this.state.dateTo.valueOf() / 1000, + dateFrom: this.state.dateFrom.valueOf() / MILLISECONDS_IN_SECOND, + dateTo: this.state.dateTo.valueOf() / MILLISECONDS_IN_SECOND, gapSize: this.state.gapSize }); } handleChangeDateFrom(ev) { - let { value, id } = ev.target; + const { value } = ev.target; this.setState({ ...this.state, dateFrom: value }); } getValidationDateFrom() { - let { dateFrom } = this.state; - let isValid = dateFrom != null && dateFrom !== ""; + const { dateFrom } = this.state; + const isValid = dateFrom != null && dateFrom !== ""; this.validationState = { ...this.validationState, dateFrom: isValid }; return isValid ? "success" : "warning"; } handleChangeDateTo(ev) { - let { value, id } = ev.target; + const { value } = ev.target; this.setState({ ...this.state, dateTo: value }); } getValidationDateTo() { - let { dateTo, dateFrom } = this.state; - let isValid = + const { dateTo, dateFrom } = this.state; + const isValid = dateTo != null && dateTo !== "" && dateFrom != null && @@ -101,15 +114,15 @@ class ScheduleAdminEmptySpotsModal extends React.Component { } onVenueChanged(location) { - let option = + const option = location != null ? { value: location, label: location.name } : null; this.setState({ ...this.state, currentLocation: option }); } getValidationStateVenue() { - let { currentLocation } = this.state; + const { currentLocation } = this.state; - let isValid = currentLocation != null; + const isValid = currentLocation != null; this.validationState = { ...this.validationState, currentLocation: isValid @@ -124,51 +137,47 @@ class ScheduleAdminEmptySpotsModal extends React.Component { getValidationStateGapSize() { let { gapSize } = this.state; gapSize = parseInt(gapSize); - let isValid = gapSize >= 5; + const isValid = gapSize >= MIN_GAP_MINUTES; this.validationState = { ...this.validationState, gapSize: isValid }; return isValid ? "success" : "warning"; } render() { - let { showModal, onCloseModal, currentSummit } = this.props; - let { currentLocation, dateFrom, dateTo, gapSize } = this.state; + const { showModal, onCloseModal, currentSummit } = this.props; + const { currentLocation, dateFrom, dateTo, gapSize } = this.state; // process venues - let venues = []; + const venues = []; for (let i = 0; i < currentSummit.locations.length; i++) { - let location = currentSummit.locations[i]; + const location = currentSummit.locations[i]; if (location.class_name !== "SummitVenue") continue; - let option = { value: location, label: location.name }; + const option = { value: location, label: location.name }; venues.push(option); if (!location.hasOwnProperty("rooms")) continue; for (let j = 0; j < location.rooms.length; j++) { - let subOption = { + const subOption = { value: location.rooms[j], label: location.rooms[j].name }; venues.push(subOption); } } - let currenSummitStartDate = moment - .tz(currentSummit.start_date * 1000, currentSummit.time_zone.name) + const currenSummitStartDate = moment + .tz( + currentSummit.start_date * MILLISECONDS_IN_SECOND, + currentSummit.time_zone.name + ) .hour(0) .minute(0) .second(0); - let currenSummitEndDate = moment - .tz(currentSummit.end_date * 1000, currentSummit.time_zone.name) - .hour(23) - .minute(59) - .second(59); - let defaultValueStart = moment - .tz(currentSummit.start_date * 1000, currentSummit.time_zone.name) - .hour(7) - .minute(0) - .second(0); - let defaultValueEnd = moment - .tz(currentSummit.start_date * 1000, currentSummit.time_zone.name) - .hour(22) - .minute(0) - .second(0); + const currenSummitEndDate = moment + .tz( + currentSummit.end_date * MILLISECONDS_IN_SECOND, + currentSummit.time_zone.name + ) + .hour(END_OF_DAY_HOUR) + .minute(END_OF_HOUR) + .second(END_OF_HOUR); return ( @@ -201,19 +210,22 @@ class ScheduleAdminEmptySpotsModal extends React.Component { @@ -225,18 +237,21 @@ class ScheduleAdminEmptySpotsModal extends React.Component { id="end_date" format={{ date: "YYYY-MM-DD", time: "HH:mm" }} timeConstraints={{ hours: { min: 7, max: 22 } }} - inputProps={{ - placeholder: T.translate( - "empty_spots_modal.placeholders.end_date" - ) - }} timezone={currentSummit.time_zone.name} validation={{ - after: currenSummitStartDate.valueOf() / 1000, - before: currenSummitEndDate.valueOf() / 1000 + after: + currenSummitStartDate.valueOf() / + MILLISECONDS_IN_SECOND, + before: + currenSummitEndDate.valueOf() / MILLISECONDS_IN_SECOND }} onChange={this.handleChangeDateTo} value={dateTo} + inputProps={{ + placeholder: T.translate( + "empty_spots_modal.placeholders.end_date" + ) + }} /> diff --git a/src/components/select-page-template-dialog/index.js b/src/components/select-page-template-dialog/index.js index 3779ab5a5..1a5c3ab84 100644 --- a/src/components/select-page-template-dialog/index.js +++ b/src/components/select-page-template-dialog/index.js @@ -11,7 +11,7 @@ import { DialogTitle, Divider, FormControlLabel, - Grid2, + Grid, IconButton, Radio, Typography @@ -153,18 +153,18 @@ const SelectPageTemplateDialog = ({ - - + + {selectedRows.length} items selected - - + + - - + + {pageTemplates.length > 0 && ( diff --git a/src/components/summit-event-bulk-actions/summit-event-bulk-editor-form.js b/src/components/summit-event-bulk-actions/summit-event-bulk-editor-form.js index e9c06cf85..86732a2f7 100644 --- a/src/components/summit-event-bulk-actions/summit-event-bulk-editor-form.js +++ b/src/components/summit-event-bulk-actions/summit-event-bulk-editor-form.js @@ -13,9 +13,9 @@ import React from "react"; import T from "i18n-react/dist/i18n-react"; import Swal from "sweetalert2"; -import DateTimePicker from "openstack-uicore-foundation/lib/components/inputs/datetimepicker" -import SummitVenuesSelect from "openstack-uicore-foundation/lib/components/inputs/summit-venues-select" -import Input from "openstack-uicore-foundation/lib/components/inputs/text-input" +import DateTimePicker from "openstack-uicore-foundation/lib/components/inputs/datetimepicker"; +import SummitVenuesSelect from "openstack-uicore-foundation/lib/components/inputs/summit-venues-select"; +import Input from "openstack-uicore-foundation/lib/components/inputs/text-input"; import Dropdown from "openstack-uicore-foundation/lib/components/inputs/dropdown"; import { epochToMomentTimeZone } from "openstack-uicore-foundation/lib/utils/methods"; import moment from "moment-timezone"; @@ -451,11 +451,6 @@ class SummitEventBulkEditorForm extends React.Component {
@@ -478,11 +478,6 @@ class SummitEventBulkEditorForm extends React.Component { id="end_date" format={{ date: "YYYY-MM-DD", time: "HH:mm" }} timeConstraints={{ hours: { min: 7, max: 22 } }} - inputProps={{ - placeholder: T.translate( - "bulk_actions_page.placeholders.end_date" - ) - }} timezone={currentSummit.time_zone.name} value={epochToMomentTimeZone( currentBulkEndDate, @@ -497,6 +492,11 @@ class SummitEventBulkEditorForm extends React.Component { }} onChange={this.handleChangeBulkEndDate} className="bulk-edit-date-picker" + inputProps={{ + placeholder: T.translate( + "bulk_actions_page.placeholders.end_date" + ) + }} />
diff --git a/src/components/summit-event-bulk-actions/summit-event-bulk-editor-item.js b/src/components/summit-event-bulk-actions/summit-event-bulk-editor-item.js index a56b1cd34..2db1406a0 100644 --- a/src/components/summit-event-bulk-actions/summit-event-bulk-editor-item.js +++ b/src/components/summit-event-bulk-actions/summit-event-bulk-editor-item.js @@ -12,8 +12,8 @@ * */ import React from "react"; import { FormGroup, FormControl } from "react-bootstrap"; -import DateTimePicker from "openstack-uicore-foundation/lib/components/inputs/datetimepicker" -import SummitVenuesSelect from "openstack-uicore-foundation/lib/components/inputs/summit-venues-select" +import DateTimePicker from "openstack-uicore-foundation/lib/components/inputs/datetimepicker"; +import SummitVenuesSelect from "openstack-uicore-foundation/lib/components/inputs/summit-venues-select"; import Dropdown from "openstack-uicore-foundation/lib/components/inputs/dropdown"; import { SummitEvent } from "openstack-uicore-foundation/lib/models"; import moment from "moment-timezone"; @@ -309,11 +309,6 @@ class SummitEventBulkEditorItem extends React.Component { @@ -334,11 +334,6 @@ class SummitEventBulkEditorItem extends React.Component { id="end_date" format={{ date: "YYYY-MM-DD", time: "HH:mm" }} timeConstraints={{ hours: { min: 7, max: 22 } }} - inputProps={{ - placeholder: T.translate( - "bulk_actions_page.placeholders.end_date" - ) - }} timezone={currentSummit.time_zone.name} validation={{ after: @@ -348,6 +343,11 @@ class SummitEventBulkEditorItem extends React.Component { onChange={this.onTimeLocalChanged} value={this.getFormattedTime(event.end_date)} className="bulk-edit-date-picker" + inputProps={{ + placeholder: T.translate( + "bulk_actions_page.placeholders.end_date" + ) + }} /> diff --git a/src/index.js b/src/index.js index 0be5b3a68..8f9aa63b0 100644 --- a/src/index.js +++ b/src/index.js @@ -12,7 +12,7 @@ * */ import React from "react"; -import ReactDOM from "react-dom"; +import { createRoot } from "react-dom/client"; import { Provider } from "react-redux"; import { PersistGate } from "redux-persist/es/integration/react"; import { GlobalConfirmDialog } from "openstack-uicore-foundation/lib/components/mui/show-confirm-dialog"; @@ -30,7 +30,9 @@ const onBeforeLift = () => { console.log("reading state ..."); }; -ReactDOM.render( +const container = document.querySelector("#root"); +const root = createRoot(container); +root.render( @@ -40,6 +42,5 @@ ReactDOM.render( - , - document.querySelector("#root") + ); diff --git a/src/pages/attendees/summit-attendees-list-page.js b/src/pages/attendees/summit-attendees-list-page.js index 2db5eb984..5db9b1758 100644 --- a/src/pages/attendees/summit-attendees-list-page.js +++ b/src/pages/attendees/summit-attendees-list-page.js @@ -16,13 +16,13 @@ import { connect } from "react-redux"; import T from "i18n-react/dist/i18n-react"; import Swal from "sweetalert2"; import { Pagination } from "react-bootstrap"; -import Dropdown from "openstack-uicore-foundation/lib/components/inputs/dropdown" -import Input from "openstack-uicore-foundation/lib/components/inputs/text-input" -import FreeTextSearch from "openstack-uicore-foundation/lib/components/free-text-search" -import SelectableTable from "openstack-uicore-foundation/lib/components/table-selectable" -import DateTimePicker from "openstack-uicore-foundation/lib/components/inputs/datetimepicker" -import TagInput from "openstack-uicore-foundation/lib/components/inputs/tag-input" -import CompanyInput from "openstack-uicore-foundation/lib/components/inputs/company-input" +import Dropdown from "openstack-uicore-foundation/lib/components/inputs/dropdown"; +import Input from "openstack-uicore-foundation/lib/components/inputs/text-input"; +import FreeTextSearch from "openstack-uicore-foundation/lib/components/free-text-search"; +import SelectableTable from "openstack-uicore-foundation/lib/components/table-selectable"; +import DateTimePicker from "openstack-uicore-foundation/lib/components/inputs/datetimepicker"; +import TagInput from "openstack-uicore-foundation/lib/components/inputs/tag-input"; +import CompanyInput from "openstack-uicore-foundation/lib/components/inputs/company-input"; import TicketTypesInput from "openstack-uicore-foundation/lib/components/inputs/ticket-types-input"; import { epochToMomentTimeZone } from "openstack-uicore-foundation/lib/utils/methods"; import { SegmentedControl } from "segmented-control"; @@ -1039,11 +1039,6 @@ class SummitAttendeeListPage extends React.Component { this.handleCheckInDate(ev, false)} value={epochToMomentTimeZone( @@ -1051,6 +1046,11 @@ class SummitAttendeeListPage extends React.Component { currentSummit.time_zone_id )} className="event-list-date-picker" + inputProps={{ + placeholder: T.translate( + "attendee_list.placeholders.checkin_date_from" + ) + }} />
this.handleCheckInDate(ev, true)} value={epochToMomentTimeZone( @@ -1072,6 +1067,11 @@ class SummitAttendeeListPage extends React.Component { currentSummit.time_zone_id )} className="event-list-date-picker" + inputProps={{ + placeholder: T.translate( + "attendee_list.placeholders.checkin_date_to" + ) + }} />
@@ -1135,7 +1135,6 @@ class SummitAttendeeListPage extends React.Component { {attendees.length === 0 && (
{T.translate("attendee_list.no_attendees")}
)} -
- {attendees.length > 0 && (
{selectedCount > 0 && ( diff --git a/src/pages/emails/email-log-list-page.js b/src/pages/emails/email-log-list-page.js index 417c16571..0586c4723 100644 --- a/src/pages/emails/email-log-list-page.js +++ b/src/pages/emails/email-log-list-page.js @@ -15,9 +15,9 @@ import React, { useEffect, useState } from "react"; import { connect } from "react-redux"; import T from "i18n-react/dist/i18n-react"; import { Pagination } from "react-bootstrap"; -import FreeTextSearch from "openstack-uicore-foundation/lib/components/free-text-search" -import Table from "openstack-uicore-foundation/lib/components/table" -import Dropdown from "openstack-uicore-foundation/lib/components/inputs/dropdown" +import FreeTextSearch from "openstack-uicore-foundation/lib/components/free-text-search"; +import Table from "openstack-uicore-foundation/lib/components/table"; +import Dropdown from "openstack-uicore-foundation/lib/components/inputs/dropdown"; import DateTimePicker from "openstack-uicore-foundation/lib/components/inputs/datetimepicker"; import { epochToMomentTimeZone } from "openstack-uicore-foundation/lib/utils/methods"; import { SegmentedControl } from "segmented-control"; @@ -37,11 +37,9 @@ const SentEmailListPage = function ({ order, orderDir, totalEmails, - match, perPage, filters, - getSentEmails, - ...props + getSentEmails }) { useEffect(() => { getSentEmails(term, currentPage, perPage, order, orderDir, filters); @@ -70,7 +68,7 @@ const SentEmailListPage = function ({ getSentEmails(term, newPage, perPage, order, orderDir, emailFilters); }; - const handleSort = (index, key, dir, func) => { + const handleSort = (index, key, dir) => { getSentEmails(term, currentPage, perPage, key, dir, emailFilters); }; @@ -310,11 +308,6 @@ const SentEmailListPage = function ({ handleChangeDateFilter(ev, false)} timezone="UTC" value={epochToMomentTimeZone( @@ -322,17 +315,17 @@ const SentEmailListPage = function ({ "UTC" )} className="event-list-date-picker" + inputProps={{ + placeholder: T.translate( + "email_logs.placeholders.sent_date_from" + ) + }} />
handleChangeDateFilter(ev, true)} timezone="UTC" value={epochToMomentTimeZone( @@ -340,6 +333,11 @@ const SentEmailListPage = function ({ "UTC" )} className="event-list-date-picker" + inputProps={{ + placeholder: T.translate( + "email_logs.placeholders.sent_date_to" + ) + }} />
@@ -375,9 +373,7 @@ const SentEmailListPage = function ({ /> - {emails.length === 0 &&
{T.translate("emails.no_emails")}
} - {emails.length > 0 && ( <>
diff --git a/src/pages/events/summit-event-list-page.js b/src/pages/events/summit-event-list-page.js index 058754b88..097eaeea4 100644 --- a/src/pages/events/summit-event-list-page.js +++ b/src/pages/events/summit-event-list-page.js @@ -16,15 +16,15 @@ import { connect } from "react-redux"; import T from "i18n-react/dist/i18n-react"; import Swal from "sweetalert2"; import { Modal, Pagination } from "react-bootstrap"; -import CompanyInput from "openstack-uicore-foundation/lib/components/inputs/company-input" -import DateTimePicker from "openstack-uicore-foundation/lib/components/inputs/datetimepicker" -import Dropdown from "openstack-uicore-foundation/lib/components/inputs/dropdown" -import FreeTextSearch from "openstack-uicore-foundation/lib/components/free-text-search" -import Input from "openstack-uicore-foundation/lib/components/inputs/text-input" -import MemberInput from "openstack-uicore-foundation/lib/components/inputs/member-input" -import OperatorInput from "openstack-uicore-foundation/lib/components/inputs/operator-input" -import SpeakerInput from "openstack-uicore-foundation/lib/components/inputs/speaker-input" -import TagInput from "openstack-uicore-foundation/lib/components/inputs/tag-input" +import CompanyInput from "openstack-uicore-foundation/lib/components/inputs/company-input"; +import DateTimePicker from "openstack-uicore-foundation/lib/components/inputs/datetimepicker"; +import Dropdown from "openstack-uicore-foundation/lib/components/inputs/dropdown"; +import FreeTextSearch from "openstack-uicore-foundation/lib/components/free-text-search"; +import Input from "openstack-uicore-foundation/lib/components/inputs/text-input"; +import MemberInput from "openstack-uicore-foundation/lib/components/inputs/member-input"; +import OperatorInput from "openstack-uicore-foundation/lib/components/inputs/operator-input"; +import SpeakerInput from "openstack-uicore-foundation/lib/components/inputs/speaker-input"; +import TagInput from "openstack-uicore-foundation/lib/components/inputs/tag-input"; import UploadInput from "openstack-uicore-foundation/lib/components/inputs/upload-input"; import { SegmentedControl } from "segmented-control"; import { epochToMomentTimeZone } from "openstack-uicore-foundation/lib/utils/methods"; @@ -1583,11 +1583,6 @@ class SummitEventListPage extends React.Component { this.handleChangeDateFilter(ev, false)} value={epochToMomentTimeZone( @@ -1595,17 +1590,17 @@ class SummitEventListPage extends React.Component { currentSummit.time_zone_id )} className="event-list-date-picker" + inputProps={{ + placeholder: T.translate( + "event_list.placeholders.start_date_from" + ) + }} />
this.handleChangeDateFilter(ev, true)} value={epochToMomentTimeZone( @@ -1613,6 +1608,11 @@ class SummitEventListPage extends React.Component { currentSummit.time_zone_id )} className="event-list-date-picker" + inputProps={{ + placeholder: T.translate( + "event_list.placeholders.start_date_to" + ) + }} />
@@ -1623,11 +1623,6 @@ class SummitEventListPage extends React.Component { this.handleChangeDateFilter(ev, false)} value={epochToMomentTimeZone( @@ -1635,17 +1630,17 @@ class SummitEventListPage extends React.Component { currentSummit.time_zone_id )} className="event-list-date-picker" + inputProps={{ + placeholder: T.translate( + "event_list.placeholders.end_date_from" + ) + }} />
this.handleChangeDateFilter(ev, true)} value={epochToMomentTimeZone( @@ -1653,6 +1648,11 @@ class SummitEventListPage extends React.Component { currentSummit.time_zone_id )} className="event-list-date-picker" + inputProps={{ + placeholder: T.translate( + "event_list.placeholders.end_date_to" + ) + }} />
@@ -1663,11 +1663,6 @@ class SummitEventListPage extends React.Component { this.handleChangeDateFilter(ev, false)} value={epochToMomentTimeZone( @@ -1675,17 +1670,17 @@ class SummitEventListPage extends React.Component { currentSummit.time_zone_id )} className="event-list-date-picker" + inputProps={{ + placeholder: T.translate( + "event_list.placeholders.created_from" + ) + }} />
this.handleChangeDateFilter(ev, true)} value={epochToMomentTimeZone( @@ -1693,6 +1688,11 @@ class SummitEventListPage extends React.Component { currentSummit.time_zone_id )} className="event-list-date-picker" + inputProps={{ + placeholder: T.translate( + "event_list.placeholders.created_to" + ) + }} />
@@ -1703,11 +1703,6 @@ class SummitEventListPage extends React.Component { this.handleChangeDateFilter(ev, false)} value={epochToMomentTimeZone( @@ -1715,17 +1710,17 @@ class SummitEventListPage extends React.Component { currentSummit.time_zone_id )} className="event-list-date-picker" + inputProps={{ + placeholder: T.translate( + "event_list.placeholders.modified_from" + ) + }} />
this.handleChangeDateFilter(ev, true)} value={epochToMomentTimeZone( @@ -1733,6 +1728,11 @@ class SummitEventListPage extends React.Component { currentSummit.time_zone_id )} className="event-list-date-picker" + inputProps={{ + placeholder: T.translate( + "event_list.placeholders.modified_to" + ) + }} />
@@ -1922,9 +1922,7 @@ class SummitEventListPage extends React.Component { )} -
-
- {events.length === 0 && (
{T.translate("event_list.no_events")}
)} - {events.length > 0 && (
@@ -1976,7 +1972,6 @@ class SummitEventListPage extends React.Component { />
)} - this.setState({ showImportModal: false })} @@ -2047,7 +2042,6 @@ class SummitEventListPage extends React.Component { - this.setState({ showImportFromMUXModal: false })} diff --git a/src/pages/events/summit-presentations-votes-page.js b/src/pages/events/summit-presentations-votes-page.js index 93a567e21..ec708ecbe 100644 --- a/src/pages/events/summit-presentations-votes-page.js +++ b/src/pages/events/summit-presentations-votes-page.js @@ -1,4 +1,4 @@ -/** +/* * * Copyright 2022 OpenStack Foundation * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -9,24 +9,25 @@ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. - **/ + * */ import React from "react"; import { connect } from "react-redux"; import T from "i18n-react"; -import DateTimePicker from "openstack-uicore-foundation/lib/components/inputs/datetimepicker" -import Dropdown from "openstack-uicore-foundation/lib/components/inputs/dropdown" -import FreeTextSearch from "openstack-uicore-foundation/lib/components/free-text-search" +import DateTimePicker from "openstack-uicore-foundation/lib/components/inputs/datetimepicker"; +import Dropdown from "openstack-uicore-foundation/lib/components/inputs/dropdown"; +import FreeTextSearch from "openstack-uicore-foundation/lib/components/free-text-search"; import Table from "openstack-uicore-foundation/lib/components/table"; import { Pagination } from "react-bootstrap"; +import { Breadcrumb } from "react-breadcrumbs"; +import { escapeFilterValue } from "openstack-uicore-foundation/lib/utils/actions"; +import { epochToMomentTimeZone } from "openstack-uicore-foundation/lib/utils/methods"; import { clearVotesReport, getPresentationsVotes, getAttendeeVotes } from "../../actions/presentation-votes-actions"; -import { Breadcrumb } from "react-breadcrumbs"; -import { epochToMomentTimeZone } from "openstack-uicore-foundation/lib/utils/methods"; -import { escapeFilterValue } from "openstack-uicore-foundation/lib/utils/actions"; +import { DEFAULT_PER_PAGE } from "../../utils/constants"; class SummitPresentationsVotesPage extends React.Component { constructor(props) { @@ -53,12 +54,12 @@ class SummitPresentationsVotesPage extends React.Component { } getCurrentTrackGroupId(reportType) { - let parts = reportType.split("_"); + const parts = reportType.split("_"); return parts.length > 1 ? parseInt(parts[1]) : 0; } isReportByPresentation(reportType) { - let parts = reportType.split("_"); + const parts = reportType.split("_"); return parts[0] === "PRESENTATION"; } @@ -68,7 +69,7 @@ class SummitPresentationsVotesPage extends React.Component { end_presentation_attendee_vote_date, term } = this.state; - let filters = []; + const filters = []; if (term !== "") { const escapedTerm = escapeFilterValue(term); if (this.isReportByPresentation(reportType)) @@ -114,15 +115,27 @@ class SummitPresentationsVotesPage extends React.Component { } handleChangeReportType(ev) { - const { value, id } = ev.target; + const { value } = ev.target; this.props.clearVotesReport(); this.setState({ ...this.state, current_report_type: value }); - let filters = this.buildExtraFilters(value); + const filters = this.buildExtraFilters(value); if (this.isReportByPresentation(value)) { - this.props.getPresentationsVotes(1, 10, "votes_count", 0, filters); + this.props.getPresentationsVotes( + 1, + DEFAULT_PER_PAGE, + "votes_count", + 0, + filters + ); return; } - this.props.getAttendeeVotes(1, 10, "presentation_votes_count", 0, filters); + this.props.getAttendeeVotes( + 1, + DEFAULT_PER_PAGE, + "presentation_votes_count", + 0, + filters + ); } handlePageChange(page) { @@ -142,7 +155,7 @@ class SummitPresentationsVotesPage extends React.Component { ); } - handleSort(index, key, dir, func) { + handleSort(index, key, dir) { const { page, perPage } = this.props; const { current_report_type } = this.state; const filters = this.buildExtraFilters(current_report_type); @@ -187,7 +200,7 @@ class SummitPresentationsVotesPage extends React.Component { } errors[id] = ""; - let newState = { ...this.state, errors }; + const newState = { ...this.state, errors }; newState[`${id}`] = value; @@ -197,15 +210,21 @@ class SummitPresentationsVotesPage extends React.Component { handleSearch(term) { const { order, orderDir } = this.props; const { current_report_type } = this.state; - this.setState({ ...this.state, term: term }, () => { + this.setState({ ...this.state, term }, () => { const filters = this.buildExtraFilters(current_report_type); if (this.isReportByPresentation(current_report_type)) { - this.props.getPresentationsVotes(1, 10, order, orderDir, filters); + this.props.getPresentationsVotes( + 1, + DEFAULT_PER_PAGE, + order, + orderDir, + filters + ); return; } this.props.getAttendeeVotes( 1, - 10, + DEFAULT_PER_PAGE, order === "votes_count" ? "presentation_votes_count" : order, orderDir, filters @@ -231,7 +250,7 @@ class SummitPresentationsVotesPage extends React.Component { current_report_type } = this.state; - let columns = this.isReportByPresentation(current_report_type) + const columns = this.isReportByPresentation(current_report_type) ? [ { columnKey: "id", value: T.translate("general.id"), sortable: true }, { @@ -271,15 +290,15 @@ class SummitPresentationsVotesPage extends React.Component { }; if (!currentSummit.id) return
; - let byPresentationOptions = currentSummit.track_groups.map((tg) => ({ + const byPresentationOptions = currentSummit.track_groups.map((tg) => ({ label: `View by Presentation for ${tg.name}`, value: `PRESENTATION_${tg.id}` })); - let byAttendeeOptions = currentSummit.track_groups.map((tg) => ({ + const byAttendeeOptions = currentSummit.track_groups.map((tg) => ({ label: `View by Attendee for ${tg.name}`, value: `ATTENDEE_${tg.id}` })); - let reportTypeDDL = [ + const reportTypeDDL = [ { label: "-- SELECT A REPORT TYPE --", value: "" }, ...byPresentationOptions, ...byAttendeeOptions @@ -303,8 +322,8 @@ class SummitPresentationsVotesPage extends React.Component { : T.translate("presentation_votes_page.attendees_vote_list")}{" "} ({totalItems}) -
-
+
+
-
+
-
-
-
-
+
+
+
+
-
+
-
+
-
+
{ autoComplete="off" > - - + + {T.translate("media_file_type.name")} * @@ -109,8 +109,8 @@ const MediaFileTypeDialog = ({ entity: initialEntity, onClose, onSave }) => { fullWidth required /> - - + + {T.translate("media_file_type.description")} @@ -123,8 +123,8 @@ const MediaFileTypeDialog = ({ entity: initialEntity, onClose, onSave }) => { multiline rows={3} /> - - + + {T.translate("media_file_type.allowed_extensions_input")} @@ -137,8 +137,8 @@ const MediaFileTypeDialog = ({ entity: initialEntity, onClose, onSave }) => { multiline rows={2} /> - - + + diff --git a/src/pages/media_file_types/media-file-type-list-page.js b/src/pages/media_file_types/media-file-type-list-page.js index d8e90ae8e..81fa30f10 100644 --- a/src/pages/media_file_types/media-file-type-list-page.js +++ b/src/pages/media_file_types/media-file-type-list-page.js @@ -14,7 +14,7 @@ import React, { useEffect, useState } from "react"; import { connect } from "react-redux"; import T from "i18n-react/dist/i18n-react"; -import { Box, Button, Grid2 } from "@mui/material"; +import { Box, Button, Grid } from "@mui/material"; import AddIcon from "@mui/icons-material/Add"; import MuiTable from "openstack-uicore-foundation/lib/components/mui/table"; import SearchInput from "openstack-uicore-foundation/lib/components/mui/search-input"; @@ -85,7 +85,8 @@ const MediaFileTypeListPage = ({ setOpen(false); }; - const handleSave = (entity) => saveMediaFileType(entity) + const handleSave = (entity) => + saveMediaFileType(entity) .then(() => getMediaFileTypes(term, DEFAULT_CURRENT_PAGE, perPage, order, orderDir) ) @@ -124,7 +125,7 @@ const MediaFileTypeListPage = ({ return (

{T.translate("media_file_type.media_file_type_list")}

- - + {totalMediaFileTypes}{" "} {T.translate("media_file_type.media_file_types")} - - + - + - + - - + + {media_file_types.length > 0 && ( this.handleChangeDateFilter(ev, false)} value={epochToMomentTimeZone( @@ -435,17 +430,17 @@ class PurchaseOrderListPage extends React.Component { currentSummit.time_zone_id )} className="event-list-date-picker" + inputProps={{ + placeholder: T.translate( + "purchase_order_list.placeholders.purchased_from" + ) + }} />
this.handleChangeDateFilter(ev, true)} value={epochToMomentTimeZone( @@ -453,6 +448,11 @@ class PurchaseOrderListPage extends React.Component { currentSummit.time_zone_id )} className="event-list-date-picker" + inputProps={{ + placeholder: T.translate( + "purchase_order_list.placeholders.purchased_to" + ) + }} />
@@ -473,11 +473,9 @@ class PurchaseOrderListPage extends React.Component {
)}
- {purchaseOrders.length === 0 && (
{T.translate("purchase_order_list.no_orders")}
)} - {purchaseOrders.length > 0 && (
{ + const onSort = (index, key, dir) => { if (view === "activities") { getEvents(null, null, null, key, dir); } else if (view === "banners") { @@ -219,7 +219,7 @@ const SignagePage = ({ onClick={viewSign} disabled={!sign?.template} > - {T.translate(`signage.view_sign`)} + {T.translate("signage.view_sign")} @@ -230,13 +230,13 @@ const SignagePage = ({ setJumpDate(ev.target.value.unix())} value={epochToMomentTimeZone(jumpDate, summit.time_zone_id)} disabled={!locationId} + inputProps={{ + placeholder: T.translate("signage.placeholders.date") + }} /> @@ -267,7 +267,7 @@ const SignagePage = ({ onClick={saveStaticBanner} disabled={!locationId} > - {T.translate(`signage.set`)} + {T.translate("signage.set")} @@ -279,7 +279,7 @@ const SignagePage = ({ onClick={reloadSign} disabled={!locationId} > - {T.translate(`signage.reload_sign`)} + {T.translate("signage.reload_sign")} @@ -297,10 +297,10 @@ const SignagePage = ({ onChange={setView} > - {T.translate(`signage.activities`)} + {T.translate("signage.activities")} - {T.translate(`signage.banners`)} + {T.translate("signage.banners")} diff --git a/src/pages/speakers/summit-speakers-list-page.js b/src/pages/speakers/summit-speakers-list-page.js index b63806699..d4e77e6a2 100644 --- a/src/pages/speakers/summit-speakers-list-page.js +++ b/src/pages/speakers/summit-speakers-list-page.js @@ -14,7 +14,7 @@ import React, { useEffect } from "react"; import { connect } from "react-redux"; import T from "i18n-react/dist/i18n-react"; -import { Box, Button, Grid2 } from "@mui/material"; +import { Box, Button, Grid } from "@mui/material"; import AddIcon from "@mui/icons-material/Add"; import MuiTable from "openstack-uicore-foundation/lib/components/mui/table"; import SearchInput from "openstack-uicore-foundation/lib/components/mui/search-input"; @@ -91,7 +91,7 @@ const SummitSpeakerListPage = ({ return (

{T.translate("speaker_list.speaker_list")}

- - + {totalSpeakers} {T.translate("speaker_list.speakers")} - - + - + - + {memberObj.canAddSpeakers() && ( - - - + + + {formTemplateItems.length > 0 && (
diff --git a/src/pages/sponsors-global/form-templates/form-template-list-page.js b/src/pages/sponsors-global/form-templates/form-template-list-page.js index 0d7fef187..6583449e7 100644 --- a/src/pages/sponsors-global/form-templates/form-template-list-page.js +++ b/src/pages/sponsors-global/form-templates/form-template-list-page.js @@ -18,7 +18,7 @@ import { Checkbox, FormControlLabel, FormGroup, - Grid2 + Grid } from "@mui/material"; import Box from "@mui/material/Box"; import AddIcon from "@mui/icons-material/Add"; @@ -242,7 +242,7 @@ const FormTemplateListPage = ({ {T.translate("form_template_list.alert_info")} - - + {totalFormTemplates} forms - - + + - + - + - - + + {formTemplates.length > 0 && (
diff --git a/src/pages/sponsors-global/form-templates/form-template-popup.js b/src/pages/sponsors-global/form-templates/form-template-popup.js index baef4dfdc..91e603ec4 100644 --- a/src/pages/sponsors-global/form-templates/form-template-popup.js +++ b/src/pages/sponsors-global/form-templates/form-template-popup.js @@ -11,7 +11,7 @@ import { Box, IconButton, Divider, - Grid2 + Grid } from "@mui/material"; import CloseIcon from "@mui/icons-material/Close"; import { useFormik, FormikProvider } from "formik"; @@ -126,8 +126,8 @@ const FormTemplateDialog = ({ autoComplete="off" > - - + + {T.translate("edit_form_template.code")} * @@ -137,8 +137,8 @@ const FormTemplateDialog = ({ formik={formik} fullWidth /> - - + + {T.translate("edit_form_template.name")} * @@ -148,11 +148,11 @@ const FormTemplateDialog = ({ formik={formik} fullWidth /> - - + + - - + + {T.translate("edit_form_template.instructions")} * @@ -160,8 +160,8 @@ const FormTemplateDialog = ({ name="instructions" options={{ zIndex: 9999999 }} /> - - + + diff --git a/src/pages/sponsors-global/form-templates/sponsor-inventory-popup.js b/src/pages/sponsors-global/form-templates/sponsor-inventory-popup.js index ed5e0640b..69d137d71 100644 --- a/src/pages/sponsors-global/form-templates/sponsor-inventory-popup.js +++ b/src/pages/sponsors-global/form-templates/sponsor-inventory-popup.js @@ -14,7 +14,7 @@ import { Box, IconButton, Divider, - Grid2, + Grid, FormHelperText } from "@mui/material"; import CloseIcon from "@mui/icons-material/Close"; @@ -110,8 +110,8 @@ const SponsorItemDialog = ({ autoComplete="off" > - - + + {T.translate("edit_inventory_item.code")} * @@ -121,8 +121,8 @@ const SponsorItemDialog = ({ formik={formik} fullWidth /> - - + + {T.translate("edit_inventory_item.name")} * @@ -132,11 +132,11 @@ const SponsorItemDialog = ({ formik={formik} fullWidth /> - - + + - - + + {T.translate("edit_inventory_item.description")} @@ -144,17 +144,17 @@ const SponsorItemDialog = ({ name="description" options={{ zIndex: 9999999 }} /> - - + + - + - + - - + + {T.translate("edit_inventory_item.default_quantity")} @@ -164,8 +164,8 @@ const SponsorItemDialog = ({ formik={formik} fullWidth /> - - + + {T.translate( "edit_inventory_item.quantity_limit_per_sponsor" @@ -177,8 +177,8 @@ const SponsorItemDialog = ({ formik={formik} fullWidth /> - - + + {T.translate("edit_inventory_item.quantity_limit_per_show")} @@ -188,8 +188,8 @@ const SponsorItemDialog = ({ formik={formik} fullWidth /> - - + + @@ -204,12 +204,12 @@ const SponsorItemDialog = ({ /> - - + {T.translate("edit_inventory_item.images")} @@ -222,8 +222,8 @@ const SponsorItemDialog = ({ maxFiles={mediaType.max_uploads_qty} allowedExtensions={getFileUploadAllowedExtensions()} /> - - + + diff --git a/src/pages/sponsors-global/inventory/inventory-list-page.js b/src/pages/sponsors-global/inventory/inventory-list-page.js index b6e0d072f..832a713bf 100644 --- a/src/pages/sponsors-global/inventory/inventory-list-page.js +++ b/src/pages/sponsors-global/inventory/inventory-list-page.js @@ -18,7 +18,7 @@ import { Checkbox, FormControlLabel, FormGroup, - Grid2, + Grid, Popover, Typography } from "@mui/material"; @@ -315,7 +315,7 @@ const InventoryListPage = ({ > {T.translate("inventory_item_list.alert_info")} - - + {totalInventoryItems} items - - + - + - + - - + + {inventoryItems.length > 0 && (
diff --git a/src/pages/sponsors-global/page-templates/page-template-list-page.js b/src/pages/sponsors-global/page-templates/page-template-list-page.js index 0b4b05d21..5ae4ceddf 100644 --- a/src/pages/sponsors-global/page-templates/page-template-list-page.js +++ b/src/pages/sponsors-global/page-templates/page-template-list-page.js @@ -18,7 +18,7 @@ import { Checkbox, FormControlLabel, FormGroup, - Grid2 + Grid } from "@mui/material"; import Box from "@mui/material/Box"; import AddIcon from "@mui/icons-material/Add"; @@ -195,7 +195,7 @@ const PageTemplateListPage = ({ {T.translate("page_template_list.alert_info")} - - + {totalPageTemplates} pages - - + - + - + - - + + {pageTemplates.length === 0 && ( diff --git a/src/pages/sponsors-global/page-templates/page-template-popup/index.js b/src/pages/sponsors-global/page-templates/page-template-popup/index.js index 91a7b2068..502b11079 100644 --- a/src/pages/sponsors-global/page-templates/page-template-popup/index.js +++ b/src/pages/sponsors-global/page-templates/page-template-popup/index.js @@ -11,7 +11,7 @@ import { Divider, FormControl, FormHelperText, - Grid2, + Grid, IconButton, Typography } from "@mui/material"; @@ -196,15 +196,15 @@ const PageTemplatePopup = ({ autoComplete="off" > - - + + - - + - + {showSponsorships && ( - + )} - + )} {showAllowedAddons && ( - + - + )} - + - - + + - - + + - - + + - - + + diff --git a/src/pages/sponsors-global/page-templates/page-template-popup/modules/page-template-document-download-module.js b/src/pages/sponsors-global/page-templates/page-template-popup/modules/page-template-document-download-module.js index 64945f2be..9bd804db1 100644 --- a/src/pages/sponsors-global/page-templates/page-template-popup/modules/page-template-document-download-module.js +++ b/src/pages/sponsors-global/page-templates/page-template-popup/modules/page-template-document-download-module.js @@ -2,7 +2,7 @@ import React from "react"; import PropTypes from "prop-types"; import T from "i18n-react/dist/i18n-react"; import { useField } from "formik"; -import { Divider, Grid2, InputLabel } from "@mui/material"; +import { Divider, Grid, InputLabel } from "@mui/material"; import MuiFormikUpload from "openstack-uicore-foundation/lib/components/mui/formik-inputs/upload"; import MuiFormikTextField from "../../../../../components/mui/formik-inputs/mui-formik-textfield"; import { PAGE_MODULES_DOWNLOAD } from "../../../../../utils/constants"; @@ -27,21 +27,21 @@ const DocumentDownloadModule = ({ baseName, index }) => { ]; return ( - + {T.translate("page_template_list.page_crud.document_name")} - + - + {T.translate("page_template_list.page_crud.description")} - + { rows={2} margin="none" /> - - + + - - + + - + {downloadTypeVal === PAGE_MODULES_DOWNLOAD.URL && ( - + {T.translate("page_template_list.page_crud.external_url")} @@ -72,19 +72,19 @@ const DocumentDownloadModule = ({ baseName, index }) => { fullWidth margin="none" /> - + )} {downloadTypeVal === PAGE_MODULES_DOWNLOAD.FILE && ( - + - + )} - + ); }; diff --git a/src/pages/sponsors-global/page-templates/page-template-popup/modules/page-template-info-module.js b/src/pages/sponsors-global/page-templates/page-template-popup/modules/page-template-info-module.js index 175d4e878..9eccd0205 100644 --- a/src/pages/sponsors-global/page-templates/page-template-popup/modules/page-template-info-module.js +++ b/src/pages/sponsors-global/page-templates/page-template-popup/modules/page-template-info-module.js @@ -1,7 +1,7 @@ import React from "react"; import PropTypes from "prop-types"; import T from "i18n-react/dist/i18n-react"; -import { Grid2, Box, InputLabel } from "@mui/material"; +import { Grid, Box, InputLabel } from "@mui/material"; import FormikTextEditor from "../../../../../components/inputs/formik-text-editor"; @@ -9,16 +9,16 @@ const InfoModule = ({ baseName, index }) => { const name = `${baseName}[${index}].content`; return ( - + {T.translate("page_template_list.page_crud.info_content")} - + - - + + ); }; diff --git a/src/pages/sponsors-global/page-templates/page-template-popup/modules/page-template-media-request-module.js b/src/pages/sponsors-global/page-templates/page-template-popup/modules/page-template-media-request-module.js index 72f11853e..7032c86f6 100644 --- a/src/pages/sponsors-global/page-templates/page-template-popup/modules/page-template-media-request-module.js +++ b/src/pages/sponsors-global/page-templates/page-template-popup/modules/page-template-media-request-module.js @@ -3,7 +3,7 @@ import PropTypes from "prop-types"; import T from "i18n-react/dist/i18n-react"; import { connect } from "react-redux"; import { getIn, useFormikContext } from "formik"; -import { Divider, Grid2, InputLabel, MenuItem } from "@mui/material"; +import { Divider, Grid, InputLabel, MenuItem } from "@mui/material"; import MuiFormikDatepicker from "openstack-uicore-foundation/lib/components/mui/formik-inputs/datepicker"; import MuiFormikTextField from "../../../../../components/mui/formik-inputs/mui-formik-textfield"; import MuiFormikRadioGroup from "../../../../../components/mui/formik-inputs/mui-formik-radio-group"; @@ -35,19 +35,19 @@ const MediaRequestModule = ({ baseName, index, mediaFileTypes }) => { })); return ( - - + + - - + + - - + + {T.translate("page_template_list.page_crud.name")} @@ -56,8 +56,8 @@ const MediaRequestModule = ({ baseName, index, mediaFileTypes }) => { fullWidth margin="none" /> - - + + {T.translate("page_template_list.page_crud.upload_deadline")} @@ -65,11 +65,11 @@ const MediaRequestModule = ({ baseName, index, mediaFileTypes }) => { name={buildFieldName("upload_deadline")} margin="none" /> - + {mediaType === PAGE_MODULES_MEDIA_TYPES.FILE && ( <> - + {T.translate("page_template_list.page_crud.max_file_size")} @@ -78,8 +78,8 @@ const MediaRequestModule = ({ baseName, index, mediaFileTypes }) => { margin="none" fullWidth /> - - + + {T.translate("page_template_list.page_crud.allowed_formats")} @@ -107,11 +107,11 @@ const MediaRequestModule = ({ baseName, index, mediaFileTypes }) => { ))} - + )} - + {T.translate("page_template_list.page_crud.description")} @@ -122,8 +122,8 @@ const MediaRequestModule = ({ baseName, index, mediaFileTypes }) => { margin="none" rows={2} /> - - + + ); }; diff --git a/src/pages/sponsors/popup/add-sponsor-popup.js b/src/pages/sponsors/popup/add-sponsor-popup.js index e44b14512..0a7a399f9 100644 --- a/src/pages/sponsors/popup/add-sponsor-popup.js +++ b/src/pages/sponsors/popup/add-sponsor-popup.js @@ -11,7 +11,7 @@ import { Button, IconButton, Divider, - Grid2, + Grid, Typography, InputLabel, Box @@ -88,8 +88,8 @@ const AddSponsorDialog = ({ open, onClose, onSubmit, summitId }) => { autoComplete="off" > - - + { )} /> - - + { isMulti placeholder={T.translate("sponsor_list.placeholders.select")} /> - - + + diff --git a/src/pages/sponsors/popup/edit-tier-popup.js b/src/pages/sponsors/popup/edit-tier-popup.js index 48eb28c22..6a7132d6e 100644 --- a/src/pages/sponsors/popup/edit-tier-popup.js +++ b/src/pages/sponsors/popup/edit-tier-popup.js @@ -11,7 +11,7 @@ import { Button, IconButton, Divider, - Grid2, + Grid, Typography, MenuItem, InputLabel, @@ -143,14 +143,14 @@ const EditTierDialog = ({ autoComplete="off" > - - + - - - + - - - + + - ))} - - + ))} - - - + + - ))} - - + ))} - - - + + - - - + - - + - - - + + - - - + - - + - - - + + + {initialEntity.id > 0 && ( <> - - + - - + + {T.translate("edit_summit_sponsorship.badge_alt")} @@ -505,8 +505,8 @@ const EditTierDialog = ({ margin="none" fullWidth /> - - + + )} diff --git a/src/pages/sponsors/show-pages-list-page/index.js b/src/pages/sponsors/show-pages-list-page/index.js index 450652e90..3e005efe3 100644 --- a/src/pages/sponsors/show-pages-list-page/index.js +++ b/src/pages/sponsors/show-pages-list-page/index.js @@ -21,7 +21,7 @@ import { Checkbox, FormControlLabel, FormGroup, - Grid2 + Grid } from "@mui/material"; import AddIcon from "@mui/icons-material/Add"; import MuiTable from "openstack-uicore-foundation/lib/components/mui/table"; @@ -191,7 +191,7 @@ const ShowPagesListPage = ({

{T.translate("show_pages.pages")}

- - + {totalCount} {T.translate("show_pages.pages")} - - + + - - + + - - + + - - + + - - + + {showPages.length === 0 && (
{T.translate("show_pages.no_sponsors_pages")}
diff --git a/src/pages/sponsors/show-purchase-list-page/index.js b/src/pages/sponsors/show-purchase-list-page/index.js index 52538e8af..c89f11d54 100644 --- a/src/pages/sponsors/show-purchase-list-page/index.js +++ b/src/pages/sponsors/show-purchase-list-page/index.js @@ -15,14 +15,7 @@ import React, { useEffect } from "react"; import { connect } from "react-redux"; import T from "i18n-react/dist/i18n-react"; import { Breadcrumb } from "react-breadcrumbs"; -import { - Box, - Button, - Grid2, - IconButton, - MenuItem, - Select -} from "@mui/material"; +import { Box, Button, Grid, IconButton, MenuItem, Select } from "@mui/material"; import MenuIcon from "@mui/icons-material/Menu"; import MuiTable from "openstack-uicore-foundation/lib/components/mui/table"; import SearchInput from "openstack-uicore-foundation/lib/components/mui/search-input"; @@ -203,7 +196,7 @@ const ShowPurchaseListPage = ({ />

{T.translate("sponsor_show_purchases.purchases")}

- - + {totalCount}{" "} {T.translate("sponsor_show_purchases.purchases").toLowerCase()} - - + + - - + + - - + +
- - + {selectedRows.length} items selected - - + + - - + + {items.length > 0 && (
{ autoComplete="off" > - - + + - - + + - - + + {T.translate("sponsor_form_item_list.edit_item.description")} @@ -91,9 +91,9 @@ const SponsorFormItemForm = ({ initialValues, onSubmit }) => { name="description" options={{ zIndex: 9999999 }} /> - + - + { type="number" inputProps={{ min: 0 }} /> - - + + { type="number" inputProps={{ min: 0 }} /> - - + + { inputProps={{ min: 0 }} required /> - - - + + + {T.translate( @@ -137,8 +137,8 @@ const SponsorFormItemForm = ({ initialValues, onSubmit }) => { - - + + {T.translate("sponsor_form_item_list.edit_item.images")} @@ -150,7 +150,7 @@ const SponsorFormItemForm = ({ initialValues, onSubmit }) => { allowedExtensions={getFileUploadAllowedExtensions()} /> - + diff --git a/src/pages/sponsors/sponsor-form-item-list-page/index.js b/src/pages/sponsors/sponsor-form-item-list-page/index.js index b8b2822a0..4035e1fb7 100644 --- a/src/pages/sponsors/sponsor-form-item-list-page/index.js +++ b/src/pages/sponsors/sponsor-form-item-list-page/index.js @@ -22,7 +22,7 @@ import { Checkbox, FormControlLabel, FormGroup, - Grid2 + Grid } from "@mui/material"; import AddIcon from "@mui/icons-material/Add"; import IconButton from "@mui/material/IconButton"; @@ -231,7 +231,7 @@ const SponsorFormItemListPage = ({ > {T.translate("sponsor_form_item_list.alert_info")} - - + {totalCount} items - - + {T.translate("sponsor_form_item_list.add_item_from_inventory")} - - + + {items.length > 0 && (
diff --git a/src/pages/sponsors/sponsor-forms-list-page/components/form-template/__tests__/form-template-popup.test.js b/src/pages/sponsors/sponsor-forms-list-page/components/form-template/__tests__/form-template-popup.test.js index 71c4e2aa5..a5203a9db 100644 --- a/src/pages/sponsors/sponsor-forms-list-page/components/form-template/__tests__/form-template-popup.test.js +++ b/src/pages/sponsors/sponsor-forms-list-page/components/form-template/__tests__/form-template-popup.test.js @@ -81,10 +81,10 @@ describe("FormTemplatePopup", () => { const button = screen.getByRole("button", { name: "submit-form-template" }); - await act(async () => { - await userEvent.click(button); - await userEvent.click(button); - }); + // React 18 auto-batches state updates; remove outer act() so each click + // flushes isSaving before the next click is processed. + await userEvent.click(button); + await userEvent.click(button); expect(saveFormTemplate).toHaveBeenCalledTimes(1); diff --git a/src/pages/sponsors/sponsor-forms-list-page/components/form-template/form-template-form.js b/src/pages/sponsors/sponsor-forms-list-page/components/form-template/form-template-form.js index efdcc2ba7..6ef60d305 100644 --- a/src/pages/sponsors/sponsor-forms-list-page/components/form-template/form-template-form.js +++ b/src/pages/sponsors/sponsor-forms-list-page/components/form-template/form-template-form.js @@ -5,7 +5,7 @@ import { DialogActions, DialogContent, Divider, - Grid2, + Grid, InputLabel, Typography } from "@mui/material"; @@ -83,23 +83,23 @@ const FormTemplateForm = ({ autoComplete="off" > - - + + - - + + - - + + - - + + - - + + - - + + {T.translate("sponsor_forms.form_template_popup.instructions")}{" "} * @@ -140,8 +140,8 @@ const FormTemplateForm = ({ name="instructions" options={{ zIndex: 9999999 }} /> - - + + {T.translate("sponsor_forms.form_template_popup.additional_fields")} diff --git a/src/pages/sponsors/sponsor-forms-list-page/components/global-template/__tests__/global-template-popup.test.js b/src/pages/sponsors/sponsor-forms-list-page/components/global-template/__tests__/global-template-popup.test.js index 4d043adbf..b03c0c5be 100644 --- a/src/pages/sponsors/sponsor-forms-list-page/components/global-template/__tests__/global-template-popup.test.js +++ b/src/pages/sponsors/sponsor-forms-list-page/components/global-template/__tests__/global-template-popup.test.js @@ -65,15 +65,14 @@ describe("GlobalTemplatePopup", () => { initialState: {} }); - await act(async () => { - await userEvent.click( - screen.getByRole("button", { name: "go-sponsorships" }) - ); - await userEvent.click( - screen.getByRole("button", { name: "apply-sponsorships" }) - ); - await Promise.resolve(); - }); + // React 18 auto-batches state updates; remove outer act() so setStage() + // flushes before the second click queries the DOM for apply-sponsorships. + await userEvent.click( + screen.getByRole("button", { name: "go-sponsorships" }) + ); + await userEvent.click( + screen.getByRole("button", { name: "apply-sponsorships" }) + ); expect(cloneGlobalTemplate).toHaveBeenCalledTimes(1); expect(onClose).not.toHaveBeenCalled(); @@ -129,10 +128,10 @@ describe("GlobalTemplatePopup", () => { const applyButton = screen.getByRole("button", { name: "apply-sponsorships" }); - await act(async () => { - await userEvent.click(applyButton); - await userEvent.click(applyButton); - }); + // React 18 auto-batches state updates; remove outer act() so isSaving + // flushes to true after the first click before the second fires. + await userEvent.click(applyButton); + await userEvent.click(applyButton); expect(cloneGlobalTemplate).toHaveBeenCalledTimes(1); diff --git a/src/pages/sponsors/sponsor-forms-list-page/components/global-template/select-templates-dialog.js b/src/pages/sponsors/sponsor-forms-list-page/components/global-template/select-templates-dialog.js index 88fa8f07e..958dcaf71 100644 --- a/src/pages/sponsors/sponsor-forms-list-page/components/global-template/select-templates-dialog.js +++ b/src/pages/sponsors/sponsor-forms-list-page/components/global-template/select-templates-dialog.js @@ -11,7 +11,7 @@ import { DialogTitle, Divider, FormControlLabel, - Grid2, + Grid, IconButton, Typography } from "@mui/material"; @@ -121,18 +121,18 @@ const SelectTemplatesDialog = ({ - - + + {selectedRows.length} items selected - - + + - - + + {items.length > 0 && ( diff --git a/src/pages/sponsors/sponsor-forms-list-page/index.js b/src/pages/sponsors/sponsor-forms-list-page/index.js index ef6fa7471..b260729f2 100644 --- a/src/pages/sponsors/sponsor-forms-list-page/index.js +++ b/src/pages/sponsors/sponsor-forms-list-page/index.js @@ -21,7 +21,7 @@ import { Checkbox, FormControlLabel, FormGroup, - Grid2 + Grid } from "@mui/material"; import AddIcon from "@mui/icons-material/Add"; import MuiDropdownCheckbox from "openstack-uicore-foundation/lib/components/mui/dropdown-checkbox"; @@ -347,7 +347,7 @@ const SponsorFormsListPage = ({

{T.translate("sponsor_forms.forms")}

- - + {totalCount} forms - - + + - - + + - - + + - - + + - - + + {sponsorForms.length > 0 && (
diff --git a/src/pages/sponsors/sponsor-list-page.js b/src/pages/sponsors/sponsor-list-page.js index 15e20d6a4..9829b6b19 100644 --- a/src/pages/sponsors/sponsor-list-page.js +++ b/src/pages/sponsors/sponsor-list-page.js @@ -14,7 +14,7 @@ import React, { useEffect, useState } from "react"; import { connect } from "react-redux"; import T from "i18n-react/dist/i18n-react"; -import { Button, Grid2, Typography, Badge, Tooltip } from "@mui/material"; +import { Button, Grid, Typography, Badge, Tooltip } from "@mui/material"; import Box from "@mui/material/Box"; import AddIcon from "@mui/icons-material/Add"; import MuiTable from "openstack-uicore-foundation/lib/components/mui/table"; @@ -200,7 +200,7 @@ const SponsorListPage = ({

{T.translate("sponsor_list.sponsor_list")}

- - + {totalSponsors} sponsors - - + - - + + - - + + {canAddSponsors && ( - - + + {badgeScans.length > 0 && (
diff --git a/src/pages/sponsors/sponsor-page/tabs/sponsor-cart-tab/components/cart-view.js b/src/pages/sponsors/sponsor-page/tabs/sponsor-cart-tab/components/cart-view.js index b7934a3a8..c21c4fc6b 100644 --- a/src/pages/sponsors/sponsor-page/tabs/sponsor-cart-tab/components/cart-view.js +++ b/src/pages/sponsors/sponsor-page/tabs/sponsor-cart-tab/components/cart-view.js @@ -17,7 +17,7 @@ import { connect } from "react-redux"; import { Box, Button, - Grid2, + Grid, IconButton, Paper, Typography @@ -190,7 +190,7 @@ const CartView = ({ return ( <> - - + {cart && ( {cart?.forms.length} forms in Cart )} - - + + - - + + - - + + {!cart && ( {T.translate("edit_sponsor.cart_tab.no_cart")} 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 8b4631380..f3c99bcf9 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 @@ -11,7 +11,7 @@ import { DialogTitle, Divider, FormControlLabel, - Grid2, + Grid, IconButton, Radio, Typography @@ -124,7 +124,7 @@ const SelectFormDialog = ({ - + - - - + + + {selectedRows.length} items selected - - + + - - + + {forms.length === 0 && ( {T.translate("edit_sponsor.cart_tab.edit_form.no_forms_found")} diff --git a/src/pages/sponsors/sponsor-page/tabs/sponsor-forms-tab/components/add-sponsor-form-template-popup/index.js b/src/pages/sponsors/sponsor-page/tabs/sponsor-forms-tab/components/add-sponsor-form-template-popup/index.js index 33b40332e..29bf40a8b 100644 --- a/src/pages/sponsors/sponsor-page/tabs/sponsor-forms-tab/components/add-sponsor-form-template-popup/index.js +++ b/src/pages/sponsors/sponsor-page/tabs/sponsor-forms-tab/components/add-sponsor-form-template-popup/index.js @@ -12,7 +12,7 @@ import { DialogTitle, Divider, FormControlLabel, - Grid2, + Grid, IconButton, Typography } from "@mui/material"; @@ -203,7 +203,7 @@ const AddSponsorFormTemplatePopup = ({ autoComplete="off" > - + - - - + + - {selectedForms.length} items selected - - - + {selectedForms.length} items selected + + + {" "} {T.translate("general.sort_by")} - - + + - - - + + + {Array.isArray(sponsorForms) && sponsorForms.length > 0 && ( { const button = screen.getByRole("button", { name: "submit-customized-form" }); - await act(async () => { - await userEvent.click(button); - await userEvent.click(button); - }); + // React 18 auto-batches state updates; remove outer act() so each click + // flushes isSaving before the next click is processed. + await userEvent.click(button); + await userEvent.click(button); expect(saveSponsorCustomizedForm).toHaveBeenCalledTimes(1); 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 d166cd11e..702354001 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 @@ -5,7 +5,7 @@ import { DialogActions, DialogContent, Divider, - Grid2, + Grid, InputLabel, Typography } from "@mui/material"; @@ -116,8 +116,8 @@ const CustomizedForm = ({ autoComplete="off" > - - + + - - + + - - + + - - + + - - + + - - + + {T.translate( "edit_sponsor.forms_tab.customized_form.instructions" @@ -177,8 +177,8 @@ const CustomizedForm = ({ * - - + + {T.translate( "edit_sponsor.forms_tab.customized_form.additional_fields" diff --git a/src/pages/sponsors/sponsor-page/tabs/sponsor-forms-tab/components/manage-items/sponsor-form-item-from-inventory.js b/src/pages/sponsors/sponsor-page/tabs/sponsor-forms-tab/components/manage-items/sponsor-form-item-from-inventory.js index ddeb525d5..b87cca02a 100644 --- a/src/pages/sponsors/sponsor-page/tabs/sponsor-forms-tab/components/manage-items/sponsor-form-item-from-inventory.js +++ b/src/pages/sponsors/sponsor-page/tabs/sponsor-forms-tab/components/manage-items/sponsor-form-item-from-inventory.js @@ -12,7 +12,7 @@ import { DialogTitle, Divider, FormControlLabel, - Grid2, + Grid, IconButton, Tooltip, Typography @@ -195,12 +195,12 @@ const SponsorFormItemFromInventoryPopup = ({ - - + + {selectedRows.length} items selected - - - + + + {" "} {T.translate("general.sort_by")} - - + + - - - + + + {inventoryItems.length > 0 && ( diff --git a/src/pages/sponsors/sponsor-page/tabs/sponsor-forms-tab/components/manage-items/sponsor-forms-manage-items.js b/src/pages/sponsors/sponsor-page/tabs/sponsor-forms-tab/components/manage-items/sponsor-forms-manage-items.js index 5ccaca2fb..783bbf606 100644 --- a/src/pages/sponsors/sponsor-page/tabs/sponsor-forms-tab/components/manage-items/sponsor-forms-manage-items.js +++ b/src/pages/sponsors/sponsor-page/tabs/sponsor-forms-tab/components/manage-items/sponsor-forms-manage-items.js @@ -20,7 +20,7 @@ import { Checkbox, FormControlLabel, FormGroup, - Grid2, + Grid, IconButton, Tooltip } from "@mui/material"; @@ -289,7 +289,7 @@ const SponsorFormsManageItems = ({ )} hideIcon /> - - + {totalCount} items - - + + - - + + - - + + - - + + - - + + - - + +
( - - + handleValueChange(index, "value", e.target.value)} /> - - + + handleValueChange(index, "label", e.target.value)} /> - - + - - + - - + - - + + ); const badge_features_ddl = @@ -316,13 +316,13 @@ const AddSponsorExtraQuestionPopup = ({ autoComplete="off" > - - - - + - - + + {formik.values.type === "CheckBoxList" && ( - - + - - + + )} - - + - - + + {shouldShowField("values") && ( - - + - + {T.translate("edit_sponsor.hidden_value")} - - + + {T.translate("edit_sponsor.visible_value")} - - - + + + {({ push, remove }) => ( <> - + a.order - b.order @@ -466,7 +466,7 @@ const AddSponsorExtraQuestionPopup = ({ updateOrderKey="order" droppableId="sponsor-extra-question-values" /> - + - - - + + + {extraQuestions.length === 0 && (
{T.translate("edit_sponsor.no_extra_questions")}
)} @@ -205,7 +197,7 @@ const SponsorExtraQuestions = ({ } /> )} -
+ {showAddExtraQuestionPopup && ( {formik.values.addons.map((addon, index) => ( - - {`${formik.values.addons[index].type}`} )} - - + {`${formik.values.addons[index].name}`} )} - - + + {editingRow !== index && ( <> - - - + - + )} - - + + ))} {!formik.errors.addons && typeof formik.errors.addons === "string" && ( @@ -300,7 +300,7 @@ const ManageTierAddonsPopup = ({ )} - - - - + - - + + - + {formik.errors.newAddon && typeof formik.errors.newAddon === "string" && ( @@ -376,7 +376,7 @@ const ManageTierAddonsPopup = ({ )} - +
diff --git a/src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/sponsor-header.js b/src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/sponsor-header.js index 7c84a764d..c262bce1b 100644 --- a/src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/sponsor-header.js +++ b/src/pages/sponsors/sponsor-page/tabs/sponsor-general-form/sponsor-header.js @@ -13,12 +13,12 @@ import React from "react"; import T from "i18n-react/dist/i18n-react"; -import { Box, Divider, Grid2, Typography } from "@mui/material"; +import { Box, Divider, Grid, Typography } from "@mui/material"; const SponsorHeader = ({ sponsor }) => ( - - + + ( > {T.translate("edit_sponsor.general_information")} - - + + - - + ( > {T.translate("edit_sponsor.sponsor_name")} - - {sponsor.company?.name} - + + {sponsor.company?.name} + - - + ( > {T.translate("edit_sponsor.sponsor_address")} - - + + {[ sponsor.company?.city, sponsor.company?.state, @@ -84,8 +84,8 @@ const SponsorHeader = ({ sponsor }) => ( )} - - + + ); 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 2b3ccbd75..95d9a62ef 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 @@ -13,7 +13,7 @@ import React, { useState } from "react"; import T from "i18n-react/dist/i18n-react"; -import { Box, Button, Grid2, Typography } from "@mui/material"; +import { Box, Button, Grid, Typography } from "@mui/material"; import AddIcon from "@mui/icons-material/Add"; import MuiTable from "openstack-uicore-foundation/lib/components/mui/table"; import AddTierPopup from "./add-tier-popup"; @@ -141,8 +141,8 @@ const Sponsorship = ({ return ( <> - - + )} - - + + {showAddTierPopup && ( - + - - - + + - + {selectedPages.length}{" "} {T.translate("edit_sponsor.pages_tab.items_selected")} - - - - + + + + {" "} {T.translate("general.sort_by")} - - + + - - - + + + {showPages.length > 0 && ( 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 2c5e82b44..cdb066af2 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 @@ -20,7 +20,7 @@ import { Checkbox, FormControlLabel, FormGroup, - Grid2 + Grid } from "@mui/material"; import AddIcon from "@mui/icons-material/Add"; import ArrowForwardIcon from "@mui/icons-material/ArrowForward"; @@ -389,7 +389,7 @@ const SponsorPagesTab = ({ message={T.translate("edit_sponsor.pages_tab.alert_info")} hideIcon /> - - + {managedPages.totalItems + customizedPages.totalItems}{" "} {T.translate("edit_sponsor.pages_tab.pages")} - - + + - - + + - - + + - - + + - - + +
- - + {totalCount} {T.translate("edit_sponsor.purchase_tab.purchases")} - - + + - - + +
- - + + - - + + - - + + - - + + - - + + - - + + ); }; diff --git a/src/pages/sponsors/sponsor-page/tabs/sponsor-users-list-per-sponsor/components/sponsor-user-form.js b/src/pages/sponsors/sponsor-page/tabs/sponsor-users-list-per-sponsor/components/sponsor-user-form.js index 129100476..f565a33df 100644 --- a/src/pages/sponsors/sponsor-page/tabs/sponsor-users-list-per-sponsor/components/sponsor-user-form.js +++ b/src/pages/sponsors/sponsor-page/tabs/sponsor-users-list-per-sponsor/components/sponsor-user-form.js @@ -5,7 +5,7 @@ import { DialogActions, DialogContent, Divider, - Grid2, + Grid, Typography } from "@mui/material"; import T from "i18n-react"; @@ -42,38 +42,38 @@ const SponsorUserForm = ({ user, userGroups, onSubmit }) => { autoComplete="off" > - - + + - - + + - - + + - - + + - - + + {T.translate("sponsor_users.edit_user.access")} diff --git a/src/pages/sponsors/sponsor-page/tabs/sponsor-users-list-per-sponsor/index.js b/src/pages/sponsors/sponsor-page/tabs/sponsor-users-list-per-sponsor/index.js index 14e38a095..3ca951fc5 100644 --- a/src/pages/sponsors/sponsor-page/tabs/sponsor-users-list-per-sponsor/index.js +++ b/src/pages/sponsors/sponsor-page/tabs/sponsor-users-list-per-sponsor/index.js @@ -14,7 +14,7 @@ import React, { useEffect, useRef, useState } from "react"; import { connect } from "react-redux"; import T from "i18n-react/dist/i18n-react"; -import { Box, Button, Grid2 } from "@mui/material"; +import { Box, Button, Grid } from "@mui/material"; import AddIcon from "@mui/icons-material/Add"; import SaveAltIcon from "@mui/icons-material/SaveAlt"; import SearchInput from "openstack-uicore-foundation/lib/components/mui/search-input"; @@ -92,7 +92,7 @@ const SponsorUsersListPerSponsorPage = ({ /> )} - - + {users.totalCount}{" "} {T.translate("sponsor_users.users").toLowerCase()} - - + - + - + - - + + { } ); + // Flush the fetchSponsorByCompany microtask so the form reinitialises with + // sponsor_type=EXISTING before we click submit. + await act(async () => { + await Promise.resolve(); + }); + const processRequestButton = screen.getAllByText( "sponsor_users.process_request.save" )[0]; - await act(async () => { - await userEvent.click(processRequestButton); - }); + await userEvent.click(processRequestButton); expect(sponsorUsersActions.processSponsorUserRequest).toHaveBeenCalled(); expect(onCloseMock).toHaveBeenCalled(); }); diff --git a/src/pages/sponsors/sponsor-users-list-page/components/edit-user-popup/sponsor-user-form.js b/src/pages/sponsors/sponsor-users-list-page/components/edit-user-popup/sponsor-user-form.js index 2fdfab93b..4e8f1a26f 100644 --- a/src/pages/sponsors/sponsor-users-list-page/components/edit-user-popup/sponsor-user-form.js +++ b/src/pages/sponsors/sponsor-users-list-page/components/edit-user-popup/sponsor-user-form.js @@ -5,7 +5,7 @@ import { DialogActions, DialogContent, Divider, - Grid2 + Grid } from "@mui/material"; import T from "i18n-react"; import * as yup from "yup"; @@ -71,35 +71,35 @@ const SponsorUserForm = ({ user, summitId, userGroups, onSubmit }) => { autoComplete="off" > - - + + - - + + - - + + - + - + diff --git a/src/pages/sponsors/sponsor-users-list-page/components/process-request-form.js b/src/pages/sponsors/sponsor-users-list-page/components/process-request-form.js index d3276cd47..6aee24328 100644 --- a/src/pages/sponsors/sponsor-users-list-page/components/process-request-form.js +++ b/src/pages/sponsors/sponsor-users-list-page/components/process-request-form.js @@ -5,7 +5,7 @@ import { DialogActions, DialogContent, Divider, - Grid2, + Grid, InputLabel, Typography } from "@mui/material"; @@ -115,58 +115,58 @@ const ProcessRequestForm = ({ request, userGroups, summit, onSubmit }) => { {T.translate("sponsor_users.process_request.request_details")} - - + + {T.translate("sponsor_users.process_request.request_time")} - - + + {request.created} - - + + - - + + {T.translate("sponsor_users.process_request.show")} - - + + {summit.name} - - + + - - + + {T.translate("sponsor_users.process_request.company")} - - + + {request.company_name} - - + + {T.translate("sponsor_users.process_request.new_user")} - - + + - - + + - - + + { } ]} /> - - + + { "sponsor_users.process_request.select_sponsor" )} /> - - + + { )} allowCreate /> - - + + {formik.values.sponsor_type === SPONSOR_USER_ASSIGNMENT_TYPE.NEW && ( <> diff --git a/src/pages/sponsors/sponsor-users-list-page/components/users-table.js b/src/pages/sponsors/sponsor-users-list-page/components/users-table.js index fc85ead9f..ee461aedc 100644 --- a/src/pages/sponsors/sponsor-users-list-page/components/users-table.js +++ b/src/pages/sponsors/sponsor-users-list-page/components/users-table.js @@ -1,7 +1,7 @@ import React from "react"; import T from "i18n-react"; import { IconButton } from "@mui/material"; -import MailOutlineIcon from "@mui/icons-material/MailOutline"; +import MailOutlineIcon from "@mui/icons-material/MailOutlined"; import MuiTable from "openstack-uicore-foundation/lib/components/mui/table"; import ChipList from "../../../../components/mui/chip-list"; import { titleCase } from "../../../../utils/methods"; diff --git a/src/pages/sponsors/sponsor-users-list-page/index.js b/src/pages/sponsors/sponsor-users-list-page/index.js index 946917fe5..776a89669 100644 --- a/src/pages/sponsors/sponsor-users-list-page/index.js +++ b/src/pages/sponsors/sponsor-users-list-page/index.js @@ -15,7 +15,7 @@ import React, { useEffect, useState } from "react"; import { connect } from "react-redux"; import T from "i18n-react/dist/i18n-react"; import { Breadcrumb } from "react-breadcrumbs"; -import { Box, Button, Grid2 } from "@mui/material"; +import { Box, Button, Grid } from "@mui/material"; import AddIcon from "@mui/icons-material/Add"; import SaveAltIcon from "@mui/icons-material/SaveAlt"; import SearchInput from "openstack-uicore-foundation/lib/components/mui/search-input"; @@ -65,7 +65,7 @@ const SponsorUsersListPage = ({ }} />

{T.translate("sponsor_users.users")}

- - + {requests.totalCount} {T.translate("sponsor_users.access_request")} - - + - + - + - - + + {T.translate("summit_sponsorship_list.alert_info")} - - + {totalSponsorships} summit tiers - - + - - + + - - - + + + {sponsorships.length === 0 && (
{T.translate("summit_sponsorship_list.no_sponsorships")}
diff --git a/src/pages/sponsorship-types/components/sponsorship-dialog.js b/src/pages/sponsorship-types/components/sponsorship-dialog.js index dcb093564..099452ea5 100644 --- a/src/pages/sponsorship-types/components/sponsorship-dialog.js +++ b/src/pages/sponsorship-types/components/sponsorship-dialog.js @@ -13,7 +13,7 @@ import { Box, IconButton, Divider, - Grid2 + Grid } from "@mui/material"; import CloseIcon from "@mui/icons-material/Close"; import MuiFormikTextField from "openstack-uicore-foundation/lib/components/mui/formik-inputs/textfield"; @@ -92,8 +92,8 @@ const SponsorshipDialog = ({ autoComplete="off" > - - + + {T.translate("edit_sponsorship.name")} * @@ -105,8 +105,8 @@ const SponsorshipDialog = ({ fullWidth required /> - - + + {T.translate("edit_sponsorship.label")} @@ -116,8 +116,8 @@ const SponsorshipDialog = ({ margin="none" fullWidth /> - - + + {T.translate("edit_sponsorship.size")} @@ -132,8 +132,8 @@ const SponsorshipDialog = ({ options={SIZE_OPTIONS_DDL} /> - - + + diff --git a/src/pages/sponsorship-types/sponsorship-list-page.js b/src/pages/sponsorship-types/sponsorship-list-page.js index 66854a359..0785a7a66 100644 --- a/src/pages/sponsorship-types/sponsorship-list-page.js +++ b/src/pages/sponsorship-types/sponsorship-list-page.js @@ -14,7 +14,7 @@ import React, { useEffect, useState } from "react"; import { connect } from "react-redux"; import T from "i18n-react/dist/i18n-react"; -import { Box, Button, Grid2 } from "@mui/material"; +import { Box, Button, Grid } from "@mui/material"; import AddIcon from "@mui/icons-material/Add"; import MuiTable from "openstack-uicore-foundation/lib/components/mui/table"; import SearchInput from "openstack-uicore-foundation/lib/components/mui/search-input"; @@ -119,7 +119,7 @@ const SponsorshipListPage = ({ return (

{T.translate("sponsorship_list.sponsorship_types_list")}

- - + {totalSponsorships}{" "} {T.translate("sponsorship_list.sponsorship_types")} - - + - + - + - - + + {sponsorships.length > 0 && (

{T.translate("directory.summits")}

- )} - + handleChangeDateFilter(ev, false)} timezone={currentSummit.time_zone_id} value={epochToMomentTimeZone( ticketTypeFilters.sale_period_filter[0], - currentSummit.time + currentSummit.time_zone_id )} className="event-list-date-picker" + inputProps={{ + placeholder: T.translate( + "ticket_type_list.placeholders.sale_period_from" + ) + }} />
handleChangeDateFilter(ev, true)} timezone={currentSummit.time_zone_id} value={epochToMomentTimeZone( @@ -477,6 +472,11 @@ const TicketTypeListPage = function ({ currentSummit.time_zone_id )} className="event-list-date-picker" + inputProps={{ + placeholder: T.translate( + "ticket_type_list.placeholders.sale_period_to" + ) + }} />
@@ -501,11 +501,9 @@ const TicketTypeListPage = function ({ />
- {ticketTypes.length === 0 && (
{T.translate("ticket_type_list.no_ticket_types")}
)} - {ticketTypes.length > 0 && (
and contains IconButton // (also