diff --git a/app/(connected)/(with-sidebar)/(with-chat)/etablissement/EtablissementPage.tsx b/app/(connected)/(with-sidebar)/(with-chat)/etablissement/EtablissementPage.tsx
index 611c55be7..0d616c368 100644
--- a/app/(connected)/(with-sidebar)/(with-chat)/etablissement/EtablissementPage.tsx
+++ b/app/(connected)/(with-sidebar)/(with-chat)/etablissement/EtablissementPage.tsx
@@ -164,7 +164,7 @@ function EtablissementPage() {
diff --git a/components/ModalContainer.tsx b/components/ModalContainer.tsx
index a4aa7d4ca..c60337a1f 100644
--- a/components/ModalContainer.tsx
+++ b/components/ModalContainer.tsx
@@ -34,12 +34,9 @@ function ModalContainer(
}))
const [isRendered, setIsRendered] = useState(false)
const previousFocusedElement = useRef(null)
- const keyListeners = useRef(
- new Map([
- ['Tab', handleTabKey],
- ['Escape', handleClose],
- ])
- )
+ const keyListeners = useRef<{
+ [key: string]: (e: KeyboardEvent) => void
+ }>({ Tab: handleTabKey, Escape: handleClose })
function focusClose() {
if (!previousFocusedElement.current)
@@ -78,7 +75,7 @@ function ModalContainer(
}
function keyListener(e: KeyboardEvent) {
- const listener = keyListeners.current.get(e.key)
+ const listener = keyListeners.current[e.key]
return listener && listener(e)
}
diff --git a/components/ui/Table/TDLink.tsx b/components/ui/Table/TDLink.tsx
index 735db60fc..641182db4 100644
--- a/components/ui/Table/TDLink.tsx
+++ b/components/ui/Table/TDLink.tsx
@@ -25,7 +25,7 @@ export default function TDLink({
.filter((cellVisibleText) => cellVisibleText !== null)
setLabel(labelPrefix + ' ' + rowVisibleText.join(' '))
- }, [tdRef.current])
+ }, [])
// a11y card : https://kittygiraudel.com/2022/04/02/accessible-cards/
// absolute position in grandparent : https://stackoverflow.com/a/25768682
diff --git a/eslint.config.mjs b/eslint.config.mjs
index e77cb3f08..b11a1f180 100644
--- a/eslint.config.mjs
+++ b/eslint.config.mjs
@@ -4,6 +4,7 @@ import { fileURLToPath } from 'node:url'
import { FlatCompat } from '@eslint/eslintrc'
import js from '@eslint/js'
import prettierConfigRecommended from 'eslint-plugin-prettier/recommended'
+import reactCompiler from 'eslint-plugin-react-compiler'
const __filename = fileURLToPath(import.meta.url)
const __dirname = path.dirname(__filename)
@@ -43,6 +44,14 @@ const eslintConfig = [
],
},
},
+ {
+ plugins: {
+ 'react-compiler': reactCompiler,
+ },
+ rules: {
+ 'react-compiler/react-compiler': 'error',
+ },
+ },
{
settings: {
'jsx-a11y': {
diff --git a/package.json b/package.json
index d89505bd6..2a4d8bcf1 100644
--- a/package.json
+++ b/package.json
@@ -63,6 +63,7 @@
"eslint-config-next": "^15.0.4",
"eslint-config-prettier": "^9.1.0",
"eslint-plugin-prettier": "^5.2.1",
+ "eslint-plugin-react-compiler": "19.0.0-beta-37ed2a7-20241206",
"jest": "^29.7.0",
"jest-axe": "^9.0.0",
"jest-environment-jsdom": "^29.7.0",
diff --git a/tests/pages/EtablissementPage.test.tsx b/tests/pages/EtablissementPage.test.tsx
index 96f4224b5..58695f450 100644
--- a/tests/pages/EtablissementPage.test.tsx
+++ b/tests/pages/EtablissementPage.test.tsx
@@ -170,7 +170,7 @@ describe('EtablissementPage client side', () => {
screen.getByRole('link', {
name: 'Accéder à la fiche de Page 1 Albert Emploi Le 01/03/2023 à 15:11 Carlo Le Calamar',
})
- ).toHaveAttribute('href', 'etablissement/beneficiaires/id-jeune')
+ ).toHaveAttribute('href', '/etablissement/beneficiaires/id-jeune')
expect(
within(tableauDeBeneficiaires).getByText(`Page 1 Albert`)
).toBeInTheDocument()
diff --git a/yarn.lock b/yarn.lock
index 99f52a95e..f6e1b77b5 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -47,7 +47,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.21.3, @babel/core@npm:^7.23.9":
+"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.21.3, @babel/core@npm:^7.23.9, @babel/core@npm:^7.24.4":
version: 7.26.0
resolution: "@babel/core@npm:7.26.0"
dependencies:
@@ -115,7 +115,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/helper-create-class-features-plugin@npm:^7.25.9":
+"@babel/helper-create-class-features-plugin@npm:^7.18.6, @babel/helper-create-class-features-plugin@npm:^7.25.9":
version: 7.25.9
resolution: "@babel/helper-create-class-features-plugin@npm:7.25.9"
dependencies:
@@ -308,6 +308,17 @@ __metadata:
languageName: node
linkType: hard
+"@babel/parser@npm:^7.24.4":
+ version: 7.26.3
+ resolution: "@babel/parser@npm:7.26.3"
+ dependencies:
+ "@babel/types": "npm:^7.26.3"
+ bin:
+ parser: ./bin/babel-parser.js
+ checksum: 10c0/48f736374e61cfd10ddbf7b80678514ae1f16d0e88bc793d2b505d73d9b987ea786fc8c2f7ee8f8b8c467df062030eb07fd0eb2168f0f541ca1f542775852cad
+ languageName: node
+ linkType: hard
+
"@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:^7.25.9":
version: 7.25.9
resolution: "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:7.25.9"
@@ -367,6 +378,18 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-proposal-private-methods@npm:^7.18.6":
+ version: 7.18.6
+ resolution: "@babel/plugin-proposal-private-methods@npm:7.18.6"
+ dependencies:
+ "@babel/helper-create-class-features-plugin": "npm:^7.18.6"
+ "@babel/helper-plugin-utils": "npm:^7.18.6"
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 10c0/1c273d0ec3d49d0fe80bd754ec0191016e5b3ab4fb1e162ac0c014e9d3c1517a5d973afbf8b6dc9f9c98a8605c79e5f9e8b5ee158a4313fa68d1ff7b02084b6a
+ languageName: node
+ linkType: hard
+
"@babel/plugin-proposal-private-property-in-object@npm:7.21.0-placeholder-for-preset-env.2":
version: 7.21.0-placeholder-for-preset-env.2
resolution: "@babel/plugin-proposal-private-property-in-object@npm:7.21.0-placeholder-for-preset-env.2"
@@ -1418,6 +1441,16 @@ __metadata:
languageName: node
linkType: hard
+"@babel/types@npm:^7.26.3":
+ version: 7.26.3
+ resolution: "@babel/types@npm:7.26.3"
+ dependencies:
+ "@babel/helper-string-parser": "npm:^7.25.9"
+ "@babel/helper-validator-identifier": "npm:^7.25.9"
+ checksum: 10c0/966c5242c5e55c8704bf7a7418e7be2703a0afa4d19a8480999d5a4ef13d095dd60686615fe5983cb7593b4b06ba3a7de8d6ca501c1d78bdd233a10d90be787b
+ languageName: node
+ linkType: hard
+
"@bcoe/v8-coverage@npm:^0.2.3":
version: 0.2.3
resolution: "@bcoe/v8-coverage@npm:0.2.3"
@@ -5563,6 +5596,22 @@ __metadata:
languageName: node
linkType: hard
+"eslint-plugin-react-compiler@npm:19.0.0-beta-37ed2a7-20241206":
+ version: 19.0.0-beta-37ed2a7-20241206
+ resolution: "eslint-plugin-react-compiler@npm:19.0.0-beta-37ed2a7-20241206"
+ dependencies:
+ "@babel/core": "npm:^7.24.4"
+ "@babel/parser": "npm:^7.24.4"
+ "@babel/plugin-proposal-private-methods": "npm:^7.18.6"
+ hermes-parser: "npm:^0.25.1"
+ zod: "npm:^3.22.4"
+ zod-validation-error: "npm:^3.0.3"
+ peerDependencies:
+ eslint: ">=7"
+ checksum: 10c0/072413c7a9a4959fc5e7bb65e1107498c0d940acd993112be338719138fada20f3dcf21900e6a17978a3de6a700ad8f1b9073f873b97ed6ca5be9c63ca32ed06
+ languageName: node
+ linkType: hard
+
"eslint-plugin-react-hooks@npm:^5.0.0":
version: 5.1.0
resolution: "eslint-plugin-react-hooks@npm:5.1.0"
@@ -6338,6 +6387,22 @@ __metadata:
languageName: node
linkType: hard
+"hermes-estree@npm:0.25.1":
+ version: 0.25.1
+ resolution: "hermes-estree@npm:0.25.1"
+ checksum: 10c0/48be3b2fa37a0cbc77a112a89096fa212f25d06de92781b163d67853d210a8a5c3784fac23d7d48335058f7ed283115c87b4332c2a2abaaccc76d0ead1a282ac
+ languageName: node
+ linkType: hard
+
+"hermes-parser@npm:^0.25.1":
+ version: 0.25.1
+ resolution: "hermes-parser@npm:0.25.1"
+ dependencies:
+ hermes-estree: "npm:0.25.1"
+ checksum: 10c0/3abaa4c6f1bcc25273f267297a89a4904963ea29af19b8e4f6eabe04f1c2c7e9abd7bfc4730ddb1d58f2ea04b6fee74053d8bddb5656ec6ebf6c79cc8d14202c
+ languageName: node
+ linkType: hard
+
"hoist-non-react-statics@npm:^3.3.0":
version: 3.3.2
resolution: "hoist-non-react-statics@npm:3.3.2"
@@ -8958,6 +9023,7 @@ __metadata:
eslint-config-next: "npm:^15.0.4"
eslint-config-prettier: "npm:^9.1.0"
eslint-plugin-prettier: "npm:^5.2.1"
+ eslint-plugin-react-compiler: "npm:19.0.0-beta-37ed2a7-20241206"
firebase: "npm:11.0.2"
html-react-parser: "npm:5.2.0"
jest: "npm:^29.7.0"
@@ -11534,3 +11600,19 @@ __metadata:
checksum: 10c0/dceb44c28578b31641e13695d200d34ec4ab3966a5729814d5445b194933c096b7ced71494ce53a0e8820685d1d010df8b2422e5bf2cdea7e469d97ffbea306f
languageName: node
linkType: hard
+
+"zod-validation-error@npm:^3.0.3":
+ version: 3.4.0
+ resolution: "zod-validation-error@npm:3.4.0"
+ peerDependencies:
+ zod: ^3.18.0
+ checksum: 10c0/aaadb0e65c834aacb12fa088663d52d9f4224b5fe6958f09b039f4ab74145fda381c8a7d470bfddf7ddd9bbb5fdfbb52739cd66958ce6d388c256a44094d1fba
+ languageName: node
+ linkType: hard
+
+"zod@npm:^3.22.4":
+ version: 3.24.1
+ resolution: "zod@npm:3.24.1"
+ checksum: 10c0/0223d21dbaa15d8928fe0da3b54696391d8e3e1e2d0283a1a070b5980a1dbba945ce631c2d1eccc088fdbad0f2dfa40155590bf83732d3ac4fcca2cc9237591b
+ languageName: node
+ linkType: hard