From bf28ffca598da580e510e3129cbe7278ef9ece42 Mon Sep 17 00:00:00 2001 From: Nicolas Olmos Date: Fri, 26 Dec 2025 11:15:08 -0300 Subject: [PATCH 1/8] chore: update uicore dependency version --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 48106fb79..9465b75ee 100644 --- a/package.json +++ b/package.json @@ -89,7 +89,7 @@ "moment-duration-format": "^2.3.2", "moment-timezone": "^0.5.33", "node-sass": "^7.0.1", - "openstack-uicore-foundation": "4.2.19", + "openstack-uicore-foundation": "4.2.21", "p-limit": "^6.1.0", "path-browserify": "^1.0.1", "postcss-loader": "^6.2.1", diff --git a/yarn.lock b/yarn.lock index 823369b55..67e9b2c50 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10342,10 +10342,10 @@ open@^8.0.9: is-docker "^2.1.1" is-wsl "^2.2.0" -openstack-uicore-foundation@4.2.19: - version "4.2.19" - resolved "https://registry.npmjs.org/openstack-uicore-foundation/-/openstack-uicore-foundation-4.2.19.tgz#40ae09230b483a3279592bdeb0e7c164af4e5c97" - integrity sha512-spRHx76SlFmJqUtsUz786pnX+oaco/gDH7LJ7u5MIj5c9VcCo9rkeBfwl7htCLaCC68msuRGwlrMJpkSsY6gxw== +openstack-uicore-foundation@4.2.21: + version "4.2.21" + resolved "https://registry.yarnpkg.com/openstack-uicore-foundation/-/openstack-uicore-foundation-4.2.21.tgz#8bb505db7559890c902ea7b3d634d46f879287e1" + integrity sha512-KOFIJnh4swsIAn5L/DV7I70cPtdgZxl47Kp7oX05uET7mqdFUVp5M08ysgMWXQRaoKqjpZnOzERLFxPNfKpqvg== optionator@^0.9.1: version "0.9.4" From 2953cf86f9e604aa724c0cca158a651c6139423d Mon Sep 17 00:00:00 2001 From: Nicolas Olmos Date: Fri, 26 Dec 2025 11:16:49 -0300 Subject: [PATCH 2/8] chore: replace conversion to cents with uicore util --- src/actions/sponsor-forms-actions.js | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/src/actions/sponsor-forms-actions.js b/src/actions/sponsor-forms-actions.js index 83bb44467..e54fc2134 100644 --- a/src/actions/sponsor-forms-actions.js +++ b/src/actions/sponsor-forms-actions.js @@ -21,11 +21,12 @@ import { startLoading, stopLoading } from "openstack-uicore-foundation/lib/utils/actions"; + +import { amountToCents } from "openstack-uicore-foundation/lib/utils/money"; import T from "i18n-react/dist/i18n-react"; import moment from "moment-timezone"; import { escapeFilterValue, getAccessTokenSafely } from "../utils/methods"; import { - CENTS_FACTOR, DEFAULT_CURRENT_PAGE, DEFAULT_ORDER_DIR, DEFAULT_PER_PAGE @@ -1152,17 +1153,13 @@ const normalizeItem = (entity) => { if (early_bird_rate === "" || typeof early_bird_rate === "undefined") delete normalizedEntity.early_bird_rate; - else - normalizedEntity.early_bird_rate = Math.round( - early_bird_rate * CENTS_FACTOR - ); + else normalizedEntity.early_bird_rate = amountToCents(early_bird_rate); if (standard_rate === "" || typeof standard_rate === "undefined") delete normalizedEntity.standard_rate; - else - normalizedEntity.standard_rate = Math.round(standard_rate * CENTS_FACTOR); + else normalizedEntity.standard_rate = amountToCents(standard_rate); if (onsite_rate === "" || typeof onsite_rate === "undefined") delete normalizedEntity.onsite_rate; - else normalizedEntity.onsite_rate = Math.round(onsite_rate * CENTS_FACTOR); + else normalizedEntity.onsite_rate = amountToCents(onsite_rate); if (quantity_limit_per_show === "") delete normalizedEntity.quantity_limit_per_show; From 06717275d37478b03815e238b90254f6d3a63e03 Mon Sep 17 00:00:00 2001 From: Nicolas Olmos Date: Fri, 26 Dec 2025 11:18:39 -0300 Subject: [PATCH 3/8] chore: replace conversion from cents with uicore helper at sponsors reducer --- .../sponsors/sponsor-form-items-list-reducer.js | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/reducers/sponsors/sponsor-form-items-list-reducer.js b/src/reducers/sponsors/sponsor-form-items-list-reducer.js index 6a37d0de2..3c36c3fe4 100644 --- a/src/reducers/sponsors/sponsor-form-items-list-reducer.js +++ b/src/reducers/sponsors/sponsor-form-items-list-reducer.js @@ -11,6 +11,7 @@ * limitations under the License. * */ +import { amountFromCents } from "openstack-uicore-foundation/lib/utils/money"; import { LOGOUT_USER } from "openstack-uicore-foundation/lib/security/actions"; import { RECEIVE_SPONSOR_FORM_ITEM, @@ -22,7 +23,7 @@ import { SPONSOR_FORM_ITEM_UNARCHIVED } from "../../actions/sponsor-forms-actions"; import { SET_CURRENT_SUMMIT } from "../../actions/summit-actions"; -import { CENTS_FACTOR, DECIMAL_DIGITS } from "../../utils/constants"; +import { DECIMAL_DIGITS } from "../../utils/constants"; const DEFAULT_STATE = { items: [], @@ -86,13 +87,13 @@ const sponsorFormItemsListReducer = (state = DEFAULT_STATE, action) => { id: a.id, code: a.code, name: a.name, - early_bird_rate: `$${(a.early_bird_rate / CENTS_FACTOR).toFixed( + early_bird_rate: `$${amountFromCents(a.early_bird_rate).toFixed( DECIMAL_DIGITS )}`, - standard_rate: `$${(a.standard_rate / CENTS_FACTOR).toFixed( + standard_rate: `$${amountFromCents(a.standard_rate).toFixed( DECIMAL_DIGITS )}`, - onsite_rate: `$${(a.onsite_rate / CENTS_FACTOR).toFixed( + onsite_rate: `$${amountFromCents(a.onsite_rate).toFixed( DECIMAL_DIGITS )}`, default_quantity: a.default_quantity, @@ -113,13 +114,13 @@ const sponsorFormItemsListReducer = (state = DEFAULT_STATE, action) => { const currentItem = { ...item, - early_bird_rate: (item.early_bird_rate / CENTS_FACTOR).toFixed( + early_bird_rate: amountFromCents(item.early_bird_rate).toFixed( DECIMAL_DIGITS ), - standard_rate: (item.standard_rate / CENTS_FACTOR).toFixed( + standard_rate: amountFromCents(item.standard_rate).toFixed( DECIMAL_DIGITS ), - onsite_rate: (item.onsite_rate / CENTS_FACTOR).toFixed(DECIMAL_DIGITS), + onsite_rate: amountFromCents(item.onsite_rate).toFixed(DECIMAL_DIGITS), meta_fields: item.meta_fields.length > 0 ? item.meta_fields From a771be790696ed5ca173c5f6f814ca65bad6f359 Mon Sep 17 00:00:00 2001 From: Nicolas Olmos Date: Fri, 26 Dec 2025 11:44:09 -0300 Subject: [PATCH 4/8] chore: import money methods from ui core --- src/actions/form-template-item-actions.js | 2 +- src/actions/inventory-item-actions.js | 2 +- src/pages/sponsors/sponsor-form-item-list-page/index.js | 2 +- src/reducers/sponsors_inventory/form-template-item-reducer.js | 2 +- src/reducers/sponsors_inventory/inventory-item-reducer.js | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/actions/form-template-item-actions.js b/src/actions/form-template-item-actions.js index 7d961f51b..a7578fd2b 100644 --- a/src/actions/form-template-item-actions.js +++ b/src/actions/form-template-item-actions.js @@ -25,6 +25,7 @@ import { authErrorHandler, escapeFilterValue } from "openstack-uicore-foundation/lib/utils/actions"; +import { amountToCents } from "openstack-uicore-foundation/lib/utils/money"; import history from "../history"; import { getAccessTokenSafely } from "../utils/methods"; import { @@ -42,7 +43,6 @@ import { archiveItem, unarchiveItem } from "./inventory-shared-actions"; -import { amountToCents } from "../utils/currency"; export const ADD_FORM_TEMPLATE_ITEM = "ADD_FORM_TEMPLATE_ITEM"; export const CHANGE_FORM_TEMPLATE_ITEM_SEARCH_TERM = diff --git a/src/actions/inventory-item-actions.js b/src/actions/inventory-item-actions.js index 29e9e047f..d0d2422a1 100644 --- a/src/actions/inventory-item-actions.js +++ b/src/actions/inventory-item-actions.js @@ -25,6 +25,7 @@ import { authErrorHandler, escapeFilterValue } from "openstack-uicore-foundation/lib/utils/actions"; +import { amountToCents } from "openstack-uicore-foundation/lib/utils/money"; import history from "../history"; import { getAccessTokenSafely } from "../utils/methods"; import { @@ -42,7 +43,6 @@ import { archiveItem, unarchiveItem } from "./inventory-shared-actions"; -import { amountToCents } from "../utils/currency"; export const ADD_INVENTORY_ITEM = "ADD_INVENTORY_ITEM"; export const CHANGE_INVENTORY_ITEM_SEARCH_TERM = 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 344f46e00..94a3bd0a7 100644 --- a/src/pages/sponsors/sponsor-form-item-list-page/index.js +++ b/src/pages/sponsors/sponsor-form-item-list-page/index.js @@ -29,6 +29,7 @@ import AddIcon from "@mui/icons-material/Add"; import IconButton from "@mui/material/IconButton"; import Tooltip from "@mui/material/Tooltip"; import ImageIcon from "@mui/icons-material/Image"; +import { parsePrice } from "openstack-uicore-foundation/lib/utils/money"; import { deleteSponsorFormItem, getSponsorFormItem, @@ -40,7 +41,6 @@ import { import ItemPopup from "./components/item-popup"; import InventoryPopup from "./components/inventory-popup"; import MuiTableEditable from "../../../components/mui/editable-table/mui-table-editable"; -import { parsePrice } from "../../../utils/currency"; import { DEFAULT_CURRENT_PAGE } from "../../../utils/constants"; const SponsorFormItemListPage = ({ diff --git a/src/reducers/sponsors_inventory/form-template-item-reducer.js b/src/reducers/sponsors_inventory/form-template-item-reducer.js index 840a5c68b..3c41fb11a 100644 --- a/src/reducers/sponsors_inventory/form-template-item-reducer.js +++ b/src/reducers/sponsors_inventory/form-template-item-reducer.js @@ -12,6 +12,7 @@ * */ import { LOGOUT_USER } from "openstack-uicore-foundation/lib/security/actions"; +import { amountFromCents } from "openstack-uicore-foundation/lib/utils/money"; import { RECEIVE_FORM_TEMPLATE_ITEM, RESET_FORM_TEMPLATE_ITEM_FORM, @@ -24,7 +25,6 @@ import { FORM_TEMPLATE_ITEM_IMAGE_SAVED, FORM_TEMPLATE_ITEM_IMAGE_DELETED } from "../../actions/form-template-item-actions"; -import { amountFromCents } from "../../utils/currency"; export const DEFAULT_ENTITY = { id: 0, diff --git a/src/reducers/sponsors_inventory/inventory-item-reducer.js b/src/reducers/sponsors_inventory/inventory-item-reducer.js index 910215743..d55840300 100644 --- a/src/reducers/sponsors_inventory/inventory-item-reducer.js +++ b/src/reducers/sponsors_inventory/inventory-item-reducer.js @@ -12,6 +12,7 @@ * */ import { LOGOUT_USER } from "openstack-uicore-foundation/lib/security/actions"; +import { amountFromCents } from "openstack-uicore-foundation/lib/utils/money"; import { RECEIVE_INVENTORY_ITEM, RESET_INVENTORY_ITEM_FORM, @@ -24,7 +25,6 @@ import { INVENTORY_ITEM_IMAGE_SAVED, INVENTORY_ITEM_IMAGE_DELETED } from "../../actions/inventory-item-actions"; -import { amountFromCents } from "../../utils/currency"; export const DEFAULT_ENTITY = { id: 0, From 2668948db19443660b6252ca025422110948a885 Mon Sep 17 00:00:00 2001 From: Nicolas Olmos Date: Fri, 26 Dec 2025 11:55:09 -0300 Subject: [PATCH 5/8] chore: delete currency utils --- src/utils/currency.js | 49 ------------------------------------------- 1 file changed, 49 deletions(-) delete mode 100644 src/utils/currency.js diff --git a/src/utils/currency.js b/src/utils/currency.js deleted file mode 100644 index 6488a1167..000000000 --- a/src/utils/currency.js +++ /dev/null @@ -1,49 +0,0 @@ -/** - * Copyright 2025 OpenStack Foundation - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0 - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * 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 { CENTS_FACTOR, DECIMAL_PLACES } from "./constants"; - -/** - * Converts a decimal amount to cents. - * @param {number|string} amount - The amount in decimal format (e.g., 12.34). - * @returns {number} - The amount converted to cents (e.g., 1234). - */ -export const amountToCents = (amount) => { - const normalizedAmount = parseFloat(amount); - if (isNaN(normalizedAmount)) { - return 0; - } - return Math.round(normalizedAmount * CENTS_FACTOR); -}; - -/** - * Converts an amount in cents to decimal format. - * @param {number} cents - The amount in cents (e.g., 1234). - * @returns {string} - The amount converted to decimal format (e.g., "12.34"). - */ -export const amountFromCents = (cents) => { - if (typeof cents !== "number" || !Number.isInteger(cents)) { - throw new Error("The provided value must be an integer."); - } - return (cents / CENTS_FACTOR).toFixed(DECIMAL_PLACES); -}; - -/** - * Converts a price string into cents. - * @param {string} priceString - The price (e.g., $0.30). - * @returns {number} - The amount converted to cents (e.g., 30). - */ -export const parsePrice = (priceString) => { - const float = parseFloat(priceString.replace(/[^0-9.-]/g, "")) || 0; - return parseFloat(float.toFixed(DECIMAL_PLACES)); -}; From 7a90f1858aa602c6f757fc32d9badf90fda7cc16 Mon Sep 17 00:00:00 2001 From: Nicolas Olmos Date: Fri, 26 Dec 2025 12:01:43 -0300 Subject: [PATCH 6/8] chore: remove cents constant --- src/utils/constants.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/utils/constants.js b/src/utils/constants.js index e273e38ce..f07b43a29 100644 --- a/src/utils/constants.js +++ b/src/utils/constants.js @@ -109,7 +109,6 @@ export const EXPORT_PAGE_SIZE_200 = 200; export const DATE_FILTER_ARRAY_SIZE = 2; -export const CENTS_FACTOR = 100; export const DECIMAL_PLACES = 2; export const MILLISECONDS_TO_SECONDS = 1000; From e1aaf20bbd1c13c9ae32fc59ffc2cb4936ba7b45 Mon Sep 17 00:00:00 2001 From: Nicolas Olmos Date: Fri, 26 Dec 2025 14:15:24 -0300 Subject: [PATCH 7/8] chore: remove to fixed method call --- .../sponsor-form-items-list-reducer.js | 23 +++++-------------- 1 file changed, 6 insertions(+), 17 deletions(-) diff --git a/src/reducers/sponsors/sponsor-form-items-list-reducer.js b/src/reducers/sponsors/sponsor-form-items-list-reducer.js index 3c36c3fe4..67829092a 100644 --- a/src/reducers/sponsors/sponsor-form-items-list-reducer.js +++ b/src/reducers/sponsors/sponsor-form-items-list-reducer.js @@ -23,7 +23,6 @@ import { SPONSOR_FORM_ITEM_UNARCHIVED } from "../../actions/sponsor-forms-actions"; import { SET_CURRENT_SUMMIT } from "../../actions/summit-actions"; -import { DECIMAL_DIGITS } from "../../utils/constants"; const DEFAULT_STATE = { items: [], @@ -87,15 +86,9 @@ const sponsorFormItemsListReducer = (state = DEFAULT_STATE, action) => { id: a.id, code: a.code, name: a.name, - early_bird_rate: `$${amountFromCents(a.early_bird_rate).toFixed( - DECIMAL_DIGITS - )}`, - standard_rate: `$${amountFromCents(a.standard_rate).toFixed( - DECIMAL_DIGITS - )}`, - onsite_rate: `$${amountFromCents(a.onsite_rate).toFixed( - DECIMAL_DIGITS - )}`, + early_bird_rate: `$${amountFromCents(a.early_bird_rate)}`, + standard_rate: `$${amountFromCents(a.standard_rate)}`, + onsite_rate: `$${amountFromCents(a.onsite_rate)}`, default_quantity: a.default_quantity, is_archived: a.is_archived, images: a.images @@ -114,13 +107,9 @@ const sponsorFormItemsListReducer = (state = DEFAULT_STATE, action) => { const currentItem = { ...item, - early_bird_rate: amountFromCents(item.early_bird_rate).toFixed( - DECIMAL_DIGITS - ), - standard_rate: amountFromCents(item.standard_rate).toFixed( - DECIMAL_DIGITS - ), - onsite_rate: amountFromCents(item.onsite_rate).toFixed(DECIMAL_DIGITS), + early_bird_rate: amountFromCents(item.early_bird_rate), + standard_rate: amountFromCents(item.standard_rate), + onsite_rate: amountFromCents(item.onsite_rate), meta_fields: item.meta_fields.length > 0 ? item.meta_fields From 13413b3e632e661bcf8be3c5c5a7d69b87cf80a8 Mon Sep 17 00:00:00 2001 From: Nicolas Olmos Date: Fri, 26 Dec 2025 14:18:53 -0300 Subject: [PATCH 8/8] chore: delete decimal places constant --- src/utils/constants.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/utils/constants.js b/src/utils/constants.js index f07b43a29..273018f4e 100644 --- a/src/utils/constants.js +++ b/src/utils/constants.js @@ -109,8 +109,6 @@ export const EXPORT_PAGE_SIZE_200 = 200; export const DATE_FILTER_ARRAY_SIZE = 2; -export const DECIMAL_PLACES = 2; - export const MILLISECONDS_TO_SECONDS = 1000; export const INDEX_NOT_FOUND = -1;