@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.
Files changed (541) hide show
  1. package/.babelrc +8 -0
  2. package/.linguirc +55 -0
  3. package/README.md +17 -0
  4. package/index.html +15 -0
  5. package/lib/enums/ApiEndpoints.tsx +233 -0
  6. package/lib/enums/ModelType.tsx +38 -0
  7. package/lib/enums/Roles.tsx +25 -0
  8. package/lib/functions/Api.tsx +42 -0
  9. package/lib/functions/Plugins.tsx +27 -0
  10. package/lib/index.ts +11 -0
  11. package/lib/types/Auth.tsx +51 -0
  12. package/lib/types/Core.tsx +13 -0
  13. package/lib/types/Filters.tsx +69 -0
  14. package/lib/types/Forms.tsx +185 -0
  15. package/lib/types/Modals.tsx +17 -0
  16. package/lib/types/Plugins.tsx +68 -0
  17. package/lib/types/Server.tsx +8 -0
  18. package/lib/types/Settings.tsx +55 -0
  19. package/lib/types/Tables.tsx +69 -0
  20. package/lib/types/User.tsx +62 -0
  21. package/netlify.toml +22 -0
  22. package/package.json +125 -0
  23. package/playwright/global-setup.ts +45 -0
  24. package/playwright.config.ts +99 -0
  25. package/public/inventree.svg +291 -0
  26. package/src/App.tsx +35 -0
  27. package/src/assets/inventree.svg +1 -0
  28. package/src/components/Boundary.tsx +43 -0
  29. package/src/components/SplashScreen.tsx +35 -0
  30. package/src/components/barcodes/BarcodeCameraInput.tsx +207 -0
  31. package/src/components/barcodes/BarcodeInput.tsx +127 -0
  32. package/src/components/barcodes/BarcodeKeyboardInput.tsx +50 -0
  33. package/src/components/barcodes/BarcodeScanDialog.tsx +101 -0
  34. package/src/components/barcodes/BarcodeScanItem.tsx +23 -0
  35. package/src/components/barcodes/QRCode.tsx +211 -0
  36. package/src/components/buttons/ActionButton.tsx +61 -0
  37. package/src/components/buttons/AddItemButton.tsx +10 -0
  38. package/src/components/buttons/AdminButton.tsx +91 -0
  39. package/src/components/buttons/ButtonMenu.tsx +33 -0
  40. package/src/components/buttons/CopyButton.tsx +52 -0
  41. package/src/components/buttons/PrimaryActionButton.tsx +40 -0
  42. package/src/components/buttons/PrintingActions.tsx +191 -0
  43. package/src/components/buttons/RemoveRowButton.tsx +22 -0
  44. package/src/components/buttons/SSOButton.tsx +53 -0
  45. package/src/components/buttons/ScanButton.tsx +27 -0
  46. package/src/components/buttons/SegmentedIconControl.tsx +51 -0
  47. package/src/components/buttons/SplitButton.css.ts +19 -0
  48. package/src/components/buttons/SplitButton.tsx +111 -0
  49. package/src/components/buttons/SpotlightButton.tsx +22 -0
  50. package/src/components/buttons/StarredToggleButton.tsx +62 -0
  51. package/src/components/buttons/YesNoButton.tsx +42 -0
  52. package/src/components/calendar/Calendar.tsx +193 -0
  53. package/src/components/calendar/OrderCalendar.tsx +209 -0
  54. package/src/components/charts/colors.tsx +12 -0
  55. package/src/components/charts/tooltipFormatter.tsx +12 -0
  56. package/src/components/dashboard/DashboardLayout.tsx +327 -0
  57. package/src/components/dashboard/DashboardMenu.tsx +136 -0
  58. package/src/components/dashboard/DashboardWidget.tsx +82 -0
  59. package/src/components/dashboard/DashboardWidgetDrawer.tsx +130 -0
  60. package/src/components/dashboard/DashboardWidgetLibrary.tsx +189 -0
  61. package/src/components/dashboard/widgets/ColorToggleWidget.tsx +28 -0
  62. package/src/components/dashboard/widgets/GetStartedWidget.tsx +19 -0
  63. package/src/components/dashboard/widgets/LanguageSelectWidget.tsx +28 -0
  64. package/src/components/dashboard/widgets/NewsWidget.tsx +143 -0
  65. package/src/components/dashboard/widgets/QueryCountDashboardWidget.tsx +134 -0
  66. package/src/components/details/Details.tsx +514 -0
  67. package/src/components/details/DetailsBadge.tsx +20 -0
  68. package/src/components/details/DetailsImage.tsx +462 -0
  69. package/src/components/details/ItemDetails.tsx +17 -0
  70. package/src/components/editors/NotesEditor.tsx +232 -0
  71. package/src/components/editors/TemplateEditor/CodeEditor/CodeEditor.tsx +158 -0
  72. package/src/components/editors/TemplateEditor/CodeEditor/index.tsx +12 -0
  73. package/src/components/editors/TemplateEditor/PdfPreview/PdfPreview.tsx +90 -0
  74. package/src/components/editors/TemplateEditor/PdfPreview/index.tsx +12 -0
  75. package/src/components/editors/TemplateEditor/TemplateEditor.tsx +425 -0
  76. package/src/components/editors/TemplateEditor/index.tsx +3 -0
  77. package/src/components/errors/ClientError.tsx +28 -0
  78. package/src/components/errors/GenericErrorPage.tsx +73 -0
  79. package/src/components/errors/NotAuthenticated.tsx +12 -0
  80. package/src/components/errors/NotFound.tsx +12 -0
  81. package/src/components/errors/PermissionDenied.tsx +12 -0
  82. package/src/components/errors/ServerError.tsx +13 -0
  83. package/src/components/forms/ApiForm.tsx +718 -0
  84. package/src/components/forms/AuthFormOptions.tsx +39 -0
  85. package/src/components/forms/AuthenticationForm.tsx +332 -0
  86. package/src/components/forms/HostOptionsForm.tsx +96 -0
  87. package/src/components/forms/InstanceOptions.tsx +178 -0
  88. package/src/components/forms/StandaloneField.tsx +55 -0
  89. package/src/components/forms/fields/ApiFormField.tsx +281 -0
  90. package/src/components/forms/fields/ChoiceField.tsx +86 -0
  91. package/src/components/forms/fields/DateField.tsx +79 -0
  92. package/src/components/forms/fields/DependentField.tsx +91 -0
  93. package/src/components/forms/fields/IconField.tsx +353 -0
  94. package/src/components/forms/fields/NestedObjectField.tsx +45 -0
  95. package/src/components/forms/fields/RelatedModelField.tsx +339 -0
  96. package/src/components/forms/fields/TableField.tsx +275 -0
  97. package/src/components/forms/fields/TextField.tsx +81 -0
  98. package/src/components/images/ApiImage.tsx +35 -0
  99. package/src/components/images/Thumbnail.tsx +52 -0
  100. package/src/components/importer/ImportDataSelector.tsx +433 -0
  101. package/src/components/importer/ImporterColumnSelector.tsx +244 -0
  102. package/src/components/importer/ImporterDrawer.tsx +173 -0
  103. package/src/components/importer/ImporterImportProgress.tsx +45 -0
  104. package/src/components/items/ActionDropdown.tsx +290 -0
  105. package/src/components/items/ApiIcon.css.ts +13 -0
  106. package/src/components/items/ApiIcon.tsx +32 -0
  107. package/src/components/items/AttachmentLink.tsx +79 -0
  108. package/src/components/items/ColorToggle.tsx +34 -0
  109. package/src/components/items/DashboardItem.tsx +33 -0
  110. package/src/components/items/DocInfo.tsx +20 -0
  111. package/src/components/items/DocTooltip.tsx +98 -0
  112. package/src/components/items/ErrorItem.tsx +17 -0
  113. package/src/components/items/Expand.tsx +14 -0
  114. package/src/components/items/GettingStartedCarousel.css.ts +30 -0
  115. package/src/components/items/GettingStartedCarousel.tsx +49 -0
  116. package/src/components/items/InfoItem.tsx +64 -0
  117. package/src/components/items/InvenTreeLogo.tsx +24 -0
  118. package/src/components/items/LanguageSelect.tsx +43 -0
  119. package/src/components/items/LanguageToggle.tsx +37 -0
  120. package/src/components/items/MenuLinks.tsx +113 -0
  121. package/src/components/items/OnlyStaff.tsx +10 -0
  122. package/src/components/items/ProgressBar.tsx +45 -0
  123. package/src/components/items/StylishText.tsx +59 -0
  124. package/src/components/items/TitleWithDoc.tsx +26 -0
  125. package/src/components/items/UnavailableIndicator.tsx +5 -0
  126. package/src/components/items/inventree.svg +1 -0
  127. package/src/components/modals/AboutInvenTreeModal.tsx +203 -0
  128. package/src/components/modals/LicenseModal.tsx +116 -0
  129. package/src/components/modals/QrModal.tsx +21 -0
  130. package/src/components/modals/ServerInfoModal.tsx +136 -0
  131. package/src/components/nav/Alerts.tsx +130 -0
  132. package/src/components/nav/BreadcrumbList.tsx +84 -0
  133. package/src/components/nav/DetailDrawer.css.ts +6 -0
  134. package/src/components/nav/DetailDrawer.tsx +105 -0
  135. package/src/components/nav/Footer.tsx +11 -0
  136. package/src/components/nav/Header.tsx +226 -0
  137. package/src/components/nav/InstanceDetail.tsx +46 -0
  138. package/src/components/nav/Layout.tsx +85 -0
  139. package/src/components/nav/MainMenu.tsx +101 -0
  140. package/src/components/nav/NavHoverMenu.tsx +15 -0
  141. package/src/components/nav/NavigationDrawer.tsx +230 -0
  142. package/src/components/nav/NavigationTree.tsx +210 -0
  143. package/src/components/nav/NotificationDrawer.tsx +231 -0
  144. package/src/components/nav/PageDetail.tsx +171 -0
  145. package/src/components/nav/PageTitle.tsx +53 -0
  146. package/src/components/nav/SearchDrawer.tsx +598 -0
  147. package/src/components/nav/SettingsHeader.tsx +50 -0
  148. package/src/components/panels/AttachmentPanel.tsx +27 -0
  149. package/src/components/panels/NotesPanel.tsx +36 -0
  150. package/src/components/panels/Panel.tsx +15 -0
  151. package/src/components/panels/PanelGroup.css.ts +10 -0
  152. package/src/components/panels/PanelGroup.tsx +292 -0
  153. package/src/components/plugins/LocateItemButton.tsx +94 -0
  154. package/src/components/plugins/PluginContext.tsx +67 -0
  155. package/src/components/plugins/PluginDrawer.tsx +156 -0
  156. package/src/components/plugins/PluginInterface.tsx +34 -0
  157. package/src/components/plugins/PluginPanel.tsx +37 -0
  158. package/src/components/plugins/PluginSettingsPanel.tsx +34 -0
  159. package/src/components/plugins/PluginSource.tsx +48 -0
  160. package/src/components/plugins/PluginUIFeature.tsx +174 -0
  161. package/src/components/plugins/PluginUIFeatureTypes.ts +78 -0
  162. package/src/components/plugins/RemoteComponent.tsx +137 -0
  163. package/src/components/render/Build.tsx +54 -0
  164. package/src/components/render/Company.tsx +114 -0
  165. package/src/components/render/Generic.tsx +49 -0
  166. package/src/components/render/Instance.tsx +240 -0
  167. package/src/components/render/InstanceFromUrl.tsx +33 -0
  168. package/src/components/render/ModelType.tsx +293 -0
  169. package/src/components/render/Order.tsx +124 -0
  170. package/src/components/render/Part.tsx +109 -0
  171. package/src/components/render/Plugin.tsx +21 -0
  172. package/src/components/render/Report.tsx +29 -0
  173. package/src/components/render/StatusRenderer.tsx +178 -0
  174. package/src/components/render/Stock.tsx +84 -0
  175. package/src/components/render/User.tsx +42 -0
  176. package/src/components/settings/FactCollection.tsx +31 -0
  177. package/src/components/settings/FactItem.tsx +17 -0
  178. package/src/components/settings/SettingItem.tsx +176 -0
  179. package/src/components/settings/SettingList.tsx +217 -0
  180. package/src/components/wizards/OrderPartsWizard.tsx +473 -0
  181. package/src/components/wizards/WizardDrawer.tsx +188 -0
  182. package/src/contexts/ApiContext.tsx +31 -0
  183. package/src/contexts/LanguageContext.tsx +155 -0
  184. package/src/contexts/ThemeContext.tsx +58 -0
  185. package/src/contexts/colorSchema.tsx +67 -0
  186. package/src/defaults/actions.tsx +87 -0
  187. package/src/defaults/backendMappings.tsx +32 -0
  188. package/src/defaults/defaultHostList.tsx +4 -0
  189. package/src/defaults/defaults.tsx +38 -0
  190. package/src/defaults/formatters.tsx +176 -0
  191. package/src/defaults/links.tsx +193 -0
  192. package/src/defaults/templates.tsx +53 -0
  193. package/src/forms/BomForms.tsx +26 -0
  194. package/src/forms/BuildForms.tsx +615 -0
  195. package/src/forms/CommonForms.tsx +89 -0
  196. package/src/forms/CompanyForms.tsx +133 -0
  197. package/src/forms/ImporterForms.tsx +20 -0
  198. package/src/forms/PartForms.tsx +281 -0
  199. package/src/forms/PurchaseOrderForms.tsx +779 -0
  200. package/src/forms/ReturnOrderForms.tsx +263 -0
  201. package/src/forms/SalesOrderForms.tsx +408 -0
  202. package/src/forms/StockForms.tsx +1296 -0
  203. package/src/forms/selectionListFields.tsx +120 -0
  204. package/src/functions/api.tsx +61 -0
  205. package/src/functions/auth.tsx +574 -0
  206. package/src/functions/conversion.tsx +42 -0
  207. package/src/functions/events.tsx +6 -0
  208. package/src/functions/forms.tsx +173 -0
  209. package/src/functions/icons.tsx +294 -0
  210. package/src/functions/loading.tsx +29 -0
  211. package/src/functions/navigation.tsx +20 -0
  212. package/src/functions/notifications.tsx +101 -0
  213. package/src/functions/tables.tsx +26 -0
  214. package/src/functions/uid.tsx +15 -0
  215. package/src/functions/urls.tsx +58 -0
  216. package/src/hooks/UseCalendar.tsx +178 -0
  217. package/src/hooks/UseDashboardItems.tsx +118 -0
  218. package/src/hooks/UseDataExport.tsx +125 -0
  219. package/src/hooks/UseDataOutput.tsx +109 -0
  220. package/src/hooks/UseFilter.tsx +67 -0
  221. package/src/hooks/UseFilterSet.tsx +24 -0
  222. package/src/hooks/UseForm.tsx +161 -0
  223. package/src/hooks/UseGenerator.tsx +92 -0
  224. package/src/hooks/UseImportSession.tsx +139 -0
  225. package/src/hooks/UseInstance.tsx +137 -0
  226. package/src/hooks/UseInstanceName.tsx +14 -0
  227. package/src/hooks/UseModal.tsx +38 -0
  228. package/src/hooks/UsePlaceholder.tsx +66 -0
  229. package/src/hooks/UsePluginPanels.tsx +123 -0
  230. package/src/hooks/UsePluginUIFeature.tsx +95 -0
  231. package/src/hooks/UsePlugins.tsx +45 -0
  232. package/src/hooks/UseSelectedRows.tsx +37 -0
  233. package/src/hooks/UseStatusCodes.tsx +50 -0
  234. package/src/hooks/UseTable.tsx +145 -0
  235. package/src/hooks/UseWizard.tsx +133 -0
  236. package/src/locales/ar/messages.d.ts +4 -0
  237. package/src/locales/ar/messages.po +10695 -0
  238. package/src/locales/ar/messages.ts +1 -0
  239. package/src/locales/bg/messages.d.ts +4 -0
  240. package/src/locales/bg/messages.po +10695 -0
  241. package/src/locales/bg/messages.ts +1 -0
  242. package/src/locales/cs/messages.d.ts +4 -0
  243. package/src/locales/cs/messages.po +10695 -0
  244. package/src/locales/cs/messages.ts +1 -0
  245. package/src/locales/da/messages.d.ts +4 -0
  246. package/src/locales/da/messages.po +10695 -0
  247. package/src/locales/da/messages.ts +1 -0
  248. package/src/locales/de/messages.d.ts +4 -0
  249. package/src/locales/de/messages.po +10695 -0
  250. package/src/locales/de/messages.ts +1 -0
  251. package/src/locales/el/messages.d.ts +4 -0
  252. package/src/locales/el/messages.po +10695 -0
  253. package/src/locales/el/messages.ts +1 -0
  254. package/src/locales/en/messages.d.ts +4 -0
  255. package/src/locales/en/messages.po +10689 -0
  256. package/src/locales/en/messages.ts +1 -0
  257. package/src/locales/es/messages.d.ts +4 -0
  258. package/src/locales/es/messages.po +10695 -0
  259. package/src/locales/es/messages.ts +1 -0
  260. package/src/locales/es_MX/messages.d.ts +4 -0
  261. package/src/locales/es_MX/messages.po +10695 -0
  262. package/src/locales/es_MX/messages.ts +1 -0
  263. package/src/locales/et/messages.d.ts +4 -0
  264. package/src/locales/et/messages.po +10695 -0
  265. package/src/locales/et/messages.ts +1 -0
  266. package/src/locales/fa/messages.d.ts +4 -0
  267. package/src/locales/fa/messages.po +10695 -0
  268. package/src/locales/fa/messages.ts +1 -0
  269. package/src/locales/fi/messages.d.ts +4 -0
  270. package/src/locales/fi/messages.po +10695 -0
  271. package/src/locales/fi/messages.ts +1 -0
  272. package/src/locales/fr/messages.d.ts +4 -0
  273. package/src/locales/fr/messages.po +10695 -0
  274. package/src/locales/fr/messages.ts +1 -0
  275. package/src/locales/he/messages.d.ts +4 -0
  276. package/src/locales/he/messages.po +10695 -0
  277. package/src/locales/he/messages.ts +1 -0
  278. package/src/locales/hi/messages.d.ts +4 -0
  279. package/src/locales/hi/messages.po +10695 -0
  280. package/src/locales/hi/messages.ts +1 -0
  281. package/src/locales/hu/messages.d.ts +4 -0
  282. package/src/locales/hu/messages.po +10695 -0
  283. package/src/locales/hu/messages.ts +1 -0
  284. package/src/locales/id/messages.po +10695 -0
  285. package/src/locales/it/messages.d.ts +4 -0
  286. package/src/locales/it/messages.po +10695 -0
  287. package/src/locales/it/messages.ts +1 -0
  288. package/src/locales/ja/messages.d.ts +4 -0
  289. package/src/locales/ja/messages.po +10695 -0
  290. package/src/locales/ja/messages.ts +1 -0
  291. package/src/locales/ko/messages.d.ts +4 -0
  292. package/src/locales/ko/messages.po +10695 -0
  293. package/src/locales/ko/messages.ts +1 -0
  294. package/src/locales/lt/messages.d.ts +4 -0
  295. package/src/locales/lt/messages.po +10695 -0
  296. package/src/locales/lt/messages.ts +1 -0
  297. package/src/locales/lv/messages.d.ts +4 -0
  298. package/src/locales/lv/messages.po +10695 -0
  299. package/src/locales/lv/messages.ts +1 -0
  300. package/src/locales/nl/messages.d.ts +4 -0
  301. package/src/locales/nl/messages.po +10695 -0
  302. package/src/locales/nl/messages.ts +1 -0
  303. package/src/locales/no/messages.d.ts +4 -0
  304. package/src/locales/no/messages.po +10695 -0
  305. package/src/locales/no/messages.ts +1 -0
  306. package/src/locales/pl/messages.d.ts +4 -0
  307. package/src/locales/pl/messages.po +10695 -0
  308. package/src/locales/pl/messages.ts +1 -0
  309. package/src/locales/pseudo-LOCALE/messages.d.ts +4 -0
  310. package/src/locales/pseudo-LOCALE/messages.po +8003 -0
  311. package/src/locales/pseudo-LOCALE/messages.ts +1 -0
  312. package/src/locales/pt/messages.d.ts +4 -0
  313. package/src/locales/pt/messages.po +10696 -0
  314. package/src/locales/pt/messages.ts +1 -0
  315. package/src/locales/pt_BR/messages.d.ts +4 -0
  316. package/src/locales/pt_BR/messages.po +10695 -0
  317. package/src/locales/pt_BR/messages.ts +1 -0
  318. package/src/locales/ro/messages.po +10695 -0
  319. package/src/locales/ro/messages.ts +1 -0
  320. package/src/locales/ru/messages.d.ts +4 -0
  321. package/src/locales/ru/messages.po +10695 -0
  322. package/src/locales/ru/messages.ts +1 -0
  323. package/src/locales/sk/messages.d.ts +4 -0
  324. package/src/locales/sk/messages.po +10695 -0
  325. package/src/locales/sk/messages.ts +1 -0
  326. package/src/locales/sl/messages.d.ts +4 -0
  327. package/src/locales/sl/messages.po +10695 -0
  328. package/src/locales/sl/messages.ts +1 -0
  329. package/src/locales/sr/messages.d.ts +4 -0
  330. package/src/locales/sr/messages.po +10695 -0
  331. package/src/locales/sr/messages.ts +1 -0
  332. package/src/locales/sv/messages.d.ts +4 -0
  333. package/src/locales/sv/messages.po +10695 -0
  334. package/src/locales/sv/messages.ts +1 -0
  335. package/src/locales/th/messages.d.ts +4 -0
  336. package/src/locales/th/messages.po +10695 -0
  337. package/src/locales/th/messages.ts +1 -0
  338. package/src/locales/tr/messages.d.ts +4 -0
  339. package/src/locales/tr/messages.po +10695 -0
  340. package/src/locales/tr/messages.ts +1 -0
  341. package/src/locales/uk/messages.d.ts +3 -0
  342. package/src/locales/uk/messages.po +10695 -0
  343. package/src/locales/uk/messages.ts +1 -0
  344. package/src/locales/vi/messages.d.ts +4 -0
  345. package/src/locales/vi/messages.po +10695 -0
  346. package/src/locales/vi/messages.ts +1 -0
  347. package/src/locales/zh_Hans/messages.d.ts +4 -0
  348. package/src/locales/zh_Hans/messages.po +10695 -0
  349. package/src/locales/zh_Hans/messages.ts +1 -0
  350. package/src/locales/zh_Hant/messages.d.ts +4 -0
  351. package/src/locales/zh_Hant/messages.po +10695 -0
  352. package/src/locales/zh_Hant/messages.ts +1 -0
  353. package/src/main.css.ts +148 -0
  354. package/src/main.tsx +123 -0
  355. package/src/pages/Auth/ChangePassword.tsx +84 -0
  356. package/src/pages/Auth/Layout.tsx +74 -0
  357. package/src/pages/Auth/LoggedIn.tsx +21 -0
  358. package/src/pages/Auth/Login.tsx +133 -0
  359. package/src/pages/Auth/Logout.tsx +16 -0
  360. package/src/pages/Auth/MFA.tsx +36 -0
  361. package/src/pages/Auth/MFASetup.tsx +38 -0
  362. package/src/pages/Auth/Register.tsx +28 -0
  363. package/src/pages/Auth/Reset.tsx +30 -0
  364. package/src/pages/Auth/ResetPassword.tsx +48 -0
  365. package/src/pages/Auth/VerifyEmail.tsx +34 -0
  366. package/src/pages/ErrorPage.tsx +26 -0
  367. package/src/pages/Index/Home.tsx +12 -0
  368. package/src/pages/Index/Scan.tsx +258 -0
  369. package/src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx +162 -0
  370. package/src/pages/Index/Settings/AccountSettings/QrRegistrationForm.tsx +38 -0
  371. package/src/pages/Index/Settings/AccountSettings/SecurityContent.tsx +713 -0
  372. package/src/pages/Index/Settings/AccountSettings/UserPanel.tsx +24 -0
  373. package/src/pages/Index/Settings/AccountSettings/UserThemePanel.tsx +207 -0
  374. package/src/pages/Index/Settings/AccountSettings/useConfirm.tsx +117 -0
  375. package/src/pages/Index/Settings/AdminCenter/CurrencyManagementPanel.tsx +111 -0
  376. package/src/pages/Index/Settings/AdminCenter/Index.tsx +251 -0
  377. package/src/pages/Index/Settings/AdminCenter/LabelTemplatePanel.tsx +23 -0
  378. package/src/pages/Index/Settings/AdminCenter/MachineManagementPanel.tsx +110 -0
  379. package/src/pages/Index/Settings/AdminCenter/PartParameterPanel.tsx +29 -0
  380. package/src/pages/Index/Settings/AdminCenter/PluginManagementPanel.tsx +84 -0
  381. package/src/pages/Index/Settings/AdminCenter/ReportTemplatePanel.tsx +38 -0
  382. package/src/pages/Index/Settings/AdminCenter/StocktakePanel.tsx +31 -0
  383. package/src/pages/Index/Settings/AdminCenter/TaskManagementPanel.tsx +73 -0
  384. package/src/pages/Index/Settings/AdminCenter/UnitManagementPanel.tsx +74 -0
  385. package/src/pages/Index/Settings/AdminCenter/UserManagementPanel.tsx +49 -0
  386. package/src/pages/Index/Settings/SystemSettings.tsx +339 -0
  387. package/src/pages/Index/Settings/UserSettings.tsx +143 -0
  388. package/src/pages/Notifications.tsx +134 -0
  389. package/src/pages/build/BuildDetail.tsx +579 -0
  390. package/src/pages/build/BuildIndex.tsx +100 -0
  391. package/src/pages/company/CompanyDetail.tsx +352 -0
  392. package/src/pages/company/CustomerDetail.tsx +13 -0
  393. package/src/pages/company/ManufacturerDetail.tsx +13 -0
  394. package/src/pages/company/ManufacturerPartDetail.tsx +307 -0
  395. package/src/pages/company/SupplierDetail.tsx +13 -0
  396. package/src/pages/company/SupplierPartDetail.tsx +433 -0
  397. package/src/pages/core/CoreIndex.tsx +50 -0
  398. package/src/pages/core/GroupDetail.tsx +97 -0
  399. package/src/pages/core/UserDetail.tsx +193 -0
  400. package/src/pages/part/CategoryDetail.tsx +369 -0
  401. package/src/pages/part/PartAllocationPanel.tsx +40 -0
  402. package/src/pages/part/PartDetail.tsx +1071 -0
  403. package/src/pages/part/PartPricingPanel.tsx +155 -0
  404. package/src/pages/part/PartSchedulingDetail.tsx +315 -0
  405. package/src/pages/part/PartStocktakeDetail.tsx +285 -0
  406. package/src/pages/part/PartSupplierDetail.tsx +31 -0
  407. package/src/pages/part/pricing/BomPricingPanel.tsx +269 -0
  408. package/src/pages/part/pricing/PriceBreakPanel.tsx +182 -0
  409. package/src/pages/part/pricing/PricingOverviewPanel.tsx +338 -0
  410. package/src/pages/part/pricing/PricingPanel.tsx +82 -0
  411. package/src/pages/part/pricing/PurchaseHistoryPanel.tsx +134 -0
  412. package/src/pages/part/pricing/SaleHistoryPanel.tsx +95 -0
  413. package/src/pages/part/pricing/SupplierPricingPanel.tsx +80 -0
  414. package/src/pages/part/pricing/VariantPricingPanel.tsx +112 -0
  415. package/src/pages/purchasing/PurchaseOrderDetail.tsx +547 -0
  416. package/src/pages/purchasing/PurchasingIndex.tsx +131 -0
  417. package/src/pages/sales/ReturnOrderDetail.tsx +529 -0
  418. package/src/pages/sales/SalesIndex.tsx +148 -0
  419. package/src/pages/sales/SalesOrderDetail.tsx +593 -0
  420. package/src/pages/sales/SalesOrderShipmentDetail.tsx +385 -0
  421. package/src/pages/stock/LocationDetail.tsx +413 -0
  422. package/src/pages/stock/StockDetail.tsx +951 -0
  423. package/src/router.tsx +213 -0
  424. package/src/states/ApiState.tsx +85 -0
  425. package/src/states/IconState.tsx +94 -0
  426. package/src/states/LocalState.tsx +181 -0
  427. package/src/states/SettingsState.tsx +206 -0
  428. package/src/states/StatusState.tsx +55 -0
  429. package/src/states/UserState.tsx +202 -0
  430. package/src/states/states.tsx +69 -0
  431. package/src/tables/Column.tsx +29 -0
  432. package/src/tables/ColumnRenderers.tsx +320 -0
  433. package/src/tables/ColumnSelect.tsx +39 -0
  434. package/src/tables/Filter.tsx +297 -0
  435. package/src/tables/FilterSelectDrawer.tsx +358 -0
  436. package/src/tables/InvenTreeTable.tsx +750 -0
  437. package/src/tables/InvenTreeTableHeader.tsx +257 -0
  438. package/src/tables/RowActions.tsx +176 -0
  439. package/src/tables/RowExpansionIcon.tsx +16 -0
  440. package/src/tables/Search.tsx +42 -0
  441. package/src/tables/TableHoverCard.tsx +91 -0
  442. package/src/tables/bom/BomTable.tsx +590 -0
  443. package/src/tables/bom/UsedInTable.tsx +114 -0
  444. package/src/tables/build/BuildAllocatedStockTable.tsx +233 -0
  445. package/src/tables/build/BuildLineTable.tsx +800 -0
  446. package/src/tables/build/BuildOrderTable.tsx +226 -0
  447. package/src/tables/build/BuildOrderTestTable.tsx +265 -0
  448. package/src/tables/build/BuildOutputTable.tsx +599 -0
  449. package/src/tables/company/AddressTable.tsx +211 -0
  450. package/src/tables/company/CompanyTable.tsx +176 -0
  451. package/src/tables/company/ContactTable.tsx +182 -0
  452. package/src/tables/core/UserTable.tsx +88 -0
  453. package/src/tables/general/AttachmentTable.tsx +404 -0
  454. package/src/tables/general/BarcodeScanTable.tsx +124 -0
  455. package/src/tables/general/ExtraLineItemTable.tsx +174 -0
  456. package/src/tables/machine/MachineListTable.tsx +634 -0
  457. package/src/tables/machine/MachineTypeTable.tsx +395 -0
  458. package/src/tables/notifications/NotificationTable.tsx +60 -0
  459. package/src/tables/part/ParametricPartTable.tsx +297 -0
  460. package/src/tables/part/PartBuildAllocationsTable.tsx +128 -0
  461. package/src/tables/part/PartCategoryTable.tsx +208 -0
  462. package/src/tables/part/PartCategoryTemplateTable.tsx +157 -0
  463. package/src/tables/part/PartParameterTable.tsx +226 -0
  464. package/src/tables/part/PartParameterTemplateTable.tsx +168 -0
  465. package/src/tables/part/PartPurchaseOrdersTable.tsx +163 -0
  466. package/src/tables/part/PartSalesAllocationsTable.tsx +130 -0
  467. package/src/tables/part/PartTable.tsx +423 -0
  468. package/src/tables/part/PartTestTemplateTable.tsx +290 -0
  469. package/src/tables/part/PartThumbTable.tsx +230 -0
  470. package/src/tables/part/PartVariantTable.tsx +52 -0
  471. package/src/tables/part/RelatedPartTable.tsx +182 -0
  472. package/src/tables/part/SelectionListTable.tsx +134 -0
  473. package/src/tables/plugin/PluginErrorTable.tsx +58 -0
  474. package/src/tables/plugin/PluginListTable.tsx +440 -0
  475. package/src/tables/purchasing/ManufacturerPartParameterTable.tsx +136 -0
  476. package/src/tables/purchasing/ManufacturerPartTable.tsx +158 -0
  477. package/src/tables/purchasing/PurchaseOrderLineItemTable.tsx +424 -0
  478. package/src/tables/purchasing/PurchaseOrderTable.tsx +193 -0
  479. package/src/tables/purchasing/SupplierPartTable.tsx +281 -0
  480. package/src/tables/purchasing/SupplierPriceBreakTable.tsx +222 -0
  481. package/src/tables/sales/ReturnOrderLineItemTable.tsx +271 -0
  482. package/src/tables/sales/ReturnOrderTable.tsx +201 -0
  483. package/src/tables/sales/SalesOrderAllocationTable.tsx +330 -0
  484. package/src/tables/sales/SalesOrderLineItemTable.tsx +508 -0
  485. package/src/tables/sales/SalesOrderShipmentTable.tsx +225 -0
  486. package/src/tables/sales/SalesOrderTable.tsx +212 -0
  487. package/src/tables/settings/ApiTokenTable.tsx +203 -0
  488. package/src/tables/settings/BarcodeScanHistoryTable.tsx +281 -0
  489. package/src/tables/settings/CustomStateTable.tsx +226 -0
  490. package/src/tables/settings/CustomUnitsTable.tsx +125 -0
  491. package/src/tables/settings/ErrorTable.tsx +170 -0
  492. package/src/tables/settings/ExportSessionTable.tsx +60 -0
  493. package/src/tables/settings/FailedTasksTable.tsx +103 -0
  494. package/src/tables/settings/GroupTable.tsx +240 -0
  495. package/src/tables/settings/ImportSessionTable.tsx +175 -0
  496. package/src/tables/settings/PendingTasksTable.tsx +63 -0
  497. package/src/tables/settings/ProjectCodeTable.tsx +115 -0
  498. package/src/tables/settings/ScheduledTasksTable.tsx +62 -0
  499. package/src/tables/settings/StocktakeReportTable.tsx +111 -0
  500. package/src/tables/settings/TemplateTable.tsx +404 -0
  501. package/src/tables/settings/UserTable.tsx +329 -0
  502. package/src/tables/stock/InstalledItemsTable.tsx +146 -0
  503. package/src/tables/stock/LocationTypesTable.tsx +132 -0
  504. package/src/tables/stock/StockItemTable.tsx +707 -0
  505. package/src/tables/stock/StockItemTestResultTable.tsx +487 -0
  506. package/src/tables/stock/StockLocationTable.tsx +208 -0
  507. package/src/tables/stock/StockTrackingTable.tsx +244 -0
  508. package/src/theme.ts +5 -0
  509. package/src/views/DesktopAppView.tsx +28 -0
  510. package/src/views/MainView.tsx +38 -0
  511. package/src/views/MobileAppView.tsx +43 -0
  512. package/tests/baseFixtures.ts +93 -0
  513. package/tests/defaults.ts +18 -0
  514. package/tests/helpers.ts +122 -0
  515. package/tests/login.ts +97 -0
  516. package/tests/pages/pui_build.spec.ts +373 -0
  517. package/tests/pages/pui_company.spec.ts +40 -0
  518. package/tests/pages/pui_core.spec.ts +26 -0
  519. package/tests/pages/pui_dashboard.spec.ts +64 -0
  520. package/tests/pages/pui_part.spec.ts +413 -0
  521. package/tests/pages/pui_purchase_order.spec.ts +388 -0
  522. package/tests/pages/pui_sales_order.spec.ts +224 -0
  523. package/tests/pages/pui_scan.spec.ts +114 -0
  524. package/tests/pages/pui_stock.spec.ts +259 -0
  525. package/tests/pui_exporting.spec.ts +124 -0
  526. package/tests/pui_forms.spec.ts +131 -0
  527. package/tests/pui_general.spec.ts +60 -0
  528. package/tests/pui_login.spec.ts +74 -0
  529. package/tests/pui_modals.spec.ts +144 -0
  530. package/tests/pui_plugins.spec.ts +216 -0
  531. package/tests/pui_printing.spec.ts +149 -0
  532. package/tests/pui_settings.spec.ts +285 -0
  533. package/tests/pui_tables.spec.ts +65 -0
  534. package/tests/settings/selectionList.spec.ts +103 -0
  535. package/tests/settings.ts +54 -0
  536. package/tsconfig.json +25 -0
  537. package/tsconfig.lib.json +13 -0
  538. package/tsconfig.node.json +11 -0
  539. package/vite-env.d.ts +11 -0
  540. package/vite.config.ts +98 -0
  541. 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
+ });