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,
+ }),
},
})
}