@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,413 @@
|
|
|
1
|
+
import { test } from '../baseFixtures';
|
|
2
|
+
import {
|
|
3
|
+
clearTableFilters,
|
|
4
|
+
getRowFromCell,
|
|
5
|
+
loadTab,
|
|
6
|
+
navigate
|
|
7
|
+
} from '../helpers';
|
|
8
|
+
import { doCachedLogin } from '../login';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* CHeck each panel tab for the "Parts" page
|
|
12
|
+
*/
|
|
13
|
+
test('Parts - Tabs', async ({ browser }) => {
|
|
14
|
+
const page = await doCachedLogin(browser);
|
|
15
|
+
|
|
16
|
+
await page.getByRole('tab', { name: 'Parts' }).click();
|
|
17
|
+
await page.waitForURL('**/part/category/index/**');
|
|
18
|
+
|
|
19
|
+
await page
|
|
20
|
+
.getByLabel('panel-tabs-partcategory')
|
|
21
|
+
.getByRole('tab', { name: 'Parts' })
|
|
22
|
+
.click();
|
|
23
|
+
|
|
24
|
+
// Select a particular part from the table
|
|
25
|
+
await clearTableFilters(page);
|
|
26
|
+
await page.getByPlaceholder('Search').fill('1551');
|
|
27
|
+
await page.waitForLoadState('networkidle');
|
|
28
|
+
await page.getByText('1551ABK').click();
|
|
29
|
+
|
|
30
|
+
await loadTab(page, 'Allocations');
|
|
31
|
+
await loadTab(page, 'Used In');
|
|
32
|
+
await loadTab(page, 'Pricing');
|
|
33
|
+
await loadTab(page, 'Suppliers');
|
|
34
|
+
await loadTab(page, 'Purchase Orders');
|
|
35
|
+
await loadTab(page, 'Scheduling');
|
|
36
|
+
await loadTab(page, 'Stock History');
|
|
37
|
+
await loadTab(page, 'Attachments');
|
|
38
|
+
await loadTab(page, 'Notes');
|
|
39
|
+
await loadTab(page, 'Related Parts');
|
|
40
|
+
|
|
41
|
+
// Related Parts
|
|
42
|
+
await page.getByText('1551ACLR').click();
|
|
43
|
+
await loadTab(page, 'Part Details');
|
|
44
|
+
await loadTab(page, 'Parameters');
|
|
45
|
+
|
|
46
|
+
await page
|
|
47
|
+
.getByLabel('panel-tabs-part')
|
|
48
|
+
.getByRole('tab', { name: 'Stock', exact: true })
|
|
49
|
+
.click();
|
|
50
|
+
|
|
51
|
+
await loadTab(page, 'Allocations');
|
|
52
|
+
await loadTab(page, 'Used In');
|
|
53
|
+
await loadTab(page, 'Pricing');
|
|
54
|
+
|
|
55
|
+
await navigate(page, 'part/category/index/parts');
|
|
56
|
+
await page.getByText('Blue Chair').click();
|
|
57
|
+
await loadTab(page, 'Bill of Materials');
|
|
58
|
+
await loadTab(page, 'Build Orders');
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
test('Parts - Manufacturer Parts', async ({ browser }) => {
|
|
62
|
+
const page = await doCachedLogin(browser, { url: 'part/84/suppliers' });
|
|
63
|
+
|
|
64
|
+
await loadTab(page, 'Suppliers');
|
|
65
|
+
await page.getByText('Hammond Manufacturing').click();
|
|
66
|
+
await loadTab(page, 'Parameters');
|
|
67
|
+
await loadTab(page, 'Suppliers');
|
|
68
|
+
await loadTab(page, 'Attachments');
|
|
69
|
+
await page.getByText('1551ACLR - 1551ACLR').waitFor();
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
test('Parts - Supplier Parts', async ({ browser }) => {
|
|
73
|
+
const page = await doCachedLogin(browser, { url: 'part/15/suppliers' });
|
|
74
|
+
|
|
75
|
+
await loadTab(page, 'Suppliers');
|
|
76
|
+
await page.getByRole('cell', { name: 'DIG-84670-SJI' }).click();
|
|
77
|
+
await loadTab(page, 'Received Stock'); //
|
|
78
|
+
await loadTab(page, 'Purchase Orders');
|
|
79
|
+
await loadTab(page, 'Pricing');
|
|
80
|
+
await page.getByText('DIG-84670-SJI - R_550R_0805_1%').waitFor();
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
test('Parts - Locking', async ({ browser }) => {
|
|
84
|
+
const page = await doCachedLogin(browser, { url: 'part/104/bom' });
|
|
85
|
+
await loadTab(page, 'Bill of Materials');
|
|
86
|
+
await page.getByLabel('action-button-add-bom-item').waitFor();
|
|
87
|
+
await loadTab(page, 'Parameters');
|
|
88
|
+
await page.getByLabel('action-button-add-parameter').waitFor();
|
|
89
|
+
|
|
90
|
+
// Navigate to a known assembly which *is* locked
|
|
91
|
+
await navigate(page, 'part/100/bom');
|
|
92
|
+
await loadTab(page, 'Bill of Materials');
|
|
93
|
+
await page.getByLabel('part-lock-icon').waitFor();
|
|
94
|
+
await page.getByText('Part is Locked', { exact: true }).waitFor();
|
|
95
|
+
|
|
96
|
+
// Check expected "badge" values
|
|
97
|
+
await page.getByText('In Stock: 13').waitFor();
|
|
98
|
+
await page.getByText('Required: 10').waitFor();
|
|
99
|
+
await page.getByText('In Production: 50').waitFor();
|
|
100
|
+
|
|
101
|
+
// Check the "parameters" tab also
|
|
102
|
+
await loadTab(page, 'Parameters');
|
|
103
|
+
await page.getByText('Part parameters cannot be').waitFor();
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
test('Parts - Allocations', async ({ browser }) => {
|
|
107
|
+
// Let's look at the allocations for a single stock item
|
|
108
|
+
const page = await doCachedLogin(browser, { url: 'stock/item/324/' });
|
|
109
|
+
await loadTab(page, 'Allocations');
|
|
110
|
+
|
|
111
|
+
await page.getByRole('button', { name: 'Build Order Allocations' }).waitFor();
|
|
112
|
+
await page.getByRole('cell', { name: 'Making some blue chairs' }).waitFor();
|
|
113
|
+
await page.getByRole('cell', { name: 'Making tables for SO 0003' }).waitFor();
|
|
114
|
+
|
|
115
|
+
// Let's look at the allocations for an entire part
|
|
116
|
+
await navigate(page, 'part/74/details');
|
|
117
|
+
|
|
118
|
+
// Check that the overall allocations are displayed correctly
|
|
119
|
+
await page.getByText('11 / ').waitFor();
|
|
120
|
+
await page.getByText('5 / ').waitFor();
|
|
121
|
+
|
|
122
|
+
// Navigate to the "Allocations" tab
|
|
123
|
+
await loadTab(page, 'Allocations');
|
|
124
|
+
|
|
125
|
+
await page.getByRole('button', { name: 'Build Order Allocations' }).waitFor();
|
|
126
|
+
await page.getByRole('button', { name: 'Sales Order Allocations' }).waitFor();
|
|
127
|
+
|
|
128
|
+
// Expected order reference values
|
|
129
|
+
await page.getByText('BO0001').waitFor();
|
|
130
|
+
await page.getByText('BO0016').waitFor();
|
|
131
|
+
await page.getByText('BO0019').waitFor();
|
|
132
|
+
await page.getByText('SO0008').waitFor();
|
|
133
|
+
await page.getByText('SO0025').waitFor();
|
|
134
|
+
|
|
135
|
+
// Check "progress" bar of BO0001
|
|
136
|
+
const build_order_cell = await page.getByRole('cell', { name: 'BO0001' });
|
|
137
|
+
const build_order_row = await getRowFromCell(build_order_cell);
|
|
138
|
+
await build_order_row.getByText('11 / 75').waitFor();
|
|
139
|
+
|
|
140
|
+
// Expand allocations against BO0001
|
|
141
|
+
await build_order_cell.click();
|
|
142
|
+
await page.getByRole('cell', { name: '# 3', exact: true }).waitFor();
|
|
143
|
+
await page.getByRole('cell', { name: 'Room 101', exact: true }).waitFor();
|
|
144
|
+
await build_order_cell.click();
|
|
145
|
+
|
|
146
|
+
// Check row options for BO0001
|
|
147
|
+
await build_order_row.getByLabel(/row-action-menu/).click();
|
|
148
|
+
await page.getByRole('menuitem', { name: 'View Build Order' }).waitFor();
|
|
149
|
+
await page.keyboard.press('Escape');
|
|
150
|
+
|
|
151
|
+
// Check "progress" bar of SO0025
|
|
152
|
+
const sales_order_cell = await page.getByRole('cell', { name: 'SO0025' });
|
|
153
|
+
const sales_order_row = await getRowFromCell(sales_order_cell);
|
|
154
|
+
await sales_order_row.getByText('3 / 10').waitFor();
|
|
155
|
+
|
|
156
|
+
// Expand allocations against SO0025
|
|
157
|
+
await sales_order_cell.click();
|
|
158
|
+
await page.getByRole('cell', { name: '161', exact: true });
|
|
159
|
+
await page.getByRole('cell', { name: '169', exact: true });
|
|
160
|
+
await page.getByRole('cell', { name: '170', exact: true });
|
|
161
|
+
await sales_order_cell.click();
|
|
162
|
+
|
|
163
|
+
// Check row options for SO0025
|
|
164
|
+
await sales_order_row.getByLabel(/row-action-menu/).click();
|
|
165
|
+
await page.getByRole('menuitem', { name: 'View Sales Order' }).waitFor();
|
|
166
|
+
await page.keyboard.press('Escape');
|
|
167
|
+
});
|
|
168
|
+
|
|
169
|
+
test('Parts - Pricing (Nothing, BOM)', async ({ browser }) => {
|
|
170
|
+
// Part with no history
|
|
171
|
+
const page = await doCachedLogin(browser, { url: 'part/82/pricing' });
|
|
172
|
+
|
|
173
|
+
await page.getByText('Small plastic enclosure, black').waitFor();
|
|
174
|
+
await loadTab(page, 'Part Pricing');
|
|
175
|
+
await page.getByLabel('Part Pricing').getByText('Part Pricing').waitFor();
|
|
176
|
+
await page.getByRole('button', { name: 'Pricing Overview' }).waitFor();
|
|
177
|
+
await page.getByText('Last Updated').waitFor();
|
|
178
|
+
await page.getByRole('button', { name: 'Purchase History' }).isDisabled();
|
|
179
|
+
await page.getByRole('button', { name: 'Internal Pricing' }).isDisabled();
|
|
180
|
+
await page.getByRole('button', { name: 'Supplier Pricing' }).isDisabled();
|
|
181
|
+
|
|
182
|
+
// Part with history
|
|
183
|
+
await navigate(page, 'part/108/pricing');
|
|
184
|
+
await page.getByText('A chair - with blue paint').waitFor();
|
|
185
|
+
await loadTab(page, 'Part Pricing');
|
|
186
|
+
await page.getByLabel('Part Pricing').getByText('Part Pricing').waitFor();
|
|
187
|
+
await page.getByRole('button', { name: 'Pricing Overview' }).waitFor();
|
|
188
|
+
await page.getByText('Last Updated').waitFor();
|
|
189
|
+
await page.getByRole('button', { name: 'Internal Pricing' }).isDisabled();
|
|
190
|
+
await page.getByRole('button', { name: 'Sale History' }).isDisabled();
|
|
191
|
+
await page.getByRole('button', { name: 'Sale Pricing' }).isDisabled();
|
|
192
|
+
await page.getByRole('button', { name: 'BOM Pricing' }).isEnabled();
|
|
193
|
+
|
|
194
|
+
// Overview Graph
|
|
195
|
+
const graph = page.getByLabel('pricing-overview-chart');
|
|
196
|
+
await graph.waitFor();
|
|
197
|
+
await graph.getByText('$60').waitFor();
|
|
198
|
+
await graph.locator('tspan').filter({ hasText: 'BOM Pricing' }).waitFor();
|
|
199
|
+
await graph.locator('tspan').filter({ hasText: 'Overall Pricing' }).waitFor();
|
|
200
|
+
|
|
201
|
+
// BOM Pricing
|
|
202
|
+
await page.getByRole('button', { name: 'BOM Pricing' }).click();
|
|
203
|
+
await page.getByText('Bar Chart').click();
|
|
204
|
+
await page.getByText('Pie Chart').click();
|
|
205
|
+
await page.getByRole('button', { name: 'Quantity Not sorted' }).waitFor();
|
|
206
|
+
await page.getByRole('button', { name: 'Unit Price Not sorted' }).waitFor();
|
|
207
|
+
|
|
208
|
+
// BOM Pricing - linkjumping
|
|
209
|
+
await page
|
|
210
|
+
.getByLabel('BOM Pricing')
|
|
211
|
+
.getByRole('table')
|
|
212
|
+
.getByText('Wood Screw')
|
|
213
|
+
.click();
|
|
214
|
+
await page.waitForURL('**/part/98/**');
|
|
215
|
+
});
|
|
216
|
+
|
|
217
|
+
test('Parts - Pricing (Supplier)', async ({ browser }) => {
|
|
218
|
+
const page = await doCachedLogin(browser, { url: 'part/55/pricing' });
|
|
219
|
+
|
|
220
|
+
await page.getByText('Ceramic capacitor, 100nF in').waitFor();
|
|
221
|
+
await loadTab(page, 'Part Pricing');
|
|
222
|
+
await page.getByLabel('Part Pricing').getByText('Part Pricing').waitFor();
|
|
223
|
+
await page.getByRole('button', { name: 'Pricing Overview' }).waitFor();
|
|
224
|
+
await page.getByText('Last Updated').waitFor();
|
|
225
|
+
await page.getByRole('button', { name: 'Purchase History' }).isEnabled();
|
|
226
|
+
await page.getByRole('button', { name: 'Internal Pricing' }).isDisabled();
|
|
227
|
+
await page.getByRole('button', { name: 'Supplier Pricing' }).isEnabled();
|
|
228
|
+
|
|
229
|
+
// Supplier Pricing
|
|
230
|
+
await page.getByRole('button', { name: 'Supplier Pricing' }).click();
|
|
231
|
+
await page.waitForTimeout(500);
|
|
232
|
+
await page.getByRole('button', { name: 'SKU Not sorted' }).waitFor();
|
|
233
|
+
|
|
234
|
+
// Supplier Pricing - linkjumping
|
|
235
|
+
const target = page.getByText('ARR-26041-LPC').first();
|
|
236
|
+
await target.waitFor();
|
|
237
|
+
await target.click();
|
|
238
|
+
// await page.waitForURL('**/purchasing/supplier-part/697/');
|
|
239
|
+
});
|
|
240
|
+
|
|
241
|
+
test('Parts - Pricing (Variant)', async ({ browser }) => {
|
|
242
|
+
const page = await doCachedLogin(browser, { url: 'part/106/pricing' });
|
|
243
|
+
await page.getByText('A chair - available in multiple colors').waitFor();
|
|
244
|
+
await loadTab(page, 'Part Pricing');
|
|
245
|
+
await page.getByLabel('Part Pricing').getByText('Part Pricing').waitFor();
|
|
246
|
+
await page.getByRole('button', { name: 'Pricing Overview' }).waitFor();
|
|
247
|
+
await page.getByText('Last Updated').waitFor();
|
|
248
|
+
await page.getByRole('button', { name: 'Internal Pricing' }).isDisabled();
|
|
249
|
+
await page.getByRole('button', { name: 'BOM Pricing' }).isEnabled();
|
|
250
|
+
await page.getByRole('button', { name: 'Variant Pricing' }).isEnabled();
|
|
251
|
+
await page.getByRole('button', { name: 'Sale Pricing' }).isDisabled();
|
|
252
|
+
await page.getByRole('button', { name: 'Sale History' }).isDisabled();
|
|
253
|
+
|
|
254
|
+
// Variant Pricing
|
|
255
|
+
await page.getByRole('button', { name: 'Variant Pricing' }).click();
|
|
256
|
+
|
|
257
|
+
// Variant Pricing - linkjumping
|
|
258
|
+
const target = page.getByText('Green Chair').first();
|
|
259
|
+
await target.waitFor();
|
|
260
|
+
await target.click();
|
|
261
|
+
await page.waitForURL('**/part/109/**');
|
|
262
|
+
});
|
|
263
|
+
|
|
264
|
+
test('Parts - Pricing (Internal)', async ({ browser }) => {
|
|
265
|
+
const page = await doCachedLogin(browser, { url: 'part/65/pricing' });
|
|
266
|
+
await page.getByText('Socket head cap screw, M2').waitFor();
|
|
267
|
+
await loadTab(page, 'Part Pricing');
|
|
268
|
+
await page.getByLabel('Part Pricing').getByText('Part Pricing').waitFor();
|
|
269
|
+
await page.getByRole('button', { name: 'Pricing Overview' }).waitFor();
|
|
270
|
+
await page.getByText('Last Updated').waitFor();
|
|
271
|
+
await page.getByRole('button', { name: 'Purchase History' }).isDisabled();
|
|
272
|
+
await page.getByRole('button', { name: 'Internal Pricing' }).isEnabled();
|
|
273
|
+
await page.getByRole('button', { name: 'Supplier Pricing' }).isDisabled();
|
|
274
|
+
|
|
275
|
+
// Internal Pricing
|
|
276
|
+
await page.getByRole('button', { name: 'Internal Pricing' }).click();
|
|
277
|
+
await page.getByRole('button', { name: 'Price Break Not sorted' }).waitFor();
|
|
278
|
+
|
|
279
|
+
// Internal Pricing - editing
|
|
280
|
+
await page.getByRole('row', { name: '1 NZ$' }).getByRole('button').click();
|
|
281
|
+
await page.getByRole('menuitem', { name: 'Edit' }).click();
|
|
282
|
+
await page.getByText('Part *M2x4 SHCSSocket head').click();
|
|
283
|
+
await page.getByText('Part *M2x4 SHCSSocket head').click();
|
|
284
|
+
});
|
|
285
|
+
|
|
286
|
+
test('Parts - Pricing (Purchase)', async ({ browser }) => {
|
|
287
|
+
const page = await doCachedLogin(browser, { url: 'part/69/pricing' });
|
|
288
|
+
|
|
289
|
+
await page.getByText('1.25mm Pitch, PicoBlade PCB').waitFor();
|
|
290
|
+
await loadTab(page, 'Part Pricing');
|
|
291
|
+
await page.getByLabel('Part Pricing').getByText('Part Pricing').waitFor();
|
|
292
|
+
await page.getByRole('button', { name: 'Pricing Overview' }).waitFor();
|
|
293
|
+
await page.getByText('Last Updated').waitFor();
|
|
294
|
+
await page.getByRole('button', { name: 'Purchase History' }).isEnabled();
|
|
295
|
+
await page.getByRole('button', { name: 'Internal Pricing' }).isDisabled();
|
|
296
|
+
await page.getByRole('button', { name: 'Supplier Pricing' }).isDisabled();
|
|
297
|
+
|
|
298
|
+
// Purchase History
|
|
299
|
+
await page.getByRole('button', { name: 'Purchase History' }).click();
|
|
300
|
+
await page
|
|
301
|
+
.getByRole('button', { name: 'Purchase Order Not sorted' })
|
|
302
|
+
.waitFor();
|
|
303
|
+
await page.getByText('2022-04-29').waitFor();
|
|
304
|
+
});
|
|
305
|
+
|
|
306
|
+
test('Parts - Attachments', async ({ browser }) => {
|
|
307
|
+
const page = await doCachedLogin(browser, { url: 'part/69/attachments' });
|
|
308
|
+
|
|
309
|
+
// Submit a new external link
|
|
310
|
+
await page.getByLabel('action-button-add-external-').click();
|
|
311
|
+
await page.getByLabel('text-field-link').fill('https://www.google.com');
|
|
312
|
+
await page.getByLabel('text-field-comment').fill('a sample comment');
|
|
313
|
+
|
|
314
|
+
// Note: Text field values are debounced for 250ms
|
|
315
|
+
await page.waitForTimeout(500);
|
|
316
|
+
|
|
317
|
+
await page.getByRole('button', { name: 'Submit' }).click();
|
|
318
|
+
await page.getByRole('cell', { name: 'a sample comment' }).first().waitFor();
|
|
319
|
+
|
|
320
|
+
// Launch dialog to upload a file
|
|
321
|
+
await page.getByLabel('action-button-add-attachment').click();
|
|
322
|
+
await page.getByLabel('text-field-comment').fill('some comment');
|
|
323
|
+
await page.getByRole('button', { name: 'Cancel' }).click();
|
|
324
|
+
});
|
|
325
|
+
|
|
326
|
+
test('Parts - Parameters', async ({ browser }) => {
|
|
327
|
+
const page = await doCachedLogin(browser, { url: 'part/69/parameters' });
|
|
328
|
+
|
|
329
|
+
// Create a new template
|
|
330
|
+
await page.getByLabel('action-button-add-parameter').click();
|
|
331
|
+
|
|
332
|
+
// Select the "Color" parameter template (should create a "choice" field)
|
|
333
|
+
await page.getByLabel('related-field-template').fill('Color');
|
|
334
|
+
await page.getByRole('option', { name: 'Color Part color' }).click();
|
|
335
|
+
await page.getByLabel('choice-field-data').click();
|
|
336
|
+
await page.getByRole('option', { name: 'Green' }).click();
|
|
337
|
+
|
|
338
|
+
// Select the "polarized" parameter template (should create a "checkbox" field)
|
|
339
|
+
await page.getByLabel('related-field-template').fill('Polarized');
|
|
340
|
+
await page.getByText('Is this part polarized?').click();
|
|
341
|
+
await page
|
|
342
|
+
.locator('label')
|
|
343
|
+
.filter({ hasText: 'DataParameter Value' })
|
|
344
|
+
.locator('div')
|
|
345
|
+
.first()
|
|
346
|
+
.click();
|
|
347
|
+
|
|
348
|
+
await page.getByRole('button', { name: 'Cancel' }).click();
|
|
349
|
+
});
|
|
350
|
+
|
|
351
|
+
test('Parts - Notes', async ({ browser }) => {
|
|
352
|
+
const page = await doCachedLogin(browser, { url: 'part/69/notes' });
|
|
353
|
+
|
|
354
|
+
// Enable editing
|
|
355
|
+
await page.getByLabel('Enable Editing').waitFor();
|
|
356
|
+
|
|
357
|
+
// Use keyboard shortcut to "edit" the part
|
|
358
|
+
await page.keyboard.press('Control+E');
|
|
359
|
+
await page.getByLabel('text-field-name').waitFor();
|
|
360
|
+
await page.getByLabel('text-field-description').waitFor();
|
|
361
|
+
await page.getByLabel('related-field-category').waitFor();
|
|
362
|
+
await page.getByRole('button', { name: 'Cancel' }).click();
|
|
363
|
+
|
|
364
|
+
// Enable notes editing
|
|
365
|
+
await page.getByLabel('Enable Editing').click();
|
|
366
|
+
|
|
367
|
+
await page.getByLabel('Save Notes').waitFor();
|
|
368
|
+
await page.getByLabel('Close Editor').waitFor();
|
|
369
|
+
});
|
|
370
|
+
|
|
371
|
+
test('Parts - 404', async ({ browser }) => {
|
|
372
|
+
const page = await doCachedLogin(browser, { url: 'part/99999/' });
|
|
373
|
+
await page.getByText('Page Not Found', { exact: true }).waitFor();
|
|
374
|
+
|
|
375
|
+
// Clear out any console error messages
|
|
376
|
+
await page.evaluate(() => console.clear());
|
|
377
|
+
});
|
|
378
|
+
|
|
379
|
+
test('Parts - Revision', async ({ browser }) => {
|
|
380
|
+
const page = await doCachedLogin(browser, { url: 'part/906/details' });
|
|
381
|
+
|
|
382
|
+
await page.getByText('Revision of').waitFor();
|
|
383
|
+
await page.getByText('Select Part Revision').waitFor();
|
|
384
|
+
await page
|
|
385
|
+
.getByText('Green Round Table (revision B) | B', { exact: true })
|
|
386
|
+
.click();
|
|
387
|
+
await page
|
|
388
|
+
.getByRole('option', { name: 'Thumbnail Green Round Table No stock' })
|
|
389
|
+
.click();
|
|
390
|
+
|
|
391
|
+
await page.waitForURL('**/web/part/101/**');
|
|
392
|
+
await page.getByText('Select Part Revision').waitFor();
|
|
393
|
+
});
|
|
394
|
+
|
|
395
|
+
test('Parts - Bulk Edit', async ({ browser }) => {
|
|
396
|
+
const page = await doCachedLogin(browser, {
|
|
397
|
+
url: 'part/category/index/parts'
|
|
398
|
+
});
|
|
399
|
+
|
|
400
|
+
// Edit the category for multiple parts
|
|
401
|
+
await page.getByLabel('Select record 1', { exact: true }).click();
|
|
402
|
+
await page.getByLabel('Select record 2', { exact: true }).click();
|
|
403
|
+
await page.getByLabel('action-menu-part-actions').click();
|
|
404
|
+
await page.getByLabel('action-menu-part-actions-set-category').click();
|
|
405
|
+
await page.getByLabel('related-field-category').fill('rnitu');
|
|
406
|
+
await page
|
|
407
|
+
.getByRole('option', { name: '- Furniture/Chairs' })
|
|
408
|
+
.getByRole('paragraph')
|
|
409
|
+
.click();
|
|
410
|
+
|
|
411
|
+
await page.getByRole('button', { name: 'Update' }).click();
|
|
412
|
+
await page.getByText('Items Updated').waitFor();
|
|
413
|
+
});
|