From f1f2d19d88030cb251222e6512ab6c6a1d66153f Mon Sep 17 00:00:00 2001 From: Sergio Betanzos Date: Tue, 14 Dec 2021 12:43:40 +0100 Subject: [PATCH] F #5637: Add material timepicker (#1667) (cherry picked from commit b88e478f04e3441e91bc657b6657a56a6668e453) --- src/fireedge/package-lock.json | 320 +++++++++++------- src/fireedge/package.json | 6 +- .../FormControl/AutocompleteController.js | 3 +- .../FormControl/CheckboxController.js | 3 +- .../components/FormControl/ErrorHelper.js | 49 ++- .../components/FormControl/FileController.js | 4 +- .../FormControl/PasswordController.js | 3 +- .../FormControl/SliderController.js | 3 +- .../FormControl/SwitchController.js | 3 +- .../components/FormControl/TableController.js | 1 - .../components/FormControl/TextController.js | 1 - .../FormControl/TimeController-TODO.js | 126 ------- .../components/FormControl/TimeController.js | 66 ++-- .../FormControl/ToggleController.js | 1 - .../src/client/components/HOC/Translate.js | 11 +- .../src/client/constants/translates.js | 1 + src/fireedge/src/client/models/Helper.js | 4 +- .../src/client/providers/muiProvider.js | 21 +- src/fireedge/src/client/utils/schema.js | 10 +- src/fireedge/src/client/utils/translation.js | 85 +++-- 20 files changed, 368 insertions(+), 353 deletions(-) delete mode 100644 src/fireedge/src/client/components/FormControl/TimeController-TODO.js diff --git a/src/fireedge/package-lock.json b/src/fireedge/package-lock.json index 117acbefa7..093a650c16 100644 --- a/src/fireedge/package-lock.json +++ b/src/fireedge/package-lock.json @@ -26,7 +26,7 @@ "@loadable/component": "5.15.0", "@loadable/server": "5.15.1", "@loadable/webpack-plugin": "5.15.1", - "@mui/lab": "5.0.0-alpha.54", + "@mui/lab": "5.0.0-alpha.59", "@mui/material": "5.1.0", "@mui/styles": "5.1.0", "@mui/system": "5.1.0", @@ -46,7 +46,6 @@ "dompurify": "2.2.6", "express": "4.17.1", "fast-xml-parser": "3.19.0", - "flatpickr": "4.6.9", "fs-extra": "9.0.1", "fuse.js": "6.4.1", "helmet": "4.1.1", @@ -60,7 +59,7 @@ "jsonwebtoken": "8.5.1", "jwt-simple": "0.5.6", "lockfile": "1.0.4", - "luxon": "1.28.0", + "luxon": "2.1.1", "marked": "2.0.0", "morgan": "1.10.0", "multer": "1.4.3", @@ -74,7 +73,6 @@ "react": "17.0.2", "react-beautiful-dnd": "13.1.0", "react-dom": "17.0.2", - "react-flatpickr": "3.10.7", "react-flow-renderer": "9.6.0", "react-hook-form": "7.18.1", "react-json-pretty": "2.2.0", @@ -1850,9 +1848,9 @@ } }, "node_modules/@emotion/babel-plugin": { - "version": "11.3.0", - "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.3.0.tgz", - "integrity": "sha512-UZKwBV2rADuhRp+ZOGgNWg2eYgbzKzQXfQPtJbu/PLy8onurxlNCLvxMQEvlr1/GudguPI5IU9qIY1+2z1M5bA==", + "version": "11.7.1", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.7.1.tgz", + "integrity": "sha512-K3/6Y+J/sIAjplf3uIteWLhPuOyuMNnE+iyYnTF/m294vc6IL90kTHp7y8ldZYbpKlP17rpOWDKM9DvTcrOmNQ==", "dependencies": { "@babel/helper-module-imports": "^7.12.13", "@babel/plugin-syntax-jsx": "^7.12.13", @@ -1865,22 +1863,22 @@ "escape-string-regexp": "^4.0.0", "find-root": "^1.1.0", "source-map": "^0.5.7", - "stylis": "^4.0.3" + "stylis": "4.0.13" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/@emotion/cache": { - "version": "11.6.0", - "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.6.0.tgz", - "integrity": "sha512-ElbsWY1KMwEowkv42vGo0UPuLgtPYfIs9BxxVrmvsaJVvktknsHYYlx5NQ5g6zLDcOTyamlDc7FkRg2TAcQDKQ==", + "version": "11.7.1", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.7.1.tgz", + "integrity": "sha512-r65Zy4Iljb8oyjtLeCuBH8Qjiy107dOYC6SJq7g7GV5UCQWMObY4SJDPGFjiiVpPrOJ2hmJOoBiYTC7hwx9E2A==", "dependencies": { "@emotion/memoize": "^0.7.4", "@emotion/sheet": "^1.1.0", "@emotion/utils": "^1.0.0", "@emotion/weak-memoize": "^0.2.5", - "stylis": "^4.0.10" + "stylis": "4.0.13" } }, "node_modules/@emotion/hash": { @@ -2168,6 +2166,42 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@mui/base": { + "version": "5.0.0-alpha.59", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.59.tgz", + "integrity": "sha512-rPgN2FW0FAjQ9+LQ+XBsq3DFcuiiMFhf8uoLJAWnnzft27IJvJqbrhfpCZ68G6l+umJLbbl5RIIbpt8ALZDDNQ==", + "dependencies": { + "@babel/runtime": "^7.16.3", + "@emotion/is-prop-valid": "^1.1.1", + "@mui/utils": "^5.2.3", + "@popperjs/core": "^2.4.4", + "clsx": "^1.1.1", + "prop-types": "^15.7.2", + "react-is": "^17.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + }, + "peerDependencies": { + "@types/react": "^16.8.6 || ^17.0.0", + "react": "^17.0.2", + "react-dom": "^17.0.2" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/base/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==" + }, "node_modules/@mui/core": { "version": "5.0.0-alpha.54", "resolved": "https://registry.npmjs.org/@mui/core/-/core-5.0.0-alpha.54.tgz", @@ -2201,33 +2235,37 @@ "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" }, "node_modules/@mui/lab": { - "version": "5.0.0-alpha.54", - "resolved": "https://registry.npmjs.org/@mui/lab/-/lab-5.0.0-alpha.54.tgz", - "integrity": "sha512-G7Ic9TQkWT+DA8AUYKU99sQivFjz3WEuy3SsG9I/zc9DanlmUH26F1jdwUcHhEiCNEif7tEzVtIAPhgSGjbgsg==", + "version": "5.0.0-alpha.59", + "resolved": "https://registry.npmjs.org/@mui/lab/-/lab-5.0.0-alpha.59.tgz", + "integrity": "sha512-B+7EkbM+NRuUFFPzG2lqbyI73FM3W19RFkrWJdNZ+gd6C+NTdHdVS9UxSZm54PmSFEnd77wAWKdrIkhcFzEgZQ==", "dependencies": { - "@babel/runtime": "^7.16.0", + "@babel/runtime": "^7.16.3", "@date-io/date-fns": "^2.11.0", "@date-io/dayjs": "^2.11.0", "@date-io/luxon": "^2.11.1", "@date-io/moment": "^2.11.0", - "@mui/core": "5.0.0-alpha.54", - "@mui/system": "^5.1.0", - "@mui/utils": "^5.1.0", + "@mui/base": "5.0.0-alpha.59", + "@mui/system": "^5.2.3", + "@mui/utils": "^5.2.3", "clsx": "^1.1.1", "prop-types": "^15.7.2", "react-is": "^17.0.2", "react-transition-group": "^4.4.2", - "rifm": "^0.12.0" + "rifm": "^0.12.1" }, "engines": { "node": ">=12.0.0" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + }, "peerDependencies": { "@mui/material": "^5.0.0", "@types/react": "^16.8.6 || ^17.0.0", "date-fns": "^2.25.0", "dayjs": "^1.10.7", - "luxon": "^1.28.0", + "luxon": "^1.28.0 || ^2.0.0", "moment": "^2.29.1", "react": "^17.0.2", "react-dom": "^17.0.2" @@ -2250,6 +2288,45 @@ } } }, + "node_modules/@mui/lab/node_modules/@mui/system": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.2.3.tgz", + "integrity": "sha512-YvkjmqgOruZgr+IkueRns99gl3MmnNs8BhnlZosYMLzKz/1lY0JqVBFqUh4sGVbD0UEKFwdk8H31itG5OIPChA==", + "dependencies": { + "@babel/runtime": "^7.16.3", + "@mui/private-theming": "^5.2.3", + "@mui/styled-engine": "^5.2.0", + "@mui/types": "^7.1.0", + "@mui/utils": "^5.2.3", + "clsx": "^1.1.1", + "csstype": "^3.0.10", + "prop-types": "^15.7.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + }, + "peerDependencies": { + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@types/react": "^16.8.6 || ^17.0.0", + "react": "^17.0.2" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, "node_modules/@mui/lab/node_modules/react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", @@ -5082,9 +5159,9 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "node_modules/electron-to-chromium": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.14.tgz", - "integrity": "sha512-RsGkAN9JEAYMObS72kzUsPPcPGMqX1rBqGuXi9aa4TBKLzICoLf+DAAtd0fVFzrniJqYzpby47gthCUoObfs0Q==" + "version": "1.4.16", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.16.tgz", + "integrity": "sha512-BQb7FgYwnu6haWLU63/CdVW+9xhmHls3RCQUFiV4lvw3wimEHTVcUk2hkuZo76QhR8nnDdfZE7evJIZqijwPdA==" }, "node_modules/elliptic": { "version": "6.5.4", @@ -6579,11 +6656,6 @@ "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/flatpickr": { - "version": "4.6.9", - "resolved": "https://registry.npmjs.org/flatpickr/-/flatpickr-4.6.9.tgz", - "integrity": "sha512-F0azNNi8foVWKSF+8X+ZJzz8r9sE1G4hl06RyceIaLvyltKvDl6vqk9Lm/6AUUCi5HWaIjiUbk7UpeE/fOXOpw==" - }, "node_modules/flatted": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", @@ -7576,9 +7648,9 @@ "integrity": "sha1-Vv9NtoOgeMYILrldrX3GLh0E+DU=" }, "node_modules/is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", "engines": { "node": ">= 0.4" }, @@ -7687,11 +7759,11 @@ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" }, "node_modules/is-weakref": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.1.tgz", - "integrity": "sha512-b2jKc2pQZjaeFYWEf7ScFj+Be1I+PXmlu572Q8coTXZ+LD/QQZ7ShPMst8h16riVgyXTQwUsFEl74mDvc/3MHQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dependencies": { - "call-bind": "^1.0.0" + "call-bind": "^1.0.2" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -7721,9 +7793,9 @@ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" }, "node_modules/jest-worker": { - "version": "27.4.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.2.tgz", - "integrity": "sha512-0QMy/zPovLfUPyHuOuuU4E+kGACXXE84nRnq6lBVI9GJg5DCBiA97SATi+ZP8CpiJwEQy1oCPjRBf8AnLjN+Ag==", + "version": "27.4.4", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.4.tgz", + "integrity": "sha512-jfwxYJvfua1b1XkyuyPh01ATmgg4e5fPM/muLmhy9Qc6dmiwacQB0MLHaU6IjEsv/+nAixHGxTn8WllA27Pn0w==", "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -8240,11 +8312,11 @@ } }, "node_modules/luxon": { - "version": "1.28.0", - "resolved": "https://registry.npmjs.org/luxon/-/luxon-1.28.0.tgz", - "integrity": "sha512-TfTiyvZhwBYM/7QdAVDh+7dBTBA29v4ik0Ce9zda3Mnf8on1S5KJI8P2jKFZ8+5C0jhmr0KwJEO/Wdpm0VeWJQ==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-2.1.1.tgz", + "integrity": "sha512-6VQVNw7+kQu3hL1ZH5GyOhnk8uZm21xS7XJ/6vDZaFNcb62dpFDKcH8TI5NkoZOdMRxr7af7aYGrJlE/Wv0i1w==", "engines": { - "node": "*" + "node": ">=12" } }, "node_modules/make-dir": { @@ -9395,9 +9467,9 @@ } }, "node_modules/postcss": { - "version": "8.4.4", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.4.tgz", - "integrity": "sha512-joU6fBsN6EIer28Lj6GDFoC/5yOZzLCfn0zHAn/MYXI7aPt4m4hK5KC5ovEZXy+lnCjmYIbQWngvju2ddyEr8Q==", + "version": "8.4.5", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz", + "integrity": "sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==", "dependencies": { "nanoid": "^3.1.30", "picocolors": "^1.0.0", @@ -9467,9 +9539,9 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", - "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.7.tgz", + "integrity": "sha512-U+b/Deoi4I/UmE6KOVPpnhS7I7AYdKbhGcat+qTQ27gycvaACvNEw11ba6RrkwVmDVRW7sigWgLj4/KbbJjeDA==", "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -10012,18 +10084,6 @@ "react-dom": ">= 16.3.0" } }, - "node_modules/react-flatpickr": { - "version": "3.10.7", - "resolved": "https://registry.npmjs.org/react-flatpickr/-/react-flatpickr-3.10.7.tgz", - "integrity": "sha512-dJ7cZAayefqWJnX4Xe8Piy13oK2h4aeGCH9tz+D2iSNh+kbezUAWVMVCKdTqjsNBqTMS4v0DkfMy2CP2atNCTQ==", - "dependencies": { - "flatpickr": "^4.6.2", - "prop-types": "^15.5.10" - }, - "peerDependencies": { - "react": "^17.0.1" - } - }, "node_modules/react-flow-renderer": { "version": "9.6.0", "resolved": "https://registry.npmjs.org/react-flow-renderer/-/react-flow-renderer-9.6.0.tgz", @@ -11279,9 +11339,9 @@ } }, "node_modules/stylis": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.0.10.tgz", - "integrity": "sha512-m3k+dk7QeJw660eIKRRn3xPF6uuvHs/FFzjX3HQ5ove0qYsiygoAhwn5a3IYKaZPo5LrYD0rfVmtv1gNY1uYwg==" + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.0.13.tgz", + "integrity": "sha512-xGPXiFVl4YED9Jh7Euv2V220mriG9u4B2TA6Ybjc1catrstKD2PpIdU3U0RKpkVBC2EhmL/F0sPCr9vrFTNRag==" }, "node_modules/supports-color": { "version": "5.5.0", @@ -13581,9 +13641,9 @@ "integrity": "sha512-ws57AidsDvREKrZKYffXddNkyaF14iHNHm8VQnZH6t99E8gczjNN0GpvcGny0imC80yQ0tHz1xVUKk/KFQSUyA==" }, "@emotion/babel-plugin": { - "version": "11.3.0", - "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.3.0.tgz", - "integrity": "sha512-UZKwBV2rADuhRp+ZOGgNWg2eYgbzKzQXfQPtJbu/PLy8onurxlNCLvxMQEvlr1/GudguPI5IU9qIY1+2z1M5bA==", + "version": "11.7.1", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.7.1.tgz", + "integrity": "sha512-K3/6Y+J/sIAjplf3uIteWLhPuOyuMNnE+iyYnTF/m294vc6IL90kTHp7y8ldZYbpKlP17rpOWDKM9DvTcrOmNQ==", "requires": { "@babel/helper-module-imports": "^7.12.13", "@babel/plugin-syntax-jsx": "^7.12.13", @@ -13596,19 +13656,19 @@ "escape-string-regexp": "^4.0.0", "find-root": "^1.1.0", "source-map": "^0.5.7", - "stylis": "^4.0.3" + "stylis": "4.0.13" } }, "@emotion/cache": { - "version": "11.6.0", - "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.6.0.tgz", - "integrity": "sha512-ElbsWY1KMwEowkv42vGo0UPuLgtPYfIs9BxxVrmvsaJVvktknsHYYlx5NQ5g6zLDcOTyamlDc7FkRg2TAcQDKQ==", + "version": "11.7.1", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.7.1.tgz", + "integrity": "sha512-r65Zy4Iljb8oyjtLeCuBH8Qjiy107dOYC6SJq7g7GV5UCQWMObY4SJDPGFjiiVpPrOJ2hmJOoBiYTC7hwx9E2A==", "requires": { "@emotion/memoize": "^0.7.4", "@emotion/sheet": "^1.1.0", "@emotion/utils": "^1.0.0", "@emotion/weak-memoize": "^0.2.5", - "stylis": "^4.0.10" + "stylis": "4.0.13" } }, "@emotion/hash": { @@ -13806,6 +13866,27 @@ } } }, + "@mui/base": { + "version": "5.0.0-alpha.59", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.59.tgz", + "integrity": "sha512-rPgN2FW0FAjQ9+LQ+XBsq3DFcuiiMFhf8uoLJAWnnzft27IJvJqbrhfpCZ68G6l+umJLbbl5RIIbpt8ALZDDNQ==", + "requires": { + "@babel/runtime": "^7.16.3", + "@emotion/is-prop-valid": "^1.1.1", + "@mui/utils": "^5.2.3", + "@popperjs/core": "^2.4.4", + "clsx": "^1.1.1", + "prop-types": "^15.7.2", + "react-is": "^17.0.2" + }, + "dependencies": { + "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==" + } + } + }, "@mui/core": { "version": "5.0.0-alpha.54", "resolved": "https://registry.npmjs.org/@mui/core/-/core-5.0.0-alpha.54.tgz", @@ -13828,25 +13909,40 @@ } }, "@mui/lab": { - "version": "5.0.0-alpha.54", - "resolved": "https://registry.npmjs.org/@mui/lab/-/lab-5.0.0-alpha.54.tgz", - "integrity": "sha512-G7Ic9TQkWT+DA8AUYKU99sQivFjz3WEuy3SsG9I/zc9DanlmUH26F1jdwUcHhEiCNEif7tEzVtIAPhgSGjbgsg==", + "version": "5.0.0-alpha.59", + "resolved": "https://registry.npmjs.org/@mui/lab/-/lab-5.0.0-alpha.59.tgz", + "integrity": "sha512-B+7EkbM+NRuUFFPzG2lqbyI73FM3W19RFkrWJdNZ+gd6C+NTdHdVS9UxSZm54PmSFEnd77wAWKdrIkhcFzEgZQ==", "requires": { - "@babel/runtime": "^7.16.0", + "@babel/runtime": "^7.16.3", "@date-io/date-fns": "^2.11.0", "@date-io/dayjs": "^2.11.0", "@date-io/luxon": "^2.11.1", "@date-io/moment": "^2.11.0", - "@mui/core": "5.0.0-alpha.54", - "@mui/system": "^5.1.0", - "@mui/utils": "^5.1.0", + "@mui/base": "5.0.0-alpha.59", + "@mui/system": "^5.2.3", + "@mui/utils": "^5.2.3", "clsx": "^1.1.1", "prop-types": "^15.7.2", "react-is": "^17.0.2", "react-transition-group": "^4.4.2", - "rifm": "^0.12.0" + "rifm": "^0.12.1" }, "dependencies": { + "@mui/system": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.2.3.tgz", + "integrity": "sha512-YvkjmqgOruZgr+IkueRns99gl3MmnNs8BhnlZosYMLzKz/1lY0JqVBFqUh4sGVbD0UEKFwdk8H31itG5OIPChA==", + "requires": { + "@babel/runtime": "^7.16.3", + "@mui/private-theming": "^5.2.3", + "@mui/styled-engine": "^5.2.0", + "@mui/types": "^7.1.0", + "@mui/utils": "^5.2.3", + "clsx": "^1.1.1", + "csstype": "^3.0.10", + "prop-types": "^15.7.2" + } + }, "react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", @@ -16123,9 +16219,9 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "electron-to-chromium": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.14.tgz", - "integrity": "sha512-RsGkAN9JEAYMObS72kzUsPPcPGMqX1rBqGuXi9aa4TBKLzICoLf+DAAtd0fVFzrniJqYzpby47gthCUoObfs0Q==" + "version": "1.4.16", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.16.tgz", + "integrity": "sha512-BQb7FgYwnu6haWLU63/CdVW+9xhmHls3RCQUFiV4lvw3wimEHTVcUk2hkuZo76QhR8nnDdfZE7evJIZqijwPdA==" }, "elliptic": { "version": "6.5.4", @@ -17266,11 +17362,6 @@ "rimraf": "^3.0.2" } }, - "flatpickr": { - "version": "4.6.9", - "resolved": "https://registry.npmjs.org/flatpickr/-/flatpickr-4.6.9.tgz", - "integrity": "sha512-F0azNNi8foVWKSF+8X+ZJzz8r9sE1G4hl06RyceIaLvyltKvDl6vqk9Lm/6AUUCi5HWaIjiUbk7UpeE/fOXOpw==" - }, "flatted": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", @@ -17992,9 +18083,9 @@ "integrity": "sha1-Vv9NtoOgeMYILrldrX3GLh0E+DU=" }, "is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==" + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" }, "is-number": { "version": "7.0.0", @@ -18058,11 +18149,11 @@ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" }, "is-weakref": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.1.tgz", - "integrity": "sha512-b2jKc2pQZjaeFYWEf7ScFj+Be1I+PXmlu572Q8coTXZ+LD/QQZ7ShPMst8h16riVgyXTQwUsFEl74mDvc/3MHQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "requires": { - "call-bind": "^1.0.0" + "call-bind": "^1.0.2" } }, "isarray": { @@ -18086,9 +18177,9 @@ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" }, "jest-worker": { - "version": "27.4.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.2.tgz", - "integrity": "sha512-0QMy/zPovLfUPyHuOuuU4E+kGACXXE84nRnq6lBVI9GJg5DCBiA97SATi+ZP8CpiJwEQy1oCPjRBf8AnLjN+Ag==", + "version": "27.4.4", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.4.tgz", + "integrity": "sha512-jfwxYJvfua1b1XkyuyPh01ATmgg4e5fPM/muLmhy9Qc6dmiwacQB0MLHaU6IjEsv/+nAixHGxTn8WllA27Pn0w==", "requires": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -18527,9 +18618,9 @@ } }, "luxon": { - "version": "1.28.0", - "resolved": "https://registry.npmjs.org/luxon/-/luxon-1.28.0.tgz", - "integrity": "sha512-TfTiyvZhwBYM/7QdAVDh+7dBTBA29v4ik0Ce9zda3Mnf8on1S5KJI8P2jKFZ8+5C0jhmr0KwJEO/Wdpm0VeWJQ==" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-2.1.1.tgz", + "integrity": "sha512-6VQVNw7+kQu3hL1ZH5GyOhnk8uZm21xS7XJ/6vDZaFNcb62dpFDKcH8TI5NkoZOdMRxr7af7aYGrJlE/Wv0i1w==" }, "make-dir": { "version": "2.1.0", @@ -19423,9 +19514,9 @@ "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==" }, "postcss": { - "version": "8.4.4", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.4.tgz", - "integrity": "sha512-joU6fBsN6EIer28Lj6GDFoC/5yOZzLCfn0zHAn/MYXI7aPt4m4hK5KC5ovEZXy+lnCjmYIbQWngvju2ddyEr8Q==", + "version": "8.4.5", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz", + "integrity": "sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==", "requires": { "nanoid": "^3.1.30", "picocolors": "^1.0.0", @@ -19465,9 +19556,9 @@ } }, "postcss-selector-parser": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", - "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.7.tgz", + "integrity": "sha512-U+b/Deoi4I/UmE6KOVPpnhS7I7AYdKbhGcat+qTQ27gycvaACvNEw11ba6RrkwVmDVRW7sigWgLj4/KbbJjeDA==", "requires": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -19882,15 +19973,6 @@ "prop-types": "^15.6.0" } }, - "react-flatpickr": { - "version": "3.10.7", - "resolved": "https://registry.npmjs.org/react-flatpickr/-/react-flatpickr-3.10.7.tgz", - "integrity": "sha512-dJ7cZAayefqWJnX4Xe8Piy13oK2h4aeGCH9tz+D2iSNh+kbezUAWVMVCKdTqjsNBqTMS4v0DkfMy2CP2atNCTQ==", - "requires": { - "flatpickr": "^4.6.2", - "prop-types": "^15.5.10" - } - }, "react-flow-renderer": { "version": "9.6.0", "resolved": "https://registry.npmjs.org/react-flow-renderer/-/react-flow-renderer-9.6.0.tgz", @@ -20875,9 +20957,9 @@ "requires": {} }, "stylis": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.0.10.tgz", - "integrity": "sha512-m3k+dk7QeJw660eIKRRn3xPF6uuvHs/FFzjX3HQ5ove0qYsiygoAhwn5a3IYKaZPo5LrYD0rfVmtv1gNY1uYwg==" + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.0.13.tgz", + "integrity": "sha512-xGPXiFVl4YED9Jh7Euv2V220mriG9u4B2TA6Ybjc1catrstKD2PpIdU3U0RKpkVBC2EhmL/F0sPCr9vrFTNRag==" }, "supports-color": { "version": "5.5.0", diff --git a/src/fireedge/package.json b/src/fireedge/package.json index 6ae806247e..3e82bbf725 100644 --- a/src/fireedge/package.json +++ b/src/fireedge/package.json @@ -60,7 +60,7 @@ "@loadable/component": "5.15.0", "@loadable/server": "5.15.1", "@loadable/webpack-plugin": "5.15.1", - "@mui/lab": "5.0.0-alpha.54", + "@mui/lab": "5.0.0-alpha.59", "@mui/material": "5.1.0", "@mui/styles": "5.1.0", "@mui/system": "5.1.0", @@ -80,7 +80,6 @@ "dompurify": "2.2.6", "express": "4.17.1", "fast-xml-parser": "3.19.0", - "flatpickr": "4.6.9", "fs-extra": "9.0.1", "fuse.js": "6.4.1", "helmet": "4.1.1", @@ -94,7 +93,7 @@ "jsonwebtoken": "8.5.1", "jwt-simple": "0.5.6", "lockfile": "1.0.4", - "luxon": "1.28.0", + "luxon": "2.1.1", "marked": "2.0.0", "morgan": "1.10.0", "multer": "1.4.3", @@ -108,7 +107,6 @@ "react": "17.0.2", "react-beautiful-dnd": "13.1.0", "react-dom": "17.0.2", - "react-flatpickr": "3.10.7", "react-flow-renderer": "9.6.0", "react-hook-form": "7.18.1", "react-json-pretty": "2.2.0", diff --git a/src/fireedge/src/client/components/FormControl/AutocompleteController.js b/src/fireedge/src/client/components/FormControl/AutocompleteController.js index d489fa44ad..d9cbb947ee 100644 --- a/src/fireedge/src/client/components/FormControl/AutocompleteController.js +++ b/src/fireedge/src/client/components/FormControl/AutocompleteController.js @@ -103,8 +103,7 @@ const AutocompleteController = memo( /> ) }, - (prevProps, nextProps) => - prevProps.error === nextProps.error && prevProps.values === nextProps.values + (prevProps, nextProps) => prevProps.values === nextProps.values ) AutocompleteController.propTypes = { diff --git a/src/fireedge/src/client/components/FormControl/CheckboxController.js b/src/fireedge/src/client/components/FormControl/CheckboxController.js index faba4be899..6e2279aadc 100644 --- a/src/fireedge/src/client/components/FormControl/CheckboxController.js +++ b/src/fireedge/src/client/components/FormControl/CheckboxController.js @@ -77,8 +77,7 @@ const CheckboxController = memo( )} ) - }, - (prevProps, nextProps) => prevProps.error === nextProps.error + } ) CheckboxController.propTypes = { diff --git a/src/fireedge/src/client/components/FormControl/ErrorHelper.js b/src/fireedge/src/client/components/FormControl/ErrorHelper.js index a7873dea4e..7b4f9fa549 100644 --- a/src/fireedge/src/client/components/FormControl/ErrorHelper.js +++ b/src/fireedge/src/client/components/FormControl/ErrorHelper.js @@ -14,12 +14,12 @@ * limitations under the License. * * ------------------------------------------------------------------------- */ import { memo } from 'react' -import { oneOfType, string, node } from 'prop-types' +import PropTypes from 'prop-types' import { Stack, Typography, styled } from '@mui/material' import { WarningCircledOutline as WarningIcon } from 'iconoir-react' -import { Tr, labelCanBeTranslated } from 'client/components/HOC' +import { Translate } from 'client/components/HOC' const ErrorTypo = styled(Typography)(({ theme }) => ({ ...theme.typography.body1, @@ -27,23 +27,38 @@ const ErrorTypo = styled(Typography)(({ theme }) => ({ overflowWrap: 'anywhere', })) -const ErrorHelper = memo(({ label, ...rest }) => ( - - - - {labelCanBeTranslated(label) ? Tr(label) : label} - - -)) +const ErrorHelper = memo(({ label, ...rest }) => { + const translateProps = label?.word ? { ...label } : { word: label } + + return ( + + + + + + + ) +}) ErrorHelper.propTypes = { - label: oneOfType([string, node]), + label: PropTypes.oneOfType([ + PropTypes.string, + PropTypes.node, + PropTypes.shape({ + word: PropTypes.string, + values: PropTypes.oneOfType([ + PropTypes.number, + PropTypes.string, + PropTypes.array, + ]), + }), + ]), } ErrorHelper.displayName = 'ErrorHelper' diff --git a/src/fireedge/src/client/components/FormControl/FileController.js b/src/fireedge/src/client/components/FormControl/FileController.js index 932e189f70..79aa08c015 100644 --- a/src/fireedge/src/client/components/FormControl/FileController.js +++ b/src/fireedge/src/client/components/FormControl/FileController.js @@ -144,9 +144,7 @@ const FileController = memo( ) }, (prevProps, nextProps) => - prevProps.error === nextProps.error && - prevProps.type === nextProps.type && - prevProps.label === nextProps.label + prevProps.type === nextProps.type && prevProps.label === nextProps.label ) FileController.propTypes = { diff --git a/src/fireedge/src/client/components/FormControl/PasswordController.js b/src/fireedge/src/client/components/FormControl/PasswordController.js index df6d308965..17b743e6fc 100644 --- a/src/fireedge/src/client/components/FormControl/PasswordController.js +++ b/src/fireedge/src/client/components/FormControl/PasswordController.js @@ -51,8 +51,7 @@ const PasswordController = memo( /> ) }, - (prevProps, nextProps) => - prevProps.error === nextProps.error && prevProps.type === nextProps.type + (prevProps, nextProps) => prevProps.type === nextProps.type ) PasswordController.propTypes = { diff --git a/src/fireedge/src/client/components/FormControl/SliderController.js b/src/fireedge/src/client/components/FormControl/SliderController.js index af465af00d..77b439f83f 100644 --- a/src/fireedge/src/client/components/FormControl/SliderController.js +++ b/src/fireedge/src/client/components/FormControl/SliderController.js @@ -89,8 +89,7 @@ const SliderController = memo( )} ) - }, - (prevProps, nextProps) => prevProps.error === nextProps.error + } ) SliderController.propTypes = { diff --git a/src/fireedge/src/client/components/FormControl/SwitchController.js b/src/fireedge/src/client/components/FormControl/SwitchController.js index 3f6dd5dcaa..d4b839978a 100644 --- a/src/fireedge/src/client/components/FormControl/SwitchController.js +++ b/src/fireedge/src/client/components/FormControl/SwitchController.js @@ -77,8 +77,7 @@ const SwitchController = memo( )} ) - }, - (prevProps, nextProps) => prevProps.error === nextProps.error + } ) SwitchController.propTypes = { diff --git a/src/fireedge/src/client/components/FormControl/TableController.js b/src/fireedge/src/client/components/FormControl/TableController.js index 5391795e60..0bedd88993 100644 --- a/src/fireedge/src/client/components/FormControl/TableController.js +++ b/src/fireedge/src/client/components/FormControl/TableController.js @@ -86,7 +86,6 @@ const TableController = memo( ) }, (prevProps, nextProps) => - prevProps.error === nextProps.error && prevProps.label === nextProps.label && prevProps.Table === nextProps.Table && prevProps.tooltip === nextProps.tooltip diff --git a/src/fireedge/src/client/components/FormControl/TextController.js b/src/fireedge/src/client/components/FormControl/TextController.js index 42ea2ef272..ca5b328d05 100644 --- a/src/fireedge/src/client/components/FormControl/TextController.js +++ b/src/fireedge/src/client/components/FormControl/TextController.js @@ -79,7 +79,6 @@ const TextController = memo( ) }, (prevProps, nextProps) => - prevProps.error === nextProps.error && prevProps.type === nextProps.type && prevProps.label === nextProps.label && prevProps.tooltip === nextProps.tooltip && diff --git a/src/fireedge/src/client/components/FormControl/TimeController-TODO.js b/src/fireedge/src/client/components/FormControl/TimeController-TODO.js deleted file mode 100644 index 96f1a40b29..0000000000 --- a/src/fireedge/src/client/components/FormControl/TimeController-TODO.js +++ /dev/null @@ -1,126 +0,0 @@ -/* ------------------------------------------------------------------------- * - * Copyright 2002-2021, OpenNebula Project, OpenNebula Systems * - * * - * Licensed under the Apache License, Version 2.0 (the "License"); you may * - * not use this file except in compliance with the License. You may obtain * - * a copy of the License at * - * * - * http://www.apache.org/licenses/LICENSE-2.0 * - * * - * Unless required by applicable law or agreed to in writing, software * - * distributed under the License is distributed on an "AS IS" BASIS, * - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * - * See the License for the specific language governing permissions and * - * limitations under the License. * - * ------------------------------------------------------------------------- */ -import { memo, useState, useEffect } from 'react' -import PropTypes from 'prop-types' - -import Flatpickr from 'react-flatpickr' -import { TextField } from '@mui/material' -import { Controller } from 'react-hook-form' - -import { Tr } from 'client/components/HOC' -import { ErrorHelper } from 'client/components/FormControl' - -const WrapperToLoadLib = ({ children, id, lib }) => { - const [loading, setLoading] = useState(true) - - useEffect(() => { - const loadLib = async () => { - try { - await import(lib) - } finally { - setLoading(false) - } - } - - loadLib() - - return () => { - // remove all styles when component will be unmounted - document - .querySelectorAll(`[id^=${id}]`) - .forEach((child) => child.parentNode.removeChild(child)) - } - }, []) - - return loading ? null : children -} - -const TimeController = memo( - ({ control, cy, name, label, error, fieldProps }) => ( - - { - const translated = typeof label === 'string' ? Tr(label) : label - - return ( - { - onChange(undefined) - }} - data-enable-time - options={{ allowInput: true }} - render={({ defaultValue, ...props }, ref) => ( - } - FormHelperTextProps={{ 'data-cy': `${cy}-error` }} - {...fieldProps} - /> - )} - /> - ) - }} - name={name} - control={control} - /> - - ), - (prevProps, nextProps) => prevProps.error === nextProps.error -) - -TimeController.propTypes = { - control: PropTypes.object, - cy: PropTypes.string, - multiline: PropTypes.bool, - name: PropTypes.string.isRequired, - label: PropTypes.any, - tooltip: PropTypes.any, - error: PropTypes.any, - fieldProps: PropTypes.object, - formContext: PropTypes.shape({ - setValue: PropTypes.func, - setError: PropTypes.func, - clearErrors: PropTypes.func, - watch: PropTypes.func, - register: PropTypes.func, - }), -} - -TimeController.defaultProps = { - control: {}, - cy: 'cy', - name: '', - label: '', - error: false, - fieldProps: undefined, -} - -TimeController.displayName = 'TimeController' - -export default TimeController diff --git a/src/fireedge/src/client/components/FormControl/TimeController.js b/src/fireedge/src/client/components/FormControl/TimeController.js index 57a3634131..3cca046d20 100644 --- a/src/fireedge/src/client/components/FormControl/TimeController.js +++ b/src/fireedge/src/client/components/FormControl/TimeController.js @@ -16,62 +16,70 @@ import { memo } from 'react' import PropTypes from 'prop-types' -import { TextField } from '@mui/material' import { useController } from 'react-hook-form' +import { TextField } from '@mui/material' +import DateTimePicker from '@mui/lab/DateTimePicker' -import { ErrorHelper } from 'client/components/FormControl' -import { Tr, labelCanBeTranslated } from 'client/components/HOC' +import { ErrorHelper, Tooltip } from 'client/components/FormControl' +import { Translate } from 'client/components/HOC' import { generateKey } from 'client/utils' +import { T } from 'client/constants' const TimeController = memo( ({ control, - cy = `datetime-${generateKey()}`, + cy = `input-date-${generateKey()}`, name = '', label = '', - type = 'datetime-local', - fieldProps = {}, + tooltip, + fieldProps: { defaultValue, ...fieldProps } = {}, + ...props }) => { const { - field: { ref, value, ...inputProps }, + field: { value, ...controllerProps }, fieldState: { error }, - } = useController({ name, control }) + } = useController({ name, control, defaultValue }) return ( - } - FormHelperTextProps={{ 'data-cy': `${cy}-error` }} + } + cancelText={} + clearText={} + todayText={} + InputProps={{ + autoComplete: 'off', + startAdornment: tooltip && , + }} + renderInput={({ inputProps, ...dateTimePickerProps }) => ( + + } + FormHelperTextProps={{ 'data-cy': `${cy}-error` }} + /> + )} /> ) }, (prevProps, nextProps) => - prevProps.error === nextProps.error && prevProps.label === nextProps.label + prevProps.label === nextProps.label && + prevProps.tooltip === nextProps.tooltip ) TimeController.propTypes = { control: PropTypes.object, cy: PropTypes.string, - multiline: PropTypes.bool, name: PropTypes.string.isRequired, label: PropTypes.any, tooltip: PropTypes.any, - type: PropTypes.string, fieldProps: PropTypes.object, - formContext: PropTypes.shape({ - setValue: PropTypes.func, - setError: PropTypes.func, - clearErrors: PropTypes.func, - watch: PropTypes.func, - register: PropTypes.func, - }), } TimeController.displayName = 'TimeController' diff --git a/src/fireedge/src/client/components/FormControl/ToggleController.js b/src/fireedge/src/client/components/FormControl/ToggleController.js index fd784f6097..f71e8415f6 100644 --- a/src/fireedge/src/client/components/FormControl/ToggleController.js +++ b/src/fireedge/src/client/components/FormControl/ToggleController.js @@ -96,7 +96,6 @@ const ToggleController = memo( ) }, (prevProps, nextProps) => - prevProps.error === nextProps.error && prevProps.values.length === nextProps.values.length && prevProps.label === nextProps.label && prevProps.tooltip === nextProps.tooltip diff --git a/src/fireedge/src/client/components/HOC/Translate.js b/src/fireedge/src/client/components/HOC/Translate.js index 84bfc5aa31..c6c2da67ad 100644 --- a/src/fireedge/src/client/components/HOC/Translate.js +++ b/src/fireedge/src/client/components/HOC/Translate.js @@ -27,7 +27,9 @@ const TranslateContext = createContext() let languageScript = root.document?.createElement('script') const labelCanBeTranslated = (val) => - typeof val === 'string' || (Array.isArray(val) && val.length === 2) + typeof val === 'string' || + (Array.isArray(val) && val.length === 2) || + (typeof val === 'object' && val?.word) const GenerateScript = ( language = DEFAULT_LANGUAGE, @@ -131,12 +133,7 @@ TranslateProvider.propTypes = { Translate.propTypes = { word: PropTypes.oneOfType([PropTypes.string, PropTypes.array]), - values: PropTypes.oneOfType([ - PropTypes.string, - PropTypes.number, - PropTypes.bool, - PropTypes.array, - ]), + values: PropTypes.any, } export { diff --git a/src/fireedge/src/client/constants/translates.js b/src/fireedge/src/client/constants/translates.js index 435bb752b8..2d232411b1 100644 --- a/src/fireedge/src/client/constants/translates.js +++ b/src/fireedge/src/client/constants/translates.js @@ -157,6 +157,7 @@ module.exports = { Yearly: 'Yearly', EachHours: 'Each %s hours', AfterTimes: 'After %s times', + Today: 'Today', /* dashboard */ InTotal: 'In Total', diff --git a/src/fireedge/src/client/models/Helper.js b/src/fireedge/src/client/models/Helper.js index bccb1e3af3..298a7b76c2 100644 --- a/src/fireedge/src/client/models/Helper.js +++ b/src/fireedge/src/client/models/Helper.js @@ -69,7 +69,7 @@ export const timeFromMilliseconds = (time) => DateTime.fromMillis(+time * 1000) /** * Returns the epoch milliseconds of the date. * - * @param {number|string} date - Date + * @param {number|string} date - JS Date * @returns {number} - Total milliseconds. */ export const dateToMilliseconds = (date) => @@ -78,7 +78,7 @@ export const dateToMilliseconds = (date) => /** * Returns the epoch milliseconds of the date. * - * @param {number|string} date - Date + * @param {number|string} date - Date on ISO format * @returns {number} - Total milliseconds. */ export const isoDateToMilliseconds = (date) => diff --git a/src/fireedge/src/client/providers/muiProvider.js b/src/fireedge/src/client/providers/muiProvider.js index ebf8d05179..233a94215c 100644 --- a/src/fireedge/src/client/providers/muiProvider.js +++ b/src/fireedge/src/client/providers/muiProvider.js @@ -24,6 +24,9 @@ import { useMediaQuery, } from '@mui/material' import StylesProvider from '@mui/styles/StylesProvider' +import AdapterLuxon from '@mui/lab/AdapterLuxon' +import LocalizationProvider from '@mui/lab/LocalizationProvider' + import { createTheme, generateClassName } from 'client/theme' import { useAuth } from 'client/features/Auth' import { SCHEMES } from 'client/constants' @@ -55,14 +58,16 @@ const MuiProvider = ({ theme: appTheme, children }) => { }, [scheme, prefersDarkMode]) return ( - - - - - {children} - - - + + + + + + {children} + + + + ) } diff --git a/src/fireedge/src/client/utils/schema.js b/src/fireedge/src/client/utils/schema.js index 8b032e18a0..54e8e18331 100644 --- a/src/fireedge/src/client/utils/schema.js +++ b/src/fireedge/src/client/utils/schema.js @@ -359,16 +359,16 @@ export const mapUserInputs = (userInputs = {}) => * @param {any[]} list - List of option values * @param {object} [options] - Options to conversion * @param {boolean|string} [options.addEmpty] - If `true`, add an empty option - * @param {function(any):any} [options.getText] - Function to get the text option - * @param {function(any):any} [options.getValue] - Function to get the value option + * @param {function(any, number):any} [options.getText] - Function to get the text option + * @param {function(any, number):any} [options.getValue] - Function to get the value option * @returns {SelectOption} Options */ export const arrayToOptions = (list = [], options = {}) => { const { addEmpty = true, getText = (o) => o, getValue = (o) => o } = options - const values = list.map((item) => ({ - text: getText(item), - value: getValue(item), + const values = list.map((item, idx) => ({ + text: getText(item, idx), + value: getValue(item, idx), })) if (addEmpty) { diff --git a/src/fireedge/src/client/utils/translation.js b/src/fireedge/src/client/utils/translation.js index a6e66180ee..8293892c81 100644 --- a/src/fireedge/src/client/utils/translation.js +++ b/src/fireedge/src/client/utils/translation.js @@ -98,16 +98,31 @@ const buildTranslationLocale = () => { default: () => T['validation.mixed.default'], required: () => T['validation.mixed.required'], defined: () => T['validation.mixed.defined'], - oneOf: ({ values }) => [T['validation.mixed.oneOf'], values], - notOneOf: ({ values }) => [T['validation.mixed.notOneOf'], values], + oneOf: ({ values }) => ({ word: T['validation.mixed.oneOf'], values }), + notOneOf: ({ values }) => ({ + word: T['validation.mixed.notOneOf'], + values, + }), notType: ({ type }) => T[`validation.mixed.notType.${type}`] ?? T['validation.mixed.notType'], }, string: { - length: ({ length }) => [T['validation.string.length'], length], - min: ({ min }) => [T['validation.string.min'], min], - max: ({ max }) => [T['validation.string.max'], max], - matches: ({ matches }) => [T['validation.string.matches'], matches], + length: ({ length }) => ({ + word: T['validation.string.length'], + values: length, + }), + min: ({ min }) => ({ + word: T['validation.string.min'], + values: min, + }), + max: ({ max }) => ({ + word: T['validation.string.max'], + values: max, + }), + matches: ({ matches }) => ({ + word: T['validation.string.matches'], + values: matches, + }), email: () => T['validation.string.email'], url: () => T['validation.string.url'], uuid: () => T['validation.string.uuid'], @@ -116,31 +131,61 @@ const buildTranslationLocale = () => { uppercase: () => T['validation.string.uppercase'], }, number: { - min: ({ min }) => [T['validation.number.min'], min], - max: ({ max }) => [T['validation.number.max'], max], - lessThan: ({ less }) => [T['validation.number.lessThan'], less], - moreThan: ({ more }) => [T['validation.number.moreThan'], more], + min: ({ min }) => ({ + word: T['validation.number.min'], + values: min, + }), + max: ({ max }) => ({ + word: T['validation.number.max'], + values: max, + }), + lessThan: ({ less }) => ({ + word: T['validation.number.lessThan'], + values: less, + }), + moreThan: ({ more }) => ({ + word: T['validation.number.moreThan'], + values: more, + }), positive: () => T['validation.number.positive'], negative: () => T['validation.number.negative'], integer: () => T['validation.number.integer'], }, boolean: { - isValue: ({ value }) => [T['validation.boolean.isValue'], value], + isValue: ({ value }) => ({ + word: T['validation.boolean.isValue'], + values: [value], + }), }, date: { - min: ({ min }) => [T['validation.date.min'], min], - max: ({ max }) => [T['validation.date.max'], max], + min: ({ min }) => ({ + word: T['validation.date.min'], + values: min, + }), + max: ({ max }) => ({ + word: T['validation.date.max'], + values: max, + }), }, object: { - noUnknown: ({ nounknown }) => [ - T['validation.object.noUnknown'], - nounknown, - ], + noUnknown: ({ nounknown }) => ({ + word: T['validation.object.noUnknown'], + values: nounknown, + }), }, array: { - min: ({ min }) => [T['validation.array.min'], min], - max: ({ max }) => [T['validation.array.max'], max], - length: ({ length }) => [T['validation.array.length'], length], + min: ({ min }) => ({ + word: T['validation.array.min'], + values: min, + }), + max: ({ max }) => ({ + word: T['validation.array.max'], + values: max, + }), + length: ({ length }) => ({ + word: T['validation.array.length'], + values: length, + }), }, }) }