From e56a563e9878c5f94b0beb574aa92a40db1fb9d6 Mon Sep 17 00:00:00 2001 From: Tom Butcher Date: Mon, 19 May 2025 00:28:00 +0100 Subject: [PATCH] Added filament stock functionality and improves some performance --- package-lock.json | 440 ++++++++------- package.json | 5 +- src/App.css | 5 + src/App.jsx | 112 ++-- src/assets/icons/filamentstockicon.afdesign | Bin 0 -> 80347 bytes src/assets/icons/filamentstockicon.svg | 14 + src/assets/icons/gcodefileicon.afdesign | Bin 42807 -> 47424 bytes src/assets/icons/gcodefileicon.svg | 26 +- src/assets/icons/materialicon.afdesign | Bin 0 -> 57060 bytes src/assets/icons/materialicon.svg | 12 + src/assets/icons/partstockicon.afdesign | Bin 0 -> 61931 bytes src/assets/icons/partstockicon.svg | 11 + src/assets/icons/printedparticon.afdesign | Bin 0 -> 48852 bytes src/assets/icons/printedparticon.svg | 7 + src/assets/icons/producticon.afdesign | Bin 49692 -> 53810 bytes src/assets/icons/producticon.svg | 6 +- src/assets/icons/productstockicon.afdesign | Bin 0 -> 64947 bytes src/assets/icons/productstockicon.svg | 11 + src/assets/icons/spoolicon.afdesign | Bin 0 -> 47233 bytes src/assets/icons/spoolicon.svg | 11 + src/assets/icons/vendoricon.afdesign | Bin 0 -> 39176 bytes src/assets/icons/vendoricon.svg | 5 + src/assets/logos/farmcontrollogo.svg | 33 ++ src/components/Auth/LoginUser.jsx | 2 +- .../Dashboard/Inventory/FilamentStocks.jsx | 296 ++++++++++ .../FilamentStocks/FilamentStockInfo.jsx | 232 ++++++++ .../FilamentStocks/LoadFilamentStock.jsx | 338 ++++++++++++ .../FilamentStocks/NewFilamentStock.jsx | 236 ++++++++ .../FilamentStocks/UnloadFilamentStock.jsx | 265 +++++++++ src/components/Dashboard/Inventory/Spools.jsx | 204 ------- .../Dashboard/Inventory/Spools/EditSpool.jsx | 450 --------------- .../Dashboard/Inventory/Spools/NewSpool.jsx | 443 --------------- .../Dashboard/Management/Filaments.jsx | 46 +- .../Management/Filaments/FilamentInfo.jsx | 121 +++-- .../Management/Filaments/NewFilament.jsx | 157 +++--- .../Dashboard/Management/Materials.jsx | 288 ++++++++++ .../Management/Materials/NewMaterial.jsx | 277 ++++++++++ src/components/Dashboard/Management/Parts.jsx | 458 ++++++++++++---- .../Dashboard/Management/Parts/NewPart.jsx | 471 ---------------- .../Dashboard/Management/Parts/PartInfo.jsx | 289 ++++++++-- .../Dashboard/Management/Products.jsx | 168 ++++-- .../Management/Products/NewProduct.jsx | 512 ++++++++++++++---- .../Management/Products/ProductInfo.jsx | 307 ++++++++--- .../Dashboard/Management/Vendors.jsx | 61 ++- .../Management/Vendors/NewVendor.jsx | 141 +++-- .../Management/Vendors/VendorInfo.jsx | 112 +++- .../Dashboard/Production/GCodeFiles.jsx | 462 +++++++++++----- .../Production/GCodeFiles/EditGCodeFile.jsx | 228 -------- .../Production/GCodeFiles/GCodeFileInfo.jsx | 418 +++++++++----- .../Production/GCodeFiles/NewGCodeFile.jsx | 94 +++- .../Dashboard/Production/Overview.jsx | 273 ---------- .../Dashboard/Production/PrintJobs.jsx | 409 ++++++++++---- .../Production/PrintJobs/NewPrintJob.jsx | 159 +++--- .../Dashboard/Production/Printers.jsx | 484 +++++++++++------ .../Production/Printers/ChangeFillament.jsx | 333 ------------ .../Production/Printers/ControlPrinter.jsx | 288 ++++++++-- .../Production/Printers/NewPrinter.jsx | 10 +- .../Production/Printers/PrinterInfo.jsx | 102 +++- .../Production/ProductionOverview.jsx | 367 +++++++++++++ .../Dashboard/common/CountryDisplay.jsx | 82 +++ .../Dashboard/common/CountrySelect.jsx | 100 ++++ .../Dashboard/common/DashboardBreadcrumb.jsx | 69 ++- .../Dashboard/common/DashboardLayout.jsx | 6 +- .../Dashboard/common/DashboardNavigation.jsx | 32 +- .../Dashboard/common/FilamentSelect.jsx | 261 +++++---- .../Dashboard/common/FilamentStockDisplay.jsx | 51 ++ .../Dashboard/common/FilamentStockSelect.jsx | 139 +++++ .../Dashboard/common/FilamentStockState.jsx | 118 ++++ .../Dashboard/common/GCodeFileSelect.jsx | 30 +- src/components/Dashboard/common/IdText.jsx | 28 +- .../Dashboard/common/InventorySidebar.jsx | 74 ++- .../Dashboard/common/ManagementSidebar.jsx | 43 +- .../Dashboard/common/PartTransfer.jsx | 207 +++++++ .../Dashboard/common/PartsTable.jsx | 52 ++ .../Dashboard/common/PrinterSelect.jsx | 88 ++- .../Dashboard/common/PrinterState.jsx | 4 +- .../common/PrinterTemperaturePanel.jsx | 30 +- .../Dashboard/common/ProductionSidebar.jsx | 30 +- .../Dashboard/common/StockEventTable.jsx | 89 +++ .../Dashboard/common/SubJobsTree.jsx | 3 +- .../Dashboard/common/VendorSelect.jsx | 186 +++++++ .../Dashboard/context/HistoryContext.js | 203 +++++++ src/components/Icons/FilamentStockIcon.jsx | 9 + src/components/Icons/MaterialIcon.jsx | 7 + src/components/Icons/PartStockIcon.jsx | 7 + src/components/Icons/ProductStockIcon.jsx | 9 + src/components/Icons/VendorIcon.jsx | 7 + src/components/Logos/FarmControlLogo.jsx | 7 + src/components/PublicRoute.jsx | 6 +- 89 files changed, 7937 insertions(+), 4239 deletions(-) create mode 100644 src/assets/icons/filamentstockicon.afdesign create mode 100644 src/assets/icons/filamentstockicon.svg create mode 100644 src/assets/icons/materialicon.afdesign create mode 100644 src/assets/icons/materialicon.svg create mode 100644 src/assets/icons/partstockicon.afdesign create mode 100644 src/assets/icons/partstockicon.svg create mode 100644 src/assets/icons/printedparticon.afdesign create mode 100644 src/assets/icons/printedparticon.svg create mode 100644 src/assets/icons/productstockicon.afdesign create mode 100644 src/assets/icons/productstockicon.svg create mode 100644 src/assets/icons/spoolicon.afdesign create mode 100644 src/assets/icons/spoolicon.svg create mode 100644 src/assets/icons/vendoricon.afdesign create mode 100644 src/assets/icons/vendoricon.svg create mode 100644 src/assets/logos/farmcontrollogo.svg create mode 100644 src/components/Dashboard/Inventory/FilamentStocks.jsx create mode 100644 src/components/Dashboard/Inventory/FilamentStocks/FilamentStockInfo.jsx create mode 100644 src/components/Dashboard/Inventory/FilamentStocks/LoadFilamentStock.jsx create mode 100644 src/components/Dashboard/Inventory/FilamentStocks/NewFilamentStock.jsx create mode 100644 src/components/Dashboard/Inventory/FilamentStocks/UnloadFilamentStock.jsx delete mode 100644 src/components/Dashboard/Inventory/Spools.jsx delete mode 100644 src/components/Dashboard/Inventory/Spools/EditSpool.jsx delete mode 100644 src/components/Dashboard/Inventory/Spools/NewSpool.jsx create mode 100644 src/components/Dashboard/Management/Materials.jsx create mode 100644 src/components/Dashboard/Management/Materials/NewMaterial.jsx delete mode 100644 src/components/Dashboard/Management/Parts/NewPart.jsx delete mode 100644 src/components/Dashboard/Production/GCodeFiles/EditGCodeFile.jsx delete mode 100644 src/components/Dashboard/Production/Overview.jsx delete mode 100644 src/components/Dashboard/Production/Printers/ChangeFillament.jsx create mode 100644 src/components/Dashboard/Production/ProductionOverview.jsx create mode 100644 src/components/Dashboard/common/CountryDisplay.jsx create mode 100644 src/components/Dashboard/common/CountrySelect.jsx create mode 100644 src/components/Dashboard/common/FilamentStockDisplay.jsx create mode 100644 src/components/Dashboard/common/FilamentStockSelect.jsx create mode 100644 src/components/Dashboard/common/FilamentStockState.jsx create mode 100644 src/components/Dashboard/common/PartTransfer.jsx create mode 100644 src/components/Dashboard/common/PartsTable.jsx create mode 100644 src/components/Dashboard/common/StockEventTable.jsx create mode 100644 src/components/Dashboard/common/VendorSelect.jsx create mode 100644 src/components/Dashboard/context/HistoryContext.js create mode 100644 src/components/Icons/FilamentStockIcon.jsx create mode 100644 src/components/Icons/MaterialIcon.jsx create mode 100644 src/components/Icons/PartStockIcon.jsx create mode 100644 src/components/Icons/ProductStockIcon.jsx create mode 100644 src/components/Icons/VendorIcon.jsx create mode 100644 src/components/Logos/FarmControlLogo.jsx diff --git a/package-lock.json b/package-lock.json index 4ff677d..b388afa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,15 +11,17 @@ "@simplewebauthn/browser": "^10.0.0", "@tsparticles/react": "^3.0.0", "@tsparticles/slim": "^3.5.0", - "antd": "^5.19.2", + "antd": "^5.25.1", "antd-style": "^3.7.1", "axios": "*", + "country-list": "^2.3.0", "dotenv": "^16.5.0", "gcode-preview": "^2.17.0", "keycloak-js": "^26.1.5", "moment": "*", "prop-types": "^15.8.1", "react": "*", + "react-country-flag": "^3.1.0", "react-dom": "*", "react-router-dom": "*", "react-scripts": "*", @@ -28,6 +30,7 @@ "styled-components": "*", "three": "^0.166.1", "tsparticles": "^3.5.0", + "virtualizedtableforantd4": "^1.3.1", "web-vitals": "*" }, "devDependencies": { @@ -67,12 +70,12 @@ } }, "node_modules/@ant-design/colors": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@ant-design/colors/-/colors-7.1.0.tgz", - "integrity": "sha512-MMoDGWn1y9LdQJQSHiCC20x3uZ3CwQnv9QMz6pCmJOrqdgM9YxsoVVY0wtrdXbmfSgnV0KNk6zi09NAhMR2jvg==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@ant-design/colors/-/colors-7.2.0.tgz", + "integrity": "sha512-bjTObSnZ9C/O8MB/B4OUtd/q9COomuJAR2SYfhxLyHvCKn4EKwCN3e+fWGMo7H5InAyV0wL17jdE9ALrdOW/6A==", "license": "MIT", "dependencies": { - "@ctrl/tinycolor": "^3.6.1" + "@ant-design/fast-color": "^2.0.6" } }, "node_modules/@ant-design/cssinjs": { @@ -94,16 +97,43 @@ "react-dom": ">=16.0.0" } }, + "node_modules/@ant-design/cssinjs-utils": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@ant-design/cssinjs-utils/-/cssinjs-utils-1.1.3.tgz", + "integrity": "sha512-nOoQMLW1l+xR1Co8NFVYiP8pZp3VjIIzqV6D6ShYF2ljtdwWJn5WSsH+7kvCktXL/yhEtWURKOfH5Xz/gzlwsg==", + "license": "MIT", + "dependencies": { + "@ant-design/cssinjs": "^1.21.0", + "@babel/runtime": "^7.23.2", + "rc-util": "^5.38.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, "node_modules/@ant-design/cssinjs/node_modules/stylis": { "version": "4.3.6", "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.6.tgz", "integrity": "sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==", "license": "MIT" }, + "node_modules/@ant-design/fast-color": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@ant-design/fast-color/-/fast-color-2.0.6.tgz", + "integrity": "sha512-y2217gk4NqL35giHl72o6Zzqji9O7vHh9YmhUVkPtAOpoTCH4uWxo/pr4VE8t0+ChEPs0qo4eJRC5Q1eXWo3vA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.24.7" + }, + "engines": { + "node": ">=8.x" + } + }, "node_modules/@ant-design/icons": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@ant-design/icons/-/icons-5.4.0.tgz", - "integrity": "sha512-QZbWC5xQYexCI5q4/fehSEkchJr5UGtvAJweT743qKUQQGs9IH2DehNLP49DJ3Ii9m9CijD2HN6fNy3WKhIFdA==", + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ant-design/icons/-/icons-5.6.1.tgz", + "integrity": "sha512-0/xS39c91WjPAZOWsvi1//zjx6kAp4kxWwctR6kuU6p133w8RU0D2dSCvZC19uQyharg/sAvYxGYWl01BbZZfg==", "license": "MIT", "dependencies": { "@ant-design/colors": "^7.0.0", @@ -2199,13 +2229,10 @@ "license": "MIT" }, "node_modules/@babel/runtime": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.8.tgz", - "integrity": "sha512-5F7SDGs1T72ZczbRwbGO9lQi0NLjQxzl6i4lJxLxfW9U5UluCSyEJeniWvnhl3/euNiqQVbo8zruhsDfid0esA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.1.tgz", + "integrity": "sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog==", "license": "MIT", - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, "engines": { "node": ">=6.9.0" } @@ -2584,15 +2611,6 @@ "postcss-selector-parser": "^6.0.10" } }, - "node_modules/@ctrl/tinycolor": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz", - "integrity": "sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, "node_modules/@emotion/babel-plugin": { "version": "11.13.5", "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.13.5.tgz", @@ -3913,13 +3931,13 @@ } }, "node_modules/@rc-component/color-picker": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@rc-component/color-picker/-/color-picker-1.5.3.tgz", - "integrity": "sha512-+tGGH3nLmYXTalVe0L8hSZNs73VTP5ueSHwUlDC77KKRaN7G4DS4wcpG5DTDzdcV/Yas+rzA6UGgIyzd8fS4cw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@rc-component/color-picker/-/color-picker-2.0.1.tgz", + "integrity": "sha512-WcZYwAThV/b2GISQ8F+7650r5ZZJ043E57aVBFkQ+kSY4C6wdofXgB0hBx+GPGpIU0Z81eETNoDUJMr7oy/P8Q==", "license": "MIT", "dependencies": { + "@ant-design/fast-color": "^2.0.6", "@babel/runtime": "^7.23.6", - "@ctrl/tinycolor": "^3.6.1", "classnames": "^2.2.6", "rc-util": "^5.38.1" }, @@ -4009,9 +4027,9 @@ } }, "node_modules/@rc-component/tour": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@rc-component/tour/-/tour-1.15.0.tgz", - "integrity": "sha512-h6hyILDwL+In9GAgRobwRWihLqqsD7Uft3fZGrJ7L4EiyCoxbnNYwzPXDfz7vNDhWeVyvAWQJj9fJCzpI4+b4g==", + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/@rc-component/tour/-/tour-1.15.1.tgz", + "integrity": "sha512-Tr2t7J1DKZUpfJuDZWHxyxWpfmj8EZrqSgyMZ+BCdvKZ6r1UDsfU46M/iWAAFBy961Ssfom2kv5f3UcjIL2CmQ==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.18.0", @@ -4029,9 +4047,9 @@ } }, "node_modules/@rc-component/trigger": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@rc-component/trigger/-/trigger-2.2.0.tgz", - "integrity": "sha512-QarBCji02YE9aRFhZgRZmOpXBj0IZutRippsVBv85sxvG4FGk/vRxwAlkn3MS9zK5mwbETd86mAVg2tKqTkdJA==", + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/@rc-component/trigger/-/trigger-2.2.6.tgz", + "integrity": "sha512-/9zuTnWwhQ3S3WT1T8BubuFTT46kvnXgaERR9f4BTKyn61/wpf/BvbImzYBubzJibU707FxwbKszLlHjcLiv1Q==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.23.2", @@ -4039,7 +4057,7 @@ "classnames": "^2.3.2", "rc-motion": "^2.0.0", "rc-resize-observer": "^1.3.1", - "rc-util": "^5.38.0" + "rc-util": "^5.44.0" }, "engines": { "node": ">=8.x" @@ -6038,57 +6056,58 @@ } }, "node_modules/antd": { - "version": "5.19.3", - "resolved": "https://registry.npmjs.org/antd/-/antd-5.19.3.tgz", - "integrity": "sha512-rhGI6yyZ4dA2MWl9bfO0MZjtNwWdzITpp3u7pKLiQpTjJYFlpF5wDFgGaG1or3sqyBihvqcO/OF1hSggmWczbQ==", + "version": "5.25.1", + "resolved": "https://registry.npmjs.org/antd/-/antd-5.25.1.tgz", + "integrity": "sha512-4KC7KuPCjr0z3Vuw9DsF+ceqJaPLbuUI3lOX1sY8ix25ceamp+P8yxOmk3Y2JHCD2ZAhq+5IQ/DTJRN2adWYKQ==", "license": "MIT", "dependencies": { - "@ant-design/colors": "^7.1.0", - "@ant-design/cssinjs": "^1.21.0", - "@ant-design/icons": "^5.3.7", + "@ant-design/colors": "^7.2.0", + "@ant-design/cssinjs": "^1.23.0", + "@ant-design/cssinjs-utils": "^1.1.3", + "@ant-design/fast-color": "^2.0.6", + "@ant-design/icons": "^5.6.1", "@ant-design/react-slick": "~1.1.2", - "@babel/runtime": "^7.24.8", - "@ctrl/tinycolor": "^3.6.1", - "@rc-component/color-picker": "~1.5.3", + "@babel/runtime": "^7.26.0", + "@rc-component/color-picker": "~2.0.1", "@rc-component/mutate-observer": "^1.1.0", "@rc-component/qrcode": "~1.0.0", - "@rc-component/tour": "~1.15.0", - "@rc-component/trigger": "^2.2.0", + "@rc-component/tour": "~1.15.1", + "@rc-component/trigger": "^2.2.6", "classnames": "^2.5.1", "copy-to-clipboard": "^3.3.3", "dayjs": "^1.11.11", - "rc-cascader": "~3.27.0", - "rc-checkbox": "~3.3.0", - "rc-collapse": "~3.7.3", - "rc-dialog": "~9.5.2", + "rc-cascader": "~3.34.0", + "rc-checkbox": "~3.5.0", + "rc-collapse": "~3.9.0", + "rc-dialog": "~9.6.0", "rc-drawer": "~7.2.0", - "rc-dropdown": "~4.2.0", - "rc-field-form": "~2.2.1", - "rc-image": "~7.9.0", - "rc-input": "~1.5.1", - "rc-input-number": "~9.1.0", - "rc-mentions": "~2.14.0", - "rc-menu": "~9.14.1", - "rc-motion": "^2.9.2", - "rc-notification": "~5.6.0", - "rc-pagination": "~4.2.0", - "rc-picker": "~4.6.9", + "rc-dropdown": "~4.2.1", + "rc-field-form": "~2.7.0", + "rc-image": "~7.12.0", + "rc-input": "~1.8.0", + "rc-input-number": "~9.5.0", + "rc-mentions": "~2.20.0", + "rc-menu": "~9.16.1", + "rc-motion": "^2.9.5", + "rc-notification": "~5.6.4", + "rc-pagination": "~5.1.0", + "rc-picker": "~4.11.3", "rc-progress": "~4.0.0", - "rc-rate": "~2.13.0", - "rc-resize-observer": "^1.4.0", - "rc-segmented": "~2.3.0", - "rc-select": "~14.15.1", - "rc-slider": "~10.6.2", + "rc-rate": "~2.13.1", + "rc-resize-observer": "^1.4.3", + "rc-segmented": "~2.7.0", + "rc-select": "~14.16.7", + "rc-slider": "~11.1.8", "rc-steps": "~6.0.1", "rc-switch": "~4.1.0", - "rc-table": "~7.45.7", - "rc-tabs": "~15.1.1", - "rc-textarea": "~1.7.0", - "rc-tooltip": "~6.2.0", - "rc-tree": "~5.8.8", - "rc-tree-select": "~5.22.1", - "rc-upload": "~4.6.0", - "rc-util": "^5.43.0", + "rc-table": "~7.50.4", + "rc-tabs": "~15.6.1", + "rc-textarea": "~1.10.0", + "rc-tooltip": "~6.4.0", + "rc-tree": "~5.13.1", + "rc-tree-select": "~5.27.0", + "rc-upload": "~4.9.0", + "rc-util": "^5.44.4", "scroll-into-view-if-needed": "^3.1.0", "throttle-debounce": "^5.0.2" }, @@ -6206,12 +6225,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array-tree-filter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-tree-filter/-/array-tree-filter-2.1.0.tgz", - "integrity": "sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw==", - "license": "MIT" - }, "node_modules/array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", @@ -7587,6 +7600,12 @@ "node": ">=10" } }, + "node_modules/country-list": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/country-list/-/country-list-2.3.0.tgz", + "integrity": "sha512-qZk66RlmQm7fQjMYWku1AyjlKPogjPEorAZJG88owPExoPV8EsyCcuFLvO2afTXHEhi9liVOoyd+5A6ZS5QwaA==", + "license": "MIT" + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -8077,9 +8096,9 @@ } }, "node_modules/dayjs": { - "version": "1.11.12", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.12.tgz", - "integrity": "sha512-Rt2g+nTbLlDWZTwwrIXjy9MeiZmSDI375FvZs72ngxx8PDC6YXOeR3q5LAuPzjZQxhiWdRKac7RKV+YyQYfYIg==", + "version": "1.11.13", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", + "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==", "license": "MIT" }, "node_modules/debug": { @@ -17345,9 +17364,9 @@ } }, "node_modules/prettier-eslint/node_modules/typescript": { - "version": "5.5.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", - "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", "dev": true, "license": "Apache-2.0", "bin": { @@ -17629,17 +17648,16 @@ } }, "node_modules/rc-cascader": { - "version": "3.27.0", - "resolved": "https://registry.npmjs.org/rc-cascader/-/rc-cascader-3.27.0.tgz", - "integrity": "sha512-z5uq8VvQadFUBiuZJ7YF5UAUGNkZtdEtcEYiIA94N/Kc2MIKr6lEbN5HyVddvYSgwWlKqnL6pH5bFXFuIK3MNg==", + "version": "3.34.0", + "resolved": "https://registry.npmjs.org/rc-cascader/-/rc-cascader-3.34.0.tgz", + "integrity": "sha512-KpXypcvju9ptjW9FaN2NFcA2QH9E9LHKq169Y0eWtH4e/wHQ5Wh5qZakAgvb8EKZ736WZ3B0zLLOBsrsja5Dag==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.12.5", - "array-tree-filter": "^2.1.0", + "@babel/runtime": "^7.25.7", "classnames": "^2.3.1", - "rc-select": "~14.15.0", - "rc-tree": "~5.8.1", - "rc-util": "^5.37.0" + "rc-select": "~14.16.2", + "rc-tree": "~5.13.0", + "rc-util": "^5.43.0" }, "peerDependencies": { "react": ">=16.9.0", @@ -17647,9 +17665,9 @@ } }, "node_modules/rc-checkbox": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/rc-checkbox/-/rc-checkbox-3.3.0.tgz", - "integrity": "sha512-Ih3ZaAcoAiFKJjifzwsGiT/f/quIkxJoklW4yKGho14Olulwn8gN7hOBve0/WGDg5o/l/5mL0w7ff7/YGvefVw==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/rc-checkbox/-/rc-checkbox-3.5.0.tgz", + "integrity": "sha512-aOAQc3E98HteIIsSqm6Xk2FPKIER6+5vyEFMZfo73TqM+VVAIqOkHoPjgKLqSNtVLWScoaM7vY2ZrGEheI79yg==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.10.1", @@ -17662,9 +17680,9 @@ } }, "node_modules/rc-collapse": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/rc-collapse/-/rc-collapse-3.7.3.tgz", - "integrity": "sha512-60FJcdTRn0X5sELF18TANwtVi7FtModq649H11mYF1jh83DniMoM4MqY627sEKRCTm4+WXfGDcB7hY5oW6xhyw==", + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/rc-collapse/-/rc-collapse-3.9.0.tgz", + "integrity": "sha512-swDdz4QZ4dFTo4RAUMLL50qP0EY62N2kvmk2We5xYdRwcRn8WcYtuetCJpwpaCbUfUt5+huLpVxhvmnK+PHrkA==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.10.1", @@ -17678,9 +17696,9 @@ } }, "node_modules/rc-dialog": { - "version": "9.5.2", - "resolved": "https://registry.npmjs.org/rc-dialog/-/rc-dialog-9.5.2.tgz", - "integrity": "sha512-qVUjc8JukG+j/pNaHVSRa2GO2/KbV2thm7yO4hepQ902eGdYK913sGkwg/fh9yhKYV1ql3BKIN2xnud3rEXAPw==", + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/rc-dialog/-/rc-dialog-9.6.0.tgz", + "integrity": "sha512-ApoVi9Z8PaCQg6FsUzS8yvBEQy0ZL2PkuvAgrmohPkN3okps5WZ5WQWPc1RNuiOKaAYv8B97ACdsFU5LizzCqg==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.10.1", @@ -17712,15 +17730,15 @@ } }, "node_modules/rc-dropdown": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/rc-dropdown/-/rc-dropdown-4.2.0.tgz", - "integrity": "sha512-odM8Ove+gSh0zU27DUj5cG1gNKg7mLWBYzB5E4nNLrLwBmYEgYP43vHKDGOVZcJSVElQBI0+jTQgjnq0NfLjng==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/rc-dropdown/-/rc-dropdown-4.2.1.tgz", + "integrity": "sha512-YDAlXsPv3I1n42dv1JpdM7wJ+gSUBfeyPK59ZpBD9jQhK9jVuxpjj3NmWQHOBceA1zEPVX84T2wbdb2SD0UjmA==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.18.3", "@rc-component/trigger": "^2.0.0", "classnames": "^2.2.6", - "rc-util": "^5.17.0" + "rc-util": "^5.44.1" }, "peerDependencies": { "react": ">=16.11.0", @@ -17728,9 +17746,9 @@ } }, "node_modules/rc-field-form": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/rc-field-form/-/rc-field-form-2.2.1.tgz", - "integrity": "sha512-uoNqDoR7A4tn4QTSqoWPAzrR7ZwOK5I+vuZ/qdcHtbKx+ZjEsTg7QXm2wk/jalDiSksAQmATxL0T5LJkRREdIA==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/rc-field-form/-/rc-field-form-2.7.0.tgz", + "integrity": "sha512-hgKsCay2taxzVnBPZl+1n4ZondsV78G++XVsMIJCAoioMjlMQR9YwAp7JZDIECzIu2Z66R+f4SFIRrO2DjDNAA==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.18.0", @@ -17746,15 +17764,15 @@ } }, "node_modules/rc-image": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/rc-image/-/rc-image-7.9.0.tgz", - "integrity": "sha512-l4zqO5E0quuLMCtdKfBgj4Suv8tIS011F5k1zBBlK25iMjjiNHxA0VeTzGFtUZERSA45gvpXDg8/P6qNLjR25g==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/rc-image/-/rc-image-7.12.0.tgz", + "integrity": "sha512-cZ3HTyyckPnNnUb9/DRqduqzLfrQRyi+CdHjdqgsyDpI3Ln5UX1kXnAhPBSJj9pVRzwRFgqkN7p9b6HBDjmu/Q==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.11.2", "@rc-component/portal": "^1.0.2", "classnames": "^2.2.6", - "rc-dialog": "~9.5.2", + "rc-dialog": "~9.6.0", "rc-motion": "^2.6.2", "rc-util": "^5.34.1" }, @@ -17764,9 +17782,9 @@ } }, "node_modules/rc-input": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/rc-input/-/rc-input-1.5.1.tgz", - "integrity": "sha512-+nOzQJDeIfIpNP/SgY45LXSKbuMlp4Yap2y8c+ZpU7XbLmNzUd6+d5/S75sA/52jsVE6S/AkhkkDEAOjIu7i6g==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/rc-input/-/rc-input-1.8.0.tgz", + "integrity": "sha512-KXvaTbX+7ha8a/k+eg6SYRVERK0NddX8QX7a7AnRvUa/rEH0CNMlpcBzBkhI0wp2C8C4HlMoYl8TImSN+fuHKA==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.11.1", @@ -17779,15 +17797,15 @@ } }, "node_modules/rc-input-number": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/rc-input-number/-/rc-input-number-9.1.0.tgz", - "integrity": "sha512-NqJ6i25Xn/AgYfVxynlevIhX3FuKlMwIFpucGG1h98SlK32wQwDK0zhN9VY32McOmuaqzftduNYWWooWz8pXQA==", + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/rc-input-number/-/rc-input-number-9.5.0.tgz", + "integrity": "sha512-bKaEvB5tHebUURAEXw35LDcnRZLq3x1k7GxfAqBMzmpHkDGzjAtnUL8y4y5N15rIFIg5IJgwr211jInl3cipag==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.10.1", "@rc-component/mini-decimal": "^1.0.1", "classnames": "^2.2.5", - "rc-input": "~1.5.0", + "rc-input": "~1.8.0", "rc-util": "^5.40.1" }, "peerDependencies": { @@ -17796,17 +17814,17 @@ } }, "node_modules/rc-mentions": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/rc-mentions/-/rc-mentions-2.14.0.tgz", - "integrity": "sha512-qKR59FMuF8PK4ZqsbWX3UuA5P1M/snzyqV6Yt3y1DCFbCEdqUGIBgQp6vEfLCO6Z0RoRFlzXtCeSlBTcDDpg1A==", + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/rc-mentions/-/rc-mentions-2.20.0.tgz", + "integrity": "sha512-w8HCMZEh3f0nR8ZEd466ATqmXFCMGMN5UFCzEUL0bM/nGw/wOS2GgRzKBcm19K++jDyuWCOJOdgcKGXU3fXfbQ==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.22.5", "@rc-component/trigger": "^2.0.0", "classnames": "^2.2.6", - "rc-input": "~1.5.0", - "rc-menu": "~9.14.0", - "rc-textarea": "~1.7.0", + "rc-input": "~1.8.0", + "rc-menu": "~9.16.0", + "rc-textarea": "~1.10.0", "rc-util": "^5.34.1" }, "peerDependencies": { @@ -17815,9 +17833,9 @@ } }, "node_modules/rc-menu": { - "version": "9.14.1", - "resolved": "https://registry.npmjs.org/rc-menu/-/rc-menu-9.14.1.tgz", - "integrity": "sha512-5wlRb3M8S4yGlWhSoEYJ7ZVRElyScdcpUHxgiLxkeig1tEdyKrnED3B2fhpN0Rrpdp9jyhnmZR/Lwq2fH5VvDQ==", + "version": "9.16.1", + "resolved": "https://registry.npmjs.org/rc-menu/-/rc-menu-9.16.1.tgz", + "integrity": "sha512-ghHx6/6Dvp+fw8CJhDUHFHDJ84hJE3BXNCzSgLdmNiFErWSOaZNsihDAsKq9ByTALo/xkNIwtDFGIl6r+RPXBg==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.10.1", @@ -17833,14 +17851,14 @@ } }, "node_modules/rc-motion": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/rc-motion/-/rc-motion-2.9.2.tgz", - "integrity": "sha512-fUAhHKLDdkAXIDLH0GYwof3raS58dtNUmzLF2MeiR8o6n4thNpSDQhOqQzWE4WfFZDCi9VEN8n7tiB7czREcyw==", + "version": "2.9.5", + "resolved": "https://registry.npmjs.org/rc-motion/-/rc-motion-2.9.5.tgz", + "integrity": "sha512-w+XTUrfh7ArbYEd2582uDrEhmBHwK1ZENJiSJVb7uRxdE7qJSYjbO2eksRXmndqyKqKoYPc9ClpPh5242mV1vA==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.11.1", "classnames": "^2.2.1", - "rc-util": "^5.43.0" + "rc-util": "^5.44.0" }, "peerDependencies": { "react": ">=16.9.0", @@ -17848,9 +17866,9 @@ } }, "node_modules/rc-notification": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/rc-notification/-/rc-notification-5.6.0.tgz", - "integrity": "sha512-TGQW5T7waOxLwgJG7fXcw8l7AQiFOjaZ7ISF5PrU526nunHRNcTMuzKihQHaF4E/h/KfOCDk3Mv8eqzbu2e28w==", + "version": "5.6.4", + "resolved": "https://registry.npmjs.org/rc-notification/-/rc-notification-5.6.4.tgz", + "integrity": "sha512-KcS4O6B4qzM3KH7lkwOB7ooLPZ4b6J+VMmQgT51VZCeEcmghdeR4IrMcFq0LG+RPdnbe/ArT086tGM8Snimgiw==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.10.1", @@ -17867,9 +17885,9 @@ } }, "node_modules/rc-overflow": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/rc-overflow/-/rc-overflow-1.3.2.tgz", - "integrity": "sha512-nsUm78jkYAoPygDAcGZeC2VwIg/IBGSodtOY3pMof4W3M9qRJgqaDYm03ZayHlde3I6ipliAxbN0RUcGf5KOzw==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rc-overflow/-/rc-overflow-1.4.1.tgz", + "integrity": "sha512-3MoPQQPV1uKyOMVNd6SZfONi+f3st0r8PksexIdBTeIYbMX0Jr+k7pHEDvsXtR4BpCv90/Pv2MovVNhktKrwvw==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.11.1", @@ -17883,9 +17901,9 @@ } }, "node_modules/rc-pagination": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/rc-pagination/-/rc-pagination-4.2.0.tgz", - "integrity": "sha512-V6qeANJsT6tmOcZ4XiUmj8JXjRLbkusuufpuoBw2GiAn94fIixYjFLmbruD1Sbhn8fPLDnWawPp4CN37zQorvw==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/rc-pagination/-/rc-pagination-5.1.0.tgz", + "integrity": "sha512-8416Yip/+eclTFdHXLKTxZvn70duYVGTvUUWbckCCZoIl3jagqke3GLsFrMs0bsQBikiYpZLD9206Ej4SOdOXQ==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.10.1", @@ -17898,9 +17916,9 @@ } }, "node_modules/rc-picker": { - "version": "4.6.9", - "resolved": "https://registry.npmjs.org/rc-picker/-/rc-picker-4.6.9.tgz", - "integrity": "sha512-kwQq5xDNJ1VcX7pauLlVBiuQorpZGUwA/YczVJTO1e33YsTyDuVjaQkYAiAupXbEPUBCU3doGZo0J25HGq2ZOQ==", + "version": "4.11.3", + "resolved": "https://registry.npmjs.org/rc-picker/-/rc-picker-4.11.3.tgz", + "integrity": "sha512-MJ5teb7FlNE0NFHTncxXQ62Y5lytq6sh5nUw0iH8OkHL/TjARSEvSHpr940pWgjGANpjCwyMdvsEV55l5tYNSg==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.24.7", @@ -17952,9 +17970,9 @@ } }, "node_modules/rc-rate": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/rc-rate/-/rc-rate-2.13.0.tgz", - "integrity": "sha512-oxvx1Q5k5wD30sjN5tqAyWTvJfLNNJn7Oq3IeS4HxWfAiC4BOXMITNAsw7u/fzdtO4MS8Ki8uRLOzcnEuoQiAw==", + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/rc-rate/-/rc-rate-2.13.1.tgz", + "integrity": "sha512-QUhQ9ivQ8Gy7mtMZPAjLbxBt5y9GRp65VcUyGUMF3N3fhiftivPHdpuDIaWIMOTEprAjZPC08bls1dQB+I1F2Q==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.10.1", @@ -17970,14 +17988,14 @@ } }, "node_modules/rc-resize-observer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/rc-resize-observer/-/rc-resize-observer-1.4.0.tgz", - "integrity": "sha512-PnMVyRid9JLxFavTjeDXEXo65HCRqbmLBw9xX9gfC4BZiSzbLXKzW3jPz+J0P71pLbD5tBMTT+mkstV5gD0c9Q==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/rc-resize-observer/-/rc-resize-observer-1.4.3.tgz", + "integrity": "sha512-YZLjUbyIWox8E9i9C3Tm7ia+W7euPItNWSPX5sCcQTYbnwDb5uNpnLHQCG1f22oZWUhLw4Mv2tFmeWe68CDQRQ==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.20.7", "classnames": "^2.2.1", - "rc-util": "^5.38.0", + "rc-util": "^5.44.1", "resize-observer-polyfill": "^1.5.1" }, "peerDependencies": { @@ -17986,9 +18004,9 @@ } }, "node_modules/rc-segmented": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/rc-segmented/-/rc-segmented-2.3.0.tgz", - "integrity": "sha512-I3FtM5Smua/ESXutFfb8gJ8ZPcvFR+qUgeeGFQHBOvRiRKyAk4aBE5nfqrxXx+h8/vn60DQjOt6i4RNtrbOobg==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/rc-segmented/-/rc-segmented-2.7.0.tgz", + "integrity": "sha512-liijAjXz+KnTRVnxxXG2sYDGd6iLL7VpGGdR8gwoxAXy2KglviKCxLWZdjKYJzYzGSUwKDSTdYk8brj54Bn5BA==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.11.1", @@ -18002,9 +18020,9 @@ } }, "node_modules/rc-select": { - "version": "14.15.1", - "resolved": "https://registry.npmjs.org/rc-select/-/rc-select-14.15.1.tgz", - "integrity": "sha512-mGvuwW1RMm1NCSI8ZUoRoLRK51R2Nb+QJnmiAvbDRcjh2//ulCkxeV6ZRFTECPpE1t2DPfyqZMPw90SVJzQ7wQ==", + "version": "14.16.8", + "resolved": "https://registry.npmjs.org/rc-select/-/rc-select-14.16.8.tgz", + "integrity": "sha512-NOV5BZa1wZrsdkKaiK7LHRuo5ZjZYMDxPP6/1+09+FB4KoNi8jcG1ZqLE3AVCxEsYMBe65OBx71wFoHRTP3LRg==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.10.1", @@ -18024,9 +18042,9 @@ } }, "node_modules/rc-slider": { - "version": "10.6.2", - "resolved": "https://registry.npmjs.org/rc-slider/-/rc-slider-10.6.2.tgz", - "integrity": "sha512-FjkoFjyvUQWcBo1F3RgSglky3ar0+qHLM41PlFVYB4Bj3RD8E/Mv7kqMouLFBU+3aFglMzzctAIWRwajEuueSw==", + "version": "11.1.8", + "resolved": "https://registry.npmjs.org/rc-slider/-/rc-slider-11.1.8.tgz", + "integrity": "sha512-2gg/72YFSpKP+Ja5AjC5DPL1YnV8DEITDQrcc1eASrUYjl0esptaBVJBh5nLTXCCp15eD8EuGjwezVGSHhs9tQ==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.10.1", @@ -18075,16 +18093,16 @@ } }, "node_modules/rc-table": { - "version": "7.45.7", - "resolved": "https://registry.npmjs.org/rc-table/-/rc-table-7.45.7.tgz", - "integrity": "sha512-wi9LetBL1t1csxyGkMB2p3mCiMt+NDexMlPbXHvQFmBBAsMxrgNSAPwUci2zDLUq9m8QdWc1Nh8suvrpy9mXrg==", + "version": "7.50.5", + "resolved": "https://registry.npmjs.org/rc-table/-/rc-table-7.50.5.tgz", + "integrity": "sha512-FDZu8aolhSYd3v9KOc3lZOVAU77wmRRu44R0Wfb8Oj1dXRUsloFaXMSl6f7yuWZUxArJTli7k8TEOX2mvhDl4A==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.10.1", "@rc-component/context": "^1.4.0", "classnames": "^2.2.5", "rc-resize-observer": "^1.1.0", - "rc-util": "^5.37.0", + "rc-util": "^5.44.3", "rc-virtual-list": "^3.14.2" }, "engines": { @@ -18096,15 +18114,15 @@ } }, "node_modules/rc-tabs": { - "version": "15.1.1", - "resolved": "https://registry.npmjs.org/rc-tabs/-/rc-tabs-15.1.1.tgz", - "integrity": "sha512-Tc7bJvpEdkWIVCUL7yQrMNBJY3j44NcyWS48jF/UKMXuUlzaXK+Z/pEL5LjGcTadtPvVmNqA40yv7hmr+tCOAw==", + "version": "15.6.1", + "resolved": "https://registry.npmjs.org/rc-tabs/-/rc-tabs-15.6.1.tgz", + "integrity": "sha512-/HzDV1VqOsUWyuC0c6AkxVYFjvx9+rFPKZ32ejxX0Uc7QCzcEjTA9/xMgv4HemPKwzBNX8KhGVbbumDjnj92aA==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.11.2", "classnames": "2.x", "rc-dropdown": "~4.2.0", - "rc-menu": "~9.14.0", + "rc-menu": "~9.16.0", "rc-motion": "^2.6.2", "rc-resize-observer": "^1.0.0", "rc-util": "^5.34.1" @@ -18118,14 +18136,14 @@ } }, "node_modules/rc-textarea": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/rc-textarea/-/rc-textarea-1.7.0.tgz", - "integrity": "sha512-UxizYJkWkmxP3zofXgc487QiGyDmhhheDLLjIWbFtDmiru1ls30KpO8odDaPyqNUIy9ugj5djxTEuezIn6t3Jg==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/rc-textarea/-/rc-textarea-1.10.0.tgz", + "integrity": "sha512-ai9IkanNuyBS4x6sOL8qu/Ld40e6cEs6pgk93R+XLYg0mDSjNBGey6/ZpDs5+gNLD7urQ14po3V6Ck2dJLt9SA==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.10.1", "classnames": "^2.2.1", - "rc-input": "~1.5.0", + "rc-input": "~1.8.0", "rc-resize-observer": "^1.0.0", "rc-util": "^5.27.0" }, @@ -18135,14 +18153,15 @@ } }, "node_modules/rc-tooltip": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/rc-tooltip/-/rc-tooltip-6.2.0.tgz", - "integrity": "sha512-iS/3iOAvtDh9GIx1ulY7EFUXUtktFccNLsARo3NPgLf0QW9oT0w3dA9cYWlhqAKmD+uriEwdWz1kH0Qs4zk2Aw==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/rc-tooltip/-/rc-tooltip-6.4.0.tgz", + "integrity": "sha512-kqyivim5cp8I5RkHmpsp1Nn/Wk+1oeloMv9c7LXNgDxUpGm+RbXJGL+OPvDlcRnx9DBeOe4wyOIl4OKUERyH1g==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.11.2", "@rc-component/trigger": "^2.0.0", - "classnames": "^2.3.1" + "classnames": "^2.3.1", + "rc-util": "^5.44.3" }, "peerDependencies": { "react": ">=16.9.0", @@ -18150,9 +18169,9 @@ } }, "node_modules/rc-tree": { - "version": "5.8.8", - "resolved": "https://registry.npmjs.org/rc-tree/-/rc-tree-5.8.8.tgz", - "integrity": "sha512-S+mCMWo91m5AJqjz3PdzKilGgbFm7fFJRFiTDOcoRbD7UfMOPnerXwMworiga0O2XIo383UoWuEfeHs1WOltag==", + "version": "5.13.1", + "resolved": "https://registry.npmjs.org/rc-tree/-/rc-tree-5.13.1.tgz", + "integrity": "sha512-FNhIefhftobCdUJshO7M8uZTA9F4OPGVXqGfZkkD/5soDeOhwO06T/aKTrg0WD8gRg/pyfq+ql3aMymLHCTC4A==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.10.1", @@ -18170,16 +18189,16 @@ } }, "node_modules/rc-tree-select": { - "version": "5.22.1", - "resolved": "https://registry.npmjs.org/rc-tree-select/-/rc-tree-select-5.22.1.tgz", - "integrity": "sha512-b8mAK52xEpRgS+b2PTapCt29GoIrO5cO8jB7AfHttFsIJfcnynY9FCtnYzURsKXJkGHbFY6UzSEB2I3TETtdWg==", + "version": "5.27.0", + "resolved": "https://registry.npmjs.org/rc-tree-select/-/rc-tree-select-5.27.0.tgz", + "integrity": "sha512-2qTBTzwIT7LRI1o7zLyrCzmo5tQanmyGbSaGTIf7sYimCklAToVVfpMC6OAldSKolcnjorBYPNSKQqJmN3TCww==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.10.1", + "@babel/runtime": "^7.25.7", "classnames": "2.x", - "rc-select": "~14.15.0", - "rc-tree": "~5.8.1", - "rc-util": "^5.16.1" + "rc-select": "~14.16.2", + "rc-tree": "~5.13.0", + "rc-util": "^5.43.0" }, "peerDependencies": { "react": "*", @@ -18187,9 +18206,9 @@ } }, "node_modules/rc-upload": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/rc-upload/-/rc-upload-4.6.0.tgz", - "integrity": "sha512-Zr0DT1NHw/ApxrP7UAoxOtGaVYuzarrrCVr0ld7RiEFsKX07uFhE1EpCBxwL11ruFn89GMcshOKWp+s6FLyAlA==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/rc-upload/-/rc-upload-4.9.0.tgz", + "integrity": "sha512-pAzlPnyiFn1GCtEybEG2m9nXNzQyWXqWV2xFYCmDxjN9HzyjS5Pz2F+pbNdYw8mMJsixLEKLG0wVy9vOGxJMJA==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.18.3", @@ -18202,9 +18221,9 @@ } }, "node_modules/rc-util": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.43.0.tgz", - "integrity": "sha512-AzC7KKOXFqAdIBqdGWepL9Xn7cm3vnAmjlHqUnoQaTMZYhM4VlXGLkkHHxj/BZ7Td0+SOPKB4RGPboBVKT9htw==", + "version": "5.44.4", + "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.44.4.tgz", + "integrity": "sha512-resueRJzmHG9Q6rI/DfK6Kdv9/Lfls05vzMs1Sk3M2P+3cJa+MakaZyWY8IPfehVuhPJFKrIY1IK4GqbiaiY5w==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.18.3", @@ -18216,9 +18235,9 @@ } }, "node_modules/rc-virtual-list": { - "version": "3.14.5", - "resolved": "https://registry.npmjs.org/rc-virtual-list/-/rc-virtual-list-3.14.5.tgz", - "integrity": "sha512-ZMOnkCLv2wUN8Jz7yI4XiSLa9THlYvf00LuMhb1JlsQCewuU7ydPuHw1rGVPhe9VZYl/5UqODtNd7QKJ2DMGfg==", + "version": "3.18.6", + "resolved": "https://registry.npmjs.org/rc-virtual-list/-/rc-virtual-list-3.18.6.tgz", + "integrity": "sha512-TQ5SsutL3McvWmmxqQtMIbfeoE3dGjJrRSfKekgby7WQMpPIFvv4ghytp5Z0s3D8Nik9i9YNOCqHBfk86AwgAA==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.20.0", @@ -18269,6 +18288,18 @@ "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", "license": "MIT" }, + "node_modules/react-country-flag": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/react-country-flag/-/react-country-flag-3.1.0.tgz", + "integrity": "sha512-JWQFw1efdv9sTC+TGQvTKXQg1NKbDU2mBiAiRWcKM9F1sK+/zjhP2yGmm8YDddWyZdXVkR8Md47rPMJmo4YO5g==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "react": ">=16" + } + }, "node_modules/react-dev-utils": { "version": "12.0.1", "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", @@ -18754,12 +18785,6 @@ "node": ">=4" } }, - "node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", - "license": "MIT" - }, "node_modules/regenerator-transform": { "version": "0.15.2", "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", @@ -21494,6 +21519,17 @@ "node": ">=0.10.48" } }, + "node_modules/virtualizedtableforantd4": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/virtualizedtableforantd4/-/virtualizedtableforantd4-1.3.1.tgz", + "integrity": "sha512-rW8KoToI2nt1jNtweXIUIiygi74XMzKLzUrrtZbGsQc7m3v68AaedPuf4CZcte+nosgYuPEWnAgjuI/KR8BVbg==", + "license": "MIT", + "peerDependencies": { + "antd": "^4.0.0 || ^5.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/vue-eslint-parser": { "version": "9.4.3", "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.3.tgz", diff --git a/package.json b/package.json index f4c34b5..92f17a4 100644 --- a/package.json +++ b/package.json @@ -6,15 +6,17 @@ "@simplewebauthn/browser": "^10.0.0", "@tsparticles/react": "^3.0.0", "@tsparticles/slim": "^3.5.0", - "antd": "^5.19.2", + "antd": "^5.25.1", "antd-style": "^3.7.1", "axios": "*", + "country-list": "^2.3.0", "dotenv": "^16.5.0", "gcode-preview": "^2.17.0", "keycloak-js": "^26.1.5", "moment": "*", "prop-types": "^15.8.1", "react": "*", + "react-country-flag": "^3.1.0", "react-dom": "*", "react-router-dom": "*", "react-scripts": "*", @@ -23,6 +25,7 @@ "styled-components": "*", "three": "^0.166.1", "tsparticles": "^3.5.0", + "virtualizedtableforantd4": "^1.3.1", "web-vitals": "*" }, "scripts": { diff --git a/src/App.css b/src/App.css index f37773d..ca5c511 100644 --- a/src/App.css +++ b/src/App.css @@ -1,3 +1,8 @@ +body, +.ant-typography { + font-family: 'SF Pro'; +} + .App { text-align: center; } diff --git a/src/App.jsx b/src/App.jsx index db04ebf..b0c00fb 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -7,7 +7,7 @@ import { } from 'react-router-dom' import { App, ConfigProvider, theme } from 'antd' import AuthLayout from './components/Auth/AuthLayout.jsx' -import ProductionOverview from './components/Dashboard/Production/Overview' +import ProductionOverview from './components/Dashboard/Production/ProductionOverview' import Printers from './components/Dashboard/Production/Printers' import ControlPrinter from './components/Dashboard/Production/Printers/ControlPrinter.jsx' @@ -16,8 +16,6 @@ import PrinterInfo from './components/Dashboard/Production/Printers/PrinterInfo. import PrintJobs from './components/Dashboard/Production/PrintJobs.jsx' import PrintJobInfo from './components/Dashboard/Production/PrintJobs/PrintJobInfo.jsx' -import Spools from './components/Dashboard/Inventory/Spools' - import Filaments from './components/Dashboard/Management/Filaments' import FilamentInfo from './components/Dashboard/Management/Filaments/FilamentInfo.jsx' @@ -30,6 +28,14 @@ import PartInfo from './components/Dashboard/Management/Parts/PartInfo.jsx' import Products from './components/Dashboard/Management/Products.jsx' import ProductInfo from './components/Dashboard/Management/Products/ProductInfo.jsx' +import Vendors from './components/Dashboard/Management/Vendors' +import VendorInfo from './components/Dashboard/Management/Vendors/VendorInfo' + +import Materials from './components/Dashboard/Management/Materials' + +import FilamentStocks from './components/Dashboard/Inventory/FilamentStocks.jsx' +import FilamentStockInfo from './components/Dashboard/Inventory/FilamentStocks/FilamentStockInfo.jsx' + import Dashboard from './components/Dashboard/common/Dashboard' import PrivateRoute from './components/PrivateRoute' import PublicRoute from './components/PublicRoute.jsx' @@ -37,8 +43,6 @@ import './App.css' import { SocketProvider } from './components/Dashboard/context/SocketContext.js' import { AuthProvider } from './components/Auth/AuthContext.js' import { SpotlightProvider } from './components/Dashboard/context/SpotlightContext.js' -import Vendors from './components/Dashboard/Management/Vendors' -import VendorInfo from './components/Dashboard/Management/Vendors/VendorInfo' const FarmControlApp = () => { return ( @@ -71,7 +75,10 @@ const FarmControlApp = () => { element={ ( - + )} /> } @@ -82,41 +89,78 @@ const FarmControlApp = () => { /> } />} > - } /> - } /> + {/* Production Routes */} } + /> + } /> + } /> - } /> - } /> - } /> - } /> - } /> - + } + /> + } + /> + } + /> + } + /> + } + /> - } />} - > - } /> - + {/* Inventory Routes */} + } + /> + } + /> - } />} - > - } /> - } /> - } /> - } /> - } /> - } /> - } /> - } /> + {/* Management Routes */} + } + /> + } + /> + } /> + } + /> + } /> + } + /> + } /> + } + /> + } + /> diff --git a/src/assets/icons/filamentstockicon.afdesign b/src/assets/icons/filamentstockicon.afdesign new file mode 100644 index 0000000000000000000000000000000000000000..deff2713f999eb9bde2b332b5df8ebc6376d1493 GIT binary patch literal 80347 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

g&O-w&lPNx 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ⅈ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 literal 0 HcmV?d00001 diff --git a/src/assets/icons/filamentstockicon.svg b/src/assets/icons/filamentstockicon.svg new file mode 100644 index 0000000..cea5dbd --- /dev/null +++ b/src/assets/icons/filamentstockicon.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/assets/icons/gcodefileicon.afdesign b/src/assets/icons/gcodefileicon.afdesign index 8878e0d5e1956cd4ad380f878928c7ffc8e1c1a6..6b9a90f68ef6aef83ddadd92aca4167be45a2923 100644 GIT binary patch literal 47424 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%0AdwB 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 - - - - - - - - - - - - - - - - - + + + + + + + + diff --git a/src/assets/icons/materialicon.afdesign b/src/assets/icons/materialicon.afdesign new file mode 100644 index 0000000000000000000000000000000000000000..533c24fcec00cd8cd9e5fd841b75e57575cadf7f GIT binary patch literal 57060 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 _eJjfIJU_c4 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 + + + + + + + + + + + diff --git a/src/assets/icons/partstockicon.afdesign b/src/assets/icons/partstockicon.afdesign new file mode 100644 index 0000000000000000000000000000000000000000..9b55a3783d434169e66324a9736423902b3ba5f5 GIT binary patch literal 61931 zcmdS9Wmg=*@;HpUy9IX(?zT9KJ1p+*PVfN1oy8p%hX4yfLqc$O2*HCxa0&h=_uk*j z=L0--&P?_8nW?TW?b;fcS7iV?3=E8`m!}4ulB=x~+1rmd`1wCf{y+TRSs0j!Wor9> zW4Qla8lG<6@NZ)}c?W0a*7wgaikZ_eHN~h}`Y_9y9sn5TW3e`7H1hCf5LfA;|0EqX zXIqU%OO!_W#CwTs^FmGJkR5U$z_N`NGso5QlOztHb(TcIC5j$u!8L0MPuo1vqQ#B{ zlYJkC!0E?kr1wCnhRBOZiwNP-*_scld8{3Y-A1C}G}wSM&|IbNk7^HPXC^6*efRVf z=9Au!L7`?4(A7)jIc$k4#2kLPHSB>%O`pAm{`go?caFg7Ea1MCUh?O9c?N*FW`-so z1&yL=_#0#mGYn@sJZ}CffxT>?34c9!CxaK_iupNW@Yi!NBae_YYBYKfZwXT0XG^q# z=V$+nm)D@b08DFd=M(QxE;-5Rm}S^F^-nNy(_2x5?+o5Cp@z*wrqgz>iR3PSpTc&e zZt3NdhGs{=Ybkp(`(PNd!y;pxY`}R|P-d7TYWjUeyiSWc zvQZa_3|CZ2^Y@<@e~L}ncore48(2UZ%o{cCzLyY*Z|0>i%El=VdJ-@IEY2|NgKQjA z8aSAsS_VZxUxx+EBM@E5Is5P7mfBNjmn4-LMl7Ww!{s(90=EQpf7lOH zHYEGf$GnTa!33@#l^}pDU=Y?a|2z8QC$c7}`7jCDd53>-Ka5CN1me0IEE^FS3j5D4 zVkGC2?u5-K9~W2*0fP!^6gT2XLW$2>9+3#Qf|(J-86{}@cx!@iG|lF)l&+sc1?^!l z0C>FaL42T$K#d4O_Y2=p#CGnP^vUAu=k`7%9Rv#hKaZ`~|22=<=Z^DYZ+<9bSuz`C zCxM=3;@TcAG3H%y@kK}-dq{`|JZZsc;~<7GosuFi6>I~_KhgviuVKX(;hAxCjOT~v z|1kZxs5|&Rg#SEchB}PRN9$|;UEqnEdGWe&gdFTNa+$QL-fsR-)`n5K>F|K8c_Hw2 z;}U!j#X*F77c5}Pi5Ju7SpEfFo8Fx3FSZj085&96uEDvA+}wM*sL4RJUgU55;;OFI zLZydPFa;#JrA*OB&Y|SnO4psBYRb7@Hu|xdhG_~T->98&D4R|WM886!ChNysOWN1R zS{n8xPldZ<+9hh(IyOF&2AGrH1~59qgJ0{n`JF4X8Q-*57z1uTxyDCA8J}CTA1}3d z1L+553=!2zOz?Xx&9{{nU9O?Ck4q#&ND7aB2y;|q?;M#2wJL6@IATP#u`6Ve#_epL zr55Ses zglBHm0*DpEgnVv(0T;d_D!cxqVhw(9foaKZQuU+Uua1W--G{1I#>c$w7WneO$1}`f zV9(}8XfKWP6MC~fE5Uni7ENbZGbu{bY}!lrRHfMPfB>b`@Bmb8ODV#GfcLdjLt~3* znztKys2`zxax|NQ%tOy@np@ubUhQF2s_BaF|)F= zhB{Y`NFFqgs0p(gV;N#~6b_RDKS--A+{9`huwP@1wO-%0g8WpvO6x@-p)+kYxFyl1 zk-N718Zy{pnJr}TR@yEQ8wTuyD2Rv*sje`iHlaq6O?8YF2pmV36l$0&t=@~-OdzYU z=Jv5H=arKpd7_ub)%L2FeA|}$thePmx3*gr5g42numAA<=M!J#u48G+XT$pkn*_U# z(sIU8EA5HT1ke=?qk8ZIG8aUMZ1g>=?Mrc4QS_+qti0r*jm+FkZ{uZ*_xv-&Q|Ji& z2eriY=XNZnZ{Y{SboJdoZ!e(+qE;1MIWXVDw5cJfo1+CX~5 z`s8o;APS_gn&Alqc10hLiVea=(&JE&LivCpdZ`{mp_d^2{esec=o8 z$>p2t<-P%nKC><@{95?an(OQ1ln61R77BcqLXz@I=!|fAh9*$@%FzWEvDhlsHL z((|m}UC*j{R|~)B|6-_zTzBEW_C8>8@HLZR>gPed$iUn$VO3Dlv+i(q=V?)Mla|ZH zI^lFDPq>7G$V!C{Z3!6aFY`GASnlV*lBrn5U|KEv;9~$}nEfjKHv<}~z^j|wU6xbm ztK(G(ey=z1N{dk`+gHGJ_=D7QOM`Ou6YmbIJ~?XZ4w*#*h%qZ~aMQ(DMGZxsTInCLJAG(@ z0AvC8);|^2Ovkilmw{0(`jfH>Fupxd33Xsv*}}rGUWzzt{?~I8^Zjc&Y51rlc%1zw zpv8LV%WqLX9N2`6*0g&Gj;eCCY}}Ku>Ihwgabf}?8C(^D?|U{SQnpB2IF#HnTxQuZ zMkIho19x*;R|^D}SMwT@?+M>zSNl*__I*M*BqC|#u+<3e1JD0E_!%4oTga#EOkD!_ zKFf?7O&~6$xl=Jx?|rUu9y+uwL!x!PDVv%(lR9&#XM@Bm6!wwjv%eLP6=+|x+$bMU z#_`oyrCMGALqkP{urH+)nJI4g;6EI|J5}8`$!lcNt(lQr(RstB@ki891n7$_7xy9R zv~SjSY-7lAX(HsEv1xs@PAq0s`06&SUp62ZDT6`f$qu7{%_I&Iqhuq}U}Oy1O6}{D zNl>zQ3uQ`5QQ{!2Z-f}hI@m-ww`Db+-IfOYlw)jrgF`hP7i)jTi1a32HxkbXuU_|? zx-C1gA=bTJkD9%qq9QQzqo9!>E(WTaUrtp9bXB9NUD%Kv85UTn$}lZBf2nUM5Xr|g z>b@A3nE|6~7IqdAE=0zli*7Cktg-qUWYK5zmz`y`jYPJz6kAHJ2+11O zp?zTqgA+bJ6?T$wZ+jf)aH_@;m_CK1v1&ov*(>tY-$@mNTueGR4`$#+mnBj8DGBu?_x z!XAOq7qS@=p*y)q+=!{E<-H#eQ+w2U=c#$zG-Y^< zu)ObAhdt{rxJPKf`I#bXMbZJ2n&LK-QPwE@Hb8t`wXc667Gi)Y^kykSQUEeBmozfQ z#%JQ6M68>zHb`WA76|W*&7Ulx0@ObcKU3-tMzG}`U~1r`jX#&R!@@Ch{O8b%M_LzFr#Am1 zpk(t<5~GjBsW@5!L)yc!n-%k;o|uOsR0ZOx2k{ywJS?zkV4JfB-e?uPUyX&p$SO+h zjh-e~YZZlBaqB)5t*Cz*`Lv?3OWPv}Q*b~lgWXy#6TC&cRQ&9)NSMnx#otmAkJ0lM zTPIdtlQCs3t^?J`QpcV&W5b>VS(7_1vDcw}S$-Kmr(Z&sNwB^IhT3_}p{aImXc8H{ z20JqsR^CzJPo>9TbpFA4HbL%;&~m%fLEQ>QPyDG8y3{dRJpbrcFPK^N$S^VYlx3L0 zr+#+UNyyO_`1(oElcDqaeNN3`@#Z|QE|2PEB_PcfZGdlNBa&VfzoPuoue=8G@iM%G zGX!6&bx?zkYd$KagwywlPOG&|16a{Zr_E0~%2u48ABg9r#8_w(&`X&SC~6RVz~5M265 zXd}|}O35}FX1N~!v7hAScS3F8PUyef6PkBvTl(bGLI)`e^>mq0>D<5(q7{X) zjIlh&QOeUuc%`J&npd{%n)%BV?3*N|sku7dR@wlm0kgH}m^9s&=fAPw(P9Kz)KfF= zEEPHjgSX>4C&%gB58Kmn#akBa_M?sT=jV0Y^g=w?mnaD`h9J36Q1#_+>Ouj*jL;D( z_jlqA;tUKJ;ZLagWUuCA4Sbe+*bg<;5yM%m!#1Uk%d{4?gc@qP_!;;B5)=eGo!IuD z=uu)urFgF_-15y~NIq$W~c~@&1 z9CFHp4b_X9ZD+N@)NK8yFRwk;!+>pG;@W#1D|%GCE6G~b(Cun}wxhUQ!7Dy}TPR^6 zL8T`|qJy+vhcy$(#Kc>R?OJ)QSysV7U}xmj<_*cUsMevK$-gcxWs%yAL#k%s2j$Mr zHqZ7o)6&uXu0JmqA|$5QNs)q!%_OAi@cAR0Q$3@_op4_@GfP#W6)Wr2R|;1Kr_G~H zVL)ak!o&+$T*Vwl);P4TFrLW6CcLpY-L&5w!AQX-6nB%Vkc=)J{ZN-!c_+DOEmryJ zk%3t7;y3)oQlNq4wat>wUnD=3A7TaR%#|wr2X9tDhWSuley3h)lVnef1-@Em%#`89 ztf6;YAp*&~1wkG{)JJuFc?efy%<0C8i*9VwD{`Gm_rPLtdex(ve8WzttIZDCP7k}M z>g$Mc{QmGu`)6@L+;9vgygD($Jn%j~Jm!Eb%Dd@4P%9+CfDr3OAcM=FF2 zq{7BRJPcSSph7k2wxE3doZLZ+`(>5*bP@GAPH^%Bv!8)*mV|D1%+cXv*89c+?23UPCnx_)gF6rw(Q<}hJyFsH;CmBeuV zuHoy@0Z@IP{Sx_VB?3`c=O$2?`!MNPeYgPz5X}x zAmQLez2E?c$!7vr_D3~vuS0t@WLB{O!2DW`@3Mc0DBQRBLz~y(gCP8DY}?hfwJ58{ zYk|p#Z)g^l0dWUXz$?r_Se?D7dgEi}pQ`>>q!US*%vqh%n`;&)+rP=qqj|Bj&!fIl z7aK9pPGS4ics{+&?>wI0TiS?jPZ-VGI_In}X6G`_rx^yMz35grCcTXOWFfB?fRN_&iEVLFn z_uPD%?6Z~)T6!k^yp@gDBN@YKT_JmB({6ZF6!VPe#!5XGsuE?S5K0_>QCGG>&-i0k zK9tyNVG$Q-gk1_oE%*_ZB&6Pu-!KpqjzWDqVSBPaLjSZ`?lh4QiJwDs3oosS8( zm=iz$rk)D&*|mq}2lI&OpA|t_+?XFVV1NTQi;G}l4XkWD?c>*pm%RDxHlJ&>HDT2? zx9o_H(4P|FZ`Pk(-6`LzG_GS)*;sPvC+Nh1w0mk-0O$xc;at2|KkcpKRb*Jnl1uyD z`<@)E|VfVTX)}!fSJJe!x+Pi2(l%)h{#8 zf!&u8!Yt7@ZH>OWG>dt*`{tXZ5o?*^rI^` z1}kq-9EMnQ=p1d>hFb8XJ~2%YiqAgxEzUo@u4wxm89%0*!$#CpX?0Rtj#Gcc;6@4? zABRaqOhadm+0{6pfb!tMSO~Eur_q1J36I2qfgypxfkWVe;YxwkgNf#JK;}-;I(P2N z(_IGH!L^akuKa+f?Lq(g-S>q@YaY)t1NxVG7^7j_H@lr-&kmDR z^+2S{skZ>B1Erj~giL2z6*}!aBS>?Q`<0*i?%@507QaJb{}@@04+X`_M&q*W2W}e? z=+%7>&K*+=P6ksL$U6xtf0lrTI+WrGXfRvr6X67L(hKe1eUgnv-w#jdb18VRs<_<` z7BP~@C0-LN`iS2pTuKb4OF`De?N@3$QRZ=WjX#Rr7@(>|`KRe6+PQbBv99S!CX=1W zHNKC2!9+fkhKPH|59E)|1J75XYm;sw(B2YMf$lH!J+m4^9t?o_2X8{@Oe%%q9!#a= zU+`cc;x2pz(4Vj9p_k%VP1puCsM%ccb?WhbfFbjCCsgP~y^y|cD``Bq<#9V?q$H?0k^Ws6%4J^Igy zq#B-+1ke4f#vE=wNhs9jJM+K@x{>&)O09Ar;w&eBH>suOljYc{ruUjlvkJ}{#M_MegoTi#N!9R#bA!|OUMeTZ84-ubmYO~)sKY#Pd4m0`|N#wI2DOboeV-x^UMF;#u zKqsTFIn6E}28Nq)Ch*X;cIdyWf>@I2|BeAz{IIY7r1)-<96IFXt##>>XcraH&i7Y$ zhB~3i`)Lwx%hRHU0X^$1DV0CM!Z5ON{x$|c(k0$IiUaPI7`i)Hx;GL&4~|y87Jl+g zMQ@ERO+9aeWRd;;!9Gi~&-_bIB?`5}HmwB+y`m>x;ppp0gba&KI>B zH&X=ye=j@t>=CO9TP-^<8B6=j(AcVp9DD&7j{nFYJ?U_^)9vw~-j&`^_VbMF2YbY7 zml!vQ&5IweDY#loTD-Ql=OIywEL>FSR zk43OEf};QiU|<+nDku*-pME+3LN>ailwS_`W;O>O&U*B@M4^y=fDi-&XY8a=%U2j7 zSRbDSOkybyTB9i%E!KLlcZ#}dXyj3(`NM0ZJHv&c29ZR0W?+y=BA+G%+)((b8K+$6 zsxljOG7{2!rsWf5yWJGUrTlQxoqVQSnN`6&J4A|~gkf9sayECQ}{h~5rA z!rVtrz*t!yiGzt#=+k-qPgV~GMT*gnx4%F%!^GH$>||_n{qV=+uxIJp(QSU`Ld1i} z<0r7MZ$Kxn!}qUs^bh{8jr9N3W`h0iV=%n`#sB%K_`f+P<^K-;uQg@W!>$B}`ZmW^ zj%1DuW9??eX>H;CZ$%w@7t4RI!Y#qTy!+qVH;XVZu(29y3YchQXm4|vN{X^tZ&Q>1 zdRiz*Z!_p835Rb8)m_oh3kC+O|KA0h$%aJ^149j?Bn!~-&p!!v@H-w(vR?kWp4FwZ zkawE%`nmz>I$kj8KD!E!8!^XGQu^AKk%63lhKYCl$X8~)s3jfy&T8RsM+Va@zxBIzpT3h~?3 z$-!@a5~(yh+KUp!Z58@;Y+#zmMqZ+NOB2)3TIv#=gTzRx7sH%>9urD4`ppBY)!utH37k(^sD(z1`!J{eSe3 z>Hb5ny%t>Fk!)!}IW-tNUiKj+qGagjMyRxzVt+Q{&V^WsCT*%e(?5!cnxiq;I(t?g z<8%alVt^vC8%po(53)@QsH>82Y$5 zTol}VPvQ_F-9)hFDc1i)!W0F#<6$OhG}>VqE(nDT>f!n?v?KU8po?E?Jb{S?`hAf9Oe_g3_I}#3%SM;(4X^=O_}) zt^!87#Ngb~HZi{4pZN3e4AxCDGd_URK2X+Dv!4$z77t>9xkkF~U2NfsphwmJsEjQIj-@!D%8cz(iQoQGe@||gFnTky? zn6$=5(!}yMRiB^Iou<_jno7#ijHAPtP2=uo{q%xL1WU;0Q#+GJiFHMct1eqdOr_50tw@b2iZOA3`A zsu8=1QmTDGuqiu7l)+1K{GF8QNZWMrX2i~{(7$%3(rEYWLi^HUu3%)%6# z7d)eA`pJIA2wJK%#5pOUH+uS4!k9_<3f8s#hu}X7AN%j)Xbcs=j0=6h+@%A>t3Ux` zm2y_&398`FcS`haNJ{y!s_?NgQ4)@tHM*pR;8fia&9MQoZ(ODiGek_&Uqs4=IDKii zQu*98S@AtWVrf~oi_z{}Zv)4l%i9&54jA#slmBr*GdiN991q^LBPZrbUj33^%O>Ec z_^#SkGES`QuJq_HCLaPP5XN#F9~5lR9edG4Rqd{7&YYV*;OG!DXVR8<5p^iC!^4rj#x&QNXuwsY1^fML#J! z<{qydn{>L2emw{LT0*Dpx8``J;_^q=>FS1P;3%W`m8xDMk&3D`CP>knJ);;AU+6Xb zbamE|$zi>0!zQY+wHh2`iT)O7>=AJR)t-yBFf+l5+fUkqg7f5RR3ST(+_>F7+MB9P zXEv0ndp}O>atlk>417}$Sz}TEIV!gh+1=aXkY^DrG2(%rt!l*?({9X0cg|o94 zd9XZ_kJN8f!EC4OH_|&m^HL?H_}LYyT;g$N^j}j4AI8PFH~+5LjG)$?bQC+`1%AO} znnD+*L~f*-z&}HNKUZ0W`;!gL<0bdql-niwuRLuc#YXXB_shoe1-U^-as z)ZEYr#-!5OW}OvL?PhzE##kS*;>3{k12QrdZ)@az=BLYS2L_5$rIOZZ2O)zQARcgz|HM#;85 zv;&L9;5>?^=*RoJ-i-8uNLDw@+v55fN0m!8}KPQ?jC2R6_N?^Wm3u2pD( zqqc&ejDSeh@ZzNiSh}jxQ`{m($KaY~x4rgHQ%I@tI*4?@e9bF+b$(%m!zfZryo%1S z%6z@;OgAEv@k(bGIEG$)l1`VyRBDGBqeVG63Xs~2(iQ9vuX4^`^wa%rZ-<#C_Ixp2 zmg9b<((6StGwVqKv!atK!cb__H9`G^VqG(e$Ah$_F5Chi5h$17%06f|Sr8_q^q2p$ ztmNW^D#0|9>Q{B|q%^+&Nl2qsxHeAFm-9Yh_Es4g9ZE&RIMigYm!bGE=BOSnKDF}o zbp9pO)mPE`K~iDVAc-7iW5%V=n7WNEw6UY8vk6$L5`^-mJ1h>O%_~q-xVX1$b=>k4 z2`JZl?nt^yH^kR@oeUuBsz=!orf`UBwZqlcz7!`vKO1sw_w>k2*@HEoF>QLRmppaQ zfdBrX0nGM$gH^gq-ofOSV*Do9^p6KEH?dMa>X1R+`#;9pGRk`atyIYl&7cG#v!xlH zpz!_t(*cFND-Rc%B8B`;rJ0qk+{?0$Q^)ewb?yK*_q!T>u!x-Im^{$f)G6yAW^U}o zV}2zY_L)^KR+jLM@Fz}#!sO~;?q`x}Tb~fxA?|HwQecLwQea`pK7~k$=V>)Q+MnRV z3p2b?3wP_zPevv6L-Nlp9xafLB2MW!PGMr^8l&6i?t#z9RYO|g7iTo72X7~t5{<07 z&hPUz3DHEXF)N_~V_a_ui{HkGQIkRS3#bat1}&;>k~Toziqc~-ZkZQ6UP6@9xj-}3 z8gt+^^Pm%t&kTm7?Xg6=jCLQ#L7GoWVq*C2(h+y(O!Bhh=_e6NIC($KM=dT^~TyN8_X zaRUfh5G%j-?+N8Qhfe+x3JplplXUMRnjoPVF);Uu;_dXT`R3eVFQpX?purTyIO2n) z^abGo2@!kJ84hwx!e%H|8e^=sNr)da`YpEiA-<%Ym&@|W>5qVZ(vHELQ?E~WE%2jv zgRmJB!#n|Hwb6ruWjc61Q=UIAW13L|q$FRjhziKEg!|}Ki`$#RFU601s*0FWQQk6} zdtVJM(}1LzMrYQOu;@!T-WQ$tw5#D7<1eFE9OooV^{Sk!^piy}FR30;Uqv;C=7t~t z(D??p7=(dxp_BGGaKXB+$K2f@56mfF=+A^SdSW7_TBC%RctZU6(sFa)xQV77@wZ(UN@y5Z0!-Dqx1ot}a^0;*=&dNju6U-dZ(0A@S z?%U;?HifB_>1uRCfDvmv^d7F9V%XZrg?+_zTHh~)C&s$7#TAsbmA9)8D&_u0R4O!D z|2{PsWb#=p>z@lLq0^*vaJf9|=2%=Vt(6^_NF?G;elRdC`!(E7qWrr&)iT!#D95BT z4w1c0D7_Am_ITDJRl8Vhop77}Vje8p0paNShEEkqKRFSZ1_7nh^P4CJR{^z?bJ;4_ zRJzq6U(Mp(wVK$Nc)lb&mZxoes}0NG1E>cXPhw{$(J=9 zz~{ir)VAn#HXt7Gt08h0*?r&v<*l-(sp#IE^jGK6tWo?iw~vMU^KaF#w^gG$x5Q!# zxs_WP3+T&+G>P$Bg(?lS7ukkWgx2aoM)p3qNvlnQB!k--LPK?gXSXFDB19V04m@9L z9LQQRQ$j*bb-u+jK%d^p7iAXRp+sFP<*q(0Y)_;zjCx7C^>dE;r7Z4&|7o*?sFG=x zs>~pn*tafL6B<7fKEcn_vYQqVxs<5;G+07hW`rpNL+2|gco*z_5;AoV?`uDzI?>#jKqewxV-wlZFQ5`gC{YH`vWMK zUUjhirc=q8G)+j57?=;tMP`miLI3RJ7)!)`9)VO8@qH;7xUU)|w(v(OKD~d$pJB*` z>rIuzW+H-}qQ_8ZPC!A-VPs9h6{Z;nz@fh~7i1mE)rCoYgN%y3FyH(}) zkuP^!k=0jc%pT^gd}q7jH=Q#Cx&2`3w+(C3sp*+$ZqGyUdr)S-x0lf>P7frg^AAvZfi1={p=}Vn9)jhD{0#CWqg+ zF3gk>Uu1jWlT5KSojR(G>2mw}0>>YM3+VKI7Zx`*_p}Zj75Zfbd%Ki>@at3D&POV3 zFY!%sZ^Akbm<3&Te0i{p8$peZ-|ggx`y%x_6QmjKHT7eDASI$`Y_sZAJdv8(0~^N*dlOsg^-K-B7q z6XL}|ZqT-l&!P@VCR8g}N#uNAiBau=OP@kqgX^|wCmyZyg@AH#v#G9{U$Orb{|2to zPsP5u2ATWiPEt-qH<0ZPXi#VCjT7 zBH4)Y#jW@hkfEc4sii^8GgVI4H#)q4`N2+{9>KMbGlNblI=6%s%;FrXt!ZH)cNB@Z zaC0>3J`-@eqSg{l326%GqkjVRh2pI*RQxg=5Y%|4Ued|#E`96vlVvMv32Wb4q8z-ZYn*xhzYjO zF@G-GI-4x5cHcDyV0V|LtS8SrD|4C130i@~YX&9^ED@CQYd>w&1>!$w5SDc?9=(PQz2A(!v10_m>ZG(Ur;$%-@=- zm$rA__6U-V9LVEvywE*1m%eeP-`Pw(0^#lJXe&D|7PZ}bE}XoJ-cCH;6yCEAbd0?- zTZJNyarpL`B-Bh-jOFd0VpQOx&lz-24`y#VJF>8|MsE-5{_X+RkV#mOX>%a+ISyj> zlYdEw7kE3jFId=FPny)c7h7$eRK`Egz~`{WG0bnBS|HP*IpQ8d?ysi5>dcl^tq^ae zcQo#Hh|!|6H*8KM`t1YEtvrbFs=JCyvb#oSJ`ZYh_JHG7O8qPTPJs@UonR zz4HQolwUm=rl>Z!p+7FQza!8;NG?jEFny%|xMkCywU^4U;&d-Dre#4cezUKEFjR+y zoY1&ZSub`bS+h~qr-!B5nKq#20bHZSIXwQHz&_C=GI)C9FS|ilw>YPhv7)906)NEC zP!gASHkk$9eTF?#2mO_jOqAP@L~Ws=_h>){7HS$t_A3I^35LYv^7V>czCw)263_h^ zW7WE{o<5hHa!an$=#BF%5}>9C-~tP!aG{@3x;tG+zsx@jn3^b#39>qzmV{FF{FOSM zew6zFb`+V!@4V88x8flhhcey39R`m$J;Me&1!*^aAF*U5K7&wuE-l7fQB-`0h2*&B zmo&7$V;dG{s2WgGPUoyQ@ zV(;sM6GMJAnlU%2;?Wa3aEiokd<=v+K%{QZxi}KOV~%KL762ZzUFQGw={bFxlEVq` z)o~d!5YY&%ybRJPsdF@LG`)^AfTg?%RSm*P6WYLDO_Xnv(;e@ujc>K>`Rc6Wbc^sj zYg&&F=`$&-+182IkQ4PDkq7oWVZ@W$50EFD>_uEYx;KF(LO)upGg-~lbS^L=bQkut zVDAG90})ob*6BR=?QEF$NNnIM`)CXCUGsBTcjJr-(#80(=Z_hgBv6#{&yewQ7{lh8 ztxr5vI?ax)w+qyDbhz~D%lZ8)sIXYAomiKd2V|+7KB3`N>N%3uGUXXy0rN#~S2?1= zjK8O?4q1U!-HZH~GA7wU&w7nsJ;<&3R9?+yJ9a@yhirCLetQ=esB$~P4C#kNyn((u|uH0`5AAVQa+-a4j-Gop6}N*V?bRUQF)NJpHRTtWa~FY^?C0@XB<{iAw8if*tnyw+L6Py{ z^NBS?mBi++vF*;3+ElcJRysFKYtS?JXG%W}<2I<&87^B-rqI+hlNy@2;#*y!rV$tn zx4YtY^Pz4nzVYA%JB_gx>q2B6Ki8TG4E@AJ|oC0f==iPfUcC2EtM6wIB7}qpcbB#2U&r6lA z8!A)@1j{XV6#IWQzYf4VjvAs~U@djhLSm-YIcIeU{~u^sdBSM*0Y%o#!h|imOU?y zhmSV<4!Ud`Z}ELTO+)ciIcC6S^lH5q&tCK^;c1nD?^Yvd=UqlT<5<(;w_lG+ws1+% zVj$GaaX@^D5;{fGE8~v_d=-%Hg~0Kz7Qs@3uc72h`P`+BVjm8^Twn5~GPm|GM2gIB z=YKJBMO4d86i~64%ni?w@ciXT`ohO|qo|^`m5Ku&1xm|FgOFfoe`2R_h+2a3bay5Qkis ztwbdpHN)hhtNW)R^?6L<*4vucAZTkAWort6h&P+lzrenNre1QqY%lo8c3w`7l~V*j zV^-X+AkI;yJ4YjSP<0{j&;GQAh7N+8M!q)e| zn)?GrVFk^Rkb-x?Om$cA{S6yUp#1vv1FTkNZ`|^(dV%bgfcSRrZ2hMZ|8ei{#~&4X zPU*hCOCCD-GB*eLt(IFiP3Tew`kDou#Yyho)0I1^*7tV$u={4u?z8hy;^I)VRtic- zykEe4Qz5DSRNY}Z{I;K`Z)G#{-&ppk>Vo}TM}Eg26@twIe-^Is&ay@>@GIaW(=2PA z1kfLzMS^};m5&ZiQy%N3l8j_6LY6#}E{kt^%I<3}z=@Z1mfPI`B`eqmS5H@=cEgKN z8UC#z$uBqAD-mDWOUdax2aaOmaNX@gRUqKcUa@FIrAHFlfcoDNcjVXd)85z%b;>o? zhq(&_@0EA}^BHZ)K@|AMemg`k^gzd9XsnWBZgtpH1YI_}|C z?DYxDfx3^3`1=N)P@@bH{jDUw&ZP{zca@i2lwJ8`d_>#Uhl05hwxHM{9@71Ch8mY% zT6Er6??;Wth5{15-FqesrSw9qiPvjKa*s^*2#vEXRRRaLQ1>IXgFf)=u{Hwn$}CCZ9xp? zy%ucHoP%hjG#)HP*hpN>Bsp7#ej_;sCJ_=Lc zk0c~#8gFHM>Q1#X-8;+!m>%okGBnzclVwpIhM<}M_bouizz3?eR><0?C;xN5e)V*cQHoarhe`EHo0+I29jkV7i+mJyV3caDO zb&AD-*lbGv>5*36+v4?Jb*#o;k1{z#RK?&Z!xZYohc1|)#kbIeEm838V z@L~YVLt|-Cg~X;-t|a;QwUyFc&D>zC^z0)SPd!XFX#E3G_mdA!tstYC8{butU#Apj z>Rfibzxp7E_-rRwW_M?o!cBK8*&BwS?s?B#mRgQ`vfs7HwI9ew3GsK_^FDB^Q00CM zh;1&@Z@xCoj_p^FQVKW4;5+~sGO;2Q=KtvyKNTVXUg3rh_NCwH5A3>x5Dfl1@* zh~}1y+G5ous#Q=^O3%zI{jRE1U-C3)G1`xcVes-Qo~({Nb+lPC5l zVw-3eKYC!^ZC6-#Mb3foffuiGP+Q;yqQnQU8{mjYaeJNc5VUUDZKYYBFDXx>v>K^KtZdQ9dpD_wbah*trSgHC>1_bcP_*`8;WB0Cn6Vi|1U22zR-DJK^S z)%XA8F%-!V>Y2r6c*<4l>)7*=tB>n;Au(xPX{CSb0J0XJN)h70Rv5P7Ro~uIjLj`h z@c+PO&+n6;lloOo+TpOa9W*cvr+Zgdna!=@75Vis&(&yxHbzTd04Yy89|Vg3dav!> ze@|$_VVLArHMZPpTu50Ubn|Q!g|}aZ!I(bx=V2}hm=4=?wi59@RNs@a8g(jr&pzq=*R*P{I(n&c#`8?iB*~I z?R@J7xR(cHKXuwWvVN7_F54_0;0L^Y6V3s*fOtG{*jv*7=YGXlJD;y;=7p?=h76JG%yz3WI^>}cl^lN!4XM}sGZe%3vrol`P@ChWnF}J7- z2%M>q>0|s<2Bz{`(PU4fS3FJ|DmoxG-`@tbIuEkrYs-4~JlLk)Nrc{^RRlrMA6DNpyiq8Q^k%J&js(Uoz_DDBdLfFG?W}2s0o5z+4LYLwTaBjjC6I9#Zn!@ zKSeDUHn-Uvy#_&RN-Z|B#1wwP>jPoQboy-ds&0=1U^5kx{p0FQrqpEudke(g*GAm* zJ^t;83sWJ9qwXEdN;}LyT9Sb!X&(& zSu)#SSfZ-TSc>cGZ(nu{KYxg94(Y&!fp+XMJ3M&h)=SNnv*qQvH#AB02HDLoc{TTy zRO8rXc$Rh*O&wU~ynW*9`&-;(yS9Y-q+hh(U??wn{rad3Gk;Tt{tUL3@)j?DEVzi zf0w_%l$9jseenwYsB}b7r_+SqC)n9d_C*(CDs)O4n5i$^1;1oz>yzAK?_coT@!WA;*XKNM1$9o$FZ#Xj zmHm|EU!*kb+V<3`z-nWe{_2N|o~rqty6ySCHVzfBX1;}4?M{_JLf~iP--uoXf2K;^ z2`uq4b3|5&2gS4|D(jMgxd7g5q<<6Te?@TIe?RHvAnv&-@!p}X0RR>wnxxhF z5NYcv85I8t#mb({t;*{Nc$B7u>L=KBQdj^~p-L*tlT@c)S*PyEkZh-HUB6-7^pjw@ zeFKw9+urV;6#mG^BRG5W@Y)v1sgIVjG8t)6c+T8U&xg1NB(apVKl0vAg8n8S1_M8&4g{d(IVKp^ z^BL1IdlEfgJU&QqOc&P;!tg^E{zp&xSASUtvfL_&Jm%_*(eN}hvy)I->`#PFcX@`g=;-$CxbnDr1`ZF|(QkoW?VUpY_;MK4 zUyPNTzF%yMP^D>P4npEHPtYL<9Y9$K6yE-Geu4OA97S^+^`WNleg_%k!#~O^-qhY)U4#R zVFUQJa1UaN=K)>gJovS{pH>g6VK_vZNjGIm`>9)L>ph!VejMoo)1j4390;xgn%>yykBF<-QB8u#NZ!s~g-wP{Z|HV~Yh@!1#zZ8MR?cva0XCBoRiwkV_daw-p$Q6;jD8I!-Q2TvHlt}m zn#i>+m#H~?r6|d6i&7?4u_8E9z(#$tBwD>RX7UJH<*DmFnZU`mxe~sL7u4|SspnNm{@q8gm9IWDu~Wg^lv7VxHbXnWiu{4on0Don%z-3IXE%fgBOq8w z5tW-l2t1#B{VToHDu)>q+FHW`z^35X9}R%d-K} zxXaHc#k=vvH2x(|y1sE>j#nI#U$ZB@C33oP78_8J2e2RUYYZfnF-pK`W4x16hA|}7 zZIEjf(*-hN_XGG&v8DH1b08HS^gdNrL;m)brd>BVdJ{1A7M@bG#Pb0DgVR$e=9?)~ zzm%0M3LVdbrZ1!Qj2F7%98+_UrGR~e&|;~-%CWA?shwZJiy0-N(__3TOx>WgWvY^d z-CvD*6gD?f^MjH;f`7B`O>C$#%qA43SLn+Y^$ zx^e5S&0M^JLbzBS4u)KUMb?Q*E@5TRmc=1ymy< z$d%B~ujM=wneG9ryem1!m()u-C~U34GlqUHfI+EqMdrdc_gtKk#foyX-@N+cbar;T zT5vVN36v*+_Qc?!{m0$gm6AFm*d#FysL@KD0)1~R(yFCZVwdq2GBM{P*uF)Gc*0%( z2tK3Tm>%B?R~tJ`PjL*eC%B$A`rSY1>4Ag#5dZvsm}AyFpzJ?2X|so|8-fcYEvl%k zAjO(B8|2iVX(4QOujsEc%i==GO&m6xC_MCA*Z<@@q6#h_LV^U z$wXQ+vY~(-i7JQqa{SuiO)>`!HGUHJu)*ZBWK~wo|M=~4nLRHY50=d?-{PFBUuIUj z&2r~omhXsGkiJanp<}@>xTBaVZB}2z^ko2@`U84|FhO^LL8eZ&yHry-E|WxFQOWfk zaKd`S)Wp-!I~`jQBkDDA5p#b!;Rb9Rev=nS_?9OyeA@f*w$M|BTK61sAJ0jvK3c)( zb^Nc=)Jog`5guN!xV;FbG8(b86M)r# znN2uG)wR5b>EcsL+Z}e03d*2iBfZbTlcGN11<=&cTxy0Dl8-iXMR?)G>b)_7vsbvU z!}-wk!n~Q`>;#+jIzH%AijuwA2Rzp+ud9GBLooU3TB1vCZoTS_0yvh`EPViQ3=h4T zoSo5r^-0hA4lO4pD@K3Px)KsA-jM!eGJG-VlfqlQaW^Eb+A3RL&{+LX<3b$QZCIAq zLXGGE!>7$DX8c9Xgw!OGNa=7Th4Wk#Pi7b%Nqe~IkEHMkMsJTyolaWj#!+>?L}CF+ zF2vR;oxKy!E?hZxW1R|!k_*StNsW&aPJrLv8-ga{<;`(oUN_<0&&x?a7z)%ZF@CsE ze}N{C`a4lQ{lqRwxGIuXD)$+nd*SDD>xwWWVzM3+%y*{bG{gYZi_aS|^C`bZg8zVS?2MYVC_W$@J>|p?4&{TvA5AdMw#k^+;id-VeUvqYU$mQXZ za?fr;Mt@P{`NPj_67dvt-p=hS5(V6kyoeCJ-eZ52$=&)XeYc7GbA*T$Cbr!d$y4?3 z#Pu*2u~E$}ZUb}{(zfZ7T)k!SnE=V>v=WR^91Sc?D?bkuOCPL(ZJ(R=2T8Z}sr`ol zh#BbJ`7ONd4(0+5XiZECQ-^(QecPEqG)wPVovFeu;_ELJqc$)f=2NtLNKjugSxAYd=8Z|Fx||TU_WecwVM%`QBH2k_d680PExaT&-I@j*jle z%$e5VWHPgttRsVL4J5R^|Dzt5I)}vX?e?O0BO@z*WDO^w1kLHm;GKry_i$7&;CpcP ze!5difUw?Y$1zi@Jrt_{!E!H9k6JtXk81xNPN^;mZRFC%1#3w1Mys-Bde5YXs@imM zhZ)UVOQ~n|u9FW@bYd^RgqK?lWuj5xY;3lKyf$bmO-kn&*g3le(0YD}d; z>3r!wGJZ^q53iWZ8nNiXvSxvftTFU%qE#M0<#3Gv%?$RYO_LKDfjo0jqs?x&4{^c00`!d+ zoeo@u>vQQQB}&@p_b#jahs1TVC-HkRG#=L+)5VNjddlVZfqWl5fa*vXo4=^9kFn14 z`3fl@%xl!BVwGOx!7Xo9O_u;Oc9MbrBe1Bf<+S2#SA`qIEMEu?Uv6Y`-Ae5{*Xq)^ zkELa41#@;L5=zE#YOo+3j09Zr`N2R@P)ki|I%o3(?d&XaVdUq*&R?d=_^gbLIlFSw z)<>iJgsJp=PXykk$WgI<0B^FbQEN!2>&FJiN9@k?CfLS>JPxUptmo3gEL%^uZ(LEy zB(KMx-@hJKW?rh$!wxnUC2x_(W@>dbyh0cBRXm{~S;%cZE}h(DL|s}D9npJ z&*Ays_et%vEY{OEN>5z7%>D>7Er~vF5IdL@{`UEp2JkrZF7oWYKQg-Xy+3`p`Xb-I zw)+DNyM^q+X&G&qR(OWUQ?TJ@OW=Cqx59A&#}!a${y}r$Qx#e1I#Y(r$Z0O-9JtR4 zw*qC-NIEUgk5E_JE%VggdkW(q^PTvv+aT*1w)%LzfNKaNz6R$K+n*x;@2<1_Jas6* zF4LWXC`59BLuZg0ZR-mvWIVMET}#ljoBD!H)}re9SPp;u<8Y+_J_J3s&+pZ09T^6Zavvz!0@L$cEnnb+L{MtWs+)R8oj<(B>!kl0P^P{`|y#02&ayLO`A%di7&M46f`Y&3nLR9gP%3r||Y>nkWY-quc zS9K-H`*>vl+ms!1saFl9+ZS^8zevof%*92?fURUhP+>f5+(Kth3AbZ6A!N^QGVjqGlwLl5oudSfhnvD zSLNnVRy(a^fEtBG-3MXqnak)3c1g&mEu30m6d0yC@3 z7IY7+z1pQd$&rbAH0kWUf-7WPENqJlumaRQGEoF?@00?ALtBzmDue8=CENk=am)X0{&_KsS4L%TOuHHg^bjuYg27^ zbkDBnw4ChxKIP5Km)(BwmFQ@Jw_>^DrT)<@1x>O6C&X~t#1Bg!5Wo3qo>g?hYP~#r zA+?EwV`7I}R>z)j*X?GT6mInOeQ0cEU^FE;9!`uAG5^C#mUQ8sM4R@`@uwlBFEp;6 zzR-7iV+vnD6a4VZH6G1h>Fe<8Q64)xji{3xx5#6V=i?SB8w)i7(cziwj0tJ8<)_07 z%e8WB*MbeNKP)bpOpJxRT~^PNLN}N@{I?Ah)PT`awa$vQHrq`VO*6gH?eOCVU#V%| z2{4SDyh&5DQND`p-uqOHl6*VXFe^q|4Xcz5>t^f8GMmsX1V{xCsW$i|B)Gq_v8H}_ zvuZK!3^Wll$Tq1o()g7_S&~vF;XYZP;B~;~S=!%*m-j>)npaoM(6jwz`lvboX0Cwn zj5m_2{iPLmB=3QdVo!1@S+GAVnnD7b!3(h-@Ol4BC^MaVEd+sEm1@4(Q}`<($_Dw@m&(xst8fL4wqA1XxJv}XJMexeOh04 z^khZ#vyVe|AZP2dnEPqi7hY`FD$js;Uik-4Ks8UQP2dQYXNo(Ue%1S{%)b_#364U< zyQZz6W|3r|dTi<5ExoJfjYP7Pqgr1%`l;PVY3=kHYML9D$9ksSD}_Gk3Bx|>vLHXZ z=5WRWqOZpkE1*UzVw$GiLU|2ly3JBG(`JR!Q^bAwq^F_S_OlgeMXBdsv<6Px@44+a z`G%K%n|@+x@ol--F9$({Dcj!eEXh(CABDOV%rlB5gUxzpjVuHi4M%QgA>6hE?Q=4% z6tgz!eDb8pV^L@-^6DdRJPVOJqgkQiYZ`DGqgLqTZ=D{2a^Sp)f5$Q{2C&PseY5|p z+-^ITgV`}tXMM*TH0r;HM;PVgP+(Y!tTaFv3mf7bv*YE*i?Nu$XII#8O|v}k3o|B& zd=h9ZY7nnhcDP36gWWBCvF(2JWvOks#P}~EUJkYt5$!B?uafKJzU{)Qum#MxqrY5I zYk`jvYv5B*%Ig-N*WczKK$?OFh?v;TYu<4YTtrgN0x)iInGIf)qv9kc{pw9irCx^> z{cSuG0T1zupUfSP67Z`Q}e*;di%Em=ptXTOEiD{eG+|ST| zGWgP*oSNU`3jU1KO~NRqiE1w3Qy30F?>&cCg^IHY81;K*6P?AW+(&j}+<^m(SE72q zFuuNPtnIf+D&-ui{u~X$5l=_V+i-^u?tN~MHOrOkay_}N#&ce@0f%RQ z&hAhBKMTNH&Fkg;%)j$bd5M0x<}=36f5F+Of$*!&e;tl*y%@5DFL2x2-sWBN^KnjW z3CcrM+oxZh96iQ}CMQ#z@18AfnkEi(U;YQP?Ha-xQN6$*3x$H(UMD)*^rIr5PP637 z`5}89x`yOubIt9Gt&ABW(-ZV&yhi=i!)LxX5&d+HZhecd1^EG3&o?{^0Zg5Y=R!x` znt(n`0@QsXK(ThyPnM$XEg&%An{1=t?C^10={O3FI^SCTiJ@G7R#q?ZhAA44)hc;B zc>Hh14O5KLSr&LeKG>*dGdpwe#8aS z4h;X6viD%k+!&iG7P4ZGi=Ei6y!D$D{`?vG%5kPAS<3t)uWe}!l})R!{ddi-ib=lq z!Xv?Xz3JIUhf3eif%TAhaCX%THQft_m4Fyb+9@w=CF6ynhUK>$u@$!xkw#QbOM=QP zPYCb(Ecq_81khbx#*f(G?`BrGP;*$yTgh$j=gSc5cYkjXkiq#~bEqE6cID1mmfW-2 zJ(PEQfqkugExXU%p8`>Q-aa#x85+2;oK{I9JZi2wcGB|EYo=}SLz>Sq`_>ip$|F!m z?el}!wp{)t!xuSZJ|9Xi8DiG;b{&G$=u&=7HbgavxoRI`&hIQotD5c(kkYhK6` z$h2C5POIBJ58~FBFNtd$S(;FPNIm=mT-RuS_5wjP13;DdUQ6zz4@3&JioPUzEc)@OP1>7NaE}6s}$`g`ftX$?|}@4cyFZt zwMv{0wiCvF6J_sn!h)Dn)KK10w)#&b1^iPNU{yc2Wtf;aE4Odw1AMwF#xbNT(wn8z zG?x|W_jGKx`7ZcgHn~7gUlyylvubC%ef9em7frMh8HBK>ASi8Cs|StSoRklWdO4-2U=)wkCH=h8CgMVjb_&UZB(0PVwX!h9putrjyE!s2%GJE&T zFE`(GDzZ|Mfb8-E=HRVwu<{4{mNdk!R74*7pDF#i?Ssfxza}_FjNJM%plhh=z$HrB z32?H6a-}JCc)PZj`Sl`qfhDJB^W*(*KAzml+r(AcV~mRlRRnY%lh@>euVKwmF>=~* z`pCQuXQ766m1R%7D^ZKEqnpD(#x<^r3N7}?^s|P@V0}~a(pu~D?a!nzc*&E07C24W}-GxQtgH=BQcDT?!DFF!| zWC8-MJJUlOM!m&7BBCuJg8>ujLNBZ1N_sgKo#$>tD0l;QZ-b&$klmn!m>F#o0g(+^Od}_9nws=A1M-Q|lYTQzk6H$HDu^$3D3Rk-mKhnm z=TPP*WacT}1>!V-JYpwiwl;`&A*Rx9h5v1Wnu$o%#KJU?Hx70`8-5)>R)oF6;#g&u zcfA(!u|`6djY#ob6n|2Gxmh`z@ACKTv@rM0u&ql`ThjA5_|w?5qubUz`Lbe^LqG3Y z%HEi?PCK39JkuY7G+MltIG^r09f|M5Ln5;b#*UiV0RWk+!@u^X-s9dmb(CqV@0US- ztw|}`2}?JUT8K5!?w7;F0yg{`7BcTaZdQg5XO!2hQMz`~v7-<(egRWyK7Q$V3YO=b zU27q7_x$WN+{c{4oa0`JbMJV&6=3fUJ^xZYChamN;HoeT#fk2=S1XuuQ*C%=wKBR8tJ?cXN z@1r*$=q?hYC@UF4d`#g^SvrxOve=XPwGaso*Uxr-!Jb5-JqG}xHRjZ1xP@>W3fqV5 ze-F0(SbN3;YF?unj0~ua*`OOWuBJXT-W=s2E&;bffuUEolRZHiom;;PBjk?*F;}c1 zr-ItXH2n}y3A_=;KZ=z^iesX+{^#9=^Jxd8zDZ1Qb41$=B+rQ@(>WlHk48SKB)x*4 zmv6=ojw{j`47jYSFa}>^zZR{5w^tg znvLG76N`7&~VU5jG()IY=ppy*57@IL@jDC~6b!6zL&@)1p zO2i4$TdE$^avR|onyIAbL+uh=6p;0I{{2`h2`*N*OMy}V#&mt4<1Fvl8h`akParxa z@CixoSq-EOnb(cgu8 zs}nX%q@SB&K9;h~4SfH7DmU?>f@O~;yz`}UwT=OMR7!%!vI+6{l}4yA2%GlJVWU;G zM>dhoW701V0yd3MPiy5Icj*G1Rt3tkiu`_AOzWJozx1De*6eB$?*BMMx=lD2n^v&- zMe7Cl)q5cZ^ZaHq9@*8*-3njVo`DZ@rhDoCG%a&L&+b$>ez%P`O&m8o@;&j7m0C+q zkk3)WUN8jbW+r?SC^#jbXoSxcIwJJG?`U@132@FYmwn>-|zCIPk7nSeDBs2HXi6Ep#f2$%*JVxoa5k!7}Jz8;W+p_48gjPYphl?B~m-Wo=~*# z_taWFQ)MlhHrwn@P6wl@BZC2g7woWFh1Pw znk2U@Ad|`$W;K+S#+OceU(63Y;Ekw<{M{;cs)m2LGkkk;hXr(W#uBOIifFipZD@Pl zp2_bS=u20`L9x8j_*E}9AY zI&k%=jRJ&lrHG@1>iFaJ^7YY{1$quu^2K`C08{LH?!mC?t_K)bw~3lk**|ea&*qff zaRnQiYat2K)%R5v~ML2<7 z=3OWWEGQ-%We(z@E$tjr-B?*74Yie>w{-^Kjc3jxwRH8gQw}8$VhX$mwCSOa>&~W^ zgdyrRtIU6|#Bh_S9r;x~!D4PJGmsaK;FhjHq(SRRY46kIIrEhWx&>(Uxe{nUg+hEm24DZp(`JbZ#Z2c zkP$hxjka%VVlcen#dFTOjNt=y@<-8DnHP+KxQZi#%13ke>fgxKaKG?Z@7b>!cvl1R zT9cY}s$?Q;K|%~E43BSJgM?|HKa~!};|NdR2}4Hz_&sl4XY(#oSHve35ME~x&h~F2 z?D{#HJMxZgQBzx-{LCQuCyl$TEYOMbi7okqS2czna5grP+`Q32{a!FuV(IBlkjH=C zJtLp1iEXHPdD}I@GAhJv`S{z_G@s}>qAc|tF^GT-OR5|>$4qxGzQLX;ijvaoy12#8 z{(Oyn5UK3A!BmT2NI5jUCU#u@MUQFf}vinQVPB~D%!?=pK>orQ~mjv zj%*7$o(Y5Sit8e^KeZ6)d>rlL(1CC0(-@itEF7RPd7W+S&V;LkYfMx2ppa9rCtowg(j!C0?Re;e?X$xst9 zDBekUKI);4h>(7S2b@Wxicx(#I|8!2r)*zEloS=@ERXasdV+TlR-T9KAjp1MN-35# zkhPHe0QxLID1YhH8$^>g@Ur#JmUCf0>To3N^~bUI3^)_>YIoY>?YBlV$Oc=Y1kW+i z2jqJT;P-!s4-RwLskwyF%w0Kii;j7+Um(VtA}Yt3N1cvMs6%fm%e@=xKYoy}L51^3 z*yS>tXnak*C&2p9_SO2`;la*@R)(jptIxQB3f*d?9R!j1@*mHbHWfGC55=Ecta~U+ z`3EVVYqA(bh}ATa-_`5Ov_B19lDfMbTIxKY2}1!(8UEhm%u$hDNXtW!R7S;cOM;dX zo`eN;kHrfn&>a<(6oBU#5Jx>(TqK$E&%xUM3y7mDrc&+h*tF9 zff&0vkE#bz&AOC-l{=KHiT95>>;zzle=g)lPKa%bSlf4)f+Y4hfR6tIYNU;p7`s-KIm zomMrtdo6y82I_~Ic_+;DTMB6XTBSX0PZYD;3=wno668KN<1J8*Z=dpBXiF)jW80!B0tGQ?wQkNq$#dLnl=y-!Y<~7!_-q%pIwuXlRWN zE8>_G*&F-?hXC#k^ry_9nB&zFwcj0ua|X{9R!OFu6SQK4{5+CJ*H6B+GMs+`=lcDV zqD*LNFV{$y$2!{5tUNfp?8;&(BH9gJp*!w+ARL2NVR5p_$LF4|eOF~+%sL@Fo-uCK z-ozrT_k%;d{_`Ot;+OgrpGyA7rkwh~xp(=b_m1LI?MY;hgq1vHk(T#-FnEpJi5ePKcRyHb3sCs=Pc*DNw1e2Ktm&>u=UEAEYeZz5m z91yp&v+!~Gk%D?4m`kt6vXpUzo;?X6ysF?*pebY;aw9~aBtFy@8{WB;oVSjDi3%~( z)&ZKRrcCST3b1t-d0^+?W$#{I*y@Tf)UIF^A_xr=-Re7MpHTeaxVjL{dz$&!9W$_u z1OCrJ?(L!Bbg=T;iH<#m?%JG8*rX0zO;pgmT3j-O7dDMKj>p~KYJU>oAZz1Q@np+- z1nZjOdJ_gg1@@=6D6Kf;Qk_S1`wu2K7H`v*E7stp1TLKov#H9Ird}q~CQe6p+7HfX zuM;CHJ*3%Hd_TlLk}qqopBe1A!!=G9G!6j%IUh=Ql6zscmu1?+jpV}Lr10t-$*5A~ zHUjS<+Fsj~^3m@>!3hJ6l%i6L(sM~%^jKK_+OG%^sp_{zvK3Z~R2Wn7N^vK2CSf$K zq$Q7Rbm{nV+s^@k?f8OoRTW{yF?1*BcV14GMPRxX@|50|93G2*m*&5w{d6E`ciF~F z5!(zI?zL9b^AEd#pV!wS?Jb%ytyEn4*#%7tWf$niOhna?$*w2 z{`~6=_fP|jiEkbFxaWY|-* z?{_gSXA-EJ4EFG>>h|k6%u37F{`D4cZMbQ$#VS1;V@e&13M@jJuW);En-L2MBJZ?+ zbV#e)O%!@cLT|R@S!qmCJ!?a)o6;qAo68dRbl ztb7)rx9gX0)?Jz= zB;?1Au}uW$=c@u~k*|jEDVs#Ap)%fuiGr(#s>D^U*HS@lEAKls!E^ul($5;mb;RyGR85g}$03H^3s}bS=N5&9eL&@~_hzg-UV)Y~H1h z74;bpzlU^J@oN~UTV=n23EJP>PW>b@H6GA7T+^i=G(nF*uUI`14y$b7 z>OJNY1S77fXp2-Qb_5*4*t@7{_f^Rtu9>wM8-?jCw=S{^8Y_3l-!iI|ZN#mmTA#n2 z`is>@GOiat{V;|`XXjD921@T~nvP$9){%CG4zkGCN3@tK(zJ4=f3uW8KG*kPeu^4iFu^l)%}2s zzSs0z!yCnq_d}&E*g(;i2{G~?B)ppy^j9h=x5`$!<~}}p$0^(HXqhk1XfmzQXQ^vw zw-MaAWKC?EYlit6so=P80Th^G{|!q}r~XkiBEKZ2Ffvh|d=nYEP_Q&~TR_*0)|GGU7?p^v&gK1*@|SjRET zn;Vk=^an(IUFzSJB3fCd?S?Oq+JdsKwdvn+oAr{%vxGp_|98h_uP zG1}s7!>E4TpO~3#1E=S{qogQHAN8KLeg%SIGMKGL3saM!$9o45_tNxnV_lAwnyiO3 zQ!Z(|$+?oH^FBg>LQQu@lH}v}nO@fKS=)>TK4i`BNT4U0YD#l_psPg0HTv_Qs{tyD z-?ysE`2Y)&Dr4et(V+Q}^Rk*iI};x;|cyFB_`Yx>XikxJjSRu}iwn4%x!SxN^hilkDi zva%e1JGIh$e}*n6(#>=6p?Yfr#eNyg#1EW zpEew)2m(u-|0Vi9^3-b%@*sAe0EWYhq3nFpc>pAe3QK#MxW28Yv6eyl+zB1L``?+4 z;l6dxn!$L-qngT$pXkEV_~-v5qv?~m4|)u?{Y>mFyH|#x)p)cK=5_~P@_EUe&oNxf z%c5UiUgC@D>2dk;&UE;~k@j!=fWh&P0+2{0iyiA`CfbQg&F!n&0-#owE8pB_!zaS4 zy3)67;r0Uy)IN55^{=(bYC_9fYM?m8@Vq~F-;-H&)n%~1ULi&KIdW0xn@i?t61AIdmP)7n1>@MpH0F&Ox~HdDjT zh?7%Q6jZJy+tU=4k1}meH*M-6{cmDE4oDdo#^4Nm+`-%*yvzG7_q<*_2H6-6y!Nrb zAjzTM?r|Qp+lEK7zPgFIaY&ngjqk|=!^#J!xw3uB>V?t21d|hAg6mG7egagq&Rs$b zZvHWpgi`>lxy;S*%9~>8T(=daY{~dNiOz}k;=?=0? z8*|mucu39_fBp*RVy}ab#fW;|9pB(#vCZFvQTvv(&Sjs!c^73o(|>6(m|o!>#W5>` z&M{Q zE{89!TK?O{Obl0RTsf(UMdG!4XRU$nA`J1HGF>Hkt?=kFh26b%yn7e7X(P2A-u2DR zYlvTDcS=%K+|+rD-5iuQQFQRuN`f!+Ar$AI|K>($%D^%}xh-0%DKWf-a|WX5I61ce zEVj(a`CnV%xU%2&pj(l~pB@B$?6_4b6PcH!G;*ZA+oja-b?wjryq>35YEw)myyW#< zEm%IjK>kq4Bn!=;&<>o?a!+K(n2d;2tXG}{uQb>N0A|I*7np{$^PGv{}6JM!A zA)Yv=hC0HP#wH~ca+Bzok-3G~_7NzHU(|9{VDatObyK9z_^WfxtQ5iADV}&Y8SH06 zrM|%>`YgOlrNfST@sRgUKgIk0SPqwVazh#Vu0p#qOOgZWcSawA=lzuNTPsz8B(u7b z-jagmGkscVypLXQXLLc9>jQVsiYzS~w4Q81VET(NmfeaK4Z7;^8uJ!@4i6#{IJGD_IL5s zPA!kOpARFtvC19&o#glfH|u`auO^izLtdkpI5l-RIJ+X(l&gx82QYrC0UFovh2WFP zP>%}3l6yeV--}-Gi>Z;%o&|^q#a)c?v`P3=t-HGo%RbxpK4K%i=bPs`wIxi;oQ6zl zjZ?D?s-JJXlDpTPTj46cuY>7CpL5`oP7~L7l#VKk3@yc%bsHyivLUeBw}TQGDb7~w zLrK40+Kh1J$=DuTOnocQ+6ah1#R%$GNbZE6ddA4OcE8+?S~z$}ADZ#wwdXFy_8K`S zyMZO)h1)lUqBSKOJIAR#3u62I&^7fu!89fDQf>9Wg}FtMc)RIL8TKz9$jBCjv|%X` zJK_0G`y@T*-~DCyEtCio2Sq=bTmQvZQ;RA2P(@x=C~+Y*?z-GRgQAw6G#A_oU}t=He> z-;+6`*{(bjl3|kgHOu#PE-)MVATIoA#Z8kXRJnzog~*%5gN7%$OY7BK`IQt+H%W%O zPDo2G(jUFF`1_IpZn)ChIf!ncP!yL4GsU)uy3kh8PS(;RqT(V^qI6Mh@o_Cs^A|R=fgrw!&QJ%_o z^6L3~xXP;Os+E;KfDw8VGHzV6NKLpMt*Z6rYX79$igRCk``)KMQ~+|{XkLZ;MiKDe zS~e*#D~ZzC`jJR~nUJoaM}T-MJpGFf>wlh4j(!1rrQ zgT!Xr7NLPf#$v|O&TTYS3CZxDmQq+q$c0?RRbOjfY5kK5)|IZ2{RvPXFLmsvD1 zufnBZI1g&w8E^49Q!9>j;0LTjg{+yRgn|W+6eBoa1^#rh5P^wf#8%NLm2=IBK9*#^ zmt2btbuTRchF8FRG!bm#=@|i%!hn0r7f^s|EYalB{a(zf z@6k9dV_wDK1fofYRTR8~)NGFot|Ls82I8v(VLE+$w zuCXjLT1M|dRQ@2b!H`Toz#^IuOzs#5p=p&8z)+^U$nh1%l_cBS#Wp{0Ecmf2`ZcifZyvDUwM%^eI! z`8AW?#{5U37lw(6=4N|fi%Ey$P;oNEng8O@8b}v8XA}eBpZYe8-P&5(YAVg9-=C~~ z^A+kq(Z4nTOP_vVY;ObvjnU_o*0@M33V*UNUeW&rjq=>m(YY1aK-k<&JbQV2{~+-u4L=Y3t@JYuv&8W=iii{x+OW}N>;Gta>#(NZ_kCFL zjS46#sgn?;QxIgdpeQ3HHei%65JozBq^RWR(TtQF45VR{BHb`TS{N`I>4s;Y?{obA z-*LR|*nQpCeO~8vo&jy&B{Txw<)xm#(e4*3RY!$6Sw!aj9?18odyimZOvJiEjs#(Y z&>w%F2}zmib85P&VdGopI8Jn5Ev8fYU1@89@z1~8ncI#B2MHSF2G7xtR?jAE+-}o3 zaLqv;<*q$mxydcd8o`!N6L*t3MKgy_nTD*0E(!)Bux_9lK@>|Z@Gp)=1jSPD;hX4l z9!(~@{Db)!$(I_}-W=Dt*}W(iuX091Z)xYJL~(0!A%$~{Gap4QyXCiVi=5@T)Vwvs zN3z{v&R5^TXD+o*R?6(k&del|d+|8%ds#|yGf9FJJnx^-j(&QviNv2uF_U|mEV|!= z(}Y`7O3C;^&26Kx1s}z(gZfxRD83D}Fw*on)fTa(x4iaNSK#j*UprmGdm99nv0Obr zrA8@Kmka>8$BAnV8H$pH#62H`qThv%k|fuLODk_=Ff0mOvf8y+|AA8&KtqIeojy(k9fiZ5$Z)&)X$Fkk!=rmWcBHLYg-(A84lRF}-jb#kPU;ad~9+VLR2y zbS38aq)Jgtj+&pA2vqclc$0JTf!{Y`wjsMA->7rPE3GhS@GsY=n4(hxGMSG7#tD2 z7r>HfFcUL1vu!1mCV6u%2N{l*`fklT%ii=-^4ErF3OS_%zOj@XyS_vdG^1s}YD4aH zmvio);WMc+7Q9ld`7kU;%8|HZc#fl|>@8SNfY2n_IaCs!-?cI#o}1k_X%z z2FVn8G4sGcZ2dRZ}Uf{awBDcZzFx1G`NQ7uc!9SzaCutew-42kUzK8)B6l zIXFV!S-Ndx`&ZPhZ&O_O{Iu#`EBxFsgMc0zg%b8&R`I_tqA{-2B`M`8Uvp)PVa_00 z>_22Vku0qsB^~#BmZkTY@mg@SOMU;JcM%YsLGRze#D$@?Qvs3^L{UOW^5WDy>6#_Gh(~{eBv4>|7H_Z}J39;M+ z$&&ZR>s8%ar^i$mVcO^H^06wiHw)i!Y5EJ>0-q<~Tk4p!|Gb8qwMSt5@)EMzX34U^ zG#Bsc1{#h6no|Alcx^?!S3#E&$<5r*=<$O3&RhS7xXw6uLBHS|vxgmwe*hEQMq>rt z@=Lom$Hjz2UF+bbeUJxj0wxAoucy3_sUl;mjb+c`(XTkv!*W-go0aBV?)&D;I=`lS z5RxD3!#TY$t=x6t$|x$-R{;Ft*d#7upr&HW!_UJO*o(nfBy6?~xww48Z$w49B^Iy7Mx(CQMJn!f`4Z>fP%Y*Ji)3r%t zdTLBj7G<9acsN|JB%w>U4XBzT80{bFSMa(=PfWt*5woo1=cX8QFZ#!#Hek_q6Qo9= zG?2{s>r!NPb)Z~sYmsP2M%JL-Hc*6(<$+PZV3>O=^~k*F(nowB<>q3U&M8k%67mm| zR;8wY*|DI6Rq%gD7A6%D`QCTXklV~ULLJLnGTemH1)p`d)+6Fo5zWie0H}lBvcKQE z>C3R!rSHJpH9ih}DrAxUHL26^EPzRyo0qV-b;ZppV7z$7$33%^d~9J+!h7>^vXW?M z!u(hs-VFS3ai^4igy^}KDP_u5v*#I?pzB>ZZXnsdkRR+J5Y4gSOo2bNqrjLE!wRImWe3x<3#%u1^ z9k_WqHWI^}#;_ELj9-oz6q+y1cpkQUA)8|c^?v+jvf6vqGV+wE@+q>>_C$g4b|FBX zbM^mBmueE*QNn{xuEpIGA>vGd_?QMsqDP#M2K0S;@eDP5Oh;nGZIgP!mtkEDFdbLm z8BB9eh*#rx=7Cq3pZc-tvequr!@eM7h1$2JLDB#FVn)|!wW{W&yykm$%9@nVO-AR} ze=F?*fkij+R{o!zTsN(_aqOZhAM?-}SW?Vay<1ERVA zXEF8o0Rlg)qn4@+hQ3D{e>K8155^OSpHLNnlwDcE8Ur1c4s$7;?_fzhhqX*7SxjT8 zQHqb;HcNJil;bPcq4CqE>DIyABKUvWld7B_cDEjz_L>hdL7bE=PyU@~@se}zi8%36 zZ5;_$!u+a$taC*U6YqP$em6yvbg$Cmw+D1>=+b=i{@jpbx`y z2$Ln4g|c|xA?&XyE2@=`;Iq9$2v#E$qgNo*&4N?NOtso5zweFd-T8$QUxno1mNsMJ znr1Y1r3u4&aOzRSSBZgqE6BW-F~0oI7Qxo*_fANIZszIZ&ndfqwrRHS70un9`TK~d zu1=dy|L&l;18ApAo8Z>0{j-HdX7h7P+;y`2tVtDq_3z2|zoeFB<`5TgsUzb_xjV#= zN^!X>3FvuMPp?Sa!OEi>@k?pu<+E-C4Oe%zwRInaPR-!K<%<9 z-N)qe)Kz^MHl^rrjyLxpsiv@GG9gpO&g4m)UQ_q+OBp{!7W$DtnKVdX{?g)CPEVsp z#>aK5^V=^(%DF#Jyq;OGELIiLh}gud9(`ASVO$&EyKmjgzMqccj4NPar$0WJhPMgm zF9anJsIy4ZCRGh{j?e9Z+mwG3S25XJ=3vk9R>hi?{LAMK+~h2YZ=_W*oZJO9Qts7L zJNEBRlK&v73R+nvtYTr_uZ z_Z-#rUbS3j=mF34@KliWX4C|}COm3Ww>?qb=~y|2jKs~t#*6Y+Jz0+FeB*!M(p?MOa@uN44x9N`l(uXQBX7hV&la){y!T2dzewo_mB{}mHnS5s^ zp%y4EL=}M^E#{Dkd1HTrMjpZqo$|GXT|GZMft=Zf#{4KjXGLUto_UtEuItpFG2)HsA||t2TaeLJ?7(qmitfOB7Q?UiA=|Nqg{{e|!#W0O52-w#-8 zUe-k1j*}D)hHA2hru2lSab+{m2?djKcYSP%)j_&4y60OY9ys1E&hl?gm$P?OKS!ms z#F4HL4_UI*bQ7F6{WYt~SuRi+hCglgWf)n|8(zGEOnoxWG_z@m5*}VywqX54ribrc z$6p0zfMxE*0426)1)UIUDcR&9&AXE=K)Ze^3lAyPgcm__PiC*TscrDVXFIpyfeB!m zuX<^PLdgZuxm=H8a>ELJK4pc3-Dn`I=8#)Qa!#6AvRhMD9C3yk(EFIzsCD!mJy&Pm zZPA2M)x@;?(3OQ^I1M`}J;lHC=)gH>^2Z5F?yGP4MVLs^JRMnC2-XzW4AV`)pQ}i>!Z|lgW&XgJc!b_k?^^@tm%chL06% zGTtaGuwnef@y!ThHpmCNQhJvTb2JogYP$W7BI)SK&6+_yOj~;B(1)f4t4|GYI6gDS znMR$<_&T+*soLwq8Y^w}_;5KTLcRM{3SNZ8v0PJcPFD|oh0MkFU77r~Fsm7|~g`=R|QSn8uNWYv^aL|?+ArqxZZo8TH!{`2+jjQfN)!1UY zZshE1{qfbaOA!x854WX$#cn-KX$9V?;}84S6vG%4`R#EA*Z9J21pWBr;o@NgNv^Qz z`Gw}uCtb2O>v?FzB)rB91BFl3VMF(rL52($ILOvC11-|PbzzL9!&nqr$IjRt{pn{2YELxb>gmN^mZj0mwet5E zK21>8QzZl1q&Uu8xDm59%fYU$EP(WDFAm4L^I_&Y>LYWb3zaD)-H(iP^r_H1$_$AB z`T(9w!I8`Wi0}6E!3DgzkiRUc{&;*=4T2S_ z5T?|#%4-&NZfG|}ZQhC?cqLdMAd7}V_gAoeb{3HyA?ehnd)2&k$AuvkMi^Gqb)urH z3%HR}3O?Lcud((n*c)7uj7?O;jtueNy&4gGMv+woyYx-DE!pTqb&R|pt2<6 z?@74Y#Bgs=zh=h|tEG7{zg2v0ReOULt>j4_AW;H^#690iNmJc&HU_1bo|jQomYUVH zc$JSc_bRGQ|zW1jD`b0ApUOJzr+$wrgSFWCoWn%t>Ft%?J)uT zCz2s?KM&M`C>emZt;x?gKC+bY zkbh=u+nA9fq>%rk0bDOy8wEcw$|;jhvEnd{jAo2)$apGgMnAA4Wo-Xxu58Y!%)hsv zPj{79q;fXj>5ULqnMIi61-4 zfg*YyuS9<#bVyA+_lz)-0HchID${Aqf&Tsg6FY6785`OSYQKkLE@Veh3(a(Ofnr|g3hYfqQu)aXX?B$O_?Ce_ zKjyTa5=&TsMHX*+YYoorV9eCCKx_mS1#wfKoP%?Xb;?bt^3jwdjWw2PVB^CgS?Z{& zr#^|P=peh5hcMp1ng>9gV%=w$L9_+B zwe2V^cZwY*9(FA45 zNttt%?T}Iv`hQ%2^a2YE)2%wW>5_;gv~1(SPWDmHQIOdve^KkjB;wn8ZHF z^OqW;0#w2@XH=ec&Q_l{GQ46H2-0}KPV9`TI%PFp+*-pPkd6^hjI8OfP>ja{CRl?a zD{@BE3IQpZ^ewV|L~Ix__^hbEDO%jmgt$z+nZ0LeJru_Ca7@SwoaO|OEbR{(i_cx% zeiA`^<)VgRr4s_L6;$&cZd%}&nC8S=k*oujk;PFWZHjE+D7lCWEkI-=j|VqG;X$*J@#q1fz+J~<$ug&%Xy%*xfNwS(ub>!ON#kk1QhUe7 zb>D8-obzZ?yT^&&Tx+u5(b{%L&^@+$nfIQ$kdoewAtd!WQUwk-zKGq5A2G%9s6kmV zdQqU1;eG03iKYy3CW(eYujw8lV4DQvkMMqxS7p_r5}+1ltb_ znt%={>v-h{d-Hln2YjvBbdwo20)*%0pf7ivn``abCSHgDoJ9=dW|-C~X9vcE7%O%A z@Q(=nFMU&;A8ykZzB>-uMnk_r;!7P$%Ze=^j21{|dz1@(4BHJ%vCe9;BZrYNYyEFD zB}_D#?$=|_sgz1&M3r&U+z59c%rq4~zvGqD6Sd0h*xS29ImHxE2eISlm)o(Hjf*lG zO)~%>_$XwABMB+HqLq}yx}S|4QoPeU2Re5a+!5eDq)!Gm z&2b;PUZ|mt=sw&0Gb^$7;5coCwQy^q`>xEb(Tip89^n(^`=sIMTV!1w6AvALV+ah_ z-cO}l)L_r?^5|w~w-}#8sS2S)oZFY3@csQvtGuvjC&I$N&@I3p*Ep37@COCy+4ca-`~2SW|ATjk=iw~Z#V}vn!k=KyUktr+D8^9 zSX}nT-mbK|_z`i}&g%4o$f_iUPUmL&){ZS@!|KhruR(Xblth zY)$ZQ8anusYwY8k+*^BIxmH}bNUk<{zFq8ac*9R~3EtRNk-JAmkbLQz!{8p$FgR7C zKh&W~LGFXl_PDlSe|PxdC7ntfJ-B^pqp57E{9d5-JMXd<@P4(Vb1b)hN&M()%s1qQ zopTtFZ0_!SUUDGLxa9)OZ5^ww*}})}G*^C*oy7_X?#lZU=pqY`;8uFb4AW@6#TDPY zA3yG7FmuS3xCc7%*YV)Yf)76rmiIp7_72Vq{#!SBoaKhvOA>bT3Ozo~hm8Bbv>OQA zdO4OCb7UmJK2zV8oHKzBNcg0iTQnxjlA)rx$XXBUme8p>oM;294HtLDI#z{;vY~-S zIbBIIZCY#!Ra>f@aKFJ1n@Qr0R~0+yl7NnGo#Y8sbHrKxxkg7*NACRW!4c?4kono_ zORMbx5om6R!F#u_<7NfbLCYZqI+n^ue4%@3kX7MkJKk7ruz<6sII7;|Ov8h~z(R59 zH(m1{R}O6aQH!ci=t!9@Z4M0Ua2<^mk7~s7Ko_2n?ZmOY)TOYJ&VEYWvWEJwuPYn{ z#eGgYz|!9^v&2;6Di+RMPE98TyEO4qaf7$AZ|k(OeTvHBU2p*`1zQ)9+wNHixfxgo zu*hYdA=P&0=SaHxUK!0u!ZPz+#A{Q3*^&vl+*9EZgHLw)n|8R)T`gP~?3{Rr0KXi9 zzr=kCgypL}xP_cw7Yck2K5OPfM2m0NeB#)KmF3mcYAqCZ>Ol1~a@91T`f04Ymctsv zH|LU2lW^HbrYAZ4k-)y6+r7Y96_sG+K1$ ztt{5K5>D`|p!6?9=*MDD^`NhfJD(?Hto=#o8AT!WxlT2T_N=ep$K`MtMAbi$qiYD# zE$BL%Ze6wWdA$ABP8hJn$F9c08KHka{?qT)iexTNmS6tP znsomP>3FpJaJsYIs^Qfd;V(cgaoH|r?%?dZ2i>OA z*+jnwt;xBS$RTJ50*d7H6X)sZHH214*OwFhs;lP!1W&XH>UCRNzeD(Jc zXK#tS?$zJ;nq*ui8+C|-=cJpA&d6|{3-NYl^blFg0}GmK`kEaFPmRVy!$CFR6; zYv-$BhCiZSm{i>ib*Im({O`N+xoDf>TeXAE{cG@J(ctvI!{GJp3xn4~_NC%Ta*aFF zs2EL>wKtxJ%jn}`iiWT`vvkUeXV*g8C7b-$UqmoJm=cv>eoV6?S&;gO4AzX-qxbIDpbT03Za`DxRupw z1C!j48D;h#oc|i~C8JD#x{jXu7yM0^xkq|>X+wVZ`PcdzKr!kMqTA7HStfRI!zAiI z!@h}6U_&3FztaDchWEeLkp^N!u7{|t}$cE+MFR#&^m)gD=9f|fAs`O zz*cBsTd*#-IyGlP_b}PA{)L-WNheXbV1a1rX(gG)r;lq>l!V@sJdw_CTlG;dvJyH5 z35;MTDx;mv4IQ)&q@9ogMhH!I`m4>dWsay-0DMhl;YoJNv?l`3;Z$;s7P(ueBKrRi>IJOG37(uE?Nt##e-U#ZE_6FTs6+rM^d4ap^Oo#ZbO8~50+lMBlh|)_)lwIEUR=;P z2CO7f)*e+fZP1e==DoXcE_Klp4F|~@0kIt)Sx)ttIZjPzYP|u53(1xW%oRoC3A7eX zo>c+`%mXuOx~tc49)a8GCr-&CNiAQ4BaP=BRNqaAYcDG0h6P|=z#VTu5#cCly?IzG z=v$TDoQ=eZH3t=KhqS|WW7r(&+ho81AgtSZ%Nl&#?0m20Rct8}KDoJj^BvA;kz2C^ z>0rWbt|QueQ3DuO1c+XS)3fydTZ8PK_3j4R;tMyM<#XgFWTNXtfqx!?giS zvFE9Q%G;GsrR&Z3#CMyvAE3Epf-KFw>gChghxxC4csl>jgNt87d5u^7ltIBabW=Z~ zO-G7X6`{@G0WOoN#xDL=Rd<4AG-pU9bM^;oW((Dv!t86RUJ9UG#K}WT71ZRX$XN9Y zd2z40`E_3YbGJ4GEk9kd$6DZZu<6W#eZ8%~?sQ_&A%>Xh^3y=S{ciHvs-3Le%cyUe zOJ0;<(Ns8He4UKBX0U}1>pwOHL&W<)Cd8@IM_)}QHF*Xb#G3n@K%zbX5^wC=JodMG zr)?{~^kTC_mNTt1)(4I9y0&Tu<&LjK0d6g^(-zkLh`eAz_}(mM)p)7^lK%P z*M-Pp`|-<}bo|1aES7pD(9#Vb#d3-cj`I{(8Jlb|Ec&C;xHF+MUXLV1PvvcJfK4xW%_v5pK&U%-rq{|Hwi( z$p}9)%vGI_`DX&>6R4gpwZL+}6Zx#bbQb@ibHGX+t$Y{r<@Y?Pyv((l0PD?As*8jd zp;z^%W{K7uv|jFKNe+#)4v1lFSL$;i4XtZTV$U-OUGoY%7-p)O8L><gI^_@znJ z%z`mTR6fr~cd8v5FwJQeV_CzvL1&BcaJYjsW=Cz)xK*;Iv~KuSO5LZAyd2(Y3Xt{2M@Q}sCjfqW@u}!<`YA6XHfm3YY9-OBX<};2 zTT~fP@lqEdCMuPrYXYlNu}K!=I5Nap=Go|LGo z_2ELHn+ah__JNS!duRdo2;u zb&CJ^cX?;DeqHx>avY$ln0}U`Q1&T%nv-QEr;e4ssHaRWNZ0coaMl_XzUDI4(6_w6 z@JEWxcDQo#pyH;OJF9+;cF+3HR?v0bu|=yb?$Eur>#WALb97ghjpV2L!=QrB3i_3g zdPm150I9_tCuB2|B4!nz1zZUntG~m72I?SsNT#+SrIt~@3nS^{E7SM{m_6srj;HD} zQ$mgkv74g(7XfQVP|SWwwD`mcQFW6cp*MLyVQbXxZqA9`=1BZFAf$vk;9Rij#&#R# z6FdBgboFa*u&f{MfPo%$Gr2jr?T)neR%Bh+WCioBiAgcUL~xzp5U*A9PjR1hs=i#@Zp1fWnx!=5i?2>K5G+l@DatLrA`Xr zZ=Z0s?)$|JcEH=pAp39dAlYj20cdX6;Y4IO5q(peR=3XBGKbFXVsI_R223=Ec8lQX zt(Rft{vYE3MBfgfqFv94kQ5m9E0r>sjq^iK>L9-1CE%^<0C&5)D0;u6w zDciVEUBvGMp||D^_8%K`O~_e&*iYZktngy#nDkkLiDY6@CACV%Q6l>~iCY~_ml`SX zRjWSz$S6SZo7j(D$vQOu)YdKAgoTm!oUgY5`PH_h^hXnlx7EC&F9*G}4;91>V)S|| z-a0|cTs>+cojSx19UK6-IvZ^!Yk~GvnuIL|Y8&HF9v;H$dKq`5f9aPD_>2`yGFlvR zc`>r~X2|&>z?XYlzk5oT<17CYvj~SM@1^dpAza_g;L||}fCiOs9bu3UQz3!|~rLDgFAxX(C z5kF!7$^8|l&$wZ>ZhA-c>yoXgHkc-{(MxKhs<2hjuaUXz67k!Qc+j#f&JE|eX~UnE2SZZREz-AZ|Qac0H+4#eG#Yerkyu$H3D4QWM` z6lhNp*RxdA^;L-m{$p0aZclHd7MZoYH?{Dw-LGRlnqPTd6inpolf;%Hp&6#H#KK`( zy$tDOO@ka&0eEiGrytx-3EgOEBpX0CE1^EfJcZ=Q*LtE`gxZv0OI5+Wl7K^{jtpMc z#2SNy@4Akrh`WrYRyi4d#sdZLUkyK*mn>+Nqs;!pZ0Oj+$AWTE!oJhhRvq5= zjdti3W1e)mA#i5`T>p`a{QB{OjWarFq_g?-21*BlG=(Or#4S4?IZv>PR~HF;qyYpvc!eZZ2)uTVJCMJUwZA>>D~HPn2tHb$DGC<22bx6 zl~x{HXc+wKmKDEDtHNR`3&}Y#EJ`WwJvq-7MN|j5yqdGg4Y8U(fH>N?i*~u2HTujV zvyD4N0)V;mZ}Efpp2PT{%DW}IY~fjfAr!+3@L4O9)F%5b)hi5d?^~O6v^Obk7`KBD-MvKU}dTo{MKZrZmAFGKAM0L zG1htRJAU2b5(A9(X9vOLHPDJc@ykYau=Xgq$!)@ZrMWCXReR_{T&UgaYyZoT>7JU= z<*HD7O=}t7fPb@d{})=5YfCNS?7`$x&(q0Bf)6C^?BvF__JeiNkP0Ypa7{CC-?+_{ zTBn>sMPDKPrcZx?O7l=RAb0Cm`a==13cc?~6$ULdI5d}wSYp!bm}n-rAd?)+=&=pk zRoT>PoSG$ck7_FJx93QKo%R#QbircWwG8TM>geyGgdC7kUq5{_Tp0rfiMpGZKeMRs zj9OYQp-Z}8t;lRLQy_7x?AllHukRFCwUGL0-aum%#K&Z#fqSwp^LkW1Dj3c=y-s&Q znug|{Vb4j^f>CH|l&YI>3^2FMP<AFFIyyBM0-NZ`?@a+BHY5Nf~Bg#Ra8g|UwZGk zoGy#w)iAfqR2j|MGipjOcetSZuWf|cVluO>X)&|sWsL2%5{<5;eho139u&i=VfI+B zd3Z9X{^fdm^=-m7T6DRZ=*7}JXP=;3jd)HjsiPXW zC;6k=$=&l)*}A`-u^ORck$E=5aa+~OD`Tv?NvqS(BPWe*x| z%y82xyn-Kp$xzy7PJtU4znC=OercFi2b^_f%l{U}V}(co-o5-M0@YXF{R?h|TfqgC zm;OkqD4Pn6=R`&L)88T(6j0|Zy+sjl3C4AW@pL-A!M@~tHU-E&@8nVj0uBm=Ex~Nd z&$3d)(a+H;6*3R5uIi*Usa)Ldc$5KqAXaKT{d}IIt9p!yv*lK?g%7Jcr`IdE%n}mb z73ls|hCPK*H9G+;0;@lm+!9Z@ET#!US zpKy`$BBdLkascYqS(+cJBl*SpF$`-~qr7gx6)Hb819Gudo*WuNc>QT#Xg~p17KJp? z*6~=SBd%LS|8W4x-^$Oj{bhonG7tQ;OeB&-{vcJnB{cr|-WYaTZ_U&utv6@qw(@n zAAnOcA@KzqPZv|>(EnHTFNy>Fqbb^0Hh||Mf9(qun|;5)-JI386PFmllu!D4%xm|~ zgM15Y^RZ#ByBjM&IlYBuUjvL`_!9XN{zgSuU}j6|02JAxUscdW!P2-b`1LMk)fi|t zvrij`-gC~=95%Z3h#92_mJb~Lqg1x@(6_fkIGzf!G2?CP+a`t(@=5q+kG|28R>fz- zBcb#phV$>Z>Add;9gv80xmi2Y8z@ zyB(%vSKu&z(0O$COW#A%^jwl8+2@O}4=4xBzzf9%% z8z!z`!#f8CGZ$iGWkBi<4mHXw5(&!Ix#qi&Dzd}ZM6X6NVsTyp!QU$g40^YRd9$EAf zC1S7CvtU1Cz)Jqao1W*%&uG0EN;AGz^b)84Lo>x^4g*cC%X;E(>g<|y)Yq&Ke{~VCg zTmIX4n12KkR5wR-$wwtZYs5FV655qGMD&(F5CZX0t_=Jo-nhxgNW$ybk9a%7YXN{b z6J2fodw(XNm>?cUG&j!>!!=R&llq)F#~R1+Hqi8<%}{v83(Wvo!{-6~3y<$M^M$VG zLuhEONrUAQ$+rguth1yjt=g|vEgKygggPnoYz9~~$SH;nMhZxDYnPF4%Y z`X)}N(%o_cJG|?Fo1@!6l0us>C6m;cPllP({(Db2jyaG0jbHr&yH6W_qb6YY zsI@+%_vUK+VJ_3!xvwkzXKJv_%*Q^wPH3*7x9MQu7d4H)Z1etWP%!<2O$1DDZI!e^N9;Z6gnKFE z5QKJ{?)_^)=9oKIE+i!6b&VwC(PUN_oD1A#3^BEsLuO4xq>qte731yOL(>xWbZ&IX z5!MV&p3Z(tFtV&{Ash##pEV+hk5WSjb4yPTqa*^<`7Ts2Y2q@=7LPT4(Ftk>8LG!J zxj|Y%ci(vpz6|JSa~YU?dYMI+FY;e(9?v^8r;rAEIT!MuVFZ6*;FcP5jK}oei1RJq z2g4?I3qDy{PCSnTx3evKXhv0+RXHnH&*b^pu7<@Cv2kQdL|ttmcb(n^tM`|6pj>6= zi_$WfnJ(XoxVGj4Yc9?d6d$Uh-qz`t@oV;J{=g;G*P_>;@je^hU+V(?9~WSs@t(Wc zymBXaq)epSVTfF^9vO7Yb9+!T7=|dRdsoQ{=SHN6<5)EBT`PKJV$-URlQ0ZF2hBDVN?9i=m%e@nb|N_<+F^A0LK%89lXx$-Gm*-tJqqIc6jkeq z3CtqjbTJ$D2ro(%#C=rj-qZB2y@~uH5C?W*T)SlKRjHN3uHO&4)1;j~K1m$GH$kk+ z4a0<8=SL;8pLt=K*3zA%?&&XNt~I{Qa#P0_G1(MyIlv(wFDpWKg2&E$)k#pG?DeE_3Vp+w*>r&0&PwdmJ^ZceI zcaMKO^2T3k4PDG3u2l4MO8H17GH=RpPn_odHmceYTzKNEAiHyJjybtq#Dy``cx;o~ z!Za-?fxGN6juz{paDfR_&KO~098&epa~n73J_B?-8Q>cSm0VWWg=pOAMN4EQ%Qj9< zbwsH5WJnV2BB+|B2aZDdGr}dE>3C3w9ug z3H{YAHQQ@SId|~3`mvl)|M+n~XEBT~6NIsEy*zOLWFb}UHi(c;f`G3Arm zD}f${WGd5G;8CiajOOd}vtw8CB=zQX+~5nvD(JE0^-$k??JBu$%ow2z7!*_JTm5tUtw8J`&dS&6`9$KS-0$f)m zHbQz1h|4to@lY3;Kc_utmn@FJT);q;Y5KsKJcplI{tpAh`jMGZw)YbDqNEz@ZlsSJ zEjCS(9XGeY#J8=wv^@SeX{h84x|r|8^Iy|uwxUgT zjTPuru+K;>?kTPx_C!cCFM^yPPq|wzAnG0%mjM#b_mAsY%z66H6qf*^q2;&hMC?nQ zXKfmlVrrTU{?MUDo!oKhqJiBDmASfgwl!Tu%a*dJ2r2?IBGwwk@baQRp$)`nf<1`5 z-rn16BT;yA_Izw>ZfkDwVx!$m*LQVTB)|go^rY*GiNgBca3mlSmn^OTe;Y~wT*4Z z4Qrn#8=q8p5y1&k`o0PaNN8#ug*YNFw{i6-ceM8*k9XPdrjNS5P}@gPitL>6?H?+X zXW{O{J`Xzsr8}5$=)4Z^y9q1tHy329+d$i6@_JRhu!DsbhiAHm7*?1c2*28jG#K>P zv{QweZT`sgiEq&kPy2(j zTgatAMz$r>c{E?;w)2|{UyIbf7SM_eAk}{AY=FLeOp=nWx-4a_e})S4G=@(u^kPjq z+($JHG4)KZ3YeI<`wIsL=NxA=F-KnoQ(iF^1`FIP^V|`@O;_RO(RSHB#Rtdvl?rOl zc-EK@<%_e%k2Z_iGZVGhNKf`u;7=}+B-Uc)(gFv15KK#3KASccj)u2%j z;{J@Nd#DIUJ1Beck{K8I4tzd2CkLuXBzgl?a`DVdhabUA`CWUrZtDKrqIqPxAfbsE zw2Nqqoq}S(7o_fm;^Dv2h*|oAPv~|5tm-2*vD3T1tupKp$8S=^&1{}r(>gqJCY;I{ ze7+poB!OF#H%FjocW(AQZ_OAoDA-{y49{!p8s!w~uODfizO~VkzXTVUS{19K^VoO? zsK_ zm~WWgKVHs?lWX2Lg2+(}75UqLZjT;p$hbEORFz61+L<{(>deQ_(o|<;) zg<^?mgE!i(dH;GZMLalVpLIw7?VHU(H(asHzG(3YoZz{Frz z^WmA6egVVqKemHf&^osXhd^{Q(H)c*&a9b*9}K)I1@upjDms(;PZp6s0`#d`OEF0!8~=qQ+EQMfA6^tOuq%*n zeH$U5)T(uiJL)s^cOY$&drKbU@H`bEQ~nvVi<7t|t>qdBnlkk=zQA}Q@`mnf9f;;y zYaPocioC%2KM5jX#ks0#gq(@B*4@)X|Ku}}odfN;oUFF@(^6=}kWR%^vg4G-H?-n; zCGf%*%aE+m{EMGZ{L^x{7Z+cnPC4%(`yaG9kcq^6Hz9BI|7+<={GopSfAxuyQV~kJ zw8(w4G$-3{zeP-Qvtz+Fsa$mo9-^XwNfcMPK zyyiJG&)4huoY531$!nVDy4|u2IoQtL@bgmU+Lny9de6qoPEgz>EMQF?j5G~R>Vnwp zI>+Qo@`iRrR38e$61EP#qJ*yyOja*qm;_<- zvuZ?Tb8THTO-e*csxBUn`}CpH-*s9J5YCVz8z%e*+>|Ibhp>JzUH=R}dl1UpzG8Eg z;NI~*A`t8Q!cpOLH?M`&BBx{CZvV)GD$jKDY3~PL=4^ZsqTO#`gk$ama4$~#n`S`U z2VDH~pE{ENZjY0}CYyVFvz9e;#8OuCtQj||DHD-#px`OHUfW-MY}-s_hLV)&c@R`D z$k+p2P+i2Ohnj?U4n7RVHBZPi6c#oqivVw&I3w@x+uD4NB_bnA!23wtX)0FU1Q*YH zhQH9uEDkj7pp&p8A1PToa^QEER9M{g-&)1njJ#M2jyH)X(SPfsPkgJ7zq;=V!PEJq z(-s!$8k*l^!DaI!iJJ)Mnrd)BRkN36TvZ$_tmWmt#2|arbcFCdHc{y!gzz;aDz_xx z_2DSyLx=)1jdQW0{efZ7n&DDnw*alOsa;5^a4F8R(L(Mj9sTZHPd-%--#L!y=+NIc zuOX~Mq&%3+ufl}M!XRQF^1RL2YwI`=)@LZ>k;0VKX+Y33Aek!bR}K=@>lgYlWe;DO zlOe4=9?G07O)wPphP`Uzs9iZbVU=WeY3dcdK$p*uC%JI!Qtes{7Rx|%8plsG(9OTNIBv~bW} z=f!ik1yS$lm!f@gb=-H9OB^N6gBfmrU(h*>oUDk=vU|m0m=QGNUl$Qhj1#rKmB7W>WlVC-%3#)4dWxUChJafu<26 zZ5)DqGL>gKu_q6bMdb3}fAQ{;9PI~@3iQaLwhro%*?$IFPmWMzT-rXD}dF(tx2)2abf|t!=Srrc?@+` zZTol11BG+}x(sFR@OZe-_dU+Fs?9mjlWbc@f}P=)65e`p$8g)Ljf+|P@m=k+aI&EF z_a5%9%6y8JJ!?@Je|a5Ee0OVvExV*Z1Sr*iJHf>7SnfWkwaj*6z(nIE4d<;Ej7g{+ zY(TT>zio%bn;9;I&+M70USfpcSTZET9S_7@&Y1+5Z&L;x@-RK?>7_cu-|*>t_j;|! z-O%}Iwb1@n3Oqn30l?HSb1r%1jQh*M^c0;3KPAGdH$9cuc@+zU*HZTL%Ae>jLcP&6$)xdMW+=k2cV z0g9O~8cd2B0B>vor_PMLP1{Dx-_SA`J}>0zF>5>~CM!)*U*1wRB$>^x8K|7&j`ACb zMCjvZ9Iv+&iE?x1H9qF)nU-WD#)D~DWK0U<7yjDrruOEiuLlWY{Bv;wJl7aM`t)U- zc|@WslYQfUSnqVS!YI%l>)hj%YE!&S+|oWN1L>ZYWpfxF{5ro*r&`5CtGEuiR&x{A-g78Hm!K$(5hkL>dp7;@OcAs z2Pep=rCTVmqjs6>-6dO``D4&BulRjE%hm%d)uJb3L-xjV&%r(Ye%#&-@|y6>>su^Y zIZMdpf}+fdHt7ef9~GyQa`X+9cVkKG{JXfhzCWgdeaMth`D`U#`f;jnXlt2xGNRF9 zSa3PpR%{1$W<6KO#`QfDBgJUpD zT<-icv0~-0BI!FV?TC+vZgPpaBVi=#ze|%vI-8qP^5P4yFm2aEx^+wk zTXwIz2h=-N`BTduZ&T~Ty2-Ntw6f~Gz-XONoI48k9Z0f;*DDM3L^$(7mYbPJ+--=h zR#i5|zaB$y!Z(p|_0*#J#NUi^EKLx?NnP%lWNa;NqVP z|0ZcL@{##(%ntPf`b}2h$Z<X28W^+NgJ?=Q8 z1J+sFl7R#-JU0e1?Q0b2&%>CIw`6uy=1n~r=W_64P?(TBzeuq&)NObQffJ z*UVBeR%nU8TaSwSY~1MO(?GG-!>RPKF9X3_sg@2>&1<*3-e+kC|JXd+A_1h( zJkOG3s~zs;LJ5PfNyu}RpYLOJ6`q%yng-{>g>1I?l6OzNEe}&IEFx2?OCS-`*-K@X z2FadBacs7_D~hKrbSJ~fKFEMm*y_D=LSLMsZx${)B|UK$?AMuUopB_w%;x44v3Qvu zRSX{eeoX>YY?uR%ae8^ZMdF-n(FVU&QgNV9GWc;;PJIWh^mtszVkUGPfBoho|+sZO^5dFd~|CAJt&GA&LinR-|b|MqL(`xb7$!Q9C^ zsy*7JLfI9b?syZ$<>tolpn=On!S)Qb0WF=(O=8S`}MOJ8qVDiIWVd0v} z4VO;;J;8(T!aN2&wsP&%r)XQ-R`L|u@VBdDj^=N|Ko;AM>&Cf>?M8BGFKGo}C; zJ&z4zXS?yqC@w~}I2-gy3|tA@Q{^rz@w?0q{*Ms91xg1$!Is+jep3Iw z{=>iZk)D!osdbd(d@+XqS^0o>Zi9Cg-o||$7KZO|b4Q2F2wzE>z-}s2x+JsmZ~k!g z={dBn8ByPsFz-goe>_*qze2!dVra~4R^@Wiyw(wd>Xi`LH(J9Vo?p-IJ&eiQDP5Aa zLSMMi!>g0op_rW_nQ;alcKM&``!a!3AY)0aoYZhS%|^&Uam!auzRkw;zu=M0UUFFj z%0IIiho%DtA#q&RQ@#CsO)Uk{v6@ol6{j_)I8+s zRaW*nu!x2JjU=U;w&g%Qnzj_ZtJV3Z;6X6#Os_T^DUzo(y5v^htrb0?8+ zf~(%vc3!b?$6Uu==d^By@X(7@yD+2KJ$u&M$HI#*kk{k4{wzel4$MvZWQGZm3R^uX zl`E45PmIFl^Sw;xifwB5i_=Ak zVi0q5y{nvBrRNm;OQujcm;UPJ8O^`7cYhHHE;d}2mb>sm0R95XVuwE|?vyVM0LFQn-A5iEC5>xS#6O+-*kOEN-#(B{is6I6&~WjlRgFTR-H> zx8fc!q3?A5ZH%I0@@pLuTBtGdzOk;rJ^;3^b@(Ea!JB4-SyLkbIKC6yf#iDrXa1L> zy6U)j8~(N@pwP9v$kQ#m+2Z!xi(1k55>q$yB*8ow#%E8lzI3JjRJM_}qcSrDE!n_H z7Kdug`%T%$-N%7%DHW)_T#;Jpt*tul%4K_rub#xY3ZOmEw3ylUO`U-I>oNeApH|!v z&ZCv2yA2XY(C32t86OzB{IMj$U!?(1Y59cmS2_hZ)Q%lyj4zx~vk}M|)L*C^8V@tB z5oa$m0NVqA0L?NtgY6$0&y+cwtnJ_KJ$vMQL~_d`zoPHINsJp6AoU~*Z2u&GoBNW| z+u-_cM{92^=MvjqB@rUke@oosEgHB$;qL=aOQ-LrM4v<;KExMz#AeSPYHzg_SD}-* z{+iF+w39w-=LBm$(Qu=#jPPa&>M9ye-t-c4Q6;z?AG8!Wz^mSsNUmM4fS%o35);y` zmkAy~-2g#(ye=y+#n94zy!ulw6Tfu1w+KW_?ChfCfY!G@Pw?*J;@lH)uIY+p)xqYgFD&| z$*Z$oy`V7^4sF2Cbd}IU6X0j}MZ`t~k5eBq;6mK0hx*}%Z_%eM!{Ub6aY;$<_=*L~ z@oyc}4DdqF0sx2Mn!nF5e$Rf^gvd5*jMt0ZC%`r`8r6<(UjZHH22?cRjs(KCPQmvGNOmR3lx;QQBesCQb$DF2cgp`d-EjL@R z`Azc};>4_4BAqQzGQ?#iD%lY`R5i^Yo65^j*0ggM8W_)df{tHB3&h<)Cp0wjdyD8h~`KP4U>7$9FnoGby z629gQ$xM|7x&3F7z|$?m@d=l)=sA}Z+|P2>aEM32q&mEi++HRGZI!HdcoetsOdpQ? z<)7+WU*`JGi>b2vcnKqHKs*}5KCMEnXQpv3dOr^UzlJra_zTQQ#aDdkxQh2LcTxo<@3nKNuJAZp465_1kFAdIat4g?JkaQF|{ z^^zorDwpdeh5NUaXP95=RM;)b>z)ykdBF&>z-85smj4FK zg?(%?n2<@-l7KI#aAYUf^e-uT1)mmayeznu!_WEKA}#+S#rK&pTI|i5)`cp>zeXM} zlv#B(4NYFSlHrv;X#G7QyNtQ`ihh=uPD7!4&m$qD>L}yQmbn8(qAq+B)BxeZojjI9 zw(W5Xb$)4nbtz;fUKj9QA5ytrZ7X5teJMVD(SrK-+!yCbvdT~P!DbOA;C1FZw9jtN z-qYte*))D_fuON-+NFXsXqf1J*7$J8Gr)w?ddhx6bDudS5f@fM1M9XLr@1zG%lCzV zCSM&uKd*SGT))=IHb$M$IMWpCG_|X+M5RA%`BsXeS{M1&uQvcr9y1eBv++_^&ZvV* z5VX~Op-gI?AC1CH-2im`Cpw{``8T>$HUX9~2CqxF1KUsu=icDd@XTa=a1yk6xEiY< zP5RpH)9u{3h&j99ne`Nzv|j4Ky{m*YPBwi;p~~-VPXle3DvMoZXa?=8&j{bDgY*M_ z0Y}wAoY05U^>lg$Q@ai+O?JTZ(OY3HwTzGh-O^Og`P5vc#~%N&qj_{*XB55cp{6K_ zjU)#xjj|&}94nm17#Qz(I?|DZdO$r+>j>68rHlWY_h|V{vHdv7La7R1i4;Ur8|mV& z0!Ynwh2^v1n1`dWq;=X!+Td(cV^5{F-pwJ8n_B z!Wf1xhDi}*9+;IPev)Mbg125opB(OB5G-kVJ751r@>emUG14Ezk4NIBD8eUa0>>RrY+38W~3qbWkr#1RfTy2@=fm-=u^6n1S^99QX^`Czh%daqT?_?v=N zJXS~>UAs-sT^BlY;1Q+`SmlUu2S)^ z)inC4F)2r?Bgscex1zVaYHn(iPZ;srt<;q3@lhDnlIop_B}%#}^jQVhXZ?DU}JQ zLmk|Qh2x|xsY$yneXG!|DM$%mcXX8%0x~^2PIX)18O#solan@Pz?NNK6rGRp0xW*F za;lDV20zSn2<4Ahz7MSbNO$uN?IYsiyF2ej7#1d*+K!-Xj(X+m(v~G49o!=!UBmO@ zn3K#0cb0KMk#vk@ycSc8ULMpH&re?)r5(Tf^)J!;`qQ#pi6k@<1Ys2Ahr6^crgN)UiCt;!NKQxX=C|G(L0T*esj}ztPt&ua$fNT3 z;?swVr}e&F^4*0TfQ5q8xLN6)I~UZVd0fCd8(rbtpzdLgrc3bUJZH_~kO=YKt;(Q1 zVji(VfkOyd_^Wm@r$CPBUe0Ov)?_DxWc_TVmf9roOldX)#)$l za%=7hvzgy+^qtn5wmO6coN3$C$#Y0fh-Pe2AFu)fyiZJHs3&8)#oDRG7cJSgQ=Ask z8MVrMJGzBsBrFK8WJUOVSm8p=44Mj@B4^nR61!Mnq0b(#-2*+MISprIk_h_W9hZ=tetgRMq25^5DrdEm|Cr6U(ox;2a zd%Ouea$mZ)W^SB!KG)tKaclPob11*{S0|3sX~Z{7Xm?R#>rmK|?ES9olG0yG@EtyQ zu}60u;pU3pAFY6j72%9{MqTu3NNL;0!vcD1s&(kMdz*@(5B^u$Y9-1v(^`kRW!MGI z!A_YHL?AeK=USyNlC@Hc;yV!Se%Uv|;gL=4v}hwzW2tsmY}o)-DS|GoAhrWYtp z;|Hj^0dQ^8NRVXadnZ17*Y^7S!f}3!7BtJ7 z$UZYBVmTelPeO!riQiR{nagmvqOqyBGjLQMlt!P=p%yAJSqEHr-Z${kndR+pnCX&!Jf@cVdq-}Puog;68w3;awq#UXJ0s22o{wyw&5yvA-! z*M>HF!%BXUwL9%F8K~W;v&o_EL_yQ4DfFHo%*oZDU~zU&K@x5E#ph>$IPGccP2*VM zNdzPz+{>^3C5mEmU^a93S)FOV!cm}59L!q!(Kdzcfd-^zdR<0GEUoH3Ens(s{T7MFqp+GW(F7FetF%YW%} zQxj_XtSGN(Y9aCdp$UmyYvefP&pK|&*51v~RjwMY07`nupD#L-;a!NZ!N?CYkAph9S zR8CNiYae|XCq$v1l1#PHd9)gvP5&F)KjFZ?q*;<(=A}vX(y5sV?nm{RvmUFXZym3l zF~0gT&D44f!uW6c<{!e~{8Y*7a+`<90M8$}XIv!N6y?J$UN06jEv~nir}&w3Hc#bhBC{LuI79~r(7`)G@2KtJ@Pnqz0_HGhi%0sx99aB zTbGG|-Q*mI?g_7Yf-&sJ3qn$y}Py$J&<<tmsInwYtce2*nPqN%RQ@8q<2 zCK_i&vpW-_YdvR-uJWM#z;8Bx;6>RBrhzkP#v7$6IDwb!m_{8V!kZhF$ z-(D)?P^@oec(>4QKe;RD9H?o6wppv~$D>TOF4)KnGUC~iJU#TNhGM4%D6#Or7qO@ibTNr;Pt|creUPedB?ni+MX!M`HA7 z-DrzLxSP_BNZu2TWx0y5h}!in<4WD!kV&;9&`)+`#M^_~^(DM0au_pDKW%S+ocJRYv=qqge46d)C=vJ?BhtBT}!eNA;0V~=;bV_MSV4XF(mI5wGACfCXv1|0409MZM-zZxyl<1lqnDorp_bkr1hRTUznV8R*S zH09d7s!Gzb{QKccWpKRk^WYDArh}isiOh!RncQRO+fJ(=t?(6>o*Dk$p>e3gXveA? z_a#eCobZNk23~VHlnM1L;BDydirMU7WhtS4D3Ugp(O&!y?fjly&q^rFE+KeZ8#ks4=dLul6a6ce>QA?bzo*V`gA{h(7*Vp7%T33zzxvE+I6Ue5;k}9tQ4| z1}}L@j68dRU4~Og1!_s6=*LmWy(;t?$oGP^M%%qdIS)!_t>jNQe_R>z_1oIg<@kpS zJ0EXM8^u|L_UH2Qbn9_&Fq)*fP$U~_C~_#oTEA~pw$hJ7_+nkIU;wb@3J{WiKcz_TH>idh;UiGJof!m^TYAaF-%=9O zWBx4|xAPQM8}Y*|F_bw<>VZOkhtzrOW~DXyUdJeqIMmuO?iFw}T7jw*tG0l)>!P_@SsxltOHr|W) zE9|MH{zM2f2?5dw|3?N;@}=W@CU=#~=Qy@N_%ZSvZsJD}xT2Op~^ zkVsEMJ##n+sxk2Wnvf^iCoUnZy9*)mEy;lA^3|i#<8vc;2{OMyx5_4pg}ykKp3$Tx zg%~5=>N$$1jN6%wI7h14xH^T!Htr|3h;0!5~-F{40DCTH}s?)H;I$-#d@e`WI$vEFh>03R9-Jg-5Wkhk^`}#cFy( zB$P_IU`XVNFy;9AqhMUbs%wFoCh2)*#!7TJnQt{i3Yn3(US62g$%eEzYm$_IRom4q zq#a(=OGq$AMuix&*b!~-o&Pub6CxC)Y9Oi%btoGz)!5Bc^Qjd5Vd&8XB_IlUAqX=QM(yQnG z*YOLWN4hH>gA}d3G>l%0L(Ra?nf^eQxL4+xMWRB#>Xbuqht*8Zd*cJUIpsx%PSAD^)SDB=Tk+R3-H}6c3sjhF)~qT zN+y}=n8cOvOLR8{Eb_pb1?ABH+eb%#eOO>vQL*A)gIy`;O)2jk7uwYbVBQTwd@zCM z=JF32__Hs9h1;>sF^|2q&cHL{J+C+WuekmABgaxZDaj_Kco2(l+V5s@_C z9=}4X(QDDHcaY+%3%8IGcFdhG!>7lE;f!C^u+RWee!JjCTx*E4Mn?0ru87Xi z;%pmR>*(XOq67F%=B=}q%T1E#{@0UxkOZE*!g3R2!WRb_NKZ^GJ4beP1v_Z4hM<#) zxtlW})a~0~4L6Q~&Bje?X6;B^keKdIsU>OcD+BEM(^hhnN+e^LkUt1&@=1h8gH8X} zh9mi8#x3NOsncn}~Q99{(zZqnb z*X%<)2{}E-CF=WGVs$8W0xPP@DWzT&ac*hkis>1fJELyZu3(LLXoeYwNMdlYeM8K` zr|G=0^=JR$B{RLlO43jAgccQa)0VZl)eKXtv79V!EZBgb?590r@G@Pi)xSXklqIw@Sc^HNQ`C%S(+`yfbn&Xl4+m|eue2E(B4 z&Ok{;rw(to!vFf`<*&~2=*fPjJLQP@{=D%$nb3!kg4lXI`_izD>H;xhE=k%v@x&tl zsO(#cv8h;|Myg*LnaUeOWEe*+M_AU|A6n;H9{mU>**}+no&qiM7mRL+ zU48d2L}(0Etj=C?C#^SPb4RSu0x|^`n$;?kU1>bBE?nzJ)ewJdJfj*QN*jm>iIa|k zFYoh}3*`OH_(?;S1{%ZvpejTAiGTfbY1Vfy{zI)EmXC3dvZ*PB2E#4Br0tu0yQs~w zGVBhN;4ye`b9Sgn7XDw^*!16Bex}8!?sQpxf&Rl<#EQy46iBxcCi2U$QNJxzpQ6v@ z2tr%*vIV{9HvldE)P`TPcOAL+4awZ~Q8)l}qo;zh>p;{hMIh>lw%| z!N;V%EQVKFnDLPJx(em(aFb^K^#jwq&v)pI48EJsNU>r({+NpXTc2)SbdZl~?aIrY zX>o{fnkjs>EM&ZEM(5mQ3|4k~cW61=v`R++B7;U2Buna@IlVd|HMo5nqZWJy_(9Zl K)e2Nz`u`tY-<%@= literal 0 HcmV?d00001 diff --git a/src/assets/icons/partstockicon.svg b/src/assets/icons/partstockicon.svg new file mode 100644 index 0000000..65d6086 --- /dev/null +++ b/src/assets/icons/partstockicon.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/assets/icons/printedparticon.afdesign b/src/assets/icons/printedparticon.afdesign new file mode 100644 index 0000000000000000000000000000000000000000..7059aae96031cba125b9580b94a4d65d57b5c86f GIT binary patch literal 48852 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 + + + + + + diff --git a/src/assets/icons/producticon.afdesign b/src/assets/icons/producticon.afdesign index dfea98baea6d2c625cb5ca039b3705eb8b7b9151..4dd71d41014ec7b55359677f1491203b181abcd6 100644 GIT binary patch literal 53810 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 literal 49692 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�J^GVJmt+2k* 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 - - + + + + diff --git a/src/assets/icons/productstockicon.afdesign b/src/assets/icons/productstockicon.afdesign new file mode 100644 index 0000000000000000000000000000000000000000..a6929ae9a0c58fc9f3f24371dbc729c7a7a8db5d GIT binary patch literal 64947 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 literal 0 HcmV?d00001 diff --git a/src/assets/icons/productstockicon.svg b/src/assets/icons/productstockicon.svg new file mode 100644 index 0000000..7cfc9b8 --- /dev/null +++ b/src/assets/icons/productstockicon.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/assets/icons/spoolicon.afdesign b/src/assets/icons/spoolicon.afdesign new file mode 100644 index 0000000000000000000000000000000000000000..662ee42592972d5c2f711420fed8983df96477a6 GIT binary patch literal 47233 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 SJ_Lq|rK+f@P%i)e^Zx_*Zumj~ literal 0 HcmV?d00001 diff --git a/src/assets/icons/spoolicon.svg b/src/assets/icons/spoolicon.svg new file mode 100644 index 0000000..9024ca8 --- /dev/null +++ b/src/assets/icons/spoolicon.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/assets/icons/vendoricon.afdesign b/src/assets/icons/vendoricon.afdesign new file mode 100644 index 0000000000000000000000000000000000000000..5cb67da33b58d79e9f9b2b7edf1ed203aef8e7a2 GIT binary patch literal 39176 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 KTYSbT@;?9)sShat literal 0 HcmV?d00001 diff --git a/src/assets/icons/vendoricon.svg b/src/assets/icons/vendoricon.svg new file mode 100644 index 0000000..58f212e --- /dev/null +++ b/src/assets/icons/vendoricon.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/assets/logos/farmcontrollogo.svg b/src/assets/logos/farmcontrollogo.svg new file mode 100644 index 0000000..58a2340 --- /dev/null +++ b/src/assets/logos/farmcontrollogo.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/components/Auth/LoginUser.jsx b/src/components/Auth/LoginUser.jsx index ac0a382..f1b98cb 100644 --- a/src/components/Auth/LoginUser.jsx +++ b/src/components/Auth/LoginUser.jsx @@ -14,7 +14,7 @@ const LoginUser = () => { //const navigate = useNavigate() const { loginWithSSO } = useContext(AuthContext) const handleLogin = async () => { - loginWithSSO('/production/overview') + loginWithSSO('/dashboard/production/overview') } return ( diff --git a/src/components/Dashboard/Inventory/FilamentStocks.jsx b/src/components/Dashboard/Inventory/FilamentStocks.jsx new file mode 100644 index 0000000..9d0de56 --- /dev/null +++ b/src/components/Dashboard/Inventory/FilamentStocks.jsx @@ -0,0 +1,296 @@ +// src/filamentStocks.js + +import React, { useEffect, useState, useContext, useCallback } from 'react' +import { useNavigate } from 'react-router-dom' +import axios from 'axios' +import moment from 'moment' + +import { + Table, + Button, + Flex, + Space, + Modal, + message, + Dropdown, + Typography +} from 'antd' +import { createStyles } from 'antd-style' +import { + LoadingOutlined, + PlusOutlined, + ReloadOutlined, + InfoCircleOutlined +} from '@ant-design/icons' + +import { AuthContext } from '../../Auth/AuthContext' +import { SocketContext } from '../context/SocketContext' + +import NewFilamentStock from './FilamentStocks/NewFilamentStock' +import IdText from '../common/IdText' +import FilamentStockIcon from '../../Icons/FilamentStockIcon' + +import FilamentStockState from '../common/FilamentStockState' + +const { Text } = Typography + +const useStyle = createStyles(({ css, token }) => { + const { antCls } = token + return { + customTable: css` + ${antCls}-table { + ${antCls}-table-container { + ${antCls}-table-body, + ${antCls}-table-content { + scrollbar-width: thin; + scrollbar-color: #eaeaea transparent; + scrollbar-gutter: stable; + } + } + } + ` + } +}) + +const FilamentStocks = () => { + const [messageApi, contextHolder] = message.useMessage() + const navigate = useNavigate() + const { styles } = useStyle() + const { socket } = useContext(SocketContext) + + const [filamentStocksData, setFilamentStocksData] = useState([]) + + const [newFilamentStockOpen, setNewFilamentStockOpen] = useState(false) + + const [loading, setLoading] = useState(true) + const [initialized, setInitialized] = useState(false) + + const { authenticated } = useContext(AuthContext) + + const fetchFilamentStocksData = useCallback(async () => { + try { + const response = await axios.get('http://localhost:8080/filamentstocks', { + headers: { + Accept: 'application/json' + }, + withCredentials: true // Important for including cookies + }) + setFilamentStocksData(response.data) + setLoading(false) + } catch (err) { + messageApi.info(err) + } + }, [messageApi]) + + useEffect(() => { + // Fetch initial data + if (authenticated) { + fetchFilamentStocksData() + } + }, [authenticated, fetchFilamentStocksData]) + + useEffect(() => { + // Add WebSocket event listener for real-time updates + if (socket && !initialized) { + setInitialized(true) + socket.on('notify_filamentstock_update', (statusUpdate) => { + console.log('Received filament stock update:', statusUpdate) + setFilamentStocksData((prevData) => { + return prevData.map((stock) => { + if (stock._id === statusUpdate.id) { + return { + ...stock, + ...statusUpdate + } + } + return stock + }) + }) + }) + } + + return () => { + if (socket && initialized) { + console.log('Deregistering filament stock update listener') + socket.off('notify_filamentstock_update') + } + } + }, [socket, initialized]) + + const getFilamentStockActionItems = (id) => { + return { + items: [ + { + label: 'Info', + key: 'info', + icon: + } + ], + onClick: ({ key }) => { + if (key === 'info') { + navigate( + `/dashboard/inventory/filamentstocks/info?filamentStockId=${id}` + ) + } + } + } + } + + // Column definitions + const columns = [ + { + title: '', + dataIndex: '', + key: 'icon', + width: 40, + fixed: 'left', + render: () => + }, + { + title: 'Filament Name', + dataIndex: 'filament', + key: 'name', + width: 200, + fixed: 'left', + render: (filament) => {filament.name} + }, + { + title: 'ID', + dataIndex: '_id', + key: 'id', + width: 165, + render: (text) => ( + + ) + }, + + { + title: 'Current (g)', + dataIndex: 'currentNetWeight', + key: 'currentNetWeight', + width: 120, + render: (currentNetWeight) => ( + {currentNetWeight.toFixed(2) + 'g'} + ) + }, + { + title: 'Starting (g)', + dataIndex: 'startingNetWeight', + key: 'startingNetWeight', + width: 120, + render: (startingNetWeight) => ( + {startingNetWeight.toFixed(2) + 'g'} + ) + }, + { + title: 'State', + key: 'state', + width: 350, + render: (record) => + }, + + { + title: 'Created At', + dataIndex: 'createdAt', + key: 'createdAt', + width: 180, + render: (createdAt) => { + if (createdAt) { + const formattedDate = moment(createdAt).format('YYYY-MM-DD HH:mm:ss') + return {formattedDate} + } else { + return 'n/a' + } + } + }, + { + title: 'Actions', + key: 'actions', + fixed: 'right', + width: 150, + render: (text, record) => { + return ( + + + + + ) + } + } + ] + + const actionItems = { + items: [ + { + label: 'New Filament Stock', + key: 'newFilamentStock', + icon: + }, + { type: 'divider' }, + { + label: 'Reload List', + key: 'reloadList', + icon: + } + ], + onClick: ({ key }) => { + if (key === 'reloadList') { + fetchFilamentStocksData() + } else if (key === 'newFilamentStock') { + setNewFilamentStockOpen(true) + } + } + } + + return ( + <> + + {contextHolder} + + + + + + }} + scroll={{ y: 'calc(100vh - 270px)' }} + /> + + { + setNewFilamentStockOpen(false) + }} + destroyOnClose + > + { + setNewFilamentStockOpen(false) + messageApi.success('New filament stock created successfully.') + fetchFilamentStocksData() + }} + reset={newFilamentStockOpen} + /> + + + ) +} + +export default FilamentStocks diff --git a/src/components/Dashboard/Inventory/FilamentStocks/FilamentStockInfo.jsx b/src/components/Dashboard/Inventory/FilamentStocks/FilamentStockInfo.jsx new file mode 100644 index 0000000..d94ca72 --- /dev/null +++ b/src/components/Dashboard/Inventory/FilamentStocks/FilamentStockInfo.jsx @@ -0,0 +1,232 @@ +import React, { useState, useEffect, useContext } from 'react' +import { useLocation } from 'react-router-dom' +import axios from 'axios' +import { + Descriptions, + Spin, + Space, + Button, + message, + Typography, + Flex, + Form, + Badge +} from 'antd' +import { LoadingOutlined, ReloadOutlined } from '@ant-design/icons' +import IdText from '../../common/IdText' +import moment from 'moment' +import { SocketContext } from '../../context/SocketContext' +import FilamentStockState from '../../common/FilamentStockState' +import StockEventTable from '../../common/StockEventTable' + +const { Title, Text } = Typography + +const FilamentStockInfo = () => { + const [filamentStockData, setFilamentStockData] = useState(null) + const [fetchLoading, setFetchLoading] = useState(true) + const [error, setError] = useState(null) + const [initialized, setInitialized] = useState(false) + const location = useLocation() + const [messageApi, contextHolder] = message.useMessage() + const filamentStockId = new URLSearchParams(location.search).get( + 'filamentStockId' + ) + const [form] = Form.useForm() + const { socket } = useContext(SocketContext) + + useEffect(() => { + if (filamentStockId) { + fetchFilamentStockDetails() + } + }, [filamentStockId]) + + useEffect(() => { + if (filamentStockData) { + form.setFieldsValue({ + filament: filamentStockData.filament || '' + }) + } + }, [filamentStockData, form]) + + // Add WebSocket event listener for real-time updates + useEffect(() => { + if (socket && !initialized && filamentStockId) { + setInitialized(true) + socket.on('notify_filamentstock_update', (statusUpdate) => { + console.log('GOT FILAMENT STOCK UPDATE', statusUpdate) + setFilamentStockData((prevData) => { + if (statusUpdate?.id === filamentStockId) { + return { + ...prevData, + ...statusUpdate + } + } + return prevData + }) + }) + } + return () => { + if (socket && initialized) { + console.log('Deregistering filament stock update listener') + socket.off('notify_filamentstock_update') + } + } + }, [socket, initialized, filamentStockId]) + + const fetchFilamentStockDetails = async () => { + try { + setFetchLoading(true) + const response = await axios.get( + `http://localhost:8080/filamentStocks/${filamentStockId}`, + { + headers: { + Accept: 'application/json' + }, + withCredentials: true + } + ) + setFilamentStockData(response.data) + setError(null) + } catch (err) { + setError('Failed to fetch filament stock details') + messageApi.error('Failed to fetch filament stock details') + } finally { + setFetchLoading(false) + } + } + + if (fetchLoading) { + return ( +
+ } /> +
+ ) + } + + if (error || !filamentStockData) { + return ( + +

{error || 'FilamentStock not found'}

+ +
+ ) + } + + return ( +
+ {contextHolder} + + + Filament Stock Information + + + +
+ + {/* Read-only fields */} + + {filamentStockData.id ? ( + + ) : ( + 'n/a' + )} + + + {moment(filamentStockData.createdAt).format('YYYY-MM-DD HH:mm:ss')} + + + + + + + + {moment(filamentStockData.updatedAt).format('YYYY-MM-DD HH:mm:ss')} + + + + {filamentStockData.filament ? ( + + ) : ( + 'n/a' + )} + + + + {filamentStockData.filament ? ( + + ) : ( + 'n/a' + )} + + + {filamentStockData.currentGrossWeight ? ( + + {filamentStockData.currentGrossWeight.toFixed(2) + 'g'} + + ) : ( + 'n/a' + )} + + + {filamentStockData.startingGrossWeight ? ( + + {filamentStockData.startingGrossWeight.toFixed(2) + 'g'} + + ) : ( + 'n/a' + )} + + + {filamentStockData.currentNetWeight ? ( + {filamentStockData.currentNetWeight.toFixed(2) + 'g'} + ) : ( + 'n/a' + )} + + + {filamentStockData.startingNetWeight ? ( + + {filamentStockData.startingNetWeight.toFixed(2) + 'g'} + + ) : ( + 'n/a' + )} + + + + + + Filament Stock Events + + + +
+ ) +} + +export default FilamentStockInfo diff --git a/src/components/Dashboard/Inventory/FilamentStocks/LoadFilamentStock.jsx b/src/components/Dashboard/Inventory/FilamentStocks/LoadFilamentStock.jsx new file mode 100644 index 0000000..6c878a7 --- /dev/null +++ b/src/components/Dashboard/Inventory/FilamentStocks/LoadFilamentStock.jsx @@ -0,0 +1,338 @@ +import React, { useState, useContext, useEffect } from 'react' +import { + Form, + Button, + Typography, + Flex, + Steps, + Divider, + Descriptions, + Alert +} from 'antd' +import PropTypes from 'prop-types' +import { SocketContext } from '../../context/SocketContext' + +import FilamentStockSelect from '../../common/FilamentStockSelect' +import PrinterSelect from '../../common/PrinterSelect' +import FilamentStockDisplay from '../../common/FilamentStockDisplay' +import PrinterTemperaturePanel from '../../common/PrinterTemperaturePanel' + +import { LoadingOutlined } from '@ant-design/icons' +import PrinterState from '../../common/PrinterState' + +const { Title } = Typography + +const LoadFilamentStock = ({ + onOk, + reset, + printer = null, + filamentStockLoaded = false +}) => { + LoadFilamentStock.propTypes = { + onOk: PropTypes.func.isRequired, + reset: PropTypes.bool.isRequired, + printer: PropTypes.object, + filamentStockLoaded: PropTypes.bool + } + + const { socket } = useContext(SocketContext) + + const initialLoadFilamentStockForm = { + printer: printer, + filamentStock: null + } + + const [loadFilamentStockLoading, setLoadFilamentStockLoading] = + useState(false) + const [currentStep, setCurrentStep] = useState(0) + const [nextEnabled, setNextEnabled] = useState(false) + const [currentTemperature, setCurrentTemperature] = useState(-1) + const [targetTemperature, setTargetTemperature] = useState(0) + const [filamentSensorDetected, setFilamentSensorDetected] = + useState(filamentStockLoaded) + const [loadFilamentStockForm] = Form.useForm() + const [loadFilamentStockFormValues, setLoadFilamentStockFormValues] = + useState(initialLoadFilamentStockForm) + + const loadFilamentStockFormUpdateValues = Form.useWatch( + [], + loadFilamentStockForm + ) + + // Add websocket temperature monitoring + useEffect(() => { + if (loadFilamentStockFormValues.printer) { + const params = { + printerId: loadFilamentStockFormValues.printer._id, + objects: { + extruder: null, + 'filament_switch_sensor fsensor': null + } + } + + const notifyStatusUpdate = (statusUpdate) => { + if (statusUpdate?.extruder?.temperature !== undefined) { + setCurrentTemperature(statusUpdate.extruder.temperature) + } + if (statusUpdate?.extruder?.target !== undefined) { + setTargetTemperature(statusUpdate.extruder.target) + } + if ( + statusUpdate?.['filament_switch_sensor fsensor'] + ?.filament_detected !== undefined + ) { + setFilamentSensorDetected( + Boolean( + statusUpdate['filament_switch_sensor fsensor'].filament_detected + ) + ) + } + console.log(statusUpdate) + } + + socket.emit('printer.objects.subscribe', params) + socket.emit('printer.objects.query', params) + socket.on('notify_status_update', notifyStatusUpdate) + + return () => { + socket.off('notify_status_update', notifyStatusUpdate) + socket.emit('printer.objects.unsubscribe', params) + } + } + }, [socket, loadFilamentStockFormValues.printer]) + + React.useEffect(() => { + loadFilamentStockForm + .validateFields({ + validateOnly: true + }) + .then(() => setNextEnabled(filamentSensorDetected)) + .catch(() => setNextEnabled(false)) + }, [ + loadFilamentStockForm, + loadFilamentStockFormUpdateValues, + filamentSensorDetected + ]) + + useEffect(() => { + if ( + filamentSensorDetected == true && + currentTemperature >= targetTemperature + ) { + setNextEnabled(filamentSensorDetected) + if (currentStep == 0) { + setCurrentStep(1) + } + } else if (filamentSensorDetected == false) { + setCurrentStep(0) + } + }, [ + filamentSensorDetected, + targetTemperature, + currentTemperature, + currentStep + ]) + + const summaryItems = [ + { + key: 'filamentStock', + label: 'Stock', + children: loadFilamentStockFormValues.filamentStock ? ( + + ) : ( + 'n/a' + ) + }, + { + key: 'printer', + label: 'Printer', + children: loadFilamentStockFormValues.printer ? ( + + ) : ( + 'n/a>' + ) + } + ] + + React.useEffect(() => { + if (reset) { + loadFilamentStockForm.resetFields() + } + }, [reset, loadFilamentStockForm]) + + const handleLoadFilamentStock = async () => { + setLoadFilamentStockLoading(true) + + try { + // Set the extruder temperature + await socket.emit('printer.filamentstock.load', { + printerId: loadFilamentStockFormValues.printer._id, + filamentStockId: loadFilamentStockFormValues.filamentStock._id + }) + onOk() + } finally { + setLoadFilamentStockLoading(false) + } + } + + const steps = [ + { + title: 'Preheat', + key: 'preHeat', + content: ( + + + + + {targetTemperature == 0 ? ( + + ) : null} + {targetTemperature > 0 && currentTemperature < targetTemperature ? ( + } + /> + ) : null} + + {targetTemperature > 0 && + currentTemperature >= targetTemperature && + filamentSensorDetected == false ? ( + + ) : null} + + {loadFilamentStockFormValues.printer ? ( + + ) : null} + + ) + }, + { + title: 'Required', + key: 'required', + content: ( + <> + + + + + ) + }, + { + title: 'Summary', + key: 'summary', + content: ( + + + + ) + } + ] + + return ( + +
+ +
+ + + + + + Load Filament Stock + +
+ setLoadFilamentStockFormValues((prevValues) => ({ + ...prevValues, + ...changedValues + })) + } + initialValues={initialLoadFilamentStockForm} + > +
{steps[currentStep].content}
+ + + + {currentStep < steps.length - 1 && ( + + )} + {currentStep === steps.length - 1 && ( + + )} + + +
+
+ ) +} + +export default LoadFilamentStock diff --git a/src/components/Dashboard/Inventory/FilamentStocks/NewFilamentStock.jsx b/src/components/Dashboard/Inventory/FilamentStocks/NewFilamentStock.jsx new file mode 100644 index 0000000..f61db24 --- /dev/null +++ b/src/components/Dashboard/Inventory/FilamentStocks/NewFilamentStock.jsx @@ -0,0 +1,236 @@ +import PropTypes from 'prop-types' +import React, { useState } from 'react' +import axios from 'axios' +import { + Form, + InputNumber, + Button, + message, + Typography, + Flex, + Steps, + Divider, + Descriptions, + Badge +} from 'antd' +import FilamentSelect from '../../common/FilamentSelect' + +const { Title } = Typography + +const initialNewFilamentStockForm = { + filament: null, + startingGrossWeight: 0 +} + +const NewFilamentStock = ({ onOk, reset }) => { + const [messageApi, contextHolder] = message.useMessage() + + const [newFilamentStockLoading, setNewFilamentStockLoading] = useState(false) + const [currentStep, setCurrentStep] = useState(0) + const [nextEnabled, setNextEnabled] = useState(false) + + const [newFilamentStockForm] = Form.useForm() + const [newFilamentStockFormValues, setNewFilamentStockFormValues] = useState( + initialNewFilamentStockForm + ) + + const newFilamentStockFormUpdateValues = Form.useWatch( + [], + newFilamentStockForm + ) + + React.useEffect(() => { + newFilamentStockForm + .validateFields({ + validateOnly: true + }) + .then(() => setNextEnabled(true)) + .catch(() => setNextEnabled(false)) + }, [newFilamentStockForm, newFilamentStockFormUpdateValues]) + + const summaryItems = [ + { + key: 'filament', + label: 'Filament', + children: ( + + ) + }, + { + key: 'emptySpoolWeight', + label: 'Empty Spool Weight', + children: newFilamentStockFormValues?.filament?.emptySpoolWeight + 'g' + }, + { + key: 'startingGrossWeight', + label: 'Starting Gross Weight', + children: newFilamentStockFormValues.startingGrossWeight + 'g' + }, + { + key: 'startingNetWeight', + label: 'Starting Net Weight', + children: + newFilamentStockFormValues.startingGrossWeight - + newFilamentStockFormValues?.filament?.emptySpoolWeight + + 'g' + } + ] + + React.useEffect(() => { + if (reset) { + newFilamentStockForm.resetFields() + } + }, [reset, newFilamentStockForm]) + + const handleNewFilamentStock = async () => { + setNewFilamentStockLoading(true) + try { + await axios.post( + `http://localhost:8080/filamentstocks`, + newFilamentStockFormValues, + { + withCredentials: true // Important for including cookies + } + ) + onOk() + } catch (error) { + messageApi.error('Error creating new filament stock: ' + error.message) + } finally { + setNewFilamentStockLoading(false) + } + } + + const steps = [ + { + title: 'Details', + key: 'details', + content: ( + <> + + + + + + { + if (!value) return '' + return `${value}` + }} + step={0.01} + style={{ width: '100%' }} + addonAfter='g' + /> + + + ) + }, + { + title: 'Summary', + key: 'done', + content: ( + + + + ) + } + ] + + return ( + + {contextHolder} + +
+ +
+ + + + + + New Filament Stock + +
+ setNewFilamentStockFormValues((prevValues) => ({ + ...prevValues, + ...changedValues + })) + } + initialValues={initialNewFilamentStockForm} + > +
{steps[currentStep].content}
+ + + + {currentStep < steps.length - 1 && ( + + )} + {currentStep === steps.length - 1 && ( + + )} + + +
+
+ ) +} + +NewFilamentStock.propTypes = { + reset: PropTypes.bool.isRequired, + onOk: PropTypes.func.isRequired +} + +export default NewFilamentStock diff --git a/src/components/Dashboard/Inventory/FilamentStocks/UnloadFilamentStock.jsx b/src/components/Dashboard/Inventory/FilamentStocks/UnloadFilamentStock.jsx new file mode 100644 index 0000000..06911eb --- /dev/null +++ b/src/components/Dashboard/Inventory/FilamentStocks/UnloadFilamentStock.jsx @@ -0,0 +1,265 @@ +import React, { useState, useContext, useEffect } from 'react' +import { Form, Button, Typography, Flex, Steps, Divider, Alert } from 'antd' +import PropTypes from 'prop-types' +import { SocketContext } from '../../context/SocketContext' + +import PrinterSelect from '../../common/PrinterSelect' +import PrinterTemperaturePanel from '../../common/PrinterTemperaturePanel' + +import { LoadingOutlined } from '@ant-design/icons' + +const { Title } = Typography + +const UnloadFilamentStock = ({ onOk, reset, printer = null }) => { + UnloadFilamentStock.propTypes = { + onOk: PropTypes.func.isRequired, + reset: PropTypes.bool.isRequired, + printer: PropTypes.object + } + + const { socket } = useContext(SocketContext) + + const initialUnloadFilamentStockForm = { + printer: printer + } + + const [unloadFilamentStockLoading, setUnloadFilamentStockLoading] = + useState(false) + const [currentStep, setCurrentStep] = useState(0) + const [nextEnabled, setNextEnabled] = useState(false) + const [currentTemperature, setCurrentTemperature] = useState(-1) + const [targetTemperature, setTargetTemperature] = useState(0) + const [filamentSensorDetected, setFilamentSensorDetected] = useState(true) + const [unloadFilamentStockForm] = Form.useForm() + const [unloadFilamentStockFormValues, setUnloadFilamentStockFormValues] = + useState(initialUnloadFilamentStockForm) + + // Add websocket temperature monitoring + useEffect(() => { + if (unloadFilamentStockFormValues.printer) { + const params = { + printerId: unloadFilamentStockFormValues.printer._id, + objects: { + extruder: null, + 'filament_switch_sensor fsensor': null + } + } + + const notifyStatusUpdate = (statusUpdate) => { + if (statusUpdate?.extruder?.temperature !== undefined) { + setCurrentTemperature(statusUpdate.extruder.temperature) + } + if (statusUpdate?.extruder?.target !== undefined) { + setTargetTemperature(statusUpdate.extruder.target) + } + if ( + statusUpdate?.['filament_switch_sensor fsensor'] + ?.filament_detected !== undefined + ) { + setFilamentSensorDetected( + Boolean( + statusUpdate['filament_switch_sensor fsensor'].filament_detected + ) + ) + } + } + + socket.emit('printer.objects.subscribe', params) + socket.emit('printer.objects.query', params) + socket.on('notify_status_update', notifyStatusUpdate) + + return () => { + socket.off('notify_status_update', notifyStatusUpdate) + socket.emit('printer.objects.unsubscribe', params) + } + } + }, [socket, unloadFilamentStockFormValues.printer]) + + React.useEffect(() => { + if (reset) { + unloadFilamentStockForm.resetFields() + } + }, [reset, unloadFilamentStockForm]) + + React.useEffect(() => { + unloadFilamentStockForm + .validateFields({ + validateOnly: true + }) + .then(() => { + // Only enable next if we have a printer selected, we're not loading, and we've reached target temperature + setNextEnabled( + Boolean(unloadFilamentStockFormValues.printer) && + !unloadFilamentStockLoading && + currentTemperature > targetTemperature + ) + }) + .catch(() => setNextEnabled(false)) + }, [ + unloadFilamentStockForm, + unloadFilamentStockFormValues, + unloadFilamentStockLoading, + currentTemperature, + targetTemperature + ]) + + const handleUnloadFilamentStock = async () => { + setUnloadFilamentStockLoading(true) + // Send G-code to retract the filament + await socket.emit('printer.gcode.script', { + printerId: unloadFilamentStockFormValues.printer._id, + script: `_CLIENT_LINEAR_MOVE E=-200 F=1000` + }) + //setUnloadFilamentStockLoading(false) + } + + useEffect(() => { + if (unloadFilamentStockLoading == true && filamentSensorDetected == false) { + setUnloadFilamentStockLoading(false) + onOk() + } + }, [unloadFilamentStockLoading, filamentSensorDetected, onOk]) + + const steps = [ + { + title: 'Preheat', + key: 'preHeat', + content: ( + + + + + + {unloadFilamentStockLoading == false ? ( + <> + {targetTemperature == 0 ? ( + + ) : null} + + {targetTemperature > 0 && + currentTemperature < targetTemperature ? ( + } + /> + ) : null} + + {targetTemperature > 0 && + currentTemperature >= targetTemperature && + filamentSensorDetected ? ( + + ) : null} + + ) : ( + } + /> + )} + + {unloadFilamentStockFormValues.printer ? ( + + ) : null} + + ) + } + ] + + return ( + +
+ +
+ + + + + + Unload Filament Stock + +
+ setUnloadFilamentStockFormValues((prevValues) => ({ + ...prevValues, + ...changedValues + })) + } + initialValues={initialUnloadFilamentStockForm} + > +
{steps[currentStep].content}
+ + + + {currentStep < steps.length - 1 && ( + + )} + {currentStep === steps.length - 1 && ( + + )} + + +
+
+ ) +} + +export default UnloadFilamentStock diff --git a/src/components/Dashboard/Inventory/Spools.jsx b/src/components/Dashboard/Inventory/Spools.jsx deleted file mode 100644 index a982896..0000000 --- a/src/components/Dashboard/Inventory/Spools.jsx +++ /dev/null @@ -1,204 +0,0 @@ -import React, { useEffect, useState, useContext } from 'react' -import axios from 'axios' -import moment from 'moment' - -import { - Table, - Button, - Flex, - Space, - Modal, - Drawer, - message, - Dropdown -} from 'antd' -import { EditOutlined, LoadingOutlined, PlusOutlined } from '@ant-design/icons' - -import { AuthContext } from '../../Auth/AuthContext' - -import NewSpool from './Spools/NewSpool.jsx' -import EditSpool from './Spools/EditSpool.jsx' - -const Spools = () => { - const [messageApi, contextHolder] = message.useMessage() - - const [spoolsData, setSpoolsData] = useState([]) - - const [pagination] = useState({ - current: 1, - pageSize: 10, - total: 0 - }) - - const [newSpoolOpen, setNewSpoolOpen] = useState(false) - const [loading, setLoading] = useState(true) - - const [editSpoolOpen, setEditSpoolOpen] = useState(false) - const [editSpool, setEditSpool] = useState(null) - - const { token } = useContext(AuthContext) - - const fetchSpoolsData = async () => { - try { - const response = await axios.get('http://localhost:8080/spools', { - params: { - page: 1, - limit: 25 - }, - headers: { - Accept: 'application/json' - }, - withCredentials: true // Important for including cookies - }) - setSpoolsData(response.data) - setLoading(false) - } catch (err) { - messageApi.info(err) - } - } - - useEffect(() => { - // Fetch initial data - //fetchSpoolsData() - }, [token]) - - // Column definitions - const columns = [ - { - title: 'Name', - dataIndex: 'name', - key: 'name' - }, - { - title: 'Filament', - dataIndex: 'filament', - key: 'filament', - render: (filament) => { - return filament?.name || 'N/A' - } - }, - { - title: 'Current Weight', - dataIndex: 'currentWeight', - key: 'currentWeight', - render: (weight) => { - return weight ? weight + 'g' : 'N/A' - } - }, - { - title: 'Barcode', - dataIndex: 'barcode', - key: 'barcode' - }, - { - title: 'Updated At', - dataIndex: 'updatedat', - key: 'updatedAt', - render: (updatedAt) => { - if (updatedAt !== null) { - const formattedDate = moment(updatedAt.$date).format( - 'YYYY-MM-DD HH:mm:ss' - ) - return {formattedDate} - } else { - return 'n/a' - } - } - }, - { - title: 'Actions', - key: 'operation', - fixed: 'right', - width: 100, - render: (text, record) => { - return ( - - - - -
}} - /> - - { - setNewSpoolOpen(false) - }} - > - { - setNewSpoolOpen(false) - fetchSpoolsData() - }} - reset={newSpoolOpen} - /> - - { - setEditSpoolOpen(false) - }} - > - {editSpool} - - - ) -} - -export default Spools diff --git a/src/components/Dashboard/Inventory/Spools/EditSpool.jsx b/src/components/Dashboard/Inventory/Spools/EditSpool.jsx deleted file mode 100644 index cf3d5fd..0000000 --- a/src/components/Dashboard/Inventory/Spools/EditSpool.jsx +++ /dev/null @@ -1,450 +0,0 @@ -import PropTypes from 'prop-types' -import React, { useState, useEffect } from 'react' -import axios from 'axios' -import { - Form, - Input, - InputNumber, - Button, - message, - Typography, - Select, - Flex, - Steps, - Divider, - ColorPicker, - Upload, - Descriptions, - Badge -} from 'antd' -import { UploadOutlined, LinkOutlined } from '@ant-design/icons' - -const { Text } = Typography - -const EditSpool = ({ id, onOk }) => { - const [messageApi, contextHolder] = message.useMessage() - const [filaments, setFilaments] = useState([]) - - const [editSpoolLoading, setEditSpoolLoading] = useState(false) - const [currentStep, setCurrentStep] = useState(0) - const [nextEnabled, setNextEnabled] = useState(false) - - const [editSpoolForm] = Form.useForm() - const [editSpoolFormValues, setEditSpoolFormValues] = useState(null) - - const [imageList, setImageList] = useState([]) - - const editSpoolFormUpdateValues = Form.useWatch([], editSpoolForm) - - useEffect(() => { - const fetchFilaments = async () => { - try { - const response = await axios.get('http://localhost:8080/filaments', { - withCredentials: true - }) - setFilaments(response.data) - } catch (error) { - messageApi.error('Error fetching filaments: ' + error.message) - } - } - fetchFilaments() - }, [messageApi]) - - React.useEffect(() => { - editSpoolForm - .validateFields({ - validateOnly: true - }) - .then(() => setNextEnabled(true)) - .catch(() => setNextEnabled(false)) - }, [editSpoolForm, editSpoolFormUpdateValues]) - - useEffect(() => { - const fetchSpoolData = async () => { - try { - const response = await axios.get(`http://localhost:8080/spools/${id}`, { - withCredentials: true - }) - const spoolData = response.data - setEditSpoolFormValues(spoolData) - editSpoolForm.setFieldsValue(spoolData) - if (spoolData.image) { - setImageList([ - { - uid: '-1', - name: 'Spool Image', - status: 'done', - url: spoolData.image - } - ]) - } - } catch (error) { - messageApi.error('Error fetching spool data: ' + error.message) - } - } - - fetchSpoolData() - }, [id, editSpoolForm, messageApi]) - - const summaryItems = [ - { - key: 'name', - label: 'Name', - children: editSpoolFormValues?.name - }, - { - key: 'brand', - label: 'Brand', - children: editSpoolFormValues?.brand - }, - { - key: 'type', - label: 'Material', - children: editSpoolFormValues?.type - }, - { - key: 'price', - label: 'Price', - children: '£' + editSpoolFormValues?.price + ' per kg' - }, - { - key: 'color', - label: 'Colour', - children: ( - - ) - }, - { - key: 'diameter', - label: 'Diameter', - children: editSpoolFormValues?.diameter + 'mm' - }, - { - key: 'density', - label: 'Density', - children: editSpoolFormValues?.diameter + 'g/cm³' - }, - { - key: 'image', - label: 'Image', - children: editSpoolFormValues?.image ? ( - - ) : null - }, - { - key: 'url', - label: 'URL', - children: editSpoolFormValues?.url - }, - { - key: 'barcode', - label: 'Barcode', - children: editSpoolFormValues?.barcode - }, - { - key: 'filament', - label: 'Filament', - children: editSpoolFormValues?.filament?.name || 'N/A' - }, - { - key: 'currentWeight', - label: 'Current Weight', - children: editSpoolFormValues?.currentWeight + 'g' - } - ] - - const handleEditSpool = async () => { - setEditSpoolLoading(true) - try { - await axios.put( - `http://localhost:8080/spools/${id}`, - editSpoolFormValues, - { - withCredentials: true - } - ) - messageApi.success('Spool updated successfully.') - onOk() - } catch (error) { - messageApi.error('Error updating spool: ' + error.message) - } finally { - setEditSpoolLoading(false) - } - } - - const getBase64 = (file) => { - return new Promise((resolve, reject) => { - const reader = new FileReader() - reader.readAsDataURL(file) - reader.onload = () => resolve(reader.result) - reader.onerror = (error) => reject(error) - }) - } - - const handleImageUpload = async ({ file, fileList }) => { - if (fileList.length === 0) { - setImageList(fileList) - editSpoolForm.setFieldsValue({ image: '' }) - return - } - const base64 = await getBase64(file) - setEditSpoolFormValues((prevValues) => ({ - ...prevValues, - image: base64 - })) - fileList[0].name = 'Spool Image' - setImageList(fileList) - editSpoolForm.setFieldsValue({ image: base64 }) - } - - const steps = [ - { - title: 'Required', - key: 'required', - content: ( - <> - - Required information: - - - - - - - - - - - - - { - if (!value) return '£' - return `£${value}` - }} - step={0.01} - style={{ width: '100%' }} - addonAfter='per kg' - /> - - - - - - - - - - - - - - - ) - }, - { - title: 'Optional', - key: 'optional', - content: ( - <> - - - - - - - - - - } - placeholder='https://example.com' - /> - - - ) - }, - { - title: 'Summary', - key: 'summary', - content: ( - <> - - Please review the information: - - - - ) - } - ] - - return ( - <> - {contextHolder} -
{ - setEditSpoolFormValues(allValues) - }} - > - { - setCurrentStep(current) - }} - /> - - {steps[currentStep].content} - - - {currentStep > 0 && ( - - )} - {currentStep < steps.length - 1 && ( - - )} - {currentStep === steps.length - 1 && ( - - )} - - - - ) -} - -EditSpool.propTypes = { - id: PropTypes.string.isRequired, - onOk: PropTypes.func.isRequired -} - -export default EditSpool diff --git a/src/components/Dashboard/Inventory/Spools/NewSpool.jsx b/src/components/Dashboard/Inventory/Spools/NewSpool.jsx deleted file mode 100644 index 1456d91..0000000 --- a/src/components/Dashboard/Inventory/Spools/NewSpool.jsx +++ /dev/null @@ -1,443 +0,0 @@ -import PropTypes from 'prop-types' -import React, { useState, useEffect } from 'react' -import axios from 'axios' -import { - Form, - Input, - InputNumber, - Button, - message, - Typography, - Select, - Flex, - Steps, - Divider, - ColorPicker, - Upload, - Descriptions, - Badge -} from 'antd' -import { UploadOutlined, LinkOutlined } from '@ant-design/icons' - -const { Text } = Typography - -const initialNewSpoolForm = { - name: '', - brand: '', - type: '', - price: 0, - color: '#FFFFFF', - diameter: '1.75', - image: null, - url: '', - barcode: '', - filament: null, - currentWeight: 0 -} - -const NewSpool = ({ onOk, reset }) => { - const [messageApi, contextHolder] = message.useMessage() - const [filaments, setFilaments] = useState([]) - - const [newSpoolLoading, setNewSpoolLoading] = useState(false) - const [currentStep, setCurrentStep] = useState(0) - const [nextEnabled, setNextEnabled] = useState(false) - - const [newSpoolForm] = Form.useForm() - const [newSpoolFormValues, setNewSpoolFormValues] = - useState(initialNewSpoolForm) - - const [imageList, setImageList] = useState([]) - - const newSpoolFormUpdateValues = Form.useWatch([], newSpoolForm) - - useEffect(() => { - const fetchFilaments = async () => { - try { - const response = await axios.get('http://localhost:8080/filaments', { - withCredentials: true - }) - setFilaments(response.data) - } catch (error) { - messageApi.error('Error fetching filaments: ' + error.message) - } - } - fetchFilaments() - }, [messageApi]) - - React.useEffect(() => { - newSpoolForm - .validateFields({ - validateOnly: true - }) - .then(() => setNextEnabled(true)) - .catch(() => setNextEnabled(false)) - }, [newSpoolForm, newSpoolFormUpdateValues]) - - const summaryItems = [ - { - key: 'name', - label: 'Name', - children: newSpoolFormValues.name - }, - { - key: 'brand', - label: 'Brand', - children: newSpoolFormValues.brand - }, - { - key: 'type', - label: 'Material', - children: newSpoolFormValues.type - }, - { - key: 'price', - label: 'Price', - children: '£' + newSpoolFormValues.price + ' per kg' - }, - { - key: 'color', - label: 'Colour', - children: ( - - ) - }, - { - key: 'diameter', - label: 'Diameter', - children: newSpoolFormValues.diameter + 'mm' - }, - { - key: 'density', - label: 'Density', - children: newSpoolFormValues.diameter + 'g/cm³' - }, - { - key: 'image', - label: 'Image', - children: ( - - ) - }, - { - key: 'url', - label: 'URL', - children: newSpoolFormValues.url - }, - { - key: 'barcode', - label: 'Barcode', - children: newSpoolFormValues.barcode - }, - { - key: 'filament', - label: 'Filament', - children: newSpoolFormValues.filament?.name || 'N/A' - }, - { - key: 'currentWeight', - label: 'Current Weight', - children: newSpoolFormValues.currentWeight + 'g' - } - ] - - React.useEffect(() => { - if (reset) { - newSpoolForm.resetFields() - } - }, [reset, newSpoolForm]) - - const handleNewSpool = async () => { - setNewSpoolLoading(true) - try { - await axios.post(`http://localhost:8080/spools`, newSpoolFormValues, { - withCredentials: true - }) - messageApi.success('New spool created successfully.') - onOk() - } catch (error) { - messageApi.error('Error creating new spool: ' + error.message) - } finally { - setNewSpoolLoading(false) - } - } - - const getBase64 = (file) => { - return new Promise((resolve, reject) => { - const reader = new FileReader() - reader.readAsDataURL(file) - reader.onload = () => resolve(reader.result) - reader.onerror = (error) => reject(error) - }) - } - - const handleImageUpload = async ({ file, fileList }) => { - if (fileList.length === 0) { - setImageList(fileList) - newSpoolForm.setFieldsValue({ image: '' }) - return - } - const base64 = await getBase64(file) - setNewSpoolFormValues((prevValues) => ({ - ...prevValues, - image: base64 - })) - fileList[0].name = 'Spool Image' - setImageList(fileList) - newSpoolForm.setFieldsValue({ image: base64 }) - } - - const steps = [ - { - title: 'Required', - key: 'required', - content: ( - <> - - Required information: - - - - - - - - - - - - - { - if (!value) return '£' - return `£${value}` - }} - step={0.01} - style={{ width: '100%' }} - addonAfter='per kg' - /> - - - - - - - - - - - - - - - ) - }, - { - title: 'Optional', - key: 'optional', - content: ( - <> - - Optional information: - - - - - - - - - - - } - placeholder='https://example.com' - /> - - - ) - }, - { - title: 'Summary', - key: 'summary', - content: ( - <> - - Please review the information: - - - - ) - } - ] - - return ( - <> - {contextHolder} -
{ - setNewSpoolFormValues(allValues) - }} - > - { - setCurrentStep(current) - }} - /> - - {steps[currentStep].content} - - - {currentStep > 0 && ( - - )} - {currentStep < steps.length - 1 && ( - - )} - {currentStep === steps.length - 1 && ( - - )} - - - - ) -} - -NewSpool.propTypes = { - onOk: PropTypes.func.isRequired, - reset: PropTypes.bool.isRequired -} - -export default NewSpool diff --git a/src/components/Dashboard/Management/Filaments.jsx b/src/components/Dashboard/Management/Filaments.jsx index 6d53194..a516020 100644 --- a/src/components/Dashboard/Management/Filaments.jsx +++ b/src/components/Dashboard/Management/Filaments.jsx @@ -13,7 +13,8 @@ import { Space, Modal, message, - Dropdown + Dropdown, + Typography } from 'antd' import { createStyles } from 'antd-style' import { @@ -29,6 +30,8 @@ import NewFilament from './Filaments/NewFilament' import IdText from '../common/IdText' import FilamentIcon from '../../Icons/FilamentIcon' +const { Text } = Typography + const useStyle = createStyles(({ css, token }) => { const { antCls } = token return { @@ -99,7 +102,7 @@ const Filaments = () => { ], onClick: ({ key }) => { if (key === 'info') { - navigate(`/management/filaments/info?filamentId=${id}`) + navigate(`/dashboard/management/filaments/info?filamentId=${id}`) } } } @@ -131,9 +134,12 @@ const Filaments = () => { }, { title: 'Vendor', - dataIndex: 'brand', - key: 'brand', - width: 200 + dataIndex: 'vendor', + key: 'vendor', + width: 200, + render: (vendor) => { + return vendor.name + } }, { title: 'Material', @@ -142,12 +148,12 @@ const Filaments = () => { key: 'material' }, { - title: 'Price', - dataIndex: 'price', + title: 'Cost', + dataIndex: 'cost', width: 120, - key: 'price', - render: (price) => { - return '£' + price + ' per kg' + key: 'cost', + render: (cost) => { + return {'£' + cost + ' per kg'} } }, { @@ -173,6 +179,20 @@ const Filaments = () => { } } }, + { + title: 'Updated At', + dataIndex: 'updatedAt', + key: 'updatedAt', + width: 180, + render: (updatedAt) => { + if (updatedAt) { + const formattedDate = moment(updatedAt).format('YYYY-MM-DD HH:mm:ss') + return {formattedDate} + } else { + return 'n/a' + } + } + }, { title: 'Actions', key: 'actions', @@ -184,7 +204,9 @@ const Filaments = () => { ) : ( - +
+ +
- -
- - - - - - New Filament - -
- setNewFilamentFormValues((prevValues) => ({ - ...prevValues, - ...changedValues - })) - } - initialValues={initialNewFilamentForm} - > - {steps[currentStep].content} + - + + + + + New Filament + + + + setNewFilamentFormValues((prevValues) => ({ + ...prevValues, + ...changedValues + })) + } + initialValues={initialNewFilamentForm} + > +
{steps[currentStep].content}
+ + + + {currentStep < steps.length - 1 && ( - {currentStep < steps.length - 1 && ( - - )} - {currentStep === steps.length - 1 && ( - - )} - - -
- - + )} + {currentStep === steps.length - 1 && ( + + )} +
+ +
+ ) } diff --git a/src/components/Dashboard/Management/Materials.jsx b/src/components/Dashboard/Management/Materials.jsx new file mode 100644 index 0000000..e238a93 --- /dev/null +++ b/src/components/Dashboard/Management/Materials.jsx @@ -0,0 +1,288 @@ +// src/materials.js + +import React, { useEffect, useState, useContext, useCallback } from 'react' +import { useNavigate } from 'react-router-dom' +import axios from 'axios' +import moment from 'moment' + +import { + Table, + Button, + Flex, + Space, + Modal, + message, + Dropdown, + Spin +} from 'antd' +import { createStyles } from 'antd-style' +import { + LoadingOutlined, + PlusOutlined, + ReloadOutlined, + InfoCircleOutlined +} from '@ant-design/icons' + +import { AuthContext } from '../../Auth/AuthContext' + +import NewMaterial from './Materials/NewMaterial' +import IdText from '../common/IdText' +import MaterialIcon from '../../Icons/MaterialIcon' + +const useStyle = createStyles(({ css, token }) => { + const { antCls } = token + return { + customTable: css` + ${antCls}-table { + ${antCls}-table-container { + ${antCls}-table-body, + ${antCls}-table-content { + scrollbar-width: thin; + scrollbar-color: #eaeaea transparent; + scrollbar-gutter: stable; + } + } + } + ` + } +}) + +const Materials = () => { + const [messageApi, contextHolder] = message.useMessage() + const navigate = useNavigate() + const { styles } = useStyle() + + const [materialsData, setMaterialsData] = useState([]) + const [page, setPage] = useState(1) + const [hasMore, setHasMore] = useState(true) + const [loading, setLoading] = useState(true) + const [lazyLoading, setLazyLoading] = useState(false) + const [newMaterialOpen, setNewMaterialOpen] = useState(false) + + const { authenticated } = useContext(AuthContext) + + const fetchMaterialsData = useCallback( + async (pageNum = 1, append = false) => { + try { + const response = await axios.get('http://localhost:8080/materials', { + params: { + page: pageNum, + limit: 25 + }, + headers: { + Accept: 'application/json' + }, + withCredentials: true + }) + + const newData = response.data + setHasMore(newData.length === 25) // If we get less than 25 items, we've reached the end + + if (append) { + setMaterialsData((prev) => [...prev, ...newData]) + } else { + setMaterialsData(newData) + } + + setLoading(false) + setLazyLoading(false) + } catch (error) { + if (error.response) { + messageApi.error( + 'Error updating material details:', + error.response.status + ) + } else { + messageApi.error( + 'An unexpected error occurred. Please try again later.' + ) + } + setLoading(false) + setLazyLoading(false) + } + }, + [messageApi] + ) + + useEffect(() => { + if (authenticated) { + fetchMaterialsData() + } + }, [authenticated, fetchMaterialsData]) + + const handleScroll = useCallback( + (e) => { + const { target } = e + const scrollHeight = target.scrollHeight + const scrollTop = target.scrollTop + const clientHeight = target.clientHeight + + // If we're near the bottom (within 100px) and not currently loading + if ( + scrollHeight - scrollTop - clientHeight < 100 && + !lazyLoading && + hasMore + ) { + setLazyLoading(true) + const nextPage = page + 1 + setPage(nextPage) + fetchMaterialsData(nextPage, true) + } + }, + [page, lazyLoading, hasMore, fetchMaterialsData] + ) + + const getMaterialActionItems = (id) => { + return { + items: [ + { + label: 'Info', + key: 'info', + icon: + } + ], + onClick: ({ key }) => { + if (key === 'info') { + navigate(`/dashboard/management/materials/info?materialId=${id}`) + } + } + } + } + + const columns = [ + { + title: '', + dataIndex: '', + key: 'icon', + width: 40, + fixed: 'left', + render: () => + }, + { + title: 'Name', + dataIndex: 'name', + key: 'name', + width: 200, + fixed: 'left' + }, + { + title: 'ID', + dataIndex: '_id', + key: 'id', + width: 165, + render: (text) => + }, + { + title: 'Category', + dataIndex: 'category', + key: 'category', + width: 150 + }, + { + title: 'Created At', + dataIndex: 'createdAt', + key: 'createdAt', + width: 180, + render: (createdAt) => { + if (createdAt) { + const formattedDate = moment(createdAt).format('YYYY-MM-DD HH:mm:ss') + return {formattedDate} + } else { + return 'n/a' + } + } + }, + { + title: 'Actions', + key: 'actions', + fixed: 'right', + width: 150, + render: (text, record) => { + return ( + + + + + ) + } + } + ] + + const actionItems = { + items: [ + { + label: 'New Material', + key: 'newMaterial', + icon: + }, + { type: 'divider' }, + { + label: 'Reload List', + key: 'reloadList', + icon: + } + ], + onClick: ({ key }) => { + if (key === 'reloadList') { + fetchMaterialsData() + } else if (key === 'newMaterial') { + setNewMaterialOpen(true) + } + } + } + + return ( + <> + + {contextHolder} + + + + + +
}} + scroll={{ y: 'calc(100vh - 270px)' }} + onScroll={handleScroll} + /> + {lazyLoading && ( +
+ } /> +
+ )} + + { + setNewMaterialOpen(false) + }} + > + { + setNewMaterialOpen(false) + fetchMaterialsData() + }} + /> + + + ) +} + +export default Materials diff --git a/src/components/Dashboard/Management/Materials/NewMaterial.jsx b/src/components/Dashboard/Management/Materials/NewMaterial.jsx new file mode 100644 index 0000000..1d9c773 --- /dev/null +++ b/src/components/Dashboard/Management/Materials/NewMaterial.jsx @@ -0,0 +1,277 @@ +import PropTypes from 'prop-types' +import React, { useState } from 'react' +import axios from 'axios' +import { + Form, + Input, + Button, + message, + Select, + Flex, + Steps, + Divider, + Upload, + Descriptions +} from 'antd' +import { UploadOutlined } from '@ant-design/icons' +import VendorSelect from '../../common/VendorSelect' + +const initialNewMaterialForm = { + name: '', + vendor: { id: null, name: '' }, + category: '', + image: null, + url: '', + barcode: '' +} + +const NewMaterial = ({ onSuccess }) => { + const [messageApi, contextHolder] = message.useMessage() + + const [newMaterialLoading, setNewMaterialLoading] = useState(false) + const [currentStep, setCurrentStep] = useState(0) + const [nextEnabled, setNextEnabled] = useState(false) + + const [newMaterialForm] = Form.useForm() + const [newMaterialFormValues, setNewMaterialFormValues] = useState( + initialNewMaterialForm + ) + + const [imageList, setImageList] = useState([]) + + const newMaterialFormUpdateValues = Form.useWatch([], newMaterialForm) + + React.useEffect(() => { + newMaterialForm + .validateFields({ + validateOnly: true + }) + .then(() => setNextEnabled(true)) + .catch(() => setNextEnabled(false)) + }, [newMaterialForm, newMaterialFormUpdateValues]) + + const summaryItems = [ + { + key: 'name', + label: 'Name', + children: newMaterialFormValues.name + }, + { + key: 'vendor', + label: 'Vendor', + children: newMaterialFormValues.vendor.name + }, + { + key: 'category', + label: 'Category', + children: newMaterialFormValues.category + }, + { + key: 'image', + label: 'Image', + children: newMaterialFormValues.image && ( + Material + ) + }, + { + key: 'url', + label: 'URL', + children: newMaterialFormValues.url + }, + { + key: 'barcode', + label: 'Barcode', + children: newMaterialFormValues.barcode + } + ] + + const handleNewMaterial = async () => { + setNewMaterialLoading(true) + try { + await axios.post( + `http://localhost:8080/materials`, + newMaterialFormValues, + { + withCredentials: true + } + ) + messageApi.success('New material created successfully.') + onSuccess() + } catch (error) { + messageApi.error('Error creating new material: ' + error.message) + } finally { + setNewMaterialLoading(false) + } + } + + const getBase64 = (file) => { + return new Promise((resolve, reject) => { + const reader = new FileReader() + reader.readAsDataURL(file) + reader.onload = () => resolve(reader.result) + reader.onerror = (error) => reject(error) + }) + } + + const handleImageUpload = async ({ file, fileList }) => { + if (fileList.length === 0) { + setImageList(fileList) + newMaterialForm.setFieldsValue({ image: '' }) + return + } + const base64 = await getBase64(file) + setNewMaterialFormValues((prevValues) => ({ + ...prevValues, + image: base64 + })) + fileList[0].name = 'Material Image' + setImageList(fileList) + newMaterialForm.setFieldsValue({ image: base64 }) + } + + const steps = [ + { + title: 'Details', + key: 'details', + content: ( + <> + + + + + + + + + + + ) + }, + { + title: 'Additional Info', + key: 'additional', + content: ( + <> + + false} + > + + + + + + + + + + + ) + }, + { + title: 'Summary', + key: 'summary', + content: ( + <> + + + ) + } + ] + + return ( + <> + {contextHolder} +
{ + setNewMaterialFormValues((prevValues) => ({ + ...prevValues, + ...changedValues + })) + }} + > + ({ title: item.title }))} + style={{ marginBottom: 24 }} + /> +
{steps[currentStep].content}
+ + + + {currentStep < steps.length - 1 ? ( + + ) : ( + + )} + + + + ) +} + +NewMaterial.propTypes = { + onSuccess: PropTypes.func.isRequired +} + +export default NewMaterial diff --git a/src/components/Dashboard/Management/Parts.jsx b/src/components/Dashboard/Management/Parts.jsx index 9542b14..7aff893 100644 --- a/src/components/Dashboard/Management/Parts.jsx +++ b/src/components/Dashboard/Management/Parts.jsx @@ -5,22 +5,39 @@ import { useNavigate } from 'react-router-dom' import axios from 'axios' import moment from 'moment' -import { Table, Button, Flex, Space, Modal, Dropdown, message } from 'antd' +import { + Table, + Button, + Flex, + Space, + Modal, + Dropdown, + message, + Typography, + Spin, + Checkbox, + Popover, + Input +} from 'antd' import { createStyles } from 'antd-style' import { LoadingOutlined, PlusOutlined, DownloadOutlined, ReloadOutlined, - InfoCircleOutlined + InfoCircleOutlined, + CheckOutlined, + CloseOutlined } from '@ant-design/icons' import { AuthContext } from '../../Auth/AuthContext' import IdText from '../common/IdText' -import NewPart from './Parts/NewPart' +import NewProduct from './Products/NewProduct' import PartIcon from '../../Icons/PartIcon' +const { Text } = Typography + const useStyle = createStyles(({ css, token }) => { const { antCls } = token return { @@ -45,41 +62,201 @@ const Parts = () => { const { styles } = useStyle() const [partsData, setPartsData] = useState([]) - - const [newPartOpen, setNewPartOpen] = useState(false) - + const [page, setPage] = useState(1) + const [hasMore, setHasMore] = useState(true) const [loading, setLoading] = useState(true) + const [lazyLoading, setLazyLoading] = useState(false) + const [newProductOpen, setNewProductOpen] = useState(false) - const { authenticated } = useContext(AuthContext) - - const fetchPartsData = useCallback(async () => { - try { - const response = await axios.get('http://localhost:8080/parts', { - params: { - page: 1, - limit: 25 - }, - headers: { - Accept: 'application/json' - }, - withCredentials: true // Important for including cookies - }) - setPartsData(response.data) - setLoading(false) - //setPagination({ ...pagination, total: response.data.totalItems }); // Update total count - } catch (error) { - if (error.response) { - messageApi.error( - 'Error updating printer details:', - error.response.status - ) - } else { - messageApi.error( - 'An unexpected error occurred. Please try again later.' + // Column definitions + const columns = [ + { + title: '', + dataIndex: '', + key: '', + width: 40, + fixed: 'left', + render: () => + }, + { + title: 'Name', + dataIndex: 'name', + key: 'name', + width: 200, + fixed: 'left', + render: (text) => {text}, + filterDropdown: ({ + setSelectedKeys, + selectedKeys, + confirm, + clearFilters + }) => + getFilterDropdown({ + setSelectedKeys, + selectedKeys, + confirm, + clearFilters, + propertyName: 'name' + }), + onFilter: (value, record) => + record.name.toLowerCase().includes(value.toLowerCase()) + }, + { + title: 'ID', + dataIndex: '_id', + key: 'id', + width: 165, + render: (text) => + }, + { + title: 'Product Name', + key: 'productName', + width: 200, + render: (record) => {record.product.name}, + filterDropdown: ({ + setSelectedKeys, + selectedKeys, + confirm, + clearFilters + }) => + getFilterDropdown({ + setSelectedKeys, + selectedKeys, + confirm, + clearFilters, + propertyName: 'product name' + }), + onFilter: (value, record) => + record.product.name.toLowerCase().includes(value.toLowerCase()) + }, + { + title: 'Product ID', + key: 'productId', + width: 165, + render: (record) => ( + + ) + }, + { + title: 'Created At', + dataIndex: 'createdAt', + key: 'createdAt', + width: 180, + render: (createdAt) => { + if (createdAt) { + const formattedDate = moment(createdAt).format('YYYY-MM-DD HH:mm:ss') + return {formattedDate} + } else { + return 'n/a' + } + }, + sorter: true, + defaultSortOrder: 'descend' + }, + { + title: 'Updated At', + dataIndex: 'updatedAt', + key: 'updatedAt', + width: 180, + render: (updatedAt) => { + if (updatedAt) { + const formattedDate = moment(updatedAt).format('YYYY-MM-DD HH:mm:ss') + return {formattedDate} + } else { + return 'n/a' + } + }, + sorter: true, + defaultSortOrder: 'descend' + }, + { + title: 'Actions', + key: 'actions', + fixed: 'right', + width: 150, + render: (text, record) => { + return ( + + + + ) } } - }, [messageApi]) + ] + + const [filters, setFilters] = useState({}) + const [sorter, setSorter] = useState({}) + const [columnVisibility, setColumnVisibility] = useState( + columns.reduce((acc, col) => { + if (col.key) { + acc[col.key] = true + } + return acc + }, {}) + ) + + const { authenticated } = useContext(AuthContext) + + const fetchPartsData = useCallback( + async (pageNum = 1, append = false) => { + try { + const response = await axios.get('http://localhost:8080/parts', { + params: { + page: pageNum, + limit: 25, + ...filters, + sort: sorter.field, + order: sorter.order + }, + headers: { + Accept: 'application/json' + }, + withCredentials: true + }) + + const newData = response.data + setHasMore(newData.length === 25) + + if (append) { + setPartsData((prev) => [...prev, ...newData]) + } else { + setPartsData(newData) + } + + setLoading(false) + setLazyLoading(false) + } catch (error) { + if (error.response) { + messageApi.error( + 'Error updating printer details:', + error.response.status + ) + } else { + messageApi.error( + 'An unexpected error occurred. Please try again later.' + ) + } + setLoading(false) + setLazyLoading(false) + } + }, + [messageApi, filters, sorter] + ) useEffect(() => { if (authenticated) { @@ -87,6 +264,28 @@ const Parts = () => { } }, [authenticated, fetchPartsData]) + const handleScroll = useCallback( + (e) => { + const { target } = e + const scrollHeight = target.scrollHeight + const scrollTop = target.scrollTop + const clientHeight = target.clientHeight + + // If we're near the bottom (within 100px) and not currently loading + if ( + scrollHeight - scrollTop - clientHeight < 100 && + !lazyLoading && + hasMore + ) { + setLazyLoading(true) + const nextPage = page + 1 + setPage(nextPage) + fetchPartsData(nextPage, true) + } + }, + [page, lazyLoading, hasMore, fetchPartsData] + ) + const getPartActionItems = (id) => { return { items: [ @@ -103,78 +302,53 @@ const Parts = () => { ], onClick: ({ key }) => { if (key === 'info') { - navigate(`/management/parts/info?partId=${id}`) + navigate(`/dashboard/management/parts/info?partId=${id}`) } } } } - // Column definitions - const columns = [ - { - title: '', - dataIndex: '', - key: '', - width: 40, - fixed: 'left', - render: () => - }, - { - title: 'Name', - dataIndex: 'name', - key: 'name', - width: 200, - fixed: 'left' - }, - { - title: 'ID', - dataIndex: '_id', - key: 'id', - width: 165, - render: (text) => - }, - { - title: 'Created At', - dataIndex: 'createdAt', - key: 'createdAt', - width: 180, - render: (createdAt) => { - if (createdAt) { - const formattedDate = moment(createdAt).format('YYYY-MM-DD HH:mm:ss') - return {formattedDate} - } else { - return 'n/a' - } - } - }, - { - title: 'Actions', - key: 'actions', - fixed: 'right', - width: 150, - render: (text, record) => { - return ( - - - - - ) - } - } - ] + const getFilterDropdown = ({ + setSelectedKeys, + selectedKeys, + confirm, + clearFilters, + propertyName + }) => { + return ( +
+ + + setSelectedKeys(e.target.value ? [e.target.value] : []) + } + onPressEnter={() => confirm()} + style={{ width: 200, display: 'block' }} + /> +
+ ) + } const actionItems = { items: [ { - label: 'New Part', - key: 'newPart', + label: 'New Product', + key: 'newProduct', icon: }, { type: 'divider' }, @@ -186,46 +360,108 @@ const Parts = () => { ], onClick: ({ key }) => { if (key === 'reloadList') { - fetchPartsData() - } else if (key === 'newPart') { - setNewPartOpen(true) + setPage(1) + fetchPartsData(1) + } else if (key === 'newProduct') { + setNewProductOpen(true) } } } + const handleTableChange = (pagination, filters, sorter) => { + const newFilters = {} + Object.entries(filters).forEach(([key, value]) => { + if (value && value.length > 0) { + newFilters[key] = value[0] + } + }) + setPage(1) + setFilters(newFilters) + setSorter({ + field: sorter.field, + order: sorter.order + }) + } + + const getViewDropdownItems = () => { + const columnItems = columns + .filter((col) => col.key && col.title !== '') + .map((col) => ( + { + setColumnVisibility((prev) => ({ + ...prev, + [col.key]: e.target.checked + })) + }} + > + {col.title} + + )) + + return ( + + + {columnItems} + + + ) + } + + const visibleColumns = columns.filter( + (col) => !col.key || columnVisibility[col.key] + ) + return ( <> {contextHolder} - - - - - + + + + + + + + + + {lazyLoading && } />} +
}} + onScroll={handleScroll} + onChange={handleTableChange} + showSorterTooltip={false} /> { - setNewPartOpen(false) + setNewProductOpen(false) }} + destroyOnClose > - { - setNewPartOpen(false) - fetchPartsData() + setNewProductOpen(false) + setPage(1) + fetchPartsData(1) }} - reset={newPartOpen} + reset={newProductOpen} /> diff --git a/src/components/Dashboard/Management/Parts/NewPart.jsx b/src/components/Dashboard/Management/Parts/NewPart.jsx deleted file mode 100644 index 5235180..0000000 --- a/src/components/Dashboard/Management/Parts/NewPart.jsx +++ /dev/null @@ -1,471 +0,0 @@ -import PropTypes from 'prop-types' -import React, { useState, useContext, useEffect, useRef } from 'react' -import axios from 'axios' -import { - Form, - Input, - Button, - message, - Typography, - Flex, - Steps, - Divider, - Upload, - Descriptions, - Modal -} from 'antd' -import { DeleteOutlined, EyeOutlined } from '@ant-design/icons' -import { AuthContext } from '../../../Auth/AuthContext' -import PartIcon from '../../../Icons/PartIcon' -import { StlViewer } from 'react-stl-viewer' - -const { Dragger } = Upload -const { Title } = Typography - -const initialNewPartsForm = { parts: [{ name: 'Test' }] } - -const NewPart = ({ onOk, reset }) => { - const [messageApi, contextHolder] = message.useMessage() - const [newPartLoading, setNewPartLoading] = useState(false) - const [currentStep, setCurrentStep] = useState(0) - const [nextEnabled, setNextEnabled] = useState(false) - - const [newPartsForm] = Form.useForm() - const [newPartsFormValues, setNewPartsFormValues] = - useState(initialNewPartsForm) - - // Store files and their object URLs - const [fileList, setFileList] = useState([]) - const [fileObjectUrls, setFileObjectUrls] = useState({}) - const [names, setNames] = useState({}) - - // Preview modal state - const [previewVisible, setPreviewVisible] = useState(false) - const [previewFile, setPreviewFile] = useState(null) - const [stlLoading, setStlLoading] = useState(false) - - const newPartsFormUpdateValues = Form.useWatch([], newPartsForm) - - const { token, authenticated } = useContext(AuthContext) - - // Timer reference for delayed STL rendering - const stlTimerRef = useRef(null) - - // Validate form fields - useEffect(() => { - if (currentStep === 0) { - // For combined upload/files step - setNextEnabled(fileList.length > 0) - } else { - newPartsForm - .validateFields({ - validateOnly: true - }) - .then(() => setNextEnabled(true)) - .catch(() => setNextEnabled(false)) - } - }, [newPartsForm, newPartsFormUpdateValues, fileList, currentStep]) - - // Handle reset - useEffect(() => { - if (reset) { - newPartsForm.resetFields() - setFileList([]) - setFileObjectUrls({}) - setNames({}) - setCurrentStep(0) - } - }, [reset, newPartsForm]) - - // Clean up object URLs when component unmounts - useEffect(() => { - return () => { - Object.values(fileObjectUrls).forEach((url) => { - URL.revokeObjectURL(url) - }) - if (stlTimerRef.current) { - clearTimeout(stlTimerRef.current) - } - } - }, [fileObjectUrls]) - - // Create a summary of all parts for the final step - const summaryItems = fileList - .map((file, index) => ({ - key: file.uid, - label: `Part ${index + 1}`, - children: names[file.uid] || file.name.replace(/\.[^/.]+$/, '') - })) - .concat([ - { - key: 'name', - label: 'Product Name', - children: newPartsFormValues.name - } - ]) - - // Handle file upload - const handleFileUpload = async (files) => { - if (!authenticated) { - return - } - setNewPartLoading(true) - - try { - // First create the part entries - const partsData = [] - - for (const file of files) { - const partName = names[file.uid] || file.name.replace(/\.[^/.]+$/, '') - const partData = { - name: partName, - partInfo: {} - } - - const response = await axios.post( - `http://localhost:8080/parts`, - partData, - { - headers: { - Authorization: `Bearer ${token}` - } - } - ) - - // Now upload the actual file content - const formData = new FormData() - formData.append('partFile', file) - await axios.post( - `http://localhost:8080/parts/${response.data._id}/content`, - formData, - { - headers: { - 'Content-Type': 'multipart/form-data', - Authorization: `Bearer ${token}` - } - } - ) - - partsData.push({ - id: response.data._id, - name: partName - }) - } - - // Create product with all the parts references - await axios.post(`http://localhost:8080/products`, newPartsFormValues, { - headers: { - Authorization: `Bearer ${token}` - } - }) - - messageApi.success(`Parts and product created successfully!`) - onOk() - } catch (error) { - messageApi.error('Error creating parts: ' + error.message) - } finally { - setNewPartLoading(false) - } - } - - // Handle file name change - const handleFileNameChange = (uid, name) => { - setNames((prev) => ({ - ...prev, - [uid]: name - })) - } - - // Preview STL file - const handlePreview = (file) => { - setPreviewFile(file) - setPreviewVisible(true) - setStlLoading(true) - - // Delay the rendering of the STL viewer to fix glitch - if (stlTimerRef.current) { - clearTimeout(stlTimerRef.current) - } - - stlTimerRef.current = setTimeout(() => { - setStlLoading(false) - }, 300) - } - - // Add file to list - const handleAddFile = (file) => { - // Create object URL for preview - const objectUrl = URL.createObjectURL(file) - - setNewPartsFormValues((prev) => ({ - parts: [ - ...prev.parts, - { - name: file.name, - size: file.size, - objectUrl: objectUrl - } - ] - })) - - console.log(newPartsFormValues) - newPartsForm.setFormValues({ - parts: [ - ...newPartsFormValues.parts, - { - name: file.name, - size: file.size, - objectUrl: objectUrl - } - ] - }) - - // Set default name (filename without extension) - const defaultName = file.name.replace(/\.[^/.]+$/, '') - setNames((prev) => ({ - ...prev, - [file.uid]: defaultName - })) - - return false // Prevent default upload behavior - } - - // Combined upload and files content for step 1 - const combinedUploadFilesContent = ( - <> - {fileList.length > 0 && ( - - - {(parts, { remove }) => ( - <> - {parts.map((part) => ( - - - - handleFileNameChange('file.uid', e.target.value) - } - /> - - - - , - - {currentStep < steps.length - 1 && ( - - )} - {currentStep === steps.length - 1 && ( - - )} - - - - - {/* STL Preview Modal */} - { - setPreviewVisible(false) - setPreviewFile(null) - if (stlTimerRef.current) { - clearTimeout(stlTimerRef.current) - } - }} - style={{ top: 30 }} - width={'90%'} - > - - {previewFile && !stlLoading && ( -
- -
- )} - {stlLoading && ( -
- Loading 3D model... -
- )} -
-
- - ) -} - -NewPart.propTypes = { - reset: PropTypes.bool.isRequired, - onOk: PropTypes.func.isRequired -} - -export default NewPart diff --git a/src/components/Dashboard/Management/Parts/PartInfo.jsx b/src/components/Dashboard/Management/Parts/PartInfo.jsx index de8a4b9..7221258 100644 --- a/src/components/Dashboard/Management/Parts/PartInfo.jsx +++ b/src/components/Dashboard/Management/Parts/PartInfo.jsx @@ -1,4 +1,4 @@ -import React, { useState, useEffect } from 'react' +import React, { useState, useEffect, useRef } from 'react' import { useLocation } from 'react-router-dom' import axios from 'axios' import { @@ -11,7 +11,11 @@ import { Card, Flex, Form, - Input + Input, + Checkbox, + InputNumber, + Switch, + Tag } from 'antd' import { LoadingOutlined, @@ -33,15 +37,29 @@ const PartInfo = () => { const location = useLocation() const [messageApi, contextHolder] = message.useMessage() const partId = new URLSearchParams(location.search).get('partId') - const [partFileObjectId, setPartFileObjectId] = useState(null) + const [marginOrPrice, setMarginOrPrice] = useState(false) + const [useGlobalPricing, setUseGlobalPricing] = useState(true) + + const [partForm] = Form.useForm() + const [partFormValues, setPartFormValues] = useState({}) + + // Add a ref to store the object URL + const objectUrlRef = useRef(null) + // Add a ref to store the array buffer + const arrayBufferRef = useRef(null) + const [isEditing, setIsEditing] = useState(false) - const [form] = Form.useForm() const [fetchLoading, setFetchLoading] = useState(true) + const [partFileObjectId, setPartFileObjectId] = useState(null) + const [stlLoadError, setStlLoadError] = useState(null) + useEffect(() => { async function fetchData() { await fetchPartDetails() - await fetchPartContent() + setTimeout(async () => { + await fetchPartContent() + }, 1000) } if (partId) { fetchData() @@ -50,11 +68,21 @@ const PartInfo = () => { useEffect(() => { if (partData) { - form.setFieldsValue({ - name: partData.name || '' + partForm.setFieldsValue({ + name: partData.name || '', + price: partData.price || null, + margin: partData.margin || null, + marginOrPrice: partData.marginOrPrice, + useGlobalPricing: partData.useGlobalPricing }) + setPartFormValues(partData) } - }, [partData, form]) + }, [partData, partForm]) + + useEffect(() => { + setMarginOrPrice(partFormValues.marginOrPrice) + setUseGlobalPricing(partFormValues.useGlobalPricing) + }, [partFormValues]) const fetchPartDetails = async () => { try { @@ -71,34 +99,69 @@ const PartInfo = () => { setPartData(response.data) setError(null) } catch (err) { - setError('Failed to fetch Part details') + setError('Failed to fetch part details') console.log(err) - messageApi.error('Failed to fetch Part details') + messageApi.error('Failed to fetch part details') } finally { setFetchLoading(false) } } const fetchPartContent = async () => { + if (fetchLoading == true) { + return + } try { setFetchLoading(true) + // Cleanup previous object URL if it exists + if (objectUrlRef.current) { + URL.revokeObjectURL(objectUrlRef.current) + objectUrlRef.current = null + } const response = await axios.get( `http://localhost:8080/parts/${partId}/content`, { - headers: { - Accept: 'application/json' - }, withCredentials: true, responseType: 'blob' } ) - setPartFileObjectId(URL.createObjectURL(response.data)) - setError(null) + // Check file size before processing + const MAX_FILE_SIZE = 100 * 1024 * 1024 // 100MB + if (response.data.size > MAX_FILE_SIZE) { + throw new Error( + `File size exceeds ${MAX_FILE_SIZE / (1024 * 1024)}MB limit` + ) + } + + // Convert blob to array buffer for better memory management + const arrayBuffer = await response.data.arrayBuffer() + + // Store array buffer in ref for later cleanup + arrayBufferRef.current = arrayBuffer + + // Create a new blob from the array buffer + const blob = new Blob([arrayBuffer], { type: response.data.type }) + + try { + // Create and store object URL + const objectUrl = URL.createObjectURL(blob) + objectUrlRef.current = objectUrl + + // Update state with the new object URL + setPartFileObjectId(objectUrl) + setStlLoadError(null) + setError(null) + } catch (allocErr) { + setStlLoadError( + 'Failed to load STL file: Array buffer allocation failed' + ) + console.error('STL allocation error:', allocErr) + } } catch (err) { - setError('Failed to fetch Part content') + setError('Failed to fetch part content') console.log(err) - messageApi.error('Failed to fetch Part content') + messageApi.error('Failed to fetch part content') } finally { setFetchLoading(false) } @@ -109,7 +172,7 @@ const PartInfo = () => { } const cancelEditing = () => { - form.setFieldsValue({ + partForm.setFieldsValue({ name: partData?.name || '' }) setIsEditing(false) @@ -117,24 +180,18 @@ const PartInfo = () => { const updateInfo = async () => { try { - const values = await form.validateFields() + const values = await partForm.validateFields() setLoading(true) - await axios.put( - `http://localhost:8080/parts/${partId}`, - { - name: values.name + await axios.put(`http://localhost:8080/parts/${partId}`, values, { + headers: { + 'Content-Type': 'application/json' }, - { - headers: { - 'Content-Type': 'application/json' - }, - withCredentials: true - } - ) + withCredentials: true + }) - // Update the local state with the new name - setPartData({ ...partData, name: values.name }) + // Update the local state with the new values + setPartData({ ...partData, ...values }) setIsEditing(false) messageApi.success('Part information updated successfully') } catch (err) { @@ -204,8 +261,14 @@ const PartInfo = () => {
+ setPartFormValues((prevValues) => ({ + ...prevValues, + ...changedValues + })) + } initialValues={{ name: partData.name || '' }} @@ -218,32 +281,131 @@ const PartInfo = () => { 'n/a' )} - - {(() => { - if (partData.createdAt) { - return moment(partData.createdAt.$date).format( - 'YYYY-MM-DD HH:mm:ss' - ) - } - return 'N/A' - })()} + + {moment(partData.createdAt).format('YYYY-MM-DD HH:mm:ss')} - + + {isEditing ? ( - + ) : ( partData.name || 'n/a' )} + + + {moment(partData.updatedAt).format('YYYY-MM-DD HH:mm:ss')} + + + + {partData.product.name || 'n/a'} + + + {( + + ) || 'n/a'} + + + {isEditing && useGlobalPricing == false ? ( + + {marginOrPrice == false ? ( + + + + ) : ( + + + + )} + + Price + + + ) : partData.margin && + marginOrPrice == false && + partData.useGlobalPricing == false ? ( + partData.margin + '%' + ) : partData.price && + marginOrPrice == true && + partData.useGlobalPricing == false ? ( + '£' + partData.price + ) : ( + 'n/a' + )} + + + {isEditing ? ( + + + + ) : partData.useGlobalPricing == true ? ( + }> + Yes + + ) : partData.useGlobalPricing == false ? ( + }>No + ) : ( + 'n/a' + )} + @@ -256,15 +418,34 @@ const PartInfo = () => { - + {stlLoadError ? ( +
+ + + {stlLoadError} + +
+ ) : ( + partFileObjectId && ( + + ) + )}
) diff --git a/src/components/Dashboard/Management/Products.jsx b/src/components/Dashboard/Management/Products.jsx index 1d4c4ac..49cea1c 100644 --- a/src/components/Dashboard/Management/Products.jsx +++ b/src/components/Dashboard/Management/Products.jsx @@ -5,7 +5,17 @@ import { useNavigate } from 'react-router-dom' import axios from 'axios' import moment from 'moment' -import { Table, Button, Flex, Space, Modal, Dropdown, message } from 'antd' +import { + Table, + Button, + Flex, + Space, + Modal, + Dropdown, + message, + Spin, + Tag +} from 'antd' import { createStyles } from 'antd-style' import { LoadingOutlined, @@ -45,6 +55,9 @@ const Products = () => { const { styles } = useStyle() const [productsData, setProductsData] = useState([]) + const [page, setPage] = useState(1) + const [hasMore, setHasMore] = useState(true) + const [lazyLoading, setLazyLoading] = useState(false) const [newProductOpen, setNewProductOpen] = useState(false) @@ -52,34 +65,48 @@ const Products = () => { const { authenticated } = useContext(AuthContext) - const fetchProductsData = useCallback(async () => { - try { - const response = await axios.get('http://localhost:8080/products', { - params: { - page: 1, - limit: 25 - }, - headers: { - Accept: 'application/json' - }, - withCredentials: true // Important for including cookies - }) - setProductsData(response.data) - setLoading(false) - //setPagination({ ...pagination, total: response.data.totalItems }); // Update total count - } catch (error) { - if (error.response) { - messageApi.error( - 'Error updating printer details:', - error.response.status - ) - } else { - messageApi.error( - 'An unexpected error occurred. Please try again later.' - ) + const fetchProductsData = useCallback( + async (pageNum = 1, append = false) => { + try { + const response = await axios.get('http://localhost:8080/products', { + params: { + page: pageNum, + limit: 25 + }, + headers: { + Accept: 'application/json' + }, + withCredentials: true // Important for including cookies + }) + + const newData = response.data + setHasMore(newData.length === 25) // If we get less than 25 items, we've reached the end + + if (append) { + setProductsData((prev) => [...prev, ...newData]) + } else { + setProductsData(newData) + } + + setLoading(false) + setLazyLoading(false) + } catch (error) { + if (error.response) { + messageApi.error( + 'Error updating printer details:', + error.response.status + ) + } else { + messageApi.error( + 'An unexpected error occurred. Please try again later.' + ) + } + setLoading(false) + setLazyLoading(false) } - } - }, [messageApi]) + }, + [messageApi] + ) useEffect(() => { if (authenticated) { @@ -87,6 +114,28 @@ const Products = () => { } }, [authenticated, fetchProductsData]) + const handleScroll = useCallback( + (e) => { + const { target } = e + const scrollHeight = target.scrollHeight + const scrollTop = target.scrollTop + const clientHeight = target.clientHeight + + // If we're near the bottom (within 100px) and not currently loading + if ( + scrollHeight - scrollTop - clientHeight < 100 && + !lazyLoading && + hasMore + ) { + setLazyLoading(true) + const nextPage = page + 1 + setPage(nextPage) + fetchProductsData(nextPage, true) + } + }, + [page, lazyLoading, hasMore, fetchProductsData] + ) + const getProductActionItems = (id) => { return { items: [ @@ -103,7 +152,7 @@ const Products = () => { ], onClick: ({ key }) => { if (key === 'info') { - navigate(`/management/products/info?productId=${id}`) + navigate(`/dashboard/management/products/info?productId=${id}`) } } } @@ -134,6 +183,32 @@ const Products = () => { width: 165, render: (text) => }, + { + title: 'Tags', + dataIndex: 'tags', + key: 'tags', + width: 170, + render: (tags) => { + if (!tags || !Array.isArray(tags)) return 'n/a' + if (tags.length == 0) return 'n/a' + return ( + + {tags.map((tag, index) => ( + + {tag} + + ))} + + ) + } + }, + { + title: 'Version', + dataIndex: 'version', + key: 'version', + width: 120, + render: (text) => (text ? {text} : 'n/a') + }, { title: 'Created At', dataIndex: 'createdAt', @@ -148,6 +223,20 @@ const Products = () => { } } }, + { + title: 'Updated At', + dataIndex: 'updatedAt', + key: 'updatedAt', + width: 180, + render: (updatedAt) => { + if (updatedAt) { + const formattedDate = moment(updatedAt).format('YYYY-MM-DD HH:mm:ss') + return {formattedDate} + } else { + return 'n/a' + } + } + }, { title: 'Actions', key: 'actions', @@ -159,7 +248,9 @@ const Products = () => { - - + + + + + + + {lazyLoading == true ? ( + }> + ) : null} +
{ scroll={{ y: 'calc(100vh - 270px)' }} rowKey='_id' loading={{ spinning: loading, indicator: }} + onScroll={handleScroll} /> { { setNewProductOpen(false) + messageApi.success('Product created successfully!') fetchProductsData() }} reset={newProductOpen} diff --git a/src/components/Dashboard/Management/Products/NewProduct.jsx b/src/components/Dashboard/Management/Products/NewProduct.jsx index c6d02f7..079460f 100644 --- a/src/components/Dashboard/Management/Products/NewProduct.jsx +++ b/src/components/Dashboard/Management/Products/NewProduct.jsx @@ -1,8 +1,7 @@ import PropTypes from 'prop-types' -import React, { useState, useContext } from 'react' +import React, { useState, useContext, useEffect, useRef } from 'react' import axios from 'axios' import { - Form, Input, Button, message, @@ -10,38 +9,61 @@ import { Flex, Steps, Divider, - Descriptions + Upload, + Descriptions, + Modal, + Progress, + Form, + Checkbox, + InputNumber } from 'antd' - +import { DeleteOutlined, EyeOutlined } from '@ant-design/icons' import { AuthContext } from '../../../Auth/AuthContext' +import PartIcon from '../../../Icons/PartIcon' +import { StlViewer } from 'react-stl-viewer' +import VendorSelect from '../../common/VendorSelect' -const { Title } = Typography +const { Dragger } = Upload +const { Title, Text } = Typography const initialNewProductForm = { - productInfo: {}, - printTimeMins: 0, + name: '', + parts: [], + vendor: null, + marginOrPrice: false, + margin: 0, price: 0 } -//const chunkSize = 5000 - const NewProduct = ({ onOk, reset }) => { + // UI state const [messageApi, contextHolder] = message.useMessage() - const [newProductLoading, setNewProductLoading] = useState(false) - const [currentStep, setCurrentStep] = useState(0) + const [newProductLoading, setNewProductLoading] = useState(false) const [nextEnabled, setNextEnabled] = useState(false) const [newProductForm] = Form.useForm() const [newProductFormValues, setNewProductFormValues] = useState( initialNewProductForm ) - const newProductFormUpdateValues = Form.useWatch([], newProductForm) + // Combined parts and files state + const [parts, setParts] = useState([]) + const [fileUrls, setFileUrls] = useState({}) + const [uploadProgress, setUploadProgress] = useState({}) + + // Preview state + const [previewVisible, setPreviewVisible] = useState(false) + const [previewFile, setPreviewFile] = useState(null) + const [isPreviewLoading, setIsPreviewLoading] = useState(false) + const previewTimerRef = useRef(null) + + const [marginOrPrice, setMarginOrPrice] = useState(false) + const { token, authenticated } = useContext(AuthContext) - React.useEffect(() => { + useEffect(() => { newProductForm .validateFields({ validateOnly: true @@ -50,90 +72,325 @@ const NewProduct = ({ onOk, reset }) => { .catch(() => setNextEnabled(false)) }, [newProductForm, newProductFormUpdateValues]) - const summaryItems = [ - { - key: 'name', - label: 'Name', - children: newProductFormValues.name - } - ] - - React.useEffect(() => { + useEffect(() => { if (reset) { newProductForm.resetFields() } }, [reset, newProductForm]) - const handleNewProduct = async () => { - if (!authenticated) { - return + useEffect(() => { + setMarginOrPrice(newProductFormValues.marginOrPrice) + }, [newProductFormValues]) + + // Effect: Cleanup file URLs on unmount + useEffect(() => { + return () => { + Object.values(fileUrls).forEach(URL.revokeObjectURL) + if (previewTimerRef.current) { + clearTimeout(previewTimerRef.current) + } } + }, [fileUrls]) + + useEffect(() => { + setNewProductFormValues((prev) => ({ ...prev, parts: parts })) + }, [parts, setNewProductFormValues]) + + // File handlers + const handleFileAdd = (file) => { + const objectUrl = URL.createObjectURL(file) + const defaultName = file.name.replace(/\.[^/.]+$/, '') + + setParts((prev) => [ + { + name: defaultName, + file, + uid: file.uid + }, + ...prev + ]) + + setFileUrls((prev) => ({ ...prev, [file.uid]: objectUrl })) + setUploadProgress((prev) => ({ ...prev, [file.uid]: 0 })) + + return false // Prevent default upload + } + + const handleFileRemove = (index) => { + setParts((prev) => { + const newParts = [...prev] + const removedPart = newParts[index] + newParts.splice(index, 1) + + // Cleanup URL and progress + if (removedPart && fileUrls[removedPart.uid]) { + URL.revokeObjectURL(fileUrls[removedPart.uid]) + setFileUrls((urls) => { + const newUrls = { ...urls } + delete newUrls[removedPart.uid] + return newUrls + }) + setUploadProgress((progress) => { + const newProgress = { ...progress } + delete newProgress[removedPart.uid] + return newProgress + }) + } + + return newParts + }) + } + + const handleNameChange = (index, newName) => { + setParts((prev) => { + const newParts = [...prev] + newParts[index] = { ...newParts[index], name: newName } + return newParts + }) + } + + const handlePreview = (file) => { + setPreviewFile(file) + setPreviewVisible(true) + setIsPreviewLoading(true) + + if (previewTimerRef.current) { + clearTimeout(previewTimerRef.current) + } + previewTimerRef.current = setTimeout(() => { + setIsPreviewLoading(false) + }, 300) + } + + const handleNewProduct = async () => { setNewProductLoading(true) try { - await axios.post(`http://localhost:8080/products`, newProductFormValues, { - headers: { - Authorization: `Bearer ${token}` + const result = await axios.post( + `http://localhost:8080/products`, + newProductFormValues, + { + withCredentials: true // Important for including cookies } - }) - - messageApi.success(`Product created successfully.`) + ) + await uploadParts(result.data.parts) onOk() } catch (error) { - messageApi.error('Error creating new product file: ' + error.message) + messageApi.error('Error creating new product: ' + error.message) } finally { setNewProductLoading(false) } } - const steps = [ - { - title: 'Parts', - key: 'parts', - content: ( - <> + // Submit handler + const uploadParts = async (partIds) => { + if (!authenticated) return + + try { + // Upload files sequentially for each part + for (let i = 0; i < parts.length; i++) { + const formData = new FormData() + formData.append('partFile', parts[i].file) + + await axios.post( + `http://localhost:8080/parts/${partIds[i]}/content`, + formData, + { + headers: { + 'Content-Type': 'multipart/form-data', + Authorization: `Bearer ${token}` + }, + onUploadProgress: (progressEvent) => { + const percentCompleted = Math.round( + (progressEvent.loaded * 100) / progressEvent.total + ) + setUploadProgress((prev) => ({ + ...prev, + [parts[i].uid]: percentCompleted + })) + } + } + ) + } + } catch (error) { + messageApi.error('Error creating product: ' + error.message) + } + } + + // Step Contents + const uploadStep = ( + + {parts.length != 0 ? ( +
+ + {parts.map((part, index) => ( + + handleNameChange(index, e.target.value)} + style={{ flex: 1 }} + /> +
+ ) : null} + + setTimeout(() => onSuccess('ok'), 0)} + > + +

+ +

+

Click or drag 3D Model files here

+

+ Supported file extensions: .stl, .3mf +

+
+
+
+ ) + + const detailsStep = ( + <> + + + + + + + + {marginOrPrice == false ? ( (Array.isArray(e) ? e : e && e.fileList)} - > - - ) - }, - { - title: 'Details', - key: 'details', - content: ( - - - + - - ) - }, - { - title: 'Summary', - key: 'done', - content: ( - <> - - + ) : ( + + - - ) - } + )} + + Price + + + + ) + + const summaryStep = ( + {newProductFormValues?.name} + }, + { + key: 'vendor', + label: 'Vendor', + children: {newProductFormValues?.vendor?.name} + }, + { + key: 'marginPrice', + label: !marginOrPrice ? 'Margin' : 'Price', + children: !marginOrPrice ? ( + {newProductFormValues?.margin}% + ) : ( + £{newProductFormValues?.price} + ) + }, + ...parts.map((part, index) => ({ + key: part.uid, + label: `Part ${index + 1}`, + children: ( + + {part.name} + + + ) + })) + ]} + /> + ) + + const steps = [ + { title: 'Upload Parts', content: uploadStep }, + { title: 'Details', content: detailsStep }, + { title: 'Summary', content: summaryStep } ] return ( - + {contextHolder} +
{ />
- + - - + <Flex vertical gap='middle' style={{ flexGrow: 1 }}> + <Title level={2} style={{ marginTop: 0, marginBottom: 4 }}> New Product +
{ initialValues={initialNewProductForm} >
{steps[currentStep].content}
- - - - {currentStep < steps.length - 1 && ( - - )} - {currentStep === steps.length - 1 && ( - - )} - + + + + + {currentStep < steps.length - 1 ? ( + + ) : ( + + )} +
+ + { + setPreviewVisible(false) + setPreviewFile(null) + if (previewTimerRef.current) { + clearTimeout(previewTimerRef.current) + } + }} + style={{ top: 30 }} + width='90%' + > + + {previewFile && !isPreviewLoading ? ( +
+ +
+ ) : ( +
+ Loading 3D model... +
+ )} +
+
) } diff --git a/src/components/Dashboard/Management/Products/ProductInfo.jsx b/src/components/Dashboard/Management/Products/ProductInfo.jsx index c77a14f..02dfb49 100644 --- a/src/components/Dashboard/Management/Products/ProductInfo.jsx +++ b/src/components/Dashboard/Management/Products/ProductInfo.jsx @@ -8,23 +8,27 @@ import { Button, message, Typography, - Card, Flex, Form, - Input + Input, + Tag, + Checkbox, + InputNumber } from 'antd' import { LoadingOutlined, EditOutlined, ReloadOutlined, CheckOutlined, - CloseOutlined + CloseOutlined, + PlusOutlined } from '@ant-design/icons' import IdText from '../../common/IdText.jsx' import moment from 'moment' +import VendorSelect from '../../common/VendorSelect.jsx' +import PartsTable from '../../common/PartsTable.jsx' const { Title } = Typography -import { StlViewer } from 'react-stl-viewer' const ProductInfo = () => { const [productData, setProductData] = useState(null) @@ -33,15 +37,36 @@ const ProductInfo = () => { const location = useLocation() const [messageApi, contextHolder] = message.useMessage() const productId = new URLSearchParams(location.search).get('productId') - const [productFileObjectId, setProductFileObjectId] = useState(null) const [isEditing, setIsEditing] = useState(false) - const [form] = Form.useForm() const [fetchLoading, setFetchLoading] = useState(true) + const [marginOrPrice, setMarginOrPrice] = useState(false) + + const [productForm] = Form.useForm() + const [productFormValues, setProductFormValues] = useState({}) + + const handleTagClose = (removedTag) => { + const newTags = productData.tags.filter((tag) => tag !== removedTag) + setProductData((prev) => ({ ...prev, tags: newTags })) + } + + const handleTagAdd = () => { + const input = productForm.getFieldValue('newTag') + if (input) { + const newTag = input.trim() + if (newTag && !productData.tags.includes(newTag)) { + setProductData((prev) => ({ ...prev, tags: [...prev.tags, newTag] })) + productForm.setFieldValue('newTag', '') + } + } + } + + useEffect(() => { + setMarginOrPrice(productFormValues.marginOrPrice) + }, [productFormValues]) useEffect(() => { async function fetchData() { await fetchProductDetails() - await fetchProductContent() } if (productId) { fetchData() @@ -50,11 +75,19 @@ const ProductInfo = () => { useEffect(() => { if (productData) { - form.setFieldsValue({ - name: productData.name || '' + productForm.setFieldsValue({ + name: productData.name || '', + vendor: productData.vendor || null, + version: productData.version || '', + tags: productData.tags || [], + price: productData.price || null, + margin: productData.margin || null, + marginOrPrice: productData.marginOrPrice || false }) + setProductFormValues(productData) + setMarginOrPrice(productData.marginOrPrice) } - }, [productData, form]) + }, [productData, productForm]) const fetchProductDetails = async () => { try { @@ -71,34 +104,9 @@ const ProductInfo = () => { setProductData(response.data) setError(null) } catch (err) { - setError('Failed to fetch Product details') + setError('Failed to fetch product details') console.log(err) - messageApi.error('Failed to fetch Product details') - } finally { - setFetchLoading(false) - } - } - - const fetchProductContent = async () => { - try { - setFetchLoading(true) - const response = await axios.get( - `http://localhost:8080/products/${productId}/content`, - { - headers: { - Accept: 'application/json' - }, - withCredentials: true, - responseType: 'blob' - } - ) - - setProductFileObjectId(URL.createObjectURL(response.data)) - setError(null) - } catch (err) { - setError('Failed to fetch Product content') - console.log(err) - messageApi.error('Failed to fetch Product content') + messageApi.error('Failed to fetch product details') } finally { setFetchLoading(false) } @@ -109,37 +117,40 @@ const ProductInfo = () => { } const cancelEditing = () => { - form.setFieldsValue({ - name: productData?.name || '' + productForm.setFieldsValue({ + name: productData?.name || '', + vendor: productData?.vendor || { id: null, name: '' }, + version: productData?.version || '', + tags: productData?.tags || [], + cost: productData?.cost || null, + price: productData?.price || null, + margin: productData?.margin || null, + marginOrPrice: productData?.marginOrPrice || null }) + setMarginOrPrice(productData?.marginOrPrice) setIsEditing(false) } const updateInfo = async () => { try { - const values = await form.validateFields() + const values = await productForm.validateFields() setLoading(true) - await axios.put( - `http://localhost:8080/products/${productId}`, - { - name: values.name + await axios.put(`http://localhost:8080/products/${productId}`, values, { + headers: { + 'Content-Type': 'application/json' }, - { - headers: { - 'Content-Type': 'application/json' - }, - withCredentials: true - } - ) + withCredentials: true + }) - // Update the local state with the new name - setProductData({ ...productData, name: values.name }) + setProductData({ + ...productData, + ...values + }) setIsEditing(false) messageApi.success('Product information updated successfully') } catch (err) { if (err.errorFields) { - // This is a form validation error return } console.error('Failed to update product information:', err) @@ -172,7 +183,7 @@ const ProductInfo = () => { } return ( -
+ {contextHolder} {
+ setProductFormValues((prevValues) => ({ + ...prevValues, + ...changedValues + })) + } initialValues={{ - name: productData.name || '' + name: productData.name || '', + vendor: productData.vendor || { id: null, name: '' }, + version: productData.version || '', + tags: productData.tags || [] }} > @@ -218,17 +238,12 @@ const ProductInfo = () => { 'n/a' )} - - {(() => { - if (productData.createdAt) { - return moment(productData.createdAt.$date).format( - 'YYYY-MM-DD HH:mm:ss' - ) - } - return 'N/A' - })()} + + + {moment(productData.createdAt).format('YYYY-MM-DD HH:mm:ss')} - + + {isEditing ? ( { productData.name || 'n/a' )} + + + {moment(productData.updatedAt).format('YYYY-MM-DD HH:mm:ss')} + + + + {isEditing ? ( + + + + ) : ( + productData.vendor.name || 'n/a' + )} + + + + + + + + {isEditing ? ( + + {marginOrPrice == false ? ( + + + + ) : ( + + + + )} + + Price + + + ) : productData.margin && marginOrPrice == false ? ( + productData.margin + '%' + ) : productData.price && marginOrPrice == true ? ( + '£' + productData.price + ) : ( + 'n/a' + )} + + + + {isEditing ? ( + + + + ) : productData.version ? ( + {productData.version} + ) : ( + 'n/a' + )} + + + + {isEditing ? ( + + + {productData.tags.map((tag) => ( + handleTagClose(tag)} + style={{ marginBottom: 12 }} + > + {tag} + + ))} + + + + + +
+ +
) } diff --git a/src/components/Dashboard/Management/Vendors.jsx b/src/components/Dashboard/Management/Vendors.jsx index e391208..afe1c26 100644 --- a/src/components/Dashboard/Management/Vendors.jsx +++ b/src/components/Dashboard/Management/Vendors.jsx @@ -2,18 +2,31 @@ import React, { useEffect, useState, useContext, useCallback } from 'react' import { useNavigate } from 'react-router-dom' import axios from 'axios' import moment from 'moment' -import { Table, Button, Flex, Space, Modal, Dropdown, message } from 'antd' +import { + Table, + Button, + Flex, + Space, + Modal, + Dropdown, + message, + Typography +} from 'antd' import { createStyles } from 'antd-style' import { LoadingOutlined, PlusOutlined, ReloadOutlined, InfoCircleOutlined, - ShopOutlined + ExportOutlined } from '@ant-design/icons' import { AuthContext } from '../../Auth/AuthContext' import IdText from '../common/IdText' import NewVendor from './Vendors/NewVendor' +import CountryDisplay from '../common/CountryDisplay' +import VendorIcon from '../../Icons/VendorIcon' + +const { Link } = Typography const useStyle = createStyles(({ css, token }) => { const { antCls } = token @@ -84,7 +97,7 @@ const Vendors = () => { ], onClick: ({ key }) => { if (key === 'info') { - navigate(`/management/vendors/info?vendorId=${id}`) + navigate(`/dashboard/management/vendors/info?vendorId=${id}`) } } } @@ -97,7 +110,7 @@ const Vendors = () => { key: '', width: 40, fixed: 'left', - render: () => + render: () => }, { title: 'Name', @@ -117,13 +130,30 @@ const Vendors = () => { title: 'Website', dataIndex: 'website', key: 'website', - width: 200 + width: 200, + render: (text) => + text ? ( + + {new URL(text).hostname + ' '} + + + ) : ( + 'n/a' + ) + }, + { + title: 'Country', + dataIndex: 'country', + key: 'country', + width: 200, + render: (text) => (text ? : 'n/a') }, { title: 'Contact', dataIndex: 'contact', key: 'contact', - width: 200 + width: 200, + render: (text) => (text ? text : 'n/a') }, { title: 'Created At', @@ -139,6 +169,20 @@ const Vendors = () => { } } }, + { + title: 'Updated At', + dataIndex: 'updatedAt', + key: 'updatedAt', + width: 180, + render: (updatedAt) => { + if (updatedAt) { + const formattedDate = moment(updatedAt).format('YYYY-MM-DD HH:mm:ss') + return {formattedDate} + } else { + return 'n/a' + } + } + }, { title: 'Actions', key: 'actions', @@ -150,7 +194,9 @@ const Vendors = () => { - {currentStep < steps.length - 1 && ( - - )} - {currentStep === steps.length - 1 && ( - - )} - + + + + + {currentStep < steps.length - 1 ? ( + + ) : ( + + )} + ) diff --git a/src/components/Dashboard/Management/Vendors/VendorInfo.jsx b/src/components/Dashboard/Management/Vendors/VendorInfo.jsx index e692fdd..ad38300 100644 --- a/src/components/Dashboard/Management/Vendors/VendorInfo.jsx +++ b/src/components/Dashboard/Management/Vendors/VendorInfo.jsx @@ -17,12 +17,15 @@ import { EditOutlined, ReloadOutlined, CheckOutlined, - CloseOutlined + CloseOutlined, + ExportOutlined } from '@ant-design/icons' import IdText from '../../common/IdText' import moment from 'moment' +import CountrySelect from '../../common/CountrySelect' +import CountryDisplay from '../../common/CountryDisplay' -const { Title } = Typography +const { Title, Link } = Typography const VendorInfo = () => { const [vendorData, setVendorData] = useState(null) @@ -46,7 +49,10 @@ const VendorInfo = () => { form.setFieldsValue({ name: vendorData.name || '', website: vendorData.website || '', - contact: vendorData.contact || '' + contact: vendorData.contact || '', + country: vendorData.country || '', + phone: vendorData.phone || '', + email: vendorData.email || '' }) } }, [vendorData, form]) @@ -81,7 +87,10 @@ const VendorInfo = () => { form.setFieldsValue({ name: vendorData?.name || '', website: vendorData?.website || '', - contact: vendorData?.contact || '' + contact: vendorData?.contact || '', + country: vendorData?.country || '', + phone: vendorData?.phone || '', + email: vendorData?.email || '' }) setIsEditing(false) } @@ -91,20 +100,12 @@ const VendorInfo = () => { const values = await form.validateFields() setLoading(true) - await axios.put( - `http://localhost:8080/vendors/${vendorId}`, - { - name: values.name, - website: values.website, - contact: values.contact + await axios.put(`http://localhost:8080/vendors/${vendorId}`, values, { + headers: { + 'Content-Type': 'application/json' }, - { - headers: { - 'Content-Type': 'application/json' - }, - withCredentials: true - } - ) + withCredentials: true + }) setVendorData({ ...vendorData, ...values }) setIsEditing(false) @@ -116,6 +117,7 @@ const VendorInfo = () => { console.error('Failed to update vendor information:', err) messageApi.error('Failed to update vendor information') } finally { + fetchVendorDetails() setLoading(false) } } @@ -200,6 +202,10 @@ const VendorInfo = () => { )} + + {moment(vendorData.updatedAt).format('YYYY-MM-DD HH:mm:ss')} + + {isEditing ? ( { > + ) : vendorData.website ? ( + + {new URL(vendorData.website).hostname + ' '} + + ) : ( - vendorData.website + 'n/a' + )} + + + + {isEditing ? ( + + + + ) : vendorData.country ? ( + + ) : ( + 'n/a' )} @@ -234,8 +261,55 @@ const VendorInfo = () => { > - ) : ( + ) : vendorData.contact ? ( vendorData.contact + ) : ( + 'n/a' + )} + + + + {isEditing ? ( + + + + ) : vendorData.phone ? ( + vendorData.phone + ) : ( + 'n/a' + )} + + + + {isEditing ? ( + + + + ) : vendorData.email ? ( + + {vendorData.email + ' '} + + + ) : ( + 'n/a' )}
diff --git a/src/components/Dashboard/Production/GCodeFiles.jsx b/src/components/Dashboard/Production/GCodeFiles.jsx index b5e2b07..d4762a9 100644 --- a/src/components/Dashboard/Production/GCodeFiles.jsx +++ b/src/components/Dashboard/Production/GCodeFiles.jsx @@ -14,7 +14,12 @@ import { Modal, Dropdown, Typography, - message + message, + Checkbox, + Divider, + Popover, + Input, + Spin } from 'antd' import { createStyles } from 'antd-style' import { @@ -22,7 +27,9 @@ import { PlusOutlined, DownloadOutlined, ReloadOutlined, - InfoCircleOutlined + InfoCircleOutlined, + CheckOutlined, + CloseOutlined } from '@ant-design/icons' import { AuthContext } from '../../Auth/AuthContext' @@ -56,42 +63,267 @@ const GCodeFiles = () => { const navigate = useNavigate() const { styles } = useStyle() - const [gcodeFilesData, setGCodeFilesData] = useState([]) - - const [newGCodeFileOpen, setNewGCodeFileOpen] = useState(false) - - const [loading, setLoading] = useState(true) - - const { authenticated } = useContext(AuthContext) - - const fetchGCodeFilesData = useCallback(async () => { - try { - const response = await axios.get('http://localhost:8080/gcodefiles', { - params: { - page: 1, - limit: 25 - }, - headers: { - Accept: 'application/json' - }, - withCredentials: true // Important for including cookies - }) - setGCodeFilesData(response.data) - setLoading(false) - //setPagination({ ...pagination, total: response.data.totalItems }); // Update total count - } catch (error) { - if (error.response) { - messageApi.error( - 'Error updating printer details:', - error.response.status + const getFilterDropdown = ({ + setSelectedKeys, + selectedKeys, + confirm, + clearFilters, + propertyName + }) => { + return ( +
+ + + setSelectedKeys(e.target.value ? [e.target.value] : []) + } + onPressEnter={() => confirm()} + style={{ width: 200, display: 'block' }} + /> +
+ ) + } + // Column definitions + const columns = [ + { + title: '', + dataIndex: '', + key: '', + width: 40, + fixed: 'left', + render: () => + }, + { + title: 'Name', + dataIndex: 'name', + key: 'name', + width: 200, + fixed: 'left', + render: (text) => {text}, + filterDropdown: ({ + setSelectedKeys, + selectedKeys, + confirm, + clearFilters + }) => + getFilterDropdown({ + setSelectedKeys, + selectedKeys, + confirm, + clearFilters, + propertyName: 'name' + }), + onFilter: (value, record) => + record.name.toLowerCase().includes(value.toLowerCase()) + }, + { + title: 'ID', + dataIndex: '_id', + key: 'id', + width: 165, + render: (text) => + }, + { + title: 'Filament', + dataIndex: ['filament', 'name'], + key: 'filament', + width: 200, + render: (text, record) => { + return ( + ) - } else { - messageApi.error( - 'An unexpected error occurred. Please try again later.' + }, + filterDropdown: ({ + setSelectedKeys, + selectedKeys, + confirm, + clearFilters + }) => + getFilterDropdown({ + setSelectedKeys, + selectedKeys, + confirm, + clearFilters, + propertyName: 'filament' + }), + onFilter: (value, record) => + record.filament.name.toLowerCase().includes(value.toLowerCase()) + }, + { + title: 'Cost', + dataIndex: 'cost', + key: 'cost', + width: 120, + render: (cost) => { + return '£' + cost.toFixed(2) + }, + sorter: true + }, + { + title: 'Print Time', + key: 'estimatedPrintingTimeNormalMode', + dataIndex: ['gcodeFileInfo', 'estimatedPrintingTimeNormalMode'], + width: 140, + render: (text, record) => { + return `${record.gcodeFileInfo.estimatedPrintingTimeNormalMode}` + }, + sorter: true + }, + { + title: 'Created At', + dataIndex: 'createdAt', + key: 'createdAt', + width: 180, + render: (createdAt) => { + if (createdAt) { + const formattedDate = moment(createdAt).format('YYYY-MM-DD HH:mm:ss') + return {formattedDate} + } else { + return 'n/a' + } + }, + sorter: true + }, + { + title: 'Updated At', + dataIndex: 'updatedAt', + key: 'updatedAt', + width: 180, + render: (createdAt) => { + if (createdAt) { + const formattedDate = moment(createdAt).format('YYYY-MM-DD HH:mm:ss') + return {formattedDate} + } else { + return 'n/a' + } + }, + sorter: true + }, + { + title: 'Actions', + key: 'actions', + fixed: 'right', + width: 150, + render: (text, record) => { + return ( + + + + ) } } - }, [messageApi]) + ] + const [gcodeFilesData, setGCodeFilesData] = useState([]) + const [page, setPage] = useState(1) + const [hasMore, setHasMore] = useState(true) + const [loading, setLoading] = useState(true) + const [lazyLoading, setLazyLoading] = useState(false) + const [newGCodeFileOpen, setNewGCodeFileOpen] = useState(false) + const [showDeleted, setShowDeleted] = useState(false) + const [filters, setFilters] = useState({}) + const [sorter, setSorter] = useState({}) + const [columnVisibility, setColumnVisibility] = useState( + columns.reduce((acc, col) => { + if (col.key) { + acc[col.key] = true + } + return acc + }, {}) + ) + + const { authenticated } = useContext(AuthContext) + + const fetchGCodeFilesData = useCallback( + async (pageNum = 1, append = false) => { + try { + const params = { + page: pageNum, + limit: 25, + ...filters, + sort: sorter.field, + order: sorter.order + } + + const response = await axios.get('http://localhost:8080/gcodefiles', { + params, + headers: { + Accept: 'application/json' + }, + withCredentials: true + }) + + const newData = response.data + setHasMore(newData.length === 25) // If we get less than 25 items, we've reached the end + + if (append) { + setGCodeFilesData((prev) => [...prev, ...newData]) + } else { + setGCodeFilesData(newData) + } + + setLoading(false) + setLazyLoading(false) + } catch (error) { + if (error.response) { + messageApi.error('Error fetching gcode files:', error.response.status) + } else { + messageApi.error( + 'An unexpected error occurred. Please try again later.' + ) + } + setLoading(false) + setLazyLoading(false) + } + }, + [messageApi, filters, sorter] + ) + + const handleScroll = useCallback( + (e) => { + const { target } = e + const scrollHeight = target.scrollHeight + const scrollTop = target.scrollTop + const clientHeight = target.clientHeight + + // If we're near the bottom (within 100px) and not currently loading + if ( + scrollHeight - scrollTop - clientHeight < 100 && + !lazyLoading && + hasMore + ) { + setLazyLoading(true) + const nextPage = page + 1 + setPage(nextPage) + fetchGCodeFilesData(nextPage, true) + } + }, + [page, lazyLoading, hasMore, fetchGCodeFilesData] + ) useEffect(() => { if (authenticated) { @@ -99,6 +331,21 @@ const GCodeFiles = () => { } }, [authenticated, fetchGCodeFilesData]) + const handleTableChange = (pagination, filters, sorter) => { + const newFilters = {} + Object.entries(filters).forEach(([key, value]) => { + if (value && value.length > 0) { + newFilters[key] = value[0] // Take the first filter value + } + }) + + setFilters(newFilters) + setSorter({ + field: sorter.field, + order: sorter.order + }) + } + const getGCodeFileActionItems = (id) => { return { items: [ @@ -115,7 +362,7 @@ const GCodeFiles = () => { ], onClick: ({ key }) => { if (key === 'info') { - navigate(`/production/gcodefiles/info?gcodeFileId=${id}`) + navigate(`/dashboard/production/gcodefiles/info?gcodeFileId=${id}`) } else if (key === 'download') { handleDownloadGCode( id, @@ -126,96 +373,6 @@ const GCodeFiles = () => { } } - // Column definitions - const columns = [ - { - title: '', - dataIndex: '', - key: '', - width: 40, - fixed: 'left', - render: () => - }, - { - title: 'Name', - dataIndex: 'name', - key: 'name', - width: 200, - fixed: 'left', - render: (text) => {text} - }, - { - title: 'ID', - dataIndex: '_id', - key: 'id', - width: 165, - render: (text) => - }, - { - title: 'Filament', - dataIndex: 'filament', - key: 'filament', - width: 200, - render: (filament) => { - return - } - }, - { - title: 'Price / Cost', - dataIndex: 'price', - key: 'price', - width: 120, - render: (price) => { - return '£' + price.toFixed(2) - } - }, - { - title: 'Est. Print Time', - key: 'estimatedPrintingTimeNormalMode', - width: 140, - render: (text, record) => { - return `${record.gcodeFileInfo.estimatedPrintingTimeNormalMode}` - } - }, - { - title: 'Created At', - dataIndex: 'createdAt', - key: 'createdAt', - width: 180, - render: (createdAt) => { - if (createdAt) { - const formattedDate = moment(createdAt).format('YYYY-MM-DD HH:mm:ss') - return {formattedDate} - } else { - return 'n/a' - } - } - }, - { - title: 'Actions', - key: 'actions', - fixed: 'right', - width: 150, - render: (text, record) => { - return ( - - - - - ) - } - } - ] - const handleDownloadGCode = async (id, fileName) => { if (!authenticated) { return @@ -283,6 +440,46 @@ const GCodeFiles = () => { } } + const getViewDropdownItems = () => { + const columnItems = columns + .filter((col) => col.key && col.title !== '') // Filter out empty title columns and ensure key exists + .map((col) => ( + { + setColumnVisibility((prev) => ({ + ...prev, + [col.key]: e.target.checked + })) + }} + > + {col.title} + + )) + + return ( + + + {columnItems} + + + + setShowDeleted(e.target.checked)} + > + Show Deleted + + + + ) + } + + const visibleColumns = columns.filter( + (col) => !col.key || columnVisibility[col.key] + ) + return ( <> @@ -291,15 +488,26 @@ const GCodeFiles = () => { + + + + {lazyLoading && } />}
}} + onChange={handleTableChange} + onScroll={handleScroll} + showSorterTooltip={false} /> { onCancel={() => { setNewGCodeFileOpen(false) }} + destroyOnClose > { setNewGCodeFileOpen(false) + messageApi.success('Finished uploading GCode file!') fetchGCodeFilesData() }} reset={newGCodeFileOpen} diff --git a/src/components/Dashboard/Production/GCodeFiles/EditGCodeFile.jsx b/src/components/Dashboard/Production/GCodeFiles/EditGCodeFile.jsx deleted file mode 100644 index 4803317..0000000 --- a/src/components/Dashboard/Production/GCodeFiles/EditGCodeFile.jsx +++ /dev/null @@ -1,228 +0,0 @@ -import React, { useEffect, useState, useContext } from 'react' -import axios from 'axios' -import PropTypes from 'prop-types' -import { - Form, - Input, - InputNumber, - Button, - message, - Spin, - Select, - Flex, - ColorPicker, - Upload, - Popconfirm -} from 'antd' -import { - LoadingOutlined, - UploadOutlined, - LinkOutlined -} from '@ant-design/icons' - -import { AuthContext } from '../../../Auth/AuthContext' - -const EditFilament = ({ id, onOk }) => { - const [messageApi, contextHolder] = message.useMessage() - - const [dataLoading, setDataLoading] = useState(false) - const [editFilamentLoading, setEditFilamentLoading] = useState(false) - - const [imageList, setImageList] = useState([]) - - const [editFilamentForm] = Form.useForm() - const [editFilamentFormValues, setEditFilamentFormValues] = useState({}) - - const { token } = useContext(AuthContext) - - useEffect(() => { - // Fetch printer details when the component mounts - const fetchFilamentDetails = async () => { - if (id) { - try { - setDataLoading(true) - const response = await axios.get( - `http://localhost:8080/filaments/${id}`, - { - headers: { - Authorization: `Bearer ${token}` - } - } - ) - setDataLoading(false) - editFilamentForm.setFieldsValue(response.data) // Set form values with fetched data - setEditFilamentFormValues(response.data) - } catch (error) { - messageApi.error('Error fetching printer details:' + error.message) - } - } - } - fetchFilamentDetails() - }, [id, editFilamentForm, token, messageApi]) - - const handleEditFilament = async () => { - setEditFilamentLoading(true) - try { - await axios.put( - `http://localhost:8080/filaments/${id}`, - editFilamentFormValues, - { - headers: { - Authorization: `Bearer ${token}` - } - } - ) - messageApi.success('Filament details updated successfully.') - onOk() - } catch (error) { - messageApi.error('Error updating filament details: ' + error.message) - } finally { - setEditFilamentLoading(false) - } - } - - const handleDeleteFilament = async () => { - try { - await axios.delete(`http://localhost:8080/filaments/${id}`, '', { - headers: { - Authorization: `Bearer ${token}` - } - }) - messageApi.success('Filament deleted successfully.') - onOk() - } catch (error) { - messageApi.error('Error updating filament details: ' + error.message) - } - } - - const handleImageUpload = ({ file, onSuccess }) => { - const reader = new FileReader() - reader.onload = () => { - onSuccess('ok') - } - reader.readAsDataURL(file) - } - - return ( - <> - {contextHolder} - } - size='large' - > -
- setEditFilamentFormValues((prevValues) => ({ - ...prevValues, - ...changedValues - })) - } - > - - - - - - - - - - - { - if (!value) return '£' - return `£${value}` - }} - step={0.01} - style={{ width: '100%' }} - addonAfter='per kg' - /> - - - { - return '#' + color.toHex() - }} - > - - - - - - - - { - setImageList(fileList) - }} - > - - - - - } /> - - - } /> - - - - - - - - - - -
- - ) -} - -EditFilament.propTypes = { - id: PropTypes.string.isRequired, - onOk: PropTypes.func.isRequired -} - -export default EditFilament diff --git a/src/components/Dashboard/Production/GCodeFiles/GCodeFileInfo.jsx b/src/components/Dashboard/Production/GCodeFiles/GCodeFileInfo.jsx index 0c33d83..7427b89 100644 --- a/src/components/Dashboard/Production/GCodeFiles/GCodeFileInfo.jsx +++ b/src/components/Dashboard/Production/GCodeFiles/GCodeFileInfo.jsx @@ -1,29 +1,61 @@ import React, { useState, useEffect } from 'react' import { useLocation } from 'react-router-dom' import axios from 'axios' -import { Descriptions, Spin, Space, Button, message, Badge } from 'antd' -import { LoadingOutlined, ReloadOutlined } from '@ant-design/icons' +import { + Descriptions, + Spin, + Space, + Button, + message, + Badge, + Form, + Typography, + Flex, + Input +} from 'antd' +import { + LoadingOutlined, + ReloadOutlined, + CheckOutlined, + CloseOutlined, + EditOutlined +} from '@ant-design/icons' import IdText from '../../common/IdText.jsx' import moment from 'moment' import { capitalizeFirstLetter } from '../../utils/Utils.js' +import FilamentSelect from '../../common/FilamentSelect' + +const { Title } = Typography const GCodeFileInfo = () => { const [gcodeFileData, setGCodeFileData] = useState(null) - const [loading, setLoading] = useState(true) + const [loading, setLoading] = useState(false) const [error, setError] = useState(null) const location = useLocation() - const [messageApi] = message.useMessage() + const [messageApi, contextHolder] = message.useMessage() const gcodeFileId = new URLSearchParams(location.search).get('gcodeFileId') + const [isEditing, setIsEditing] = useState(false) + const [form] = Form.useForm() + const [fetchLoading, setFetchLoading] = useState(true) useEffect(() => { if (gcodeFileId) { - fetchFilamentDetails() + fetchGCodeFileDetails() } }, [gcodeFileId]) - const fetchFilamentDetails = async () => { + useEffect(() => { + if (gcodeFileData) { + form.setFieldsValue({ + name: gcodeFileData.name || '', + filament: gcodeFileData.filament || { id: null, name: '' } + }) + } + }, [gcodeFileData, form]) + + const fetchGCodeFileDetails = async () => { try { - setLoading(true) + setFetchLoading(true) const response = await axios.get( `http://localhost:8080/gcodefiles/${gcodeFileId}`, { @@ -39,16 +71,51 @@ const GCodeFileInfo = () => { setError('Failed to fetch GCodeFile details') messageApi.error('Failed to fetch GCodeFile details') } finally { - setLoading(false) + setFetchLoading(false) } } - if (loading) { - return ( -
- } /> -
- ) + const startEditing = () => { + setIsEditing(true) + } + + const cancelEditing = () => { + form.setFieldsValue({ + name: gcodeFileData?.name || '', + filament: gcodeFileData?.filament || { id: null, name: '' } + }) + setIsEditing(false) + } + + const updateInfo = async () => { + try { + const values = await form.validateFields() + setLoading(true) + + await axios.put( + `http://localhost:8080/gcodefiles/${gcodeFileId}`, + values, + { + headers: { + 'Content-Type': 'application/json' + }, + withCredentials: true + } + ) + + setGCodeFileData({ ...gcodeFileData, ...values }) + setIsEditing(false) + messageApi.success('GCode File information updated successfully') + } catch (err) { + if (err.errorFields) { + return + } + console.error('Failed to update gcode file information:', err) + messageApi.error('Failed to update gcode file information') + } finally { + fetchGCodeFileDetails() + setLoading(false) + } } if (error || !gcodeFileData) { @@ -58,146 +125,209 @@ const GCodeFileInfo = () => { style={{ width: '100%', textAlign: 'center' }} >

{error || 'GCodeFile not found'}

- ) } + if (fetchLoading) { + return ( +
+ } /> +
+ ) + } + return (
- - - {gcodeFileData.id ? ( - + {contextHolder} + + + GCode File Information + + + {isEditing ? ( + <> +
) } diff --git a/src/components/Dashboard/Production/GCodeFiles/NewGCodeFile.jsx b/src/components/Dashboard/Production/GCodeFiles/NewGCodeFile.jsx index 06596ef..59ee28c 100644 --- a/src/components/Dashboard/Production/GCodeFiles/NewGCodeFile.jsx +++ b/src/components/Dashboard/Production/GCodeFiles/NewGCodeFile.jsx @@ -1,5 +1,5 @@ import PropTypes from 'prop-types' -import React, { useState, useContext } from 'react' +import React, { useState, useContext, useEffect } from 'react' import axios from 'axios' import { capitalizeFirstLetter, @@ -17,7 +17,9 @@ import { Upload, Descriptions, Checkbox, - Spin + Spin, + InputNumber, + Badge } from 'antd' import { LoadingOutlined } from '@ant-design/icons' @@ -35,15 +37,15 @@ const initialNewGCodeFileForm = { gcodeFileInfo: {}, name: '', printTimeMins: 0, - price: 0, + cost: 0, file: null, - material: null + filament: null } //const chunkSize = 5000 const NewGCodeFile = ({ onOk, reset }) => { - const [messageApi, contextHolder] = message.useMessage() + const [messageApi] = message.useMessage() const [newGCodeFileLoading, setNewGCodeFileLoading] = useState(false) const [gcodeParsing, setGcodeParsing] = useState(false) @@ -128,61 +130,74 @@ const NewGCodeFile = ({ onOk, reset }) => { { key: 'name', label: 'Name', - children: newGCodeFileFormValues.name + children: newGCodeFileFormValues?.name }, { - key: 'price', - label: 'Price / Cost', - children: '£' + newGCodeFileFormValues.price.toFixed(2) + key: 'filament', + label: 'Filament', + children: + newGCodeFileFormValues?.filament != null ?? + (<> + {newGCodeFileFormValues.filament} + + )('n/a') + }, + { + key: 'cost', + label: 'Cost', + children: '£' + newGCodeFileFormValues?.cost }, { key: 'sparse_infill_density', label: 'Infill Density', - children: newGCodeFileFormValues.gcodeFileInfo.sparseInfillDensity + children: newGCodeFileFormValues?.gcodeFileInfo?.sparseInfillDensity }, { key: 'sparse_infill_pattern', label: 'Infill Pattern', children: capitalizeFirstLetter( - newGCodeFileFormValues.gcodeFileInfo.sparseInfillPattern + newGCodeFileFormValues?.gcodeFileInfo?.sparseInfillPattern ) }, { key: 'layer_height', label: 'Layer Height', - children: newGCodeFileFormValues.gcodeFileInfo.layerHeight + 'mm' + children: newGCodeFileFormValues?.gcodeFileInfo?.layerHeight + 'mm' }, { key: 'filamentType', label: 'Filament Material', - children: newGCodeFileFormValues.gcodeFileInfo.filamentType + children: newGCodeFileFormValues?.gcodeFileInfo?.filamentType }, { key: 'filamentUsedG', label: 'Filament Used (g)', - children: newGCodeFileFormValues.gcodeFileInfo.filamentUsedG + 'g' + children: newGCodeFileFormValues?.gcodeFileInfo?.filamentUsedG + 'g' }, { key: 'filamentVendor', label: 'Filament Brand', - children: newGCodeFileFormValues.gcodeFileInfo.filamentVendor + children: newGCodeFileFormValues?.gcodeFileInfo?.filamentVendor }, { key: 'hotendTemperature', label: 'Hotend Temperature', - children: newGCodeFileFormValues.gcodeFileInfo.nozzleTemperature + '°' + children: newGCodeFileFormValues?.gcodeFileInfo?.nozzleTemperature + '°' }, { key: 'bedTemperature', label: 'Bed Temperature', - children: newGCodeFileFormValues.gcodeFileInfo.hotPlateTemp + '°' + children: newGCodeFileFormValues?.gcodeFileInfo?.hotPlateTemp + '°' }, { key: 'estimated_printing_time_normal_mode', label: 'Est. Print Time', children: - newGCodeFileFormValues.gcodeFileInfo.estimatedPrintingTimeNormalMode + newGCodeFileFormValues?.gcodeFileInfo?.estimatedPrintingTimeNormalMode } ] @@ -193,6 +208,22 @@ const NewGCodeFile = ({ onOk, reset }) => { } }, [reset, newGCodeFileForm]) + useEffect(() => { + const filamentCost = newGCodeFileFormValues?.filament?.cost + const gcodeFilamentUsed = + newGCodeFileFormValues?.gcodeFileInfo?.filamentUsedG + if (filamentCost && gcodeFilamentUsed) { + const cost = (filamentCost / 1000) * gcodeFilamentUsed + console.log('Setting cost') + setNewGCodeFileFormValues((prev) => ({ ...prev, cost: cost.toFixed(2) })) + newGCodeFileForm.setFieldValue('cost', cost.toFixed(2)) + } + }, [ + newGCodeFileForm, + newGCodeFileFormValues?.filament?.cost, + newGCodeFileFormValues?.gcodeFileInfo?.filamentUsedG + ]) + const handleNewGCodeFileUpload = async (id) => { setNewGCodeFileLoading(true) const formData = new FormData() @@ -208,7 +239,7 @@ const NewGCodeFile = ({ onOk, reset }) => { } } ) - messageApi.success('Finished uploading!') + resetForm() onOk() } catch (error) { @@ -374,7 +405,7 @@ const NewGCodeFile = ({ onOk, reset }) => { { + + + ) }, @@ -419,7 +468,6 @@ const NewGCodeFile = ({ onOk, reset }) => { return ( - {contextHolder}
{ - - + <Flex vertical={'true'} style={{ flexGrow: 1 }} gap='middle'> + <Title level={2} style={{ marginTop: 0, marginBottom: 4 }}> New G Code File
{ - const [stats, setStats] = useState({ - totalPrinters: 0, - activePrinters: 0, - totalPrintJobs: 0, - activePrintJobs: 0, - completedPrintJobs: 0, - printerStatus: { - idle: 0, - printing: 0, - error: 0, - offline: 0 - } - }) - - const { socket } = useContext(SocketContext) - - useEffect(() => { - const fetchStats = async () => { - try { - const [printersResponse, printJobsResponse] = await Promise.all([ - axios.get('/api/printers'), - axios.get('/api/print-jobs') - ]) - - const printers = printersResponse.data - const printJobs = printJobsResponse.data - - const printerStatus = printers.reduce((acc, printer) => { - acc[printer.status] = (acc[printer.status] || 0) + 1 - return acc - }, {}) - - setStats({ - totalPrinters: printers.length, - activePrinters: printers.filter((p) => p.status === 'printing') - .length, - totalPrintJobs: printJobs.length, - activePrintJobs: printJobs.filter((job) => job.status === 'printing') - .length, - completedPrintJobs: printJobs.filter( - (job) => job.status === 'completed' - ).length, - printerStatus - }) - } catch (error) { - console.error('Error fetching production stats:', error) - } - } - - fetchStats() - - if (socket) { - socket.on('printerUpdate', fetchStats) - socket.on('printJobUpdate', fetchStats) - } - - return () => { - if (socket) { - socket.off('printerUpdate', fetchStats) - socket.off('printJobUpdate', fetchStats) - } - } - }, [socket]) - - const getPrinterStatusPercentage = (status) => { - const count = stats.printerStatus[status] || 0 - if (stats.totalPrinters > 0) { - return Math.round((count / stats.totalPrinters) * 100) - } - return 0 - } - - const getCompletionRate = () => { - if (stats.totalPrintJobs > 0) { - return Math.round((stats.completedPrintJobs / stats.totalPrintJobs) * 100) - } - return 0 - } - - return ( - - - - Overview - - - - } - /> - } - /> - } - /> - } - /> - } - /> - } - /> - } - /> - } - /> - } - /> - } - /> - - - - - - Printer Statistics - - - - - - Total Printers - - } - > - {stats.totalPrinters} - - - Active Printers - - } - > - {stats.activePrinters} - - - `${stats.printerStatus.printing || 0} Printing`} - /> - `${stats.printerStatus.idle || 0} Idle`} - /> - `${stats.printerStatus.error || 0} Error`} - /> - - - - - - Job Statistics - - - - - - Total Print Jobs - - } - > - {stats.totalPrintJobs} - - - Active Print Jobs - - } - > - {stats.activePrintJobs} - - - Completed Print Jobs - - } - > - {stats.completedPrintJobs} - - - 'Completion Rate'} - /> - - - - - - - ) -} - -export default ProductionOverview diff --git a/src/components/Dashboard/Production/PrintJobs.jsx b/src/components/Dashboard/Production/PrintJobs.jsx index df502fa..4415a21 100644 --- a/src/components/Dashboard/Production/PrintJobs.jsx +++ b/src/components/Dashboard/Production/PrintJobs.jsx @@ -14,7 +14,10 @@ import { message, notification, Input, - Typography + Typography, + Checkbox, + Popover, + Spin } from 'antd' import { createStyles } from 'antd-style' import { @@ -24,12 +27,12 @@ import { InfoCircleOutlined, PlayCircleOutlined, ReloadOutlined, - FilterOutlined, CloseOutlined, CheckCircleOutlined, CloseCircleOutlined, PauseCircleOutlined, - QuestionCircleOutlined + QuestionCircleOutlined, + CheckOutlined } from '@ant-design/icons' import { AuthContext } from '../../Auth/AuthContext' @@ -66,97 +69,52 @@ const PrintJobs = () => { notification.useNotification() const navigate = useNavigate() const [printJobsData, setPrintJobsData] = useState([]) + const [page, setPage] = useState(1) + const [hasMore, setHasMore] = useState(true) + const [lazyLoading, setLazyLoading] = useState(false) - const [showFilters, setShowFilters] = useState(false) - const [filters, setFilters] = useState({ - id: '', - state: '' - }) + const [filters, setFilters] = useState({}) + const [sorter, setSorter] = useState({}) const [newPrintJobOpen, setNewPrintJobOpen] = useState(false) const [loading, setLoading] = useState(true) - const { authenticated } = useContext(AuthContext) - const { socket } = useContext(SocketContext) - - const handleDeployPrintJob = (printJobId) => { - if (socket) { - messageApi.info(`Print job ${printJobId} deployment initiated`) - socket.emit('server.job_queue.deploy', { printJobId }, (response) => { - if (response == false) { - notificationApi.error({ - message: 'Print job deployment failed', - description: 'Please try again later' - }) - } else { - notificationApi.success({ - message: 'Print job deployment initiated', - description: 'Please wait for the print job to start' - }) - } - }) - navigate(`/production/printjobs/info?printJobId=${printJobId}`) - } else { - messageApi.error('Socket connection not available') - } + const getFilterDropdown = ({ + setSelectedKeys, + selectedKeys, + confirm, + clearFilters, + propertyName + }) => { + return ( +
+ + + setSelectedKeys(e.target.value ? [e.target.value] : []) + } + onPressEnter={() => confirm()} + style={{ width: 200, display: 'block' }} + /> +
+ ) } - const fetchPrintJobsData = useCallback(async () => { - if (!authenticated) { - return - } - try { - const response = await axios.get('http://localhost:8080/printjobs', { - params: { - page: 1, - limit: 25 - }, - headers: { - Accept: 'application/json' - }, - withCredentials: true - }) - setLoading(false) - setPrintJobsData(response.data) - } catch (error) { - setLoading(false) - if (error.response) { - messageApi.error( - 'Error fetching print jobs data:', - error.response.status - ) - } else { - messageApi.error( - 'An unexpected error occurred. Please try again later.' - ) - } - } - }, [authenticated, messageApi]) - - useEffect(() => { - // Fetch initial data - if (authenticated) { - fetchPrintJobsData() - } - }, [authenticated, fetchPrintJobsData]) - - const handleFilterChange = (field, value) => { - setFilters((prev) => ({ - ...prev, - [field]: value - })) - } - - const filteredData = printJobsData.filter((printJob) => { - const matchesId = printJob.id - .toLowerCase() - .includes(filters.id.toLowerCase()) - const matchesState = printJob.state.type - .toLowerCase() - .includes(filters.state.toLowerCase()) - return matchesId && matchesState - }) - // Column definitions const columns = [ { @@ -173,14 +131,44 @@ const PrintJobs = () => { key: 'gcodeFileName', width: 200, fixed: 'left', - render: (gcodeFile) => {gcodeFile.name} + render: (gcodeFile) => {gcodeFile.name}, + filterDropdown: ({ + setSelectedKeys, + selectedKeys, + confirm, + clearFilters + }) => + getFilterDropdown({ + setSelectedKeys, + selectedKeys, + confirm, + clearFilters, + propertyName: 'GCode file name' + }), + onFilter: (value, record) => + record.gcodeFile.name.toLowerCase().includes(value.toLowerCase()) }, { title: 'ID', dataIndex: 'id', key: 'id', width: 165, - render: (text) => + render: (text) => , + filterDropdown: ({ + setSelectedKeys, + selectedKeys, + confirm, + clearFilters + }) => + getFilterDropdown({ + setSelectedKeys, + selectedKeys, + confirm, + clearFilters, + propertyName: 'ID' + }), + onFilter: (value, record) => + record.id.toLowerCase().includes(value.toLowerCase()) }, { title: 'State', @@ -188,7 +176,22 @@ const PrintJobs = () => { width: 240, render: (record) => { return - } + }, + filterDropdown: ({ + setSelectedKeys, + selectedKeys, + confirm, + clearFilters + }) => + getFilterDropdown({ + setSelectedKeys, + selectedKeys, + confirm, + clearFilters, + propertyName: 'state' + }), + onFilter: (value, record) => + record.state.type.toLowerCase().includes(value.toLowerCase()) }, { title: , @@ -222,6 +225,21 @@ const PrintJobs = () => { return } }, + { + title: 'Created At', + dataIndex: 'createdAt', + key: 'createdAt', + width: 180, + render: (createdAt) => { + if (createdAt) { + const formattedDate = moment(createdAt).format('YYYY-MM-DD HH:mm:ss') + return {formattedDate} + } else { + return 'n/a' + } + }, + sorter: true + }, { title: 'Started At', dataIndex: 'startedAt', @@ -234,7 +252,8 @@ const PrintJobs = () => { } else { return 'n/a' } - } + }, + sorter: true }, { title: 'Actions', @@ -253,7 +272,9 @@ const PrintJobs = () => { - + + {lazyLoading && } />}
}} scroll={{ y: 'calc(100vh - 270px)' }} + onChange={handleTableChange} + onScroll={handleScroll} + showSorterTooltip={false} /> { { setNewPrintJobOpen(false) + messageApi.success('New print job created successfully.') fetchPrintJobsData() }} reset={newPrintJobOpen} diff --git a/src/components/Dashboard/Production/PrintJobs/NewPrintJob.jsx b/src/components/Dashboard/Production/PrintJobs/NewPrintJob.jsx index bfd2651..4dc29f0 100644 --- a/src/components/Dashboard/Production/PrintJobs/NewPrintJob.jsx +++ b/src/components/Dashboard/Production/PrintJobs/NewPrintJob.jsx @@ -7,10 +7,7 @@ import { Typography, Flex, Steps, - Col, - Row, Divider, - Checkbox, Descriptions, InputNumber } from 'antd' @@ -19,9 +16,12 @@ import PropTypes from 'prop-types' import GCodeFileSelect from '../../common/GCodeFileSelect' import PrinterSelect from '../../common/PrinterSelect' -const { Title, Text } = Typography +const { Title } = Typography -const initialNewPrintJobForm = {} +const initialNewPrintJobForm = { + gcodeFile: null, + quantity: 1 +} const NewPrintJob = ({ onOk, reset }) => { NewPrintJob.propTypes = { @@ -37,7 +37,6 @@ const NewPrintJob = ({ onOk, reset }) => { const [newPrintJobFormValues, setNewPrintJobFormValues] = useState( initialNewPrintJobForm ) - const [useAnyPrinter, setUseAnyPrinter] = useState(true) const newPrintJobFormUpdateValues = Form.useWatch([], newPrintJobForm) @@ -58,31 +57,12 @@ const NewPrintJob = ({ onOk, reset }) => { } ] - if (!useAnyPrinter && newPrintJobFormValues.printers) { - const printerList = newPrintJobFormValues.printers - - summaryItems.splice(2, 0, { - key: 'printer', - label: 'Printers', - children: `${printerList.length} printer(s) selected` - }) - } - React.useEffect(() => { if (reset) { newPrintJobForm.resetFields() } }, [reset, newPrintJobForm]) - const handleUseAnyPrinterChecked = (e) => { - const checked = e.target.checked - setUseAnyPrinter(checked) - if (checked === true) { - newPrintJobForm.resetFields(['printer']) - setNewPrintJobFormValues({ ...newPrintJobFormValues, printer: null }) - } - } - const handleNewPrintJob = async () => { setNewPrintJobLoading(true) try { @@ -96,7 +76,7 @@ const NewPrintJob = ({ onOk, reset }) => { withCredentials: true // Important for including cookies } ) - messageApi.success('New print job created successfully.') + onOk() } catch (error) { messageApi.error('Error creating new print job: ' + error.message) @@ -111,10 +91,6 @@ const NewPrintJob = ({ onOk, reset }) => { key: 'required', content: ( <> - - Please select a G Code File: - - { > - - - Use any printer configured. - - - + ) @@ -179,74 +148,72 @@ const NewPrintJob = ({ onOk, reset }) => { ] return ( - + {contextHolder} - +
- -
- - - - - - New PrintJob - - - setNewPrintJobFormValues((prevValues) => ({ - ...prevValues, - ...changedValues - })) - } - initialValues={initialNewPrintJobForm} - > - {steps[currentStep].content} + - + + + + + New PrintJob + + + setNewPrintJobFormValues((prevValues) => ({ + ...prevValues, + ...changedValues + })) + } + initialValues={initialNewPrintJobForm} + > +
{steps[currentStep].content}
+ + + + {currentStep < steps.length - 1 && ( - {currentStep < steps.length - 1 && ( - - )} - {currentStep === steps.length - 1 && ( - - )} - - -
- - + )} + {currentStep === steps.length - 1 && ( + + )} +
+ +
+ ) } diff --git a/src/components/Dashboard/Production/Printers.jsx b/src/components/Dashboard/Production/Printers.jsx index fe7b75d..59ee0f0 100644 --- a/src/components/Dashboard/Production/Printers.jsx +++ b/src/components/Dashboard/Production/Printers.jsx @@ -12,7 +12,10 @@ import { Flex, Input, Tag, - Modal + Modal, + Popover, + Checkbox, + Spin } from 'antd' import { createStyles } from 'antd-style' import { @@ -21,10 +24,10 @@ import { ControlOutlined, LoadingOutlined, ReloadOutlined, - FilterOutlined, CloseOutlined, PlusOutlined, - PrinterOutlined + PrinterOutlined, + CheckOutlined } from '@ant-design/icons' import { AuthContext } from '../../Auth/AuthContext' @@ -53,52 +56,261 @@ const useStyle = createStyles(({ css, token }) => { const Printers = () => { const { styles } = useStyle() const [printerData, setPrinterData] = useState([]) + const [page, setPage] = useState(1) + const [hasMore, setHasMore] = useState(true) + const [loading, setLoading] = useState(true) + const [lazyLoading, setLazyLoading] = useState(false) + const [filters, setFilters] = useState({}) + const [sorter, setSorter] = useState({}) - const [messageApi] = message.useMessage() - const [showFilters, setShowFilters] = useState(false) - - const { authenticated } = useContext(AuthContext) - const [loading, setLoading] = useState(false) - const [filters, setFilters] = useState({ - printerName: '', - host: '', - tags: '' - }) - - const [newPrinterOpen, setNewPrinterOpen] = useState(false) - - const navigate = useNavigate() - - const fetchPrintersData = useCallback(async () => { - try { - const response = await axios.get('http://localhost:8080/printers', { - params: { - page: 1, - limit: 25 - }, - headers: { - Accept: 'application/json' - }, - withCredentials: true // Important for including cookies - }) - setLoading(false) - setPrinterData(response.data) - } catch (error) { - if (error.response) { - messageApi.error('Error fetching printer data:', error.response.status) - } else { - messageApi.error( - 'An unexpected error occurred. Please try again later.' + // Column definitions + const columns = [ + { + title: '', + dataIndex: '', + key: '', + width: 40, + fixed: 'left', + render: () => + }, + { + title: 'Name', + dataIndex: 'name', + key: 'name', + width: 200, + fixed: 'left', + filterDropdown: ({ + setSelectedKeys, + selectedKeys, + confirm, + clearFilters + }) => + getFilterDropdown({ + setSelectedKeys, + selectedKeys, + confirm, + clearFilters, + propertyName: 'name' + }), + onFilter: (value, record) => + record.name.toLowerCase().includes(value.toLowerCase()) + }, + { + title: 'ID', + dataIndex: 'id', + key: 'id', + width: 165, + render: (text) => + }, + { + title: 'State', + key: 'state', + width: 240, + render: (record) => { + return ( + + ) + } + }, + { + title: 'Tags', + dataIndex: 'tags', + key: 'tags', + width: 170, + render: (tags) => { + if (!tags || !Array.isArray(tags)) return 'n/a' + if (tags.length == 0) return 'n/a' + return ( + + {tags.map((tag, index) => ( + + {tag} + + ))} + + ) + }, + filterDropdown: ({ + setSelectedKeys, + selectedKeys, + confirm, + clearFilters + }) => + getFilterDropdown({ + setSelectedKeys, + selectedKeys, + confirm, + clearFilters, + propertyName: 'tags' + }), + onFilter: (value, record) => + record.tags && + record.tags.some((tag) => + tag.toLowerCase().includes(value.toLowerCase()) + ) + }, + { + title: 'Actions', + key: 'operation', + fixed: 'right', + width: 150, + render: (record) => { + return ( + + + + ) } } - }, [messageApi]) + ] - const handleFilterChange = (field, value) => { - setFilters((prev) => ({ - ...prev, - [field]: value - })) + const [columnVisibility, setColumnVisibility] = useState( + columns.reduce((acc, col) => { + if (col.key) { + acc[col.key] = true + } + return acc + }, {}) + ) + + const [messageApi] = message.useMessage() + const { authenticated } = useContext(AuthContext) + const [newPrinterOpen, setNewPrinterOpen] = useState(false) + const navigate = useNavigate() + + const getFilterDropdown = ({ + setSelectedKeys, + selectedKeys, + confirm, + clearFilters, + propertyName + }) => { + return ( +
+ + + setSelectedKeys(e.target.value ? [e.target.value] : []) + } + onPressEnter={() => confirm()} + style={{ width: 200, display: 'block' }} + /> +
+ ) + } + + const fetchPrintersData = useCallback( + async (pageNum = 1, append = false) => { + try { + const params = { + page: pageNum, + limit: 25, + ...filters, + sort: sorter.field, + order: sorter.order + } + + const response = await axios.get('http://localhost:8080/printers', { + params, + headers: { + Accept: 'application/json' + }, + withCredentials: true + }) + + const newData = response.data + setHasMore(newData.length === 25) // If we get less than 25 items, we've reached the end + + if (append) { + setPrinterData((prev) => [...prev, ...newData]) + } else { + setPrinterData(newData) + } + + setLoading(false) + setLazyLoading(false) + } catch (error) { + if (error.response) { + messageApi.error( + 'Error fetching printer data:', + error.response.status + ) + } else { + messageApi.error( + 'An unexpected error occurred. Please try again later.' + ) + } + setLoading(false) + setLazyLoading(false) + } + }, + [messageApi, filters, sorter] + ) + + const handleScroll = useCallback( + (e) => { + const { target } = e + const scrollHeight = target.scrollHeight + const scrollTop = target.scrollTop + const clientHeight = target.clientHeight + + // If we're near the bottom (within 100px) and not currently loading + if ( + scrollHeight - scrollTop - clientHeight < 100 && + !lazyLoading && + hasMore + ) { + setLazyLoading(true) + const nextPage = page + 1 + setPage(nextPage) + fetchPrintersData(nextPage, true) + } + }, + [page, lazyLoading, hasMore, fetchPrintersData] + ) + + const handleTableChange = (pagination, filters, sorter) => { + const newFilters = {} + Object.entries(filters).forEach(([key, value]) => { + if (value && value.length > 0) { + newFilters[key] = value[0] // Take the first filter value + } + }) + + setFilters(newFilters) + setSorter({ + field: sorter.field, + order: sorter.order + }) } const getPrinterActionItems = (printerId) => { @@ -125,36 +337,46 @@ const Printers = () => { ], onClick: ({ key }) => { if (key === 'info') { - navigate(`/production/printers/info?printerId=${printerId}`) + navigate(`/dashboard/production/printers/info?printerId=${printerId}`) } else if (key === 'control') { - navigate(`/production/printers/control?printerId=${printerId}`) + navigate( + `/dashboard/production/printers/control?printerId=${printerId}` + ) } } } } - useEffect(() => { - if (authenticated) { - // Fetch initial data - fetchPrintersData() - } - }, [fetchPrintersData, authenticated]) + const getViewDropdownItems = () => { + const columnItems = columns + .filter((col) => col.key && col.title !== '') // Filter out empty title columns and ensure key exists + .map((col) => ( + { + setColumnVisibility((prev) => ({ + ...prev, + [col.key]: e.target.checked + })) + }} + > + {col.title} + + )) - const filteredData = printerData.filter((printer) => { - const matchesName = printer.printerName - .toLowerCase() - .includes(filters.printerName.toLowerCase()) - const matchesHost = printer.moonraker.host - .toLowerCase() - .includes(filters.host.toLowerCase()) - const matchesTags = - !filters.tags || - (printer.tags && - printer.tags.some((tag) => - tag.toLowerCase().includes(filters.tags.toLowerCase()) - )) - return matchesName && matchesHost && matchesTags - }) + return ( + + + {columnItems} + + + ) + } + + const visibleColumns = columns.filter( + (col) => !col.key || columnVisibility[col.key] + ) const actionItems = { items: [ @@ -179,131 +401,40 @@ const Printers = () => { } } - // Column definitions - const columns = [ - { - title: '', - dataIndex: '', - key: '', - width: 40, - fixed: 'left', - render: () => - }, - { - title: 'Name', - dataIndex: 'printerName', - key: 'printerName', - width: 200, - fixed: 'left' - }, - { - title: 'ID', - dataIndex: 'id', - key: 'id', - width: 165, - render: (text) => - }, - - { - title: 'State', - key: 'state', - width: 240, - render: (record) => { - return ( - - ) - } - }, - { - title: 'Tags', - dataIndex: 'tags', - key: 'tags', - width: 170, - render: (tags) => { - if (!tags || !Array.isArray(tags)) return null - return ( - - {tags.map((tag, index) => ( - - {tag} - - ))} - - ) - } - }, - { - title: 'Actions', - key: 'operation', - fixed: 'right', - width: 150, - render: (record) => { - return ( - - - - - ) - } + useEffect(() => { + if (authenticated) { + fetchPrintersData() } - ] + }, [fetchPrintersData, authenticated]) return ( <> - + - + + {lazyLoading && } />}
}} scroll={{ y: 'calc(100vh - 270px)' }} + onChange={handleTableChange} + onScroll={handleScroll} + showSorterTooltip={false} /> { { setNewPrinterOpen(false) + messageApi.success('New printer added successfully.') fetchPrintersData() }} reset={newPrinterOpen} diff --git a/src/components/Dashboard/Production/Printers/ChangeFillament.jsx b/src/components/Dashboard/Production/Printers/ChangeFillament.jsx deleted file mode 100644 index ca6363d..0000000 --- a/src/components/Dashboard/Production/Printers/ChangeFillament.jsx +++ /dev/null @@ -1,333 +0,0 @@ -import React, { useState, useContext, useRef } from 'react' -import axios from 'axios' -import { - Form, - Input, - Button, - message, - Typography, - Flex, - Steps, - Col, - Row, - Divider, - Upload, - Descriptions -} from 'antd' - -import { AuthContext } from '../../Auth/AuthContext' - -import GCodeFileIcon from '../../Icons/GCodeFileIcon' - -import FilamentSelect from '../common/FilamentSelect' -import PrinterSelect from '../common/PrinterSelect' - -const { Dragger } = Upload - -const { Title, Text } = Typography - -const initialNewGCodeFileForm = { - name: '', - brand: '', - type: '', - price: 0, - color: '#FFFFFF', - diameter: '1.75', - image: null, - url: '', - barcode: '' -} - -const chunkSize = 5000 - -const NewGCodeFile = ({ onOk, reset }) => { - const [messageApi, contextHolder] = message.useMessage() - - const [newGCodeFileLoading, setNewGCodeFileLoading] = useState(false) - const [currentStep, setCurrentStep] = useState(0) - const [nextEnabled, setNextEnabled] = useState(false) - - const [newGCodeFileForm] = Form.useForm() - const [newGCodeFileFormValues, setNewGCodeFileFormValues] = useState( - initialNewGCodeFileForm - ) - - const [imageList, setImageList] = useState([]) - - const [gcode, setGCode] = useState('') - - const newGCodeFileFormUpdateValues = Form.useWatch([], newGCodeFileForm) - - const { token } = useContext(AuthContext) - - const gcodePreviewRef = useRef(null) - - React.useEffect(() => { - newGCodeFileForm - .validateFields({ - validateOnly: true - }) - .then(() => setNextEnabled(true)) - .catch(() => setNextEnabled(false)) - }, [newGCodeFileForm, newGCodeFileFormUpdateValues]) - - const summaryItems = [ - { - key: 'name', - label: 'Name', - children: newGCodeFileFormValues.name - }, - { - key: 'brand', - label: 'Brand', - children: newGCodeFileFormValues.brand - }, - { - key: 'type', - label: 'Material', - children: () => { - if (newGCodeFileFormValues.filament != null) { - return '1 selected.' - } else { - return '0 selected.' - } - } - }, - { - key: 'price', - label: 'Price', - children: '£' + newGCodeFileFormValues.price + ' per kg' - } - ] - - React.useEffect(() => { - if (reset) { - newGCodeFileForm.resetFields() - } - }, [reset, newGCodeFileForm]) - - const handleNewGCodeFile = async () => { - setNewGCodeFileLoading(true) - try { - await axios.post( - `http://localhost:8080/gcodefiles`, - newGCodeFileFormValues, - { - headers: { - Authorization: `Bearer ${token}` - } - } - ) - messageApi.success('New G Code file created successfully.') - onOk() - } catch (error) { - messageApi.error('Error creating new gcode file: ' + error.message) - } finally { - setNewGCodeFileLoading(false) - } - } - - const getBase64 = (file) => { - return new Promise((resolve, reject) => { - const reader = new FileReader() - reader.readAsDataURL(file) - reader.onload = () => resolve(reader.result) - reader.onerror = (error) => reject(error) - }) - } - - const handleGCodeUpload = (file) => { - const reader = new FileReader() - reader.onload = () => { - console.log(reader.result) - setGCode(reader.result) - } - reader.readAsText(file) - } - - const steps = [ - { - title: 'Details', - key: 'details', - content: ( - <> - - Please provide the following information: - - - - - - - - - - ) - }, - { - title: 'Upload', - key: 'upload', - content: ( - <> - (Array.isArray(e) ? e : e && e.fileList)} - > - { - handleGCodeUpload(file) - setTimeout(() => { - onSuccess('ok') - }, 0) - }} - > -

- -

-

- Click or gcode instruction file here. -

-

- Supported file extentions: .gcode, .gco, .g -

-
-
- - ) - }, - { - title: 'Targets', - key: 'targets', - content: ( - <> - - - Please provide at least one target to deploy this G Code file: - - - - - - - ) - }, - { - title: 'Summary', - key: 'done', - content: ( - - - - ) - } - ] - - return ( - - {contextHolder} -
- - - - - - - - - New G Code File - -
- setNewGCodeFileFormValues((prevValues) => ({ - ...prevValues, - ...changedValues - })) - } - initialValues={initialNewGCodeFileForm} - > - {steps[currentStep].content} - - - - {currentStep < steps.length - 1 && ( - - )} - {currentStep === steps.length - 1 && ( - - )} - - -
- - - ) -} - -export default NewGCodeFile diff --git a/src/components/Dashboard/Production/Printers/ControlPrinter.jsx b/src/components/Dashboard/Production/Printers/ControlPrinter.jsx index 453c4b1..4514338 100644 --- a/src/components/Dashboard/Production/Printers/ControlPrinter.jsx +++ b/src/components/Dashboard/Production/Printers/ControlPrinter.jsx @@ -10,14 +10,16 @@ import { Dropdown, Space, Descriptions, - Progress + Progress, + Modal, + Typography, + Badge } from 'antd' import { LoadingOutlined, PlayCircleOutlined, ExclamationCircleOutlined, ReloadOutlined, - EditOutlined, PauseCircleOutlined, CloseCircleOutlined } from '@ant-design/icons' @@ -31,6 +33,14 @@ import { AuthContext } from '../../../Auth/AuthContext' import PrinterSubJobsTree from '../../common/PrinterJobsTree' import IdText from '../../common/IdText' +import FilamentIcon from '../../../Icons/FilamentIcon' +import FilamentStockIcon from '../../../Icons/FilamentStockIcon' + +import LoadFilamentStock from '../../Inventory/FilamentStocks/LoadFilamentStock' +import UnloadFilamentStock from '../../Inventory/FilamentStocks/UnloadFilamentStock' + +const { Text } = Typography + // Helper function to parse query parameters const useQuery = () => { return new URLSearchParams(useLocation().search) @@ -43,6 +53,10 @@ const ControlPrinter = () => { const [printerData, setPrinterData] = useState(null) const [initialized, setInitialized] = useState(false) + const [loadFilamentStockModalOpen, setLoadFilamentStockModalOpen] = + useState(false) + const [unloadFilamentStockModalOpen, setUnloadFilamentStockModalOpen] = + useState(false) const { socket } = useContext(SocketContext) const { authenticated } = useContext(AuthContext) @@ -82,6 +96,7 @@ const ControlPrinter = () => { if (socket && !initialized && printerId) { setInitialized(true) socket.on('notify_printer_update', (statusUpdate) => { + console.log('GOT STATUS', statusUpdate) setPrinterData((prevData) => { if (statusUpdate?.id === printerId) { return { @@ -92,10 +107,29 @@ const ControlPrinter = () => { return prevData }) }) + + // Add WebSocket event listener for filament stock updates + socket.on('notify_filamentstock_update', (filamentStockUpdate) => { + console.log('GOT FILAMENT STOCK UPDATE', filamentStockUpdate) + setPrinterData((prevData) => { + if (prevData?.currentFilamentStock?.id === filamentStockUpdate?.id) { + return { + ...prevData, + currentFilamentStock: { + ...prevData.currentFilamentStock, + ...filamentStockUpdate + } + } + } + return prevData + }) + }) } return () => { if (socket && initialized) { + console.log('Deregistering') socket.off('notify_printer_update') + socket.off('notify_filamentstock_update') } } }, [socket, initialized, printerId]) @@ -111,42 +145,99 @@ const ControlPrinter = () => { } }, [authenticated, fetchPrinterDetails]) + useEffect(() => { + if ( + printerData?.alerts?.some((alert) => alert.type === 'loadFilamentStock') + ) { + setLoadFilamentStockModalOpen(true) + } else { + setLoadFilamentStockModalOpen(false) + } + }, [printerData?.alerts]) + const actionItems = { items: [ { label: 'Resume Print', key: 'resumePrint', - icon: + icon: , + disabled: printerData?.state?.type !== 'paused' }, { label: 'Pause Print', key: 'pausePrint', - icon: + icon: , + disabled: printerData?.state?.type !== 'printing' }, { label: 'Cancel Print', key: 'cancelPrint', - icon: + icon: , + disabled: !( + printerData?.state?.type === 'printing' || + printerData?.state?.type === 'paused' + ) }, { type: 'divider' }, { - label: 'Start Queue', - key: 'startQueue', - disabled: - printerData?.state?.type === 'printing' || - printerData?.state?.type === 'deploying' || - printerData?.state?.type === 'paused' || - printerData?.state?.type === 'error', + label: 'Queue', + key: 'queue', + children: [ + { + label: 'Start Queue', + key: 'startQueue', + disabled: + printerData?.state?.type === 'printing' || + printerData?.state?.type === 'deploying' || + printerData?.state?.type === 'paused' || + printerData?.state?.type === 'error', - icon: + icon: + }, + { + label: 'Pause Queue', + key: 'pauseQueue', + icon: + } + ] }, { - label: 'Pause Queue', - key: 'pauseQueue', - icon: + label: 'Filament', + key: 'filament', + children: [ + { + label: 'Load Filament Stock', + key: 'loadFilamentStock', + icon: , + disabled: + printerData?.state?.type === 'printing' || + printerData?.state?.type === 'error' || + printerData?.state?.type === 'offline' || + printerData?.currentFilamentStock !== null + }, + { + label: 'Unload Filament Stock', + key: 'unloadFilamentStock', + icon: , + disabled: + printerData?.state?.type === 'printing' || + printerData?.state?.type === 'error' || + printerData?.state?.type === 'offline' || + printerData?.currentFilamentStock === null + }, + { + type: 'divider' + }, + { + label: 'Filament Info', + key: 'filamentInfo', + icon: + } + ] }, + { type: 'divider' }, @@ -159,14 +250,6 @@ const ControlPrinter = () => { label: 'Restart Firmware', key: 'restartFirmware', icon: - }, - { - type: 'divider' - }, - { - label: 'Edit Printer', - key: 'edit', - icon: } ], onClick: ({ key }) => { @@ -184,6 +267,10 @@ const ControlPrinter = () => { socket.emit('server.job_queue.start', { printerId }) } else if (key === 'pauseQueue') { socket.emit('server.job_queue.pause', { printerId }) + } else if (key === 'loadFilamentStock') { + setLoadFilamentStockModalOpen(true) + } else if (key === 'unloadFilamentStock') { + setUnloadFilamentStockModalOpen(true) } } } @@ -197,11 +284,9 @@ const ControlPrinter = () => { > - - - - - + + + {printerData ? ( { - {printerData.printerName} + {printerData.name} + + + {printerData._id ? ( + + ) : ( + 'n/a' + )} {printerData.currentJob?.id ? ( @@ -275,8 +372,26 @@ const ControlPrinter = () => { 'n/a' )} + + {printerData.currentSubJob?.id ? ( + + ) : ( + 'n/a' + )} + - {printerData.currentJob?.gcodeFile?.name || 'n/a'} + { + + {printerData.currentJob?.gcodeFile?.name || 'n/a'} + + } {printerData.currentJob?.gcodeFile ? ( @@ -291,16 +406,69 @@ const ControlPrinter = () => { )} + + {printerData.currentFilamentStock?.currentNetWeight ? ( + + {printerData.currentFilamentStock.currentNetWeight.toFixed( + 2 + ) + 'g'} + + ) : ( + 'n/a' + )} + + + + {printerData.currentFilamentStock ? ( + + ) : ( + 'n/a' + )} + + + + {printerData.currentFilamentStock?.filament?.name ? ( + + ) : ( + 'n/a' + )} + + + + {printerData?.currentFilamentStock?.filament ? ( + + ) : ( + 'n/a' + )} + + {(() => { if ( printerData.currentJob?.gcodeFile?.gcodeFileInfo .estimatedPrintingTimeNormalMode ) { - return `${ - printerData.currentJob.gcodeFile.gcodeFileInfo - .estimatedPrintingTimeNormalMode - }` + return ( + + { + printerData.currentJob.gcodeFile.gcodeFileInfo + .estimatedPrintingTimeNormalMode + } + + ) } return 'n/a' })()} @@ -312,14 +480,21 @@ const ControlPrinter = () => { printerData?.currentJob?.gcodeFile.gcodeFileInfo .printSettingsId ) { - return `${printerData.currentJob.gcodeFile.gcodeFileInfo.printSettingsId.replaceAll('"', '')}` + return ( + + {printerData.currentJob.gcodeFile.gcodeFileInfo.printSettingsId.replaceAll( + '"', + '' + )} + + ) } else { return 'n/a' } })()} - {printerData.currentSubJob?.state.type === 'printing' && ( + {printerData?.state.type === 'printing' && ( { - + - + @@ -350,6 +525,41 @@ const ControlPrinter = () => { )} + { + setLoadFilamentStockModalOpen(false) + }} + > + { + setLoadFilamentStockModalOpen(false) + messageApi.success('New print job created successfully.') + }} + isFilamentLoaded={false} + printer={printerData} + reset={loadFilamentStockModalOpen} + /> + + { + setUnloadFilamentStockModalOpen(false) + }} + > + { + setUnloadFilamentStockModalOpen(false) + messageApi.success('Filament unloaded successfully.') + }} + printer={printerData} + reset={unloadFilamentStockModalOpen} + /> + ) } diff --git a/src/components/Dashboard/Production/Printers/NewPrinter.jsx b/src/components/Dashboard/Production/Printers/NewPrinter.jsx index e10097b..9606833 100644 --- a/src/components/Dashboard/Production/Printers/NewPrinter.jsx +++ b/src/components/Dashboard/Production/Printers/NewPrinter.jsx @@ -78,8 +78,8 @@ const NewPrinter = ({ onOk, reset }) => { !!(moonraker?.protocol && moonraker?.host && moonraker?.port) ) } else if (currentStep === 1) { - const printerName = newPrinterForm.getFieldValue('printerName') - setNextEnabled(!!printerName) + const name = newPrinterForm.getFieldValue('name') + setNextEnabled(!!name) } else { setNextEnabled(true) } @@ -91,7 +91,7 @@ const NewPrinter = ({ onOk, reset }) => { { key: 'name', label: 'Name', - children: newPrinterFormValues.printerName + children: newPrinterFormValues.name }, { key: 'protocol', @@ -168,7 +168,7 @@ const NewPrinter = ({ onOk, reset }) => { withCredentials: true } ) - messageApi.success('New printer added successfully.') + onOk() } catch (error) { messageApi.error('Error adding new printer: ' + error.message) @@ -476,7 +476,7 @@ const NewPrinter = ({ onOk, reset }) => { <> diff --git a/src/components/Dashboard/Production/Printers/PrinterInfo.jsx b/src/components/Dashboard/Production/Printers/PrinterInfo.jsx index 6f0060b..1779e80 100644 --- a/src/components/Dashboard/Production/Printers/PrinterInfo.jsx +++ b/src/components/Dashboard/Production/Printers/PrinterInfo.jsx @@ -26,6 +26,7 @@ import { import PrinterState from '../../common/PrinterState' import IdText from '../../common/IdText' import PrinterSubJobsList from '../../common/PrinterJobsTree' +import VendorSelect from '../../common/VendorSelect' const { Title } = Typography @@ -48,7 +49,17 @@ const PrinterInfo = () => { useEffect(() => { if (printerData) { - form.setFieldsValue(printerData) + form.setFieldsValue({ + name: printerData.name || '', + vendor: printerData.vendor || { id: null, name: '' }, + moonraker: { + host: printerData.moonraker?.host || '', + port: printerData.moonraker?.port || null, + protocol: printerData.moonraker?.protocol || 'ws', + apiKey: printerData.moonraker?.apiKey || '' + }, + tags: printerData.tags || [] + }) } }, [printerData, form]) @@ -79,8 +90,21 @@ const PrinterInfo = () => { } const cancelEditing = () => { + // Reset form values to original data + if (printerData) { + form.setFieldsValue({ + name: printerData.name || '', + vendor: printerData.vendor || { id: null, name: '' }, + moonraker: { + host: printerData.moonraker?.host || '', + port: printerData.moonraker?.port || null, + protocol: printerData.moonraker?.protocol || 'ws', + apiKey: printerData.moonraker?.apiKey || '' + }, + tags: printerData.tags || [] + }) + } setIsEditing(false) - fetchPrinterDetails() } const updatePrinterInfo = async () => { @@ -88,13 +112,29 @@ const PrinterInfo = () => { const values = await form.validateFields() setLoading(true) - await axios.put(`http://localhost:8080/printers/${printerId}`, values, { - headers: { - 'Content-Type': 'application/json' + await axios.put( + `http://localhost:8080/printers/${printerId}`, + { + name: values.name, + vendor: values.vendor, + moonraker: { + host: values.moonraker.host, + port: values.moonraker.port, + protocol: values.moonraker.protocol, + apiKey: values.moonraker.apiKey + }, + tags: values.tags }, - withCredentials: true - }) - setPrinterData((prev) => ({ ...prev, ...values })) + { + headers: { + 'Content-Type': 'application/json' + }, + withCredentials: true + } + ) + + // Update the local state with the new values + setPrinterData({ ...printerData, ...values }) setIsEditing(false) messageApi.success('Printer information updated successfully') } catch (err) { @@ -179,7 +219,21 @@ const PrinterInfo = () => { -
+ {/* Read-only fields */} @@ -193,7 +247,7 @@ const PrinterInfo = () => { {isEditing ? ( { ) : ( - printerData.printerName || 'n/a' + printerData.name || 'n/a' )} @@ -228,6 +282,32 @@ const PrinterInfo = () => { )} + + {isEditing ? ( + + + + ) : ( + printerData?.vendor?.name || 'n/a' + )} + + + + {printerData?.vendor ? ( + + ) : ( + 'n/a' + )} + + {isEditing ? ( { + const [messageApi, contextHolder] = message.useMessage() + const [error, setError] = useState(null) + const [fetchPrinterStatsLoading, setFetchPrinterStatsLoading] = useState(true) + + const [stats, setStats] = useState({ + totalPrinters: 0, + activePrinters: 0, + totalPrintJobs: 0, + activePrintJobs: 0, + completedPrintJobs: 0, + printerStatus: { + idle: 0, + printing: 0, + error: 0, + offline: 0 + } + }) + + const fetchAllStats = useCallback(async () => { + await fetchPrinterStats() + await fetchPrintJobStats() + console.log(stats) + }, []) + + const fetchPrinterStats = async () => { + try { + setFetchPrinterStatsLoading(true) + const response = await axios.get(`http://localhost:8080/printers/stats`, { + headers: { + Accept: 'application/json' + }, + withCredentials: true + }) + const printStats = response.data + console.log(printStats) + setStats((prev) => ({ ...prev, printers: printStats })) + setError(null) + } catch (err) { + setError('Failed to fetch printer details') + messageApi.error('Failed to fetch printer details') + } finally { + setFetchPrinterStatsLoading(false) + } + } + + const fetchPrintJobStats = async () => { + try { + setFetchPrinterStatsLoading(true) + const response = await axios.get( + `http://localhost:8080/printjobs/stats`, + { + headers: { + Accept: 'application/json' + }, + withCredentials: true + } + ) + const printJobStats = response.data + setStats((prev) => ({ ...prev, printJobs: printJobStats })) + setError(null) + } catch (err) { + setError('Failed to fetch printer details') + messageApi.error('Failed to fetch printer details') + } finally { + setFetchPrinterStatsLoading(false) + } + } + + useEffect(() => { + fetchAllStats() + }, [fetchAllStats]) + + const getPrinterStatusPercentage = (status) => { + const count = stats.printerStatus[status] || 0 + if (stats.totalPrinters > 0) { + return Math.round((count / stats.totalPrinters) * 100) + } + return 0 + } + + const getCompletionRate = () => { + if (stats.totalPrintJobs > 0) { + return Math.round((stats.completedPrintJobs / stats.totalPrintJobs) * 100) + } + return 0 + } + + if (fetchPrinterStatsLoading || fetchPrinterStatsLoading) { + return ( +
+ } /> +
+ ) + } + + if (error || !stats) { + return ( + +

{error || 'Printer not found'}

+ +
+ ) + } + + return ( + + {contextHolder} + + + Overview + + + + + Ready + + + + {(stats.printers.standby || 0) + + (stats.printers.complete || 0)} + + + + } + /> + + Printing + + + + {stats.printers.printing || 0} + + + + } + /> + + Queued + + + + {stats.printJobs.queued || 0} + + + + } + /> + + Printing + + + + {stats.printJobs.printing || 0} + + + + } + /> + + Failed + + + + {(stats.printJobs.failed || 0) + + (stats.printJobs.cancelled || 0)} + + + + } + /> + + Complete + + + + {stats.printJobs.complete || 0} + + + + } + /> + + + + + + Printer Statistics + + + + + + Total Printers + + } + > + {stats.totalPrinters} +
+ + Active Printers + + } + > + {stats.activePrinters} + +
+ + + + + + {stats.printerStatus.printing || 0} + + + + + + + + {stats.printerStatus.idle || 0} + + + + + + `${stats.printerStatus.idle || 0} Idle`} + /> + `${stats.printerStatus.error || 0} Error`} + /> + + + + + + + Job Statistics + + + + + + Total Print Jobs + + } + > + {stats.totalPrintJobs} + + + Active Print Jobs + + } + > + {stats.activePrintJobs} + + + Completed Print Jobs + + } + > + {stats.completedPrintJobs} + + + 'Completion Rate'} + /> + + + + + + + ) +} + +export default ProductionOverview diff --git a/src/components/Dashboard/common/CountryDisplay.jsx b/src/components/Dashboard/common/CountryDisplay.jsx new file mode 100644 index 0000000..24cfeaa --- /dev/null +++ b/src/components/Dashboard/common/CountryDisplay.jsx @@ -0,0 +1,82 @@ +import React from 'react' +import PropTypes from 'prop-types' +import { Space } from 'antd' + +const countries = [ + { code: 'US', name: 'United States', flag: '🇺🇸' }, + { code: 'GB', name: 'United Kingdom', flag: '🇬🇧' }, + { code: 'CA', name: 'Canada', flag: '🇨🇦' }, + { code: 'AU', name: 'Australia', flag: '🇦🇺' }, + { code: 'DE', name: 'Germany', flag: '🇩🇪' }, + { code: 'FR', name: 'France', flag: '🇫🇷' }, + { code: 'IT', name: 'Italy', flag: '🇮🇹' }, + { code: 'ES', name: 'Spain', flag: '🇪🇸' }, + { code: 'JP', name: 'Japan', flag: '🇯🇵' }, + { code: 'CN', name: 'China', flag: '🇨🇳' }, + { code: 'BR', name: 'Brazil', flag: '🇧🇷' }, + { code: 'IN', name: 'India', flag: '🇮🇳' }, + { code: 'RU', name: 'Russia', flag: '🇷🇺' }, + { code: 'ZA', name: 'South Africa', flag: '🇿🇦' }, + { code: 'MX', name: 'Mexico', flag: '🇲🇽' }, + { code: 'AR', name: 'Argentina', flag: '🇦🇷' }, + { code: 'AT', name: 'Austria', flag: '🇦🇹' }, + { code: 'BE', name: 'Belgium', flag: '🇧🇪' }, + { code: 'BG', name: 'Bulgaria', flag: '🇧🇬' }, + { code: 'CL', name: 'Chile', flag: '🇨🇱' }, + { code: 'CY', name: 'Cyprus', flag: '🇨🇾' }, + { code: 'CZ', name: 'Czech Republic', flag: '🇨🇿' }, + { code: 'CO', name: 'Colombia', flag: '🇨🇴' }, + { code: 'DK', name: 'Denmark', flag: '🇩🇰' }, + { code: 'EG', name: 'Egypt', flag: '🇪🇬' }, + { code: 'FI', name: 'Finland', flag: '🇫🇮' }, + { code: 'GR', name: 'Greece', flag: '🇬🇷' }, + { code: 'HR', name: 'Croatia', flag: '🇭🇷' }, + { code: 'HK', name: 'Hong Kong', flag: '🇭🇰' }, + { code: 'HU', name: 'Hungary', flag: '🇭🇺' }, + { code: 'ID', name: 'Indonesia', flag: '🇮🇩' }, + { code: 'IE', name: 'Ireland', flag: '🇮🇪' }, + { code: 'IS', name: 'Iceland', flag: '🇮🇸' }, + { code: 'IL', name: 'Israel', flag: '🇮🇱' }, + { code: 'KR', name: 'South Korea', flag: '🇰🇷' }, + { code: 'MY', name: 'Malaysia', flag: '🇲🇾' }, + { code: 'MT', name: 'Malta', flag: '🇲🇹' }, + { code: 'NL', name: 'Netherlands', flag: '🇳🇱' }, + { code: 'NZ', name: 'New Zealand', flag: '🇳🇿' }, + { code: 'NO', name: 'Norway', flag: '🇳🇴' }, + { code: 'PE', name: 'Peru', flag: '🇵🇪' }, + { code: 'PH', name: 'Philippines', flag: '🇵🇭' }, + { code: 'PL', name: 'Poland', flag: '🇵🇱' }, + { code: 'PT', name: 'Portugal', flag: '🇵🇹' }, + { code: 'RO', name: 'Romania', flag: '🇷🇴' }, + { code: 'SA', name: 'Saudi Arabia', flag: '🇸🇦' }, + { code: 'SG', name: 'Singapore', flag: '🇸🇬' }, + { code: 'SI', name: 'Slovenia', flag: '🇸🇮' }, + { code: 'SK', name: 'Slovakia', flag: '🇸🇰' }, + { code: 'SE', name: 'Sweden', flag: '🇸🇪' }, + { code: 'CH', name: 'Switzerland', flag: '🇨🇭' }, + { code: 'TH', name: 'Thailand', flag: '🇹🇭' }, + { code: 'TR', name: 'Turkey', flag: '🇹🇷' }, + { code: 'AE', name: 'United Arab Emirates', flag: '🇦🇪' }, + { code: 'VN', name: 'Vietnam', flag: '🇻🇳' } +] + +const CountryDisplay = ({ countryCode }) => { + const country = countries.find((c) => c.code === countryCode) + + if (!country) { + return null + } + + return ( + + {country.flag} + {country.name} + + ) +} + +CountryDisplay.propTypes = { + countryCode: PropTypes.string.isRequired +} + +export default CountryDisplay diff --git a/src/components/Dashboard/common/CountrySelect.jsx b/src/components/Dashboard/common/CountrySelect.jsx new file mode 100644 index 0000000..49598c7 --- /dev/null +++ b/src/components/Dashboard/common/CountrySelect.jsx @@ -0,0 +1,100 @@ +import React from 'react' +import { Select, Flex } from 'antd' +import PropTypes from 'prop-types' + +const countries = [ + { code: 'US', name: 'United States', flag: '🇺🇸' }, + { code: 'GB', name: 'United Kingdom', flag: '🇬🇧' }, + { code: 'CA', name: 'Canada', flag: '🇨🇦' }, + { code: 'AU', name: 'Australia', flag: '🇦🇺' }, + { code: 'DE', name: 'Germany', flag: '🇩🇪' }, + { code: 'FR', name: 'France', flag: '🇫🇷' }, + { code: 'IT', name: 'Italy', flag: '🇮🇹' }, + { code: 'ES', name: 'Spain', flag: '🇪🇸' }, + { code: 'JP', name: 'Japan', flag: '🇯🇵' }, + { code: 'CN', name: 'China', flag: '🇨🇳' }, + { code: 'BR', name: 'Brazil', flag: '🇧🇷' }, + { code: 'IN', name: 'India', flag: '🇮🇳' }, + { code: 'RU', name: 'Russia', flag: '🇷🇺' }, + { code: 'ZA', name: 'South Africa', flag: '🇿🇦' }, + { code: 'MX', name: 'Mexico', flag: '🇲🇽' }, + { code: 'AR', name: 'Argentina', flag: '🇦🇷' }, + { code: 'AT', name: 'Austria', flag: '🇦🇹' }, + { code: 'BE', name: 'Belgium', flag: '🇧🇪' }, + { code: 'BG', name: 'Bulgaria', flag: '🇧🇬' }, + { code: 'CL', name: 'Chile', flag: '🇨🇱' }, + { code: 'CY', name: 'Cyprus', flag: '🇨🇾' }, + { code: 'CZ', name: 'Czech Republic', flag: '🇨🇿' }, + { code: 'CO', name: 'Colombia', flag: '🇨🇴' }, + { code: 'DK', name: 'Denmark', flag: '🇩🇰' }, + { code: 'EG', name: 'Egypt', flag: '🇪🇬' }, + { code: 'FI', name: 'Finland', flag: '🇫🇮' }, + { code: 'GR', name: 'Greece', flag: '🇬🇷' }, + { code: 'HR', name: 'Croatia', flag: '🇭🇷' }, + { code: 'HK', name: 'Hong Kong', flag: '🇭🇰' }, + { code: 'HU', name: 'Hungary', flag: '🇭🇺' }, + { code: 'ID', name: 'Indonesia', flag: '🇮🇩' }, + { code: 'IE', name: 'Ireland', flag: '🇮🇪' }, + { code: 'IS', name: 'Iceland', flag: '🇮🇸' }, + { code: 'IL', name: 'Israel', flag: '🇮🇱' }, + { code: 'KR', name: 'South Korea', flag: '🇰🇷' }, + { code: 'MY', name: 'Malaysia', flag: '🇲🇾' }, + { code: 'MT', name: 'Malta', flag: '🇲🇹' }, + { code: 'NL', name: 'Netherlands', flag: '🇳🇱' }, + { code: 'NZ', name: 'New Zealand', flag: '🇳🇿' }, + { code: 'NO', name: 'Norway', flag: '🇳🇴' }, + { code: 'PE', name: 'Peru', flag: '🇵🇪' }, + { code: 'PH', name: 'Philippines', flag: '🇵🇭' }, + { code: 'PL', name: 'Poland', flag: '🇵🇱' }, + { code: 'PT', name: 'Portugal', flag: '🇵🇹' }, + { code: 'RO', name: 'Romania', flag: '🇷🇴' }, + { code: 'SA', name: 'Saudi Arabia', flag: '🇸🇦' }, + { code: 'SG', name: 'Singapore', flag: '🇸🇬' }, + { code: 'SI', name: 'Slovenia', flag: '🇸🇮' }, + { code: 'SK', name: 'Slovakia', flag: '🇸🇰' }, + { code: 'SE', name: 'Sweden', flag: '🇸🇪' }, + { code: 'CH', name: 'Switzerland', flag: '🇨🇭' }, + { code: 'TH', name: 'Thailand', flag: '🇹🇭' }, + { code: 'TR', name: 'Turkey', flag: '🇹🇷' }, + { code: 'AE', name: 'United Arab Emirates', flag: '🇦🇪' }, + { code: 'VN', name: 'Vietnam', flag: '🇻🇳' } +] + +const CountrySelect = ({ + value, + onChange, + style, + placeholder = 'Select country' +}) => { + return ( +
}} + /> + ) +} + +PartsTable.propTypes = { + data: PropTypes.array, + loading: PropTypes.bool, + showHeader: PropTypes.bool +} +export default PartsTable diff --git a/src/components/Dashboard/common/PrinterSelect.jsx b/src/components/Dashboard/common/PrinterSelect.jsx index 030a730..75790ce 100644 --- a/src/components/Dashboard/common/PrinterSelect.jsx +++ b/src/components/Dashboard/common/PrinterSelect.jsx @@ -6,14 +6,16 @@ import axios from 'axios' import PrinterState from './PrinterState' import { AuthContext } from '../../Auth/AuthContext' -const PrinterSelect = ({ onChange, disabled, checkable }) => { +const PrinterSelect = ({ onChange, disabled, checkable, value = [] }) => { + const [printersTreeData, setPrintersTreeData] = useState([]) const [printersData, setPrintersData] = useState([]) const [loading, setLoading] = useState(true) const [messageApi] = message.useMessage() + const [defaultValue, setDefaultValue] = useState(value) const { authenticated } = useContext(AuthContext) - const fetchPrintersData = async () => { + const fetchPrintersTreeData = async () => { if (!authenticated) { return } @@ -41,7 +43,9 @@ const PrinterSelect = ({ onChange, disabled, checkable }) => { } const generatePrinterItems = async () => { - const printerData = await fetchPrintersData() + const printerData = await fetchPrintersTreeData() + + setPrintersData(printerData) // Create a map to store tags and their printers const tagMap = new Map() @@ -65,36 +69,66 @@ const PrinterSelect = ({ onChange, disabled, checkable }) => { }) // Convert the map to tree data structure - const treeData = Array.from(tagMap.entries()).map(([tag, printers]) => ({ - title: tag === 'Untagged' ? tag : {tag}, - value: `tag-${tag}`, - key: `tag-${tag}`, - children: printers.map((printer) => ({ - title: ( - - ), - value: printer._id, - key: printer._id - })) - })) + Array.from(tagMap.entries()).map(([tag, printers]) => { + const newNode = { + title: tag === 'Untagged' ? tag : {tag}, + value: `tag-${tag}`, + key: `tag-${tag}`, + children: printers.map((printer) => ({ + title: ( + + ), + value: printer._id, + key: printer._id + })) + } + setPrintersTreeData((prev) => { + const filtered = prev.filter((node) => node.key !== newNode.key) + return [...filtered, newNode] + }) + }) + } - setPrintersData(treeData) + const handleOnChange = (value, selectedOptions) => { + if (checkable) { + // Multiple selection mode + const newValue = printersData.filter((printer) => + value.includes(printer._id) + ) + setDefaultValue(newValue) + onChange(newValue, selectedOptions) + } else { + // Single selection mode + const selectedPrinter = printersData.find( + (printer) => printer._id === value + ) + setDefaultValue(selectedPrinter ? [selectedPrinter] : []) + onChange(selectedPrinter, selectedOptions) + } } useEffect(() => { - if (printersData.length === 0) { - generatePrinterItems() + if (value) { + if (Array.isArray(value)) { + setDefaultValue(value) + } else { + setDefaultValue([value]) + } } + }, [value]) + + useEffect(() => { + generatePrinterItems() }, []) return ( { treeNodeFilterProp='title' placeholder='Select printer' style={{ width: '100%' }} + value={ + checkable ? defaultValue.map((item) => item._id) : defaultValue[0]?._id + } /> ) } @@ -109,7 +146,8 @@ const PrinterSelect = ({ onChange, disabled, checkable }) => { PrinterSelect.propTypes = { onChange: PropTypes.func.isRequired, disabled: PropTypes.bool.isRequired, - checkable: PropTypes.bool + checkable: PropTypes.bool, + value: PropTypes.oneOfType([PropTypes.object, PropTypes.array]) } export default PrinterSelect diff --git a/src/components/Dashboard/common/PrinterState.jsx b/src/components/Dashboard/common/PrinterState.jsx index e0dc1e4..d1ea988 100644 --- a/src/components/Dashboard/common/PrinterState.jsx +++ b/src/components/Dashboard/common/PrinterState.jsx @@ -106,7 +106,7 @@ const PrinterState = ({ return ( - {showPrinterName && {printer.printerName}} + {showPrinterName && {printer.name}} {showStatus && ( @@ -174,7 +174,7 @@ const PrinterState = ({ PrinterState.propTypes = { printer: PropTypes.shape({ id: PropTypes.string, - printerName: PropTypes.string, + name: PropTypes.string, state: PropTypes.shape({ type: PropTypes.string, progress: PropTypes.number diff --git a/src/components/Dashboard/common/PrinterTemperaturePanel.jsx b/src/components/Dashboard/common/PrinterTemperaturePanel.jsx index 16766d6..1029472 100644 --- a/src/components/Dashboard/common/PrinterTemperaturePanel.jsx +++ b/src/components/Dashboard/common/PrinterTemperaturePanel.jsx @@ -31,8 +31,12 @@ const CustomCollapse = styled(Collapse)` const PrinterTemperaturePanel = ({ printerId, - showControls = true, - showMoreInfo = true + showHotEndControls = true, + showHeatedBedControls = true, + showHotEnd = true, + showHeatedBed = true, + showMoreInfo = true, + shouldUnsubscribe = true }) => { const [temperatureData, setTemperatureData] = useState({ hotEnd: {}, @@ -106,7 +110,7 @@ const PrinterTemperaturePanel = ({ socket.on('notify_status_update', notifyStatusUpdate) } return () => { - if (socket && initialized) { + if (socket && initialized && shouldUnsubscribe == true) { console.log('Unsubscribing...') socket.off('notify_status_update', notifyStatusUpdate) socket.emit('printer.objects.unsubscribe', params) @@ -177,7 +181,7 @@ const PrinterTemperaturePanel = ({
{temperatureData ? ( - {temperatureData.hotEnd && ( + {temperatureData.hotEnd && showHotEnd && ( Hot End: {temperatureData.hotEnd.current}°C /{' '} @@ -192,7 +196,7 @@ const PrinterTemperaturePanel = ({ }} showInfo={false} /> - {showControls === true && ( + {showHotEndControls && (
record._id.$oid} + pagination={false} + /> + ) +} + +StockEventTable.propTypes = { + stockEvents: PropTypes.arrayOf( + PropTypes.shape({ + type: PropTypes.string.isRequired, + value: PropTypes.number.isRequired, + subJobId: PropTypes.shape({ + $oid: PropTypes.string.isRequired + }), + jobId: PropTypes.shape({ + $oid: PropTypes.string.isRequired + }), + timestamp: PropTypes.shape({ + $date: PropTypes.string.isRequired + }), + _id: PropTypes.shape({ + $oid: PropTypes.string.isRequired + }).isRequired + }) + ).isRequired +} + +export default StockEventTable diff --git a/src/components/Dashboard/common/SubJobsTree.jsx b/src/components/Dashboard/common/SubJobsTree.jsx index e588c15..a457c6d 100644 --- a/src/components/Dashboard/common/SubJobsTree.jsx +++ b/src/components/Dashboard/common/SubJobsTree.jsx @@ -6,6 +6,7 @@ import React, { useState, useEffect, useContext, useCallback } from 'react' import PrinterState from './PrinterState' import axios from 'axios' import { SocketContext } from '../context/SocketContext' + import SubJobState from './SubJobState' const SubJobsTree = ({ printJobData }) => { const [treeData, setTreeData] = useState([]) @@ -35,7 +36,7 @@ const SubJobsTree = ({ printJobData }) => { title: printerData.state ? ( ) : ( diff --git a/src/components/Dashboard/common/VendorSelect.jsx b/src/components/Dashboard/common/VendorSelect.jsx new file mode 100644 index 0000000..8183a45 --- /dev/null +++ b/src/components/Dashboard/common/VendorSelect.jsx @@ -0,0 +1,186 @@ +import { TreeSelect, Space } from 'antd' +import React, { useEffect, useState } from 'react' +import PropTypes from 'prop-types' +import axios from 'axios' +import CountryDisplay from './CountryDisplay' +import VendorIcon from '../../Icons/VendorIcon' + +const propertyOrder = ['country'] + +const VendorSelect = ({ onChange, filter = {}, useFilter = false, value }) => { + const [vendorsTreeData, setVendorsTreeData] = useState([]) + const [loading, setLoading] = useState(true) + const [defaultValue, setDefaultValue] = useState(null) + + const fetchVendorsData = async (property, filter) => { + setLoading(true) + try { + const response = await axios.get('http://localhost:8080/vendors', { + params: { + ...filter, + property + }, + headers: { + Accept: 'application/json' + }, + withCredentials: true + }) + setLoading(false) + return response.data + } catch (err) { + console.error(err) + } + } + + const getFilter = (node) => { + var filter = {} + var currentId = node.id + while (currentId != 0) { + const currentNode = vendorsTreeData.filter( + (treeData) => treeData['id'] === currentId + )[0] + filter[propertyOrder[currentNode.propertyId]] = + currentNode.value.split('-')[0] + currentId = currentNode.pId + } + return filter + } + + const generateVendorTreeNodes = async (node = null, filter = null) => { + if (!node) { + return + } + + if (filter === null) { + filter = getFilter(node) + } + + const vendorData = await fetchVendorsData(null, filter) + + let newNodeList = [] + + for (const vendor of vendorData) { + const random = Math.random().toString(36).substring(2, 6) + + const newNode = { + id: random, + pId: node.id, + value: vendor._id, + vendor: vendor, + key: vendor._id, + title: ( + + + {vendor.name} + + ), + isLeaf: true + } + + newNodeList.push(newNode) + } + + setVendorsTreeData(vendorsTreeData.concat(newNodeList)) + } + + const generateVendorCategoryTreeNodes = async (node = null) => { + var filter = {} + + var propertyId = 0 + + if (!node) { + node = {} + node.id = 0 + } else { + filter = getFilter(node) + propertyId = node.propertyId + 1 + } + + const propertyName = propertyOrder[propertyId] + + const propertyData = await fetchVendorsData(propertyName, filter) + + const newNodeList = [] + + for (const item of propertyData) { + const property = item[propertyName] + const random = Math.random().toString(36).substring(2, 6) + + const newNode = { + id: random, + pId: node.id, + value: property + '-' + random, + key: property + '-' + random, + propertyId: propertyId, + title: , + isLeaf: false, + selectable: false + } + + newNodeList.push(newNode) + } + + setVendorsTreeData(vendorsTreeData.concat(newNodeList)) + } + + const handleVendorsTreeLoad = async (node) => { + if (node) { + if (node.propertyId !== propertyOrder.length - 1) { + await generateVendorCategoryTreeNodes(node) + } else { + await generateVendorTreeNodes(node) // End of properties + } + } else { + await generateVendorCategoryTreeNodes(null) // First property + } + } + + const handleOnChange = (value, selectedOptions) => { + const vendorObject = vendorsTreeData.find( + (node) => node.value === value + )?.vendor + onChange(vendorObject, selectedOptions) + } + + useEffect(() => { + setVendorsTreeData([]) + }, []) + + useEffect(() => { + if (vendorsTreeData.length === 0) { + if (useFilter === true) { + generateVendorTreeNodes({ id: 0 }, filter) + } else { + handleVendorsTreeLoad(null) + } + } + }, [vendorsTreeData]) + + useEffect(() => { + if (value?.name) { + setDefaultValue(value.name) + } + }, [value]) + + return ( + + ) +} + +VendorSelect.propTypes = { + onChange: PropTypes.func, + filter: PropTypes.object, + useFilter: PropTypes.bool, + value: PropTypes.object +} + +export default VendorSelect diff --git a/src/components/Dashboard/context/HistoryContext.js b/src/components/Dashboard/context/HistoryContext.js new file mode 100644 index 0000000..b3e3c62 --- /dev/null +++ b/src/components/Dashboard/context/HistoryContext.js @@ -0,0 +1,203 @@ +import React, { createContext, useContext, useState, useEffect } from 'react' +import { useNavigate, useLocation } from 'react-router-dom' +import PropTypes from 'prop-types' + +const HistoryContext = createContext() + +export const HistoryProvider = ({ children }) => { + const [navigationHistory, setNavigationHistory] = useState([]) + const [currentPosition, setCurrentPosition] = useState(-1) + const navigate = useNavigate() + const location = useLocation() + + // Base route names + const baseRouteNames = { + '/production': 'Production', + '/management': 'Management', + '/dashboard/production/gcodefiles': 'GCode Files', + '/dashboard/management/filaments': 'Filaments', + '/dashboard/management/parts': 'Parts', + '/dashboard/management/products': 'Products', + '/dashboard/management/vendors': 'Vendors' + } + + const getEntityDetails = (pathname, search) => { + const searchParams = new URLSearchParams(search) + + // Handle different entity types + if (pathname.includes('/gcodefiles/info')) { + const gcodeFileId = searchParams.get('gcodeFileId') + return { + type: 'gcodefile', + id: gcodeFileId, + displayName: `GCode File Info${gcodeFileId ? ` (${gcodeFileId})` : ''}` + } + } + if (pathname.includes('/filaments/info')) { + const filamentId = searchParams.get('filamentId') + return { + type: 'filament', + id: filamentId, + displayName: `Filament Info${filamentId ? ` (${filamentId})` : ''}` + } + } + if (pathname.includes('/parts/info')) { + const partId = searchParams.get('partId') + return { + type: 'part', + id: partId, + displayName: `Part Info${partId ? ` (${partId})` : ''}` + } + } + if (pathname.includes('/products/info')) { + const productId = searchParams.get('productId') + return { + type: 'product', + id: productId, + displayName: `Product Info${productId ? ` (${productId})` : ''}` + } + } + if (pathname.includes('/vendors/info')) { + const vendorId = searchParams.get('vendorId') + return { + type: 'vendor', + id: vendorId, + displayName: `Vendor Info${vendorId ? ` (${vendorId})` : ''}` + } + } + + // For base routes, return the simple name + const baseName = baseRouteNames[pathname] + if (baseName) { + return { + type: 'base', + displayName: baseName + } + } + + return null + } + + // Track location changes + useEffect(() => { + const newPath = location.pathname + const details = getEntityDetails(location.pathname, location.search) + + if ( + newPath === '/dashboard/production/gcodefiles' || + newPath === '/dashboard/management/filaments' + ) { + setNavigationHistory([ + { + path: newPath + location.search, + details, + timestamp: new Date().toISOString() + } + ]) + setCurrentPosition(0) + } else if (details) { + setNavigationHistory((prev) => { + const newHistory = prev.slice(0, currentPosition + 1) + return [ + ...newHistory, + { + path: newPath + location.search, + details, + timestamp: new Date().toISOString() + } + ] + }) + setCurrentPosition((prev) => prev + 1) + } + }, [location]) + + const goBack = () => { + if (currentPosition > 0) { + setCurrentPosition((prev) => prev - 1) + navigate(-1) + } + } + + const goForward = () => { + if (currentPosition < navigationHistory.length - 1) { + setCurrentPosition((prev) => prev + 1) + navigate(1) + } + } + + const getBreadcrumbItems = () => { + // If there's no history, return empty array + if (navigationHistory.length === 0) return [] + + // Get current location + const currentItem = navigationHistory[currentPosition] + if (!currentItem) return [] + + const pathParts = currentItem.path.split('/') + const breadcrumbs = [] + + // Build up breadcrumbs including parent routes + if (pathParts[1]) { + // First level (e.g. /production or /management) + const firstLevelPath = '/' + pathParts[1] + breadcrumbs.push({ + path: firstLevelPath, + title: baseRouteNames[firstLevelPath] + }) + } + + if (pathParts[2]) { + // Second level (e.g. /dashboard/production/gcodefiles) + const secondLevelPath = + '/' + pathParts[1] + '/' + pathParts[2].split('?')[0] + breadcrumbs.push({ + path: currentItem.path, + title: + baseRouteNames[secondLevelPath] || currentItem.details.displayName + }) + } + + // Add the entity detail level if it exists (e.g. specific gcodefile, filament, etc) + if (currentItem.details.type !== 'base') { + breadcrumbs.push({ + path: currentItem.path, + title: currentItem.details.displayName + }) + } + + return breadcrumbs + } + + const canGoBack = currentPosition > 0 + const canGoForward = currentPosition < navigationHistory.length - 1 + + return ( + + {children} + + ) +} + +export const useHistory = () => { + const context = useContext(HistoryContext) + if (!context) { + throw new Error('useHistory must be used within a HistoryProvider') + } + return context +} + +HistoryProvider.propTypes = { + children: PropTypes.node.isRequired +} + +export default HistoryContext diff --git a/src/components/Icons/FilamentStockIcon.jsx b/src/components/Icons/FilamentStockIcon.jsx new file mode 100644 index 0000000..2b0ad66 --- /dev/null +++ b/src/components/Icons/FilamentStockIcon.jsx @@ -0,0 +1,9 @@ +import React from 'react' +import Icon from '@ant-design/icons' +import { ReactComponent as CustomIconSvg } from '../../assets/icons/filamentstockicon.svg' + +const FilamentStockIcon = (props) => ( + +) + +export default FilamentStockIcon diff --git a/src/components/Icons/MaterialIcon.jsx b/src/components/Icons/MaterialIcon.jsx new file mode 100644 index 0000000..324157d --- /dev/null +++ b/src/components/Icons/MaterialIcon.jsx @@ -0,0 +1,7 @@ +import React from 'react' +import Icon from '@ant-design/icons' +import { ReactComponent as CustomIconSvg } from '../../assets/icons/materialicon.svg' + +const MaterialIcon = (props) => + +export default MaterialIcon diff --git a/src/components/Icons/PartStockIcon.jsx b/src/components/Icons/PartStockIcon.jsx new file mode 100644 index 0000000..225d448 --- /dev/null +++ b/src/components/Icons/PartStockIcon.jsx @@ -0,0 +1,7 @@ +import React from 'react' +import Icon from '@ant-design/icons' +import { ReactComponent as CustomIconSvg } from '../../assets/icons/partstockicon.svg' + +const PartStockIcon = (props) => + +export default PartStockIcon diff --git a/src/components/Icons/ProductStockIcon.jsx b/src/components/Icons/ProductStockIcon.jsx new file mode 100644 index 0000000..c6ff187 --- /dev/null +++ b/src/components/Icons/ProductStockIcon.jsx @@ -0,0 +1,9 @@ +import React from 'react' +import Icon from '@ant-design/icons' +import { ReactComponent as CustomIconSvg } from '../../assets/icons/productstockicon.svg' + +const ProductStockIcon = (props) => ( + +) + +export default ProductStockIcon diff --git a/src/components/Icons/VendorIcon.jsx b/src/components/Icons/VendorIcon.jsx new file mode 100644 index 0000000..24a7a09 --- /dev/null +++ b/src/components/Icons/VendorIcon.jsx @@ -0,0 +1,7 @@ +import React from 'react' +import Icon from '@ant-design/icons' +import { ReactComponent as CustomIconSvg } from '../../assets/icons/vendoricon.svg' + +const VendorIcon = (props) => + +export default VendorIcon diff --git a/src/components/Logos/FarmControlLogo.jsx b/src/components/Logos/FarmControlLogo.jsx new file mode 100644 index 0000000..cb2f9f4 --- /dev/null +++ b/src/components/Logos/FarmControlLogo.jsx @@ -0,0 +1,7 @@ +import React from 'react' +import Icon from '@ant-design/icons' +import { ReactComponent as CustomIconSvg } from '../../assets/logos/farmcontrollogo.svg' + +const FarmControlLogo = (props) => + +export default FarmControlLogo diff --git a/src/components/PublicRoute.jsx b/src/components/PublicRoute.jsx index ef019ff..45013b6 100644 --- a/src/components/PublicRoute.jsx +++ b/src/components/PublicRoute.jsx @@ -13,7 +13,11 @@ const PublicRoute = ({ component: Component }) => { } // Redirect to login if not authenticated - return !authenticated ? : + return !authenticated ? ( + + ) : ( + + ) } PublicRoute.propTypes = {