From 4e11392f033c90113ca5aaa01c7c02a0e9c6b17f Mon Sep 17 00:00:00 2001 From: Tom Butcher Date: Sat, 31 May 2025 11:44:36 +0100 Subject: [PATCH] chore: prepare for webpack configuration --- package-lock.json | 738 +++++++++++++----- package.json | 5 +- src/assets/icons/gcodefileicon.afdesign | Bin 47424 -> 49750 bytes src/assets/icons/gcodefileicon.svg | 14 +- src/assets/icons/jobicon.afdesign | Bin 0 -> 30308 bytes src/assets/icons/jobicon.svg | 21 + src/assets/icons/plusminusicon.afdesign | Bin 0 -> 39049 bytes src/assets/icons/plusminusicon.svg | 7 + .../Dashboard/Inventory/FilamentStocks.jsx | 36 +- .../FilamentStocks/FilamentStockInfo.jsx | 260 +++--- .../FilamentStocks/UnloadFilamentStock.jsx | 19 +- .../Dashboard/Management/Filaments.jsx | 364 +++++++-- .../Management/Filaments/FilamentInfo.jsx | 570 +++++++------- src/components/Dashboard/Management/Parts.jsx | 17 +- .../Dashboard/Management/Parts/PartInfo.jsx | 479 +++++++----- .../Dashboard/Management/Products.jsx | 207 ++++- .../Management/Products/ProductInfo.jsx | 468 ++++++----- .../Dashboard/Management/Vendors.jsx | 323 ++++++-- .../Dashboard/Production/GCodeFiles.jsx | 19 +- .../Dashboard/Production/PrintJobs.jsx | 22 +- .../Production/PrintJobs/PrintJobInfo.jsx | 28 +- .../Production/Printers/ControlPrinter.jsx | 109 ++- .../Dashboard/common/DashboardBreadcrumb.jsx | 2 +- .../Dashboard/common/DashboardLayout.jsx | 16 +- .../Dashboard/common/FilamentStockState.jsx | 55 +- src/components/Dashboard/common/IdText.jsx | 4 + .../Dashboard/common/InventorySidebar.jsx | 17 +- src/components/Dashboard/common/JobState.jsx | 3 +- .../Dashboard/common/ManagementSidebar.jsx | 1 + .../Dashboard/common/PrinterJobsTree.jsx | 22 +- .../Dashboard/common/PrinterState.jsx | 7 +- .../Dashboard/common/ProductionSidebar.jsx | 1 + .../Dashboard/common/StockEventTable.jsx | 205 ++++- .../Dashboard/common/SubJobState.jsx | 1 + .../Dashboard/common/SubJobsTree.jsx | 3 +- .../Dashboard/hooks/useCollapseState.js | 31 + .../Dashboard/hooks/useColumnVisibility.js | 37 + src/components/Icons/PlusMinusIcon.jsx | 7 + 38 files changed, 2803 insertions(+), 1315 deletions(-) create mode 100644 src/assets/icons/jobicon.afdesign create mode 100644 src/assets/icons/jobicon.svg create mode 100644 src/assets/icons/plusminusicon.afdesign create mode 100644 src/assets/icons/plusminusicon.svg create mode 100644 src/components/Dashboard/hooks/useCollapseState.js create mode 100644 src/components/Dashboard/hooks/useColumnVisibility.js create mode 100644 src/components/Icons/PlusMinusIcon.jsx diff --git a/package-lock.json b/package-lock.json index b388afa..7113f5a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -41,7 +41,10 @@ "eslint-plugin-react-hooks": "^4.6.2", "prettier": "^3.3.3", "prettier-eslint": "^16.3.0", - "standard": "^17.1.0" + "standard": "^17.1.0", + "svgo-loader": "^4.0.0", + "webpack": "^5.99.9", + "webpack-cli": "^6.0.1" } }, "node_modules/@alloc/quick-lru": { @@ -2611,6 +2614,16 @@ "postcss-selector-parser": "^6.0.10" } }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.6.3.tgz", + "integrity": "sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.17.0" + } + }, "node_modules/@emotion/babel-plugin": { "version": "11.13.5", "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.13.5.tgz", @@ -5136,9 +5149,9 @@ } }, "node_modules/@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", + "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", "license": "MIT" }, "node_modules/@types/express": { @@ -5653,148 +5666,148 @@ "license": "ISC" }, "node_modules/@webassemblyjs/ast": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", - "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", "license": "MIT", "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" } }, "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", - "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", "license": "MIT" }, "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", - "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", "license": "MIT" }, "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", - "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", "license": "MIT" }, "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", - "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", "license": "MIT", "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/floating-point-hex-parser": "1.13.2", + "@webassemblyjs/helper-api-error": "1.13.2", "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", - "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", "license": "MIT" }, "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", - "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.12.1" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/wasm-gen": "1.14.1" } }, "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", - "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", "license": "MIT", "dependencies": { "@xtuc/ieee754": "^1.2.0" } }, "node_modules/@webassemblyjs/leb128": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", - "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", + "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", "license": "Apache-2.0", "dependencies": { "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/utf8": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", - "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", "license": "MIT" }, "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", - "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", + "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.12.1", - "@webassemblyjs/wasm-gen": "1.12.1", - "@webassemblyjs/wasm-opt": "1.12.1", - "@webassemblyjs/wasm-parser": "1.12.1", - "@webassemblyjs/wast-printer": "1.12.1" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/helper-wasm-section": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-opt": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1", + "@webassemblyjs/wast-printer": "1.14.1" } }, "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", - "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", + "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" } }, "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", - "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", + "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/wasm-gen": "1.12.1", - "@webassemblyjs/wasm-parser": "1.12.1" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1" } }, "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", - "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", + "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-api-error": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-api-error": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" } }, "node_modules/@webassemblyjs/wast-printer": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", - "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", + "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/ast": "1.14.1", "@xtuc/long": "4.2.2" } }, @@ -5804,6 +5817,53 @@ "integrity": "sha512-niT+Prh3Aff8Uf1MVBVUsaNjFj9rJAKDXuoHIKiQbB+6IUP/3J3JIhBNyZ7lDhytvXxw6ppgnwKZdDJ08UMj4Q==", "license": "glslang/LICENSE.txt" }, + "node_modules/@webpack-cli/configtest": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-3.0.1.tgz", + "integrity": "sha512-u8d0pJ5YFgneF/GuvEiDA61Tf1VDomHHYMjv/wc9XzYj7nopltpG96nXN5dJRstxZhcNpV1g+nT6CydO7pHbjA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12.0" + }, + "peerDependencies": { + "webpack": "^5.82.0", + "webpack-cli": "6.x.x" + } + }, + "node_modules/@webpack-cli/info": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-3.0.1.tgz", + "integrity": "sha512-coEmDzc2u/ffMvuW9aCjoRzNSPDl/XLuhPdlFRpT9tZHmJ/039az33CE7uH+8s0uL1j5ZNtfdv0HkfaKRBGJsQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12.0" + }, + "peerDependencies": { + "webpack": "^5.82.0", + "webpack-cli": "6.x.x" + } + }, + "node_modules/@webpack-cli/serve": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-3.0.1.tgz", + "integrity": "sha512-sbgw03xQaCLiT6gcY/6u3qBDn01CWw/nbaXl3gTdTFuJJ75Gffv3E3DBpgvY2fkkrdS1fpjaXNOmJlnbtKauKg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12.0" + }, + "peerDependencies": { + "webpack": "^5.82.0", + "webpack-cli": "6.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true + } + } + }, "node_modules/@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", @@ -5837,9 +5897,9 @@ } }, "node_modules/acorn": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -5870,15 +5930,6 @@ "node": ">=0.4.0" } }, - "node_modules/acorn-import-attributes": { - "version": "1.9.5", - "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", - "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", - "license": "MIT", - "peerDependencies": { - "acorn": "^8" - } - }, "node_modules/acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", @@ -6964,9 +7015,9 @@ "license": "BSD-2-Clause" }, "node_modules/browserslist": { - "version": "4.23.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.2.tgz", - "integrity": "sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==", + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.0.tgz", + "integrity": "sha512-PJ8gYKeS5e/whHBh8xrwYK+dAvEj7JXtz6uTucnMRB8OiGTsKccFekoRrjajPBHV8oOY+2tI4uxeceSimKwMFA==", "funding": [ { "type": "opencollective", @@ -6983,10 +7034,10 @@ ], "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001640", - "electron-to-chromium": "^1.4.820", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.1.0" + "caniuse-lite": "^1.0.30001718", + "electron-to-chromium": "^1.5.160", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.3" }, "bin": { "browserslist": "cli.js" @@ -7146,9 +7197,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001643", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001643.tgz", - "integrity": "sha512-ERgWGNleEilSrHM6iUz/zJNSQTP8Mr21wDWpdgvRwcTXGAq6jMtOUPP4dqFPTdKqZ2wKTdtB+uucZ3MRpAUSmg==", + "version": "1.0.30001720", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001720.tgz", + "integrity": "sha512-Ec/2yV2nNPwb4DnTANEV99ZWwm3ZWfdlfkQbWSDDt+PsXEVYwlhPH8tdMaPunYTKKmz7AnHi2oNEi1GcmKCD8g==", "funding": [ { "type": "opencollective", @@ -7321,6 +7372,21 @@ "wrap-ansi": "^7.0.0" } }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", @@ -8518,9 +8584,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.0.tgz", - "integrity": "sha512-Vb3xHHYnLseK8vlMJQKJYXJ++t4u1/qJ3vykuVrVjvdiOEhYyT1AuP4x03G8EnPmYvYOhe9T+dADTmthjRQMkA==", + "version": "1.5.161", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.161.tgz", + "integrity": "sha512-hwtetwfKNZo/UlwHIVBlKZVdy7o8bIZxxKs0Mv/ROPiQQQmDgdm5a+KvKtBsxM8ZjFzTaCeLoodZ8jiBE3o9rA==", "license": "ISC" }, "node_modules/emittery": { @@ -8624,6 +8690,19 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, + "node_modules/envinfo": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.14.0.tgz", + "integrity": "sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==", + "dev": true, + "license": "MIT", + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -8833,9 +8912,9 @@ } }, "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "license": "MIT", "engines": { "node": ">=6" @@ -10005,6 +10084,16 @@ "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==", "license": "MIT" }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.9.1" + } + }, "node_modules/fastq": { "version": "1.17.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", @@ -10211,6 +10300,16 @@ "node": ">=8" } }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } + }, "node_modules/flat-cache": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", @@ -11432,6 +11531,16 @@ "node": ">= 0.4" } }, + "node_modules/interpret": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/ipaddr.js": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", @@ -11756,6 +11865,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-potential-custom-element-name": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", @@ -11950,6 +12072,16 @@ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "license": "ISC" }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/istanbul-lib-coverage": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", @@ -15132,9 +15264,9 @@ "license": "MIT" }, "node_modules/node-releases": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", - "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", "license": "MIT" }, "node_modules/normalize-path": { @@ -15652,9 +15784,9 @@ "license": "MIT" }, "node_modules/picocolors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "license": "ISC" }, "node_modules/picomatch": { @@ -18734,6 +18866,19 @@ "node": ">=8.10.0" } }, + "node_modules/rechoir": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve": "^1.20.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, "node_modules/recursive-readdir": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", @@ -19312,9 +19457,9 @@ } }, "node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.2.tgz", + "integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==", "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.9", @@ -19323,7 +19468,7 @@ "ajv-keywords": "^5.1.0" }, "engines": { - "node": ">= 12.13.0" + "node": ">= 10.13.0" }, "funding": { "type": "opencollective", @@ -19589,6 +19734,19 @@ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "license": "ISC" }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/shallowequal": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", @@ -20569,6 +20727,185 @@ "node": ">=4.0.0" } }, + "node_modules/svgo-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/svgo-loader/-/svgo-loader-4.0.0.tgz", + "integrity": "sha512-bdk2H73AHP8Vo9zgMuA8piEzi5pjFzllK4EwfebDF3hDjmHQpmmqXMoDd6abDtVFrlKTJuveepmnc2kuTdt/WA==", + "dev": true, + "license": "MIT", + "dependencies": { + "svgo": "^3.0.0" + } + }, + "node_modules/svgo-loader/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/svgo-loader/node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/svgo-loader/node_modules/css-tree": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/svgo-loader/node_modules/csso": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "css-tree": "~2.2.0" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/svgo-loader/node_modules/csso/node_modules/css-tree": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "dev": true, + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/svgo-loader/node_modules/csso/node_modules/mdn-data": { + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/svgo-loader/node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/svgo-loader/node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/svgo-loader/node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/svgo-loader/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/svgo-loader/node_modules/mdn-data": { + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/svgo-loader/node_modules/svgo": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz", + "integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^5.1.0", + "css-tree": "^2.3.1", + "css-what": "^6.1.0", + "csso": "^5.0.5", + "picocolors": "^1.0.0" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/svgo" + } + }, "node_modules/svgo/node_modules/css-select": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", @@ -20771,16 +21108,16 @@ } }, "node_modules/terser-webpack-plugin": { - "version": "5.3.10", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", - "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "version": "5.3.14", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz", + "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==", "license": "MIT", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.20", + "@jridgewell/trace-mapping": "^0.3.25", "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.26.0" + "schema-utils": "^4.3.0", + "serialize-javascript": "^6.0.2", + "terser": "^5.31.1" }, "engines": { "node": ">= 10.13.0" @@ -20804,24 +21141,6 @@ } } }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, "node_modules/terser/node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -21378,9 +21697,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", - "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", "funding": [ { "type": "opencollective", @@ -21397,8 +21716,8 @@ ], "license": "MIT", "dependencies": { - "escalade": "^3.1.2", - "picocolors": "^1.0.1" + "escalade": "^3.2.0", + "picocolors": "^1.1.1" }, "bin": { "update-browserslist-db": "cli.js" @@ -21624,21 +21943,21 @@ } }, "node_modules/webpack": { - "version": "5.93.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.93.0.tgz", - "integrity": "sha512-Y0m5oEY1LRuwly578VqluorkXbvXKh7U3rLoQCEO04M97ScRr44afGVkI0FQFsXzysk5OgFAxjZAb9rsGQVihA==", + "version": "5.99.9", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.99.9.tgz", + "integrity": "sha512-brOPwM3JnmOa+7kd3NsmOUOwbDAj8FT9xDsG3IW0MgbN9yZV7Oi/s/+MNQ/EcSMqw7qfoRyXPoeEWT8zLVdVGg==", "license": "MIT", "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^1.0.5", - "@webassemblyjs/ast": "^1.12.1", - "@webassemblyjs/wasm-edit": "^1.12.1", - "@webassemblyjs/wasm-parser": "^1.12.1", - "acorn": "^8.7.1", - "acorn-import-attributes": "^1.9.5", - "browserslist": "^4.21.10", + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.14.0", + "browserslist": "^4.24.0", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.0", + "enhanced-resolve": "^5.17.1", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", @@ -21648,9 +21967,9 @@ "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "schema-utils": "^3.2.0", + "schema-utils": "^4.3.2", "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.10", + "terser-webpack-plugin": "^5.3.11", "watchpack": "^2.4.1", "webpack-sources": "^3.2.3" }, @@ -21670,6 +21989,59 @@ } } }, + "node_modules/webpack-cli": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-6.0.1.tgz", + "integrity": "sha512-MfwFQ6SfwinsUVi0rNJm7rHZ31GyTcpVE5pgVA3hwFRb7COD4TzjUUwhGWKfO50+xdc2MQPuEBBJoqIMGt3JDw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@discoveryjs/json-ext": "^0.6.1", + "@webpack-cli/configtest": "^3.0.1", + "@webpack-cli/info": "^3.0.1", + "@webpack-cli/serve": "^3.0.1", + "colorette": "^2.0.14", + "commander": "^12.1.0", + "cross-spawn": "^7.0.3", + "envinfo": "^7.14.0", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^3.1.1", + "rechoir": "^0.8.0", + "webpack-merge": "^6.0.1" + }, + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.82.0" + }, + "peerDependenciesMeta": { + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/webpack-cli/node_modules/commander": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, "node_modules/webpack-dev-middleware": { "version": "5.3.4", "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", @@ -21811,6 +22183,21 @@ "node": ">=10.13.0" } }, + "node_modules/webpack-merge": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-6.0.1.tgz", + "integrity": "sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, "node_modules/webpack-sources": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", @@ -21842,24 +22229,6 @@ "node": ">=4.0" } }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, "node_modules/websocket-driver": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", @@ -22024,6 +22393,13 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true, + "license": "MIT" + }, "node_modules/word-wrap": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", diff --git a/package.json b/package.json index 92f17a4..209a992 100644 --- a/package.json +++ b/package.json @@ -60,6 +60,9 @@ "eslint-plugin-react-hooks": "^4.6.2", "prettier": "^3.3.3", "prettier-eslint": "^16.3.0", - "standard": "^17.1.0" + "standard": "^17.1.0", + "svgo-loader": "^4.0.0", + "webpack": "^5.99.9", + "webpack-cli": "^6.0.1" } } diff --git a/src/assets/icons/gcodefileicon.afdesign b/src/assets/icons/gcodefileicon.afdesign index 6b9a90f68ef6aef83ddadd92aca4167be45a2923..4a7a762359acf42304a9334657b9e03731d9f457 100644 GIT binary patch literal 49750 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 ZIISwDt<6pZo&*7(e=M(Cl$&|P{~waIoO1vG literal 47424 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%0AdwB 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 - - - - - - + + + + + + + diff --git a/src/assets/icons/jobicon.afdesign b/src/assets/icons/jobicon.afdesign new file mode 100644 index 0000000000000000000000000000000000000000..56276040492448db4e99bc2ac39f4c749c922df5 GIT binary patch literal 30308 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 K`sTFDz5f9@ttZF; literal 0 HcmV?d00001 diff --git a/src/assets/icons/jobicon.svg b/src/assets/icons/jobicon.svg new file mode 100644 index 0000000..cc1ba74 --- /dev/null +++ b/src/assets/icons/jobicon.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/icons/plusminusicon.afdesign b/src/assets/icons/plusminusicon.afdesign new file mode 100644 index 0000000000000000000000000000000000000000..7a80279d9eb99ebc96c2d27dd76481cdc93db2a2 GIT binary patch literal 39049 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 literal 0 HcmV?d00001 diff --git a/src/assets/icons/plusminusicon.svg b/src/assets/icons/plusminusicon.svg new file mode 100644 index 0000000..1b90591 --- /dev/null +++ b/src/assets/icons/plusminusicon.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/components/Dashboard/Inventory/FilamentStocks.jsx b/src/components/Dashboard/Inventory/FilamentStocks.jsx index 9d0de56..d63729a 100644 --- a/src/components/Dashboard/Inventory/FilamentStocks.jsx +++ b/src/components/Dashboard/Inventory/FilamentStocks.jsx @@ -93,14 +93,14 @@ const FilamentStocks = () => { // 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) + socket.on('notify_filamentstock_update', (updateData) => { + console.log('Received filament stock update:', updateData) setFilamentStocksData((prevData) => { return prevData.map((stock) => { - if (stock._id === statusUpdate.id) { + if (stock._id === updateData._id) { return { ...stock, - ...statusUpdate + ...updateData } } return stock @@ -163,7 +163,12 @@ const FilamentStocks = () => { ) }, - + { + title: 'State', + key: 'state', + width: 350, + render: (record) => + }, { title: 'Current (g)', dataIndex: 'currentNetWeight', @@ -182,13 +187,6 @@ const FilamentStocks = () => { {startingNetWeight.toFixed(2) + 'g'} ) }, - { - title: 'State', - key: 'state', - width: 350, - render: (record) => - }, - { title: 'Created At', dataIndex: 'createdAt', @@ -203,6 +201,20 @@ const FilamentStocks = () => { } } }, + { + 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', diff --git a/src/components/Dashboard/Inventory/FilamentStocks/FilamentStockInfo.jsx b/src/components/Dashboard/Inventory/FilamentStocks/FilamentStockInfo.jsx index d94ca72..650b0ca 100644 --- a/src/components/Dashboard/Inventory/FilamentStocks/FilamentStockInfo.jsx +++ b/src/components/Dashboard/Inventory/FilamentStocks/FilamentStockInfo.jsx @@ -8,18 +8,23 @@ import { Button, message, Typography, - Flex, Form, - Badge + Badge, + Collapse } from 'antd' -import { LoadingOutlined, ReloadOutlined } from '@ant-design/icons' +import { + LoadingOutlined, + ReloadOutlined, + CaretRightOutlined +} 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' +import useCollapseState from '../../hooks/useCollapseState' -const { Title, Text } = Typography +const { Text, Title } = Typography const FilamentStockInfo = () => { const [filamentStockData, setFilamentStockData] = useState(null) @@ -33,6 +38,13 @@ const FilamentStockInfo = () => { ) const [form] = Form.useForm() const { socket } = useContext(SocketContext) + const [collapseState, updateCollapseState] = useCollapseState( + 'FilamentStockInfo', + { + info: true, + events: true + } + ) useEffect(() => { if (filamentStockId) { @@ -64,6 +76,11 @@ const FilamentStockInfo = () => { return prevData }) }) + + // Add WebSocket event listener for filament stock updates + socket.on('notify_filamentstock_update', (filamentStockUpdate) => { + console.log('GOT FILAMENT STOCK UPDATE', filamentStockUpdate) + }) } return () => { if (socket && initialized) { @@ -120,111 +137,142 @@ const FilamentStockInfo = () => { return (

{contextHolder} - updateCollapseState('info', keys.length > 0)} + expandIcon={({ isActive }) => ( + + )} > - - Filament Stock Information - - + + Filament Stock Information + + } + key='1' + > +
+ + {/* 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' + )} + + +
+
+ + + updateCollapseState('events', keys.length > 0)} + expandIcon={({ isActive }) => ( + + )} > - - {/* 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 - - - + + Filament Stock Events + + } + key='2' + > + + +
) } diff --git a/src/components/Dashboard/Inventory/FilamentStocks/UnloadFilamentStock.jsx b/src/components/Dashboard/Inventory/FilamentStocks/UnloadFilamentStock.jsx index 06911eb..db06633 100644 --- a/src/components/Dashboard/Inventory/FilamentStocks/UnloadFilamentStock.jsx +++ b/src/components/Dashboard/Inventory/FilamentStocks/UnloadFilamentStock.jsx @@ -91,7 +91,8 @@ const UnloadFilamentStock = ({ onOk, reset, printer = null }) => { setNextEnabled( Boolean(unloadFilamentStockFormValues.printer) && !unloadFilamentStockLoading && - currentTemperature > targetTemperature + currentTemperature + 1 > targetTemperature && + targetTemperature != 0 ) }) .catch(() => setNextEnabled(false)) @@ -144,7 +145,7 @@ const UnloadFilamentStock = ({ onOk, reset, printer = null }) => { <> {targetTemperature == 0 ? ( @@ -161,7 +162,7 @@ const UnloadFilamentStock = ({ onOk, reset, printer = null }) => { ) : null} {targetTemperature > 0 && - currentTemperature >= targetTemperature && + currentTemperature + 1 > targetTemperature && filamentSensorDetected ? ( { > Previous - {currentStep < steps.length - 1 && ( - - )} {currentStep === steps.length - 1 && ( - - + + + + + + + + + + {lazyLoading && } />} + }} - scroll={{ y: 'calc(100vh - 270px)' }} + onScroll={handleScroll} + onChange={handleTableChange} + showSorterTooltip={false} /> { const [isEditing, setIsEditing] = useState(false) const [form] = Form.useForm() const navigate = useNavigate() + const [collapseState, updateCollapseState] = useCollapseState( + 'FilamentInfo', + { + info: true, + details: true + } + ) useEffect(() => { if (filamentId) { @@ -198,297 +207,286 @@ const FilamentInfo = () => { return (
{contextHolder} + updateCollapseState('info', keys.length > 0)} + expandIcon={({ isActive }) => ( + + )} + > + + + Filament Information + + + - - - ) : ( -
) } diff --git a/src/components/Dashboard/Management/Parts.jsx b/src/components/Dashboard/Management/Parts.jsx index 7aff893..051f473 100644 --- a/src/components/Dashboard/Management/Parts.jsx +++ b/src/components/Dashboard/Management/Parts.jsx @@ -31,10 +31,10 @@ import { } from '@ant-design/icons' import { AuthContext } from '../../Auth/AuthContext' - import IdText from '../common/IdText' import NewProduct from './Products/NewProduct' import PartIcon from '../../Icons/PartIcon' +import useColumnVisibility from '../hooks/useColumnVisibility' const { Text } = Typography @@ -201,13 +201,9 @@ const Parts = () => { 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 [columnVisibility, updateColumnVisibility] = useColumnVisibility( + 'Parts', + columns ) const { authenticated } = useContext(AuthContext) @@ -391,10 +387,7 @@ const Parts = () => { checked={columnVisibility[col.key]} key={col.key} onChange={(e) => { - setColumnVisibility((prev) => ({ - ...prev, - [col.key]: e.target.checked - })) + updateColumnVisibility(col.key, e.target.checked) }} > {col.title} diff --git a/src/components/Dashboard/Management/Parts/PartInfo.jsx b/src/components/Dashboard/Management/Parts/PartInfo.jsx index 7221258..d92d521 100644 --- a/src/components/Dashboard/Management/Parts/PartInfo.jsx +++ b/src/components/Dashboard/Management/Parts/PartInfo.jsx @@ -15,20 +15,23 @@ import { Checkbox, InputNumber, Switch, - Tag + Tag, + Collapse } from 'antd' import { LoadingOutlined, EditOutlined, ReloadOutlined, CheckOutlined, - CloseOutlined + CloseOutlined, + CaretRightOutlined } from '@ant-design/icons' import IdText from '../../common/IdText.jsx' import moment from 'moment' +import { StlViewer } from 'react-stl-viewer' +import useCollapseState from '../../hooks/useCollapseState' const { Title } = Typography -import { StlViewer } from 'react-stl-viewer' const PartInfo = () => { const [partData, setPartData] = useState(null) @@ -39,6 +42,10 @@ const PartInfo = () => { const partId = new URLSearchParams(location.search).get('partId') const [marginOrPrice, setMarginOrPrice] = useState(false) const [useGlobalPricing, setUseGlobalPricing] = useState(true) + const [collapseState, updateCollapseState] = useCollapseState('PartInfo', { + info: true, + preview: true + }) const [partForm] = Form.useForm() const [partFormValues, setPartFormValues] = useState({}) @@ -231,222 +238,270 @@ const PartInfo = () => { return (
{contextHolder} - updateCollapseState('info', keys.length > 0)} + expandIcon={({ isActive }) => ( + + )} > - - Part Information - - - {isEditing ? ( - <> - - - - ) : ( - - )} - - - -
- setPartFormValues((prevValues) => ({ - ...prevValues, - ...changedValues - })) - } - initialValues={{ - name: partData.name || '' - }} - > - - - {partData.id ? ( - - ) : ( - '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 ? ( - - + + Part Information + + + {isEditing ? ( + <> +
) } diff --git a/src/components/Dashboard/Management/Products.jsx b/src/components/Dashboard/Management/Products.jsx index 49cea1c..0d3cb1b 100644 --- a/src/components/Dashboard/Management/Products.jsx +++ b/src/components/Dashboard/Management/Products.jsx @@ -14,7 +14,10 @@ import { Dropdown, message, Spin, - Tag + Tag, + Checkbox, + Popover, + Input } from 'antd' import { createStyles } from 'antd-style' import { @@ -22,7 +25,9 @@ import { PlusOutlined, DownloadOutlined, ReloadOutlined, - InfoCircleOutlined + InfoCircleOutlined, + CheckOutlined, + CloseOutlined } from '@ant-design/icons' import { AuthContext } from '../../Auth/AuthContext' @@ -30,6 +35,7 @@ import { AuthContext } from '../../Auth/AuthContext' import IdText from '../common/IdText' import NewProduct from './Products/NewProduct' import ProductIcon from '../../Icons/ProductIcon' +import useColumnVisibility from '../hooks/useColumnVisibility' const useStyle = createStyles(({ css, token }) => { const { antCls } = token @@ -58,6 +64,8 @@ const Products = () => { const [page, setPage] = useState(1) const [hasMore, setHasMore] = useState(true) const [lazyLoading, setLazyLoading] = useState(false) + const [filters, setFilters] = useState({}) + const [sorter, setSorter] = useState({}) const [newProductOpen, setNewProductOpen] = useState(false) @@ -71,16 +79,19 @@ const Products = () => { const response = await axios.get('http://localhost:8080/products', { params: { page: pageNum, - limit: 25 + limit: 25, + ...filters, + sort: sorter.field, + order: sorter.order }, headers: { Accept: 'application/json' }, - withCredentials: true // Important for including cookies + withCredentials: true }) const newData = response.data - setHasMore(newData.length === 25) // If we get less than 25 items, we've reached the end + setHasMore(newData.length === 25) if (append) { setProductsData((prev) => [...prev, ...newData]) @@ -105,7 +116,7 @@ const Products = () => { setLazyLoading(false) } }, - [messageApi] + [messageApi, filters, sorter] ) useEffect(() => { @@ -121,7 +132,6 @@ const Products = () => { 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 && @@ -173,7 +183,23 @@ const Products = () => { dataIndex: 'name', key: 'name', width: 200, - fixed: 'left' + fixed: 'left', + filterDropdown: ({ + setSelectedKeys, + selectedKeys, + confirm, + clearFilters + }) => + getFilterDropdown({ + setSelectedKeys, + selectedKeys, + confirm, + clearFilters, + propertyName: 'name' + }), + onFilter: (value, record) => + record.name.toLowerCase().includes(value.toLowerCase()), + sorter: true }, { title: 'ID', @@ -181,7 +207,23 @@ const Products = () => { key: 'id', fixed: 'left', 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()), + sorter: true }, { title: 'Tags', @@ -200,14 +242,48 @@ const Products = () => { ))} ) - } + }, + filterDropdown: ({ + setSelectedKeys, + selectedKeys, + confirm, + clearFilters + }) => + getFilterDropdown({ + setSelectedKeys, + selectedKeys, + confirm, + clearFilters, + propertyName: 'tags' + }), + onFilter: (value, record) => + record.tags?.some((tag) => + tag.toLowerCase().includes(value.toLowerCase()) + ), + sorter: true }, { title: 'Version', dataIndex: 'version', key: 'version', width: 120, - render: (text) => (text ? {text} : 'n/a') + render: (text) => (text ? {text} : 'n/a'), + filterDropdown: ({ + setSelectedKeys, + selectedKeys, + confirm, + clearFilters + }) => + getFilterDropdown({ + setSelectedKeys, + selectedKeys, + confirm, + clearFilters, + propertyName: 'version' + }), + onFilter: (value, record) => + record.version?.toLowerCase().includes(value.toLowerCase()), + sorter: true }, { title: 'Created At', @@ -221,7 +297,9 @@ const Products = () => { } else { return 'n/a' } - } + }, + sorter: true, + defaultSortOrder: 'descend' }, { title: 'Updated At', @@ -235,7 +313,9 @@ const Products = () => { } else { return 'n/a' } - } + }, + sorter: true, + defaultSortOrder: 'descend' }, { title: 'Actions', @@ -262,6 +342,11 @@ const Products = () => { } ] + const [columnVisibility, updateColumnVisibility] = useColumnVisibility( + 'Products', + columns + ) + const actionItems = { items: [ { @@ -285,29 +370,115 @@ const Products = () => { } } + const getFilterDropdown = ({ + setSelectedKeys, + selectedKeys, + confirm, + clearFilters, + propertyName + }) => { + return ( +
+ + + setSelectedKeys(e.target.value ? [e.target.value] : []) + } + onPressEnter={() => confirm()} + style={{ width: 200, display: 'block' }} + /> +
+ ) + } + + const getViewDropdownItems = () => { + const columnItems = columns + .filter((col) => col.key && col.title !== '') + .map((col) => ( + { + updateColumnVisibility(col.key, e.target.checked) + }} + > + {col.title} + + )) + + return ( + + + {columnItems} + + + ) + } + + 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 visibleColumns = columns.filter( + (col) => !col.key || columnVisibility[col.key] + ) + return ( <> {contextHolder} - + + + + - {lazyLoading == true ? ( - }> - ) : null} + {lazyLoading && } />}
}} onScroll={handleScroll} + onChange={handleTableChange} + showSorterTooltip={false} /> { const [isEditing, setIsEditing] = useState(false) const [fetchLoading, setFetchLoading] = useState(true) const [marginOrPrice, setMarginOrPrice] = useState(false) + const [collapseState, updateCollapseState] = useCollapseState('ProductInfo', { + info: true, + parts: true + }) const [productForm] = Form.useForm() const [productFormValues, setProductFormValues] = useState({}) @@ -183,233 +190,268 @@ const ProductInfo = () => { } return ( - +
{contextHolder} - updateCollapseState('info', keys.length > 0)} + expandIcon={({ isActive }) => ( + + )} > - - Product Information - - - {isEditing ? ( - <> - - - - ) : ( - - )} - - - -
- setProductFormValues((prevValues) => ({ - ...prevValues, - ...changedValues - })) - } - initialValues={{ - name: productData.name || '', - vendor: productData.vendor || { id: null, name: '' }, - version: productData.version || '', - tags: productData.tags || [] - }} - > - - - {productData.id ? ( - - ) : ( - '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' - )} - - - - - - - + + Product Information + + + {isEditing ? ( + <> +
) } diff --git a/src/components/Dashboard/Management/Vendors.jsx b/src/components/Dashboard/Management/Vendors.jsx index afe1c26..93975e0 100644 --- a/src/components/Dashboard/Management/Vendors.jsx +++ b/src/components/Dashboard/Management/Vendors.jsx @@ -1,4 +1,4 @@ -import React, { useEffect, useState, useContext, useCallback } from 'react' +import React, { useState, useContext, useCallback, useEffect } from 'react' import { useNavigate } from 'react-router-dom' import axios from 'axios' import moment from 'moment' @@ -10,7 +10,11 @@ import { Modal, Dropdown, message, - Typography + Typography, + Checkbox, + Popover, + Input, + Spin } from 'antd' import { createStyles } from 'antd-style' import { @@ -18,13 +22,16 @@ import { PlusOutlined, ReloadOutlined, InfoCircleOutlined, - ExportOutlined + ExportOutlined, + CheckOutlined, + CloseOutlined } 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' +import useColumnVisibility from '../hooks/useColumnVisibility' const { Link } = Typography @@ -53,38 +60,152 @@ const Vendors = () => { const [vendorsData, setVendorsData] = useState([]) const [newVendorOpen, setNewVendorOpen] = useState(false) const [loading, setLoading] = useState(true) + const [page, setPage] = useState(1) + const [hasMore, setHasMore] = useState(true) + const [lazyLoading, setLazyLoading] = useState(false) + const [filters, setFilters] = useState({}) + const [sorter, setSorter] = useState({}) + const { authenticated } = useContext(AuthContext) - const fetchVendorsData = useCallback(async () => { - try { - const response = await axios.get('http://localhost:8080/vendors', { - params: { - page: 1, - limit: 25 - }, - headers: { - Accept: 'application/json' - }, - withCredentials: true - }) - setVendorsData(response.data) - setLoading(false) - } catch (error) { - if (error.response) { - messageApi.error('Error fetching vendor data:', error.response.status) - } else { - messageApi.error( - 'An unexpected error occurred. Please try again later.' - ) - } - } - }, [messageApi]) + const fetchVendorsData = useCallback( + async (pageNum = 1, append = false) => { + try { + const response = await axios.get('http://localhost:8080/vendors', { + params: { + page: pageNum, + limit: 25, + ...filters, + sort: sorter.field, + order: sorter.order + }, + headers: { + Accept: 'application/json' + }, + withCredentials: true + }) - useEffect(() => { - if (authenticated) { - fetchVendorsData() - } - }, [authenticated, fetchVendorsData]) + const newData = response.data + setHasMore(newData.length === 25) + + if (append) { + setVendorsData((prev) => [...prev, ...newData]) + } else { + setVendorsData(newData) + } + + setLoading(false) + setLazyLoading(false) + } catch (error) { + if (error.response) { + messageApi.error('Error fetching vendor 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 ( + scrollHeight - scrollTop - clientHeight < 100 && + !lazyLoading && + hasMore + ) { + setLazyLoading(true) + const nextPage = page + 1 + setPage(nextPage) + fetchVendorsData(nextPage, true) + } + }, + [page, lazyLoading, hasMore, fetchVendorsData] + ) + + const getFilterDropdown = ({ + setSelectedKeys, + selectedKeys, + confirm, + clearFilters, + propertyName + }) => { + return ( +
+ + + setSelectedKeys(e.target.value ? [e.target.value] : []) + } + onPressEnter={() => confirm()} + style={{ width: 200, display: 'block' }} + /> +
+ ) + } + + const getViewDropdownItems = () => { + const columnItems = columns + .filter((col) => col.key && col.title !== '') + .map((col) => ( + { + updateColumnVisibility(col.key, e.target.checked) + }} + > + {col.title} + + )) + + return ( + + + {columnItems} + + + ) + } + + 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 getVendorActionItems = (id) => { return { @@ -117,14 +238,46 @@ const Vendors = () => { dataIndex: 'name', key: 'name', width: 200, - fixed: 'left' + fixed: 'left', + filterDropdown: ({ + setSelectedKeys, + selectedKeys, + confirm, + clearFilters + }) => + getFilterDropdown({ + setSelectedKeys, + selectedKeys, + confirm, + clearFilters, + propertyName: 'name' + }), + onFilter: (value, record) => + record.name.toLowerCase().includes(value.toLowerCase()), + sorter: true }, { 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()), + sorter: true }, { title: 'Website', @@ -139,21 +292,69 @@ const Vendors = () => { ) : ( 'n/a' - ) + ), + filterDropdown: ({ + setSelectedKeys, + selectedKeys, + confirm, + clearFilters + }) => + getFilterDropdown({ + setSelectedKeys, + selectedKeys, + confirm, + clearFilters, + propertyName: 'website' + }), + onFilter: (value, record) => + record.website?.toLowerCase().includes(value.toLowerCase()), + sorter: true }, { title: 'Country', dataIndex: 'country', key: 'country', width: 200, - render: (text) => (text ? : 'n/a') + render: (text) => (text ? : 'n/a'), + filterDropdown: ({ + setSelectedKeys, + selectedKeys, + confirm, + clearFilters + }) => + getFilterDropdown({ + setSelectedKeys, + selectedKeys, + confirm, + clearFilters, + propertyName: 'country' + }), + onFilter: (value, record) => + record.country?.toLowerCase().includes(value.toLowerCase()), + sorter: true }, { title: 'Contact', dataIndex: 'contact', key: 'contact', width: 200, - render: (text) => (text ? text : 'n/a') + render: (text) => (text ? text : 'n/a'), + filterDropdown: ({ + setSelectedKeys, + selectedKeys, + confirm, + clearFilters + }) => + getFilterDropdown({ + setSelectedKeys, + selectedKeys, + confirm, + clearFilters, + propertyName: 'contact' + }), + onFilter: (value, record) => + record.contact?.toLowerCase().includes(value.toLowerCase()), + sorter: true }, { title: 'Created At', @@ -167,7 +368,9 @@ const Vendors = () => { } else { return 'n/a' } - } + }, + sorter: true, + defaultSortOrder: 'descend' }, { title: 'Updated At', @@ -181,7 +384,9 @@ const Vendors = () => { } else { return 'n/a' } - } + }, + sorter: true, + defaultSortOrder: 'descend' }, { title: 'Actions', @@ -208,6 +413,15 @@ const Vendors = () => { } ] + const [columnVisibility, updateColumnVisibility] = useColumnVisibility( + 'Vendors', + columns + ) + + const visibleColumns = columns.filter( + (col) => !col.key || columnVisibility[col.key] + ) + const actionItems = { items: [ { @@ -231,23 +445,42 @@ const Vendors = () => { } } + useEffect(() => { + if (authenticated) { + fetchVendorsData() + } + }, [authenticated, fetchVendorsData]) + return ( <> {contextHolder} - - - - - + + + + + + + + + + {lazyLoading && } />} +
}} + onScroll={handleScroll} + onChange={handleTableChange} + showSorterTooltip={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 [columnVisibility, updateColumnVisibility] = useColumnVisibility( + 'GCodeFiles', + columns ) const { authenticated } = useContext(AuthContext) @@ -442,16 +438,13 @@ const GCodeFiles = () => { const getViewDropdownItems = () => { const columnItems = columns - .filter((col) => col.key && col.title !== '') // Filter out empty title columns and ensure key exists + .filter((col) => col.key && col.title !== '') .map((col) => ( { - setColumnVisibility((prev) => ({ - ...prev, - [col.key]: e.target.checked - })) + updateColumnVisibility(col.key, e.target.checked) }} > {col.title} diff --git a/src/components/Dashboard/Production/PrintJobs.jsx b/src/components/Dashboard/Production/PrintJobs.jsx index 4415a21..5ffa0f7 100644 --- a/src/components/Dashboard/Production/PrintJobs.jsx +++ b/src/components/Dashboard/Production/PrintJobs.jsx @@ -41,6 +41,7 @@ import NewPrintJob from './PrintJobs/NewPrintJob' import JobState from '../common/JobState' import SubJobCounter from '../common/SubJobCounter' import IdText from '../common/IdText' +import useColumnVisibility from '../hooks/useColumnVisibility' const { Text } = Typography @@ -287,18 +288,14 @@ const PrintJobs = () => { } ] - const [columnVisibility, setColumnVisibility] = useState( - columns.reduce((acc, col) => { - if (col.key) { - acc[col.key] = true - } - return acc - }, {}) - ) - const { authenticated } = useContext(AuthContext) const { socket } = useContext(SocketContext) + const [columnVisibility, updateColumnVisibility] = useColumnVisibility( + 'PrintJobs', + columns + ) + const handleDeployPrintJob = (printJobId) => { if (socket) { messageApi.info(`Print job ${printJobId} deployment initiated`) @@ -473,16 +470,13 @@ const PrintJobs = () => { const getViewDropdownItems = () => { const columnItems = columns - .filter((col) => col.key && col.title !== '') // Filter out empty title columns and ensure key exists + .filter((col) => col.key && col.title !== '') .map((col) => ( { - setColumnVisibility((prev) => ({ - ...prev, - [col.key]: e.target.checked - })) + updateColumnVisibility(col.key, e.target.checked) }} > {col.title} diff --git a/src/components/Dashboard/Production/PrintJobs/PrintJobInfo.jsx b/src/components/Dashboard/Production/PrintJobs/PrintJobInfo.jsx index eabfdcd..bc0b050 100644 --- a/src/components/Dashboard/Production/PrintJobs/PrintJobInfo.jsx +++ b/src/components/Dashboard/Production/PrintJobs/PrintJobInfo.jsx @@ -8,7 +8,8 @@ import { Button, message, Progress, - Typography + Typography, + Flex } from 'antd' import { LoadingOutlined, ReloadOutlined } from '@ant-design/icons' import moment from 'moment' @@ -37,7 +38,7 @@ const PrintJobInfo = () => { useEffect(() => { if (socket && printJobId) { socket.on('notify_job_update', (updateData) => { - if (updateData.id === printJobId) { + if (updateData._id === printJobId) { setPrintJobData((prevData) => { if (!prevData) return prevData return { @@ -103,7 +104,16 @@ const PrintJobInfo = () => { return (
- + + + Print Job Information + + + @@ -163,9 +173,15 @@ const PrintJobInfo = () => { )} - - Sub Job Information - + + + Sub Job Information + +
) diff --git a/src/components/Dashboard/Production/Printers/ControlPrinter.jsx b/src/components/Dashboard/Production/Printers/ControlPrinter.jsx index 4514338..d41da4c 100644 --- a/src/components/Dashboard/Production/Printers/ControlPrinter.jsx +++ b/src/components/Dashboard/Production/Printers/ControlPrinter.jsx @@ -13,7 +13,8 @@ import { Progress, Modal, Typography, - Badge + Badge, + Alert } from 'antd' import { LoadingOutlined, @@ -38,6 +39,7 @@ import FilamentStockIcon from '../../../Icons/FilamentStockIcon' import LoadFilamentStock from '../../Inventory/FilamentStocks/LoadFilamentStock' import UnloadFilamentStock from '../../Inventory/FilamentStocks/UnloadFilamentStock' +import FilamentStockState from '../../common/FilamentStockState' const { Text } = Typography @@ -57,6 +59,9 @@ const ControlPrinter = () => { useState(false) const [unloadFilamentStockModalOpen, setUnloadFilamentStockModalOpen] = useState(false) + const [klippyErrorModalOpen, setKlippyErrorModalOpen] = useState(false) + const [klippyErrorMessage, setKlippyErrorMessage] = useState('') + const [klippyStartupMessage, setKlippyStartupMessage] = useState('') const { socket } = useContext(SocketContext) const { authenticated } = useContext(AuthContext) @@ -98,7 +103,7 @@ const ControlPrinter = () => { socket.on('notify_printer_update', (statusUpdate) => { console.log('GOT STATUS', statusUpdate) setPrinterData((prevData) => { - if (statusUpdate?.id === printerId) { + if (statusUpdate?._id === printerId) { return { ...prevData, ...statusUpdate @@ -146,13 +151,35 @@ const ControlPrinter = () => { }, [authenticated, fetchPrinterDetails]) useEffect(() => { - if ( - printerData?.alerts?.some((alert) => alert.type === 'loadFilamentStock') - ) { + const loadFilamentStock = printerData?.alerts?.find( + (alert) => alert.type === 'loadFilamentStock' + ) + const klippyError = printerData?.alerts?.find( + (alert) => alert.type === 'klippyError' + ) + const klippyStartup = printerData?.alerts?.find( + (alert) => alert.type === 'klippyStartup' + ) + + if (loadFilamentStock) { setLoadFilamentStockModalOpen(true) } else { setLoadFilamentStockModalOpen(false) } + + if (klippyError) { + setKlippyErrorModalOpen(true) + setKlippyErrorMessage(klippyError.message) + } else { + setKlippyErrorModalOpen(false) + setKlippyErrorMessage('') + } + + if (klippyStartup) { + setKlippyStartupMessage(klippyStartup.message) + } else { + setKlippyStartupMessage('') + } }, [printerData?.alerts]) const actionItems = { @@ -344,6 +371,12 @@ const ControlPrinter = () => { {printerData ? ( + {printerData?.alerts?.some( + (alert) => alert.type === 'klippyError' + ) && } + {printerData?.alerts?.some( + (alert) => alert.type === 'klippyStartup' + ) && } {printerData.name} @@ -406,6 +439,14 @@ const ControlPrinter = () => { )} + {printerData?.currentFilamentStock && ( + + + + )} + {printerData.currentFilamentStock?.currentNetWeight ? ( @@ -455,6 +496,17 @@ const ControlPrinter = () => { )} + {printerData?.state.type === 'printing' && ( + + + + )} + {(() => { if ( @@ -493,27 +545,18 @@ const ControlPrinter = () => { } })()} - - {printerData?.state.type === 'printing' && ( - - - - )} - + - + @@ -560,6 +603,38 @@ const ControlPrinter = () => { reset={unloadFilamentStockModalOpen} />
+ + + Klipper Error + + } + onCancel={() => setKlippyErrorModalOpen(false)} + footer={[ + , + + ]} + > + {klippyErrorMessage} + ) } diff --git a/src/components/Dashboard/common/DashboardBreadcrumb.jsx b/src/components/Dashboard/common/DashboardBreadcrumb.jsx index 080bebb..792dc06 100644 --- a/src/components/Dashboard/common/DashboardBreadcrumb.jsx +++ b/src/components/Dashboard/common/DashboardBreadcrumb.jsx @@ -26,7 +26,7 @@ const breadcrumbNameMap = { '/dashboard/management/vendors/info': 'Info', '/dashboard/management/materials': 'Materials', '/dashboard/management/materials/info': 'Info', - '/dashboard/inventory/filamentstocks': 'Filaments', + '/dashboard/inventory/filamentstocks': 'Filament Stocks', '/dashboard/inventory/filamentstocks/info': 'Info', '/dashboard/inventory/partstocks': 'Parts', '/dashboard/inventory/partstocks/info': 'Info' diff --git a/src/components/Dashboard/common/DashboardLayout.jsx b/src/components/Dashboard/common/DashboardLayout.jsx index 8aa02b4..760ffbd 100644 --- a/src/components/Dashboard/common/DashboardLayout.jsx +++ b/src/components/Dashboard/common/DashboardLayout.jsx @@ -1,20 +1,17 @@ // DashboardLayout.js import PropTypes from 'prop-types' -import React, { useContext } from 'react' -import { Layout, Flex, Spin } from 'antd' -import { LoadingOutlined } from '@ant-design/icons' +import React from 'react' +import { Layout, Flex } from 'antd' import { useLocation } from 'react-router-dom' import DashboardNavigation from './DashboardNavigation' import ProductionSidebar from './ProductionSidebar' import InventorySidebar from './InventorySidebar' import ManagementSidebar from './ManagementSidebar' import DashboardBreadcrumb from './DashboardBreadcrumb' -import { SocketContext } from '../context/SocketContext' const { Content } = Layout const DashboardLayout = ({ children }) => { - const { connecting } = useContext(SocketContext) const location = useLocation() const isProduction = location.pathname.startsWith('/dashboard/production') const isInventory = location.pathname.startsWith('/dashboard/inventory') @@ -38,15 +35,6 @@ const DashboardLayout = ({ children }) => { - {connecting ? ( - } - size='middle' - style={{ color: '#808080' }} - /> - ) : ( - <> - )} {children} diff --git a/src/components/Dashboard/common/FilamentStockState.jsx b/src/components/Dashboard/common/FilamentStockState.jsx index ba553f2..573f454 100644 --- a/src/components/Dashboard/common/FilamentStockState.jsx +++ b/src/components/Dashboard/common/FilamentStockState.jsx @@ -1,14 +1,29 @@ import PropTypes from 'prop-types' import { Badge, Progress, Flex, Space, Tag, Typography } from 'antd' -import { green, red } from '@ant-design/colors' +import { green } from '@ant-design/colors' import React, { useState, useContext, useEffect } from 'react' import { SocketContext } from '../context/SocketContext' +const { Text } = Typography + +const getProgressColor = (percent) => { + if (percent <= 50) { + return green[5] + } else if (percent <= 80) { + // Interpolate between green and yellow + const ratio = (percent - 50) / 30 + return `rgb(${Math.round(255 * ratio)}, ${Math.round(255 * (1 - ratio))}, 0)` + } else { + // Interpolate between yellow and red + const ratio = (percent - 80) / 20 + return `rgb(255, ${Math.round(255 * (1 - ratio))}, 0)` + } +} + const FilamentStockState = ({ filamentStock, showProgress = true, - showStatus = true, - showFilamentStockName = true + showStatus = true }) => { const { socket } = useContext(SocketContext) const [badgeStatus, setBadgeStatus] = useState('unknown') @@ -20,7 +35,6 @@ const FilamentStockState = ({ } ) const [initialized, setInitialized] = useState(false) - const { Text } = Typography useEffect(() => { if (socket && !initialized && filamentStock?._id) { @@ -64,7 +78,6 @@ const FilamentStockState = ({ return ( - {showFilamentStockName && {filamentStock.name}} {showStatus && ( @@ -76,20 +89,21 @@ const FilamentStockState = ({ )} {showProgress && currentState.type === 'partiallyconsumed' ? ( - + +
+ +
+ + {Math.round(currentState.percent * 100) + '%'} + +
) : null}
) @@ -111,8 +125,7 @@ FilamentStockState.propTypes = { }) }), showProgress: PropTypes.bool, - showStatus: PropTypes.bool, - showFilamentStockName: PropTypes.bool + showStatus: PropTypes.bool } export default FilamentStockState diff --git a/src/components/Dashboard/common/IdText.jsx b/src/components/Dashboard/common/IdText.jsx index 58646f9..a8a32e5 100644 --- a/src/components/Dashboard/common/IdText.jsx +++ b/src/components/Dashboard/common/IdText.jsx @@ -61,6 +61,10 @@ const IdText = ({ prefix = 'FLS' hyperlink = `/dashboard/inventory/filamentstocks/info?filamentStockId=${id}` break + case 'stockaudit': + prefix = 'SAU' + hyperlink = `/dashboard/inventory/stockaudits/info?stockAuditId=${id}` + break case 'partstock': prefix = 'PTS' hyperlink = `/dashboard/management/partstocks/info?partStockId=${id}` diff --git a/src/components/Dashboard/common/InventorySidebar.jsx b/src/components/Dashboard/common/InventorySidebar.jsx index 934a186..ae14cd5 100644 --- a/src/components/Dashboard/common/InventorySidebar.jsx +++ b/src/components/Dashboard/common/InventorySidebar.jsx @@ -40,19 +40,30 @@ const InventorySidebar = () => { label: Overview, icon: }, + { type: 'divider' }, { key: 'filamentstocks', - label: Filaments, + label: ( + Filament Stocks + ), icon: }, { key: 'partstocks', - label: Parts, + label: Part Stocks, icon: }, { key: 'productstocks', - label: Products, + label: ( + Product Stocks + ), + icon: + }, + { type: 'divider' }, + { + key: 'stockaudits', + label: Stock Audits, icon: } ] diff --git a/src/components/Dashboard/common/JobState.jsx b/src/components/Dashboard/common/JobState.jsx index 779edff..98fffc9 100644 --- a/src/components/Dashboard/common/JobState.jsx +++ b/src/components/Dashboard/common/JobState.jsx @@ -71,7 +71,7 @@ const JobState = ({ {showId && ( <> - {'Sub Job '} + {'Job '} )} @@ -91,6 +91,7 @@ const JobState = ({ currentState.type === 'processing') ? ( ) : null} diff --git a/src/components/Dashboard/common/ManagementSidebar.jsx b/src/components/Dashboard/common/ManagementSidebar.jsx index 55c9604..e894bb5 100644 --- a/src/components/Dashboard/common/ManagementSidebar.jsx +++ b/src/components/Dashboard/common/ManagementSidebar.jsx @@ -64,6 +64,7 @@ const ManagementSidebar = () => { label: Materials, icon: }, + { type: 'divider' }, { key: 'settings', label: Settings, diff --git a/src/components/Dashboard/common/PrinterJobsTree.jsx b/src/components/Dashboard/common/PrinterJobsTree.jsx index 5c02f28..79d3c16 100644 --- a/src/components/Dashboard/common/PrinterJobsTree.jsx +++ b/src/components/Dashboard/common/PrinterJobsTree.jsx @@ -1,5 +1,5 @@ import PropTypes from 'prop-types' -import { Card, Tree, Spin, Space, Button, message, Typography } from 'antd' +import { Card, Tree, Spin, Space, Button, message } from 'antd' import { LoadingOutlined, ReloadOutlined } from '@ant-design/icons' import React, { useState, useEffect, useContext } from 'react' import SubJobState from './SubJobState' @@ -15,8 +15,6 @@ const PrinterJobsTree = ({ subJobs: initialSubJobs }) => { const [expandedKeys, setExpandedKeys] = useState([]) const [treeData, setTreeData] = useState([]) - const { Text } = Typography - const buildTreeData = (subJobsData) => { if (!subJobsData?.length) { setTreeData([]) @@ -42,20 +40,7 @@ const PrinterJobsTree = ({ subJobs: initialSubJobs }) => { ({ printJob, subJobs }) => { setExpandedKeys((prev) => [...prev, `printjob-${printJob._id}`]) return { - title: ( - - Print Job - - {printJob._id.substring(printJob._id.length - 6)} - - printJob.quantity - - } - /> - ), + title: , key: `printjob-${printJob._id}`, children: subJobs.map((subJob) => ({ title: ( @@ -112,7 +97,7 @@ const PrinterJobsTree = ({ subJobs: initialSubJobs }) => { if (updateData.subJobId) { setSubJobs((prevSubJobs) => prevSubJobs.map((subJob) => { - if (subJob._id === updateData.id) { + if (subJob._id === updateData._id) { return { ...subJob, state: updateData.state, @@ -161,6 +146,7 @@ const PrinterJobsTree = ({ subJobs: initialSubJobs }) => { treeData={treeData} expandedKeys={expandedKeys} onExpand={setExpandedKeys} + showLine={true} /> ) diff --git a/src/components/Dashboard/common/PrinterState.jsx b/src/components/Dashboard/common/PrinterState.jsx index d1ea988..3063761 100644 --- a/src/components/Dashboard/common/PrinterState.jsx +++ b/src/components/Dashboard/common/PrinterState.jsx @@ -32,7 +32,7 @@ const PrinterState = ({ if (socket && !initialized && printer?.id) { setInitialized(true) socket.on('notify_printer_update', (statusUpdate) => { - if (statusUpdate?.id === printer.id && statusUpdate?.state) { + if (statusUpdate?._id === printer.id && statusUpdate?.state) { setCurrentState(statusUpdate.state) } }) @@ -98,6 +98,10 @@ const PrinterState = ({ setBadgeStatus('error') setBadgeText('Error') break + case 'startup': + setBadgeStatus('warning') + setBadgeText('Startup') + break default: setBadgeStatus('default') setBadgeText(currentState.type) @@ -122,6 +126,7 @@ const PrinterState = ({ currentState.type === 'deploying') ? ( ) : null} diff --git a/src/components/Dashboard/common/ProductionSidebar.jsx b/src/components/Dashboard/common/ProductionSidebar.jsx index 477e937..5509a87 100644 --- a/src/components/Dashboard/common/ProductionSidebar.jsx +++ b/src/components/Dashboard/common/ProductionSidebar.jsx @@ -40,6 +40,7 @@ const ProductionSidebar = () => { label: Overview, icon: }, + { type: 'divider' }, { key: 'printers', label: Printers, diff --git a/src/components/Dashboard/common/StockEventTable.jsx b/src/components/Dashboard/common/StockEventTable.jsx index a671d1d..4fed950 100644 --- a/src/components/Dashboard/common/StockEventTable.jsx +++ b/src/components/Dashboard/common/StockEventTable.jsx @@ -1,52 +1,197 @@ -import React from 'react' -import { Table } from 'antd' +import React, { useEffect, useContext, useState } from 'react' +import { Table, Typography } from 'antd' import PropTypes from 'prop-types' import moment from 'moment' import IdText from './IdText' +import { AuditOutlined, PlayCircleOutlined } from '@ant-design/icons' +import { SocketContext } from '../context/SocketContext' + +import PlusMinusIcon from '../../Icons/PlusMinusIcon' + +const { Text } = Typography const StockEventTable = ({ stockEvents }) => { + const { socket } = useContext(SocketContext) + const [initialized, setInitialized] = useState(false) + const [stockEventsData, setStockEventsData] = useState(stockEvents) + + useEffect(() => { + // Add WebSocket event listener for real-time updates + if (socket && !initialized) { + setInitialized(true) + socket.on('notify_stockevent_update', (updateData) => { + console.log('Received stock event update:', updateData) + setStockEventsData((prevData) => { + return prevData.map((stockEvent) => { + if (stockEvent?._id) { + console.log('UD', updateData) + console.log('SE', stockEvent) + if (stockEvent._id === updateData._id) { + return { + ...stockEvent, + ...updateData + } + } + } + }) + }) + }) + } + + return () => { + if (socket && initialized) { + console.log('Deregistering stock event update listener') + socket.off('notify_stockevent_update') + } + } + }, [socket, initialized]) + + const getTypeFilterProps = () => { + // Get unique types from the data + const uniqueTypes = [ + ...new Set( + stockEventsData.map((record) => { + const type = record.type.toLowerCase() + if (type === 'subjob') return 'Sub Job' + if (type === 'audit') return 'Audit Adjustment' + return type.charAt(0).toUpperCase() + type.slice(1) + }) + ) + ] + + return { + filters: uniqueTypes.map((type) => ({ text: type, value: type })), + onFilter: (value, record) => { + const recordType = record.type.toLowerCase() + if (recordType === 'subjob') { + return value === 'Sub Job' + } else if (recordType === 'audit') { + return value === 'Audit Adjustment' + } + return ( + value === recordType.charAt(0).toUpperCase() + recordType.slice(1) + ) + } + } + } + const columns = [ + { + title: '', + key: 'icon', + width: 50, + render: (record) => { + switch (record.type.toLowerCase()) { + case 'subjob': + return + case 'audit': + return + default: + return null + } + } + }, { title: 'Type', dataIndex: 'type', key: 'type', - render: (type) => type.charAt(0).toUpperCase() + type.slice(1) + width: 200, + sorter: (a, b) => a.type.localeCompare(b.type), + ...getTypeFilterProps(), + render: (type) => { + switch (type.toLowerCase()) { + case 'subjob': + return 'Sub Job' + case 'audit': + return 'Audit Adjustment' + default: + return type.charAt(0).toUpperCase() + type.slice(1) + } + } }, { - title: 'Value', + title: , dataIndex: 'value', key: 'value', - render: (value) => value.toFixed(2) + 'g' + width: 100, + sorter: (a, b) => a.value - b.value, + render: (value) => { + const formattedValue = value.toFixed(2) + 'g' + return ( + + {value > 0 ? '+' + formattedValue : formattedValue} + + ) + } }, { - title: 'Sub Job ID', - render: (record) => - record.subJob ? ( - - ) : ( - 'n/a' - ) + title: 'ID', + width: 100, + render: (record) => { + if (record.subJob) { + return ( + + ) + } + if (record.stockAudit) { + return ( + + ) + } + return 'n/a' + } }, { title: 'Job ID', - render: (record) => - record.subJob ? ( - - ) : ( - 'n/a' - ) + width: 100, + render: (record) => { + if (record.subJob) { + return ( + + ) + } + return 'n/a' + } }, { - title: 'Timestamp', - dataIndex: ['timestamp', '$date'], - key: 'timestamp', - render: (timestamp) => { - if (timestamp) { - const formattedDate = moment(timestamp).format('YYYY-MM-DD HH:mm:ss') + title: 'Created At', + dataIndex: 'createdAt', + key: 'createdAt', + width: 180, + defaultSortOrder: 'descend', + sorter: (a, b) => moment(a.createdAt).unix() - moment(b.createdAt).unix(), + render: (createdAt) => { + if (createdAt) { + const formattedDate = moment(createdAt).format('YYYY-MM-DD HH:mm:ss') + return {formattedDate} + } else { + return 'n/a' + } + } + }, + { + title: 'Updated At', + dataIndex: 'updatedAt', + key: 'updatedAt', + width: 180, + sorter: (a, b) => moment(a.updatedAt).unix() - moment(b.updatedAt).unix(), + render: (updatedAt) => { + if (updatedAt) { + const formattedDate = moment(updatedAt).format('YYYY-MM-DD HH:mm:ss') return {formattedDate} } else { return 'n/a' @@ -57,9 +202,9 @@ const StockEventTable = ({ stockEvents }) => { return (
record._id.$oid} + rowKey={(record) => record._id} pagination={false} /> ) diff --git a/src/components/Dashboard/common/SubJobState.jsx b/src/components/Dashboard/common/SubJobState.jsx index d636892..962fb23 100644 --- a/src/components/Dashboard/common/SubJobState.jsx +++ b/src/components/Dashboard/common/SubJobState.jsx @@ -110,6 +110,7 @@ const SubJobState = ({ currentState.type === 'processing') ? ( ) : null} diff --git a/src/components/Dashboard/common/SubJobsTree.jsx b/src/components/Dashboard/common/SubJobsTree.jsx index a457c6d..ebfc20c 100644 --- a/src/components/Dashboard/common/SubJobsTree.jsx +++ b/src/components/Dashboard/common/SubJobsTree.jsx @@ -140,7 +140,7 @@ const SubJobsTree = ({ printJobData }) => { ...prevData, // eslint-disable-next-line camelcase subJobs: prevData.subJobs.map((subJob) => { - if (subJob._id === updateData.id) { + if (subJob._id === updateData._id) { return { ...subJob, state: updateData.state, @@ -193,6 +193,7 @@ const SubJobsTree = ({ printJobData }) => { treeData={treeData} expandedKeys={expandedKeys} onExpand={setExpandedKeys} + showLine={true} /> ) diff --git a/src/components/Dashboard/hooks/useCollapseState.js b/src/components/Dashboard/hooks/useCollapseState.js new file mode 100644 index 0000000..2c0e06e --- /dev/null +++ b/src/components/Dashboard/hooks/useCollapseState.js @@ -0,0 +1,31 @@ +import { useState, useEffect } from 'react' + +const useCollapseState = (componentName, defaultState = {}) => { + const getInitialState = () => { + const stored = sessionStorage.getItem(`${componentName}_collapseState`) + if (stored) { + return JSON.parse(stored) + } + return defaultState + } + + const [collapseState, setCollapseState] = useState(getInitialState) + + useEffect(() => { + sessionStorage.setItem( + `${componentName}_collapseState`, + JSON.stringify(collapseState) + ) + }, [collapseState, componentName]) + + const updateCollapseState = (key, value) => { + setCollapseState((prev) => ({ + ...prev, + [key]: value + })) + } + + return [collapseState, updateCollapseState] +} + +export default useCollapseState diff --git a/src/components/Dashboard/hooks/useColumnVisibility.js b/src/components/Dashboard/hooks/useColumnVisibility.js new file mode 100644 index 0000000..5051889 --- /dev/null +++ b/src/components/Dashboard/hooks/useColumnVisibility.js @@ -0,0 +1,37 @@ +import { useState, useEffect } from 'react' + +const useColumnVisibility = (componentName, columns) => { + const getInitialVisibility = () => { + const stored = sessionStorage.getItem(`${componentName}_columnVisibility`) + if (stored) { + return JSON.parse(stored) + } + // Default visibility - all columns visible + return columns.reduce((acc, col) => { + if (col.key) { + acc[col.key] = true + } + return acc + }, {}) + } + + const [columnVisibility, setColumnVisibility] = useState(getInitialVisibility) + + useEffect(() => { + sessionStorage.setItem( + `${componentName}_columnVisibility`, + JSON.stringify(columnVisibility) + ) + }, [columnVisibility, componentName]) + + const updateColumnVisibility = (key, value) => { + setColumnVisibility((prev) => ({ + ...prev, + [key]: value + })) + } + + return [columnVisibility, updateColumnVisibility] +} + +export default useColumnVisibility diff --git a/src/components/Icons/PlusMinusIcon.jsx b/src/components/Icons/PlusMinusIcon.jsx new file mode 100644 index 0000000..123265f --- /dev/null +++ b/src/components/Icons/PlusMinusIcon.jsx @@ -0,0 +1,7 @@ +import React from 'react' +import Icon from '@ant-design/icons' +import { ReactComponent as CustomIconSvg } from '../../assets/icons/plusminusicon.svg' + +const PlusMinusIcon = (props) => + +export default PlusMinusIcon