diff --git a/package-lock.json b/package-lock.json index 9a549a16..784bfb1f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,8 +26,8 @@ "mui-nested-menu": "^4.0.1", "oidc-client": "^1.11.5", "prop-types": "^15.8.1", - "react": "^18.3.1", - "react-dom": "^18.3.1", + "react": "^19.2.0", + "react-dom": "^19.2.0", "react-hook-form": "^7.62.0", "react-intl": "^7.1.11", "react-papaparse": "^4.4.0", @@ -55,8 +55,8 @@ "@types/localized-countries": "^2.0.3", "@types/node": "^22.18.1", "@types/prop-types": "^15.7.15", - "@types/react": "^18.3.24", - "@types/react-dom": "^18.3.7", + "@types/react": "^19.2.2", + "@types/react-dom": "^19.2.1", "@types/react-window": "^1.8.8", "@typescript-eslint/eslint-plugin": "^7.18.0", "@typescript-eslint/parser": "^7.18.0", @@ -3308,8 +3308,8 @@ "ag-grid-community": "^33.0.3", "ag-grid-react": "^33.0.4", "notistack": "^3.0.2", - "react": "^18.3.1", - "react-dom": "^18.3.1", + "react": "^19.2.0", + "react-dom": "^19.2.0", "react-hook-form": "^7.54.2", "react-intl": "^7.1.6", "react-papaparse": "^4.4.0", @@ -5516,23 +5516,22 @@ "license": "MIT" }, "node_modules/@types/react": { - "version": "18.3.26", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.26.tgz", - "integrity": "sha512-RFA/bURkcKzx/X9oumPG9Vp3D3JUgus/d0b67KB0t5S/raciymilkOa66olh78MUI92QLbEJevO7rvqU/kjwKA==", + "version": "19.2.2", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.2.tgz", + "integrity": "sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA==", "license": "MIT", "dependencies": { - "@types/prop-types": "*", "csstype": "^3.0.2" } }, "node_modules/@types/react-dom": { - "version": "18.3.7", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.7.tgz", - "integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==", + "version": "19.2.1", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.1.tgz", + "integrity": "sha512-/EEvYBdT3BflCWvTMO7YkYBHVE9Ci6XdqZciZANQgKpaiDRGOLIlRo91jbTNRQjgPFWVaRxcYc0luVNFitz57A==", "dev": true, "license": "MIT", "peerDependencies": { - "@types/react": "^18.0.0" + "@types/react": "^19.2.0" } }, "node_modules/@types/react-transition-group": { @@ -5782,9 +5781,9 @@ } }, "node_modules/@typescript-eslint/experimental-utils/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, "license": "ISC", "bin": { @@ -5913,9 +5912,9 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, "license": "ISC", "bin": { @@ -8497,9 +8496,9 @@ } }, "node_modules/eslint-config-react-app/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, "license": "ISC", "bin": { @@ -9002,9 +9001,9 @@ } }, "node_modules/eslint-plugin-testing-library/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, "license": "ISC", "bin": { @@ -10523,9 +10522,9 @@ } }, "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, "license": "ISC", "bin": { @@ -11117,9 +11116,9 @@ } }, "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, "license": "ISC", "bin": { @@ -11652,9 +11651,9 @@ } }, "node_modules/make-dir/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, "license": "ISC", "bin": { @@ -12721,13 +12720,10 @@ } }, "node_modules/react": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", - "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "version": "19.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.0.tgz", + "integrity": "sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==", "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0" - }, "engines": { "node": ">=0.10.0" } @@ -12787,16 +12783,15 @@ } }, "node_modules/react-dom": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", - "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "version": "19.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.0.tgz", + "integrity": "sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==", "license": "MIT", "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.2" + "scheduler": "^0.27.0" }, "peerDependencies": { - "react": "^18.3.1" + "react": "^19.2.0" } }, "node_modules/react-hook-form": { @@ -13495,13 +13490,10 @@ } }, "node_modules/scheduler": { - "version": "0.23.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", - "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0" - } + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "license": "MIT" }, "node_modules/semver": { "version": "6.3.1", @@ -15461,21 +15453,6 @@ "dev": true, "license": "ISC" }, - "node_modules/yaml": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz", - "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14.6" - } - }, "node_modules/yargs": { "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", diff --git a/package.json b/package.json index bd8a0108..2b254b3d 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "dependencies": { "@emotion/react": "^11.14.0", "@emotion/styled": "^11.14.1", - "@gridsuite/commons-ui": "0.132.0", + "@gridsuite/commons-ui": "file:../commons-ui/gridsuite-commons-ui-0.132.0.tgz", "@hookform/resolvers": "^4.1.3", "@mui/icons-material": "^5.18.0", "@mui/lab": "5.0.0-alpha.175", @@ -37,8 +37,8 @@ "mui-nested-menu": "^4.0.1", "oidc-client": "^1.11.5", "prop-types": "^15.8.1", - "react": "^18.3.1", - "react-dom": "^18.3.1", + "react": "^19.2.0", + "react-dom": "^19.2.0", "react-hook-form": "^7.62.0", "react-intl": "^7.1.11", "react-papaparse": "^4.4.0", @@ -66,8 +66,8 @@ "@types/localized-countries": "^2.0.3", "@types/node": "^22.18.1", "@types/prop-types": "^15.7.15", - "@types/react": "^18.3.24", - "@types/react-dom": "^18.3.7", + "@types/react": "^19.2.2", + "@types/react-dom": "^19.2.1", "@types/react-window": "^1.8.8", "@typescript-eslint/eslint-plugin": "^7.18.0", "@typescript-eslint/parser": "^7.18.0", diff --git a/src/components/directory-content-table.tsx b/src/components/directory-content-table.tsx index edf9c217..324d3ad7 100644 --- a/src/components/directory-content-table.tsx +++ b/src/components/directory-content-table.tsx @@ -25,7 +25,7 @@ import { AGGRID_LOCALES } from '../translations/not-intl/aggrid-locales'; export interface DirectoryContentTableProps extends Pick, 'getRowStyle' | 'onGridReady'> { - gridRef: RefObject>; + gridRef: RefObject | null>; rows: ElementAttributes[]; handleCellContextualMenu: (event: CellContextMenuEvent) => void; handleRowSelected: () => void; diff --git a/src/components/search/search-bar.tsx b/src/components/search/search-bar.tsx index 45e5bb6c..2839140e 100644 --- a/src/components/search/search-bar.tsx +++ b/src/components/search/search-bar.tsx @@ -33,7 +33,7 @@ export function SearchBar({ inputRef }: Readonly) { const dispatch = useDispatch(); const { snackError } = useSnackMessage(); const treeData = useSelector((state: AppState) => state.treeData); - const treeDataRef = useRef(); + const treeDataRef = useRef(null); const selectedDirectory = useSelector((state: AppState) => state.selectedDirectory); treeDataRef.current = treeData; diff --git a/src/components/search/use-highlight-searched-element.tsx b/src/components/search/use-highlight-searched-element.tsx index 95ca9e32..470a08a4 100644 --- a/src/components/search/use-highlight-searched-element.tsx +++ b/src/components/search/use-highlight-searched-element.tsx @@ -18,7 +18,7 @@ const SEARCH_HIGHLIGHT_DURATION_S = 4; export function useHighlightSearchedElement(gridApi: GridApi | null) { const searchedElement = useSelector((state: AppState) => state.searchedElement); const dispatch = useDispatch(); - const timeout = useRef>(); + const timeout = useRef>(null); const highlightElement = useCallback( (api: GridApi) => { @@ -27,7 +27,7 @@ export function useHighlightSearchedElement(gridApi: GridApi return; } const searchedElementRow = api.getRowNode(searchedElement.id); - if (searchedElementRow?.rowIndex != null && searchedElementRow?.rowIndex >= 0) { + if (searchedElementRow?.rowIndex != null && searchedElementRow?.rowIndex >= 0 && timeout.current) { api.ensureIndexVisible(searchedElementRow.rowIndex, 'top'); clearTimeout(timeout.current); timeout.current = setTimeout(() => { diff --git a/src/components/tree-views-container.tsx b/src/components/tree-views-container.tsx index 59a1b853..8ef34e3a 100644 --- a/src/components/tree-views-container.tsx +++ b/src/components/tree-views-container.tsx @@ -112,7 +112,7 @@ export default function TreeViewsContainer() { const treeData = useSelector((state: AppState) => state.treeData); - const treeDataRef = useRef(); + const treeDataRef = useRef(null); treeDataRef.current = treeData; const handleOpenDirectoryMenu = useCallback( diff --git a/src/components/utils/directory-content-utils.ts b/src/components/utils/directory-content-utils.ts index 4ad0c232..afea7dc5 100644 --- a/src/components/utils/directory-content-utils.ts +++ b/src/components/utils/directory-content-utils.ts @@ -8,7 +8,7 @@ import { IntlShape } from 'react-intl'; import type { UUID } from 'node:crypto'; import { AgGridReact } from 'ag-grid-react'; -import { MutableRefObject } from 'react'; +import { RefObject } from 'react'; import { ColDef, IRowNode } from 'ag-grid-community'; import type { ElementAttributes } from '@gridsuite/commons-ui'; import { NameCellRenderer } from './renderers/name-cell-renderer'; @@ -28,7 +28,7 @@ export const formatMetadata = ( }); export const computeCheckedElements = ( - gridRef: MutableRefObject, + gridRef: RefObject, childrenMetadata: Record ): ElementAttributes[] => gridRef.current?.api?.getSelectedRows().map((row: ElementAttributes) => formatMetadata(row, childrenMetadata)) ?? diff --git a/src/hooks/useDirectoryContent.ts b/src/hooks/useDirectoryContent.ts index 5eccd9e8..4f901677 100644 --- a/src/hooks/useDirectoryContent.ts +++ b/src/hooks/useDirectoryContent.ts @@ -34,7 +34,7 @@ export const useDirectoryContent = () => { const knownUsersIdentitiesRef = useRef({}); const [childrenMetadata, setChildrenMetadata] = useState>({}); const { snackError } = useSnackMessage(); - const previousData = useRef(); + const previousData = useRef(undefined); previousData.current = currentChildren; const handleError = useCallback(