@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,373 @@
|
|
|
1
|
+
import { expect } from '@playwright/test';
|
|
2
|
+
import { test } from '../baseFixtures.ts';
|
|
3
|
+
import {
|
|
4
|
+
activateCalendarView,
|
|
5
|
+
clearTableFilters,
|
|
6
|
+
getRowFromCell,
|
|
7
|
+
loadTab,
|
|
8
|
+
navigate,
|
|
9
|
+
setTableChoiceFilter
|
|
10
|
+
} from '../helpers.ts';
|
|
11
|
+
import { doCachedLogin } from '../login.ts';
|
|
12
|
+
|
|
13
|
+
test('Build Order - Basic Tests', async ({ browser }) => {
|
|
14
|
+
const page = await doCachedLogin(browser);
|
|
15
|
+
|
|
16
|
+
// Navigate to the correct build order
|
|
17
|
+
await page.getByRole('tab', { name: 'Manufacturing' }).click();
|
|
18
|
+
await page.waitForURL('**/manufacturing/index/**');
|
|
19
|
+
|
|
20
|
+
await loadTab(page, 'Build Orders');
|
|
21
|
+
|
|
22
|
+
await clearTableFilters(page);
|
|
23
|
+
|
|
24
|
+
// We have now loaded the "Build Order" table. Check for some expected texts
|
|
25
|
+
await page.getByText('On Hold').first().waitFor();
|
|
26
|
+
await page.getByText('Pending').first().waitFor();
|
|
27
|
+
|
|
28
|
+
// Load a particular build order
|
|
29
|
+
await page.getByRole('cell', { name: 'BO0017' }).click();
|
|
30
|
+
|
|
31
|
+
// This build order should be "on hold"
|
|
32
|
+
await page.getByText('On Hold').first().waitFor();
|
|
33
|
+
|
|
34
|
+
// Edit the build order (via keyboard shortcut)
|
|
35
|
+
await page.keyboard.press('Control+E');
|
|
36
|
+
await page.getByLabel('text-field-title').waitFor();
|
|
37
|
+
await page.getByLabel('related-field-project_code').waitFor();
|
|
38
|
+
await page.getByRole('button', { name: 'Cancel' }).click();
|
|
39
|
+
|
|
40
|
+
await page.getByRole('button', { name: 'Issue Order' }).click();
|
|
41
|
+
await page.getByRole('button', { name: 'Cancel' }).click();
|
|
42
|
+
|
|
43
|
+
// Back to the build list
|
|
44
|
+
await page.getByLabel('breadcrumb-0-manufacturing').click();
|
|
45
|
+
|
|
46
|
+
// Load a different build order
|
|
47
|
+
await page.getByRole('cell', { name: 'BO0011' }).click();
|
|
48
|
+
|
|
49
|
+
// This build order should be "in production"
|
|
50
|
+
await page.getByText('Production').first().waitFor();
|
|
51
|
+
await page.getByRole('button', { name: 'Complete Order' }).click();
|
|
52
|
+
await page.getByText('Accept Unallocated').waitFor();
|
|
53
|
+
await page.getByRole('button', { name: 'Cancel' }).click();
|
|
54
|
+
|
|
55
|
+
// Check for other expected actions
|
|
56
|
+
await page.getByLabel('action-menu-build-order-').click();
|
|
57
|
+
await page.getByLabel('action-menu-build-order-actions-edit').waitFor();
|
|
58
|
+
await page.getByLabel('action-menu-build-order-actions-duplicate').waitFor();
|
|
59
|
+
await page.getByLabel('action-menu-build-order-actions-hold').waitFor();
|
|
60
|
+
await page.getByLabel('action-menu-build-order-actions-cancel').click();
|
|
61
|
+
await page.getByText('Remove Incomplete Outputs').waitFor();
|
|
62
|
+
await page.getByRole('button', { name: 'Cancel' }).click();
|
|
63
|
+
|
|
64
|
+
// Click on some tabs
|
|
65
|
+
await loadTab(page, 'Attachments');
|
|
66
|
+
await loadTab(page, 'Notes');
|
|
67
|
+
await loadTab(page, 'Incomplete Outputs');
|
|
68
|
+
await loadTab(page, 'Line Items');
|
|
69
|
+
await loadTab(page, 'Allocated Stock');
|
|
70
|
+
|
|
71
|
+
// Check for expected text in the table
|
|
72
|
+
await page.getByText('R_10R_0402_1%').waitFor();
|
|
73
|
+
await page
|
|
74
|
+
.getByRole('cell', { name: 'R38, R39, R40, R41, R42, R43' })
|
|
75
|
+
.waitFor();
|
|
76
|
+
|
|
77
|
+
// Check "test results"
|
|
78
|
+
await loadTab(page, 'Test Results');
|
|
79
|
+
await page.getByText('Quantity: 25').waitFor();
|
|
80
|
+
await page.getByText('Continuity Checks').waitFor();
|
|
81
|
+
await page
|
|
82
|
+
.getByRole('row', { name: 'Quantity: 16 No location set' })
|
|
83
|
+
.getByRole('button')
|
|
84
|
+
.hover();
|
|
85
|
+
await page.getByText('Add Test Result').waitFor();
|
|
86
|
+
|
|
87
|
+
// Click through to the "parent" build
|
|
88
|
+
await loadTab(page, 'Build Details');
|
|
89
|
+
await page.getByRole('link', { name: 'BO0010' }).click();
|
|
90
|
+
await page
|
|
91
|
+
.getByLabel('Build Details')
|
|
92
|
+
.getByText('Making a high level assembly')
|
|
93
|
+
.waitFor();
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
test('Build Order - Calendar', async ({ browser }) => {
|
|
97
|
+
const page = await doCachedLogin(browser);
|
|
98
|
+
|
|
99
|
+
await navigate(page, 'manufacturing/index/buildorders');
|
|
100
|
+
await activateCalendarView(page);
|
|
101
|
+
|
|
102
|
+
// Export calendar data
|
|
103
|
+
await page.getByLabel('calendar-export-data').click();
|
|
104
|
+
await page.getByRole('button', { name: 'Export', exact: true }).click();
|
|
105
|
+
await page.getByText('Process completed successfully').waitFor();
|
|
106
|
+
|
|
107
|
+
// Check "part category" filter
|
|
108
|
+
await page.getByLabel('calendar-select-filters').click();
|
|
109
|
+
await page.getByRole('button', { name: 'Add Filter' }).click();
|
|
110
|
+
await page.getByPlaceholder('Select filter').fill('category');
|
|
111
|
+
await page.getByRole('option', { name: 'Category', exact: true }).click();
|
|
112
|
+
await page.getByLabel('related-field-filter-category').click();
|
|
113
|
+
await page.getByText('Part category, level 1').waitFor();
|
|
114
|
+
|
|
115
|
+
// Required because we downloaded a file
|
|
116
|
+
await page.context().close();
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
test('Build Order - Edit', async ({ browser }) => {
|
|
120
|
+
const page = await doCachedLogin(browser);
|
|
121
|
+
|
|
122
|
+
await navigate(page, 'manufacturing/build-order/22/');
|
|
123
|
+
|
|
124
|
+
// Check for expected text items
|
|
125
|
+
await page.getByText('Building for sales order').first().waitFor();
|
|
126
|
+
await page.getByText('2024-08-08').waitFor(); // Created date
|
|
127
|
+
await page.getByText('2025-01-01').waitFor(); // Start date
|
|
128
|
+
await page.getByText('2025-01-22').waitFor(); // Target date
|
|
129
|
+
|
|
130
|
+
await page.keyboard.press('Control+E');
|
|
131
|
+
|
|
132
|
+
// Edit start date
|
|
133
|
+
await page.getByLabel('date-field-start_date').fill('2026-09-09');
|
|
134
|
+
|
|
135
|
+
// Submit the form
|
|
136
|
+
await page.getByRole('button', { name: 'Submit' }).click();
|
|
137
|
+
|
|
138
|
+
// Expect error
|
|
139
|
+
await page.getByText('Errors exist for one or more form fields').waitFor();
|
|
140
|
+
await page.getByText('Target date must be after start date').waitFor();
|
|
141
|
+
|
|
142
|
+
// Cancel the form
|
|
143
|
+
await page.getByRole('button', { name: 'Cancel' }).click();
|
|
144
|
+
});
|
|
145
|
+
|
|
146
|
+
test('Build Order - Build Outputs', async ({ browser }) => {
|
|
147
|
+
const page = await doCachedLogin(browser);
|
|
148
|
+
|
|
149
|
+
await navigate(page, 'manufacturing/index/');
|
|
150
|
+
await loadTab(page, 'Build Orders');
|
|
151
|
+
|
|
152
|
+
await clearTableFilters(page);
|
|
153
|
+
|
|
154
|
+
// We have now loaded the "Build Order" table. Check for some expected texts
|
|
155
|
+
await page.getByText('On Hold').first().waitFor();
|
|
156
|
+
await page.getByText('Pending').first().waitFor();
|
|
157
|
+
|
|
158
|
+
await page.getByRole('cell', { name: 'BO0011' }).click();
|
|
159
|
+
await loadTab(page, 'Incomplete Outputs');
|
|
160
|
+
|
|
161
|
+
// Create a new build output
|
|
162
|
+
await page.getByLabel('action-button-add-build-output').click();
|
|
163
|
+
await page.getByLabel('number-field-quantity').fill('5');
|
|
164
|
+
|
|
165
|
+
const placeholder = await page
|
|
166
|
+
.getByLabel('text-field-serial_numbers')
|
|
167
|
+
.getAttribute('placeholder');
|
|
168
|
+
|
|
169
|
+
let sn = 1;
|
|
170
|
+
|
|
171
|
+
if (!!placeholder && placeholder.includes('Next serial number')) {
|
|
172
|
+
sn = Number.parseInt(placeholder.split(':')[1].trim());
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
// Generate some new serial numbers
|
|
176
|
+
await page.getByLabel('text-field-serial_numbers').fill(`${sn}, ${sn + 1}`);
|
|
177
|
+
|
|
178
|
+
await page.getByLabel('text-field-batch_code').fill('BATCH12345');
|
|
179
|
+
await page.getByLabel('related-field-location').click();
|
|
180
|
+
await page.getByText('Reel Storage').click();
|
|
181
|
+
await page.getByRole('button', { name: 'Submit' }).click();
|
|
182
|
+
|
|
183
|
+
// Should be an error as the number of serial numbers doesn't match the quantity
|
|
184
|
+
await page.getByText('Errors exist for one or more').waitFor();
|
|
185
|
+
await page.getByText('Number of unique serial').waitFor();
|
|
186
|
+
|
|
187
|
+
// Fix the quantity
|
|
188
|
+
await page.getByLabel('number-field-quantity').fill('2');
|
|
189
|
+
await page.waitForTimeout(250);
|
|
190
|
+
await page.getByRole('button', { name: 'Submit' }).click();
|
|
191
|
+
|
|
192
|
+
// Check that new serial numbers have been created
|
|
193
|
+
await page
|
|
194
|
+
.getByRole('cell', { name: `# ${sn}` })
|
|
195
|
+
.first()
|
|
196
|
+
.waitFor();
|
|
197
|
+
await page
|
|
198
|
+
.getByRole('cell', { name: `# ${sn + 1}` })
|
|
199
|
+
.first()
|
|
200
|
+
.waitFor();
|
|
201
|
+
|
|
202
|
+
// Cancel one of the newly created outputs
|
|
203
|
+
const cell = await page.getByRole('cell', { name: `# ${sn}` });
|
|
204
|
+
const row = await getRowFromCell(cell);
|
|
205
|
+
await row.getByLabel(/row-action-menu-/i).click();
|
|
206
|
+
await page.getByRole('menuitem', { name: 'Cancel' }).click();
|
|
207
|
+
await page.getByRole('button', { name: 'Submit' }).click();
|
|
208
|
+
await page.getByText('Build outputs have been cancelled').waitFor();
|
|
209
|
+
|
|
210
|
+
// Complete the other output
|
|
211
|
+
const cell2 = await page.getByRole('cell', { name: `# ${sn + 1}` });
|
|
212
|
+
const row2 = await getRowFromCell(cell2);
|
|
213
|
+
await row2.getByLabel(/row-action-menu-/i).click();
|
|
214
|
+
await page.getByRole('menuitem', { name: 'Complete' }).click();
|
|
215
|
+
await page.getByLabel('related-field-location').click();
|
|
216
|
+
await page.getByText('Mechanical Lab').click();
|
|
217
|
+
await page.waitForTimeout(250);
|
|
218
|
+
await page.getByRole('button', { name: 'Submit' }).click();
|
|
219
|
+
await page.getByText('Build outputs have been completed').waitFor();
|
|
220
|
+
});
|
|
221
|
+
|
|
222
|
+
test('Build Order - Allocation', async ({ browser }) => {
|
|
223
|
+
const page = await doCachedLogin(browser);
|
|
224
|
+
|
|
225
|
+
await navigate(page, 'manufacturing/build-order/1/line-items');
|
|
226
|
+
|
|
227
|
+
// Expand the R_10K_0805 line item
|
|
228
|
+
await page.getByText('R_10K_0805_1%').first().click();
|
|
229
|
+
await page.getByText('Reel Storage').waitFor();
|
|
230
|
+
await page.getByText('R_10K_0805_1%').first().click();
|
|
231
|
+
|
|
232
|
+
// The capacitor stock should be fully allocated
|
|
233
|
+
const cell = await page.getByRole('cell', { name: /C_1uF_0805/ });
|
|
234
|
+
const row = await getRowFromCell(cell);
|
|
235
|
+
|
|
236
|
+
await row.getByText(/150 \/ 150/).waitFor();
|
|
237
|
+
|
|
238
|
+
// Expand this row
|
|
239
|
+
await cell.click();
|
|
240
|
+
await page.getByRole('cell', { name: '2022-4-27', exact: true }).waitFor();
|
|
241
|
+
await page.getByRole('cell', { name: 'Reel Storage', exact: true }).waitFor();
|
|
242
|
+
|
|
243
|
+
// Navigate to the "Incomplete Outputs" tab
|
|
244
|
+
await loadTab(page, 'Incomplete Outputs');
|
|
245
|
+
|
|
246
|
+
// Find output #7
|
|
247
|
+
const output7 = await page
|
|
248
|
+
.getByRole('cell', { name: '# 7' })
|
|
249
|
+
.locator('xpath=ancestor::tr')
|
|
250
|
+
.first();
|
|
251
|
+
|
|
252
|
+
// Expecting 3/4 allocated outputs
|
|
253
|
+
await output7.getByText('3 / 4').waitFor();
|
|
254
|
+
|
|
255
|
+
// Expecting 0/3 completed tests
|
|
256
|
+
await output7.getByText('0 / 3').waitFor();
|
|
257
|
+
|
|
258
|
+
// Expand the output
|
|
259
|
+
await output7.click();
|
|
260
|
+
|
|
261
|
+
await page.getByText('Build Output Stock Allocation').waitFor();
|
|
262
|
+
await page.getByText('Serial Number: 7').waitFor();
|
|
263
|
+
|
|
264
|
+
// Data of expected rows
|
|
265
|
+
const data = [
|
|
266
|
+
{
|
|
267
|
+
name: 'Red Widget',
|
|
268
|
+
ipn: 'widget.red',
|
|
269
|
+
available: '123',
|
|
270
|
+
required: '3',
|
|
271
|
+
allocated: '3'
|
|
272
|
+
},
|
|
273
|
+
{
|
|
274
|
+
name: 'Blue Widget',
|
|
275
|
+
ipn: 'widget.blue',
|
|
276
|
+
available: '39',
|
|
277
|
+
required: '5',
|
|
278
|
+
allocated: '5'
|
|
279
|
+
},
|
|
280
|
+
{
|
|
281
|
+
name: 'Pink Widget',
|
|
282
|
+
ipn: 'widget.pink',
|
|
283
|
+
available: '4',
|
|
284
|
+
required: '4',
|
|
285
|
+
allocated: '0'
|
|
286
|
+
},
|
|
287
|
+
{
|
|
288
|
+
name: 'Green Widget',
|
|
289
|
+
ipn: 'widget.green',
|
|
290
|
+
available: '245',
|
|
291
|
+
required: '6',
|
|
292
|
+
allocated: '6'
|
|
293
|
+
}
|
|
294
|
+
];
|
|
295
|
+
|
|
296
|
+
// Check for expected rows
|
|
297
|
+
for (let idx = 0; idx < data.length; idx++) {
|
|
298
|
+
const item = data[idx];
|
|
299
|
+
|
|
300
|
+
const cell = await page.getByRole('cell', { name: item.name });
|
|
301
|
+
const row = await getRowFromCell(cell);
|
|
302
|
+
const progress = `${item.allocated} / ${item.required}`;
|
|
303
|
+
|
|
304
|
+
await row.getByRole('cell', { name: item.ipn }).first().waitFor();
|
|
305
|
+
await row.getByRole('cell', { name: item.available }).first().waitFor();
|
|
306
|
+
await row.getByRole('cell', { name: progress }).first().waitFor();
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
// Check for expected buttons on Red Widget
|
|
310
|
+
const redWidget = await page.getByRole('cell', { name: 'Red Widget' });
|
|
311
|
+
const redRow = await redWidget.locator('xpath=ancestor::tr').first();
|
|
312
|
+
|
|
313
|
+
await redRow.getByLabel(/row-action-menu-/i).click();
|
|
314
|
+
await page
|
|
315
|
+
.getByRole('menuitem', { name: 'Allocate Stock', exact: true })
|
|
316
|
+
.waitFor();
|
|
317
|
+
await page
|
|
318
|
+
.getByRole('menuitem', { name: 'Deallocate Stock', exact: true })
|
|
319
|
+
.waitFor();
|
|
320
|
+
});
|
|
321
|
+
|
|
322
|
+
test('Build Order - Filters', async ({ browser }) => {
|
|
323
|
+
const page = await doCachedLogin(browser);
|
|
324
|
+
|
|
325
|
+
await navigate(page, 'manufacturing/index/buildorders');
|
|
326
|
+
|
|
327
|
+
await clearTableFilters(page);
|
|
328
|
+
|
|
329
|
+
// Check for expected pagination text i.e. (1 - 24 / 24)
|
|
330
|
+
// Note: Due to other concurrent tests, the number of build orders may vary
|
|
331
|
+
await page.getByText(/1 - \d+ \/ \d+/).waitFor();
|
|
332
|
+
await page.getByRole('cell', { name: 'BO0023' }).waitFor();
|
|
333
|
+
|
|
334
|
+
// Toggle 'Outstanding' filter
|
|
335
|
+
await setTableChoiceFilter(page, 'Outstanding', 'Yes');
|
|
336
|
+
await page.getByRole('cell', { name: 'BO0017' }).waitFor();
|
|
337
|
+
|
|
338
|
+
await clearTableFilters(page);
|
|
339
|
+
await setTableChoiceFilter(page, 'Outstanding', 'No');
|
|
340
|
+
|
|
341
|
+
await page.getByText('1 - 6 / 6').waitFor();
|
|
342
|
+
|
|
343
|
+
await clearTableFilters(page);
|
|
344
|
+
|
|
345
|
+
// Filter by custom status code
|
|
346
|
+
await setTableChoiceFilter(page, 'Status', 'Pending Approval');
|
|
347
|
+
|
|
348
|
+
// Single result - navigate through to the build order
|
|
349
|
+
await page.getByText('1 - 1 / 1').waitFor();
|
|
350
|
+
await page.getByRole('cell', { name: 'BO0023' }).click();
|
|
351
|
+
|
|
352
|
+
await page.getByText('On Hold').first().waitFor();
|
|
353
|
+
await page.getByText('Pending Approval').first().waitFor();
|
|
354
|
+
});
|
|
355
|
+
|
|
356
|
+
test('Build Order - Duplicate', async ({ browser }) => {
|
|
357
|
+
const page = await doCachedLogin(browser);
|
|
358
|
+
|
|
359
|
+
await navigate(page, 'manufacturing/build-order/24/details');
|
|
360
|
+
await page.getByLabel('action-menu-build-order-').click();
|
|
361
|
+
await page.getByLabel('action-menu-build-order-actions-duplicate').click();
|
|
362
|
+
|
|
363
|
+
// Ensure a new reference is suggested
|
|
364
|
+
await expect(page.getByLabel('text-field-reference')).not.toBeEmpty();
|
|
365
|
+
|
|
366
|
+
// Submit the duplicate request and ensure it completes
|
|
367
|
+
await page.getByRole('button', { name: 'Submit' }).isEnabled();
|
|
368
|
+
await page.getByRole('button', { name: 'Submit' }).click();
|
|
369
|
+
await page.getByRole('tab', { name: 'Build Details' }).waitFor();
|
|
370
|
+
await page.getByRole('tab', { name: 'Build Details' }).click();
|
|
371
|
+
|
|
372
|
+
await page.getByText('Pending').first().waitFor();
|
|
373
|
+
});
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { test } from '../baseFixtures.js';
|
|
2
|
+
import { loadTab, navigate } from '../helpers.js';
|
|
3
|
+
import { doCachedLogin } from '../login.js';
|
|
4
|
+
|
|
5
|
+
test('Company', async ({ browser }) => {
|
|
6
|
+
const page = await doCachedLogin(browser);
|
|
7
|
+
|
|
8
|
+
await navigate(page, 'company/1/details');
|
|
9
|
+
await page.getByLabel('Details').getByText('DigiKey Electronics').waitFor();
|
|
10
|
+
await page.getByRole('cell', { name: 'https://www.digikey.com/' }).waitFor();
|
|
11
|
+
await loadTab(page, 'Supplied Parts');
|
|
12
|
+
await page
|
|
13
|
+
.getByRole('cell', { name: 'RR05P100KDTR-ND', exact: true })
|
|
14
|
+
.waitFor();
|
|
15
|
+
await loadTab(page, 'Purchase Orders');
|
|
16
|
+
await page.getByRole('cell', { name: 'Molex connectors' }).first().waitFor();
|
|
17
|
+
await loadTab(page, 'Stock Items');
|
|
18
|
+
await page
|
|
19
|
+
.getByRole('cell', { name: 'Blue plastic enclosure' })
|
|
20
|
+
.first()
|
|
21
|
+
.waitFor();
|
|
22
|
+
await loadTab(page, 'Contacts');
|
|
23
|
+
await page.getByRole('cell', { name: 'jimmy.mcleod@digikey.com' }).waitFor();
|
|
24
|
+
await loadTab(page, 'Addresses');
|
|
25
|
+
await page.getByRole('cell', { name: 'Carla Tunnel' }).waitFor();
|
|
26
|
+
await loadTab(page, 'Attachments');
|
|
27
|
+
await loadTab(page, 'Notes');
|
|
28
|
+
|
|
29
|
+
// Let's edit the company details
|
|
30
|
+
await page.getByLabel('action-menu-company-actions').click();
|
|
31
|
+
await page.getByLabel('action-menu-company-actions-edit').click();
|
|
32
|
+
|
|
33
|
+
await page.getByLabel('text-field-name').fill('');
|
|
34
|
+
await page.getByLabel('text-field-website').fill('invalid-website');
|
|
35
|
+
await page.getByRole('button', { name: 'Submit' }).click();
|
|
36
|
+
|
|
37
|
+
await page.getByText('This field may not be blank.').waitFor();
|
|
38
|
+
await page.getByText('Enter a valid URL.').waitFor();
|
|
39
|
+
await page.getByRole('button', { name: 'Cancel' }).click();
|
|
40
|
+
});
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { test } from '../baseFixtures.js';
|
|
2
|
+
import { loadTab, navigate } from '../helpers.js';
|
|
3
|
+
import { doCachedLogin } from '../login.js';
|
|
4
|
+
|
|
5
|
+
test('Core User/Group/Contact', async ({ browser }) => {
|
|
6
|
+
const page = await doCachedLogin(browser);
|
|
7
|
+
|
|
8
|
+
// groups
|
|
9
|
+
await navigate(page, '/core');
|
|
10
|
+
await page.getByText('System Overview', { exact: true }).first().click();
|
|
11
|
+
await loadTab(page, 'Groups');
|
|
12
|
+
await page.getByRole('cell', { name: 'all access' }).click();
|
|
13
|
+
await page.getByText('Group: all access', { exact: true }).click();
|
|
14
|
+
await page.getByLabel('breadcrumb-1-groups').click();
|
|
15
|
+
|
|
16
|
+
// users
|
|
17
|
+
await loadTab(page, 'Users');
|
|
18
|
+
await page.getByRole('cell', { name: 'admin' }).click();
|
|
19
|
+
await page.getByText('User: admin', { exact: true }).waitFor();
|
|
20
|
+
await page.getByLabel('User Details').waitFor();
|
|
21
|
+
await page.getByLabel('breadcrumb-1-users').click();
|
|
22
|
+
|
|
23
|
+
// contacts
|
|
24
|
+
await loadTab(page, 'Contacts');
|
|
25
|
+
await page.getByRole('cell', { name: 'Adrian Briggs' }).waitFor();
|
|
26
|
+
});
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { test } from '../baseFixtures.js';
|
|
2
|
+
import { doCachedLogin } from '../login.js';
|
|
3
|
+
import { setPluginState } from '../settings.js';
|
|
4
|
+
|
|
5
|
+
test('Dashboard - Basic', async ({ browser }) => {
|
|
6
|
+
const page = await doCachedLogin(browser);
|
|
7
|
+
|
|
8
|
+
await page.getByText('Use the menu to add widgets').waitFor();
|
|
9
|
+
|
|
10
|
+
// Let's add some widgets
|
|
11
|
+
await page.getByLabel('dashboard-menu').click();
|
|
12
|
+
await page.getByRole('menuitem', { name: 'Add Widget' }).click();
|
|
13
|
+
await page.getByLabel('dashboard-widgets-filter-input').fill('overdue order');
|
|
14
|
+
|
|
15
|
+
await page.getByLabel('add-widget-ovr-so').click();
|
|
16
|
+
await page.getByLabel('add-widget-ovr-po').click();
|
|
17
|
+
|
|
18
|
+
await page.getByLabel('dashboard-widgets-filter-clear').click();
|
|
19
|
+
|
|
20
|
+
// Close the widget
|
|
21
|
+
await page.getByRole('banner').getByRole('button').click();
|
|
22
|
+
|
|
23
|
+
await page.waitForTimeout(500);
|
|
24
|
+
|
|
25
|
+
// Check that the widgets are visible
|
|
26
|
+
await page.getByText('Overdue Sales Orders').waitFor();
|
|
27
|
+
await page.getByText('Overdue Purchase Orders').waitFor();
|
|
28
|
+
|
|
29
|
+
// Let's remove one of the widgets
|
|
30
|
+
await page.getByLabel('dashboard-menu').click();
|
|
31
|
+
await page.getByRole('menuitem', { name: 'Remove Widgets' }).click();
|
|
32
|
+
await page.getByLabel('remove-dashboard-item-ovr-so').click();
|
|
33
|
+
|
|
34
|
+
// Accept the layout
|
|
35
|
+
await page.getByLabel('dashboard-accept-layout').click();
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
test('Dashboard - Plugins', async ({ browser, request }) => {
|
|
39
|
+
// Ensure that the "SampleUI" plugin is enabled
|
|
40
|
+
await setPluginState({
|
|
41
|
+
request,
|
|
42
|
+
plugin: 'sampleui',
|
|
43
|
+
state: true
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
const page = await doCachedLogin(browser);
|
|
47
|
+
|
|
48
|
+
// Add a dashboard widget from the SampleUI plugin
|
|
49
|
+
await page.getByLabel('dashboard-menu').click();
|
|
50
|
+
await page.getByRole('menuitem', { name: 'Add Widget' }).click();
|
|
51
|
+
await page.getByLabel('dashboard-widgets-filter-input').fill('sample');
|
|
52
|
+
|
|
53
|
+
// Add the widget
|
|
54
|
+
await page.getByLabel(/add-widget-p-sampleui-sample-/).click();
|
|
55
|
+
|
|
56
|
+
// Close the widget
|
|
57
|
+
await page.getByRole('banner').getByRole('button').click();
|
|
58
|
+
|
|
59
|
+
await page.waitForTimeout(500);
|
|
60
|
+
|
|
61
|
+
// Check that the widget is visible
|
|
62
|
+
await page.getByRole('heading', { name: 'Sample Dashboard Item' }).waitFor();
|
|
63
|
+
await page.getByText('Hello world! This is a sample').waitFor();
|
|
64
|
+
});
|