@inventreedb/ui 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.babelrc +8 -0
- package/.linguirc +55 -0
- package/README.md +17 -0
- package/index.html +15 -0
- package/lib/enums/ApiEndpoints.tsx +233 -0
- package/lib/enums/ModelType.tsx +38 -0
- package/lib/enums/Roles.tsx +25 -0
- package/lib/functions/Api.tsx +42 -0
- package/lib/functions/Plugins.tsx +27 -0
- package/lib/index.ts +11 -0
- package/lib/types/Auth.tsx +51 -0
- package/lib/types/Core.tsx +13 -0
- package/lib/types/Filters.tsx +69 -0
- package/lib/types/Forms.tsx +185 -0
- package/lib/types/Modals.tsx +17 -0
- package/lib/types/Plugins.tsx +68 -0
- package/lib/types/Server.tsx +8 -0
- package/lib/types/Settings.tsx +55 -0
- package/lib/types/Tables.tsx +69 -0
- package/lib/types/User.tsx +62 -0
- package/netlify.toml +22 -0
- package/package.json +125 -0
- package/playwright/global-setup.ts +45 -0
- package/playwright.config.ts +99 -0
- package/public/inventree.svg +291 -0
- package/src/App.tsx +35 -0
- package/src/assets/inventree.svg +1 -0
- package/src/components/Boundary.tsx +43 -0
- package/src/components/SplashScreen.tsx +35 -0
- package/src/components/barcodes/BarcodeCameraInput.tsx +207 -0
- package/src/components/barcodes/BarcodeInput.tsx +127 -0
- package/src/components/barcodes/BarcodeKeyboardInput.tsx +50 -0
- package/src/components/barcodes/BarcodeScanDialog.tsx +101 -0
- package/src/components/barcodes/BarcodeScanItem.tsx +23 -0
- package/src/components/barcodes/QRCode.tsx +211 -0
- package/src/components/buttons/ActionButton.tsx +61 -0
- package/src/components/buttons/AddItemButton.tsx +10 -0
- package/src/components/buttons/AdminButton.tsx +91 -0
- package/src/components/buttons/ButtonMenu.tsx +33 -0
- package/src/components/buttons/CopyButton.tsx +52 -0
- package/src/components/buttons/PrimaryActionButton.tsx +40 -0
- package/src/components/buttons/PrintingActions.tsx +191 -0
- package/src/components/buttons/RemoveRowButton.tsx +22 -0
- package/src/components/buttons/SSOButton.tsx +53 -0
- package/src/components/buttons/ScanButton.tsx +27 -0
- package/src/components/buttons/SegmentedIconControl.tsx +51 -0
- package/src/components/buttons/SplitButton.css.ts +19 -0
- package/src/components/buttons/SplitButton.tsx +111 -0
- package/src/components/buttons/SpotlightButton.tsx +22 -0
- package/src/components/buttons/StarredToggleButton.tsx +62 -0
- package/src/components/buttons/YesNoButton.tsx +42 -0
- package/src/components/calendar/Calendar.tsx +193 -0
- package/src/components/calendar/OrderCalendar.tsx +209 -0
- package/src/components/charts/colors.tsx +12 -0
- package/src/components/charts/tooltipFormatter.tsx +12 -0
- package/src/components/dashboard/DashboardLayout.tsx +327 -0
- package/src/components/dashboard/DashboardMenu.tsx +136 -0
- package/src/components/dashboard/DashboardWidget.tsx +82 -0
- package/src/components/dashboard/DashboardWidgetDrawer.tsx +130 -0
- package/src/components/dashboard/DashboardWidgetLibrary.tsx +189 -0
- package/src/components/dashboard/widgets/ColorToggleWidget.tsx +28 -0
- package/src/components/dashboard/widgets/GetStartedWidget.tsx +19 -0
- package/src/components/dashboard/widgets/LanguageSelectWidget.tsx +28 -0
- package/src/components/dashboard/widgets/NewsWidget.tsx +143 -0
- package/src/components/dashboard/widgets/QueryCountDashboardWidget.tsx +134 -0
- package/src/components/details/Details.tsx +514 -0
- package/src/components/details/DetailsBadge.tsx +20 -0
- package/src/components/details/DetailsImage.tsx +462 -0
- package/src/components/details/ItemDetails.tsx +17 -0
- package/src/components/editors/NotesEditor.tsx +232 -0
- package/src/components/editors/TemplateEditor/CodeEditor/CodeEditor.tsx +158 -0
- package/src/components/editors/TemplateEditor/CodeEditor/index.tsx +12 -0
- package/src/components/editors/TemplateEditor/PdfPreview/PdfPreview.tsx +90 -0
- package/src/components/editors/TemplateEditor/PdfPreview/index.tsx +12 -0
- package/src/components/editors/TemplateEditor/TemplateEditor.tsx +425 -0
- package/src/components/editors/TemplateEditor/index.tsx +3 -0
- package/src/components/errors/ClientError.tsx +28 -0
- package/src/components/errors/GenericErrorPage.tsx +73 -0
- package/src/components/errors/NotAuthenticated.tsx +12 -0
- package/src/components/errors/NotFound.tsx +12 -0
- package/src/components/errors/PermissionDenied.tsx +12 -0
- package/src/components/errors/ServerError.tsx +13 -0
- package/src/components/forms/ApiForm.tsx +718 -0
- package/src/components/forms/AuthFormOptions.tsx +39 -0
- package/src/components/forms/AuthenticationForm.tsx +332 -0
- package/src/components/forms/HostOptionsForm.tsx +96 -0
- package/src/components/forms/InstanceOptions.tsx +178 -0
- package/src/components/forms/StandaloneField.tsx +55 -0
- package/src/components/forms/fields/ApiFormField.tsx +281 -0
- package/src/components/forms/fields/ChoiceField.tsx +86 -0
- package/src/components/forms/fields/DateField.tsx +79 -0
- package/src/components/forms/fields/DependentField.tsx +91 -0
- package/src/components/forms/fields/IconField.tsx +353 -0
- package/src/components/forms/fields/NestedObjectField.tsx +45 -0
- package/src/components/forms/fields/RelatedModelField.tsx +339 -0
- package/src/components/forms/fields/TableField.tsx +275 -0
- package/src/components/forms/fields/TextField.tsx +81 -0
- package/src/components/images/ApiImage.tsx +35 -0
- package/src/components/images/Thumbnail.tsx +52 -0
- package/src/components/importer/ImportDataSelector.tsx +433 -0
- package/src/components/importer/ImporterColumnSelector.tsx +244 -0
- package/src/components/importer/ImporterDrawer.tsx +173 -0
- package/src/components/importer/ImporterImportProgress.tsx +45 -0
- package/src/components/items/ActionDropdown.tsx +290 -0
- package/src/components/items/ApiIcon.css.ts +13 -0
- package/src/components/items/ApiIcon.tsx +32 -0
- package/src/components/items/AttachmentLink.tsx +79 -0
- package/src/components/items/ColorToggle.tsx +34 -0
- package/src/components/items/DashboardItem.tsx +33 -0
- package/src/components/items/DocInfo.tsx +20 -0
- package/src/components/items/DocTooltip.tsx +98 -0
- package/src/components/items/ErrorItem.tsx +17 -0
- package/src/components/items/Expand.tsx +14 -0
- package/src/components/items/GettingStartedCarousel.css.ts +30 -0
- package/src/components/items/GettingStartedCarousel.tsx +49 -0
- package/src/components/items/InfoItem.tsx +64 -0
- package/src/components/items/InvenTreeLogo.tsx +24 -0
- package/src/components/items/LanguageSelect.tsx +43 -0
- package/src/components/items/LanguageToggle.tsx +37 -0
- package/src/components/items/MenuLinks.tsx +113 -0
- package/src/components/items/OnlyStaff.tsx +10 -0
- package/src/components/items/ProgressBar.tsx +45 -0
- package/src/components/items/StylishText.tsx +59 -0
- package/src/components/items/TitleWithDoc.tsx +26 -0
- package/src/components/items/UnavailableIndicator.tsx +5 -0
- package/src/components/items/inventree.svg +1 -0
- package/src/components/modals/AboutInvenTreeModal.tsx +203 -0
- package/src/components/modals/LicenseModal.tsx +116 -0
- package/src/components/modals/QrModal.tsx +21 -0
- package/src/components/modals/ServerInfoModal.tsx +136 -0
- package/src/components/nav/Alerts.tsx +130 -0
- package/src/components/nav/BreadcrumbList.tsx +84 -0
- package/src/components/nav/DetailDrawer.css.ts +6 -0
- package/src/components/nav/DetailDrawer.tsx +105 -0
- package/src/components/nav/Footer.tsx +11 -0
- package/src/components/nav/Header.tsx +226 -0
- package/src/components/nav/InstanceDetail.tsx +46 -0
- package/src/components/nav/Layout.tsx +85 -0
- package/src/components/nav/MainMenu.tsx +101 -0
- package/src/components/nav/NavHoverMenu.tsx +15 -0
- package/src/components/nav/NavigationDrawer.tsx +230 -0
- package/src/components/nav/NavigationTree.tsx +210 -0
- package/src/components/nav/NotificationDrawer.tsx +231 -0
- package/src/components/nav/PageDetail.tsx +171 -0
- package/src/components/nav/PageTitle.tsx +53 -0
- package/src/components/nav/SearchDrawer.tsx +598 -0
- package/src/components/nav/SettingsHeader.tsx +50 -0
- package/src/components/panels/AttachmentPanel.tsx +27 -0
- package/src/components/panels/NotesPanel.tsx +36 -0
- package/src/components/panels/Panel.tsx +15 -0
- package/src/components/panels/PanelGroup.css.ts +10 -0
- package/src/components/panels/PanelGroup.tsx +292 -0
- package/src/components/plugins/LocateItemButton.tsx +94 -0
- package/src/components/plugins/PluginContext.tsx +67 -0
- package/src/components/plugins/PluginDrawer.tsx +156 -0
- package/src/components/plugins/PluginInterface.tsx +34 -0
- package/src/components/plugins/PluginPanel.tsx +37 -0
- package/src/components/plugins/PluginSettingsPanel.tsx +34 -0
- package/src/components/plugins/PluginSource.tsx +48 -0
- package/src/components/plugins/PluginUIFeature.tsx +174 -0
- package/src/components/plugins/PluginUIFeatureTypes.ts +78 -0
- package/src/components/plugins/RemoteComponent.tsx +137 -0
- package/src/components/render/Build.tsx +54 -0
- package/src/components/render/Company.tsx +114 -0
- package/src/components/render/Generic.tsx +49 -0
- package/src/components/render/Instance.tsx +240 -0
- package/src/components/render/InstanceFromUrl.tsx +33 -0
- package/src/components/render/ModelType.tsx +293 -0
- package/src/components/render/Order.tsx +124 -0
- package/src/components/render/Part.tsx +109 -0
- package/src/components/render/Plugin.tsx +21 -0
- package/src/components/render/Report.tsx +29 -0
- package/src/components/render/StatusRenderer.tsx +178 -0
- package/src/components/render/Stock.tsx +84 -0
- package/src/components/render/User.tsx +42 -0
- package/src/components/settings/FactCollection.tsx +31 -0
- package/src/components/settings/FactItem.tsx +17 -0
- package/src/components/settings/SettingItem.tsx +176 -0
- package/src/components/settings/SettingList.tsx +217 -0
- package/src/components/wizards/OrderPartsWizard.tsx +473 -0
- package/src/components/wizards/WizardDrawer.tsx +188 -0
- package/src/contexts/ApiContext.tsx +31 -0
- package/src/contexts/LanguageContext.tsx +155 -0
- package/src/contexts/ThemeContext.tsx +58 -0
- package/src/contexts/colorSchema.tsx +67 -0
- package/src/defaults/actions.tsx +87 -0
- package/src/defaults/backendMappings.tsx +32 -0
- package/src/defaults/defaultHostList.tsx +4 -0
- package/src/defaults/defaults.tsx +38 -0
- package/src/defaults/formatters.tsx +176 -0
- package/src/defaults/links.tsx +193 -0
- package/src/defaults/templates.tsx +53 -0
- package/src/forms/BomForms.tsx +26 -0
- package/src/forms/BuildForms.tsx +615 -0
- package/src/forms/CommonForms.tsx +89 -0
- package/src/forms/CompanyForms.tsx +133 -0
- package/src/forms/ImporterForms.tsx +20 -0
- package/src/forms/PartForms.tsx +281 -0
- package/src/forms/PurchaseOrderForms.tsx +779 -0
- package/src/forms/ReturnOrderForms.tsx +263 -0
- package/src/forms/SalesOrderForms.tsx +408 -0
- package/src/forms/StockForms.tsx +1296 -0
- package/src/forms/selectionListFields.tsx +120 -0
- package/src/functions/api.tsx +61 -0
- package/src/functions/auth.tsx +574 -0
- package/src/functions/conversion.tsx +42 -0
- package/src/functions/events.tsx +6 -0
- package/src/functions/forms.tsx +173 -0
- package/src/functions/icons.tsx +294 -0
- package/src/functions/loading.tsx +29 -0
- package/src/functions/navigation.tsx +20 -0
- package/src/functions/notifications.tsx +101 -0
- package/src/functions/tables.tsx +26 -0
- package/src/functions/uid.tsx +15 -0
- package/src/functions/urls.tsx +58 -0
- package/src/hooks/UseCalendar.tsx +178 -0
- package/src/hooks/UseDashboardItems.tsx +118 -0
- package/src/hooks/UseDataExport.tsx +125 -0
- package/src/hooks/UseDataOutput.tsx +109 -0
- package/src/hooks/UseFilter.tsx +67 -0
- package/src/hooks/UseFilterSet.tsx +24 -0
- package/src/hooks/UseForm.tsx +161 -0
- package/src/hooks/UseGenerator.tsx +92 -0
- package/src/hooks/UseImportSession.tsx +139 -0
- package/src/hooks/UseInstance.tsx +137 -0
- package/src/hooks/UseInstanceName.tsx +14 -0
- package/src/hooks/UseModal.tsx +38 -0
- package/src/hooks/UsePlaceholder.tsx +66 -0
- package/src/hooks/UsePluginPanels.tsx +123 -0
- package/src/hooks/UsePluginUIFeature.tsx +95 -0
- package/src/hooks/UsePlugins.tsx +45 -0
- package/src/hooks/UseSelectedRows.tsx +37 -0
- package/src/hooks/UseStatusCodes.tsx +50 -0
- package/src/hooks/UseTable.tsx +145 -0
- package/src/hooks/UseWizard.tsx +133 -0
- package/src/locales/ar/messages.d.ts +4 -0
- package/src/locales/ar/messages.po +10695 -0
- package/src/locales/ar/messages.ts +1 -0
- package/src/locales/bg/messages.d.ts +4 -0
- package/src/locales/bg/messages.po +10695 -0
- package/src/locales/bg/messages.ts +1 -0
- package/src/locales/cs/messages.d.ts +4 -0
- package/src/locales/cs/messages.po +10695 -0
- package/src/locales/cs/messages.ts +1 -0
- package/src/locales/da/messages.d.ts +4 -0
- package/src/locales/da/messages.po +10695 -0
- package/src/locales/da/messages.ts +1 -0
- package/src/locales/de/messages.d.ts +4 -0
- package/src/locales/de/messages.po +10695 -0
- package/src/locales/de/messages.ts +1 -0
- package/src/locales/el/messages.d.ts +4 -0
- package/src/locales/el/messages.po +10695 -0
- package/src/locales/el/messages.ts +1 -0
- package/src/locales/en/messages.d.ts +4 -0
- package/src/locales/en/messages.po +10689 -0
- package/src/locales/en/messages.ts +1 -0
- package/src/locales/es/messages.d.ts +4 -0
- package/src/locales/es/messages.po +10695 -0
- package/src/locales/es/messages.ts +1 -0
- package/src/locales/es_MX/messages.d.ts +4 -0
- package/src/locales/es_MX/messages.po +10695 -0
- package/src/locales/es_MX/messages.ts +1 -0
- package/src/locales/et/messages.d.ts +4 -0
- package/src/locales/et/messages.po +10695 -0
- package/src/locales/et/messages.ts +1 -0
- package/src/locales/fa/messages.d.ts +4 -0
- package/src/locales/fa/messages.po +10695 -0
- package/src/locales/fa/messages.ts +1 -0
- package/src/locales/fi/messages.d.ts +4 -0
- package/src/locales/fi/messages.po +10695 -0
- package/src/locales/fi/messages.ts +1 -0
- package/src/locales/fr/messages.d.ts +4 -0
- package/src/locales/fr/messages.po +10695 -0
- package/src/locales/fr/messages.ts +1 -0
- package/src/locales/he/messages.d.ts +4 -0
- package/src/locales/he/messages.po +10695 -0
- package/src/locales/he/messages.ts +1 -0
- package/src/locales/hi/messages.d.ts +4 -0
- package/src/locales/hi/messages.po +10695 -0
- package/src/locales/hi/messages.ts +1 -0
- package/src/locales/hu/messages.d.ts +4 -0
- package/src/locales/hu/messages.po +10695 -0
- package/src/locales/hu/messages.ts +1 -0
- package/src/locales/id/messages.po +10695 -0
- package/src/locales/it/messages.d.ts +4 -0
- package/src/locales/it/messages.po +10695 -0
- package/src/locales/it/messages.ts +1 -0
- package/src/locales/ja/messages.d.ts +4 -0
- package/src/locales/ja/messages.po +10695 -0
- package/src/locales/ja/messages.ts +1 -0
- package/src/locales/ko/messages.d.ts +4 -0
- package/src/locales/ko/messages.po +10695 -0
- package/src/locales/ko/messages.ts +1 -0
- package/src/locales/lt/messages.d.ts +4 -0
- package/src/locales/lt/messages.po +10695 -0
- package/src/locales/lt/messages.ts +1 -0
- package/src/locales/lv/messages.d.ts +4 -0
- package/src/locales/lv/messages.po +10695 -0
- package/src/locales/lv/messages.ts +1 -0
- package/src/locales/nl/messages.d.ts +4 -0
- package/src/locales/nl/messages.po +10695 -0
- package/src/locales/nl/messages.ts +1 -0
- package/src/locales/no/messages.d.ts +4 -0
- package/src/locales/no/messages.po +10695 -0
- package/src/locales/no/messages.ts +1 -0
- package/src/locales/pl/messages.d.ts +4 -0
- package/src/locales/pl/messages.po +10695 -0
- package/src/locales/pl/messages.ts +1 -0
- package/src/locales/pseudo-LOCALE/messages.d.ts +4 -0
- package/src/locales/pseudo-LOCALE/messages.po +8003 -0
- package/src/locales/pseudo-LOCALE/messages.ts +1 -0
- package/src/locales/pt/messages.d.ts +4 -0
- package/src/locales/pt/messages.po +10696 -0
- package/src/locales/pt/messages.ts +1 -0
- package/src/locales/pt_BR/messages.d.ts +4 -0
- package/src/locales/pt_BR/messages.po +10695 -0
- package/src/locales/pt_BR/messages.ts +1 -0
- package/src/locales/ro/messages.po +10695 -0
- package/src/locales/ro/messages.ts +1 -0
- package/src/locales/ru/messages.d.ts +4 -0
- package/src/locales/ru/messages.po +10695 -0
- package/src/locales/ru/messages.ts +1 -0
- package/src/locales/sk/messages.d.ts +4 -0
- package/src/locales/sk/messages.po +10695 -0
- package/src/locales/sk/messages.ts +1 -0
- package/src/locales/sl/messages.d.ts +4 -0
- package/src/locales/sl/messages.po +10695 -0
- package/src/locales/sl/messages.ts +1 -0
- package/src/locales/sr/messages.d.ts +4 -0
- package/src/locales/sr/messages.po +10695 -0
- package/src/locales/sr/messages.ts +1 -0
- package/src/locales/sv/messages.d.ts +4 -0
- package/src/locales/sv/messages.po +10695 -0
- package/src/locales/sv/messages.ts +1 -0
- package/src/locales/th/messages.d.ts +4 -0
- package/src/locales/th/messages.po +10695 -0
- package/src/locales/th/messages.ts +1 -0
- package/src/locales/tr/messages.d.ts +4 -0
- package/src/locales/tr/messages.po +10695 -0
- package/src/locales/tr/messages.ts +1 -0
- package/src/locales/uk/messages.d.ts +3 -0
- package/src/locales/uk/messages.po +10695 -0
- package/src/locales/uk/messages.ts +1 -0
- package/src/locales/vi/messages.d.ts +4 -0
- package/src/locales/vi/messages.po +10695 -0
- package/src/locales/vi/messages.ts +1 -0
- package/src/locales/zh_Hans/messages.d.ts +4 -0
- package/src/locales/zh_Hans/messages.po +10695 -0
- package/src/locales/zh_Hans/messages.ts +1 -0
- package/src/locales/zh_Hant/messages.d.ts +4 -0
- package/src/locales/zh_Hant/messages.po +10695 -0
- package/src/locales/zh_Hant/messages.ts +1 -0
- package/src/main.css.ts +148 -0
- package/src/main.tsx +123 -0
- package/src/pages/Auth/ChangePassword.tsx +84 -0
- package/src/pages/Auth/Layout.tsx +74 -0
- package/src/pages/Auth/LoggedIn.tsx +21 -0
- package/src/pages/Auth/Login.tsx +133 -0
- package/src/pages/Auth/Logout.tsx +16 -0
- package/src/pages/Auth/MFA.tsx +36 -0
- package/src/pages/Auth/MFASetup.tsx +38 -0
- package/src/pages/Auth/Register.tsx +28 -0
- package/src/pages/Auth/Reset.tsx +30 -0
- package/src/pages/Auth/ResetPassword.tsx +48 -0
- package/src/pages/Auth/VerifyEmail.tsx +34 -0
- package/src/pages/ErrorPage.tsx +26 -0
- package/src/pages/Index/Home.tsx +12 -0
- package/src/pages/Index/Scan.tsx +258 -0
- package/src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx +162 -0
- package/src/pages/Index/Settings/AccountSettings/QrRegistrationForm.tsx +38 -0
- package/src/pages/Index/Settings/AccountSettings/SecurityContent.tsx +713 -0
- package/src/pages/Index/Settings/AccountSettings/UserPanel.tsx +24 -0
- package/src/pages/Index/Settings/AccountSettings/UserThemePanel.tsx +207 -0
- package/src/pages/Index/Settings/AccountSettings/useConfirm.tsx +117 -0
- package/src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx +111 -0
- package/src/pages/Index/Settings/AdminCenter/Index.tsx +251 -0
- package/src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx +23 -0
- package/src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx +110 -0
- package/src/pages/Index/Settings/AdminCenter/PartParameterPanel.tsx +29 -0
- package/src/pages/Index/Settings/AdminCenter/PluginManagementPanel.tsx +84 -0
- package/src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx +38 -0
- package/src/pages/Index/Settings/AdminCenter/StocktakePanel.tsx +31 -0
- package/src/pages/Index/Settings/AdminCenter/TaskManagementPanel.tsx +73 -0
- package/src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx +74 -0
- package/src/pages/Index/Settings/AdminCenter/UserManagementPanel.tsx +49 -0
- package/src/pages/Index/Settings/SystemSettings.tsx +339 -0
- package/src/pages/Index/Settings/UserSettings.tsx +143 -0
- package/src/pages/Notifications.tsx +134 -0
- package/src/pages/build/BuildDetail.tsx +579 -0
- package/src/pages/build/BuildIndex.tsx +100 -0
- package/src/pages/company/CompanyDetail.tsx +352 -0
- package/src/pages/company/CustomerDetail.tsx +13 -0
- package/src/pages/company/ManufacturerDetail.tsx +13 -0
- package/src/pages/company/ManufacturerPartDetail.tsx +307 -0
- package/src/pages/company/SupplierDetail.tsx +13 -0
- package/src/pages/company/SupplierPartDetail.tsx +433 -0
- package/src/pages/core/CoreIndex.tsx +50 -0
- package/src/pages/core/GroupDetail.tsx +97 -0
- package/src/pages/core/UserDetail.tsx +193 -0
- package/src/pages/part/CategoryDetail.tsx +369 -0
- package/src/pages/part/PartAllocationPanel.tsx +40 -0
- package/src/pages/part/PartDetail.tsx +1071 -0
- package/src/pages/part/PartPricingPanel.tsx +155 -0
- package/src/pages/part/PartSchedulingDetail.tsx +315 -0
- package/src/pages/part/PartStocktakeDetail.tsx +285 -0
- package/src/pages/part/PartSupplierDetail.tsx +31 -0
- package/src/pages/part/pricing/BomPricingPanel.tsx +269 -0
- package/src/pages/part/pricing/PriceBreakPanel.tsx +182 -0
- package/src/pages/part/pricing/PricingOverviewPanel.tsx +338 -0
- package/src/pages/part/pricing/PricingPanel.tsx +82 -0
- package/src/pages/part/pricing/PurchaseHistoryPanel.tsx +134 -0
- package/src/pages/part/pricing/SaleHistoryPanel.tsx +95 -0
- package/src/pages/part/pricing/SupplierPricingPanel.tsx +80 -0
- package/src/pages/part/pricing/VariantPricingPanel.tsx +112 -0
- package/src/pages/purchasing/PurchaseOrderDetail.tsx +547 -0
- package/src/pages/purchasing/PurchasingIndex.tsx +131 -0
- package/src/pages/sales/ReturnOrderDetail.tsx +529 -0
- package/src/pages/sales/SalesIndex.tsx +148 -0
- package/src/pages/sales/SalesOrderDetail.tsx +593 -0
- package/src/pages/sales/SalesOrderShipmentDetail.tsx +385 -0
- package/src/pages/stock/LocationDetail.tsx +413 -0
- package/src/pages/stock/StockDetail.tsx +951 -0
- package/src/router.tsx +213 -0
- package/src/states/ApiState.tsx +85 -0
- package/src/states/IconState.tsx +94 -0
- package/src/states/LocalState.tsx +181 -0
- package/src/states/SettingsState.tsx +206 -0
- package/src/states/StatusState.tsx +55 -0
- package/src/states/UserState.tsx +202 -0
- package/src/states/states.tsx +69 -0
- package/src/tables/Column.tsx +29 -0
- package/src/tables/ColumnRenderers.tsx +320 -0
- package/src/tables/ColumnSelect.tsx +39 -0
- package/src/tables/Filter.tsx +297 -0
- package/src/tables/FilterSelectDrawer.tsx +358 -0
- package/src/tables/InvenTreeTable.tsx +750 -0
- package/src/tables/InvenTreeTableHeader.tsx +257 -0
- package/src/tables/RowActions.tsx +176 -0
- package/src/tables/RowExpansionIcon.tsx +16 -0
- package/src/tables/Search.tsx +42 -0
- package/src/tables/TableHoverCard.tsx +91 -0
- package/src/tables/bom/BomTable.tsx +590 -0
- package/src/tables/bom/UsedInTable.tsx +114 -0
- package/src/tables/build/BuildAllocatedStockTable.tsx +233 -0
- package/src/tables/build/BuildLineTable.tsx +800 -0
- package/src/tables/build/BuildOrderTable.tsx +226 -0
- package/src/tables/build/BuildOrderTestTable.tsx +265 -0
- package/src/tables/build/BuildOutputTable.tsx +599 -0
- package/src/tables/company/AddressTable.tsx +211 -0
- package/src/tables/company/CompanyTable.tsx +176 -0
- package/src/tables/company/ContactTable.tsx +182 -0
- package/src/tables/core/UserTable.tsx +88 -0
- package/src/tables/general/AttachmentTable.tsx +404 -0
- package/src/tables/general/BarcodeScanTable.tsx +124 -0
- package/src/tables/general/ExtraLineItemTable.tsx +174 -0
- package/src/tables/machine/MachineListTable.tsx +634 -0
- package/src/tables/machine/MachineTypeTable.tsx +395 -0
- package/src/tables/notifications/NotificationTable.tsx +60 -0
- package/src/tables/part/ParametricPartTable.tsx +297 -0
- package/src/tables/part/PartBuildAllocationsTable.tsx +128 -0
- package/src/tables/part/PartCategoryTable.tsx +208 -0
- package/src/tables/part/PartCategoryTemplateTable.tsx +157 -0
- package/src/tables/part/PartParameterTable.tsx +226 -0
- package/src/tables/part/PartParameterTemplateTable.tsx +168 -0
- package/src/tables/part/PartPurchaseOrdersTable.tsx +163 -0
- package/src/tables/part/PartSalesAllocationsTable.tsx +130 -0
- package/src/tables/part/PartTable.tsx +423 -0
- package/src/tables/part/PartTestTemplateTable.tsx +290 -0
- package/src/tables/part/PartThumbTable.tsx +230 -0
- package/src/tables/part/PartVariantTable.tsx +52 -0
- package/src/tables/part/RelatedPartTable.tsx +182 -0
- package/src/tables/part/SelectionListTable.tsx +134 -0
- package/src/tables/plugin/PluginErrorTable.tsx +58 -0
- package/src/tables/plugin/PluginListTable.tsx +440 -0
- package/src/tables/purchasing/ManufacturerPartParameterTable.tsx +136 -0
- package/src/tables/purchasing/ManufacturerPartTable.tsx +158 -0
- package/src/tables/purchasing/PurchaseOrderLineItemTable.tsx +424 -0
- package/src/tables/purchasing/PurchaseOrderTable.tsx +193 -0
- package/src/tables/purchasing/SupplierPartTable.tsx +281 -0
- package/src/tables/purchasing/SupplierPriceBreakTable.tsx +222 -0
- package/src/tables/sales/ReturnOrderLineItemTable.tsx +271 -0
- package/src/tables/sales/ReturnOrderTable.tsx +201 -0
- package/src/tables/sales/SalesOrderAllocationTable.tsx +330 -0
- package/src/tables/sales/SalesOrderLineItemTable.tsx +508 -0
- package/src/tables/sales/SalesOrderShipmentTable.tsx +225 -0
- package/src/tables/sales/SalesOrderTable.tsx +212 -0
- package/src/tables/settings/ApiTokenTable.tsx +203 -0
- package/src/tables/settings/BarcodeScanHistoryTable.tsx +281 -0
- package/src/tables/settings/CustomStateTable.tsx +226 -0
- package/src/tables/settings/CustomUnitsTable.tsx +125 -0
- package/src/tables/settings/ErrorTable.tsx +170 -0
- package/src/tables/settings/ExportSessionTable.tsx +60 -0
- package/src/tables/settings/FailedTasksTable.tsx +103 -0
- package/src/tables/settings/GroupTable.tsx +240 -0
- package/src/tables/settings/ImportSessionTable.tsx +175 -0
- package/src/tables/settings/PendingTasksTable.tsx +63 -0
- package/src/tables/settings/ProjectCodeTable.tsx +115 -0
- package/src/tables/settings/ScheduledTasksTable.tsx +62 -0
- package/src/tables/settings/StocktakeReportTable.tsx +111 -0
- package/src/tables/settings/TemplateTable.tsx +404 -0
- package/src/tables/settings/UserTable.tsx +329 -0
- package/src/tables/stock/InstalledItemsTable.tsx +146 -0
- package/src/tables/stock/LocationTypesTable.tsx +132 -0
- package/src/tables/stock/StockItemTable.tsx +707 -0
- package/src/tables/stock/StockItemTestResultTable.tsx +487 -0
- package/src/tables/stock/StockLocationTable.tsx +208 -0
- package/src/tables/stock/StockTrackingTable.tsx +244 -0
- package/src/theme.ts +5 -0
- package/src/views/DesktopAppView.tsx +28 -0
- package/src/views/MainView.tsx +38 -0
- package/src/views/MobileAppView.tsx +43 -0
- package/tests/baseFixtures.ts +93 -0
- package/tests/defaults.ts +18 -0
- package/tests/helpers.ts +122 -0
- package/tests/login.ts +97 -0
- package/tests/pages/pui_build.spec.ts +373 -0
- package/tests/pages/pui_company.spec.ts +40 -0
- package/tests/pages/pui_core.spec.ts +26 -0
- package/tests/pages/pui_dashboard.spec.ts +64 -0
- package/tests/pages/pui_part.spec.ts +413 -0
- package/tests/pages/pui_purchase_order.spec.ts +388 -0
- package/tests/pages/pui_sales_order.spec.ts +224 -0
- package/tests/pages/pui_scan.spec.ts +114 -0
- package/tests/pages/pui_stock.spec.ts +259 -0
- package/tests/pui_exporting.spec.ts +124 -0
- package/tests/pui_forms.spec.ts +131 -0
- package/tests/pui_general.spec.ts +60 -0
- package/tests/pui_login.spec.ts +74 -0
- package/tests/pui_modals.spec.ts +144 -0
- package/tests/pui_plugins.spec.ts +216 -0
- package/tests/pui_printing.spec.ts +149 -0
- package/tests/pui_settings.spec.ts +285 -0
- package/tests/pui_tables.spec.ts +65 -0
- package/tests/settings/selectionList.spec.ts +103 -0
- package/tests/settings.ts +54 -0
- package/tsconfig.json +25 -0
- package/tsconfig.lib.json +13 -0
- package/tsconfig.node.json +11 -0
- package/vite-env.d.ts +11 -0
- package/vite.config.ts +98 -0
- package/vite.lib.config.ts +50 -0
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
import type { DefaultMantineColor, MantineStyleProp } from '@mantine/core';
|
|
2
|
+
import type { UseFormReturnType } from '@mantine/form';
|
|
3
|
+
import type { ReactNode } from 'react';
|
|
4
|
+
import type { FieldValues } from 'react-hook-form';
|
|
5
|
+
import type { ApiEndpoints } from '../enums/ApiEndpoints';
|
|
6
|
+
import type { ModelType } from '../enums/ModelType';
|
|
7
|
+
import type { PathParams, UiSizeType } from './Core';
|
|
8
|
+
import type { TableState } from './Tables';
|
|
9
|
+
|
|
10
|
+
export interface ApiFormAction {
|
|
11
|
+
text: string;
|
|
12
|
+
variant?: 'outline';
|
|
13
|
+
color?: DefaultMantineColor;
|
|
14
|
+
onClick: () => void;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export type ApiFormData = UseFormReturnType<Record<string, unknown>>;
|
|
18
|
+
|
|
19
|
+
export type ApiFormAdjustFilterType = {
|
|
20
|
+
filters: any;
|
|
21
|
+
data: FieldValues;
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
export type ApiFormFieldChoice = {
|
|
25
|
+
value: any;
|
|
26
|
+
display_name: string;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
// Define individual headers in a table field
|
|
30
|
+
export type ApiFormFieldHeader = {
|
|
31
|
+
title: string;
|
|
32
|
+
style?: MantineStyleProp;
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
/** Definition of the ApiForm field component.
|
|
36
|
+
* - The 'name' attribute *must* be provided
|
|
37
|
+
* - All other attributes are optional, and may be provided by the API
|
|
38
|
+
* - However, they can be overridden by the user
|
|
39
|
+
*
|
|
40
|
+
* @param name : The name of the field
|
|
41
|
+
* @param label : The label to display for the field
|
|
42
|
+
* @param value : The value of the field
|
|
43
|
+
* @param default : The default value of the field
|
|
44
|
+
* @param icon : An icon to display next to the field
|
|
45
|
+
* @param field_type : The type of field to render
|
|
46
|
+
* @param api_url : The API endpoint to fetch data from (for related fields)
|
|
47
|
+
* @param pk_field : The primary key field for the related field (default = "pk")
|
|
48
|
+
* @param model : The model to use for related fields
|
|
49
|
+
* @param filters : Optional API filters to apply to related fields
|
|
50
|
+
* @param required : Whether the field is required
|
|
51
|
+
* @param hidden : Whether the field is hidden
|
|
52
|
+
* @param disabled : Whether the field is disabled
|
|
53
|
+
* @param error : Optional error message to display
|
|
54
|
+
* @param exclude : Whether to exclude the field from the submitted data
|
|
55
|
+
* @param placeholder : The placeholder text to display
|
|
56
|
+
* @param description : The description to display for the field
|
|
57
|
+
* @param preFieldContent : Content to render before the field
|
|
58
|
+
* @param postFieldContent : Content to render after the field
|
|
59
|
+
* @param onValueChange : Callback function to call when the field value changes
|
|
60
|
+
* @param adjustFilters : Callback function to adjust the filters for a related field before a query is made
|
|
61
|
+
* @param adjustValue : Callback function to adjust the value of the field before it is sent to the API
|
|
62
|
+
* @param addRow : Callback function to add a new row to a table field
|
|
63
|
+
* @param onKeyDown : Callback function to get which key was pressed in the form to handle submission on enter
|
|
64
|
+
*/
|
|
65
|
+
export type ApiFormFieldType = {
|
|
66
|
+
label?: string;
|
|
67
|
+
value?: any;
|
|
68
|
+
default?: any;
|
|
69
|
+
icon?: ReactNode;
|
|
70
|
+
field_type?:
|
|
71
|
+
| 'related field'
|
|
72
|
+
| 'email'
|
|
73
|
+
| 'url'
|
|
74
|
+
| 'string'
|
|
75
|
+
| 'icon'
|
|
76
|
+
| 'boolean'
|
|
77
|
+
| 'date'
|
|
78
|
+
| 'datetime'
|
|
79
|
+
| 'integer'
|
|
80
|
+
| 'decimal'
|
|
81
|
+
| 'float'
|
|
82
|
+
| 'number'
|
|
83
|
+
| 'choice'
|
|
84
|
+
| 'file upload'
|
|
85
|
+
| 'nested object'
|
|
86
|
+
| 'dependent field'
|
|
87
|
+
| 'table';
|
|
88
|
+
api_url?: string;
|
|
89
|
+
pk_field?: string;
|
|
90
|
+
model?: ModelType;
|
|
91
|
+
modelRenderer?: (instance: any) => ReactNode;
|
|
92
|
+
filters?: any;
|
|
93
|
+
child?: ApiFormFieldType;
|
|
94
|
+
children?: { [key: string]: ApiFormFieldType };
|
|
95
|
+
required?: boolean;
|
|
96
|
+
error?: string;
|
|
97
|
+
choices?: ApiFormFieldChoice[];
|
|
98
|
+
hidden?: boolean;
|
|
99
|
+
disabled?: boolean;
|
|
100
|
+
exclude?: boolean;
|
|
101
|
+
read_only?: boolean;
|
|
102
|
+
placeholder?: string;
|
|
103
|
+
description?: string;
|
|
104
|
+
preFieldContent?: JSX.Element;
|
|
105
|
+
postFieldContent?: JSX.Element;
|
|
106
|
+
adjustValue?: (value: any) => any;
|
|
107
|
+
onValueChange?: (value: any, record?: any) => void;
|
|
108
|
+
adjustFilters?: (value: ApiFormAdjustFilterType) => any;
|
|
109
|
+
addRow?: () => any;
|
|
110
|
+
headers?: ApiFormFieldHeader[];
|
|
111
|
+
depends_on?: string[];
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
export type ApiFormFieldSet = Record<string, ApiFormFieldType>;
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Properties for the ApiForm component
|
|
118
|
+
* @param url : The API endpoint to fetch the form data from
|
|
119
|
+
* @param pk : Optional primary-key value when editing an existing object
|
|
120
|
+
* @param pk_field : Optional primary-key field name (default: pk)
|
|
121
|
+
* @param pathParams : Optional path params for the url
|
|
122
|
+
* @param method : Optional HTTP method to use when submitting the form (default: GET)
|
|
123
|
+
* @param fields : The fields to render in the form
|
|
124
|
+
* @param submitText : Optional custom text to display on the submit button (default: Submit)4
|
|
125
|
+
* @param submitColor : Optional custom color for the submit button (default: green)
|
|
126
|
+
* @param fetchInitialData : Optional flag to fetch initial data from the server (default: true)
|
|
127
|
+
* @param preFormContent : Optional content to render before the form fields
|
|
128
|
+
* @param postFormContent : Optional content to render after the form fields
|
|
129
|
+
* @param successMessage : Optional message to display on successful form submission
|
|
130
|
+
* @param onFormSuccess : A callback function to call when the form is submitted successfully.
|
|
131
|
+
* @param onFormError : A callback function to call when the form is submitted with errors.
|
|
132
|
+
* @param processFormData : A callback function to process the form data before submission
|
|
133
|
+
* @param modelType : Define a model type for this form
|
|
134
|
+
* @param follow : Boolean, follow the result of the form (if possible)
|
|
135
|
+
* @param table : Table to update on success (if provided)
|
|
136
|
+
*/
|
|
137
|
+
export interface ApiFormProps {
|
|
138
|
+
url: ApiEndpoints | string;
|
|
139
|
+
pk?: number | string;
|
|
140
|
+
pk_field?: string;
|
|
141
|
+
pathParams?: PathParams;
|
|
142
|
+
queryParams?: URLSearchParams;
|
|
143
|
+
method?: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
|
|
144
|
+
fields?: ApiFormFieldSet;
|
|
145
|
+
focus?: string;
|
|
146
|
+
initialData?: FieldValues;
|
|
147
|
+
submitText?: string;
|
|
148
|
+
submitColor?: string;
|
|
149
|
+
fetchInitialData?: boolean;
|
|
150
|
+
ignorePermissionCheck?: boolean;
|
|
151
|
+
preFormContent?: JSX.Element;
|
|
152
|
+
preFormWarning?: string;
|
|
153
|
+
preFormSuccess?: string;
|
|
154
|
+
postFormContent?: JSX.Element;
|
|
155
|
+
successMessage?: string | null;
|
|
156
|
+
onFormSuccess?: (data: any) => void;
|
|
157
|
+
onFormError?: (response: any) => void;
|
|
158
|
+
processFormData?: (data: any) => any;
|
|
159
|
+
table?: TableState;
|
|
160
|
+
modelType?: ModelType;
|
|
161
|
+
follow?: boolean;
|
|
162
|
+
actions?: ApiFormAction[];
|
|
163
|
+
timeout?: number;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* @param title : The title to display in the modal header
|
|
168
|
+
* @param cancelText : Optional custom text to display on the cancel button (default: Cancel)
|
|
169
|
+
* @param cancelColor : Optional custom color for the cancel button (default: blue)
|
|
170
|
+
* @param onClose : A callback function to call when the modal is closed.
|
|
171
|
+
* @param onOpen : A callback function to call when the modal is opened.
|
|
172
|
+
*/
|
|
173
|
+
export interface ApiFormModalProps extends ApiFormProps {
|
|
174
|
+
title: string;
|
|
175
|
+
cancelText?: string;
|
|
176
|
+
cancelColor?: string;
|
|
177
|
+
onClose?: () => void;
|
|
178
|
+
onOpen?: () => void;
|
|
179
|
+
closeOnClickOutside?: boolean;
|
|
180
|
+
size?: UiSizeType;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
export interface BulkEditApiFormModalProps extends ApiFormModalProps {
|
|
184
|
+
items: number[];
|
|
185
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { UiSizeType } from './Core';
|
|
2
|
+
|
|
3
|
+
export interface UseModalProps {
|
|
4
|
+
title: string;
|
|
5
|
+
children: React.ReactElement;
|
|
6
|
+
size?: UiSizeType;
|
|
7
|
+
onOpen?: () => void;
|
|
8
|
+
onClose?: () => void;
|
|
9
|
+
closeOnClickOutside?: boolean;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export interface UseModalReturn {
|
|
13
|
+
open: () => void;
|
|
14
|
+
close: () => void;
|
|
15
|
+
toggle: () => void;
|
|
16
|
+
modal: React.ReactElement;
|
|
17
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import type { MantineColorScheme, MantineTheme } from '@mantine/core';
|
|
2
|
+
import type { QueryClient } from '@tanstack/react-query';
|
|
3
|
+
import type { AxiosInstance } from 'axios';
|
|
4
|
+
import type { NavigateFunction } from 'react-router-dom';
|
|
5
|
+
import type { ModelType } from '../enums/ModelType';
|
|
6
|
+
import type { ApiFormModalProps, BulkEditApiFormModalProps } from './Forms';
|
|
7
|
+
import type { UseModalReturn } from './Modals';
|
|
8
|
+
import type { SettingsStateProps } from './Settings';
|
|
9
|
+
import type { UserStateProps } from './User';
|
|
10
|
+
|
|
11
|
+
export interface PluginProps {
|
|
12
|
+
name: string;
|
|
13
|
+
slug: string;
|
|
14
|
+
version: null | string;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export type InvenTreeFormsContext = {
|
|
18
|
+
bulkEdit: (props: BulkEditApiFormModalProps) => UseModalReturn;
|
|
19
|
+
create: (props: ApiFormModalProps) => UseModalReturn;
|
|
20
|
+
delete: (props: ApiFormModalProps) => UseModalReturn;
|
|
21
|
+
edit: (props: ApiFormModalProps) => UseModalReturn;
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* A set of properties which are passed to a plugin,
|
|
26
|
+
* for rendering an element in the user interface.
|
|
27
|
+
*
|
|
28
|
+
* @param version - The version of the running InvenTree software stack
|
|
29
|
+
* @param api - The Axios API instance (see ../states/ApiState.tsx)
|
|
30
|
+
* @param user - The current user instance (see ../states/UserState.tsx)
|
|
31
|
+
* @param userSettings - The current user settings (see ../states/SettingsState.tsx)
|
|
32
|
+
* @param globalSettings - The global settings (see ../states/SettingsState.tsx)
|
|
33
|
+
* @param navigate - The navigation function (see react-router-dom)
|
|
34
|
+
* @param theme - The current Mantine theme
|
|
35
|
+
* @param colorScheme - The current Mantine color scheme (e.g. 'light' / 'dark')
|
|
36
|
+
* @param host - The current host URL
|
|
37
|
+
* @param locale - The current locale string (e.g. 'en' / 'de')
|
|
38
|
+
* @param model - The model type associated with the rendered component (if applicable)
|
|
39
|
+
* @param id - The ID (primary key) of the model instance for the plugin (if applicable)
|
|
40
|
+
* @param instance - The model instance data (if available)
|
|
41
|
+
* @param context - Any additional context data which may be passed to the plugin
|
|
42
|
+
*/
|
|
43
|
+
export type InvenTreePluginContext = {
|
|
44
|
+
version: string;
|
|
45
|
+
api: AxiosInstance;
|
|
46
|
+
queryClient: QueryClient;
|
|
47
|
+
user: UserStateProps;
|
|
48
|
+
userSettings: SettingsStateProps;
|
|
49
|
+
globalSettings: SettingsStateProps;
|
|
50
|
+
host: string;
|
|
51
|
+
locale: string;
|
|
52
|
+
navigate: NavigateFunction;
|
|
53
|
+
theme: MantineTheme;
|
|
54
|
+
forms: InvenTreeFormsContext;
|
|
55
|
+
colorScheme: MantineColorScheme;
|
|
56
|
+
model?: ModelType | string;
|
|
57
|
+
id?: string | number | null;
|
|
58
|
+
instance?: any;
|
|
59
|
+
context?: any;
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
/*
|
|
63
|
+
* The version of the InvenTree plugin context interface.
|
|
64
|
+
* This number should be incremented if the interface changes.
|
|
65
|
+
*/
|
|
66
|
+
|
|
67
|
+
// @ts-ignore
|
|
68
|
+
export const INVENTREE_PLUGIN_VERSION: string = __INVENTREE_LIB_VERSION__;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { ApiEndpoints } from '../enums/ApiEndpoints';
|
|
2
|
+
import type { PathParams } from './Core';
|
|
3
|
+
|
|
4
|
+
export enum SettingTyp {
|
|
5
|
+
InvenTree = 'inventree',
|
|
6
|
+
Plugin = 'plugin',
|
|
7
|
+
User = 'user',
|
|
8
|
+
Notification = 'notification'
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export enum SettingType {
|
|
12
|
+
Boolean = 'boolean',
|
|
13
|
+
Integer = 'integer',
|
|
14
|
+
String = 'string',
|
|
15
|
+
Choice = 'choice',
|
|
16
|
+
Model = 'related field'
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
// Type interface defining a single 'setting' object
|
|
20
|
+
export interface Setting {
|
|
21
|
+
pk: number;
|
|
22
|
+
key: string;
|
|
23
|
+
value: string;
|
|
24
|
+
name: string;
|
|
25
|
+
description: string;
|
|
26
|
+
type: SettingType;
|
|
27
|
+
units: string;
|
|
28
|
+
choices: SettingChoice[];
|
|
29
|
+
model_name: string | null;
|
|
30
|
+
model_filters: Record<string, any> | null;
|
|
31
|
+
api_url: string | null;
|
|
32
|
+
typ: SettingTyp;
|
|
33
|
+
plugin?: string;
|
|
34
|
+
method?: string;
|
|
35
|
+
required?: boolean;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export interface SettingChoice {
|
|
39
|
+
value: string;
|
|
40
|
+
display_name: string;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export type SettingsLookup = {
|
|
44
|
+
[key: string]: string;
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
export interface SettingsStateProps {
|
|
48
|
+
settings: Setting[];
|
|
49
|
+
lookup: SettingsLookup;
|
|
50
|
+
fetchSettings: () => Promise<boolean>;
|
|
51
|
+
endpoint: ApiEndpoints;
|
|
52
|
+
pathParams?: PathParams;
|
|
53
|
+
getSetting: (key: string, default_value?: string) => string; // Return a raw setting value
|
|
54
|
+
isSet: (key: string, default_value?: boolean) => boolean; // Check a "boolean" setting
|
|
55
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import type { SetURLSearchParams } from 'react-router-dom';
|
|
2
|
+
import type { FilterSetState } from './Filters';
|
|
3
|
+
|
|
4
|
+
/*
|
|
5
|
+
* Type definition for representing the state of a table:
|
|
6
|
+
*
|
|
7
|
+
* tableKey: A unique key for the table. When this key changes, the table will be refreshed.
|
|
8
|
+
* refreshTable: A callback function to externally refresh the table.
|
|
9
|
+
* isLoading: A boolean flag to indicate if the table is currently loading data
|
|
10
|
+
* setIsLoading: A function to set the isLoading flag
|
|
11
|
+
* filterSet: A group of active filters
|
|
12
|
+
* queryFilters: A map of query filters (e.g. ?active=true&overdue=false) passed in the URL
|
|
13
|
+
* setQueryFilters: A function to set the query filters
|
|
14
|
+
* clearQueryFilters: A function to clear all query filters
|
|
15
|
+
* expandedRecords: An array of expanded records (rows) in the table
|
|
16
|
+
* setExpandedRecords: A function to set the expanded records
|
|
17
|
+
* isRowExpanded: A function to determine if a record is expanded
|
|
18
|
+
* selectedRecords: An array of selected records (rows) in the table
|
|
19
|
+
* selectedIds: An array of primary key values for selected records
|
|
20
|
+
* hasSelectedRecords: A boolean flag to indicate if any records are selected
|
|
21
|
+
* setSelectedRecords: A function to set the selected records
|
|
22
|
+
* clearSelectedRecords: A function to clear all selected records
|
|
23
|
+
* hiddenColumns: An array of hidden column names
|
|
24
|
+
* setHiddenColumns: A function to set the hidden columns
|
|
25
|
+
* searchTerm: The current search term for the table
|
|
26
|
+
* setSearchTerm: A function to set the search term
|
|
27
|
+
* recordCount: The total number of records in the table
|
|
28
|
+
* setRecordCount: A function to set the record count
|
|
29
|
+
* page: The current page number
|
|
30
|
+
* setPage: A function to set the current page number
|
|
31
|
+
* pageSize: The number of records per page
|
|
32
|
+
* setPageSize: A function to set the number of records per page
|
|
33
|
+
* records: An array of records (rows) in the table
|
|
34
|
+
* setRecords: A function to set the records
|
|
35
|
+
* updateRecord: A function to update a single record in the table
|
|
36
|
+
* idAccessor: The name of the primary key field in the records (default = 'pk')
|
|
37
|
+
*/
|
|
38
|
+
export type TableState = {
|
|
39
|
+
tableKey: string;
|
|
40
|
+
refreshTable: () => void;
|
|
41
|
+
isLoading: boolean;
|
|
42
|
+
setIsLoading: (value: boolean) => void;
|
|
43
|
+
filterSet: FilterSetState;
|
|
44
|
+
queryFilters: URLSearchParams;
|
|
45
|
+
setQueryFilters: SetURLSearchParams;
|
|
46
|
+
clearQueryFilters: () => void;
|
|
47
|
+
expandedRecords: any[];
|
|
48
|
+
setExpandedRecords: (records: any[]) => void;
|
|
49
|
+
isRowExpanded: (pk: number) => boolean;
|
|
50
|
+
selectedRecords: any[];
|
|
51
|
+
selectedIds: any[];
|
|
52
|
+
hasSelectedRecords: boolean;
|
|
53
|
+
setSelectedRecords: (records: any[]) => void;
|
|
54
|
+
clearSelectedRecords: () => void;
|
|
55
|
+
hiddenColumns: string[];
|
|
56
|
+
setHiddenColumns: (columns: string[]) => void;
|
|
57
|
+
searchTerm: string;
|
|
58
|
+
setSearchTerm: (term: string) => void;
|
|
59
|
+
recordCount: number;
|
|
60
|
+
setRecordCount: (count: number) => void;
|
|
61
|
+
page: number;
|
|
62
|
+
setPage: (page: number) => void;
|
|
63
|
+
pageSize: number;
|
|
64
|
+
setPageSize: (pageSize: number) => void;
|
|
65
|
+
records: any[];
|
|
66
|
+
setRecords: (records: any[]) => void;
|
|
67
|
+
updateRecord: (record: any) => void;
|
|
68
|
+
idAccessor?: string;
|
|
69
|
+
};
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { ModelType } from '../enums/ModelType';
|
|
2
|
+
import type { UserPermissions, UserRoles } from '../enums/Roles';
|
|
3
|
+
|
|
4
|
+
export interface UserProfile {
|
|
5
|
+
language: string;
|
|
6
|
+
theme: any;
|
|
7
|
+
widgets: any;
|
|
8
|
+
displayname: string | null;
|
|
9
|
+
position: string | null;
|
|
10
|
+
status: string | null;
|
|
11
|
+
location: string | null;
|
|
12
|
+
active: boolean;
|
|
13
|
+
contact: string | null;
|
|
14
|
+
type: string;
|
|
15
|
+
organisation: string | null;
|
|
16
|
+
primary_group: number | null;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
// Type interface fully defining the current user
|
|
20
|
+
export interface UserProps {
|
|
21
|
+
pk: number;
|
|
22
|
+
username: string;
|
|
23
|
+
first_name: string;
|
|
24
|
+
last_name: string;
|
|
25
|
+
email: string;
|
|
26
|
+
is_staff?: boolean;
|
|
27
|
+
is_superuser?: boolean;
|
|
28
|
+
roles?: Record<string, string[]>;
|
|
29
|
+
permissions?: Record<string, string[]>;
|
|
30
|
+
groups: any[] | null;
|
|
31
|
+
profile: UserProfile;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export interface UserStateProps {
|
|
35
|
+
user: UserProps | undefined;
|
|
36
|
+
is_authed: boolean;
|
|
37
|
+
userId: () => number | undefined;
|
|
38
|
+
username: () => string;
|
|
39
|
+
setAuthenticated: (authed?: boolean) => void;
|
|
40
|
+
fetchUserToken: () => Promise<void>;
|
|
41
|
+
setUser: (newUser: UserProps | undefined) => void;
|
|
42
|
+
getUser: () => UserProps | undefined;
|
|
43
|
+
fetchUserState: () => Promise<void>;
|
|
44
|
+
clearUserState: () => void;
|
|
45
|
+
checkUserRole: (role: UserRoles, permission: UserPermissions) => boolean;
|
|
46
|
+
hasDeleteRole: (role: UserRoles) => boolean;
|
|
47
|
+
hasChangeRole: (role: UserRoles) => boolean;
|
|
48
|
+
hasAddRole: (role: UserRoles) => boolean;
|
|
49
|
+
hasViewRole: (role: UserRoles) => boolean;
|
|
50
|
+
checkUserPermission: (
|
|
51
|
+
model: ModelType,
|
|
52
|
+
permission: UserPermissions
|
|
53
|
+
) => boolean;
|
|
54
|
+
hasDeletePermission: (model: ModelType) => boolean;
|
|
55
|
+
hasChangePermission: (model: ModelType) => boolean;
|
|
56
|
+
hasAddPermission: (model: ModelType) => boolean;
|
|
57
|
+
hasViewPermission: (model: ModelType) => boolean;
|
|
58
|
+
isAuthed: () => boolean;
|
|
59
|
+
isLoggedIn: () => boolean;
|
|
60
|
+
isStaff: () => boolean;
|
|
61
|
+
isSuperuser: () => boolean;
|
|
62
|
+
}
|
package/netlify.toml
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Netlify configuration file
|
|
2
|
+
# https://www.netlify.com/docs/netlify-toml-reference/
|
|
3
|
+
|
|
4
|
+
[build]
|
|
5
|
+
command = "yarn run extract && yarn run compile && yarn run build --outDir dist"
|
|
6
|
+
publish = "dist"
|
|
7
|
+
|
|
8
|
+
[build.environment]
|
|
9
|
+
VITE_DEMO = "true"
|
|
10
|
+
|
|
11
|
+
# Send requests to subpath
|
|
12
|
+
|
|
13
|
+
[[redirects]]
|
|
14
|
+
from = "/*"
|
|
15
|
+
to = "/index.html"
|
|
16
|
+
status = 200
|
|
17
|
+
|
|
18
|
+
[[plugins]]
|
|
19
|
+
package = "@netlify/plugin-lighthouse"
|
|
20
|
+
|
|
21
|
+
[plugins.inputs.settings]
|
|
22
|
+
preset = "desktop" # Optionally run Lighthouse using a desktop configuration
|
package/package.json
ADDED
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@inventreedb/ui",
|
|
3
|
+
"description": "UI components for the InvenTree project",
|
|
4
|
+
"version": "0.0.1",
|
|
5
|
+
"private": false,
|
|
6
|
+
"type": "module",
|
|
7
|
+
"license": "MIT",
|
|
8
|
+
"main": "./dist/index.js",
|
|
9
|
+
"types": "./dist/index.d.ts",
|
|
10
|
+
"exports": {
|
|
11
|
+
".": "./dist/index.js"
|
|
12
|
+
},
|
|
13
|
+
"repository": {
|
|
14
|
+
"type": "git",
|
|
15
|
+
"url": "https://github.com/inventree/inventree"
|
|
16
|
+
},
|
|
17
|
+
"author": {
|
|
18
|
+
"name": "InvenTree Developers",
|
|
19
|
+
"email": "support@inventree.org",
|
|
20
|
+
"url": "https://inventree.org",
|
|
21
|
+
"org": "InvenTree"
|
|
22
|
+
},
|
|
23
|
+
"scripts": {
|
|
24
|
+
"dev": "vite",
|
|
25
|
+
"build": "tsc && vite build --emptyOutDir",
|
|
26
|
+
"lib": "tsc --p ./tsconfig.lib.json && vite --config vite.lib.config.ts build",
|
|
27
|
+
"preview": "vite preview",
|
|
28
|
+
"extract": "lingui extract",
|
|
29
|
+
"compile": "lingui compile --typescript"
|
|
30
|
+
},
|
|
31
|
+
"dependencies": {
|
|
32
|
+
"@codemirror/autocomplete": "6.18.4",
|
|
33
|
+
"@codemirror/lang-liquid": "6.2.2",
|
|
34
|
+
"@codemirror/language": "6.10.8",
|
|
35
|
+
"@codemirror/lint": "6.8.4",
|
|
36
|
+
"@codemirror/search": "6.5.8",
|
|
37
|
+
"@codemirror/state": "6.5.1",
|
|
38
|
+
"@codemirror/theme-one-dark": "6.1.2",
|
|
39
|
+
"@codemirror/view": "6.36.2",
|
|
40
|
+
"@emotion/react": "^11.13.3",
|
|
41
|
+
"@fortawesome/fontawesome-svg-core": "^6.6.0",
|
|
42
|
+
"@fortawesome/free-regular-svg-icons": "^6.6.0",
|
|
43
|
+
"@fortawesome/free-solid-svg-icons": "^6.6.0",
|
|
44
|
+
"@fortawesome/react-fontawesome": "^0.2.2",
|
|
45
|
+
"@fullcalendar/core": "^6.1.15",
|
|
46
|
+
"@fullcalendar/daygrid": "^6.1.15",
|
|
47
|
+
"@fullcalendar/interaction": "^6.1.15",
|
|
48
|
+
"@fullcalendar/react": "^6.1.15",
|
|
49
|
+
"@lingui/core": "^5.3.0",
|
|
50
|
+
"@lingui/react": "^5.3.0",
|
|
51
|
+
"@mantine/carousel": "^7.16.0",
|
|
52
|
+
"@mantine/charts": "^7.16.0",
|
|
53
|
+
"@mantine/core": "^7.16.0",
|
|
54
|
+
"@mantine/dates": "^7.16.0",
|
|
55
|
+
"@mantine/dropzone": "^7.16.0",
|
|
56
|
+
"@mantine/form": "^7.16.0",
|
|
57
|
+
"@mantine/hooks": "^7.16.0",
|
|
58
|
+
"@mantine/modals": "^7.16.0",
|
|
59
|
+
"@mantine/notifications": "^7.16.0",
|
|
60
|
+
"@mantine/spotlight": "^7.16.0",
|
|
61
|
+
"@mantine/vanilla-extract": "^7.16.0",
|
|
62
|
+
"@messageformat/date-skeleton": "^1.1.0",
|
|
63
|
+
"@sentry/react": "^8.43.0",
|
|
64
|
+
"@tabler/icons-react": "^3.17.0",
|
|
65
|
+
"@tanstack/react-query": "^5.56.2",
|
|
66
|
+
"@uiw/codemirror-theme-vscode": "4.23.7",
|
|
67
|
+
"@uiw/react-codemirror": "4.23.7",
|
|
68
|
+
"@uiw/react-split": "^5.9.3",
|
|
69
|
+
"@vanilla-extract/css": "^1.17.1",
|
|
70
|
+
"axios": "^1.8.4",
|
|
71
|
+
"clsx": "^2.1.1",
|
|
72
|
+
"codemirror": "6.0.1",
|
|
73
|
+
"dayjs": "^1.11.13",
|
|
74
|
+
"dompurify": "^3.2.4",
|
|
75
|
+
"easymde": "^2.18.0",
|
|
76
|
+
"embla-carousel-react": "^8.5.2",
|
|
77
|
+
"fuse.js": "^7.0.0",
|
|
78
|
+
"html5-qrcode": "^2.3.8",
|
|
79
|
+
"mantine-contextmenu": "^7.15.3",
|
|
80
|
+
"mantine-datatable": "^7.15.1",
|
|
81
|
+
"qrcode": "^1.5.4",
|
|
82
|
+
"react": "^18.3.1",
|
|
83
|
+
"react-dom": "^18.3.1",
|
|
84
|
+
"react-grid-layout": "1.4.4",
|
|
85
|
+
"react-hook-form": "^7.54.2",
|
|
86
|
+
"react-is": "^18.3.1",
|
|
87
|
+
"react-router-dom": "^6.26.2",
|
|
88
|
+
"react-select": "^5.9.0",
|
|
89
|
+
"react-simplemde-editor": "^5.2.0",
|
|
90
|
+
"react-window": "1.8.10",
|
|
91
|
+
"recharts": "^2.15.0",
|
|
92
|
+
"styled-components": "^6.1.14",
|
|
93
|
+
"zustand": "^4.5.5"
|
|
94
|
+
},
|
|
95
|
+
"devDependencies": {
|
|
96
|
+
"@babel/core": "^7.26.10",
|
|
97
|
+
"@babel/preset-react": "^7.26.3",
|
|
98
|
+
"@babel/preset-typescript": "^7.27.0",
|
|
99
|
+
"@babel/runtime": "^7.27.0",
|
|
100
|
+
"@codecov/vite-plugin": "^1.9.0",
|
|
101
|
+
"@lingui/babel-plugin-lingui-macro": "^5.3.0",
|
|
102
|
+
"@lingui/cli": "^5.3.0",
|
|
103
|
+
"@lingui/macro": "^5.3.0",
|
|
104
|
+
"@playwright/test": "^1.49.1",
|
|
105
|
+
"@types/node": "^22.13.14",
|
|
106
|
+
"@types/qrcode": "^1.5.5",
|
|
107
|
+
"@types/react": "^18.3.8",
|
|
108
|
+
"@types/react-dom": "^18.3.0",
|
|
109
|
+
"@types/react-grid-layout": "^1.3.5",
|
|
110
|
+
"@types/react-router-dom": "^5.3.3",
|
|
111
|
+
"@types/react-window": "^1.8.8",
|
|
112
|
+
"@vanilla-extract/vite-plugin": "^5.0.1",
|
|
113
|
+
"@vitejs/plugin-react": "^4.3.4",
|
|
114
|
+
"babel-plugin-macros": "^3.1.0",
|
|
115
|
+
"nyc": "^17.1.0",
|
|
116
|
+
"path": "^0.12.7",
|
|
117
|
+
"rollup": "^4.0.0",
|
|
118
|
+
"rollup-plugin-license": "^3.5.3",
|
|
119
|
+
"typescript": "^5.8.2",
|
|
120
|
+
"vite": "^6.2.4",
|
|
121
|
+
"vite-plugin-babel-macros": "^1.0.6",
|
|
122
|
+
"vite-plugin-dts": "^4.5.3",
|
|
123
|
+
"vite-plugin-istanbul": "^6.0.2"
|
|
124
|
+
}
|
|
125
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { type FullConfig, chromium } from '@playwright/test';
|
|
2
|
+
|
|
3
|
+
import fs from 'node:fs';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import { doCachedLogin } from '../tests/login';
|
|
6
|
+
|
|
7
|
+
async function globalSetup(config: FullConfig) {
|
|
8
|
+
const authDir = path.resolve('./playwright/auth');
|
|
9
|
+
|
|
10
|
+
if (fs.existsSync(authDir)) {
|
|
11
|
+
// Clear out the cached authentication states
|
|
12
|
+
fs.rm(path.resolve('./playwright/auth'), { recursive: true }, (err) => {
|
|
13
|
+
if (err) {
|
|
14
|
+
console.error('Failed to clear out cached authentication states:', err);
|
|
15
|
+
} else {
|
|
16
|
+
console.log('Removed cached authentication states');
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
// Perform login for each user
|
|
22
|
+
const browser = await chromium.launch();
|
|
23
|
+
|
|
24
|
+
await doCachedLogin(browser, {
|
|
25
|
+
username: 'admin',
|
|
26
|
+
password: 'inventree'
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
await doCachedLogin(browser, {
|
|
30
|
+
username: 'allaccess',
|
|
31
|
+
password: 'nolimits'
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
await doCachedLogin(browser, {
|
|
35
|
+
username: 'reader',
|
|
36
|
+
password: 'readonly'
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
await doCachedLogin(browser, {
|
|
40
|
+
username: 'steven',
|
|
41
|
+
password: 'wizardstaff'
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export default globalSetup;
|