From f1136b57dd6b4cbcb7628dcbf6b1ac46e2a8301b Mon Sep 17 00:00:00 2001 From: Kamil Gabryjelski Date: Mon, 5 Aug 2024 17:17:59 +0200 Subject: [PATCH] perf: Remove antd-with-locales import (#29788) --- superset-frontend/package-lock.json | 405 ++++++++++++++---- superset-frontend/package.json | 6 +- .../superset-ui-chart-controls/package.json | 4 +- .../packages/superset-ui-core/package.json | 4 +- .../plugins/plugin-chart-table/package.json | 4 +- .../components/CustomFrame.tsx | 32 +- .../tests/CustomFrame.test.tsx | 45 +- .../DateFilterControl/utils/constants.ts | 28 +- 8 files changed, 413 insertions(+), 115 deletions(-) diff --git a/superset-frontend/package-lock.json b/superset-frontend/package-lock.json index dbebf1311..77604f11c 100644 --- a/superset-frontend/package-lock.json +++ b/superset-frontend/package-lock.json @@ -172,9 +172,9 @@ "@storybook/react": "8.1.11", "@storybook/react-webpack5": "8.1.11", "@svgr/webpack": "^8.1.0", - "@testing-library/dom": "^7.29.4", + "@testing-library/dom": "^8.20.1", "@testing-library/jest-dom": "^5.11.6", - "@testing-library/react": "^11.2.0", + "@testing-library/react": "^12.1.5", "@testing-library/react-hooks": "^5.1.3", "@testing-library/user-event": "^12.7.0", "@types/classnames": "^2.2.10", @@ -3655,6 +3655,7 @@ "version": "7.22.6", "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.22.6.tgz", "integrity": "sha512-M+37LLIRBTEVjktoJjbw4KVhupF0U/3PYUCbBwgAd9k17hoKhRu1n935QiG7Tuxv0LJOMrb2vuKEeYUlv0iyiw==", + "dev": true, "dependencies": { "core-js-pure": "^3.30.2", "regenerator-runtime": "^0.13.11" @@ -3666,7 +3667,8 @@ "node_modules/@babel/runtime-corejs3/node_modules/regenerator-runtime": { "version": "0.13.11", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "dev": true }, "node_modules/@babel/template": { "version": "7.24.7", @@ -7446,6 +7448,7 @@ "version": "26.6.2", "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "dev": true, "dependencies": { "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", @@ -7461,6 +7464,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", + "dev": true, "dependencies": { "@types/istanbul-lib-report": "*" } @@ -7469,6 +7473,7 @@ "version": "15.0.19", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.19.tgz", "integrity": "sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==", + "dev": true, "dependencies": { "@types/yargs-parser": "*" } @@ -15019,22 +15024,29 @@ } }, "node_modules/@testing-library/dom": { - "version": "7.31.2", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-7.31.2.tgz", - "integrity": "sha512-3UqjCpey6HiTZT92vODYLPxTBWlM8ZOOjr3LX5F37/VRipW2M1kX6I/Cm4VXzteZqfGfagg8yXywpcOgQBlNsQ==", - "license": "MIT", + "version": "8.20.1", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.20.1.tgz", + "integrity": "sha512-/DiOQ5xBxgdYRC8LNk7U+RWat0S3qRLeIw3ZIkMQ9kkVlRmwD/Eg8k8CqIpD6GW7u20JIUOfMKbxtiLutpjQ4g==", "dependencies": { "@babel/code-frame": "^7.10.4", "@babel/runtime": "^7.12.5", - "@types/aria-query": "^4.2.0", - "aria-query": "^4.2.2", + "@types/aria-query": "^5.0.1", + "aria-query": "5.1.3", "chalk": "^4.1.0", - "dom-accessibility-api": "^0.5.6", - "lz-string": "^1.4.4", - "pretty-format": "^26.6.2" + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "pretty-format": "^27.0.2" }, "engines": { - "node": ">=10" + "node": ">=12" + } + }, + "node_modules/@testing-library/dom/node_modules/aria-query": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "dependencies": { + "deep-equal": "^2.0.5" } }, "node_modules/@testing-library/jest-dom": { @@ -15079,19 +15091,21 @@ } }, "node_modules/@testing-library/react": { - "version": "11.2.7", - "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-11.2.7.tgz", - "integrity": "sha512-tzRNp7pzd5QmbtXNG/mhdcl7Awfu/Iz1RaVHY75zTdOkmHCuzMhRL83gWHSgOAcjS3CCbyfwUHMZgRJb4kAfpA==", + "version": "12.1.5", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-12.1.5.tgz", + "integrity": "sha512-OfTXCJUFgjd/digLUuPxa0+/3ZxsQmE7ub9kcbW/wi96Bh3o/p5vrETcBGfP17NWPGqeYYl5LTRpwyGoMC4ysg==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.12.5", - "@testing-library/dom": "^7.28.1" + "@testing-library/dom": "^8.0.0", + "@types/react-dom": "<18.0.0" }, "engines": { - "node": ">=10" + "node": ">=12" }, "peerDependencies": { - "react": "*", - "react-dom": "*" + "react": "<18.0.0", + "react-dom": "<18.0.0" } }, "node_modules/@testing-library/react-hooks": { @@ -15303,10 +15317,9 @@ } }, "node_modules/@types/aria-query": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-4.2.2.tgz", - "integrity": "sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig==", - "license": "MIT" + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", + "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==" }, "node_modules/@types/babel__core": { "version": "7.20.5", @@ -19398,6 +19411,7 @@ "version": "4.2.2", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", + "dev": true, "dependencies": { "@babel/runtime": "^7.10.2", "@babel/runtime-corejs3": "^7.10.2" @@ -23112,6 +23126,7 @@ "version": "3.31.1", "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.31.1.tgz", "integrity": "sha512-w+C62kvWti0EPs4KPMCMVv9DriHSXfQOCQ94bGGBiEW5rrbtt/Rz8n5Krhfw9cpFyzXBjf3DB3QnPdEzGDY4Fw==", + "dev": true, "hasInstallScript": true, "funding": { "type": "opencollective", @@ -24554,6 +24569,37 @@ "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", "dev": true }, + "node_modules/deep-equal": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", + "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==", + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.5", + "es-get-iterator": "^1.1.3", + "get-intrinsic": "^1.2.2", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.2", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/deep-equal-ident": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/deep-equal-ident/-/deep-equal-ident-1.1.1.tgz", @@ -24573,6 +24619,11 @@ "lodash._bindcallback": "^3.0.0" } }, + "node_modules/deep-equal/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + }, "node_modules/deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", @@ -26049,6 +26100,30 @@ "node": ">= 0.4" } }, + "node_modules/es-get-iterator": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", + "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-get-iterator/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + }, "node_modules/es-iterator-helpers": { "version": "1.0.17", "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.17.tgz", @@ -26694,6 +26769,52 @@ "eslint": ">=6.8" } }, + "node_modules/eslint-plugin-jest-dom/node_modules/@testing-library/dom": { + "version": "7.31.2", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-7.31.2.tgz", + "integrity": "sha512-3UqjCpey6HiTZT92vODYLPxTBWlM8ZOOjr3LX5F37/VRipW2M1kX6I/Cm4VXzteZqfGfagg8yXywpcOgQBlNsQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^4.2.0", + "aria-query": "^4.2.2", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.6", + "lz-string": "^1.4.4", + "pretty-format": "^26.6.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-plugin-jest-dom/node_modules/@types/aria-query": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-4.2.2.tgz", + "integrity": "sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig==", + "dev": true + }, + "node_modules/eslint-plugin-jest-dom/node_modules/pretty-format": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/eslint-plugin-jest-dom/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, "node_modules/eslint-plugin-jsx-a11y": { "version": "6.5.1", "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.5.1.tgz", @@ -33818,7 +33939,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", - "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -33962,7 +34082,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", - "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -34083,7 +34202,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", - "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -34103,7 +34221,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" @@ -51461,17 +51578,27 @@ } }, "node_modules/pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", "dependencies": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", "react-is": "^17.0.1" }, "engines": { - "node": ">= 10" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/pretty-format/node_modules/react-is": { @@ -57944,6 +58071,17 @@ "node": ">=0.10.0" } }, + "node_modules/stop-iteration-iterator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", + "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", + "dependencies": { + "internal-slot": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/store2": { "version": "2.14.2", "resolved": "https://registry.npmjs.org/store2/-/store2-2.14.2.tgz", @@ -61444,7 +61582,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", - "dev": true, "dependencies": { "is-map": "^2.0.1", "is-set": "^2.0.1", @@ -64308,9 +64445,9 @@ "@ant-design/icons": "^5.0.1", "@emotion/react": "^11.4.1", "@superset-ui/core": "*", - "@testing-library/dom": "^7.29.4", + "@testing-library/dom": "^8.20.1", "@testing-library/jest-dom": "^5.11.6", - "@testing-library/react": "^11.2.0", + "@testing-library/react": "^12.1.5", "@testing-library/react-hooks": "^5.0.3", "@testing-library/user-event": "^12.7.0", "ace-builds": "^1.4.14", @@ -64377,9 +64514,9 @@ "@emotion/cache": "^11.4.0", "@emotion/react": "^11.4.1", "@emotion/styled": "^11.3.0", - "@testing-library/dom": "^7.29.4", + "@testing-library/dom": "^8.20.1", "@testing-library/jest-dom": "^5.11.6", - "@testing-library/react": "^11.2.0", + "@testing-library/react": "^12.1.5", "@testing-library/user-event": "^12.7.0", "@types/react": "*", "@types/react-loadable": "*", @@ -66217,9 +66354,9 @@ "@ant-design/icons": "^5.0.1", "@superset-ui/chart-controls": "*", "@superset-ui/core": "*", - "@testing-library/dom": "^7.29.4", + "@testing-library/dom": "^8.20.1", "@testing-library/jest-dom": "^5.11.6", - "@testing-library/react": "^11.2.0", + "@testing-library/react": "^12.1.5", "@testing-library/react-hooks": "^5.0.3", "@testing-library/user-event": "^12.7.0", "@types/classnames": "*", @@ -68736,6 +68873,7 @@ "version": "7.22.6", "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.22.6.tgz", "integrity": "sha512-M+37LLIRBTEVjktoJjbw4KVhupF0U/3PYUCbBwgAd9k17hoKhRu1n935QiG7Tuxv0LJOMrb2vuKEeYUlv0iyiw==", + "dev": true, "requires": { "core-js-pure": "^3.30.2", "regenerator-runtime": "^0.13.11" @@ -68744,7 +68882,8 @@ "regenerator-runtime": { "version": "0.13.11", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "dev": true } } }, @@ -71583,6 +71722,7 @@ "version": "26.6.2", "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", @@ -71595,6 +71735,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", + "dev": true, "requires": { "@types/istanbul-lib-report": "*" } @@ -71603,6 +71744,7 @@ "version": "15.0.19", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.19.tgz", "integrity": "sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==", + "dev": true, "requires": { "@types/yargs-parser": "*" } @@ -79480,18 +79622,28 @@ } }, "@testing-library/dom": { - "version": "7.31.2", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-7.31.2.tgz", - "integrity": "sha512-3UqjCpey6HiTZT92vODYLPxTBWlM8ZOOjr3LX5F37/VRipW2M1kX6I/Cm4VXzteZqfGfagg8yXywpcOgQBlNsQ==", + "version": "8.20.1", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.20.1.tgz", + "integrity": "sha512-/DiOQ5xBxgdYRC8LNk7U+RWat0S3qRLeIw3ZIkMQ9kkVlRmwD/Eg8k8CqIpD6GW7u20JIUOfMKbxtiLutpjQ4g==", "requires": { "@babel/code-frame": "^7.10.4", "@babel/runtime": "^7.12.5", - "@types/aria-query": "^4.2.0", - "aria-query": "^4.2.2", + "@types/aria-query": "^5.0.1", + "aria-query": "5.1.3", "chalk": "^4.1.0", - "dom-accessibility-api": "^0.5.6", - "lz-string": "^1.4.4", - "pretty-format": "^26.6.2" + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "pretty-format": "^27.0.2" + }, + "dependencies": { + "aria-query": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "requires": { + "deep-equal": "^2.0.5" + } + } } }, "@testing-library/jest-dom": { @@ -79530,12 +79682,13 @@ } }, "@testing-library/react": { - "version": "11.2.7", - "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-11.2.7.tgz", - "integrity": "sha512-tzRNp7pzd5QmbtXNG/mhdcl7Awfu/Iz1RaVHY75zTdOkmHCuzMhRL83gWHSgOAcjS3CCbyfwUHMZgRJb4kAfpA==", + "version": "12.1.5", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-12.1.5.tgz", + "integrity": "sha512-OfTXCJUFgjd/digLUuPxa0+/3ZxsQmE7ub9kcbW/wi96Bh3o/p5vrETcBGfP17NWPGqeYYl5LTRpwyGoMC4ysg==", "requires": { "@babel/runtime": "^7.12.5", - "@testing-library/dom": "^7.28.1" + "@testing-library/dom": "^8.0.0", + "@types/react-dom": "<18.0.0" } }, "@testing-library/react-hooks": { @@ -79705,9 +79858,9 @@ } }, "@types/aria-query": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-4.2.2.tgz", - "integrity": "sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig==" + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", + "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==" }, "@types/babel__core": { "version": "7.20.5", @@ -83105,6 +83258,7 @@ "version": "4.2.2", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", + "dev": true, "requires": { "@babel/runtime": "^7.10.2", "@babel/runtime-corejs3": "^7.10.2" @@ -85914,7 +86068,8 @@ "core-js-pure": { "version": "3.31.1", "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.31.1.tgz", - "integrity": "sha512-w+C62kvWti0EPs4KPMCMVv9DriHSXfQOCQ94bGGBiEW5rrbtt/Rz8n5Krhfw9cpFyzXBjf3DB3QnPdEzGDY4Fw==" + "integrity": "sha512-w+C62kvWti0EPs4KPMCMVv9DriHSXfQOCQ94bGGBiEW5rrbtt/Rz8n5Krhfw9cpFyzXBjf3DB3QnPdEzGDY4Fw==", + "dev": true }, "core-util-is": { "version": "1.0.2", @@ -87051,6 +87206,38 @@ "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", "dev": true }, + "deep-equal": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", + "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==", + "requires": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.5", + "es-get-iterator": "^1.1.3", + "get-intrinsic": "^1.2.2", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.2", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.13" + }, + "dependencies": { + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + } + } + }, "deep-equal-ident": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/deep-equal-ident/-/deep-equal-ident-1.1.1.tgz", @@ -88220,6 +88407,29 @@ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==" }, + "es-get-iterator": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", + "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" + }, + "dependencies": { + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + } + } + }, "es-iterator-helpers": { "version": "1.0.17", "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.17.tgz", @@ -88906,6 +89116,48 @@ "@babel/runtime": "^7.9.6", "@testing-library/dom": "^7.28.1", "requireindex": "^1.2.0" + }, + "dependencies": { + "@testing-library/dom": { + "version": "7.31.2", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-7.31.2.tgz", + "integrity": "sha512-3UqjCpey6HiTZT92vODYLPxTBWlM8ZOOjr3LX5F37/VRipW2M1kX6I/Cm4VXzteZqfGfagg8yXywpcOgQBlNsQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^4.2.0", + "aria-query": "^4.2.2", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.6", + "lz-string": "^1.4.4", + "pretty-format": "^26.6.2" + } + }, + "@types/aria-query": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-4.2.2.tgz", + "integrity": "sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig==", + "dev": true + }, + "pretty-format": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^17.0.1" + } + }, + "react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + } } }, "eslint-plugin-jsx-a11y": { @@ -93929,8 +94181,7 @@ "is-map": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", - "dev": true + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==" }, "is-nan": { "version": "1.3.2", @@ -94028,8 +94279,7 @@ "is-set": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", - "dev": true + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==" }, "is-shared-array-buffer": { "version": "1.0.2", @@ -94111,8 +94361,7 @@ "is-weakmap": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", - "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", - "dev": true + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==" }, "is-weakref": { "version": "1.0.2", @@ -94126,7 +94375,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", - "dev": true, "requires": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" @@ -106100,16 +106348,20 @@ } }, "pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", "react-is": "^17.0.1" }, "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" + }, "react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", @@ -110915,6 +111167,14 @@ "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", "dev": true }, + "stop-iteration-iterator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", + "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", + "requires": { + "internal-slot": "^1.0.4" + } + }, "store2": { "version": "2.14.2", "resolved": "https://registry.npmjs.org/store2/-/store2-2.14.2.tgz", @@ -113495,7 +113755,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", - "dev": true, "requires": { "is-map": "^2.0.1", "is-set": "^2.0.1", diff --git a/superset-frontend/package.json b/superset-frontend/package.json index aae88e280..2420cb056 100644 --- a/superset-frontend/package.json +++ b/superset-frontend/package.json @@ -232,14 +232,14 @@ "@storybook/addon-essentials": "8.1.11", "@storybook/addon-links": "8.1.11", "@storybook/addon-mdx-gfm": "8.1.11", - "@storybook/preview-api": "8.1.11", "@storybook/components": "8.1.11", + "@storybook/preview-api": "8.1.11", "@storybook/react": "8.1.11", "@storybook/react-webpack5": "8.1.11", "@svgr/webpack": "^8.1.0", - "@testing-library/dom": "^7.29.4", + "@testing-library/dom": "^8.20.1", "@testing-library/jest-dom": "^5.11.6", - "@testing-library/react": "^11.2.0", + "@testing-library/react": "^12.1.5", "@testing-library/react-hooks": "^5.1.3", "@testing-library/user-event": "^12.7.0", "@types/classnames": "^2.2.10", diff --git a/superset-frontend/packages/superset-ui-chart-controls/package.json b/superset-frontend/packages/superset-ui-chart-controls/package.json index 40a60e61a..c7ce78a60 100644 --- a/superset-frontend/packages/superset-ui-chart-controls/package.json +++ b/superset-frontend/packages/superset-ui-chart-controls/package.json @@ -34,9 +34,9 @@ "@ant-design/icons": "^5.0.1", "@emotion/react": "^11.4.1", "@superset-ui/core": "*", - "@testing-library/dom": "^7.29.4", + "@testing-library/dom": "^8.20.1", "@testing-library/jest-dom": "^5.11.6", - "@testing-library/react": "^11.2.0", + "@testing-library/react": "^12.1.5", "@testing-library/react-hooks": "^5.0.3", "@testing-library/user-event": "^12.7.0", "ace-builds": "^1.4.14", diff --git a/superset-frontend/packages/superset-ui-core/package.json b/superset-frontend/packages/superset-ui-core/package.json index aa537d7f7..581ccf9a4 100644 --- a/superset-frontend/packages/superset-ui-core/package.json +++ b/superset-frontend/packages/superset-ui-core/package.json @@ -74,9 +74,9 @@ "@emotion/cache": "^11.4.0", "@emotion/react": "^11.4.1", "@emotion/styled": "^11.3.0", - "@testing-library/dom": "^7.29.4", + "@testing-library/dom": "^8.20.1", "@testing-library/jest-dom": "^5.11.6", - "@testing-library/react": "^11.2.0", + "@testing-library/react": "^12.1.5", "@testing-library/user-event": "^12.7.0", "@types/react": "*", "@types/react-loadable": "*", diff --git a/superset-frontend/plugins/plugin-chart-table/package.json b/superset-frontend/plugins/plugin-chart-table/package.json index 292c6da48..a56cd724b 100644 --- a/superset-frontend/plugins/plugin-chart-table/package.json +++ b/superset-frontend/plugins/plugin-chart-table/package.json @@ -40,9 +40,9 @@ "@ant-design/icons": "^5.0.1", "@superset-ui/chart-controls": "*", "@superset-ui/core": "*", - "@testing-library/dom": "^7.29.4", + "@testing-library/dom": "^8.20.1", "@testing-library/jest-dom": "^5.11.6", - "@testing-library/react": "^11.2.0", + "@testing-library/react": "^12.1.5", "@testing-library/react-hooks": "^5.0.3", "@testing-library/user-event": "^12.7.0", "@types/classnames": "*", diff --git a/superset-frontend/src/explore/components/controls/DateFilterControl/components/CustomFrame.tsx b/superset-frontend/src/explore/components/controls/DateFilterControl/components/CustomFrame.tsx index d3448d2a5..f046b7f03 100644 --- a/superset-frontend/src/explore/components/controls/DateFilterControl/components/CustomFrame.tsx +++ b/superset-frontend/src/explore/components/controls/DateFilterControl/components/CustomFrame.tsx @@ -16,18 +16,18 @@ * specific language governing permissions and limitations * under the License. */ +import { useEffect, useState } from 'react'; import { useSelector } from 'react-redux'; -import { t, customTimeRangeDecode } from '@superset-ui/core'; +import type { PickerLocale } from 'antd/lib/date-picker/generatePicker'; import { Moment } from 'moment'; import { isInteger } from 'lodash'; -// @ts-ignore -import { locales } from 'antd/dist/antd-with-locales'; +import { t, customTimeRangeDecode } from '@superset-ui/core'; +import { InfoTooltipWithTrigger } from '@superset-ui/chart-controls'; import { Col, Row } from 'src/components'; import { InputNumber } from 'src/components/Input'; import { DatePicker } from 'src/components/DatePicker'; import { Radio } from 'src/components/Radio'; import Select from 'src/components/Select/Select'; -import { InfoTooltipWithTrigger } from '@superset-ui/chart-controls'; import { SINCE_GRAIN_OPTIONS, SINCE_MODE_OPTIONS, @@ -44,9 +44,13 @@ import { FrameComponentProps, } from 'src/explore/components/controls/DateFilterControl/types'; import { ExplorePageState } from 'src/explore/types'; +import Loading from 'src/components/Loading'; export function CustomFrame(props: FrameComponentProps) { const { customRange, matchedFlag } = customTimeRangeDecode(props.value); + const [datePickerLocale, setDatePickerLocale] = useState< + PickerLocale | undefined | null + >(null); if (!matchedFlag) { props.onChange(customTimeRangeEncode(customRange)); } @@ -112,11 +116,27 @@ export function CustomFrame(props: FrameComponentProps) { const localFromFlaskBabel = useSelector( (state: ExplorePageState) => state?.common?.locale, ); + // An undefined datePickerLocale is acceptable if no match is found in the LOCALE_MAPPING[localFromFlaskBabel] lookup // and will fall back to antd's default locale when the antd DataPicker's prop locale === undefined // This also protects us from the case where state is populated with a locale that antd locales does not recognize - const datePickerLocale = - locales[LOCALE_MAPPING[localFromFlaskBabel]]?.DatePicker; + useEffect(() => { + if (datePickerLocale === null) { + if (localFromFlaskBabel && LOCALE_MAPPING[localFromFlaskBabel]) { + LOCALE_MAPPING[localFromFlaskBabel]() + .then((locale: { default: PickerLocale }) => + setDatePickerLocale(locale.default), + ) + .catch(() => setDatePickerLocale(undefined)); + } else { + setDatePickerLocale(undefined); + } + } + }, [datePickerLocale, localFromFlaskBabel]); + + if (datePickerLocale === null) { + return ; + } return (
diff --git a/superset-frontend/src/explore/components/controls/DateFilterControl/tests/CustomFrame.test.tsx b/superset-frontend/src/explore/components/controls/DateFilterControl/tests/CustomFrame.test.tsx index 91c138d22..f566d4f0f 100644 --- a/superset-frontend/src/explore/components/controls/DateFilterControl/tests/CustomFrame.test.tsx +++ b/superset-frontend/src/explore/components/controls/DateFilterControl/tests/CustomFrame.test.tsx @@ -19,7 +19,12 @@ import thunk from 'redux-thunk'; import { Provider } from 'react-redux'; import configureStore from 'redux-mock-store'; -import { render, screen } from 'spec/helpers/testing-library'; +import { + render, + screen, + waitForElementToBeRemoved, + waitFor, +} from 'spec/helpers/testing-library'; import userEvent from '@testing-library/user-event'; import { CustomFrame } from '../components'; @@ -44,12 +49,14 @@ const emptyStore = mockStore({}); // case when common.locale is populated with invalid locale const invalidStore = mockStore({ common: { locale: 'invalid_locale' } }); -test('renders with default props', () => { +test('renders with default props', async () => { render( , ); + expect(screen.getByLabelText('Loading')).toBeVisible(); + await waitForElementToBeRemoved(() => screen.queryByLabelText('Loading')); expect(screen.getByText('Configure custom time range')).toBeInTheDocument(); expect(screen.getByText('Relative Date/Time')).toBeInTheDocument(); expect(screen.getByRole('spinbutton')).toBeInTheDocument(); @@ -106,88 +113,96 @@ test('renders since and until with specific date/time with invalid locale', () = expect(screen.getAllByRole('img', { name: 'calendar' }).length).toBe(2); }); -test('renders since and until with specific date/time', () => { +test('renders since and until with specific date/time', async () => { render( , ); + await waitForElementToBeRemoved(() => screen.queryByLabelText('Loading')); expect(screen.getAllByText('Specific Date/Time').length).toBe(2); expect(screen.getAllByRole('img', { name: 'calendar' }).length).toBe(2); }); -test('renders since and until with relative date/time', () => { +test('renders since and until with relative date/time', async () => { render( , ); + await waitForElementToBeRemoved(() => screen.queryByLabelText('Loading')); expect(screen.getAllByText('Relative Date/Time').length).toBe(2); expect(screen.getAllByRole('spinbutton').length).toBe(2); expect(screen.getByText('Days Before')).toBeInTheDocument(); expect(screen.getByText('Days After')).toBeInTheDocument(); }); -test('renders since and until with Now option', () => { +test('renders since and until with Now option', async () => { render( , ); + await waitForElementToBeRemoved(() => screen.queryByLabelText('Loading')); expect(screen.getAllByText('Now').length).toBe(2); }); -test('renders since and until with Midnight option', () => { +test('renders since and until with Midnight option', async () => { render( , ); + await waitForElementToBeRemoved(() => screen.queryByLabelText('Loading')); expect(screen.getAllByText('Midnight').length).toBe(2); }); -test('renders anchor with now option', () => { +test('renders anchor with now option', async () => { render( , ); + await waitForElementToBeRemoved(() => screen.queryByLabelText('Loading')); expect(screen.getByText('Anchor to')).toBeInTheDocument(); expect(screen.getByRole('radio', { name: 'NOW' })).toBeInTheDocument(); expect(screen.getByRole('radio', { name: 'Date/Time' })).toBeInTheDocument(); expect(screen.queryByPlaceholderText('Select date')).not.toBeInTheDocument(); }); -test('renders anchor with date/time option', () => { +test('renders anchor with date/time option', async () => { render( , ); + await waitForElementToBeRemoved(() => screen.queryByLabelText('Loading')); expect(screen.getByText('Anchor to')).toBeInTheDocument(); expect(screen.getByRole('radio', { name: 'NOW' })).toBeInTheDocument(); expect(screen.getByRole('radio', { name: 'Date/Time' })).toBeInTheDocument(); expect(screen.getByPlaceholderText('Select date')).toBeInTheDocument(); }); -test('triggers onChange when the anchor changes', () => { +test('triggers onChange when the anchor changes', async () => { const onChange = jest.fn(); render( , ); + await waitForElementToBeRemoved(() => screen.queryByLabelText('Loading')); userEvent.click(screen.getByRole('radio', { name: 'Date/Time' })); expect(onChange).toHaveBeenCalled(); }); -test('triggers onChange when the value changes', () => { +test('triggers onChange when the value changes', async () => { const onChange = jest.fn(); render( , ); + await waitForElementToBeRemoved(() => screen.queryByLabelText('Loading')); userEvent.click(screen.getByRole('img', { name: 'up' })); expect(onChange).toHaveBeenCalled(); }); @@ -199,6 +214,7 @@ test('triggers onChange when the mode changes', async () => { , ); + await waitForElementToBeRemoved(() => screen.queryByLabelText('Loading')); userEvent.click(screen.getByTitle('Midnight')); expect(await screen.findByTitle('Relative Date/Time')).toBeInTheDocument(); userEvent.click(screen.getByTitle('Relative Date/Time')); @@ -207,7 +223,7 @@ test('triggers onChange when the mode changes', async () => { await screen.findByText('Configure custom time range'), ).toBeInTheDocument(); userEvent.click(screen.getAllByTitle('Specific Date/Time')[1]); - expect(onChange).toHaveBeenCalledTimes(2); + await waitFor(() => expect(onChange).toHaveBeenCalledTimes(2)); }); test('triggers onChange when the grain changes', async () => { @@ -217,13 +233,14 @@ test('triggers onChange when the grain changes', async () => { , ); + await waitForElementToBeRemoved(() => screen.queryByLabelText('Loading')); userEvent.click(screen.getByText('Days Before')); expect(await screen.findByText('Weeks Before')).toBeInTheDocument(); userEvent.click(screen.getByText('Weeks Before')); userEvent.click(screen.getByText('Days After')); expect(await screen.findByText('Weeks After')).toBeInTheDocument(); userEvent.click(screen.getByText('Weeks After')); - expect(onChange).toHaveBeenCalledTimes(2); + await waitFor(() => expect(onChange).toHaveBeenCalledTimes(2)); }); test('triggers onChange when the date changes', async () => { @@ -233,6 +250,7 @@ test('triggers onChange when the date changes', async () => { , ); + await waitForElementToBeRemoved(() => screen.queryByLabelText('Loading')); const inputs = screen.getAllByPlaceholderText('Select date'); userEvent.click(inputs[0]); userEvent.click(screen.getAllByText('Now')[0]); @@ -241,7 +259,7 @@ test('triggers onChange when the date changes', async () => { expect(onChange).toHaveBeenCalledTimes(2); }); -test('should translate Date Picker', () => { +test('should translate Date Picker', async () => { const onChange = jest.fn(); const store = mockStore({ common: { locale: 'fr' }, @@ -251,6 +269,7 @@ test('should translate Date Picker', () => { , ); + await waitForElementToBeRemoved(() => screen.queryByLabelText('Loading')); userEvent.click(screen.getAllByRole('img', { name: 'calendar' })[0]); expect(screen.getByText('2021')).toBeInTheDocument(); expect(screen.getByText('lu')).toBeInTheDocument(); diff --git a/superset-frontend/src/explore/components/controls/DateFilterControl/utils/constants.ts b/superset-frontend/src/explore/components/controls/DateFilterControl/utils/constants.ts index cad7a0e81..dee66da7d 100644 --- a/superset-frontend/src/explore/components/controls/DateFilterControl/utils/constants.ts +++ b/superset-frontend/src/explore/components/controls/DateFilterControl/utils/constants.ts @@ -139,20 +139,20 @@ export const SEVEN_DAYS_AGO = moment() export const MIDNIGHT = moment().utc().startOf('day').format(MOMENT_FORMAT); export const LOCALE_MAPPING = { - en: 'en_US', - fr: 'fr_FR', - es: 'es_ES', - it: 'it_IT', - zh: 'zh_CN', - ja: 'ja_JP', - de: 'de_DE', - pt: 'pt_PT', - pt_BR: 'pt_BR', - ru: 'ru_RU', - ko: 'ko_KR', - sk: 'sk_SK', - sl: 'sl_SI', - nl: 'nl_NL', + en: () => import('antd/lib/date-picker/locale/en_US'), + fr: () => import('antd/lib/date-picker/locale/fr_FR'), + es: () => import('antd/lib/date-picker/locale/es_ES'), + it: () => import('antd/lib/date-picker/locale/it_IT'), + zh: () => import('antd/lib/date-picker/locale/zh_CN'), + ja: () => import('antd/lib/date-picker/locale/ja_JP'), + de: () => import('antd/lib/date-picker/locale/de_DE'), + pt: () => import('antd/lib/date-picker/locale/pt_PT'), + pt_BR: () => import('antd/lib/date-picker/locale/pt_BR'), + ru: () => import('antd/lib/date-picker/locale/ru_RU'), + ko: () => import('antd/lib/date-picker/locale/ko_KR'), + sk: () => import('antd/lib/date-picker/locale/sk_SK'), + sl: () => import('antd/lib/date-picker/locale/sl_SI'), + nl: () => import('antd/lib/date-picker/locale/nl_NL'), }; export enum DateFilterTestKey {