Compare commits
86 Commits
ada2e1cb72
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| 364c67f3ad | |||
| 2adcc217af | |||
| 8c7e18637a | |||
| a88238f209 | |||
| a34270cfc3 | |||
| c022b96a12 | |||
| bbb55e9746 | |||
| d82e12759e | |||
| 3cef34bd1e | |||
| 1fbcdd82c8 | |||
| f58fa0dd80 | |||
| 8a43e88f24 | |||
| cfadae4df3 | |||
| 4e1ab7e9c2 | |||
| 9a03c3ef85 | |||
| d5d82a5a1e | |||
| 8d7615fb37 | |||
| 1af2ee3890 | |||
| 8bfcd65ad1 | |||
| 75ecbba71d | |||
| 1a55bd7748 | |||
| 3e7a22f9e2 | |||
| 49667d7fe9 | |||
| b15b4dc3b1 | |||
| e3c5e84bb7 | |||
| c1c7d6baaa | |||
| 15eb1e87e8 | |||
| 960c4db1ac | |||
| 93fec2051b | |||
| cbdb695ce5 | |||
| da087d9a00 | |||
| 383d2d5d34 | |||
| 9b03b39db0 | |||
| 5e36a978a7 | |||
| b9e6ff27db | |||
| 24c3bf0324 | |||
| 617ad611ed | |||
| a8e8bd9afd | |||
| 074378335b | |||
| 3b8b9796fa | |||
| 9a819d1bd6 | |||
| a5e32d0d39 | |||
| 8ad250f227 | |||
| 7f01597ea1 | |||
| d5f38cff85 | |||
| 49452998cb | |||
| 0009ceae81 | |||
| 480393743f | |||
| e47bb4f35c | |||
| 3b2dba5317 | |||
| 48be96a28b | |||
| 15fe1dfec6 | |||
| d7e3e500ab | |||
| fdd093b8aa | |||
| 4056719b50 | |||
| dbea5cbeec | |||
| ae5c9908bb | |||
| 89adc16a0e | |||
| f340130f89 | |||
| 593f4deb3e | |||
| 042a1a76c3 | |||
| cf67c387c6 | |||
| b8e2100331 | |||
| 66ab925b5d | |||
| 29e033b8de | |||
| 0eef478a41 | |||
| 55ba6031eb | |||
| 21d47b1f90 | |||
| 9b831c86d4 | |||
| 8893b96e9b | |||
| 673efe51ed | |||
| b06595e8d8 | |||
| 05c7b49bbc | |||
| b107273db3 | |||
| 5f6eda0fc7 | |||
| f8be0b0b5f | |||
| a73ff5b9a4 | |||
| 1a9a683b25 | |||
| e8a96dd6c4 | |||
| e9aa405464 | |||
| 62f99842b3 | |||
| caf507fe1a | |||
| ba08b3a3d0 | |||
| b0c6cdcd13 | |||
| 3fd7553ce8 | |||
| 947257646d |
260
src/client/dd-hub-react/package-lock.json
generated
260
src/client/dd-hub-react/package-lock.json
generated
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "@minimal/material-kit-react",
|
||||
"version": "3.0.0",
|
||||
"name": "dd-hub-react",
|
||||
"version": "0.0.0",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "@minimal/material-kit-react",
|
||||
"version": "3.0.0",
|
||||
"name": "dd-hub-react",
|
||||
"version": "0.0.0",
|
||||
"dependencies": {
|
||||
"@emotion/cache": "^11.14.0",
|
||||
"@emotion/react": "^11.14.0",
|
||||
@@ -14,11 +14,14 @@
|
||||
"@fontsource-variable/dm-sans": "^5.2.5",
|
||||
"@fontsource/barlow": "^5.2.5",
|
||||
"@iconify/react": "^5.2.1",
|
||||
"@mui/icons-material": "^7.2.0",
|
||||
"@mui/lab": "^7.0.0-beta.10",
|
||||
"@mui/material": "^7.0.1",
|
||||
"@mui/x-date-pickers": "^8.7.0",
|
||||
"apexcharts": "^4.5.0",
|
||||
"dayjs": "^1.11.13",
|
||||
"es-toolkit": "^1.34.1",
|
||||
"lodash.debounce": "^4.0.8",
|
||||
"minimal-shared": "^1.0.7",
|
||||
"react": "^19.1.0",
|
||||
"react-apexcharts": "^1.7.0",
|
||||
@@ -28,6 +31,7 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"@eslint/js": "^9.23.0",
|
||||
"@types/lodash.debounce": "^4.0.9",
|
||||
"@types/node": "^22.14.0",
|
||||
"@types/react": "^19.1.0",
|
||||
"@types/react-dom": "^19.1.1",
|
||||
@@ -128,13 +132,10 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/runtime": {
|
||||
"version": "7.27.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.0.tgz",
|
||||
"integrity": "sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==",
|
||||
"version": "7.27.6",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.6.tgz",
|
||||
"integrity": "sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"regenerator-runtime": "^0.14.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
@@ -1164,15 +1165,41 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@mui/core-downloads-tracker": {
|
||||
"version": "7.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-7.0.1.tgz",
|
||||
"integrity": "sha512-T5DNVnSD9pMbj4Jk/Uphz+yvj9dfpl2+EqsOuJtG12HxEihNG5pd3qzX5yM1Id4dDwKRvM3dPVcxyzavTFhJeA==",
|
||||
"version": "7.2.0",
|
||||
"resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-7.2.0.tgz",
|
||||
"integrity": "sha512-d49s7kEgI5iX40xb2YPazANvo7Bx0BLg/MNRwv+7BVpZUzXj1DaVCKlQTDex3gy/0jsCb4w7AY2uH4t4AJvSog==",
|
||||
"license": "MIT",
|
||||
"funding": {
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/mui-org"
|
||||
}
|
||||
},
|
||||
"node_modules/@mui/icons-material": {
|
||||
"version": "7.2.0",
|
||||
"resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-7.2.0.tgz",
|
||||
"integrity": "sha512-gRCspp3pfjHQyTmSOmYw7kUQTd9Udpdan4R8EnZvqPeoAtHnPzkvjBrBqzKaoAbbBp5bGF7BcD18zZJh4nwu0A==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.27.6"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=14.0.0"
|
||||
},
|
||||
"funding": {
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/mui-org"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@mui/material": "^7.2.0",
|
||||
"@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0",
|
||||
"react": "^17.0.0 || ^18.0.0 || ^19.0.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"@types/react": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/@mui/lab": {
|
||||
"version": "7.0.0-beta.10",
|
||||
"resolved": "https://registry.npmjs.org/@mui/lab/-/lab-7.0.0-beta.10.tgz",
|
||||
@@ -1218,22 +1245,22 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@mui/material": {
|
||||
"version": "7.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@mui/material/-/material-7.0.1.tgz",
|
||||
"integrity": "sha512-tQwjIIsn/UUSCHoCIQVkANuLua67h7Ro9M9gIHoGWaFbJFuF6cSO4Oda2olDVqIs4SWG+PaDChuu6SngxsaoyQ==",
|
||||
"version": "7.2.0",
|
||||
"resolved": "https://registry.npmjs.org/@mui/material/-/material-7.2.0.tgz",
|
||||
"integrity": "sha512-NTuyFNen5Z2QY+I242MDZzXnFIVIR6ERxo7vntFi9K1wCgSwvIl0HcAO2OOydKqqKApE6omRiYhpny1ZhGuH7Q==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.26.10",
|
||||
"@mui/core-downloads-tracker": "^7.0.1",
|
||||
"@mui/system": "^7.0.1",
|
||||
"@mui/types": "^7.4.0",
|
||||
"@mui/utils": "^7.0.1",
|
||||
"@babel/runtime": "^7.27.6",
|
||||
"@mui/core-downloads-tracker": "^7.2.0",
|
||||
"@mui/system": "^7.2.0",
|
||||
"@mui/types": "^7.4.4",
|
||||
"@mui/utils": "^7.2.0",
|
||||
"@popperjs/core": "^2.11.8",
|
||||
"@types/react-transition-group": "^4.4.12",
|
||||
"clsx": "^2.1.1",
|
||||
"csstype": "^3.1.3",
|
||||
"prop-types": "^15.8.1",
|
||||
"react-is": "^19.0.0",
|
||||
"react-is": "^19.1.0",
|
||||
"react-transition-group": "^4.4.5"
|
||||
},
|
||||
"engines": {
|
||||
@@ -1246,7 +1273,7 @@
|
||||
"peerDependencies": {
|
||||
"@emotion/react": "^11.5.0",
|
||||
"@emotion/styled": "^11.3.0",
|
||||
"@mui/material-pigment-css": "^7.0.1",
|
||||
"@mui/material-pigment-css": "^7.2.0",
|
||||
"@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0",
|
||||
"react": "^17.0.0 || ^18.0.0 || ^19.0.0",
|
||||
"react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0"
|
||||
@@ -1267,13 +1294,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@mui/private-theming": {
|
||||
"version": "7.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-7.0.1.tgz",
|
||||
"integrity": "sha512-1kQ7REYjjzDukuMfTbAjm3pLEhD7gUMC2bWhg9VD6f6sHzyokKzX0XHzlr3IdzNWBjPytGkzHpPIRQrUOoPLCQ==",
|
||||
"version": "7.2.0",
|
||||
"resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-7.2.0.tgz",
|
||||
"integrity": "sha512-y6N1Yt3T5RMxVFnCh6+zeSWBuQdNDm5/UlM0EAYZzZR/1u+XKJWYQmbpx4e+F+1EpkYi3Nk8KhPiQDi83M3zIw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.26.10",
|
||||
"@mui/utils": "^7.0.1",
|
||||
"@babel/runtime": "^7.27.6",
|
||||
"@mui/utils": "^7.2.0",
|
||||
"prop-types": "^15.8.1"
|
||||
},
|
||||
"engines": {
|
||||
@@ -1294,13 +1321,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@mui/styled-engine": {
|
||||
"version": "7.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-7.0.1.tgz",
|
||||
"integrity": "sha512-BeGe4xZmF7tESKhmctYrL54Kl25kGHPKVdZYM5qj5Xz76WM/poY+d8EmAqUesT6k2rbJWPp2gtOAXXinNCGunQ==",
|
||||
"version": "7.2.0",
|
||||
"resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-7.2.0.tgz",
|
||||
"integrity": "sha512-yq08xynbrNYcB1nBcW9Fn8/h/iniM3ewRguGJXPIAbHvxEF7Pz95kbEEOAAhwzxMX4okhzvHmk0DFuC5ayvgIQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.26.10",
|
||||
"@emotion/cache": "^11.13.5",
|
||||
"@babel/runtime": "^7.27.6",
|
||||
"@emotion/cache": "^11.14.0",
|
||||
"@emotion/serialize": "^1.3.3",
|
||||
"@emotion/sheet": "^1.4.0",
|
||||
"csstype": "^3.1.3",
|
||||
@@ -1328,16 +1355,16 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@mui/system": {
|
||||
"version": "7.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@mui/system/-/system-7.0.1.tgz",
|
||||
"integrity": "sha512-pK+puz0hRPHEKGlcPd80mKYD3jpyi0uVIwWffox1WZgPTQMw2dCKLcD+9ndMDJADnrKzmKlpoH756PPFh2UvWA==",
|
||||
"version": "7.2.0",
|
||||
"resolved": "https://registry.npmjs.org/@mui/system/-/system-7.2.0.tgz",
|
||||
"integrity": "sha512-PG7cm/WluU6RAs+gNND2R9vDwNh+ERWxPkqTaiXQJGIFAyJ+VxhyKfzpdZNk0z0XdmBxxi9KhFOpgxjehf/O0A==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.26.10",
|
||||
"@mui/private-theming": "^7.0.1",
|
||||
"@mui/styled-engine": "^7.0.1",
|
||||
"@mui/types": "^7.4.0",
|
||||
"@mui/utils": "^7.0.1",
|
||||
"@babel/runtime": "^7.27.6",
|
||||
"@mui/private-theming": "^7.2.0",
|
||||
"@mui/styled-engine": "^7.2.0",
|
||||
"@mui/types": "^7.4.4",
|
||||
"@mui/utils": "^7.2.0",
|
||||
"clsx": "^2.1.1",
|
||||
"csstype": "^3.1.3",
|
||||
"prop-types": "^15.8.1"
|
||||
@@ -1368,12 +1395,12 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@mui/types": {
|
||||
"version": "7.4.0",
|
||||
"resolved": "https://registry.npmjs.org/@mui/types/-/types-7.4.0.tgz",
|
||||
"integrity": "sha512-TxJ4ezEeedWHBjOmLtxI203a9DII9l4k83RXmz1PYSAmnyEcK2PglTNmJGxswC/wM5cdl9ap2h8lnXvt2swAGQ==",
|
||||
"version": "7.4.4",
|
||||
"resolved": "https://registry.npmjs.org/@mui/types/-/types-7.4.4.tgz",
|
||||
"integrity": "sha512-p63yhbX52MO/ajXC7hDHJA5yjzJekvWD3q4YDLl1rSg+OXLczMYPvTuSuviPRCgRX8+E42RXz1D/dz9SxPSlWg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.26.10"
|
||||
"@babel/runtime": "^7.27.6"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0"
|
||||
@@ -1385,17 +1412,17 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@mui/utils": {
|
||||
"version": "7.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@mui/utils/-/utils-7.0.1.tgz",
|
||||
"integrity": "sha512-SJKrrebNpmK9rJCnVL29nGPhPXQYtBZmb7Dsp0f58uIUhQfAKcBXHE4Kjs06SX4CwqeCuwEVgcHY+MgAO6XQ/g==",
|
||||
"version": "7.2.0",
|
||||
"resolved": "https://registry.npmjs.org/@mui/utils/-/utils-7.2.0.tgz",
|
||||
"integrity": "sha512-O0i1GQL6MDzhKdy9iAu5Yr0Sz1wZjROH1o3aoztuivdCXqEeQYnEjTDiRLGuFxI9zrUbTHBwobMyQH5sNtyacw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.26.10",
|
||||
"@mui/types": "^7.4.0",
|
||||
"@types/prop-types": "^15.7.14",
|
||||
"@babel/runtime": "^7.27.6",
|
||||
"@mui/types": "^7.4.4",
|
||||
"@types/prop-types": "^15.7.15",
|
||||
"clsx": "^2.1.1",
|
||||
"prop-types": "^15.8.1",
|
||||
"react-is": "^19.0.0"
|
||||
"react-is": "^19.1.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=14.0.0"
|
||||
@@ -1414,6 +1441,94 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/@mui/x-date-pickers": {
|
||||
"version": "8.7.0",
|
||||
"resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-8.7.0.tgz",
|
||||
"integrity": "sha512-7fCRhhoE/2s7wsJWLoY2IoHlN5ZA+ev7ZzhIjLPAOzMXwIflzCgljq6iG/iXpATugsmlxWHhO/7wdDSD6zUNOw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.27.6",
|
||||
"@mui/utils": "^7.1.1",
|
||||
"@mui/x-internals": "8.7.0",
|
||||
"@types/react-transition-group": "^4.4.12",
|
||||
"clsx": "^2.1.1",
|
||||
"prop-types": "^15.8.1",
|
||||
"react-transition-group": "^4.4.5"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=14.0.0"
|
||||
},
|
||||
"funding": {
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/mui-org"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@emotion/react": "^11.9.0",
|
||||
"@emotion/styled": "^11.8.1",
|
||||
"@mui/material": "^5.15.14 || ^6.0.0 || ^7.0.0",
|
||||
"@mui/system": "^5.15.14 || ^6.0.0 || ^7.0.0",
|
||||
"date-fns": "^2.25.0 || ^3.2.0 || ^4.0.0",
|
||||
"date-fns-jalali": "^2.13.0-0 || ^3.2.0-0 || ^4.0.0-0",
|
||||
"dayjs": "^1.10.7",
|
||||
"luxon": "^3.0.2",
|
||||
"moment": "^2.29.4",
|
||||
"moment-hijri": "^2.1.2 || ^3.0.0",
|
||||
"moment-jalaali": "^0.7.4 || ^0.8.0 || ^0.9.0 || ^0.10.0",
|
||||
"react": "^17.0.0 || ^18.0.0 || ^19.0.0",
|
||||
"react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"@emotion/react": {
|
||||
"optional": true
|
||||
},
|
||||
"@emotion/styled": {
|
||||
"optional": true
|
||||
},
|
||||
"date-fns": {
|
||||
"optional": true
|
||||
},
|
||||
"date-fns-jalali": {
|
||||
"optional": true
|
||||
},
|
||||
"dayjs": {
|
||||
"optional": true
|
||||
},
|
||||
"luxon": {
|
||||
"optional": true
|
||||
},
|
||||
"moment": {
|
||||
"optional": true
|
||||
},
|
||||
"moment-hijri": {
|
||||
"optional": true
|
||||
},
|
||||
"moment-jalaali": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/@mui/x-internals": {
|
||||
"version": "8.7.0",
|
||||
"resolved": "https://registry.npmjs.org/@mui/x-internals/-/x-internals-8.7.0.tgz",
|
||||
"integrity": "sha512-1aduds7L2i6t0HIFNlqG4UB07SVEg+wcnJ9GGu8B/X8EVwO72Rt+rc8ZlqK10ooscq1AlTwi2dd0q+hz+aWk+Q==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.27.6",
|
||||
"@mui/utils": "^7.1.1",
|
||||
"reselect": "^5.1.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=14.0.0"
|
||||
},
|
||||
"funding": {
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/mui-org"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@mui/system": "^5.15.14 || ^6.0.0 || ^7.0.0",
|
||||
"react": "^17.0.0 || ^18.0.0 || ^19.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@napi-rs/wasm-runtime": {
|
||||
"version": "0.2.8",
|
||||
"resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.8.tgz",
|
||||
@@ -2082,6 +2197,23 @@
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@types/lodash": {
|
||||
"version": "4.17.20",
|
||||
"resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.20.tgz",
|
||||
"integrity": "sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@types/lodash.debounce": {
|
||||
"version": "4.0.9",
|
||||
"resolved": "https://registry.npmjs.org/@types/lodash.debounce/-/lodash.debounce-4.0.9.tgz",
|
||||
"integrity": "sha512-Ma5JcgTREwpLRwMM+XwBR7DaWe96nC38uCBDFKZWbNKD+osjVzdpnUSwBcqCptrp16sSOLBAUb50Car5I0TCsQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@types/lodash": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/node": {
|
||||
"version": "22.14.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-22.14.0.tgz",
|
||||
@@ -2099,9 +2231,9 @@
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@types/prop-types": {
|
||||
"version": "15.7.14",
|
||||
"resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.14.tgz",
|
||||
"integrity": "sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==",
|
||||
"version": "15.7.15",
|
||||
"resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz",
|
||||
"integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@types/react": {
|
||||
@@ -5012,6 +5144,12 @@
|
||||
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/lodash.debounce": {
|
||||
"version": "4.0.8",
|
||||
"resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
|
||||
"integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/lodash.merge": {
|
||||
"version": "4.6.2",
|
||||
"resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
|
||||
@@ -5698,12 +5836,6 @@
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/regenerator-runtime": {
|
||||
"version": "0.14.1",
|
||||
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
|
||||
"integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/regexp.prototype.flags": {
|
||||
"version": "1.5.4",
|
||||
"resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz",
|
||||
@@ -5725,6 +5857,12 @@
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/reselect": {
|
||||
"version": "5.1.1",
|
||||
"resolved": "https://registry.npmjs.org/reselect/-/reselect-5.1.1.tgz",
|
||||
"integrity": "sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/resolve": {
|
||||
"version": "1.22.10",
|
||||
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz",
|
||||
|
||||
@@ -32,11 +32,14 @@
|
||||
"@fontsource-variable/dm-sans": "^5.2.5",
|
||||
"@fontsource/barlow": "^5.2.5",
|
||||
"@iconify/react": "^5.2.1",
|
||||
"@mui/icons-material": "^7.2.0",
|
||||
"@mui/lab": "^7.0.0-beta.10",
|
||||
"@mui/material": "^7.0.1",
|
||||
"@mui/x-date-pickers": "^8.7.0",
|
||||
"apexcharts": "^4.5.0",
|
||||
"dayjs": "^1.11.13",
|
||||
"es-toolkit": "^1.34.1",
|
||||
"lodash.debounce": "^4.0.8",
|
||||
"minimal-shared": "^1.0.7",
|
||||
"react": "^19.1.0",
|
||||
"react-apexcharts": "^1.7.0",
|
||||
@@ -46,6 +49,7 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"@eslint/js": "^9.23.0",
|
||||
"@types/lodash.debounce": "^4.0.9",
|
||||
"@types/node": "^22.14.0",
|
||||
"@types/react": "^19.1.0",
|
||||
"@types/react-dom": "^19.1.1",
|
||||
|
||||
230
src/client/dd-hub-react/public/api/document.json
Normal file
230
src/client/dd-hub-react/public/api/document.json
Normal file
@@ -0,0 +1,230 @@
|
||||
[
|
||||
{
|
||||
"id": 1,
|
||||
"name": "example1.pdf",
|
||||
"addedWhen": "2024-01-12T10:00:00.000Z",
|
||||
"addedWho": "TekH",
|
||||
"attributes": [
|
||||
{
|
||||
"name": "invoiceNumber",
|
||||
"serilizedValue": "INV-20250714-001"
|
||||
},
|
||||
{
|
||||
"name": "customerName",
|
||||
"serilizedValue": "John Doe"
|
||||
},
|
||||
{
|
||||
"name": "startDate",
|
||||
"serilizedValue": "2025-07-01"
|
||||
},
|
||||
{
|
||||
"name": "endDate",
|
||||
"serilizedValue": "2025-07-14"
|
||||
},
|
||||
{
|
||||
"name": "minAmount",
|
||||
"serilizedValue": "100.50"
|
||||
},
|
||||
{
|
||||
"name": "maxAmount",
|
||||
"serilizedValue": "1000.00"
|
||||
},
|
||||
{
|
||||
"name": "taxIncluded",
|
||||
"serilizedValue": "true"
|
||||
},
|
||||
{
|
||||
"name": "createdAt",
|
||||
"serilizedValue": "2025-07-10"
|
||||
},
|
||||
{
|
||||
"name": "deliveryTime",
|
||||
"serilizedValue": "15:30:00"
|
||||
},
|
||||
{
|
||||
"name": "lastUpdated",
|
||||
"serilizedValue": "2025-07-14T10:45:00"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"name": "example2.pdf",
|
||||
"addedWhen": "2024-02-03T09:30:00.000Z",
|
||||
"addedWho": "bob",
|
||||
"changedWhen": "2024-03-15T12:00:00.000Z",
|
||||
"changedWho": "KammM",
|
||||
"attributes": [
|
||||
{
|
||||
"name": "invoiceNumber",
|
||||
"serilizedValue": "INV-20250701-007"
|
||||
},
|
||||
{
|
||||
"name": "customerName",
|
||||
"serilizedValue": "Jane Smith"
|
||||
},
|
||||
{
|
||||
"name": "startDate",
|
||||
"serilizedValue": "2025-06-01"
|
||||
},
|
||||
{
|
||||
"name": "endDate",
|
||||
"serilizedValue": "2025-06-30"
|
||||
},
|
||||
{
|
||||
"name": "minAmount",
|
||||
"serilizedValue": "250.00"
|
||||
},
|
||||
{
|
||||
"name": "maxAmount",
|
||||
"serilizedValue": "850.75"
|
||||
},
|
||||
{
|
||||
"name": "taxIncluded",
|
||||
"serilizedValue": "false"
|
||||
},
|
||||
{
|
||||
"name": "createdAt",
|
||||
"serilizedValue": "2025-06-15"
|
||||
},
|
||||
{
|
||||
"name": "deliveryTime",
|
||||
"serilizedValue": "09:00:00"
|
||||
},
|
||||
{
|
||||
"name": "lastUpdated",
|
||||
"serilizedValue": "2025-06-30T14:15:00"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"name": "document1.docx",
|
||||
"addedWhen": "2023-12-20T14:45:00.000Z",
|
||||
"addedWho": "SchreiberM",
|
||||
"attributes": [
|
||||
{
|
||||
"name": "invoiceNumber",
|
||||
"serilizedValue": "INV-20250620-043"
|
||||
},
|
||||
{
|
||||
"name": "customerName",
|
||||
"serilizedValue": "Max Mustermann"
|
||||
},
|
||||
{
|
||||
"name": "startDate",
|
||||
"serilizedValue": "2025-05-01"
|
||||
},
|
||||
{
|
||||
"name": "endDate",
|
||||
"serilizedValue": "2025-05-15"
|
||||
},
|
||||
{
|
||||
"name": "maxAmount",
|
||||
"serilizedValue": "600.00"
|
||||
},
|
||||
{
|
||||
"name": "taxIncluded",
|
||||
"serilizedValue": "true"
|
||||
},
|
||||
{
|
||||
"name": "createdAt",
|
||||
"serilizedValue": "2025-05-02"
|
||||
},
|
||||
{
|
||||
"name": "lastUpdated",
|
||||
"serilizedValue": "2025-05-15T11:00:00"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"name": "spreadsheet1.xlsx",
|
||||
"addedWhen": "2024-05-01T08:15:00.000Z",
|
||||
"addedWho": "KammM",
|
||||
"changedWhen": "2024-06-10T16:20:00.000Z",
|
||||
"changedWho": "OlgunR",
|
||||
"attributes": [
|
||||
{
|
||||
"name": "invoiceNumber",
|
||||
"serilizedValue": "INV-20250410-021"
|
||||
},
|
||||
{
|
||||
"name": "startDate",
|
||||
"serilizedValue": "2025-04-01"
|
||||
},
|
||||
{
|
||||
"name": "endDate",
|
||||
"serilizedValue": "2025-04-30"
|
||||
},
|
||||
{
|
||||
"name": "minAmount",
|
||||
"serilizedValue": "150.99"
|
||||
},
|
||||
{
|
||||
"name": "maxAmount",
|
||||
"serilizedValue": "999.99"
|
||||
},
|
||||
{
|
||||
"name": "createdAt",
|
||||
"serilizedValue": "2025-04-15"
|
||||
},
|
||||
{
|
||||
"name": "deliveryTime",
|
||||
"serilizedValue": "17:45:00"
|
||||
},
|
||||
{
|
||||
"name": "lastUpdated",
|
||||
"serilizedValue": "2025-04-30T18:30:00"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"name": "report.docx",
|
||||
"addedWhen": "2024-04-17T11:25:00.000Z",
|
||||
"addedWho": "SchreiberM",
|
||||
"attributes": [
|
||||
{
|
||||
"name": "invoiceNumber",
|
||||
"serilizedValue": "INV-20250305-099"
|
||||
},
|
||||
{
|
||||
"name": "customerName",
|
||||
"serilizedValue": "Ali Veli"
|
||||
},
|
||||
{
|
||||
"name": "startDate",
|
||||
"serilizedValue": "2025-03-01"
|
||||
},
|
||||
{
|
||||
"name": "endDate",
|
||||
"serilizedValue": "2025-03-20"
|
||||
},
|
||||
{
|
||||
"name": "minAmount",
|
||||
"serilizedValue": "75.00"
|
||||
},
|
||||
{
|
||||
"name": "maxAmount",
|
||||
"serilizedValue": "500.00"
|
||||
},
|
||||
{
|
||||
"name": "taxIncluded",
|
||||
"serilizedValue": "false"
|
||||
},
|
||||
{
|
||||
"name": "createdAt",
|
||||
"serilizedValue": "2025-03-02"
|
||||
},
|
||||
{
|
||||
"name": "deliveryTime",
|
||||
"serilizedValue": "08:20:00"
|
||||
},
|
||||
{
|
||||
"name": "lastUpdated",
|
||||
"serilizedValue": "2025-03-20T09:30:00"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||
<svg width="800px" height="800px" viewBox="-10 -10 52 52" xmlns="http://www.w3.org/2000/svg"><title>file_type_word2</title><path d="M18.536,2.323V4.868c3.4.019,7.12-.035,10.521.019a.783.783,0,0,1,.912.861c.054,6.266-.013,12.89.032,19.157-.02.4.009,1.118-.053,1.517-.079.509-.306.607-.817.676-.286.039-.764.034-1.045.047-2.792-.014-5.582-.011-8.374-.01l-1.175,0v2.547L2,27.133Q2,16,2,4.873L18.536,2.322" style="fill:#283c82"/><path d="M18.536,5.822h10.5V26.18h-10.5V23.635h8.27V22.363h-8.27v-1.59h8.27V19.5h-8.27v-1.59h8.27V16.637h-8.27v-1.59h8.27V13.774h-8.27v-1.59h8.27V10.911h-8.27V9.321h8.27V8.048h-8.27V5.822" style="fill:#fff"/><path d="M8.573,11.443c.6-.035,1.209-.06,1.813-.092.423,2.147.856,4.291,1.314,6.429.359-2.208.757-4.409,1.142-6.613.636-.022,1.272-.057,1.905-.1-.719,3.082-1.349,6.19-2.134,9.254-.531.277-1.326-.013-1.956.032-.423-2.106-.916-4.2-1.295-6.314C8.99,16.1,8.506,18.133,8.08,20.175q-.916-.048-1.839-.111c-.528-2.8-1.148-5.579-1.641-8.385.544-.025,1.091-.048,1.635-.067.328,2.026.7,4.043.986,6.072.448-2.08.907-4.161,1.352-6.241" style="fill:#fff"/></svg>
|
||||
|
After Width: | Height: | Size: 1.2 KiB |
66
src/client/dd-hub-react/public/assets/icons/file/pdf.svg
Normal file
66
src/client/dd-hub-react/public/assets/icons/file/pdf.svg
Normal file
@@ -0,0 +1,66 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||
<svg version="1.1" id="_x35_" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
viewBox="-300 -300 1112 1112" xml:space="preserve">
|
||||
<g>
|
||||
<polygon style="fill:#B12A27;" points="475.435,117.825 475.435,512 47.791,512 47.791,0.002 357.613,0.002 412.491,54.881 "/>
|
||||
<rect x="36.565" y="34.295" style="fill:#F2F2F2;" width="205.097" height="91.768"/>
|
||||
<g>
|
||||
<g>
|
||||
<path style="fill:#B12A27;" d="M110.132,64.379c-0.905-2.186-2.111-4.146-3.769-5.804c-1.658-1.658-3.694-3.015-6.031-3.92
|
||||
c-2.412-0.98-5.126-1.432-8.141-1.432H69.651v58.195h11.383V89.481h11.157c3.015,0,5.729-0.452,8.141-1.432
|
||||
c2.337-0.905,4.372-2.261,6.031-3.92c1.659-1.658,2.865-3.543,3.769-5.804c0.829-2.186,1.282-4.523,1.282-6.935
|
||||
C111.413,68.902,110.961,66.565,110.132,64.379z M97.844,77.118c-1.508,1.432-3.618,2.186-6.181,2.186H81.034V63.323h10.629
|
||||
c2.563,0,4.674,0.754,6.181,2.261c1.432,1.432,2.186,3.392,2.186,5.804C100.031,73.726,99.277,75.686,97.844,77.118z"/>
|
||||
<path style="fill:#B12A27;" d="M164.558,75.761c-0.075-2.035-0.151-3.844-0.377-5.503c-0.226-1.659-0.603-3.166-1.131-4.598
|
||||
c-0.528-1.357-1.206-2.714-2.111-3.92c-2.035-2.94-4.523-5.126-7.312-6.483c-2.865-1.357-6.257-2.035-10.252-2.035h-20.956
|
||||
v58.195h20.956c3.995,0,7.387-0.678,10.252-2.035c2.789-1.357,5.277-3.543,7.312-6.483c0.905-1.206,1.583-2.563,2.111-3.92
|
||||
c0.528-1.432,0.905-2.94,1.131-4.598c0.226-1.658,0.301-3.468,0.377-5.503c0.075-1.96,0.075-4.146,0.075-6.558
|
||||
C164.633,79.908,164.633,77.721,164.558,75.761z M153.175,88.2c0,1.734-0.151,3.091-0.302,4.297
|
||||
c-0.151,1.131-0.377,2.186-0.678,2.94c-0.301,0.829-0.754,1.583-1.281,2.261c-1.885,2.412-4.749,3.543-8.518,3.543h-8.669V63.323
|
||||
h8.669c3.769,0,6.634,1.206,8.518,3.618c0.528,0.678,0.98,1.357,1.281,2.186s0.528,1.809,0.678,3.015
|
||||
c0.151,1.131,0.302,2.563,0.302,4.221c0.075,1.659,0.075,3.694,0.075,5.955C153.251,84.581,153.251,86.541,153.175,88.2z"/>
|
||||
<path style="fill:#B12A27;" d="M213.18,63.323V53.222h-38.37v58.195h11.383V87.823h22.992V77.646h-22.992V63.323H213.18z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path style="fill:#B12A27;" d="M110.132,64.379c-0.905-2.186-2.111-4.146-3.769-5.804c-1.658-1.658-3.694-3.015-6.031-3.92
|
||||
c-2.412-0.98-5.126-1.432-8.141-1.432H69.651v58.195h11.383V89.481h11.157c3.015,0,5.729-0.452,8.141-1.432
|
||||
c2.337-0.905,4.372-2.261,6.031-3.92c1.659-1.658,2.865-3.543,3.769-5.804c0.829-2.186,1.282-4.523,1.282-6.935
|
||||
C111.413,68.902,110.961,66.565,110.132,64.379z M97.844,77.118c-1.508,1.432-3.618,2.186-6.181,2.186H81.034V63.323h10.629
|
||||
c2.563,0,4.674,0.754,6.181,2.261c1.432,1.432,2.186,3.392,2.186,5.804C100.031,73.726,99.277,75.686,97.844,77.118z"/>
|
||||
</g>
|
||||
</g>
|
||||
<polygon style="opacity:0.08;fill:#040000;" points="475.435,117.825 475.435,512 47.791,512 47.791,419.581 247.705,219.667
|
||||
259.54,207.832 266.098,201.273 277.029,190.343 289.995,177.377 412.491,54.881 "/>
|
||||
<polygon style="fill:#771B1B;" points="475.435,117.836 357.599,117.836 357.599,0 "/>
|
||||
<g>
|
||||
<path style="fill:#F2F2F2;" d="M414.376,370.658c-2.488-4.372-5.88-8.518-10.101-12.287c-3.467-3.166-7.538-6.106-12.137-8.82
|
||||
c-18.544-10.93-45.003-16.207-80.961-16.207h-3.618c-1.96-1.809-3.995-3.618-6.106-5.503
|
||||
c-13.644-12.287-24.499-25.63-32.942-40.48c16.584-36.561,24.499-69.126,23.519-96.867c-0.151-4.674-0.829-9.046-2.035-13.117
|
||||
c-1.809-6.558-4.824-12.363-9.046-17.112c-0.075-0.075-0.075-0.075-0.151-0.151c-6.709-7.538-16.056-11.835-25.555-11.835
|
||||
c-9.574,0-18.393,4.146-24.801,11.76c-6.332,7.538-9.724,17.866-9.875,30.002c-0.226,18.544,1.281,36.108,4.448,52.315
|
||||
c0.301,1.282,0.528,2.563,0.829,3.844c3.166,14.7,7.84,28.645,13.87,41.611c-7.086,14.398-14.247,26.836-19.223,35.279
|
||||
c-3.769,6.408-7.915,13.117-12.212,19.826c-19.373,3.468-35.807,7.689-50.129,12.966c-19.373,7.011-34.902,16.056-46.059,26.836
|
||||
c-7.237,6.935-12.137,14.323-14.549,22.012c-2.563,7.915-2.412,15.83,0.452,22.916c2.638,6.558,7.387,12.061,13.72,15.83
|
||||
c1.508,0.905,3.091,1.658,4.749,2.337c4.825,1.96,10.101,3.015,15.604,3.015c12.74,0,25.856-5.503,36.937-15.378
|
||||
c20.655-18.469,41.988-48.169,54.577-66.94c10.327-1.583,21.559-2.94,34.224-4.297c14.926-1.508,28.118-2.412,40.104-2.865
|
||||
c3.694,3.317,7.237,6.483,10.629,9.498c18.846,16.81,33.168,28.947,46.134,37.465c0,0.075,0.075,0.075,0.151,0.075
|
||||
c5.126,3.392,10.026,6.181,14.926,8.443c5.503,2.563,11.081,3.92,16.81,3.92c7.237,0,14.021-2.186,19.675-6.181
|
||||
c5.729-4.146,9.875-10.101,11.76-16.81C420.18,387.694,418.899,378.724,414.376,370.658z M247.705,219.667
|
||||
c-1.055-9.348-1.508-19.072-1.357-29.324c0.151-9.724,3.694-16.283,8.895-16.283c3.92,0,8.066,3.543,9.95,10.327
|
||||
c0.528,2.035,0.905,4.372,0.98,7.01c0.151,3.166,0.075,6.483-0.075,9.875c-0.452,9.574-2.111,19.75-4.975,30.681
|
||||
c-1.734,7.011-3.995,14.323-6.784,21.936C251.173,243.186,248.911,231.803,247.705,219.667z M121.967,418.073
|
||||
c-1.282-3.166,0.151-9.272,7.991-16.81c11.986-11.458,30.756-20.504,56.914-27.364c-4.975,6.784-9.875,12.966-14.624,18.619
|
||||
c-7.237,8.744-14.172,16.132-20.429,21.71c-5.352,4.824-11.232,7.84-16.81,8.594c-0.98,0.151-1.96,0.226-2.94,0.226
|
||||
C127.168,423.049,123.173,421.089,121.967,418.073z M242.428,337.942l0.528-0.829l-0.829,0.151
|
||||
c0.151-0.377,0.377-0.754,0.603-1.055c3.166-5.352,7.161-12.212,11.458-20.127l0.377,0.829l0.98-2.035
|
||||
c3.166,4.523,6.634,8.971,10.252,13.267c1.734,2.035,3.543,3.995,5.352,5.955l-1.206,0.075l1.055,0.98
|
||||
c-3.091,0.226-6.332,0.528-9.574,0.829c-2.035,0.226-4.146,0.377-6.257,0.603C250.796,337.037,246.499,337.49,242.428,337.942z
|
||||
M369.297,384.98c-8.971-5.729-18.996-13.795-31.359-24.575c17.564,1.809,31.359,5.654,41.159,11.383
|
||||
c4.297,2.488,7.538,5.051,9.724,7.538c3.618,3.844,4.9,7.312,4.221,9.649c-0.603,2.337-3.241,3.92-6.483,3.92
|
||||
c-1.885,0-3.844-0.452-5.88-1.432c-3.468-1.658-7.086-3.694-10.93-6.181C369.598,385.282,369.448,385.131,369.297,384.98z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 5.9 KiB |
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||
<svg width="800px" height="800px" viewBox="-6 -6 36 36" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M13 3L13.7071 2.29289C13.5196 2.10536 13.2652 2 13 2V3ZM14 22C14.5523 22 15 21.5523 15 21C15 20.4477 14.5523 20 14 20V22ZM19 9H20C20 8.73478 19.8946 8.48043 19.7071 8.29289L19 9ZM18 10C18 10.5523 18.4477 11 19 11C19.5523 11 20 10.5523 20 10H18ZM5.21799 19.908L4.32698 20.362H4.32698L5.21799 19.908ZM6.09202 20.782L6.54601 19.891L6.54601 19.891L6.09202 20.782ZM6.09202 3.21799L5.63803 2.32698L5.63803 2.32698L6.09202 3.21799ZM5.21799 4.09202L4.32698 3.63803L4.32698 3.63803L5.21799 4.09202ZM13.109 8.45399L14 8V8L13.109 8.45399ZM13.546 8.89101L14 8L13.546 8.89101ZM17.2299 17.7929C16.8394 18.1834 16.8394 18.8166 17.2299 19.2071C17.6204 19.5976 18.2536 19.5976 18.6441 19.2071L17.2299 17.7929ZM15.0316 15.2507C14.8939 15.7856 15.2159 16.3308 15.7507 16.4684C16.2856 16.6061 16.8308 16.2841 16.9684 15.7493L15.0316 15.2507ZM17.9375 20C17.3852 20 16.9375 20.4477 16.9375 21C16.9375 21.5523 17.3852 22 17.9375 22V20ZM17.9475 22C18.4998 22 18.9475 21.5523 18.9475 21C18.9475 20.4477 18.4998 20 17.9475 20V22ZM13 2H8.2V4H13V2ZM4 6.2V17.8H6V6.2H4ZM8.2 22H14V20H8.2V22ZM19.7071 8.29289L13.7071 2.29289L12.2929 3.70711L18.2929 9.70711L19.7071 8.29289ZM20 10V9H18V10H20ZM4 17.8C4 18.3436 3.99922 18.8114 4.03057 19.195C4.06287 19.5904 4.13419 19.9836 4.32698 20.362L6.10899 19.454C6.0838 19.4045 6.04612 19.3038 6.02393 19.0322C6.00078 18.7488 6 18.3766 6 17.8H4ZM8.2 20C7.62345 20 7.25117 19.9992 6.96784 19.9761C6.69617 19.9539 6.59545 19.9162 6.54601 19.891L5.63803 21.673C6.01641 21.8658 6.40963 21.9371 6.80497 21.9694C7.18864 22.0008 7.65645 22 8.2 22V20ZM4.32698 20.362C4.6146 20.9265 5.07354 21.3854 5.63803 21.673L6.54601 19.891C6.35785 19.7951 6.20487 19.6422 6.10899 19.454L4.32698 20.362ZM8.2 2C7.65645 2 7.18864 1.99922 6.80497 2.03057C6.40963 2.06287 6.01641 2.13419 5.63803 2.32698L6.54601 4.10899C6.59545 4.0838 6.69617 4.04612 6.96784 4.02393C7.25117 4.00078 7.62345 4 8.2 4V2ZM6 6.2C6 5.62345 6.00078 5.25117 6.02393 4.96784C6.04612 4.69617 6.0838 4.59545 6.10899 4.54601L4.32698 3.63803C4.13419 4.01641 4.06287 4.40963 4.03057 4.80497C3.99922 5.18864 4 5.65645 4 6.2H6ZM5.63803 2.32698C5.07354 2.6146 4.6146 3.07354 4.32698 3.63803L6.10899 4.54601C6.20487 4.35785 6.35785 4.20487 6.54601 4.10899L5.63803 2.32698ZM12 3V7.4H14V3H12ZM14.6 10H19V8H14.6V10ZM12 7.4C12 7.66353 11.9992 7.92131 12.0169 8.13823C12.0356 8.36682 12.0797 8.63656 12.218 8.90798L14 8C14.0293 8.05751 14.0189 8.08028 14.0103 7.97537C14.0008 7.85878 14 7.69653 14 7.4H12ZM14.6 8C14.3035 8 14.1412 7.99922 14.0246 7.9897C13.9197 7.98113 13.9425 7.9707 14 8L13.092 9.78201C13.3634 9.92031 13.6332 9.96438 13.8618 9.98305C14.0787 10.0008 14.3365 10 14.6 10V8ZM12.218 8.90798C12.4097 9.2843 12.7157 9.59027 13.092 9.78201L14 8V8L12.218 8.90798ZM18.937 16C18.937 16.1732 18.8915 16.3053 18.6175 16.5697C18.4638 16.718 18.2828 16.8653 18.0319 17.074C17.7936 17.2723 17.5141 17.5087 17.2299 17.7929L18.6441 19.2071C18.86 18.9913 19.0805 18.8033 19.3109 18.6116C19.5287 18.4305 19.7852 18.2223 20.0065 18.0087C20.4825 17.5493 20.937 16.9314 20.937 16H18.937ZM17.937 15C18.4893 15 18.937 15.4477 18.937 16H20.937C20.937 14.3431 19.5938 13 17.937 13V15ZM16.9684 15.7493C17.0795 15.3177 17.4724 15 17.937 15V13C16.5377 13 15.3645 13.957 15.0316 15.2507L16.9684 15.7493ZM17.9375 22H17.9475V20H17.9375V22Z" fill="#000000"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.4 KiB |
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||
<svg width="800px" height="800px" viewBox="-8 -8 48 48" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><linearGradient id="a" x1="4.494" y1="-2092.086" x2="13.832" y2="-2075.914" gradientTransform="translate(0 2100)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#18884f"/><stop offset="0.5" stop-color="#117e43"/><stop offset="1" stop-color="#0b6631"/></linearGradient></defs><title>file_type_excel</title><path d="M19.581,15.35,8.512,13.4V27.809A1.192,1.192,0,0,0,9.705,29h19.1A1.192,1.192,0,0,0,30,27.809h0V22.5Z" style="fill:#185c37"/><path d="M19.581,3H9.705A1.192,1.192,0,0,0,8.512,4.191h0V9.5L19.581,16l5.861,1.95L30,16V9.5Z" style="fill:#21a366"/><path d="M8.512,9.5H19.581V16H8.512Z" style="fill:#107c41"/><path d="M16.434,8.2H8.512V24.45h7.922a1.2,1.2,0,0,0,1.194-1.191V9.391A1.2,1.2,0,0,0,16.434,8.2Z" style="opacity:0.10000000149011612;isolation:isolate"/><path d="M15.783,8.85H8.512V25.1h7.271a1.2,1.2,0,0,0,1.194-1.191V10.041A1.2,1.2,0,0,0,15.783,8.85Z" style="opacity:0.20000000298023224;isolation:isolate"/><path d="M15.783,8.85H8.512V23.8h7.271a1.2,1.2,0,0,0,1.194-1.191V10.041A1.2,1.2,0,0,0,15.783,8.85Z" style="opacity:0.20000000298023224;isolation:isolate"/><path d="M15.132,8.85H8.512V23.8h6.62a1.2,1.2,0,0,0,1.194-1.191V10.041A1.2,1.2,0,0,0,15.132,8.85Z" style="opacity:0.20000000298023224;isolation:isolate"/><path d="M3.194,8.85H15.132a1.193,1.193,0,0,1,1.194,1.191V21.959a1.193,1.193,0,0,1-1.194,1.191H3.194A1.192,1.192,0,0,1,2,21.959V10.041A1.192,1.192,0,0,1,3.194,8.85Z" style="fill:url(#a)"/><path d="M5.7,19.873l2.511-3.884-2.3-3.862H7.758L9.013,14.6c.116.234.2.408.238.524h.017c.082-.188.169-.369.26-.546l1.342-2.447h1.7l-2.359,3.84,2.419,3.905H10.821l-1.45-2.711A2.355,2.355,0,0,1,9.2,16.8H9.176a1.688,1.688,0,0,1-.168.351L7.515,19.873Z" style="fill:#fff"/><path d="M28.806,3H19.581V9.5H30V4.191A1.192,1.192,0,0,0,28.806,3Z" style="fill:#33c481"/><path d="M19.581,16H30v6.5H19.581Z" style="fill:#107c41"/></svg>
|
||||
|
After Width: | Height: | Size: 2.1 KiB |
@@ -0,0 +1,3 @@
|
||||
<svg width="24" height="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M20 19.59V8l-6-6H6c-1.1 0-1.99.9-1.99 2L4 20c0 1.1.89 2 1.99 2H18c.45 0 .85-.15 1.19-.4l-4.43-4.43c-.8.52-1.74.83-2.76.83-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5c0 1.02-.31 1.96-.83 2.75zM9 13c0 1.66 1.34 3 3 3s3-1.34 3-3-1.34-3-3-3-3 1.34-3 3"></path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 356 B |
@@ -1,3 +1,8 @@
|
||||
|
||||
import { Doc } from 'src/services/document-service';
|
||||
import { Product } from 'src/services/product-service';
|
||||
import { Attribute, Type } from 'src/services/attribute-service';
|
||||
|
||||
import {
|
||||
_id,
|
||||
_price,
|
||||
@@ -9,6 +14,7 @@ import {
|
||||
_postTitles,
|
||||
_description,
|
||||
_productNames,
|
||||
_base64,
|
||||
} from './_mock';
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
@@ -74,7 +80,7 @@ const COLORS = [
|
||||
'#FFC107',
|
||||
];
|
||||
|
||||
export const _products = [...Array(24)].map((_, index) => {
|
||||
export const _productsTextile = [...Array(24)].map((_, index) => {
|
||||
const setIndex = index + 1;
|
||||
|
||||
return {
|
||||
@@ -208,3 +214,351 @@ export const _notifications = [
|
||||
isUnRead: false,
|
||||
},
|
||||
];
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
export const _products: Product[] = [
|
||||
{
|
||||
id: '1',
|
||||
name: "User Manager",
|
||||
version: "1.0.0"
|
||||
},
|
||||
{
|
||||
id: '2',
|
||||
name: "Envelope Generator",
|
||||
version: "1.0.0"
|
||||
}
|
||||
];
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
export const _attributes: Attribute[] = [
|
||||
{ id: 1, label: 'Rechnungsnummer', name: 'invoiceNumber', type: 'VARCHAR' },
|
||||
{ id: 2, label: 'Kundenname', name: 'customerName', type: 'INTEGER' },
|
||||
{ id: 3, label: 'Startdatum', name: 'startDate', type: 'DATE' },
|
||||
{ id: 4, label: 'Enddatum', name: 'endDate', type: 'DATE' },
|
||||
{ id: 5, label: 'Status der Rechnung', name: 'status', type: 'VARCHAR' },
|
||||
{ id: 6, label: 'Mindestbetrag', name: 'minAmount', type: 'DECIMAL' },
|
||||
{ id: 7, label: 'Höchstbetrag', name: 'maxAmount', type: 'DECIMAL' },
|
||||
{ id: 8, label: 'Steuer inbegriffen?', name: 'taxIncluded', type: 'BOOLEAN' },
|
||||
{ id: 9, label: 'Währung', name: 'currency', type: 'VARCHAR' },
|
||||
{ id: 10, label: 'Erstellungsdatum', name: 'createdAt', type: 'DATE' },
|
||||
{ id: 11, label: 'Lieferzeit', name: 'deliveryTime', type: 'TIME' },
|
||||
{ id: 12, label: 'Letzte Aktualisierung', name: 'lastUpdated', type: 'DATETIME' }
|
||||
];
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
export const _documents: Doc[] = [
|
||||
{
|
||||
id: 1,
|
||||
name: "example1.pdf",
|
||||
addedWhen: new Date("2024-01-12T10:00:00Z"),
|
||||
addedWho: "TekH",
|
||||
attributes: [
|
||||
{
|
||||
name: "invoiceNumber",
|
||||
serilizedValue: "INV-20250714-001",
|
||||
type: 'VARCHAR'
|
||||
},
|
||||
{
|
||||
name: "customerName",
|
||||
serilizedValue: "John Doe",
|
||||
type: 'VARCHAR'
|
||||
},
|
||||
{
|
||||
name: "startDate",
|
||||
serilizedValue: "2025-07-01",
|
||||
type: 'DATE'
|
||||
},
|
||||
{
|
||||
name: "endDate",
|
||||
serilizedValue: "2025-07-14",
|
||||
type: 'DATE'
|
||||
},
|
||||
{
|
||||
name: "minAmount",
|
||||
serilizedValue: "100.50",
|
||||
type: 'DECIMAL'
|
||||
},
|
||||
{
|
||||
name: "maxAmount",
|
||||
serilizedValue: "1000.00",
|
||||
type: 'DECIMAL'
|
||||
},
|
||||
{
|
||||
name: "taxIncluded",
|
||||
serilizedValue: "true",
|
||||
type: 'BOOLEAN'
|
||||
},
|
||||
{
|
||||
name: "createdAt",
|
||||
serilizedValue: "2025-07-10",
|
||||
type: 'DATE'
|
||||
},
|
||||
{
|
||||
name: "deliveryTime",
|
||||
serilizedValue: "15:30:00",
|
||||
type: 'TIME'
|
||||
},
|
||||
{
|
||||
name: "lastUpdated",
|
||||
serilizedValue: "2025-07-14T10:45:00",
|
||||
type: 'DATETIME'
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
name: "example2.pdf",
|
||||
addedWhen: new Date("2024-02-03T09:30:00Z"),
|
||||
addedWho: "bob",
|
||||
changedWhen: new Date("2024-03-15T12:00:00Z"),
|
||||
changedWho: "KammM",
|
||||
attributes: [
|
||||
{
|
||||
name: "invoiceNumber",
|
||||
serilizedValue: "INV-20250701-007",
|
||||
type: 'VARCHAR'
|
||||
},
|
||||
{
|
||||
name: "customerName",
|
||||
serilizedValue: "Jane Smith",
|
||||
type: 'VARCHAR'
|
||||
},
|
||||
{
|
||||
name: "startDate",
|
||||
serilizedValue: "2025-06-01",
|
||||
type: 'DATE'
|
||||
},
|
||||
{
|
||||
name: "endDate",
|
||||
serilizedValue: "2025-06-30",
|
||||
type: 'DATE'
|
||||
},
|
||||
{
|
||||
name: "minAmount",
|
||||
serilizedValue: "250.00",
|
||||
type: 'DECIMAL'
|
||||
},
|
||||
{
|
||||
name: "maxAmount",
|
||||
serilizedValue: "850.75",
|
||||
type: 'DECIMAL'
|
||||
},
|
||||
{
|
||||
name: "taxIncluded",
|
||||
serilizedValue: "false",
|
||||
type: 'BOOLEAN'
|
||||
},
|
||||
{
|
||||
name: "createdAt",
|
||||
serilizedValue: "2025-06-15",
|
||||
type: 'DATE'
|
||||
},
|
||||
{
|
||||
name: "deliveryTime",
|
||||
serilizedValue: "09:00:00",
|
||||
type: 'TIME'
|
||||
},
|
||||
{
|
||||
name: "lastUpdated",
|
||||
serilizedValue: "2025-06-30T14:15:00",
|
||||
type: 'DATETIME'
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
name: "document1.docx",
|
||||
addedWhen: new Date("2023-12-20T14:45:00Z"),
|
||||
addedWho: "SchreiberM",
|
||||
attributes: [
|
||||
{
|
||||
name: "invoiceNumber",
|
||||
serilizedValue: "INV-20250620-043",
|
||||
type: 'VARCHAR'
|
||||
},
|
||||
{
|
||||
name: "customerName",
|
||||
serilizedValue: "Max Mustermann",
|
||||
type: 'VARCHAR'
|
||||
},
|
||||
{
|
||||
name: "startDate",
|
||||
serilizedValue: "2025-05-01",
|
||||
type: 'DATE'
|
||||
},
|
||||
{
|
||||
name: "endDate",
|
||||
serilizedValue: "2025-05-15",
|
||||
type: 'DATE'
|
||||
},
|
||||
{
|
||||
name: "maxAmount",
|
||||
serilizedValue: "600.00",
|
||||
type: 'DECIMAL'
|
||||
},
|
||||
{
|
||||
name: "taxIncluded",
|
||||
serilizedValue: "true",
|
||||
type: 'BOOLEAN'
|
||||
},
|
||||
{
|
||||
name: "createdAt",
|
||||
serilizedValue: "2025-05-02",
|
||||
type: 'DATE'
|
||||
},
|
||||
{
|
||||
name: "lastUpdated",
|
||||
serilizedValue: "2025-05-15T11:00:00",
|
||||
type: 'DATETIME'
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
id: 4,
|
||||
name: "spreadsheet1.xlsx",
|
||||
addedWhen: new Date("2024-05-01T08:15:00Z"),
|
||||
addedWho: "KammM",
|
||||
changedWhen: new Date("2024-06-10T16:20:00Z"),
|
||||
changedWho: "OlgunR",
|
||||
attributes: [
|
||||
{
|
||||
name: "invoiceNumber",
|
||||
serilizedValue: "INV-20250410-021",
|
||||
type: 'VARCHAR'
|
||||
},
|
||||
{
|
||||
name: "startDate",
|
||||
serilizedValue: "2025-04-01",
|
||||
type: 'DATE'
|
||||
},
|
||||
{
|
||||
name: "endDate",
|
||||
serilizedValue: "2025-04-30",
|
||||
type: 'DATE'
|
||||
},
|
||||
{
|
||||
name: "minAmount",
|
||||
serilizedValue: "150.99",
|
||||
type: 'DECIMAL'
|
||||
},
|
||||
{
|
||||
name: "maxAmount",
|
||||
serilizedValue: "999.99",
|
||||
type: 'DECIMAL'
|
||||
},
|
||||
{
|
||||
name: "createdAt",
|
||||
serilizedValue: "2025-04-15",
|
||||
type: 'DATE'
|
||||
},
|
||||
{
|
||||
name: "deliveryTime",
|
||||
serilizedValue: "17:45:00",
|
||||
type: 'TIME'
|
||||
},
|
||||
{
|
||||
name: "lastUpdated",
|
||||
serilizedValue: "2025-04-30T18:30:00",
|
||||
type: 'DATETIME'
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
id: 5,
|
||||
name: "report.docx",
|
||||
addedWhen: new Date("2024-04-17T11:25:00Z"),
|
||||
addedWho: "SchreiberM",
|
||||
attributes: [
|
||||
{
|
||||
name: "invoiceNumber",
|
||||
serilizedValue: "INV-20250305-099",
|
||||
type: 'VARCHAR'
|
||||
},
|
||||
{
|
||||
name: "customerName",
|
||||
serilizedValue: "Ali Veli",
|
||||
type: 'VARCHAR'
|
||||
},
|
||||
{
|
||||
name: "startDate",
|
||||
serilizedValue: "2025-03-01",
|
||||
type: 'DATE'
|
||||
},
|
||||
{
|
||||
name: "endDate",
|
||||
serilizedValue: "2025-03-20",
|
||||
type: 'DATE'
|
||||
},
|
||||
{
|
||||
name: "minAmount",
|
||||
serilizedValue: "75.00",
|
||||
type: 'DECIMAL'
|
||||
},
|
||||
{
|
||||
name: "maxAmount",
|
||||
serilizedValue: "500.00",
|
||||
type: 'DECIMAL'
|
||||
},
|
||||
{
|
||||
name: "taxIncluded",
|
||||
serilizedValue: "false",
|
||||
type: 'BOOLEAN'
|
||||
},
|
||||
{
|
||||
name: "createdAt",
|
||||
serilizedValue: "2025-03-02",
|
||||
type: 'DATE'
|
||||
},
|
||||
{
|
||||
name: "deliveryTime",
|
||||
serilizedValue: "08:20:00",
|
||||
type: 'TIME'
|
||||
},
|
||||
{
|
||||
name: "lastUpdated",
|
||||
serilizedValue: "2025-03-20T09:30:00",
|
||||
type: 'DATETIME'
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
.map(doc => ({
|
||||
...doc,
|
||||
attributes: doc.attributes?.map(attr => ({
|
||||
...attr,
|
||||
type: attr.type as Type
|
||||
}))
|
||||
}))
|
||||
.map(doc => Doc.map(doc));
|
||||
|
||||
function base64ToUint8Array(base64: string): Uint8Array {
|
||||
const binaryString = atob(base64); // Decode base64 to binary string
|
||||
const len = binaryString.length;
|
||||
const bytes = new Uint8Array(len);
|
||||
|
||||
for (let i = 0; i < len; i++) {
|
||||
bytes[i] = binaryString.charCodeAt(i);
|
||||
}
|
||||
|
||||
return bytes;
|
||||
}
|
||||
|
||||
export function _genFile(name: string): Uint8Array | undefined {
|
||||
switch (name) {
|
||||
case "example1.pdf":
|
||||
return base64ToUint8Array(_base64.example1_pdf);
|
||||
case "example2.pdf":
|
||||
return base64ToUint8Array(_base64.example2_pdf);
|
||||
case "document1.docx":
|
||||
return base64ToUint8Array(_base64.document1_docx);
|
||||
case "spreadsheet1.xlsx":
|
||||
return base64ToUint8Array(_base64.spreadsheet1_xlsx);
|
||||
case "report.docx":
|
||||
return base64ToUint8Array(_base64.report_docx);
|
||||
default:
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -8,8 +8,6 @@ import { usePathname } from 'src/routes/hooks';
|
||||
|
||||
import { ThemeProvider } from 'src/theme/theme-provider';
|
||||
|
||||
import { Iconify } from 'src/components/iconify';
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
type AppProps = {
|
||||
|
||||
17
src/client/dd-hub-react/src/common/json-viewer.tsx
Normal file
17
src/client/dd-hub-react/src/common/json-viewer.tsx
Normal file
@@ -0,0 +1,17 @@
|
||||
type JsonViewerProps = {
|
||||
data: any;
|
||||
};
|
||||
|
||||
export function JsonViewer({ data }: JsonViewerProps) {
|
||||
return (
|
||||
<pre style={{
|
||||
backgroundColor: '#f4f4f4',
|
||||
padding: '1rem',
|
||||
borderRadius: '5px',
|
||||
width: '100%',
|
||||
height: '100%'
|
||||
}}>
|
||||
{JSON.stringify(data)}
|
||||
</pre>
|
||||
);
|
||||
}
|
||||
@@ -1,4 +1,3 @@
|
||||
import { Label } from 'src/components/label';
|
||||
import { SvgColor } from 'src/components/svg-color';
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
@@ -13,39 +12,48 @@ export type NavItem = {
|
||||
};
|
||||
|
||||
export const navData = [
|
||||
{
|
||||
title: 'Dashboard',
|
||||
path: '/',
|
||||
icon: icon('ic-analytics'),
|
||||
},
|
||||
{
|
||||
title: 'User',
|
||||
path: '/user',
|
||||
icon: icon('ic-user'),
|
||||
},
|
||||
{
|
||||
title: 'Product',
|
||||
path: '/products',
|
||||
icon: icon('ic-cart'),
|
||||
info: (
|
||||
<Label color="error" variant="inverted">
|
||||
+3
|
||||
</Label>
|
||||
),
|
||||
//#region example component
|
||||
// info: (
|
||||
// <Label color="error" variant="inverted">
|
||||
// +3
|
||||
// </Label>
|
||||
// ),
|
||||
//#endregion
|
||||
},
|
||||
{
|
||||
title: 'Blog',
|
||||
path: '/blog',
|
||||
icon: icon('ic-blog'),
|
||||
},
|
||||
{
|
||||
title: 'Sign in',
|
||||
path: '/sign-in',
|
||||
icon: icon('ic-lock'),
|
||||
},
|
||||
{
|
||||
title: 'Not found',
|
||||
path: '/404',
|
||||
icon: icon('ic-disabled'),
|
||||
},
|
||||
title: 'Document Search',
|
||||
path: '/doc-search',
|
||||
icon: icon('ic-doc-search'),
|
||||
}
|
||||
//#region example pages
|
||||
// {
|
||||
// title: 'Dashboard',
|
||||
// path: '/',
|
||||
// icon: icon('ic-analytics'),
|
||||
// },
|
||||
// {
|
||||
// title: 'User',
|
||||
// path: '/user',
|
||||
// icon: icon('ic-user'),
|
||||
// },
|
||||
// {
|
||||
// title: 'Blog',
|
||||
// path: '/blog',
|
||||
// icon: icon('ic-blog'),
|
||||
// },
|
||||
// {
|
||||
// title: 'Sign in',
|
||||
// path: '/sign-in',
|
||||
// icon: icon('ic-lock'),
|
||||
// },
|
||||
// {
|
||||
// title: 'Not found',
|
||||
// path: '/404',
|
||||
// icon: icon('ic-disabled'),
|
||||
// },
|
||||
//#endregion
|
||||
];
|
||||
|
||||
15
src/client/dd-hub-react/src/pages/doc-search.tsx
Normal file
15
src/client/dd-hub-react/src/pages/doc-search.tsx
Normal file
@@ -0,0 +1,15 @@
|
||||
import { _posts } from 'src/_mock';
|
||||
import { CONFIG } from 'src/config-global';
|
||||
|
||||
import { DocSearchView } from 'src/sections/document/view';
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
export default function Page() {
|
||||
return (
|
||||
<>
|
||||
<title>{`Document Search - ${CONFIG.appName}`}</title>
|
||||
<DocSearchView />
|
||||
</>
|
||||
);
|
||||
}
|
||||
@@ -18,6 +18,7 @@ export const UserPage = lazy(() => import('src/pages/user'));
|
||||
export const SignInPage = lazy(() => import('src/pages/sign-in'));
|
||||
export const ProductsPage = lazy(() => import('src/pages/products'));
|
||||
export const Page404 = lazy(() => import('src/pages/page-not-found'));
|
||||
export const DocumentSearch = lazy(() => import('src/pages/doc-search'));
|
||||
|
||||
const renderFallback = () => (
|
||||
<Box
|
||||
@@ -49,9 +50,10 @@ export const routesSection: RouteObject[] = [
|
||||
</DashboardLayout>
|
||||
),
|
||||
children: [
|
||||
{ index: true, element: <DashboardPage /> },
|
||||
{ path: 'user', element: <UserPage /> },
|
||||
{ index: true, element: <ProductsPage /> },
|
||||
{ path: 'doc-search', element: <DocumentSearch /> },
|
||||
{ path: 'products', element: <ProductsPage /> },
|
||||
{ path: 'user', element: <UserPage /> },
|
||||
{ path: 'blog', element: <BlogPage /> },
|
||||
],
|
||||
},
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
import { useState } from 'react';
|
||||
|
||||
import Switch from '@mui/material/Switch';
|
||||
import Checkbox from '@mui/material/Checkbox';
|
||||
import FormGroup from '@mui/material/FormGroup';
|
||||
import AddBoxIcon from '@mui/icons-material/AddBox';
|
||||
import FormControlLabel from '@mui/material/FormControlLabel';
|
||||
import AddBoxTwoToneIcon from '@mui/icons-material/AddBoxTwoTone';
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
type BoolFilterProps = {
|
||||
label: string;
|
||||
}
|
||||
|
||||
export function BoolFilter({ label }: BoolFilterProps) {
|
||||
const [disabled, setDisabled] = useState<boolean>(true);
|
||||
|
||||
return (
|
||||
<FormGroup row>
|
||||
<Checkbox
|
||||
{...{ inputProps: { 'aria-label': 'Checkbox demo' } }}
|
||||
icon={<AddBoxTwoToneIcon />}
|
||||
checkedIcon={<AddBoxIcon />}
|
||||
onClick={() => setDisabled(!disabled)}
|
||||
/>
|
||||
{
|
||||
disabled
|
||||
? <FormControlLabel disabled control={<Switch />} label={label} />
|
||||
: <FormControlLabel control={<Switch />} label={label} />
|
||||
}
|
||||
</FormGroup>
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
import { DatePicker } from '@mui/x-date-pickers/DatePicker';
|
||||
import { TimePicker } from '@mui/x-date-pickers/TimePicker';
|
||||
import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';
|
||||
import { DateTimePicker } from '@mui/x-date-pickers/DateTimePicker';
|
||||
import { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider';
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
type DateFilterProps = {
|
||||
label: string;
|
||||
}
|
||||
|
||||
export function DateFilter({ label }: DateFilterProps) {
|
||||
return (
|
||||
<LocalizationProvider dateAdapter={AdapterDayjs}>
|
||||
<DatePicker
|
||||
slotProps={{
|
||||
openPickerIcon: (ownerState: any) => ({
|
||||
color: ownerState.isPickerOpen ? 'secondary' : 'primary',
|
||||
}),
|
||||
}}
|
||||
label={label}
|
||||
/>
|
||||
</LocalizationProvider>
|
||||
);
|
||||
}
|
||||
|
||||
export function TimeFilter({ label }: DateFilterProps) {
|
||||
return (
|
||||
<LocalizationProvider dateAdapter={AdapterDayjs}>
|
||||
<TimePicker
|
||||
slotProps={{
|
||||
openPickerIcon: (ownerState: any) => ({
|
||||
color: ownerState.isPickerOpen ? 'secondary' : 'primary',
|
||||
}),
|
||||
}}
|
||||
label={label}
|
||||
/>
|
||||
</LocalizationProvider>
|
||||
);
|
||||
}
|
||||
|
||||
export function DateTimeFilter({ label }: DateFilterProps) {
|
||||
return (
|
||||
<LocalizationProvider dateAdapter={AdapterDayjs}>
|
||||
<DateTimePicker
|
||||
slotProps={{
|
||||
openPickerIcon: (ownerState: any) => ({
|
||||
color: ownerState.isPickerOpen ? 'secondary' : 'primary',
|
||||
}),
|
||||
}}
|
||||
label={label}
|
||||
/>
|
||||
</LocalizationProvider>
|
||||
);
|
||||
}
|
||||
213
src/client/dd-hub-react/src/sections/document/doc-item.tsx
Normal file
213
src/client/dd-hub-react/src/sections/document/doc-item.tsx
Normal file
@@ -0,0 +1,213 @@
|
||||
import type { CardProps } from '@mui/material/Card';
|
||||
import type { IconifyName } from 'src/components/iconify';
|
||||
|
||||
import { useState } from 'react';
|
||||
import { varAlpha } from 'minimal-shared/utils';
|
||||
|
||||
import Box from '@mui/material/Box';
|
||||
import Link from '@mui/material/Link';
|
||||
import Card from '@mui/material/Card';
|
||||
import Typography from '@mui/material/Typography';
|
||||
|
||||
import { Doc } from 'src/services/document-service';
|
||||
|
||||
import { Iconify } from 'src/components/iconify';
|
||||
import { SvgColor } from 'src/components/svg-color';
|
||||
|
||||
import DocFullView from './view/doc-full-view';
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
export function DocItem({
|
||||
sx,
|
||||
doc,
|
||||
long,
|
||||
large,
|
||||
...other
|
||||
}: CardProps & {
|
||||
doc: Doc;
|
||||
long: boolean;
|
||||
large: boolean;
|
||||
}) {
|
||||
//#region render Avatar
|
||||
// const renderAvatar = (
|
||||
// <Avatar
|
||||
// alt={doc.addedWho}
|
||||
// src={doc.addedWho}
|
||||
// sx={{
|
||||
// left: 24,
|
||||
// zIndex: 9,
|
||||
// bottom: -24,
|
||||
// position: 'absolute',
|
||||
// ...((large || long) && {
|
||||
// top: 24,
|
||||
// }),
|
||||
// }}
|
||||
// />
|
||||
// );
|
||||
//#endregion
|
||||
|
||||
const [openViewDoc, setOpenViewDoc] = useState(false);
|
||||
|
||||
const renderTitle = (
|
||||
<Link
|
||||
color="inherit"
|
||||
variant="subtitle2"
|
||||
underline="hover"
|
||||
sx={{
|
||||
height: 44,
|
||||
overflow: 'hidden',
|
||||
WebkitLineClamp: 2,
|
||||
display: '-webkit-box',
|
||||
WebkitBoxOrient: 'vertical',
|
||||
...(large && { typography: 'h5', height: 60 }),
|
||||
...((large || long) && {
|
||||
color: 'common.white',
|
||||
}),
|
||||
}}
|
||||
>
|
||||
{doc.name}
|
||||
</Link>
|
||||
);
|
||||
|
||||
const renderInfo = (
|
||||
<Box
|
||||
sx={{
|
||||
mt: 3,
|
||||
gap: 1.5,
|
||||
display: 'flex',
|
||||
flexWrap: 'wrap',
|
||||
color: 'text.disabled',
|
||||
justifyContent: 'flex-start',
|
||||
}}
|
||||
>
|
||||
{[
|
||||
{ data: doc.addedWho, icon: 'mdi:user' },
|
||||
{ data: doc.getChangedInfo(', '), icon: 'material-symbols:change-circle-rounded' }
|
||||
].filter(info => info.data).map((info, _index) => (
|
||||
<Box
|
||||
key={_index}
|
||||
sx={{
|
||||
display: 'flex',
|
||||
...((large || long) && {
|
||||
opacity: 0.64,
|
||||
color: 'common.white',
|
||||
}),
|
||||
}}
|
||||
>
|
||||
<Iconify width={16} icon={info.icon as IconifyName} sx={{ mr: 0.5 }} />
|
||||
<Typography variant="caption">{info.data?.toString()}</Typography>
|
||||
</Box>
|
||||
))}
|
||||
</Box>
|
||||
);
|
||||
|
||||
const renderCover = (
|
||||
<Box
|
||||
component="img"
|
||||
alt={doc.name}
|
||||
src={doc.iconSrc}
|
||||
onError={(e) => {
|
||||
e.currentTarget.onerror = null;
|
||||
e.currentTarget.src = 'assets/icons/file/unknown.svg';
|
||||
}}
|
||||
sx={{
|
||||
top: 0,
|
||||
width: 1,
|
||||
height: 1,
|
||||
objectFit: 'cover',
|
||||
position: 'absolute',
|
||||
}}
|
||||
/>
|
||||
);
|
||||
|
||||
const renderDate = (
|
||||
<Typography
|
||||
variant="caption"
|
||||
component="div"
|
||||
sx={{
|
||||
mb: 1,
|
||||
color: 'text.disabled',
|
||||
...((large || long) && {
|
||||
opacity: 0.48,
|
||||
color: 'common.white',
|
||||
}),
|
||||
}}
|
||||
>
|
||||
{doc.addedWhen.toLocaleDateString('de-DE')}
|
||||
</Typography>
|
||||
);
|
||||
|
||||
const renderShape = (
|
||||
<SvgColor
|
||||
src="/assets/icons/shape-avatar.svg"
|
||||
sx={{
|
||||
left: 0,
|
||||
width: 88,
|
||||
zIndex: 9,
|
||||
height: 36,
|
||||
bottom: -16,
|
||||
position: 'absolute',
|
||||
color: 'background.paper',
|
||||
...((large || long) && { display: 'none' }),
|
||||
}}
|
||||
/>
|
||||
);
|
||||
|
||||
sx ??= {
|
||||
cursor: 'pointer',
|
||||
transition: 'transform 0.3s ease, box-shadow 0.3s ease',
|
||||
'&:hover': {
|
||||
transform: 'scale(1.03)',
|
||||
boxShadow: 6,
|
||||
}
|
||||
}
|
||||
|
||||
return (
|
||||
<>
|
||||
<DocFullView data={doc.data} open={openViewDoc} handleClose={() => setOpenViewDoc(false)} format={doc.extension} />
|
||||
<Card sx={sx} {...other} onClick={() => setOpenViewDoc(true)}>
|
||||
<Box
|
||||
sx={(theme) => ({
|
||||
position: 'relative',
|
||||
pt: 'calc(100% * 3 / 4)',
|
||||
...((large || long) && {
|
||||
pt: 'calc(100% * 4 / 3)',
|
||||
'&:after': {
|
||||
top: 0,
|
||||
content: "''",
|
||||
width: '100%',
|
||||
height: '100%',
|
||||
position: 'absolute',
|
||||
bgcolor: varAlpha(theme.palette.grey['900Channel'], 0.72),
|
||||
},
|
||||
}),
|
||||
...(large && {
|
||||
pt: {
|
||||
xs: 'calc(100% * 4 / 3)',
|
||||
sm: 'calc(100% * 3 / 4.66)',
|
||||
},
|
||||
}),
|
||||
})}
|
||||
>
|
||||
{renderShape}
|
||||
{renderCover}
|
||||
</Box>
|
||||
|
||||
<Box
|
||||
sx={(theme) => ({
|
||||
p: theme.spacing(6, 3, 3, 3),
|
||||
...((large || long) && {
|
||||
width: 1,
|
||||
bottom: 0,
|
||||
position: 'absolute',
|
||||
}),
|
||||
})}
|
||||
>
|
||||
{renderDate}
|
||||
{renderTitle}
|
||||
{renderInfo}
|
||||
</Box>
|
||||
</Card>
|
||||
</>
|
||||
);
|
||||
}
|
||||
59
src/client/dd-hub-react/src/sections/document/doc-search.tsx
Normal file
59
src/client/dd-hub-react/src/sections/document/doc-search.tsx
Normal file
@@ -0,0 +1,59 @@
|
||||
import type { Theme, SxProps } from '@mui/material/styles';
|
||||
|
||||
import TextField from '@mui/material/TextField';
|
||||
import InputAdornment from '@mui/material/InputAdornment';
|
||||
import Autocomplete, { autocompleteClasses } from '@mui/material/Autocomplete';
|
||||
|
||||
import { Doc } from 'src/services/document-service';
|
||||
|
||||
import { Iconify } from 'src/components/iconify';
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
type DocSearchProps = {
|
||||
posts: Doc[];
|
||||
sx?: SxProps<Theme>;
|
||||
};
|
||||
|
||||
export function DocSearch({ posts, sx }: DocSearchProps) {
|
||||
return (
|
||||
<Autocomplete
|
||||
sx={{ width: 280 }}
|
||||
autoHighlight
|
||||
popupIcon={null}
|
||||
slotProps={{
|
||||
paper: {
|
||||
sx: {
|
||||
width: 320,
|
||||
[`& .${autocompleteClasses.option}`]: {
|
||||
typography: 'body2',
|
||||
},
|
||||
...sx,
|
||||
},
|
||||
},
|
||||
}}
|
||||
options={posts}
|
||||
getOptionLabel={(post) => post.name}
|
||||
isOptionEqualToValue={(option, value) => option.id === value.id}
|
||||
renderInput={(params) => (
|
||||
<TextField
|
||||
{...params}
|
||||
placeholder="Search post..."
|
||||
slotProps={{
|
||||
input: {
|
||||
...params.InputProps,
|
||||
startAdornment: (
|
||||
<InputAdornment position="start">
|
||||
<Iconify
|
||||
icon="eva:search-fill"
|
||||
sx={{ ml: 1, width: 20, height: 20, color: 'text.disabled' }}
|
||||
/>
|
||||
</InputAdornment>
|
||||
),
|
||||
},
|
||||
}}
|
||||
/>
|
||||
)}
|
||||
/>
|
||||
);
|
||||
}
|
||||
96
src/client/dd-hub-react/src/sections/document/doc-sort.tsx
Normal file
96
src/client/dd-hub-react/src/sections/document/doc-sort.tsx
Normal file
@@ -0,0 +1,96 @@
|
||||
import type { ButtonProps } from '@mui/material/Button';
|
||||
|
||||
import { useState, useCallback } from 'react';
|
||||
import { varAlpha } from 'minimal-shared/utils';
|
||||
|
||||
import Button from '@mui/material/Button';
|
||||
import Popover from '@mui/material/Popover';
|
||||
import MenuList from '@mui/material/MenuList';
|
||||
import MenuItem, { menuItemClasses } from '@mui/material/MenuItem';
|
||||
|
||||
import { Iconify } from 'src/components/iconify';
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
type DocSortProps = ButtonProps & {
|
||||
sortBy: string;
|
||||
onSort: (newSort: string) => void;
|
||||
options: { value: string; label: string }[];
|
||||
};
|
||||
|
||||
export function DocSort({ options, sortBy, onSort, sx, ...other }: DocSortProps) {
|
||||
const [openPopover, setOpenPopover] = useState<HTMLButtonElement | null>(null);
|
||||
|
||||
const handleOpenPopover = useCallback((event: React.MouseEvent<HTMLButtonElement>) => {
|
||||
setOpenPopover(event.currentTarget);
|
||||
}, []);
|
||||
|
||||
const handleClosePopover = useCallback(() => {
|
||||
setOpenPopover(null);
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<>
|
||||
<Button
|
||||
disableRipple
|
||||
color="inherit"
|
||||
onClick={handleOpenPopover}
|
||||
endIcon={
|
||||
<Iconify
|
||||
icon={openPopover ? 'eva:arrow-ios-upward-fill' : 'eva:arrow-ios-downward-fill'}
|
||||
sx={{
|
||||
ml: -0.5,
|
||||
}}
|
||||
/>
|
||||
}
|
||||
sx={[
|
||||
{
|
||||
bgcolor: (theme) => varAlpha(theme.vars.palette.grey['500Channel'], 0.08),
|
||||
},
|
||||
...(Array.isArray(sx) ? sx : [sx]),
|
||||
]}
|
||||
{...other}
|
||||
>
|
||||
{options.find((option) => option.value === sortBy)?.label}
|
||||
</Button>
|
||||
|
||||
<Popover
|
||||
open={!!openPopover}
|
||||
anchorEl={openPopover}
|
||||
onClose={handleClosePopover}
|
||||
anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}
|
||||
transformOrigin={{ vertical: 'top', horizontal: 'right' }}
|
||||
>
|
||||
<MenuList
|
||||
disablePadding
|
||||
sx={{
|
||||
p: 0.5,
|
||||
gap: 0.5,
|
||||
width: 160,
|
||||
display: 'flex',
|
||||
flexDirection: 'column',
|
||||
[`& .${menuItemClasses.root}`]: {
|
||||
px: 1,
|
||||
gap: 2,
|
||||
borderRadius: 0.75,
|
||||
[`&.${menuItemClasses.selected}`]: { bgcolor: 'action.selected' },
|
||||
},
|
||||
}}
|
||||
>
|
||||
{options.map((option) => (
|
||||
<MenuItem
|
||||
key={option.value}
|
||||
selected={option.value === sortBy}
|
||||
onClick={() => {
|
||||
onSort(option.value);
|
||||
handleClosePopover();
|
||||
}}
|
||||
>
|
||||
{option.label}
|
||||
</MenuItem>
|
||||
))}
|
||||
</MenuList>
|
||||
</Popover>
|
||||
</>
|
||||
);
|
||||
}
|
||||
42
src/client/dd-hub-react/src/sections/document/num-filter.tsx
Normal file
42
src/client/dd-hub-react/src/sections/document/num-filter.tsx
Normal file
@@ -0,0 +1,42 @@
|
||||
import debounce from 'lodash.debounce';
|
||||
import { useState, useMemo } from 'react';
|
||||
|
||||
import TextField from '@mui/material/TextField';
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
type NumFilterProps = {
|
||||
label: string;
|
||||
onChange?: (value: string) => void;
|
||||
}
|
||||
|
||||
const isNumbers = (str: string) => /^[0-9]*$/.test(str);
|
||||
|
||||
export function IntFilter({ label, onChange }: NumFilterProps) {
|
||||
const [val, setVal] = useState("");
|
||||
|
||||
const onInputChange = (event: any) => {
|
||||
const value = event.target.value;
|
||||
if (isNumbers(value)) {
|
||||
setVal(value);
|
||||
debouncedChange(value);
|
||||
}
|
||||
};
|
||||
|
||||
const debouncedChange = useMemo(() =>
|
||||
debounce((value: string) => {
|
||||
onChange?.(value);
|
||||
}, 1000)
|
||||
, [onChange]);
|
||||
|
||||
return <TextField label={label} value={val} onChange={onInputChange} variant="filled" />;
|
||||
}
|
||||
|
||||
export function DecimalFilter({ label, onChange }: NumFilterProps) {
|
||||
const debouncedChange = useMemo(() =>
|
||||
debounce((value: string) => {
|
||||
onChange?.(value);
|
||||
}, 1000)
|
||||
, [onChange]);
|
||||
|
||||
return <TextField type="number" label={label} variant="filled" onChange={e => debouncedChange(e.target.value)} />;
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
import { useMemo } from 'react';
|
||||
import debounce from 'lodash.debounce';
|
||||
|
||||
import TextField from '@mui/material/TextField';
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
type TextFilterProps = {
|
||||
label: string;
|
||||
onChange?: (value: string) => void;
|
||||
}
|
||||
|
||||
export function TextFilter({ label, onChange }: TextFilterProps) {
|
||||
const debouncedChange = useMemo(() =>
|
||||
debounce((value: string) => {
|
||||
onChange?.(value);
|
||||
}, 1000)
|
||||
, [onChange]);
|
||||
|
||||
return <TextField label={label} variant="filled" onChange={e => debouncedChange(e.target.value)} />;
|
||||
}
|
||||
@@ -0,0 +1,81 @@
|
||||
import { useState } from 'react';
|
||||
|
||||
import Box from '@mui/material/Box';
|
||||
import Modal from '@mui/material/Modal';
|
||||
import Button from '@mui/material/Button';
|
||||
import TextField from '@mui/material/TextField';
|
||||
import Autocomplete from '@mui/material/Autocomplete';
|
||||
|
||||
import { Iconify } from 'src/components/iconify/iconify';
|
||||
|
||||
import { createAttributes, filterTypes, Type } from '../../../services/attribute-service';
|
||||
|
||||
const style = {
|
||||
position: 'absolute',
|
||||
top: '50%',
|
||||
left: '50%',
|
||||
transform: 'translate(-50%, -50%)',
|
||||
width: 400,
|
||||
bgcolor: 'background.paper',
|
||||
boxShadow: 24,
|
||||
p: 4,
|
||||
};
|
||||
|
||||
type ModalProps = {
|
||||
open: boolean;
|
||||
handleClose: () => void;
|
||||
}
|
||||
|
||||
export default function CreateFilterModal({ open, handleClose }: ModalProps) {
|
||||
const [name, setName] = useState<string | undefined>('');
|
||||
const [label, setLabel] = useState<string | undefined>('');
|
||||
const [selectedType, setSelectedType] = useState<Type | null>(null);
|
||||
|
||||
function closeReset() {
|
||||
handleClose();
|
||||
setName('');
|
||||
setLabel('')
|
||||
setSelectedType(null)
|
||||
}
|
||||
|
||||
async function tryCreateFilter(): Promise<any> {
|
||||
if (!name) {
|
||||
alert('No name.');
|
||||
}
|
||||
else if (!selectedType) {
|
||||
alert('No type.');
|
||||
}
|
||||
else {
|
||||
await createAttributes({ name: name, type: selectedType, label: label }).then(closeReset);
|
||||
}
|
||||
}
|
||||
|
||||
return (
|
||||
<Modal
|
||||
open={open}
|
||||
onClose={closeReset}
|
||||
aria-labelledby="modal-modal-title"
|
||||
aria-describedby="modal-modal-description"
|
||||
>
|
||||
<Box sx={style}>
|
||||
<TextField label="Label" variant="filled" value={name} onChange={e => setName(e.target.value)} />
|
||||
<TextField label="Name" variant="filled" value={label} onChange={e => setLabel(e.target.value)} />
|
||||
<Autocomplete
|
||||
disablePortal
|
||||
options={filterTypes}
|
||||
value={selectedType}
|
||||
onChange={(event, newValue) => setSelectedType(newValue)}
|
||||
renderInput={params => <TextField {...params} label="Type" variant="filled" />}
|
||||
/>
|
||||
<Button
|
||||
variant="contained"
|
||||
color="inherit"
|
||||
startIcon={<Iconify icon="mingcute:add-line" />}
|
||||
onClick={() => tryCreateFilter()}
|
||||
>
|
||||
Add filter
|
||||
</Button>
|
||||
</Box>
|
||||
</Modal>
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,122 @@
|
||||
import { useEffect, useState } from 'react';
|
||||
|
||||
import Box from '@mui/material/Box';
|
||||
import Modal from '@mui/material/Modal';
|
||||
|
||||
import { FileFormat } from 'src/services/document-service';
|
||||
|
||||
const getMimeType = (format: FileFormat): string => {
|
||||
switch (format) {
|
||||
case 'pdf': return 'application/pdf';
|
||||
case 'docx': return 'application/vnd.openxmlformats-officedocument.wordprocessingml.document';
|
||||
case 'xlsx': return 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
|
||||
case 'csv': return 'text/csv';
|
||||
case 'pptx': return 'application/vnd.openxmlformats-officedocument.presentationml.presentation';
|
||||
case 'txt': return 'text/plain';
|
||||
case 'json': return 'application/json';
|
||||
case 'xml': return 'application/xml';
|
||||
case 'html': return 'text/html';
|
||||
case 'jpg': return 'image/jpeg';
|
||||
case 'png': return 'image/png';
|
||||
case 'svg': return 'image/svg+xml';
|
||||
case 'zip': return 'application/zip';
|
||||
case 'md': return 'text/markdown';
|
||||
default: return 'application/octet-stream';
|
||||
}
|
||||
};
|
||||
|
||||
type DocFullViewProps = {
|
||||
data: Uint8Array | Promise<Uint8Array>;
|
||||
format: FileFormat;
|
||||
open: boolean;
|
||||
handleClose: () => void;
|
||||
}
|
||||
|
||||
const style = {
|
||||
position: 'absolute',
|
||||
top: '50%',
|
||||
left: '50%',
|
||||
transform: 'translate(-50%, -50%)',
|
||||
width: '90%',
|
||||
height: '90%',
|
||||
bgcolor: 'transparent',
|
||||
};
|
||||
|
||||
export default function DocFullView({ data, format, open, handleClose }: DocFullViewProps) {
|
||||
const [objectUrl, setObjectUrl] = useState<string | null>(null);
|
||||
|
||||
useEffect(() => {
|
||||
let isMounted = true;
|
||||
let url: string | null = null;
|
||||
|
||||
const processData = async () => {
|
||||
try {
|
||||
const resolvedData = await data;
|
||||
const mimeType = getMimeType(format);
|
||||
const blob = new Blob([resolvedData], { type: mimeType });
|
||||
url = URL.createObjectURL(blob);
|
||||
|
||||
if (isMounted) {
|
||||
setObjectUrl(url);
|
||||
}
|
||||
} catch (err) {
|
||||
console.error('Data resolution error:', err);
|
||||
}
|
||||
};
|
||||
|
||||
processData();
|
||||
|
||||
return () => {
|
||||
isMounted = false;
|
||||
if (url) {
|
||||
URL.revokeObjectURL(url);
|
||||
}
|
||||
};
|
||||
}, [data, format]);
|
||||
|
||||
const renderContent = () => {
|
||||
if (!objectUrl || !format) return null;
|
||||
|
||||
if (['pdf', 'html', 'txt', 'json', 'xml', 'md'].includes(format)) {
|
||||
return (
|
||||
<iframe
|
||||
src={objectUrl}
|
||||
style={{ width: '100%', height: '100%', border: 'none' }}
|
||||
title={`Viewer for ${format}`}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
if (['jpg', 'png', 'svg'].includes(format)) {
|
||||
return (
|
||||
<img
|
||||
src={objectUrl}
|
||||
alt="Document Preview"
|
||||
style={{ maxWidth: '100%', maxHeight: '100%' }}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
// Download link for unsupported preview formats
|
||||
style.bgcolor = 'lightgray'
|
||||
return (
|
||||
<Box textAlign="center">
|
||||
<p>Dieser Dateityp kann nicht angezeigt werden. Sie können es unten herunterladen:</p>
|
||||
<a href={objectUrl} download={`document.${format}`}>Datei herunterladen</a>
|
||||
</Box>
|
||||
);
|
||||
};
|
||||
|
||||
return (
|
||||
<Modal
|
||||
open={open}
|
||||
onClose={handleClose}
|
||||
aria-labelledby="modal-modal-title"
|
||||
aria-describedby="modal-modal-description"
|
||||
>
|
||||
<Box sx={style}>
|
||||
{renderContent()}
|
||||
</Box>
|
||||
</Modal>
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,203 @@
|
||||
import { useState, useCallback, useEffect } from 'react';
|
||||
|
||||
import Box from '@mui/material/Box';
|
||||
import Grid from '@mui/material/Grid';
|
||||
import Button from '@mui/material/Button';
|
||||
import Typography from '@mui/material/Typography';
|
||||
import Pagination from '@mui/material/Pagination';
|
||||
|
||||
import { DashboardContent } from 'src/layouts/dashboard';
|
||||
import docService, { Doc } from 'src/services/document-service';
|
||||
import { Attribute, getAttributes } from 'src/services/attribute-service';
|
||||
|
||||
import { Iconify } from 'src/components/iconify';
|
||||
|
||||
import { DocItem } from '../doc-item';
|
||||
import { BoolFilter } from '../bool-filter';
|
||||
import { TextFilter } from '../text-filter';
|
||||
import CreateFilterModal from './create-filter-modal';
|
||||
import { DecimalFilter, IntFilter } from '../num-filter';
|
||||
import { DateFilter, DateTimeFilter, TimeFilter } from '../date-filter';
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
export function DocSearchView() {
|
||||
const [sortBy, setSortBy] = useState('latest');
|
||||
|
||||
const [filters, setFilters] = useState<Attribute[]>([])
|
||||
|
||||
const handleSort = useCallback((newSort: string) => {
|
||||
setSortBy(newSort);
|
||||
}, []);
|
||||
|
||||
useEffect(() => {
|
||||
getAttributes().then((res) => {
|
||||
setFilters(res);
|
||||
});
|
||||
}, []);
|
||||
|
||||
const [openCreateFilterModal, setOpenCreateFilterModal] = useState(false);
|
||||
|
||||
const [docs, setDocs] = useState<Doc[]>([]);
|
||||
|
||||
useEffect(() => {
|
||||
docService.get({}).then((res) => {
|
||||
setDocs(res);
|
||||
});
|
||||
}, []);
|
||||
|
||||
//#region attributes
|
||||
const [attributes, setAttributes] = useState<Record<string, string>>({});
|
||||
|
||||
useEffect(() => {
|
||||
docService.getByAttribute(attributes).then(setDocs);
|
||||
}, [attributes]);
|
||||
|
||||
function setAttribute(name: string, serilizedValue: string) {
|
||||
setAttributes(prev => ({
|
||||
...prev,
|
||||
[name]: serilizedValue
|
||||
}));
|
||||
}
|
||||
|
||||
function removeAttribute(name: string) {
|
||||
setAttributes(prev => {
|
||||
const { [name]: _, ...rest } = prev;
|
||||
return rest;
|
||||
});
|
||||
}
|
||||
|
||||
function updateAttribute(name: string, serilizedValue?: string | null) {
|
||||
if (serilizedValue)
|
||||
setAttribute(name, serilizedValue);
|
||||
else
|
||||
removeAttribute(name);
|
||||
}
|
||||
//#endregion
|
||||
|
||||
//#region example components
|
||||
// <Box
|
||||
// sx={{
|
||||
// mb: 5,
|
||||
// display: 'flex',
|
||||
// alignItems: 'center',
|
||||
// justifyContent: 'space-between',
|
||||
// }}
|
||||
// >
|
||||
// <DocSearch docs={docs} />
|
||||
// <DocSort
|
||||
// sortBy={sortBy}
|
||||
// onSort={handleSort}
|
||||
// options={[
|
||||
// { value: 'latest', label: 'Latest' },
|
||||
// { value: 'popular', label: 'Popular' },
|
||||
// { value: 'oldest', label: 'Oldest' },
|
||||
// ]}
|
||||
// />
|
||||
// </Box>
|
||||
//#endregion
|
||||
|
||||
return (
|
||||
<DashboardContent>
|
||||
|
||||
<Box
|
||||
sx={{
|
||||
mb: 5,
|
||||
display: 'flex',
|
||||
alignItems: 'center',
|
||||
}}
|
||||
>
|
||||
<Typography variant="h4" sx={{ flexGrow: 1 }}>
|
||||
Document Search
|
||||
</Typography>
|
||||
<Button
|
||||
variant="contained"
|
||||
color="inherit"
|
||||
startIcon={<Iconify icon="mingcute:add-line" />}
|
||||
onClick={() => setOpenCreateFilterModal(true)}
|
||||
loading={openCreateFilterModal}
|
||||
>
|
||||
New filter
|
||||
</Button>
|
||||
</Box>
|
||||
|
||||
<CreateFilterModal open={openCreateFilterModal} handleClose={() => setOpenCreateFilterModal(false)} />
|
||||
|
||||
<Grid container spacing={3}>
|
||||
{filters.map((filter, index) => {
|
||||
|
||||
let filterComp;
|
||||
switch (filter.type) {
|
||||
case 'BOOLEAN':
|
||||
filterComp = <BoolFilter label={filter.label ?? filter.name} />
|
||||
break;
|
||||
case 'INTEGER':
|
||||
filterComp = <IntFilter label={filter.label ?? filter.name} onChange={value => updateAttribute(filter.name, value)} />
|
||||
break;
|
||||
case 'DECIMAL':
|
||||
filterComp = <DecimalFilter label={filter.label ?? filter.name} onChange={value => updateAttribute(filter.name, value)} />
|
||||
break;
|
||||
case 'VARCHAR':
|
||||
filterComp = <TextFilter label={filter.label ?? filter.name} onChange={value => updateAttribute(filter.name, value)} />
|
||||
break;
|
||||
case 'DATE':
|
||||
filterComp = <DateFilter label={filter.label ?? filter.name} />
|
||||
break;
|
||||
case 'TIME':
|
||||
filterComp = <TimeFilter label={filter.label ?? filter.name} />
|
||||
break;
|
||||
case 'DATETIME':
|
||||
filterComp = <DateTimeFilter label={filter.label ?? filter.name} />
|
||||
break;
|
||||
default:
|
||||
console.error(`Unknown filter type: ${filter.type}`);
|
||||
}
|
||||
|
||||
return (
|
||||
<Grid
|
||||
key={filter.id}
|
||||
size={{
|
||||
xs: 12,
|
||||
sm: 6,
|
||||
md: 3,
|
||||
}}
|
||||
>
|
||||
<Box
|
||||
sx={{
|
||||
mb: 5,
|
||||
display: 'flex',
|
||||
alignItems: 'center',
|
||||
justifyContent: 'space-between',
|
||||
}}
|
||||
>
|
||||
{filterComp}
|
||||
</Box>
|
||||
</Grid>
|
||||
);
|
||||
}
|
||||
)}
|
||||
</Grid>
|
||||
|
||||
<Grid container spacing={3}>
|
||||
{docs.map((doc, index) => {
|
||||
const large = false;
|
||||
const long = false;
|
||||
|
||||
return (
|
||||
<Grid
|
||||
key={doc.id}
|
||||
size={{
|
||||
xs: 12,
|
||||
sm: large ? 12 : 6,
|
||||
md: large ? 6 : 3,
|
||||
}}
|
||||
>
|
||||
<DocItem doc={doc} long={long} large={large} />
|
||||
</Grid>
|
||||
);
|
||||
})}
|
||||
</Grid>
|
||||
|
||||
<Pagination count={10} color="primary" sx={{ mt: 8, mx: 'auto' }} />
|
||||
</DashboardContent>
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
export * from './doc-search-view';
|
||||
@@ -8,7 +8,7 @@ import Typography from '@mui/material/Typography';
|
||||
|
||||
import { fCurrency } from 'src/utils/format-number';
|
||||
|
||||
import { Product } from 'src/api/product-service';
|
||||
import { Product } from 'src/services/product-service';
|
||||
|
||||
import { Label } from 'src/components/label';
|
||||
import { ColorPreview } from 'src/components/color-utils';
|
||||
|
||||
@@ -7,7 +7,7 @@ import Typography from '@mui/material/Typography';
|
||||
|
||||
import { _products } from 'src/_mock';
|
||||
import { DashboardContent } from 'src/layouts/dashboard';
|
||||
import { getProductsAsync, Product } from 'src/api/product-service';
|
||||
import { getProductsAsync, Product } from 'src/services/product-service';
|
||||
|
||||
import { ProductSort } from '../product-sort';
|
||||
import { ProductItem } from '../product-item';
|
||||
|
||||
36
src/client/dd-hub-react/src/services/attribute-service.ts
Normal file
36
src/client/dd-hub-react/src/services/attribute-service.ts
Normal file
@@ -0,0 +1,36 @@
|
||||
import { _attributes } from 'src/_mock/_data';
|
||||
|
||||
export type Type = 'BOOLEAN' | 'DATE' | 'TIME' | 'DATETIME' | 'VARCHAR' | 'INTEGER' | 'DECIMAL';
|
||||
|
||||
export const filterTypes: Type[] = [
|
||||
'BOOLEAN',
|
||||
'DATE',
|
||||
'TIME',
|
||||
'DATETIME',
|
||||
'VARCHAR',
|
||||
'INTEGER',
|
||||
'DECIMAL'
|
||||
];
|
||||
|
||||
export type AttributeCreateDto = {
|
||||
label?: string | undefined;
|
||||
name: string;
|
||||
type: Type;
|
||||
};
|
||||
|
||||
export type Attribute = AttributeCreateDto & {
|
||||
id: number;
|
||||
};
|
||||
|
||||
export function getAttributes(): Promise<Attribute[]> {
|
||||
return Promise.resolve(_attributes);
|
||||
}
|
||||
|
||||
export function createAttributes(filter: AttributeCreateDto): Promise<Attribute> {
|
||||
const newFilter: Attribute = {
|
||||
...filter,
|
||||
id: _attributes.length + 1
|
||||
};
|
||||
_attributes.push(newFilter);
|
||||
return Promise.resolve(newFilter);
|
||||
}
|
||||
114
src/client/dd-hub-react/src/services/document-service.ts
Normal file
114
src/client/dd-hub-react/src/services/document-service.ts
Normal file
@@ -0,0 +1,114 @@
|
||||
import { _documents, _genFile } from "src/_mock"
|
||||
|
||||
export type FileFormat =
|
||||
| 'pdf'
|
||||
| 'docx'
|
||||
| 'xlsx'
|
||||
| 'csv'
|
||||
| 'pptx'
|
||||
| 'txt'
|
||||
| 'json'
|
||||
| 'xml'
|
||||
| 'html'
|
||||
| 'jpg'
|
||||
| 'png'
|
||||
| 'svg'
|
||||
| 'zip'
|
||||
| 'md';
|
||||
|
||||
const validExtensions: FileFormat[] = [
|
||||
'pdf', 'docx', 'xlsx', 'csv', 'pptx',
|
||||
'txt', 'json', 'xml', 'html', 'jpg',
|
||||
'png', 'svg', 'zip', 'md'
|
||||
];
|
||||
|
||||
type DocAttribute = {
|
||||
name: string;
|
||||
serilizedValue: string;
|
||||
}
|
||||
|
||||
export class Doc {
|
||||
|
||||
static map(source?: Partial<Doc>): Doc {
|
||||
const doc = new Doc();
|
||||
Object.assign(doc, source);
|
||||
return doc;
|
||||
}
|
||||
|
||||
id!: number;
|
||||
name!: string;
|
||||
addedWhen!: Date;
|
||||
addedWho!: string;
|
||||
changedWhen?: Date;
|
||||
changedWho?: string;
|
||||
attributes: Array<DocAttribute> = [];
|
||||
|
||||
get data(): Promise<Uint8Array> {
|
||||
return Promise.resolve(_genFile(this.name)!);
|
||||
}
|
||||
|
||||
getChangedInfo(separator: string = " | "): string | null {
|
||||
const who = this.changedWho?.trim();
|
||||
const when = this.changedWhen?.toLocaleDateString('de-DE');
|
||||
|
||||
if (!who && !when) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return [who, when].filter(Boolean).join(separator);
|
||||
}
|
||||
|
||||
get extension(): FileFormat {
|
||||
const parts = this.name.split('.');
|
||||
if (parts.length > 1 && parts[parts.length - 1].trim() !== '') {
|
||||
const ext = parts[parts.length - 1].toLowerCase();
|
||||
|
||||
if (validExtensions.includes(ext as FileFormat))
|
||||
return ext as FileFormat;
|
||||
}
|
||||
throw new Error(`Invalid or missing file extension in filename: "${this.name}". Supported extensions are: ${validExtensions.join(', ')}.`);
|
||||
}
|
||||
|
||||
get iconSrc(): string {
|
||||
return `assets/icons/file/${this.extension ?? 'unknown'}.svg`;
|
||||
}
|
||||
}
|
||||
|
||||
export type DocQuery = {
|
||||
id?: number | undefined,
|
||||
name?: string | undefined,
|
||||
attributes?: Record<string, string>
|
||||
}
|
||||
|
||||
class DocService {
|
||||
get(query: DocQuery | undefined = undefined): Promise<Doc[]> {
|
||||
let documents = _documents;
|
||||
|
||||
if (query?.id)
|
||||
documents = documents.filter(d => d.id === query.id);
|
||||
|
||||
if (query?.name)
|
||||
documents = documents.filter(d => d.name === query.name);
|
||||
|
||||
for (const name in query?.attributes) {
|
||||
const attr = query.attributes[name];
|
||||
documents = documents.filter(d => d.attributes.find(a => a.name === name)?.serilizedValue.toLowerCase().includes(attr.toLowerCase()));
|
||||
}
|
||||
|
||||
return Promise.resolve(documents);
|
||||
}
|
||||
|
||||
getById(id: number): Promise<Doc[]> {
|
||||
return this.get({ id: id });
|
||||
}
|
||||
|
||||
getByName(name: string): Promise<Doc[]> {
|
||||
return this.get({ name: name });
|
||||
}
|
||||
|
||||
getByAttribute(attributes: Record<string, string>): Promise<Doc[]> {
|
||||
return this.get({ attributes: attributes });
|
||||
}
|
||||
}
|
||||
|
||||
export default new DocService();
|
||||
@@ -1,3 +1,5 @@
|
||||
import { _products } from "src/_mock";
|
||||
|
||||
export type Product = {
|
||||
id: string;
|
||||
name: string;
|
||||
@@ -16,16 +18,5 @@ export type Product = {
|
||||
*/
|
||||
export function getProductsAsync(): Promise<Product[]> {
|
||||
//TODO: Implement the API call using fetch or axios
|
||||
return Promise.resolve([
|
||||
{
|
||||
id: '1',
|
||||
name: "User Manager",
|
||||
version: "1.0.0"
|
||||
},
|
||||
{
|
||||
id: '2',
|
||||
name: "Envelope Generator",
|
||||
version: "1.0.0"
|
||||
}
|
||||
]);
|
||||
return Promise.resolve(_products);
|
||||
}
|
||||
@@ -47,12 +47,10 @@
|
||||
dependencies:
|
||||
"@babel/types" "^7.27.0"
|
||||
|
||||
"@babel/runtime@^7.12.5", "@babel/runtime@^7.18.3", "@babel/runtime@^7.26.10", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7":
|
||||
version "7.27.0"
|
||||
resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.0.tgz"
|
||||
integrity sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==
|
||||
dependencies:
|
||||
regenerator-runtime "^0.14.0"
|
||||
"@babel/runtime@^7.12.5", "@babel/runtime@^7.18.3", "@babel/runtime@^7.26.10", "@babel/runtime@^7.27.6", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7":
|
||||
version "7.27.6"
|
||||
resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.6.tgz"
|
||||
integrity sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==
|
||||
|
||||
"@babel/template@^7.27.0":
|
||||
version "7.27.0"
|
||||
@@ -101,7 +99,7 @@
|
||||
source-map "^0.5.7"
|
||||
stylis "4.2.0"
|
||||
|
||||
"@emotion/cache@^11.13.5", "@emotion/cache@^11.14.0":
|
||||
"@emotion/cache@^11.14.0":
|
||||
version "11.14.0"
|
||||
resolved "https://registry.npmjs.org/@emotion/cache/-/cache-11.14.0.tgz"
|
||||
integrity sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==
|
||||
@@ -129,7 +127,7 @@
|
||||
resolved "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz"
|
||||
integrity sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==
|
||||
|
||||
"@emotion/react@^11.0.0-rc.0", "@emotion/react@^11.14.0", "@emotion/react@^11.4.1", "@emotion/react@^11.5.0":
|
||||
"@emotion/react@^11.0.0-rc.0", "@emotion/react@^11.14.0", "@emotion/react@^11.4.1", "@emotion/react@^11.5.0", "@emotion/react@^11.9.0":
|
||||
version "11.14.0"
|
||||
resolved "https://registry.npmjs.org/@emotion/react/-/react-11.14.0.tgz"
|
||||
integrity sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==
|
||||
@@ -159,7 +157,7 @@
|
||||
resolved "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.4.0.tgz"
|
||||
integrity sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==
|
||||
|
||||
"@emotion/styled@^11.14.0", "@emotion/styled@^11.3.0":
|
||||
"@emotion/styled@^11.14.0", "@emotion/styled@^11.3.0", "@emotion/styled@^11.8.1":
|
||||
version "11.14.0"
|
||||
resolved "https://registry.npmjs.org/@emotion/styled/-/styled-11.14.0.tgz"
|
||||
integrity sha512-XxfOnXFffatap2IyCeJyNov3kiDQWoR08gPUQxvbL7fxKryGBKUZUkG6Hz48DZwVrJSVh9sJboyV1Ds4OW6SgA==
|
||||
@@ -351,10 +349,17 @@
|
||||
"@jridgewell/resolve-uri" "^3.1.0"
|
||||
"@jridgewell/sourcemap-codec" "^1.4.14"
|
||||
|
||||
"@mui/core-downloads-tracker@^7.0.1":
|
||||
version "7.0.1"
|
||||
resolved "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-7.0.1.tgz"
|
||||
integrity sha512-T5DNVnSD9pMbj4Jk/Uphz+yvj9dfpl2+EqsOuJtG12HxEihNG5pd3qzX5yM1Id4dDwKRvM3dPVcxyzavTFhJeA==
|
||||
"@mui/core-downloads-tracker@^7.2.0":
|
||||
version "7.2.0"
|
||||
resolved "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-7.2.0.tgz"
|
||||
integrity sha512-d49s7kEgI5iX40xb2YPazANvo7Bx0BLg/MNRwv+7BVpZUzXj1DaVCKlQTDex3gy/0jsCb4w7AY2uH4t4AJvSog==
|
||||
|
||||
"@mui/icons-material@^7.2.0":
|
||||
version "7.2.0"
|
||||
resolved "https://registry.npmjs.org/@mui/icons-material/-/icons-material-7.2.0.tgz"
|
||||
integrity sha512-gRCspp3pfjHQyTmSOmYw7kUQTd9Udpdan4R8EnZvqPeoAtHnPzkvjBrBqzKaoAbbBp5bGF7BcD18zZJh4nwu0A==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.27.6"
|
||||
|
||||
"@mui/lab@^7.0.0-beta.10":
|
||||
version "7.0.0-beta.10"
|
||||
@@ -368,77 +373,99 @@
|
||||
clsx "^2.1.1"
|
||||
prop-types "^15.8.1"
|
||||
|
||||
"@mui/material@^7.0.1":
|
||||
version "7.0.1"
|
||||
resolved "https://registry.npmjs.org/@mui/material/-/material-7.0.1.tgz"
|
||||
integrity sha512-tQwjIIsn/UUSCHoCIQVkANuLua67h7Ro9M9gIHoGWaFbJFuF6cSO4Oda2olDVqIs4SWG+PaDChuu6SngxsaoyQ==
|
||||
"@mui/material@^5.15.14 || ^6.0.0 || ^7.0.0", "@mui/material@^7.0.1", "@mui/material@^7.2.0":
|
||||
version "7.2.0"
|
||||
resolved "https://registry.npmjs.org/@mui/material/-/material-7.2.0.tgz"
|
||||
integrity sha512-NTuyFNen5Z2QY+I242MDZzXnFIVIR6ERxo7vntFi9K1wCgSwvIl0HcAO2OOydKqqKApE6omRiYhpny1ZhGuH7Q==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.26.10"
|
||||
"@mui/core-downloads-tracker" "^7.0.1"
|
||||
"@mui/system" "^7.0.1"
|
||||
"@mui/types" "^7.4.0"
|
||||
"@mui/utils" "^7.0.1"
|
||||
"@babel/runtime" "^7.27.6"
|
||||
"@mui/core-downloads-tracker" "^7.2.0"
|
||||
"@mui/system" "^7.2.0"
|
||||
"@mui/types" "^7.4.4"
|
||||
"@mui/utils" "^7.2.0"
|
||||
"@popperjs/core" "^2.11.8"
|
||||
"@types/react-transition-group" "^4.4.12"
|
||||
clsx "^2.1.1"
|
||||
csstype "^3.1.3"
|
||||
prop-types "^15.8.1"
|
||||
react-is "^19.0.0"
|
||||
react-is "^19.1.0"
|
||||
react-transition-group "^4.4.5"
|
||||
|
||||
"@mui/private-theming@^7.0.1":
|
||||
version "7.0.1"
|
||||
resolved "https://registry.npmjs.org/@mui/private-theming/-/private-theming-7.0.1.tgz"
|
||||
integrity sha512-1kQ7REYjjzDukuMfTbAjm3pLEhD7gUMC2bWhg9VD6f6sHzyokKzX0XHzlr3IdzNWBjPytGkzHpPIRQrUOoPLCQ==
|
||||
"@mui/private-theming@^7.2.0":
|
||||
version "7.2.0"
|
||||
resolved "https://registry.npmjs.org/@mui/private-theming/-/private-theming-7.2.0.tgz"
|
||||
integrity sha512-y6N1Yt3T5RMxVFnCh6+zeSWBuQdNDm5/UlM0EAYZzZR/1u+XKJWYQmbpx4e+F+1EpkYi3Nk8KhPiQDi83M3zIw==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.26.10"
|
||||
"@mui/utils" "^7.0.1"
|
||||
"@babel/runtime" "^7.27.6"
|
||||
"@mui/utils" "^7.2.0"
|
||||
prop-types "^15.8.1"
|
||||
|
||||
"@mui/styled-engine@^7.0.1":
|
||||
version "7.0.1"
|
||||
resolved "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-7.0.1.tgz"
|
||||
integrity sha512-BeGe4xZmF7tESKhmctYrL54Kl25kGHPKVdZYM5qj5Xz76WM/poY+d8EmAqUesT6k2rbJWPp2gtOAXXinNCGunQ==
|
||||
"@mui/styled-engine@^7.2.0":
|
||||
version "7.2.0"
|
||||
resolved "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-7.2.0.tgz"
|
||||
integrity sha512-yq08xynbrNYcB1nBcW9Fn8/h/iniM3ewRguGJXPIAbHvxEF7Pz95kbEEOAAhwzxMX4okhzvHmk0DFuC5ayvgIQ==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.26.10"
|
||||
"@emotion/cache" "^11.13.5"
|
||||
"@babel/runtime" "^7.27.6"
|
||||
"@emotion/cache" "^11.14.0"
|
||||
"@emotion/serialize" "^1.3.3"
|
||||
"@emotion/sheet" "^1.4.0"
|
||||
csstype "^3.1.3"
|
||||
prop-types "^15.8.1"
|
||||
|
||||
"@mui/system@^7.0.1":
|
||||
version "7.0.1"
|
||||
resolved "https://registry.npmjs.org/@mui/system/-/system-7.0.1.tgz"
|
||||
integrity sha512-pK+puz0hRPHEKGlcPd80mKYD3jpyi0uVIwWffox1WZgPTQMw2dCKLcD+9ndMDJADnrKzmKlpoH756PPFh2UvWA==
|
||||
"@mui/system@^5.15.14 || ^6.0.0 || ^7.0.0", "@mui/system@^7.0.1", "@mui/system@^7.2.0":
|
||||
version "7.2.0"
|
||||
resolved "https://registry.npmjs.org/@mui/system/-/system-7.2.0.tgz"
|
||||
integrity sha512-PG7cm/WluU6RAs+gNND2R9vDwNh+ERWxPkqTaiXQJGIFAyJ+VxhyKfzpdZNk0z0XdmBxxi9KhFOpgxjehf/O0A==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.26.10"
|
||||
"@mui/private-theming" "^7.0.1"
|
||||
"@mui/styled-engine" "^7.0.1"
|
||||
"@mui/types" "^7.4.0"
|
||||
"@mui/utils" "^7.0.1"
|
||||
"@babel/runtime" "^7.27.6"
|
||||
"@mui/private-theming" "^7.2.0"
|
||||
"@mui/styled-engine" "^7.2.0"
|
||||
"@mui/types" "^7.4.4"
|
||||
"@mui/utils" "^7.2.0"
|
||||
clsx "^2.1.1"
|
||||
csstype "^3.1.3"
|
||||
prop-types "^15.8.1"
|
||||
|
||||
"@mui/types@^7.4.0":
|
||||
version "7.4.0"
|
||||
resolved "https://registry.npmjs.org/@mui/types/-/types-7.4.0.tgz"
|
||||
integrity sha512-TxJ4ezEeedWHBjOmLtxI203a9DII9l4k83RXmz1PYSAmnyEcK2PglTNmJGxswC/wM5cdl9ap2h8lnXvt2swAGQ==
|
||||
"@mui/types@^7.4.0", "@mui/types@^7.4.4":
|
||||
version "7.4.4"
|
||||
resolved "https://registry.npmjs.org/@mui/types/-/types-7.4.4.tgz"
|
||||
integrity sha512-p63yhbX52MO/ajXC7hDHJA5yjzJekvWD3q4YDLl1rSg+OXLczMYPvTuSuviPRCgRX8+E42RXz1D/dz9SxPSlWg==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.26.10"
|
||||
"@babel/runtime" "^7.27.6"
|
||||
|
||||
"@mui/utils@^7.0.1":
|
||||
version "7.0.1"
|
||||
resolved "https://registry.npmjs.org/@mui/utils/-/utils-7.0.1.tgz"
|
||||
integrity sha512-SJKrrebNpmK9rJCnVL29nGPhPXQYtBZmb7Dsp0f58uIUhQfAKcBXHE4Kjs06SX4CwqeCuwEVgcHY+MgAO6XQ/g==
|
||||
"@mui/utils@^7.0.1", "@mui/utils@^7.1.1", "@mui/utils@^7.2.0":
|
||||
version "7.2.0"
|
||||
resolved "https://registry.npmjs.org/@mui/utils/-/utils-7.2.0.tgz"
|
||||
integrity sha512-O0i1GQL6MDzhKdy9iAu5Yr0Sz1wZjROH1o3aoztuivdCXqEeQYnEjTDiRLGuFxI9zrUbTHBwobMyQH5sNtyacw==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.26.10"
|
||||
"@mui/types" "^7.4.0"
|
||||
"@types/prop-types" "^15.7.14"
|
||||
"@babel/runtime" "^7.27.6"
|
||||
"@mui/types" "^7.4.4"
|
||||
"@types/prop-types" "^15.7.15"
|
||||
clsx "^2.1.1"
|
||||
prop-types "^15.8.1"
|
||||
react-is "^19.0.0"
|
||||
react-is "^19.1.0"
|
||||
|
||||
"@mui/x-date-pickers@^8.7.0":
|
||||
version "8.7.0"
|
||||
resolved "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-8.7.0.tgz"
|
||||
integrity sha512-7fCRhhoE/2s7wsJWLoY2IoHlN5ZA+ev7ZzhIjLPAOzMXwIflzCgljq6iG/iXpATugsmlxWHhO/7wdDSD6zUNOw==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.27.6"
|
||||
"@mui/utils" "^7.1.1"
|
||||
"@mui/x-internals" "8.7.0"
|
||||
"@types/react-transition-group" "^4.4.12"
|
||||
clsx "^2.1.1"
|
||||
prop-types "^15.8.1"
|
||||
react-transition-group "^4.4.5"
|
||||
|
||||
"@mui/x-internals@8.7.0":
|
||||
version "8.7.0"
|
||||
resolved "https://registry.npmjs.org/@mui/x-internals/-/x-internals-8.7.0.tgz"
|
||||
integrity sha512-1aduds7L2i6t0HIFNlqG4UB07SVEg+wcnJ9GGu8B/X8EVwO72Rt+rc8ZlqK10ooscq1AlTwi2dd0q+hz+aWk+Q==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.27.6"
|
||||
"@mui/utils" "^7.1.1"
|
||||
reselect "^5.1.1"
|
||||
|
||||
"@nodelib/fs.scandir@2.1.5":
|
||||
version "2.1.5"
|
||||
@@ -559,6 +586,18 @@
|
||||
resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz"
|
||||
integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==
|
||||
|
||||
"@types/lodash.debounce@^4.0.9":
|
||||
version "4.0.9"
|
||||
resolved "https://registry.npmjs.org/@types/lodash.debounce/-/lodash.debounce-4.0.9.tgz"
|
||||
integrity sha512-Ma5JcgTREwpLRwMM+XwBR7DaWe96nC38uCBDFKZWbNKD+osjVzdpnUSwBcqCptrp16sSOLBAUb50Car5I0TCsQ==
|
||||
dependencies:
|
||||
"@types/lodash" "*"
|
||||
|
||||
"@types/lodash@*":
|
||||
version "4.17.20"
|
||||
resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.20.tgz"
|
||||
integrity sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==
|
||||
|
||||
"@types/node@^18.0.0 || ^20.0.0 || >=22.0.0", "@types/node@^22.14.0":
|
||||
version "22.14.0"
|
||||
resolved "https://registry.npmjs.org/@types/node/-/node-22.14.0.tgz"
|
||||
@@ -571,10 +610,10 @@
|
||||
resolved "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz"
|
||||
integrity sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==
|
||||
|
||||
"@types/prop-types@^15.7.14":
|
||||
version "15.7.14"
|
||||
resolved "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.14.tgz"
|
||||
integrity sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==
|
||||
"@types/prop-types@^15.7.15":
|
||||
version "15.7.15"
|
||||
resolved "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz"
|
||||
integrity sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==
|
||||
|
||||
"@types/react-dom@^19.1.1":
|
||||
version "19.1.1"
|
||||
@@ -1007,7 +1046,7 @@ data-view-byte-offset@^1.0.1:
|
||||
es-errors "^1.3.0"
|
||||
is-data-view "^1.0.1"
|
||||
|
||||
dayjs@^1.11.13:
|
||||
dayjs@^1.10.7, dayjs@^1.11.13:
|
||||
version "1.11.13"
|
||||
resolved "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz"
|
||||
integrity sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==
|
||||
@@ -1994,6 +2033,11 @@ locate-path@^6.0.0:
|
||||
dependencies:
|
||||
p-locate "^5.0.0"
|
||||
|
||||
lodash.debounce@^4.0.8:
|
||||
version "4.0.8"
|
||||
resolved "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz"
|
||||
integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==
|
||||
|
||||
lodash.merge@^4.6.2:
|
||||
version "4.6.2"
|
||||
resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz"
|
||||
@@ -2308,7 +2352,7 @@ react-is@^16.7.0:
|
||||
resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz"
|
||||
integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
|
||||
|
||||
react-is@^19.0.0:
|
||||
react-is@^19.1.0:
|
||||
version "19.1.0"
|
||||
resolved "https://registry.npmjs.org/react-is/-/react-is-19.1.0.tgz"
|
||||
integrity sha512-Oe56aUPnkHyyDxxkvqtd7KkdQP5uIUfHxd5XTb3wE9d/kRnZLmKbDB0GWk919tdQ+mxxPtG6EAs6RMT6i1qtHg==
|
||||
@@ -2364,11 +2408,6 @@ reflect.getprototypeof@^1.0.6, reflect.getprototypeof@^1.0.9:
|
||||
get-proto "^1.0.1"
|
||||
which-builtin-type "^1.2.1"
|
||||
|
||||
regenerator-runtime@^0.14.0:
|
||||
version "0.14.1"
|
||||
resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz"
|
||||
integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==
|
||||
|
||||
regexp.prototype.flags@^1.5.3:
|
||||
version "1.5.4"
|
||||
resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz"
|
||||
@@ -2381,6 +2420,11 @@ regexp.prototype.flags@^1.5.3:
|
||||
gopd "^1.2.0"
|
||||
set-function-name "^2.0.2"
|
||||
|
||||
reselect@^5.1.1:
|
||||
version "5.1.1"
|
||||
resolved "https://registry.npmjs.org/reselect/-/reselect-5.1.1.tgz"
|
||||
integrity sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==
|
||||
|
||||
resolve-from@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz"
|
||||
|
||||
Reference in New Issue
Block a user