diff --git a/package-lock.json b/package-lock.json index cb1afb5..0059c32 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "dependencies": { "@emotion/react": "^11.14.0", "@emotion/styled": "^11.14.0", - "@gridsuite/commons-ui": "0.101.0", + "@gridsuite/commons-ui": "file:../commons-ui/gridsuite-commons-ui-0.102.0.tgz", "@hookform/resolvers": "^4.0.0", "@mui/icons-material": "^5.16.14", "@mui/lab": "5.0.0-alpha.175", @@ -3046,9 +3046,9 @@ } }, "node_modules/@gridsuite/commons-ui": { - "version": "0.101.0", - "resolved": "https://registry.npmjs.org/@gridsuite/commons-ui/-/commons-ui-0.101.0.tgz", - "integrity": "sha512-1nDH39fi2BpWbpT/1xlheG/Oy/nK6+qvQRBJ/v9whuUrdqE0GWpFYTTkjk+mqRiJBxMSmsEyNC1QvbUqbXyPRQ==", + "version": "0.102.0", + "resolved": "file:../commons-ui/gridsuite-commons-ui-0.102.0.tgz", + "integrity": "sha512-MjT4hNRzkQs6T3NrmXjunVNEjZAPQntAwvWa35eGHGhsxTCj6ORVDxQviX68GelKTpP5IaZr11wbz9U6LdZU7A==", "license": "MPL-2.0", "dependencies": { "@ag-grid-community/locale": "^33.1.0", @@ -3070,7 +3070,8 @@ "react-querybuilder": "^8.2.0", "reconnecting-websocket": "^4.4.0", "type-fest": "^4.34.1", - "uuid": "^11.0.5" + "uuid": "^11.0.5", + "yup-locales": "^1.2.28" }, "engines": { "node": ">=22", @@ -14876,6 +14877,12 @@ "type-fest": "^2.19.0" } }, + "node_modules/yup-locales": { + "version": "1.2.28", + "resolved": "https://registry.npmjs.org/yup-locales/-/yup-locales-1.2.28.tgz", + "integrity": "sha512-q2p5XDVThFXTLOOV1DgMbpMOfrxfZTjYSkS1WRWco6YZJOeHrbuM3ISytrLaYa8TiX/YPtE9tuQmMiUyTBZDIw==", + "license": "MIT" + }, "node_modules/yup/node_modules/type-fest": { "version": "2.19.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", diff --git a/package.json b/package.json index db3bbef..3503cd6 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ "dependencies": { "@emotion/react": "^11.14.0", "@emotion/styled": "^11.14.0", - "@gridsuite/commons-ui": "0.101.0", + "@gridsuite/commons-ui": "file:../commons-ui/gridsuite-commons-ui-0.102.0.tgz", "@hookform/resolvers": "^4.0.0", "@mui/icons-material": "^5.16.14", "@mui/lab": "5.0.0-alpha.175", diff --git a/src/components/app.tsx b/src/components/app.tsx index 6247e7c..1ae932b 100644 --- a/src/components/app.tsx +++ b/src/components/app.tsx @@ -24,6 +24,7 @@ import { NotificationsProvider, TopBar, type UserManagerState, + useYupIntl, } from '@gridsuite/commons-ui'; import { FormattedMessage, useIntl } from 'react-intl'; import PowsyblLogo from '../images/powsybl_logo.svg?react'; @@ -63,6 +64,7 @@ const App = () => { const computedLanguage = useIntl().locale; const theme = useAppSelector((state) => state.theme); const themeCompiled = useMemo(() => getMuiTheme(theme, computedLanguage), [computedLanguage, theme]); + useYupIntl(); const user = useAppSelector((state) => state.user.user); diff --git a/src/containers/FilterContainer.jsx b/src/containers/FilterContainer.jsx index 5ad0c0b..2cdc179 100644 --- a/src/containers/FilterContainer.jsx +++ b/src/containers/FilterContainer.jsx @@ -15,7 +15,8 @@ import { } from '../redux/slices/Mapping'; import Filter from '../components/3-organisms/Filter'; import PropTypes from 'prop-types'; -import { CustomFormProvider, EXPERT_FILTER_QUERY, yupConfig as yup } from '@gridsuite/commons-ui'; +import * as yup from 'yup'; +import { CustomFormProvider, EXPERT_FILTER_QUERY } from '@gridsuite/commons-ui'; import useDataForm from '../hooks/react-hook-form/form/useDataForm'; // we do not need detail schema with all validation test for rqb filter diff --git a/src/hooks/react-hook-form/form/useDataForm.ts b/src/hooks/react-hook-form/form/useDataForm.ts index 0c9e59e..4df32d2 100644 --- a/src/hooks/react-hook-form/form/useDataForm.ts +++ b/src/hooks/react-hook-form/form/useDataForm.ts @@ -4,19 +4,19 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -import { FieldErrors, FieldValues, useForm } from 'react-hook-form'; +import { type FieldErrors, type FieldValues, useForm } from 'react-hook-form'; import { yupResolver } from '@hookform/resolvers/yup'; import useFormInit from './useFormInit'; -import { yupConfig as yup } from '@gridsuite/commons-ui'; +import type { ObjectSchema } from 'yup'; import useDataUpdate from './useDataUpdate'; -const useDataForm = ( - formSchema: yup.ObjectSchema, +export default function useDataForm( + formSchema: ObjectSchema, data: Object, invalidations: any[], onValid: (formData: FieldValues) => void, onInvalid: (errors: FieldErrors) => void -) => { +) { const formMethods = useForm({ resolver: yupResolver(formSchema), }); @@ -30,6 +30,4 @@ const useDataForm = ( useDataUpdate(formMethods, onValid, onInvalid); return { key, formMethods }; -}; - -export default useDataForm; +} diff --git a/src/redux/slices/Mapping.js b/src/redux/slices/Mapping.js index 373af7b..28c0b1a 100644 --- a/src/redux/slices/Mapping.js +++ b/src/redux/slices/Mapping.js @@ -18,8 +18,8 @@ import { getExpertFilterEmptyFormData, importExpertRules, rqbQuerySchemaValidator, - yupConfig as yup, } from '@gridsuite/commons-ui'; +import * as yup from 'yup'; import { v4 as uuid4 } from 'uuid'; import { enrichIdRqbQuery } from '../../utils/rqb-utils'; import { assignArray } from '../../utils/functions'; @@ -214,9 +214,7 @@ const checkFilterValidity = (filter, isLast) => { // only last rule allows empty filter return !!isLast; } - const isQueryExist = !_.isEmpty(filter.rules); - const isQueryValid = isQueryExist && rqbQuerySchemaValidator(yup.object()).isValidSync(filter.rules); - return isQueryValid; + return !_.isEmpty(filter.rules) && rqbQuerySchemaValidator(yup.object()).isValidSync(filter.rules); // query exist and is valid }; export const makeGetIsFilterValid = () => @@ -244,7 +242,7 @@ const checkRuleValidity = (rule, isLast) => { }; const checkAutomatonValidity = (automaton, automatonDefinition = {}) => { - const result = + return ( !!automaton.family && !!automaton.model && !!automaton.setGroup && @@ -256,8 +254,8 @@ const checkAutomatonValidity = (automaton, automatonDefinition = {}) => { ? !!automaton.properties.find((elem) => elem.name === propertyName)?.value : true), true - ); - return result; + ) + ); }; const indexingRuleByType = (rules) => { @@ -622,8 +620,8 @@ const reducers = { const foundRule = foundMapping.rules?.find((rule) => rule?.filter?.id === modifiedFilter?.id); const oldQuery = foundRule?.filter?.rules; - const isDirty = formatQuery(oldQuery, 'json_without_ids') !== formatQuery(newQuery, 'json_without_ids'); - modifiedRule.filterDirty = isDirty; + modifiedRule.filterDirty = + formatQuery(oldQuery, 'json_without_ids') !== formatQuery(newQuery, 'json_without_ids'); } }, deleteFilter: (state, action) => {