From 7dc39137d9fa304534d7bac8a97b7518c0bd5e16 Mon Sep 17 00:00:00 2001 From: akeamc Date: Mon, 26 Feb 2024 14:11:36 +0100 Subject: [PATCH 1/4] Fix state updates in --- src/Admin.js | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/src/Admin.js b/src/Admin.js index a4070d9..8dde9b8 100644 --- a/src/Admin.js +++ b/src/Admin.js @@ -142,14 +142,21 @@ class Admin extends React.Component { }; } - setContext(ctx, callback) { - const context = { ...this.state.context, ...ctx }; - this.setState({ context }, () => { - logger.debug("Updated AdminContext:", context); - if (callback) { - callback(context); + setContext(newContext, callback) { + this.setState( + prev => ({ + context: { + ...prev.context, + ...(typeof newContext === "function" + ? newContext(prev.context) + : newContext), + }, + }), + () => { + logger.debug("Patched AdminContext with:", newContext); + callback?.(); } - }); + ); } resetContext(callback) { @@ -242,7 +249,7 @@ class Admin extends React.Component { // Allow adding extra things to the AdminContext. if (this.props.customizeContext) { - this.setContext(this.props.customizeContext(this.state.context)); + this.setContext(this.props.customizeContext); } // Finalize boot From a6d3c91f6dc6ded0a2c952064001ed267ae53327 Mon Sep 17 00:00:00 2001 From: akeamc Date: Mon, 26 Feb 2024 14:35:32 +0100 Subject: [PATCH 2/4] Fix AutoField tests --- package-lock.json | 314 ++++++++++++++++++++---------- package.json | 4 +- src/forms/fields/DateField.js | 2 +- src/forms/fields/DateTimeField.js | 2 +- 4 files changed, 211 insertions(+), 111 deletions(-) diff --git a/package-lock.json b/package-lock.json index e941996..bfe38e5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "@date-io/date-fns": "^2.17.0", "@emotion/react": "^11.11.3", "@emotion/styled": "^11.11.0", - "@mui/x-date-pickers": "^6.19.4", + "@mui/x-date-pickers": "^5.0.20", "classnames": "^2.5.1", "date-fns": "^2.23.0", "history": "^4.10.1", @@ -31,7 +31,6 @@ "@babel/preset-react": "7.23.3", "@date-io/core": "1.3.8", "@mui/icons-material": "^5.15.10", - "@mui/lab": "^5.0.0-alpha.165", "@mui/material": "^5.15.10", "@mui/styles": "^5.15.10", "@testing-library/dom": "^9.3.4", @@ -70,7 +69,6 @@ }, "peerDependencies": { "@mui/icons-material": "^5.15.10", - "@mui/lab": "^5.0.0-alpha.165", "@mui/material": "^5.15.10", "@mui/styles": "^5.15.10", "final-form": "^4.20.10", @@ -2111,6 +2109,69 @@ "resolved": "https://registry.npmjs.org/@date-io/core/-/core-2.17.0.tgz", "integrity": "sha512-+EQE8xZhRM/hsY0CDTVyayMDDY5ihc4MqXCrPxooKw19yAzUIC6uUqsZeaOFNL9YKTNxYKrJP5DFgE8o5xRCOw==" }, + "node_modules/@date-io/dayjs": { + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/@date-io/dayjs/-/dayjs-2.17.0.tgz", + "integrity": "sha512-Iq1wjY5XzBh0lheFA0it6Dsyv94e8mTiNR8vuTai+KopxDkreL3YjwTmZHxkgB7/vd0RMIACStzVgWvPATnDCA==", + "dependencies": { + "@date-io/core": "^2.17.0" + }, + "peerDependencies": { + "dayjs": "^1.8.17" + }, + "peerDependenciesMeta": { + "dayjs": { + "optional": true + } + } + }, + "node_modules/@date-io/dayjs/node_modules/@date-io/core": { + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/@date-io/core/-/core-2.17.0.tgz", + "integrity": "sha512-+EQE8xZhRM/hsY0CDTVyayMDDY5ihc4MqXCrPxooKw19yAzUIC6uUqsZeaOFNL9YKTNxYKrJP5DFgE8o5xRCOw==" + }, + "node_modules/@date-io/luxon": { + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/@date-io/luxon/-/luxon-2.17.0.tgz", + "integrity": "sha512-l712Vdm/uTddD2XWt9TlQloZUiTiRQtY5TCOG45MQ/8u0tu8M17BD6QYHar/3OrnkGybALAMPzCy1r5D7+0HBg==", + "dependencies": { + "@date-io/core": "^2.17.0" + }, + "peerDependencies": { + "luxon": "^1.21.3 || ^2.x || ^3.x" + }, + "peerDependenciesMeta": { + "luxon": { + "optional": true + } + } + }, + "node_modules/@date-io/luxon/node_modules/@date-io/core": { + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/@date-io/core/-/core-2.17.0.tgz", + "integrity": "sha512-+EQE8xZhRM/hsY0CDTVyayMDDY5ihc4MqXCrPxooKw19yAzUIC6uUqsZeaOFNL9YKTNxYKrJP5DFgE8o5xRCOw==" + }, + "node_modules/@date-io/moment": { + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/@date-io/moment/-/moment-2.17.0.tgz", + "integrity": "sha512-e4nb4CDZU4k0WRVhz1Wvl7d+hFsedObSauDHKtZwU9kt7gdYEAzKgnrSCTHsEaXrDumdrkCYTeZ0Tmyk7uV4tw==", + "dependencies": { + "@date-io/core": "^2.17.0" + }, + "peerDependencies": { + "moment": "^2.24.0" + }, + "peerDependenciesMeta": { + "moment": { + "optional": true + } + } + }, + "node_modules/@date-io/moment/node_modules/@date-io/core": { + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/@date-io/core/-/core-2.17.0.tgz", + "integrity": "sha512-+EQE8xZhRM/hsY0CDTVyayMDDY5ihc4MqXCrPxooKw19yAzUIC6uUqsZeaOFNL9YKTNxYKrJP5DFgE8o5xRCOw==" + }, "node_modules/@discoveryjs/json-ext": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.3.tgz", @@ -2392,6 +2453,7 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.0.tgz", "integrity": "sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g==", + "dev": true, "dependencies": { "@floating-ui/utils": "^0.2.1" } @@ -2400,6 +2462,7 @@ "version": "1.6.3", "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.3.tgz", "integrity": "sha512-RnDthu3mzPlQ31Ss/BTwQ1zjzIhr3lk1gZB1OC56h/1vEtaXkESrOqL5fQVMfXpwGtRwX+YsZBdyHtJMQnkArw==", + "dev": true, "dependencies": { "@floating-ui/core": "^1.0.0", "@floating-ui/utils": "^0.2.0" @@ -2409,6 +2472,7 @@ "version": "2.0.8", "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.8.tgz", "integrity": "sha512-HOdqOt3R3OGeTKidaLvJKcgg75S6tibQ3Tif4eyd91QnIJWr0NLvoXFpJA/j8HqkFSL68GDca9AuyWEHlhyClw==", + "dev": true, "dependencies": { "@floating-ui/dom": "^1.6.1" }, @@ -2420,7 +2484,8 @@ "node_modules/@floating-ui/utils": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.1.tgz", - "integrity": "sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==" + "integrity": "sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==", + "dev": true }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.14", @@ -4101,6 +4166,7 @@ "version": "5.0.0-beta.36", "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.36.tgz", "integrity": "sha512-6A8fYiXgjqTO6pgj31Hc8wm1M3rFYCxDRh09dBVk0L0W4cb2lnurRJa3cAyic6hHY+we1S58OdGYRbKmOsDpGQ==", + "dev": true, "dependencies": { "@babel/runtime": "^7.23.9", "@floating-ui/react-dom": "^2.0.8", @@ -4164,47 +4230,6 @@ } } }, - "node_modules/@mui/lab": { - "version": "5.0.0-alpha.165", - "resolved": "https://registry.npmjs.org/@mui/lab/-/lab-5.0.0-alpha.165.tgz", - "integrity": "sha512-8/zJStT10nh9yrAzLOPTICGhpf5YiGp/JpM0bdTP7u5AE+YT+X2u6QwMxuCrVeW8/WVLAPFg0vtzyfgPcN5T7g==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.23.9", - "@mui/base": "5.0.0-beta.36", - "@mui/system": "^5.15.9", - "@mui/types": "^7.2.13", - "@mui/utils": "^5.15.9", - "clsx": "^2.1.0", - "prop-types": "^15.8.1" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui-org" - }, - "peerDependencies": { - "@emotion/react": "^11.5.0", - "@emotion/styled": "^11.3.0", - "@mui/material": ">=5.15.0", - "@types/react": "^17.0.0 || ^18.0.0", - "react": "^17.0.0 || ^18.0.0", - "react-dom": "^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@emotion/react": { - "optional": true - }, - "@emotion/styled": { - "optional": true - }, - "@types/react": { - "optional": true - } - } - }, "node_modules/@mui/material": { "version": "5.15.10", "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.15.10.tgz", @@ -4394,6 +4419,7 @@ "version": "7.2.13", "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.13.tgz", "integrity": "sha512-qP9OgacN62s+l8rdDhSFRe05HWtLLJ5TGclC9I1+tQngbssu0m2dmFZs+Px53AcOs9fD7TbYd4gc9AXzVqO/+g==", + "dev": true, "peerDependencies": { "@types/react": "^17.0.0 || ^18.0.0" }, @@ -4431,20 +4457,25 @@ } }, "node_modules/@mui/x-date-pickers": { - "version": "6.19.4", - "resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-6.19.4.tgz", - "integrity": "sha512-LekaacLGnoQNN5hD6iXeHFL4LbZPnr1BM57hnUKy5UgKDHqzHzZSdPGc2p7Ktv/Z2NDbpPaLEAgrLwISKIYcow==", - "dependencies": { - "@babel/runtime": "^7.23.2", - "@mui/base": "^5.0.0-beta.22", - "@mui/utils": "^5.14.16", - "@types/react-transition-group": "^4.4.8", - "clsx": "^2.0.0", - "prop-types": "^15.8.1", - "react-transition-group": "^4.4.5" + "version": "5.0.20", + "resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-5.0.20.tgz", + "integrity": "sha512-ERukSeHIoNLbI1C2XRhF9wRhqfsr+Q4B1SAw2ZlU7CWgcG8UBOxgqRKDEOVAIoSWL+DWT6GRuQjOKvj6UXZceA==", + "dependencies": { + "@babel/runtime": "^7.18.9", + "@date-io/core": "^2.15.0", + "@date-io/date-fns": "^2.15.0", + "@date-io/dayjs": "^2.15.0", + "@date-io/luxon": "^2.15.0", + "@date-io/moment": "^2.15.0", + "@mui/utils": "^5.10.3", + "@types/react-transition-group": "^4.4.5", + "clsx": "^1.2.1", + "prop-types": "^15.7.2", + "react-transition-group": "^4.4.5", + "rifm": "^0.12.1" }, "engines": { - "node": ">=14.0.0" + "node": ">=12.0.0" }, "funding": { "type": "opencollective", @@ -4453,17 +4484,14 @@ "peerDependencies": { "@emotion/react": "^11.9.0", "@emotion/styled": "^11.8.1", - "@mui/material": "^5.8.6", - "@mui/system": "^5.8.0", - "date-fns": "^2.25.0 || ^3.2.0", - "date-fns-jalali": "^2.13.0-0", + "@mui/material": "^5.4.1", + "@mui/system": "^5.4.1", + "date-fns": "^2.25.0", "dayjs": "^1.10.7", - "luxon": "^3.0.2", - "moment": "^2.29.4", - "moment-hijri": "^2.1.2", - "moment-jalaali": "^0.7.4 || ^0.8.0 || ^0.9.0 || ^0.10.0", - "react": "^17.0.0 || ^18.0.0", - "react-dom": "^17.0.0 || ^18.0.0" + "luxon": "^1.28.0 || ^2.0.0 || ^3.0.0", + "moment": "^2.29.1", + "react": "^17.0.2 || ^18.0.0", + "react-dom": "^17.0.2 || ^18.0.0" }, "peerDependenciesMeta": { "@emotion/react": { @@ -4475,9 +4503,6 @@ "date-fns": { "optional": true }, - "date-fns-jalali": { - "optional": true - }, "dayjs": { "optional": true }, @@ -4486,15 +4511,22 @@ }, "moment": { "optional": true - }, - "moment-hijri": { - "optional": true - }, - "moment-jalaali": { - "optional": true } } }, + "node_modules/@mui/x-date-pickers/node_modules/@date-io/core": { + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/@date-io/core/-/core-2.17.0.tgz", + "integrity": "sha512-+EQE8xZhRM/hsY0CDTVyayMDDY5ihc4MqXCrPxooKw19yAzUIC6uUqsZeaOFNL9YKTNxYKrJP5DFgE8o5xRCOw==" + }, + "node_modules/@mui/x-date-pickers/node_modules/clsx": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", + "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", + "engines": { + "node": ">=6" + } + }, "node_modules/@nicolo-ribaudo/chokidar-2": { "version": "2.1.8-no-fsevents.3", "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz", @@ -4563,6 +4595,7 @@ "version": "2.11.8", "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "dev": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/popperjs" @@ -6941,6 +6974,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.0.tgz", "integrity": "sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==", + "dev": true, "engines": { "node": ">=6" } @@ -16323,6 +16357,14 @@ "node": ">=0.10.0" } }, + "node_modules/rifm": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/rifm/-/rifm-0.12.1.tgz", + "integrity": "sha512-OGA1Bitg/dSJtI/c4dh90svzaUPt228kzFsUkJbtA2c964IqEAwWXeL9ZJi86xWv3j5SMqRvGULl7bA6cK0Bvg==", + "peerDependencies": { + "react": ">=16.8" + } + }, "node_modules/rimraf": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", @@ -20128,6 +20170,51 @@ } } }, + "@date-io/dayjs": { + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/@date-io/dayjs/-/dayjs-2.17.0.tgz", + "integrity": "sha512-Iq1wjY5XzBh0lheFA0it6Dsyv94e8mTiNR8vuTai+KopxDkreL3YjwTmZHxkgB7/vd0RMIACStzVgWvPATnDCA==", + "requires": { + "@date-io/core": "^2.17.0" + }, + "dependencies": { + "@date-io/core": { + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/@date-io/core/-/core-2.17.0.tgz", + "integrity": "sha512-+EQE8xZhRM/hsY0CDTVyayMDDY5ihc4MqXCrPxooKw19yAzUIC6uUqsZeaOFNL9YKTNxYKrJP5DFgE8o5xRCOw==" + } + } + }, + "@date-io/luxon": { + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/@date-io/luxon/-/luxon-2.17.0.tgz", + "integrity": "sha512-l712Vdm/uTddD2XWt9TlQloZUiTiRQtY5TCOG45MQ/8u0tu8M17BD6QYHar/3OrnkGybALAMPzCy1r5D7+0HBg==", + "requires": { + "@date-io/core": "^2.17.0" + }, + "dependencies": { + "@date-io/core": { + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/@date-io/core/-/core-2.17.0.tgz", + "integrity": "sha512-+EQE8xZhRM/hsY0CDTVyayMDDY5ihc4MqXCrPxooKw19yAzUIC6uUqsZeaOFNL9YKTNxYKrJP5DFgE8o5xRCOw==" + } + } + }, + "@date-io/moment": { + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/@date-io/moment/-/moment-2.17.0.tgz", + "integrity": "sha512-e4nb4CDZU4k0WRVhz1Wvl7d+hFsedObSauDHKtZwU9kt7gdYEAzKgnrSCTHsEaXrDumdrkCYTeZ0Tmyk7uV4tw==", + "requires": { + "@date-io/core": "^2.17.0" + }, + "dependencies": { + "@date-io/core": { + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/@date-io/core/-/core-2.17.0.tgz", + "integrity": "sha512-+EQE8xZhRM/hsY0CDTVyayMDDY5ihc4MqXCrPxooKw19yAzUIC6uUqsZeaOFNL9YKTNxYKrJP5DFgE8o5xRCOw==" + } + } + }, "@discoveryjs/json-ext": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.3.tgz", @@ -20345,6 +20432,7 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.0.tgz", "integrity": "sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g==", + "dev": true, "requires": { "@floating-ui/utils": "^0.2.1" } @@ -20353,6 +20441,7 @@ "version": "1.6.3", "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.3.tgz", "integrity": "sha512-RnDthu3mzPlQ31Ss/BTwQ1zjzIhr3lk1gZB1OC56h/1vEtaXkESrOqL5fQVMfXpwGtRwX+YsZBdyHtJMQnkArw==", + "dev": true, "requires": { "@floating-ui/core": "^1.0.0", "@floating-ui/utils": "^0.2.0" @@ -20362,6 +20451,7 @@ "version": "2.0.8", "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.8.tgz", "integrity": "sha512-HOdqOt3R3OGeTKidaLvJKcgg75S6tibQ3Tif4eyd91QnIJWr0NLvoXFpJA/j8HqkFSL68GDca9AuyWEHlhyClw==", + "dev": true, "requires": { "@floating-ui/dom": "^1.6.1" } @@ -20369,7 +20459,8 @@ "@floating-ui/utils": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.1.tgz", - "integrity": "sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==" + "integrity": "sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==", + "dev": true }, "@humanwhocodes/config-array": { "version": "0.11.14", @@ -21666,6 +21757,7 @@ "version": "5.0.0-beta.36", "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.36.tgz", "integrity": "sha512-6A8fYiXgjqTO6pgj31Hc8wm1M3rFYCxDRh09dBVk0L0W4cb2lnurRJa3cAyic6hHY+we1S58OdGYRbKmOsDpGQ==", + "dev": true, "requires": { "@babel/runtime": "^7.23.9", "@floating-ui/react-dom": "^2.0.8", @@ -21691,21 +21783,6 @@ "@babel/runtime": "^7.23.9" } }, - "@mui/lab": { - "version": "5.0.0-alpha.165", - "resolved": "https://registry.npmjs.org/@mui/lab/-/lab-5.0.0-alpha.165.tgz", - "integrity": "sha512-8/zJStT10nh9yrAzLOPTICGhpf5YiGp/JpM0bdTP7u5AE+YT+X2u6QwMxuCrVeW8/WVLAPFg0vtzyfgPcN5T7g==", - "dev": true, - "requires": { - "@babel/runtime": "^7.23.9", - "@mui/base": "5.0.0-beta.36", - "@mui/system": "^5.15.9", - "@mui/types": "^7.2.13", - "@mui/utils": "^5.15.9", - "clsx": "^2.1.0", - "prop-types": "^15.8.1" - } - }, "@mui/material": { "version": "5.15.10", "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.15.10.tgz", @@ -21793,7 +21870,8 @@ "@mui/types": { "version": "7.2.13", "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.13.tgz", - "integrity": "sha512-qP9OgacN62s+l8rdDhSFRe05HWtLLJ5TGclC9I1+tQngbssu0m2dmFZs+Px53AcOs9fD7TbYd4gc9AXzVqO/+g==" + "integrity": "sha512-qP9OgacN62s+l8rdDhSFRe05HWtLLJ5TGclC9I1+tQngbssu0m2dmFZs+Px53AcOs9fD7TbYd4gc9AXzVqO/+g==", + "dev": true }, "@mui/utils": { "version": "5.15.9", @@ -21807,17 +21885,34 @@ } }, "@mui/x-date-pickers": { - "version": "6.19.4", - "resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-6.19.4.tgz", - "integrity": "sha512-LekaacLGnoQNN5hD6iXeHFL4LbZPnr1BM57hnUKy5UgKDHqzHzZSdPGc2p7Ktv/Z2NDbpPaLEAgrLwISKIYcow==", - "requires": { - "@babel/runtime": "^7.23.2", - "@mui/base": "^5.0.0-beta.22", - "@mui/utils": "^5.14.16", - "@types/react-transition-group": "^4.4.8", - "clsx": "^2.0.0", - "prop-types": "^15.8.1", - "react-transition-group": "^4.4.5" + "version": "5.0.20", + "resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-5.0.20.tgz", + "integrity": "sha512-ERukSeHIoNLbI1C2XRhF9wRhqfsr+Q4B1SAw2ZlU7CWgcG8UBOxgqRKDEOVAIoSWL+DWT6GRuQjOKvj6UXZceA==", + "requires": { + "@babel/runtime": "^7.18.9", + "@date-io/core": "^2.15.0", + "@date-io/date-fns": "^2.15.0", + "@date-io/dayjs": "^2.15.0", + "@date-io/luxon": "^2.15.0", + "@date-io/moment": "^2.15.0", + "@mui/utils": "^5.10.3", + "@types/react-transition-group": "^4.4.5", + "clsx": "^1.2.1", + "prop-types": "^15.7.2", + "react-transition-group": "^4.4.5", + "rifm": "^0.12.1" + }, + "dependencies": { + "@date-io/core": { + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/@date-io/core/-/core-2.17.0.tgz", + "integrity": "sha512-+EQE8xZhRM/hsY0CDTVyayMDDY5ihc4MqXCrPxooKw19yAzUIC6uUqsZeaOFNL9YKTNxYKrJP5DFgE8o5xRCOw==" + }, + "clsx": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", + "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==" + } } }, "@nicolo-ribaudo/chokidar-2": { @@ -21869,7 +21964,8 @@ "@popperjs/core": { "version": "2.11.8", "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", - "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==" + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "dev": true }, "@sinclair/typebox": { "version": "0.27.8", @@ -23718,7 +23814,8 @@ "clsx": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.0.tgz", - "integrity": "sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==" + "integrity": "sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==", + "dev": true }, "co": { "version": "4.6.0", @@ -30743,6 +30840,11 @@ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true }, + "rifm": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/rifm/-/rifm-0.12.1.tgz", + "integrity": "sha512-OGA1Bitg/dSJtI/c4dh90svzaUPt228kzFsUkJbtA2c964IqEAwWXeL9ZJi86xWv3j5SMqRvGULl7bA6cK0Bvg==" + }, "rimraf": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", diff --git a/package.json b/package.json index d1c942b..7a8d1bb 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "@date-io/date-fns": "^2.17.0", "@emotion/react": "^11.11.3", "@emotion/styled": "^11.11.0", - "@mui/x-date-pickers": "^6.19.4", + "@mui/x-date-pickers": "^5.0.20", "classnames": "^2.5.1", "date-fns": "^2.23.0", "history": "^4.10.1", @@ -44,7 +44,6 @@ }, "peerDependencies": { "@mui/icons-material": "^5.15.10", - "@mui/lab": "^5.0.0-alpha.165", "@mui/material": "^5.15.10", "@mui/styles": "^5.15.10", "final-form": "^4.20.10", @@ -63,7 +62,6 @@ "@babel/preset-react": "7.23.3", "@date-io/core": "1.3.8", "@mui/icons-material": "^5.15.10", - "@mui/lab": "^5.0.0-alpha.165", "@mui/material": "^5.15.10", "@mui/styles": "^5.15.10", "@testing-library/dom": "^9.3.4", diff --git a/src/forms/fields/DateField.js b/src/forms/fields/DateField.js index 2736afb..643c593 100644 --- a/src/forms/fields/DateField.js +++ b/src/forms/fields/DateField.js @@ -1,5 +1,5 @@ -import { DatePicker } from "@mui/lab"; import { TextField } from "@mui/material"; +import { DatePicker } from "@mui/x-date-pickers"; import React from "react"; const DateField = ({ input: { onChange, ...inputProps }, fieldProps }) => { diff --git a/src/forms/fields/DateTimeField.js b/src/forms/fields/DateTimeField.js index 1712d03..d8f6937 100644 --- a/src/forms/fields/DateTimeField.js +++ b/src/forms/fields/DateTimeField.js @@ -1,5 +1,5 @@ -import { DateTimePicker } from "@mui/lab"; import { TextField } from "@mui/material"; +import { DateTimePicker } from "@mui/x-date-pickers"; import React from "react"; const DateTimeField = ({ input: { onChange, ...inputProps }, fieldProps }) => { From 70f00f97e25cf9c24d7ed417aafa814c51213cff Mon Sep 17 00:00:00 2001 From: akeamc Date: Mon, 26 Feb 2024 15:08:10 +0100 Subject: [PATCH 3/4] Fix most warnings --- tests/app.test.js | 37 +++++++++++++++++++++---------------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/tests/app.test.js b/tests/app.test.js index 5b8d35f..d5d1288 100644 --- a/tests/app.test.js +++ b/tests/app.test.js @@ -1,6 +1,7 @@ import "@testing-library/jest-dom"; import { + act, cleanup, fireEvent, render, @@ -94,6 +95,8 @@ test("Can shutdown", async () => { const { app, queryByTestId } = await renderApp({ anonymous: true }); expect(queryByTestId("bootscreen")).toBeFalsy(); + // FIXME: This should use `act` but somehow that breaks all the tests in this + // suite. gl/hf await app.shutdown(); expect(queryByTestId("bootscreen")).toBeTruthy(); }); @@ -165,7 +168,7 @@ test("Handles unauthenticated page load", async () => { status: 403, }); - app.router.route(userListRoute.path); + act(() => app.router.route(userListRoute.path)); await waitFor(() => getByLabelText("login"), { container }); }); @@ -178,20 +181,20 @@ test("Handles unauthorized page load", async () => { status: 403, }); - app.router.route(userListRoute.path); + act(() => app.router.route(userListRoute.path)); await waitFor(() => getByText("Status: 403"), { container }); expect(getByText(/You are authenticated as admin/)).toBeDefined(); }); test("Handles 404", async () => { const { app, container, getByText } = await renderApp(); - app.router.route("/foobar/"); + act(() => app.router.route("/foobar/")); await waitFor(() => getByText("Status: 404"), { container }); }); test("Handles 501", async () => { const { app, container, getByText } = await renderApp(); - app.router.route({ id: "bananas.i18n:list" }); + act(() => app.router.route({ id: "bananas.i18n:list" })); await waitFor(() => getByText("Status: 501"), { container }); }); @@ -237,16 +240,16 @@ test("Can show and dismiss messages", async () => { // Expect no messages showing expect(queryByTestId("Message")).toBeNull(); - app.admin.success("SUCCESS_MSG"); + act(() => app.admin.success("SUCCESS_MSG")); await waitFor(() => getByText("SUCCESS_MSG"), { container }); - app.admin.info("INFO_MSG"); + act(() => app.admin.info("INFO_MSG")); await waitFor(() => getByText("INFO_MSG"), { container }); - app.admin.warning("WARNING_MSG"); + act(() => app.admin.warning("WARNING_MSG")); await waitFor(() => getByText("WARNING_MSG"), { container }); - app.admin.error("ERROR_MSG"); + act(() => app.admin.error("ERROR_MSG")); await waitFor(() => getByText("ERROR_MSG"), { container }); // Click X icon and expect error message to go away, the other ones goes away by clickAway @@ -264,7 +267,7 @@ test("Can show and dismiss messages", async () => { test("Can show simple alert", async () => { const { app, container, getByText } = await renderApp(); - app.admin.alert("AlertMessageOnly"); + act(() => app.admin.alert("AlertMessageOnly")); await waitFor(() => getByText("AlertMessageOnly"), { container }); }); @@ -284,7 +287,7 @@ test("Can show configured alert", async () => { }; // Show and wait for alert - app.admin.alert(alert); + act(() => app.admin.alert(alert)); await waitFor(() => getByText("AlertTitle"), { container }); const agreeButton = getByText("AlertAgree"); @@ -298,7 +301,7 @@ test("Can show configured alert", async () => { await waitFor(() => expect(dismissed).toHaveBeenCalledTimes(1)); // Show and wait for another alert - app.admin.alert(alert); + act(() => app.admin.alert(alert)); await waitFor(() => getByText("AlertTitle"), { container }); // Click agree button and expect onAgree callback to been called @@ -309,7 +312,7 @@ test("Can show configured alert", async () => { test("Can show simple confirm", async () => { const { app, container, getByText } = await renderApp(); - app.admin.confirm("ConfirmMessageOnly"); + act(() => app.admin.confirm("ConfirmMessageOnly")); await waitFor(() => getByText("Är du säker?"), { container }); expect(getByText("ConfirmMessageOnly")).toBeTruthy(); }); @@ -317,7 +320,9 @@ test("Can show simple confirm", async () => { test("Can show configured confirm", async () => { const { app, container, getByText } = await renderApp(); - app.admin.confirm({ message: "ConfirmMessageOnly", agree: "ConfirmAgree" }); + act(() => + app.admin.confirm({ message: "ConfirmMessageOnly", agree: "ConfirmAgree" }) + ); await waitFor(() => getByText("Är du säker?"), { container }); expect(getByText("ConfirmMessageOnly")).toBeTruthy(); expect(getByText("ConfirmAgree")).toBeTruthy(); @@ -412,13 +417,13 @@ test("A hash change will trigger rerender", async () => { const userListRoute = app.router.getRoute("example.user:list"); fetchMock.mock(`http://foo.bar/api/v1.0${userListRoute.path}`, { body: [] }); - app.router.reroute({ id: "example.user:list" }); + act(() => app.router.reroute({ id: "example.user:list" })); await waitFor(() => getByText("Hash: none"), { container }); - app.router.reroute({ id: "example.user:list", hash: "#foo" }); + act(() => app.router.reroute({ id: "example.user:list", hash: "#foo" })); await waitFor(() => getByText("Hash: foo"), { container }); - app.router.reroute({ id: "example.user:list", hash: "#bar" }); + act(() => app.router.reroute({ id: "example.user:list", hash: "#bar" })); await waitFor(() => getByText("Hash: bar"), { container }); }); From e0b43d79198c91e52b66c4a958efcd65414f5209 Mon Sep 17 00:00:00 2001 From: akeamc Date: Mon, 26 Feb 2024 15:23:18 +0100 Subject: [PATCH 4/4] Fix test --- tests/app.test.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/tests/app.test.js b/tests/app.test.js index d5d1288..16d1624 100644 --- a/tests/app.test.js +++ b/tests/app.test.js @@ -92,13 +92,15 @@ test("Can boot and login", async () => { }); test("Can shutdown", async () => { - const { app, queryByTestId } = await renderApp({ anonymous: true }); + const { app, queryByTestId, findByTestId } = await renderApp({ + anonymous: true, + }); expect(queryByTestId("bootscreen")).toBeFalsy(); - // FIXME: This should use `act` but somehow that breaks all the tests in this - // suite. gl/hf - await app.shutdown(); - expect(queryByTestId("bootscreen")).toBeTruthy(); + act(() => { + app.shutdown(); + }); + expect(await findByTestId("bootscreen")).toBeTruthy(); }); test("Can render dashboard and navigate using menu", async () => {