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}
+ />
+