diff --git a/web/package-lock.json b/web/package-lock.json index e2eece3..c25223d 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -12,14 +12,15 @@ "@emotion/styled": "^11.14.1", "@mui/material": "^9.0.1", "@mui/x-tree-view": "^9.1.0", - "axios": "^1.16.1", + "axios": "^1.9.0", "date-fns": "^4.1.0", "material-react-table": "^3.2.1", "react": "^18.3.1", "react-daisyui": "^5.0.5", - "react-dom": "^18.3.1", - "react-router-dom": "^7.15.1", - "react-toastify": "^11.1.0" + "react-dom": "^18.2.0", + "react-router": "^6.30.0", + "react-router-dom": "^6.30.0", + "react-toastify": "^11.0.5" }, "devDependencies": { "@biomejs/biome": "1.9.4", @@ -45,12 +46,12 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", - "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.28.5", + "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" }, @@ -59,13 +60,13 @@ } }, "node_modules/@babel/generator": { - "version": "7.29.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", - "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.7.tgz", + "integrity": "sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==", "license": "MIT", "dependencies": { - "@babel/parser": "^7.29.0", - "@babel/types": "^7.29.0", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" @@ -75,52 +76,52 @@ } }, "node_modules/@babel/helper-globals": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", - "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz", + "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", - "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", + "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", "license": "MIT", "dependencies": { - "@babel/traverse": "^7.28.6", - "@babel/types": "^7.28.6" + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", - "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.29.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.3.tgz", - "integrity": "sha512-b3ctpQwp+PROvU/cttc4OYl4MzfJUWy6FZg+PMXfzmt/+39iHVF0sDfqay8TQM3JA2EUOyKcFZt75jWriQijsA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz", + "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==", "license": "MIT", "dependencies": { - "@babel/types": "^7.29.0" + "@babel/types": "^7.29.7" }, "bin": { "parser": "bin/babel-parser.js" @@ -130,40 +131,40 @@ } }, "node_modules/@babel/runtime": { - "version": "7.29.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.2.tgz", - "integrity": "sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.7.tgz", + "integrity": "sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/template": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", - "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", + "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.28.6", - "@babel/parser": "^7.28.6", - "@babel/types": "^7.28.6" + "@babel/code-frame": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", - "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.7.tgz", + "integrity": "sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.29.0", - "@babel/generator": "^7.29.0", - "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.29.0", - "@babel/template": "^7.28.6", - "@babel/types": "^7.29.0", + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-globals": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7", "debug": "^4.3.1" }, "engines": { @@ -171,22 +172,22 @@ } }, "node_modules/@babel/types": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", - "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz", + "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==", "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.28.5" + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@base-ui/utils": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/@base-ui/utils/-/utils-0.2.8.tgz", - "integrity": "sha512-jvOi+c+ftGlGotNcKnzPVg2IhCaDTB6/6R3JeqdjdXktuAJi3wKH9T7+svuaKh1mmfVU11UWzUZVH74JDfi/wQ==", + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@base-ui/utils/-/utils-0.2.9.tgz", + "integrity": "sha512-x/PDDCYzoqPpjrdyb3VcyylTI2IjUXEtYDGi5foh7KsnmNJIIaVwA2GLgDH1dps1GgXiJbA60hM+AyuTfQzIvw==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.29.2", @@ -370,21 +371,21 @@ } }, "node_modules/@emnapi/core": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz", - "integrity": "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.11.1.tgz", + "integrity": "sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==", "dev": true, "license": "MIT", "optional": true, "dependencies": { - "@emnapi/wasi-threads": "1.2.1", + "@emnapi/wasi-threads": "1.2.2", "tslib": "^2.4.0" } }, "node_modules/@emnapi/runtime": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz", - "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.1.tgz", + "integrity": "sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==", "dev": true, "license": "MIT", "optional": true, @@ -393,9 +394,9 @@ } }, "node_modules/@emnapi/wasi-threads": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz", - "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.2.tgz", + "integrity": "sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==", "dev": true, "license": "MIT", "optional": true, @@ -650,9 +651,9 @@ } }, "node_modules/@mui/core-downloads-tracker": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-9.0.1.tgz", - "integrity": "sha512-GzamIIhZ1bH77dq7eKaeyRgJdkypsxin4jBFq2EMs4lBWRR0LFO1CSVMsoebn/VvjcNrnrOrjy48MkrkQUK2iw==", + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-9.1.1.tgz", + "integrity": "sha512-AupmMICbdJHqAh6FfOMaaiiIr7dfEgZJn5DFfiPuGNrbs+ZZy9cD1APwO0TSVBz5j08MJEEY6n7iC76/2wjMEA==", "license": "MIT", "funding": { "type": "opencollective", @@ -660,9 +661,9 @@ } }, "node_modules/@mui/icons-material": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-9.0.1.tgz", - "integrity": "sha512-5PRpQjVLTNLyV/2J9J53Yz4R0tVbodG0BQDN2zQI1QBG1OPYM25ar+4N20eyFOfJT6zKglLzsnU70+zdVLaTkw==", + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-9.1.1.tgz", + "integrity": "sha512-OXhm9DajemStb58AumM06DuPhHTa3XD36TFD4yf6WtJyNRO5DfEZbbnHlBg/US2Y2oOXwM/XurMTBOD6L/YYZw==", "license": "MIT", "peer": true, "dependencies": { @@ -676,7 +677,7 @@ "url": "https://opencollective.com/mui-org" }, "peerDependencies": { - "@mui/material": "^9.0.1", + "@mui/material": "^9.1.1", "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react": "^17.0.0 || ^18.0.0 || ^19.0.0" }, @@ -687,22 +688,22 @@ } }, "node_modules/@mui/material": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-9.0.1.tgz", - "integrity": "sha512-voyCpeUxcSWLN7KPZuq0pGCIt726T9K6kiVM3XUcywZDAlZSarLHaUxJVQpospbjjOzN53hwyjo8s6KoWl6utw==", + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-9.1.1.tgz", + "integrity": "sha512-Wv+gInjrpf99l1Q0oHe0eOWGTnlbkzs5nowClX65KCT/2fyPMwcbFEEkUsOHdpcHhB5UAbz/d7jlwt5ajWVvlA==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.29.2", - "@mui/core-downloads-tracker": "^9.0.1", - "@mui/system": "^9.0.1", - "@mui/types": "^9.0.0", - "@mui/utils": "^9.0.1", + "@mui/core-downloads-tracker": "^9.1.1", + "@mui/system": "^9.1.1", + "@mui/types": "^9.1.1", + "@mui/utils": "^9.1.1", "@popperjs/core": "^2.11.8", "@types/react-transition-group": "^4.4.12", "clsx": "^2.1.1", "csstype": "^3.2.3", "prop-types": "^15.8.1", - "react-is": "^19.2.4", + "react-is": "^19.2.6", "react-transition-group": "^4.4.5" }, "engines": { @@ -715,7 +716,7 @@ "peerDependencies": { "@emotion/react": "^11.5.0", "@emotion/styled": "^11.3.0", - "@mui/material-pigment-css": "^9.0.1", + "@mui/material-pigment-css": "^9.1.1", "@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" @@ -736,13 +737,13 @@ } }, "node_modules/@mui/private-theming": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-9.0.1.tgz", - "integrity": "sha512-pSIGq4Yw749KHEwlkYZWVERgHgwJELP6ODtBNUfV8V4oIb5H+h7IQDFXuk/b2oQccODK1enJAtiEzlgLZmq+8g==", + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-9.1.1.tgz", + "integrity": "sha512-oH6c+d6sJ1CZT0Vg2/fHdUQ5zvo9Pn+f+WWk0tlQliHqqIRdN32DZ7UxjalW3LUj4OkHbdWR31biWuLxK9i7Cg==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.29.2", - "@mui/utils": "^9.0.1", + "@mui/utils": "^9.1.1", "prop-types": "^15.8.1" }, "engines": { @@ -763,9 +764,9 @@ } }, "node_modules/@mui/styled-engine": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-9.0.0.tgz", - "integrity": "sha512-9RLGdX4Jg0aQPRuvqh/OLzYSPlgd5zyEw5/1HIRfdavSiOd03WtUaGZH9/w1RoTYuRKwpgy0hpIFaMHIqPVIWg==", + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-9.1.1.tgz", + "integrity": "sha512-neaYKdJfvEG54q8efHLJR7swpHG/gfSv9xGqW5iTSMsubD7yPCPFrhVBt284j1DOF3uZaaDJSHQL7gz6jGF21Q==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.29.2", @@ -797,16 +798,16 @@ } }, "node_modules/@mui/system": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-9.0.1.tgz", - "integrity": "sha512-WvlioaLxk6ewUIOfh0StxUvOPDS1mCfzaulcudsL1brZNXuh0N9FMk7RpH7ImJKjEz412SEy/V/yvqmtxbqxCQ==", + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-9.1.1.tgz", + "integrity": "sha512-q+aqNa58QZUwmmyUvJKKrStrej+4BcWFw4M0Ug+zRylPIQgR64cqvBnE3QTfLZm4OXulydp8Hl3zwKxMayrdsA==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.29.2", - "@mui/private-theming": "^9.0.1", - "@mui/styled-engine": "^9.0.0", - "@mui/types": "^9.0.0", - "@mui/utils": "^9.0.1", + "@mui/private-theming": "^9.1.1", + "@mui/styled-engine": "^9.1.1", + "@mui/types": "^9.1.1", + "@mui/utils": "^9.1.1", "clsx": "^2.1.1", "csstype": "^3.2.3", "prop-types": "^15.8.1" @@ -837,9 +838,9 @@ } }, "node_modules/@mui/types": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@mui/types/-/types-9.0.0.tgz", - "integrity": "sha512-i1cuFCAWN44b3AJWO7mh7tuh1sqbQSeVr/94oG0TX5uXivac8XalgE4/6fQZcmGZigzbQ35IXxj/4jLpRIBYZg==", + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-9.1.1.tgz", + "integrity": "sha512-Zjt7u8wNvDg40rPTGoL+TnfkpuSKjwubsNSFRH1KAVZLcaV4I3AFNHIFbvH7p4F3alEibSbdd90xAgn5Rnfndg==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.29.2" @@ -854,17 +855,17 @@ } }, "node_modules/@mui/utils": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-9.0.1.tgz", - "integrity": "sha512-f3UO3jNN1pYg5zxqXC81Bvv8hx5ACcYc0387382ZI7M5ono1heIwHYLrKsz85myguWdeVKPRZGmDdynWUBjK2g==", + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-9.1.1.tgz", + "integrity": "sha512-qSNfnkzZMptaaWFFklpDf4NPJztgwsMDVfM/sSDt+wq4ssYSBhLYwwjuB6eS/+p2IUYbeRzHluzXbw0Zn7aI4A==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.29.2", - "@mui/types": "^9.0.0", + "@mui/types": "^9.1.1", "@types/prop-types": "^15.7.15", "clsx": "^2.1.1", "prop-types": "^15.8.1", - "react-is": "^19.2.4" + "react-is": "^19.2.6" }, "engines": { "node": ">=14.0.0" @@ -884,13 +885,13 @@ } }, "node_modules/@mui/x-date-pickers": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-9.2.0.tgz", - "integrity": "sha512-4GMal3xvHSKs+Ajv1PwbakWas79DDh6KlsSr9sjJhSINaST6dAPsIQblX5mSOmR7c4Du1Aemhqeiwo3L0CwNzQ==", + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-9.5.0.tgz", + "integrity": "sha512-Pzd8gU2qOoIAUMMesjbrq3gFs6akWXcSsEkFIHVA4dtuoh6SeWISu+WR+ymq/sBOcn2tk9IBIjqRQkqLhkm+tg==", "license": "MIT", "peer": true, "dependencies": { - "@babel/runtime": "^7.29.2", + "@babel/runtime": "^7.29.7", "@mui/utils": "9.0.1", "@mui/x-internals": "^9.1.0", "@types/react-transition-group": "^4.4.12", @@ -950,6 +951,37 @@ } } }, + "node_modules/@mui/x-date-pickers/node_modules/@mui/utils": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-9.0.1.tgz", + "integrity": "sha512-f3UO3jNN1pYg5zxqXC81Bvv8hx5ACcYc0387382ZI7M5ono1heIwHYLrKsz85myguWdeVKPRZGmDdynWUBjK2g==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/runtime": "^7.29.2", + "@mui/types": "^9.0.0", + "@types/prop-types": "^15.7.15", + "clsx": "^2.1.1", + "prop-types": "^15.8.1", + "react-is": "^19.2.4" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@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/x-internals": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/@mui/x-internals/-/x-internals-9.1.0.tgz", @@ -1003,14 +1035,14 @@ } }, "node_modules/@mui/x-tree-view": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/@mui/x-tree-view/-/x-tree-view-9.1.0.tgz", - "integrity": "sha512-Pht6/VS5cmKBCKr7MfbvS+XY4vPKpzDEKZVaSpUiv4ClnSsm9kJeSbzziA1MM1yeEmJx40XyNqZKUCslLO76kw==", + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/@mui/x-tree-view/-/x-tree-view-9.4.0.tgz", + "integrity": "sha512-tJ4txQCwadY7Yj1LDhgtV4gjc0KCHdTWTPh/ynUj7BJ7aKqOzblXZzur0GLjyLJUhauBvotaF4LpzRxrjsPu5g==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.29.2", - "@base-ui/utils": "^0.2.8", - "@mui/utils": "9.0.0", + "@babel/runtime": "^7.29.7", + "@base-ui/utils": "^0.2.9", + "@mui/utils": "9.0.1", "@mui/x-internals": "^9.1.0", "@types/react-transition-group": "^4.4.12", "clsx": "^2.1.1", @@ -1042,9 +1074,9 @@ } }, "node_modules/@mui/x-tree-view/node_modules/@mui/utils": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-9.0.0.tgz", - "integrity": "sha512-bQcqyg/gjULUqTuyUjSAFr6LQGLvtkNtDbJerAtoUn9kGZ0hg5QJiN1PLHMLbeFpe3te1831uq7GFl2ITokGdg==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-9.0.1.tgz", + "integrity": "sha512-f3UO3jNN1pYg5zxqXC81Bvv8hx5ACcYc0387382ZI7M5ono1heIwHYLrKsz85myguWdeVKPRZGmDdynWUBjK2g==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.29.2", @@ -1129,6 +1161,15 @@ "url": "https://opencollective.com/popperjs" } }, + "node_modules/@remix-run/router": { + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.23.3.tgz", + "integrity": "sha512-4An71tdz9X8+3sI4Qqqd2LWd9vS39J7sqd9EU4Scw7TJE/qB10Flv/UuqbPVgfQV9XoK8Np6jNquZitnZq5i+Q==", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/@rsbuild/core": { "version": "1.7.5", "resolved": "https://registry.npmjs.org/@rsbuild/core/-/core-1.7.5.tgz", @@ -1169,28 +1210,28 @@ } }, "node_modules/@rspack/binding": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@rspack/binding/-/binding-1.7.11.tgz", - "integrity": "sha512-2MGdy2s2HimsDT444Bp5XnALzNRxuBNc7y0JzyuqKbHBywd4x2NeXyhWXXoxufaCFu5PBc9Qq9jyfjW2Aeh06Q==", + "version": "1.7.12", + "resolved": "https://registry.npmjs.org/@rspack/binding/-/binding-1.7.12.tgz", + "integrity": "sha512-f4HHuLbvuld8Ba4iB/4ibse5XrKxFrgmM3S4P2AOKnPlekAFlBjmltCuaTL/W2ggYvILaVY+YcFXrEH1rrKeQA==", "dev": true, "license": "MIT", "optionalDependencies": { - "@rspack/binding-darwin-arm64": "1.7.11", - "@rspack/binding-darwin-x64": "1.7.11", - "@rspack/binding-linux-arm64-gnu": "1.7.11", - "@rspack/binding-linux-arm64-musl": "1.7.11", - "@rspack/binding-linux-x64-gnu": "1.7.11", - "@rspack/binding-linux-x64-musl": "1.7.11", - "@rspack/binding-wasm32-wasi": "1.7.11", - "@rspack/binding-win32-arm64-msvc": "1.7.11", - "@rspack/binding-win32-ia32-msvc": "1.7.11", - "@rspack/binding-win32-x64-msvc": "1.7.11" + "@rspack/binding-darwin-arm64": "1.7.12", + "@rspack/binding-darwin-x64": "1.7.12", + "@rspack/binding-linux-arm64-gnu": "1.7.12", + "@rspack/binding-linux-arm64-musl": "1.7.12", + "@rspack/binding-linux-x64-gnu": "1.7.12", + "@rspack/binding-linux-x64-musl": "1.7.12", + "@rspack/binding-wasm32-wasi": "1.7.12", + "@rspack/binding-win32-arm64-msvc": "1.7.12", + "@rspack/binding-win32-ia32-msvc": "1.7.12", + "@rspack/binding-win32-x64-msvc": "1.7.12" } }, "node_modules/@rspack/binding-darwin-arm64": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-arm64/-/binding-darwin-arm64-1.7.11.tgz", - "integrity": "sha512-oduECiZVqbO5zlVw+q7Vy65sJFth99fWPTyucwvLJJtJkPL5n17Uiql2cYP6Ijn0pkqtf1SXgK8WjiKLG5bIig==", + "version": "1.7.12", + "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-arm64/-/binding-darwin-arm64-1.7.12.tgz", + "integrity": "sha512-rbFprJaJiqrmfy8SHth8EsoRS0wg4bXcucwj9NiMzpGFq14Opw8c04iQ6H9BECYzgmN0PKZ9rh41LdVvhdZe4A==", "cpu": [ "arm64" ], @@ -1202,9 +1243,9 @@ ] }, "node_modules/@rspack/binding-darwin-x64": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-x64/-/binding-darwin-x64-1.7.11.tgz", - "integrity": "sha512-a1+TtTE9ap6RalgFi7FGIgkJP6O4Vy6ctv+9WGJy53E4kuqHR0RygzaiVxCI/GMc/vBT9vY23hyrpWb3d1vtXA==", + "version": "1.7.12", + "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-x64/-/binding-darwin-x64-1.7.12.tgz", + "integrity": "sha512-jnOp+/UXOJa9xqUb8KXH03sysoO2e4Ij6tw6MqDdmdj8n/A8PQENRPUbW9AwXpPtVDJPus9r4fi7b3+6e4B8Hg==", "cpu": [ "x64" ], @@ -1216,9 +1257,9 @@ ] }, "node_modules/@rspack/binding-linux-arm64-gnu": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.7.11.tgz", - "integrity": "sha512-P0QrGRPbTWu6RKWfN0bDtbnEps3rXH0MWIMreZABoUrVmNQKtXR6e73J3ub6a+di5s2+K0M2LJ9Bh2/H4UsDUA==", + "version": "1.7.12", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.7.12.tgz", + "integrity": "sha512-C8owWG+yvo7X0oVLIXetkoJhIFBP1LYNcAQqtgLmJnQLQDklGuP83dKC+zISGQWpjawHfZ1ER96vLgoTrxKZdw==", "cpu": [ "arm64" ], @@ -1230,9 +1271,9 @@ ] }, "node_modules/@rspack/binding-linux-arm64-musl": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.7.11.tgz", - "integrity": "sha512-6ky7R43VMjWwmx3Yx7Jl7faLBBMAgMDt+/bN35RgwjiPgsIByz65EwytUVuW9rikB43BGHvA/eqlnjLrUzNBqw==", + "version": "1.7.12", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.7.12.tgz", + "integrity": "sha512-i51WWI64aRpsfSki6rN0aepPqXkVfS+vZM7+4bWDcmnhUmdMvhIPcYg0QRk3DtyJnu33jqNLM0WHY78k00NyfA==", "cpu": [ "arm64" ], @@ -1244,9 +1285,9 @@ ] }, "node_modules/@rspack/binding-linux-x64-gnu": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.7.11.tgz", - "integrity": "sha512-cuOJMfCOvb2Wgsry5enXJ3iT1FGUjdPqtGUBVupQlEG4ntSYsQ2PtF4wIDVasR3wdxC5nQbipOrDiN/u6fYsdQ==", + "version": "1.7.12", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.7.12.tgz", + "integrity": "sha512-MSos0FuPEefqo9V92ULd5hggKG29EkSNg1zDcypy0OkpsKh5pfjVxTLYFXgTcVyFoUQQbdG8zFBzYbwmJ8V4ew==", "cpu": [ "x64" ], @@ -1258,9 +1299,9 @@ ] }, "node_modules/@rspack/binding-linux-x64-musl": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-musl/-/binding-linux-x64-musl-1.7.11.tgz", - "integrity": "sha512-CoK37hva4AmHGh3VCsQXmGr40L36m1/AdnN5LEjUX6kx5rEH7/1nEBN6Ii72pejqDVvk9anEROmPDiPw10tpFg==", + "version": "1.7.12", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-musl/-/binding-linux-x64-musl-1.7.12.tgz", + "integrity": "sha512-JcAMVKXOnjfpC3coWjCFPWD3Yl8RBw6a+IXQQ8mfRlHaHMIiOv8IfZqx15XRxMUn49CtP7Z0Na8iiAg2aKrcfw==", "cpu": [ "x64" ], @@ -1272,9 +1313,9 @@ ] }, "node_modules/@rspack/binding-wasm32-wasi": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@rspack/binding-wasm32-wasi/-/binding-wasm32-wasi-1.7.11.tgz", - "integrity": "sha512-OtrmnPUVJMxjNa3eDMfHyPdtlLRmmp/aIm0fQHlAOATbZvlGm12q7rhPW5BXTu1yh+1rQ1/uqvz+SzKEZXuJaQ==", + "version": "1.7.12", + "resolved": "https://registry.npmjs.org/@rspack/binding-wasm32-wasi/-/binding-wasm32-wasi-1.7.12.tgz", + "integrity": "sha512-n+ZqP6ZMc0nhOgvadg5VhEs9ojtbES80AcWeFnmGkbzIszvGSO63GKNiRkXtjJ9KFuRzytbbmsCqkUVH+Tywxg==", "cpu": [ "wasm32" ], @@ -1286,9 +1327,9 @@ } }, "node_modules/@rspack/binding-win32-arm64-msvc": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@rspack/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.7.11.tgz", - "integrity": "sha512-lObFW6e5lCWNgTBNwT//yiEDbsxm9QG4BYUojqeXxothuzJ/L6ibXz6+gLMvbOvLGV3nKgkXmx8GvT9WDKR0mA==", + "version": "1.7.12", + "resolved": "https://registry.npmjs.org/@rspack/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.7.12.tgz", + "integrity": "sha512-8+h5fYDXYdmugbdfZ+D1y8IQ3rv2EhSfyGP7vBe+bjNyaMa4jWrpucmZbtxojUL1AzaeuHbvMdj9UO/gelk/+g==", "cpu": [ "arm64" ], @@ -1300,9 +1341,9 @@ ] }, "node_modules/@rspack/binding-win32-ia32-msvc": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@rspack/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.7.11.tgz", - "integrity": "sha512-0pYGnZd8PPqNR68zQ8skamqNAXEA1sUfXuAdYcknIIRq2wsbiwFzIc0Pov1cIfHYab37G7sSIPBiOUdOWF5Ivw==", + "version": "1.7.12", + "resolved": "https://registry.npmjs.org/@rspack/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.7.12.tgz", + "integrity": "sha512-cDMGwTRSa2p9fNBVe1wTRkF2AEXZ9ARWW36QeC5CkLaI0Ezz8lvhF2+CSOPnhaQ1O1qtn0L0SF+lFnrY+I7xGQ==", "cpu": [ "ia32" ], @@ -1314,9 +1355,9 @@ ] }, "node_modules/@rspack/binding-win32-x64-msvc": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@rspack/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.7.11.tgz", - "integrity": "sha512-EeQXayoQk/uBkI3pdoXfQBXNIUrADq56L3s/DFyM2pJeUDrWmhfIw2UFIGkYPTMSCo8F2JcdcGM32FGJrSnU0Q==", + "version": "1.7.12", + "resolved": "https://registry.npmjs.org/@rspack/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.7.12.tgz", + "integrity": "sha512-wIqFvlgFqrgUyj/6S/FJcvShnkZOmIeXTfqvheLY67MGq8qd8jb1YimQVKAIrmWB3yuJKUFACI3Ag1UBtEedEA==", "cpu": [ "x64" ], @@ -1328,14 +1369,14 @@ ] }, "node_modules/@rspack/core": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@rspack/core/-/core-1.7.11.tgz", - "integrity": "sha512-rsD9b+Khmot5DwCMiB3cqTQo53ioPG3M/A7BySu8+0+RS7GCxKm+Z+mtsjtG/vsu4Tn2tcqCdZtA3pgLoJB+ew==", + "version": "1.7.12", + "resolved": "https://registry.npmjs.org/@rspack/core/-/core-1.7.12.tgz", + "integrity": "sha512-6CwFIHlhRmXfZoMj3v9MZ1SMTPBn+cHVXeMIeaGp5sufqinKsISbsqHu6ZMJu2wDSmZLdmQJX6zLxkhcAUlhkQ==", "dev": true, "license": "MIT", "dependencies": { "@module-federation/runtime-tools": "0.22.0", - "@rspack/binding": "1.7.11", + "@rspack/binding": "1.7.12", "@rspack/lite-tapable": "1.1.0" }, "engines": { @@ -1350,13 +1391,20 @@ } } }, - "node_modules/@rspack/lite-tapable": { + "node_modules/@rspack/core/node_modules/@rspack/lite-tapable": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@rspack/lite-tapable/-/lite-tapable-1.1.0.tgz", "integrity": "sha512-E2B0JhYFmVAwdDiG14+DW0Di4Ze4Jg10Pc4/lILUrd5DRCaklduz2OvJ5HYQ6G+hd+WTzqQb3QnDNfK4yvAFYw==", "dev": true, "license": "MIT" }, + "node_modules/@rspack/lite-tapable": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@rspack/lite-tapable/-/lite-tapable-1.1.2.tgz", + "integrity": "sha512-1OnyWChLGE46YzWyjlmYJssOu/Y0STAnnr2ueKPqDCYTf63GJMs0mxNnCul4dNiVqHYPKv3/fxrTY3IpqoVwZQ==", + "dev": true, + "license": "MIT" + }, "node_modules/@rspack/plugin-react-refresh": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/@rspack/plugin-react-refresh/-/plugin-react-refresh-1.6.2.tgz", @@ -1377,9 +1425,9 @@ } }, "node_modules/@swc/helpers": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.21.tgz", - "integrity": "sha512-jI/VAmtdjB/RnI8GTnokyX7Ug8c+g+ffD6QRLa6XQewtnGyukKkKSk3wLTM3b5cjt1jNh9x0jfVlagdN2gDKQg==", + "version": "0.5.23", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.23.tgz", + "integrity": "sha512-5lSsMOTXURePglDfvuAQUqkGek9Hg2kksOYay2m0+XR++b2NWYL/4sWyuvVBIs8oKnJaxkdi9whaL/sqN13afw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1486,9 +1534,9 @@ "license": "MIT" }, "node_modules/@types/react": { - "version": "18.3.28", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.28.tgz", - "integrity": "sha512-z9VXpC7MWrhfWipitjNdgCauoMLRdIILQsAEV+ZesIzBq/oUlxk0m3ApZuMFCXdnS4U7KrI+l3WRUEGQ8K1QKw==", + "version": "18.3.31", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.31.tgz", + "integrity": "sha512-vfEqpXTvwT91yhmwdfouStN2hSKwTvyRs8qpLfADyrq/kxDw0hZM7Wk9Ug1FELj8hIby+S/+kQCSRFF32nv2Qw==", "license": "MIT", "dependencies": { "@types/prop-types": "*", @@ -1558,9 +1606,9 @@ "license": "MIT" }, "node_modules/axios": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.16.1.tgz", - "integrity": "sha512-caYkukvroVPO8KrzuJEb50Hm07KwfBZPEC3VeFHTsqWHvKTsy54hjJz9BS/cdaypROE2rH6xvm9mHX4fgWkr3A==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.18.0.tgz", + "integrity": "sha512-E32NzpYKp++W7XRe52rHiXV2ehxmh3wbdgO7MHeFM+vqxLBYHzt0ElkiImtOBxtOmyp0yoC8C6uESVV84Y2/hw==", "license": "MIT", "dependencies": { "follow-redirects": "^1.16.0", @@ -1711,19 +1759,6 @@ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", "license": "MIT" }, - "node_modules/cookie": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", - "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, "node_modules/core-js": { "version": "3.47.0", "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.47.0.tgz", @@ -1809,9 +1844,9 @@ } }, "node_modules/date-fns": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz", - "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.4.0.tgz", + "integrity": "sha512-+1UMbeh68lH1SegH83CGWwpb6OHHbpSgr3+s5Eww5M4CAgswBpoWS0AjTOfEJ33HiYKz1hdj/KTFprzXHmq/6w==", "license": "MIT", "funding": { "type": "github", @@ -1918,9 +1953,9 @@ } }, "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0" @@ -2038,16 +2073,16 @@ } }, "node_modules/form-data": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", - "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.6.tgz", + "integrity": "sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==", "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.12" + "hasown": "^2.0.4", + "mime-types": "^2.1.35" }, "engines": { "node": ">= 6" @@ -2165,9 +2200,9 @@ } }, "node_modules/hasown": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.3.tgz", - "integrity": "sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", "license": "MIT", "dependencies": { "function-bind": "^1.1.2" @@ -2581,9 +2616,9 @@ } }, "node_modules/postcss": { - "version": "8.5.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.14.tgz", - "integrity": "sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg==", + "version": "8.5.15", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.15.tgz", + "integrity": "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==", "funding": [ { "type": "opencollective", @@ -2600,7 +2635,7 @@ ], "license": "MIT", "dependencies": { - "nanoid": "^3.3.11", + "nanoid": "^3.3.12", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, @@ -2676,9 +2711,9 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.4.tgz", + "integrity": "sha512-bIoJLOmjCO1S9XdY/DcnR5hJxvrDir1PbGChrzXG3vw0/FOliy/fA3dmdhQ441kah4gKv+TwckGzex6wNS5cnQ==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -2778,9 +2813,9 @@ } }, "node_modules/react-is": { - "version": "19.2.6", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.2.6.tgz", - "integrity": "sha512-XjBR15BhXuylgWGuslhDKqlSayuqvqBX91BP8pauG8kd1zY8kotkNWbXksTCNRarse4kuGbe2kIY05ARtwNIvw==", + "version": "19.2.7", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.2.7.tgz", + "integrity": "sha512-kZFnouyVv7eP/Phmrlo9FK+zcAdriZJvzxXHF1Sl1P377WSGe2G/JxVolhTrB/jeV47lKImhNUsijjHAAbcl/A==", "license": "MIT" }, "node_modules/react-refresh": { @@ -2794,41 +2829,35 @@ } }, "node_modules/react-router": { - "version": "7.15.1", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.15.1.tgz", - "integrity": "sha512-R8rl9HhgikFYoPJymnUtPXWbnDb3oget6lQnfIoupbt61aT9aOhRkDsY2XRhZRyX1Z/8a5sL74fXmFNm3NRK5A==", + "version": "6.30.4", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.30.4.tgz", + "integrity": "sha512-SVUsDe+DybHM/WmYKIVYhZh1o5Dcuf16yM6WjG02Q9XVFMZIJyHYhwrr6bFBXZkVP6z69kNkMyBCujt8FaFLJA==", "license": "MIT", "dependencies": { - "cookie": "^1.0.1", - "set-cookie-parser": "^2.6.0" + "@remix-run/router": "1.23.3" }, "engines": { - "node": ">=20.0.0" + "node": ">=14.0.0" }, "peerDependencies": { - "react": ">=18", - "react-dom": ">=18" - }, - "peerDependenciesMeta": { - "react-dom": { - "optional": true - } + "react": ">=16.8" } }, "node_modules/react-router-dom": { - "version": "7.15.1", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.15.1.tgz", - "integrity": "sha512-AzF62gjY6U9rkMq4RfP/r2EVtQ7DMfNMjyOp/flLTCrtRylLiK4wT4pSq6O8rOXZ2eXdZYJPEYe+ifomiv+Igg==", + "version": "6.30.4", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.30.4.tgz", + "integrity": "sha512-q4HvNl+mmDdkS0g+MqiBZNteQJCuimWoOyHMy4T/RQLAn9Z29+E91QXRaxOujeMl2HTzRSS0KFPd7lxX3PjV0Q==", "license": "MIT", "dependencies": { - "react-router": "7.15.1" + "@remix-run/router": "1.23.3", + "react-router": "6.30.4" }, "engines": { - "node": ">=20.0.0" + "node": ">=14.0.0" }, "peerDependencies": { - "react": ">=18", - "react-dom": ">=18" + "react": ">=16.8", + "react-dom": ">=16.8" } }, "node_modules/react-toastify": { @@ -2888,9 +2917,9 @@ "license": "MIT" }, "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==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-5.2.0.tgz", + "integrity": "sha512-AgZ3UOZm3YndfrJ4OYjgrT7bmCm/1iqkjvEfH/oYjzh6PD2qw4QuT3jjnXIrpdt4MTpMXclMT3lXbmRY+XRakw==", "license": "MIT" }, "node_modules/resolve": { @@ -2965,12 +2994,6 @@ "loose-envify": "^1.1.0" } }, - "node_modules/set-cookie-parser": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.2.tgz", - "integrity": "sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==", - "license": "MIT" - }, "node_modules/source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", @@ -3163,9 +3186,9 @@ } }, "node_modules/tinyglobby": { - "version": "0.2.16", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.16.tgz", - "integrity": "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==", + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", "license": "MIT", "dependencies": { "fdir": "^6.5.0", diff --git a/web/package.json b/web/package.json index 6aa7ee6..0bf2636 100644 --- a/web/package.json +++ b/web/package.json @@ -13,14 +13,15 @@ "@emotion/styled": "^11.14.1", "@mui/material": "^9.0.1", "@mui/x-tree-view": "^9.1.0", - "axios": "^1.16.1", + "axios": "^1.9.0", "date-fns": "^4.1.0", "material-react-table": "^3.2.1", "react": "^18.3.1", "react-daisyui": "^5.0.5", - "react-dom": "^18.3.1", - "react-router-dom": "^7.15.1", - "react-toastify": "^11.1.0" + "react-dom": "^18.2.0", + "react-router": "^6.30.0", + "react-router-dom": "^6.30.0", + "react-toastify": "^11.0.5" }, "devDependencies": { "@biomejs/biome": "1.9.4", diff --git a/web/src/api/stages.js b/web/src/api/stages.js index 6b9d669..8fb0ecd 100644 --- a/web/src/api/stages.js +++ b/web/src/api/stages.js @@ -1,8 +1,8 @@ -import api from './client'; +import api from "./client"; export const StagesApi = { createStage(formId, payload) { - return api.post(`/stages/form/${formId}`, [payload]).then((r) => r.data); + return api.post(`/stages/form/${formId}`, payload).then((r) => r.data); }, updateStage(payload) { const { budget_form_id, sheet, phase_code, opens_at, closes_at } = payload; diff --git a/web/src/components/RealtimeTable/SettingPanel/SettingPanel.jsx b/web/src/components/RealtimeTable/SettingPanel/SettingPanel.jsx index ecfa843..aeff806 100644 --- a/web/src/components/RealtimeTable/SettingPanel/SettingPanel.jsx +++ b/web/src/components/RealtimeTable/SettingPanel/SettingPanel.jsx @@ -14,7 +14,7 @@ import { RemoveLine, Search, } from '../../common/icons/icons'; -import CollapsibleTree from './CollapsibleTree'; +import CollapsibleTree from '../../common/CollapsibleTree'; import ZoomSlider from './ZoomSlider'; import SearchComponent from '../../common/SearchComponent'; import { ExportDefaultButton } from '../../common/Buttons/ButtonsActions'; diff --git a/web/src/components/RealtimeTable/constants/FORM_2/OTCH9F.js b/web/src/components/RealtimeTable/constants/FORM_2/OTCH9F.js index dc7fa60..1fad782 100644 --- a/web/src/components/RealtimeTable/constants/FORM_2/OTCH9F.js +++ b/web/src/components/RealtimeTable/constants/FORM_2/OTCH9F.js @@ -105,7 +105,7 @@ "accessorKey":"field", "columns":[ { - "header":"=ЕСЛИ(ЛЕВСИМВ(B17;1)="3";B17;ЕСЛИ(D17<>0;СЦЕПИТЬ(C17;"_";D17);C17))", + "header":" ", "accessorKey":"field_eslilevsimvb1713b17eslid170stsepitc17_d17c17", "columns":[ { diff --git a/web/src/components/RealtimeTable/utils/columnUtils.js b/web/src/components/RealtimeTable/utils/columnUtils.js index 2d1fd7f..91e61cb 100644 --- a/web/src/components/RealtimeTable/utils/columnUtils.js +++ b/web/src/components/RealtimeTable/utils/columnUtils.js @@ -12,8 +12,8 @@ export const getLeafColumns = (targetColumn) => { // Сбор всех листовых колонок из иерархии export const collectLeafColumns = (column) => { - if (column.columns?.length === 0) return [column]; - if (column.columns?.length > 0 && column.columns[0]?.columns?.length === 0) { + if (column.columns?.length === 0 || !column.columns) return [column]; + if (column.columns?.length > 0 && (column.columns[0]?.columns?.length === 0 || !column.columns)) { return column.columns; } return ( diff --git a/web/src/components/Stages/AddStagesModal.jsx b/web/src/components/Stages/AddStagesModal.jsx index 4b41b89..ea75b6d 100644 --- a/web/src/components/Stages/AddStagesModal.jsx +++ b/web/src/components/Stages/AddStagesModal.jsx @@ -8,6 +8,9 @@ import { IconButton, Stack, TextField, + Select, + MenuItem, + Autocomplete, } from '@mui/material'; import { ModalBackdrop, @@ -20,6 +23,9 @@ import { Cancel } from '../common/icons/icons'; import { getStageStatus, getStatusColors } from './StagesTable/utils'; import { StageStatusChip } from './StageStatusChip'; import { formatDateForApi } from './utils'; +import CollapsibleTree from '../common/CollapsibleTree'; +import { collectLeafColumns } from '../RealtimeTable/utils/columnUtils'; +import { STAGE_ROLE_RUSSIAN_NAME } from '../../constants'; export const AddStagesModal = ({ isOpen, @@ -29,34 +35,89 @@ export const AddStagesModal = ({ updateStage, isTaskMode = false, isSaving = false, + sheetOptions = [], // [{ value: 'sheet1', label: 'Лист 1' }] + formType = '', + defaultSheet = '', + defaultRole, }) => { const [startDate, setStartDate] = useState(null); const [endDate, setEndDate] = useState(null); + const [stageName, setStageName] = useState(''); + const [selectedSheet, setSelectedSheet] = useState(defaultSheet); + const [selectedRole, setSelectedRole] = useState(defaultRole); + const [columnsConfig, setColumnsConfig] = useState({ columns: [], colors: {} }); + const [selectedColumns, setSelectedColumns] = useState([]); + + useEffect(() => { + const loadColumnsConfig = async () => { + if (!selectedSheet) return; + const sheetObj = sheetOptions.find(s => s.value == selectedSheet); + + try { + const { config } = await import(`../RealtimeTable/constants/${formType}/${sheetObj.sheet}.js`); + setColumnsConfig(config.config); + + // Если есть сохраненные выбранные колонки для этого листа + if (stage?.column_keys) { + setSelectedColumns(stage.column_keys); + } else { + setSelectedColumns([]); + } + } catch (error) { + console.error(`Failed to load config for ${formType}/${selectedSheet}:`, error); + setColumnsConfig({ columns: [], colors: {} }); + setSelectedColumns([]); + } + }; + + loadColumnsConfig(); + }, [selectedSheet, formType, stage]); useEffect(() => { if (stage !== null) { setStartDate(stage.opens_at ?? null); setEndDate(stage.closes_at ?? null); + setStageName(stage.phase_code ?? ''); + setSelectedSheet(stage.sheet ?? null); + setSelectedRole(stage.role ?? null); + + if (stage.column_keys) { + setSelectedColumns(stage.column_keys.map(c => 'data.' + c)); + } } else { setStartDate(null); setEndDate(null); + setStageName(''); + setSelectedSheet(defaultSheet); + setSelectedRole(defaultRole); + setSelectedColumns([]); } - }, [stage, isOpen]); + }, [stage, isOpen, defaultSheet, defaultRole]); const handleSave = () => { const opensAt = formatDateForApi(startDate); const closesAt = formatDateForApi(endDate); + const sheetObj = sheetOptions.find(s => s.value == selectedSheet); + + const stageData = { + phase_code: stageName, + sheet: sheetObj.sheet, + direction: sheetObj.direction, + role: selectedRole, + opens_at: opensAt, + closes_at: closesAt, + column_keys: selectedColumns.map(c => c.slice(5)), + }; if (stage === null) { if (!createStage) return; - createStage(opensAt, closesAt)?.then(() => { + createStage(stageData)?.then(() => { handleCancel(); }); } else { updateStage({ ...stage, - opens_at: opensAt, - closes_at: closesAt, + ...stageData, })?.then(() => { handleCancel(); }); @@ -66,6 +127,10 @@ export const AddStagesModal = ({ const handleCancel = () => { setStartDate(null); setEndDate(null); + setStageName(''); + setSelectedSheet(defaultSheet); + setSelectedRole(defaultRole); + setSelectedColumns([]); onClose(); }; @@ -75,13 +140,33 @@ export const AddStagesModal = ({ } }; - const isFormValid = startDate && endDate; + const handleSheetChange = (event) => { + setSelectedSheet(event.target.value); + setSelectedColumns([]); + }; + + const handleColumnsSelect = (column, isSelect) => { + const leafCols = collectLeafColumns(column).reduce((acc, item) => { + acc.push(item.accessorKey) + return acc; + }, []); + if (!isSelect) { + setSelectedColumns(prev => ([...prev, ...leafCols])); + } + else { + setSelectedColumns(prev => (prev.filter(c => !leafCols.includes(c)))); + } + }; + + const isFormValid = startDate && endDate && stageName.trim() && selectedSheet; if (!isOpen) return null; const stageStatus = stage ? getStageStatus(stage) : null; const statusColors = stageStatus ? getStatusColors(stageStatus) : null; + const columnTree = columnsConfig.columns || []; + return ( @@ -107,6 +192,78 @@ export const AddStagesModal = ({ + {/* Название этапа */} + + + Название этапа + setStageName(e.target.value)} + placeholder="Введите название этапа" + fullWidth + size="small" + /> + + + + {/* Выбор листа */} + + + Выбор листа + + + + {selectedSheet && columnTree.length > 0 && ( + + + Выбор колонок + + + + + )} + + + + Роль + + + + + + + {/* Даты */} setStartDate(newValue)} - isTaskMode={isTaskMode} /> @@ -128,7 +284,6 @@ export const AddStagesModal = ({ setEndDate(newValue)} - isTaskMode={isTaskMode} /> @@ -166,4 +321,4 @@ export const AddStagesModal = ({ ); -}; +}; \ No newline at end of file diff --git a/web/src/components/Stages/SettingModal.jsx b/web/src/components/Stages/SettingModal.jsx index 7ec0ee8..d8df2bd 100644 --- a/web/src/components/Stages/SettingModal.jsx +++ b/web/src/components/Stages/SettingModal.jsx @@ -20,6 +20,7 @@ import { } from '@mui/material'; import CloseIcon from '@mui/icons-material/Close'; import { StagesTable } from './StagesTable/StagesTable'; +import { PrimaryButton } from '../common/Buttons/Buttons'; export const SettingModal = ({ isOpen = true, @@ -27,9 +28,10 @@ export const SettingModal = ({ formId, taskId, mode = 'form', // 'form' | 'task' + formTypeCode = '', + sheets, }) => { - const formStages = useStages(mode === 'form' ? formId : null); - const taskStages = useTaskStages(mode === 'task' ? taskId : null); + const taskStages = useTaskStages(taskId); const { deleteStage, @@ -38,10 +40,10 @@ export const SettingModal = ({ createStage, updateStage, isSaving, - } = mode === 'task' ? taskStages : formStages; + } = taskStages; const isTaskMode = mode === 'task'; - const entityId = mode === 'task' ? taskId : formId; + const entityId = taskId; useEffect(() => { if (isOpen && entityId) { @@ -53,6 +55,7 @@ export const SettingModal = ({ const [stageForEdit, setStageForEdit] = useState(null); const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false); const [stageToDelete, setStageToDelete] = useState(null); + const [sheetOptions, setSheetOptions] = useState([]); const handleAddStage = () => { setStageForEdit(null); @@ -72,6 +75,50 @@ export const SettingModal = ({ setStageForEdit(stage); setIsAddEditModalOpen(true); }; + const transformToSheetOptions = (data) => { + const sheetMap = new Map(); + + data.forEach(item => { + const key = item.direction ? `${item.sheet}_${item.direction}` : item.sheet; + + if (!sheetMap.has(key)) { + sheetMap.set(key, { + sheet: item.sheet, + direction: item.direction, + names: [] + }); + } + + const entry = sheetMap.get(key); + if (!entry.names.includes(item.name)) { + entry.names.push(item.name); + } + }); + + const sheetOptions = []; + + sheetMap.forEach((value) => { + let label = value.names.join(' / '); + + if (value.direction) { + label += ` (${value.direction})`; + } + + sheetOptions.push({ + value: value.direction ? `${value.sheet}_${value.direction}` : value.sheet, + label: label, + sheet: value.sheet, + direction: value.direction + }); + }); + + return sheetOptions; + }; + + useEffect(() => { + if (!sheets || sheets.length === 0) return; + setSheetOptions(transformToSheetOptions(sheets)) + }, [sheets]) if (!isOpen) { return null; @@ -100,15 +147,14 @@ export const SettingModal = ({ sx={{ width: '100%', justifyContent: 'space-between' }} > Этапы - {!isTaskMode && ( - - )} + + } + > + Добавить этап + + {stagesInfo.isLoading ? ( @@ -138,6 +184,8 @@ export const SettingModal = ({ updateStage={updateStage} isTaskMode={isTaskMode} isSaving={isSaving} + sheetOptions={sheetOptions} + formType={formTypeCode} /> {!isTaskMode && ( { @@ -85,7 +85,7 @@ export const StagesTable = ({ stages, onEdit, onDelete }) => { return ( - {stage.sheet} + {SHEET_NAME[stage.sheet]} - {stage.phase_code} { const [expandedItems, setExpandedItems] = useState([]); const [anchorEl, setAnchorEl] = useState(null); @@ -35,25 +36,39 @@ const CollapsibleTree = ({ const handleSelectAll = (isSelected) => { for (const col of columnTree) { - onHideColumns?.(col, !isSelected); + onSelectNode?.(col, !isSelected); } }; const getChildrenIds = (node) => { const getLeafColumn = (col) => { - if (col.columns.length == 0) return [col]; - if (col.columns.length > 0 && col.columns[0].columns.length == 0) { + const hasColumns = col.columns && Array.isArray(col.columns); + + if (!hasColumns || col.columns.length === 0) { + return [col]; + } + + const allChildrenAreLeaves = col.columns.every( + child => !child.columns || !Array.isArray(child.columns) || child.columns.length === 0 + ); + + if (allChildrenAreLeaves) { return col.columns; } + return col.columns.flatMap((childCol) => getLeafColumn(childCol)); }; - return getLeafColumn(node).map((c) => c.id); + + const leafColumns = getLeafColumn(node); + return leafColumns.map((c) => c.id || c.accessorKey); }; const isNodeChecked = (node) => { const childrenIds = getChildrenIds(node); const selectedChildren = childrenIds.filter((id) => - selectedNodes.includes(id), + selectedNodes.includes(id) + + , ); if (selectedChildren.length === 0) return false; @@ -62,7 +77,7 @@ const CollapsibleTree = ({ }; const handleNodeCheck = (node, isSelected) => { - onHideColumns?.(node, !isSelected); + onSelectNode?.(node, !isSelected); }; const getId = (column) => { @@ -71,7 +86,7 @@ const CollapsibleTree = ({ let current = column; while (current) { - ancestors.unshift(current.id); + ancestors.unshift(current.id || current.accessorKey); current = current.parent; } @@ -85,10 +100,9 @@ const CollapsibleTree = ({ return nodes.map((node) => { const checkStatus = isNodeChecked(node); - return ( @@ -107,7 +121,7 @@ const CollapsibleTree = ({ indeterminateIcon={} /> - {node.columnDef?.header || node.name || 'Без названия'} + {node.columnDef?.header || node.name || node.header || 'Без названия'} } @@ -149,7 +163,7 @@ const CollapsibleTree = ({ if (selectedCount === 0) { return ''; } - return `Скрыто столбцов: ${selectedCount}`; + return `${placeholderSelect} ${selectedCount}`; }; return ( @@ -157,7 +171,7 @@ const CollapsibleTree = ({ { [taskId], ); + const createStage = useCallback( + (payload) => { + if (!taskId) return Promise.reject('Нет taskId'); + + setIsSaving(true); + + return StagesApi.createStage(taskId, payload) + .then((data) => { + setStagesInfo((prev) => ({ + ...prev, + stages: [...prev.stages, data.result], + })); + toast.success('Этап добавлен'); + return data; + }) + .catch((error) => { + toast.error( + error?.response?.data?.detail || 'Ошибка добавления этапа ', + ); + throw error; + }) + .finally(() => { + setIsSaving(false); + }); + }, + [taskId], + ); + + const deleteStage = useCallback( + (stage) => { + const { sheet, phase_code, budget_form_id } = stage; + if (!budget_form_id || !sheet || !phase_code) return; + + StagesApi.deleteStage(budget_form_id, sheet, phase_code) + .then(() => { + setStagesInfo((prev) => ({ + ...prev, + stages: prev.stages.filter( + (curStage) => + !( + curStage.sheet === sheet && + curStage.phase_code === phase_code + ), + ), + })); + toast.success('Этап успешно удален'); + }) + .catch((error) => { + toast.error( + error?.response?.data?.detail || 'Ошибка при удалении этапа', + ); + }); + }, + [taskId], + ); + return { stagesInfo, getStages, updateStage, isSaving, + createStage, + deleteStage, }; }; diff --git a/web/src/pages/AdminPanel/AuditLogsPage/constants/configEvent.jsx b/web/src/pages/AdminPanel/AuditLogsPage/constants/configEvent.jsx index 3d934d3..8948f2b 100644 --- a/web/src/pages/AdminPanel/AuditLogsPage/constants/configEvent.jsx +++ b/web/src/pages/AdminPanel/AuditLogsPage/constants/configEvent.jsx @@ -15,7 +15,7 @@ export const EVENT_CONFIGS = { notes: 'Примечания', location_form: 'Форма расположения ВСП', numbers: 'Штатная численность ВСП', - area: 'Площадь помещений ВСП', + total_area: 'Площадь помещений ВСП', rent_contract_num: 'Номер договора аренды', rent_end_date: 'Срок окончания договора аренды', system_code: 'Код РФ', @@ -33,7 +33,7 @@ export const EVENT_CONFIGS = { notes: 'Примечания', location_form: 'Форма расположения ВСП', numbers: 'Штатная численность ВСП', - area: 'Площадь помещений ВСП', + total_area: 'Площадь помещений ВСП', rent_contract_num: 'Номер договора аренды', rent_end_date: 'Срок окончания договора аренды', system_code: 'Код РФ', diff --git a/web/src/pages/TaskPage/TaskPage.jsx b/web/src/pages/TaskPage/TaskPage.jsx index cac3519..70c11db 100644 --- a/web/src/pages/TaskPage/TaskPage.jsx +++ b/web/src/pages/TaskPage/TaskPage.jsx @@ -151,14 +151,16 @@ export default function TaskPage() { > Этапы - {modalStageOpen && ( - setModalStageOpen(false)} - taskId={taskId} - mode="task" - /> - )} + + setModalStageOpen(false)} + taskId={taskId} + mode="task" + formTypeCode={task?.form_type_code || ''} + sheets={tables} + /> +