bananas-commerce-admin 0.2.2 → 0.2.4

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 (355) hide show
  1. package/README.md +4 -8
  2. package/dist/cjs/Admin.js +28 -27
  3. package/dist/cjs/Admin.js.map +1 -0
  4. package/dist/cjs/App.js +23 -11
  5. package/dist/cjs/App.js.map +1 -0
  6. package/dist/cjs/api.js +125 -65
  7. package/dist/cjs/api.js.map +1 -0
  8. package/dist/cjs/components/Branding.js +10 -8
  9. package/dist/cjs/components/Branding.js.map +1 -0
  10. package/dist/cjs/components/Hamburger.js +23 -11
  11. package/dist/cjs/components/Hamburger.js.map +1 -0
  12. package/dist/cjs/components/Link.js +9 -7
  13. package/dist/cjs/components/Link.js.map +1 -0
  14. package/dist/cjs/components/Logo.js +5 -3
  15. package/dist/cjs/components/Logo.js.map +1 -0
  16. package/dist/cjs/components/NavBar.js +48 -31
  17. package/dist/cjs/components/NavBar.js.map +1 -0
  18. package/dist/cjs/components/NavBarItem.js +16 -14
  19. package/dist/cjs/components/NavBarItem.js.map +1 -0
  20. package/dist/cjs/components/NavBarRoutes.js +23 -18
  21. package/dist/cjs/components/NavBarRoutes.js.map +1 -0
  22. package/dist/cjs/components/ProgressBar.js +5 -3
  23. package/dist/cjs/components/ProgressBar.js.map +1 -0
  24. package/dist/cjs/components/TitleBar.js +18 -17
  25. package/dist/cjs/components/TitleBar.js.map +1 -0
  26. package/dist/cjs/components/User.js +34 -21
  27. package/dist/cjs/components/User.js.map +1 -0
  28. package/dist/cjs/containers/Content.js +8 -6
  29. package/dist/cjs/containers/Content.js.map +1 -0
  30. package/dist/cjs/containers/ErrorScreen.js +21 -19
  31. package/dist/cjs/containers/ErrorScreen.js.map +1 -0
  32. package/dist/cjs/containers/LoadingScreen.js +64 -49
  33. package/dist/cjs/containers/LoadingScreen.js.map +1 -0
  34. package/dist/cjs/containers/PageErrorBoundary.js +33 -14
  35. package/dist/cjs/containers/PageErrorBoundary.js.map +1 -0
  36. package/dist/cjs/containers/PageLoader.js +129 -40
  37. package/dist/cjs/containers/PageLoader.js.map +1 -0
  38. package/dist/cjs/contexts/ApiContext.js +53 -16
  39. package/dist/cjs/contexts/ApiContext.js.map +1 -0
  40. package/dist/cjs/contexts/I18nContext.js +58 -18
  41. package/dist/cjs/contexts/I18nContext.js.map +1 -0
  42. package/dist/cjs/contexts/RouterContext.js +52 -44
  43. package/dist/cjs/contexts/RouterContext.js.map +1 -0
  44. package/dist/cjs/contexts/UserContext.js +96 -43
  45. package/dist/cjs/contexts/UserContext.js.map +1 -0
  46. package/dist/cjs/extensions/bananas/components/PasswordChangeForm.js +45 -32
  47. package/dist/cjs/extensions/bananas/components/PasswordChangeForm.js.map +1 -0
  48. package/dist/cjs/extensions/bananas/index.js +3 -2
  49. package/dist/cjs/extensions/bananas/index.js.map +1 -0
  50. package/dist/cjs/extensions/bananas/pages/me/list.js +10 -9
  51. package/dist/cjs/extensions/bananas/pages/me/list.js.map +1 -0
  52. package/dist/cjs/extensions/fulfillment/components/AddressInfo.js +8 -6
  53. package/dist/cjs/extensions/fulfillment/components/AddressInfo.js.map +1 -0
  54. package/dist/cjs/extensions/fulfillment/components/ContactInfo.js +9 -7
  55. package/dist/cjs/extensions/fulfillment/components/ContactInfo.js.map +1 -0
  56. package/dist/cjs/extensions/fulfillment/components/RecipientCard.js +14 -12
  57. package/dist/cjs/extensions/fulfillment/components/RecipientCard.js.map +1 -0
  58. package/dist/cjs/extensions/fulfillment/components/ShipmentAccordion.js +124 -65
  59. package/dist/cjs/extensions/fulfillment/components/ShipmentAccordion.js.map +1 -0
  60. package/dist/cjs/extensions/fulfillment/components/ShipmentCard.js +19 -17
  61. package/dist/cjs/extensions/fulfillment/components/ShipmentCard.js.map +1 -0
  62. package/dist/cjs/extensions/fulfillment/components/ShipmentDestinationButtons.js +32 -19
  63. package/dist/cjs/extensions/fulfillment/components/ShipmentDestinationButtons.js.map +1 -0
  64. package/dist/cjs/extensions/fulfillment/components/ShipmentDestinationIcon.js +23 -11
  65. package/dist/cjs/extensions/fulfillment/components/ShipmentDestinationIcon.js.map +1 -0
  66. package/dist/cjs/extensions/fulfillment/components/ShipmentItemsCard.js +73 -46
  67. package/dist/cjs/extensions/fulfillment/components/ShipmentItemsCard.js.map +1 -0
  68. package/dist/cjs/extensions/fulfillment/components/ShipmentItemsTable.js +49 -27
  69. package/dist/cjs/extensions/fulfillment/components/ShipmentItemsTable.js.map +1 -0
  70. package/dist/cjs/extensions/fulfillment/components/ShipmentRow.js +12 -10
  71. package/dist/cjs/extensions/fulfillment/components/ShipmentRow.js.map +1 -0
  72. package/dist/cjs/extensions/fulfillment/components/order/OrderAccordion.js +212 -0
  73. package/dist/cjs/extensions/fulfillment/components/order/OrderAccordion.js.map +1 -0
  74. package/dist/cjs/extensions/fulfillment/components/order/OrderItemsTable.js +96 -0
  75. package/dist/cjs/extensions/fulfillment/components/order/OrderItemsTable.js.map +1 -0
  76. package/dist/cjs/extensions/fulfillment/components/order/OrderStateChip.js +98 -0
  77. package/dist/cjs/extensions/fulfillment/components/order/OrderStateChip.js.map +1 -0
  78. package/dist/cjs/extensions/fulfillment/index.js +59 -12
  79. package/dist/cjs/extensions/fulfillment/index.js.map +1 -0
  80. package/dist/cjs/extensions/fulfillment/pages/order/list.js +50 -36
  81. package/dist/cjs/extensions/fulfillment/pages/order/list.js.map +1 -0
  82. package/dist/cjs/extensions/fulfillment/pages/recipient/detail.js +7 -5
  83. package/dist/cjs/extensions/fulfillment/pages/recipient/detail.js.map +1 -0
  84. package/dist/cjs/extensions/fulfillment/pages/shipment/detail.js +57 -42
  85. package/dist/cjs/extensions/fulfillment/pages/shipment/detail.js.map +1 -0
  86. package/dist/cjs/extensions/fulfillment/pages/shipment/list.js +35 -31
  87. package/dist/cjs/extensions/fulfillment/pages/shipment/list.js.map +1 -0
  88. package/dist/cjs/extensions/fulfillment/types/order.js +3 -0
  89. package/dist/cjs/extensions/fulfillment/types/order.js.map +1 -0
  90. package/dist/cjs/extensions/fulfillment/types/recipient.js +1 -0
  91. package/dist/cjs/extensions/fulfillment/types/recipient.js.map +1 -0
  92. package/dist/cjs/extensions/fulfillment/types/shipment.js +1 -0
  93. package/dist/cjs/extensions/fulfillment/types/shipment.js.map +1 -0
  94. package/dist/cjs/extensions/fulfillment/types/util.js +1 -0
  95. package/dist/cjs/extensions/fulfillment/types/util.js.map +1 -0
  96. package/dist/cjs/extensions/pos/components/PurchaseRow.js +13 -11
  97. package/dist/cjs/extensions/pos/components/PurchaseRow.js.map +1 -0
  98. package/dist/cjs/extensions/pos/components/ReceiptCard.js +45 -43
  99. package/dist/cjs/extensions/pos/components/ReceiptCard.js.map +1 -0
  100. package/dist/cjs/extensions/pos/components/ReceiptLine.js +17 -12
  101. package/dist/cjs/extensions/pos/components/ReceiptLine.js.map +1 -0
  102. package/dist/cjs/extensions/pos/components/ReceiptTable.js +137 -41
  103. package/dist/cjs/extensions/pos/components/ReceiptTable.js.map +1 -0
  104. package/dist/cjs/extensions/pos/components/SearchBar.js +40 -25
  105. package/dist/cjs/extensions/pos/components/SearchBar.js.map +1 -0
  106. package/dist/cjs/extensions/pos/index.js +57 -12
  107. package/dist/cjs/extensions/pos/index.js.map +1 -0
  108. package/dist/cjs/extensions/pos/pages/purchase/detail.js +28 -20
  109. package/dist/cjs/extensions/pos/pages/purchase/detail.js.map +1 -0
  110. package/dist/cjs/extensions/pos/pages/purchase/list.js +39 -32
  111. package/dist/cjs/extensions/pos/pages/purchase/list.js.map +1 -0
  112. package/dist/cjs/extensions/pos/types/purchase.js +1 -0
  113. package/dist/cjs/extensions/pos/types/purchase.js.map +1 -0
  114. package/dist/cjs/extensions/pos/types/receipt.js +8 -0
  115. package/dist/cjs/extensions/pos/types/receipt.js.map +1 -0
  116. package/dist/cjs/forms/LoginForm.js +31 -30
  117. package/dist/cjs/forms/LoginForm.js.map +1 -0
  118. package/dist/cjs/hooks/useAsyncError.js +5 -4
  119. package/dist/cjs/hooks/useAsyncError.js.map +1 -0
  120. package/dist/cjs/hooks/useLocalStorage.js +8 -7
  121. package/dist/cjs/hooks/useLocalStorage.js.map +1 -0
  122. package/dist/cjs/index.js +1 -0
  123. package/dist/cjs/index.js.map +1 -0
  124. package/dist/cjs/pages/DashboardPage.js +4 -3
  125. package/dist/cjs/pages/DashboardPage.js.map +1 -0
  126. package/dist/cjs/pages/LoginPage.js +12 -10
  127. package/dist/cjs/pages/LoginPage.js.map +1 -0
  128. package/dist/cjs/router/Router.js +25 -19
  129. package/dist/cjs/router/Router.js.map +1 -0
  130. package/dist/cjs/router/routes.js +8 -7
  131. package/dist/cjs/router/routes.js.map +1 -0
  132. package/dist/cjs/types/index.js +1 -0
  133. package/dist/cjs/types/index.js.map +1 -0
  134. package/dist/cjs/util/format_purchase_number.js +2 -1
  135. package/dist/cjs/util/format_purchase_number.js.map +1 -0
  136. package/dist/cjs/util/get_cookie.js +4 -3
  137. package/dist/cjs/util/get_cookie.js.map +1 -0
  138. package/dist/cjs/util/index.js +10 -7
  139. package/dist/cjs/util/index.js.map +1 -0
  140. package/dist/cjs/util/is_email.js +1 -0
  141. package/dist/cjs/util/is_email.js.map +1 -0
  142. package/dist/cjs/util/is_positive_integer.js +2 -1
  143. package/dist/cjs/util/is_positive_integer.js.map +1 -0
  144. package/dist/cjs/util/select_styles.js +24 -7
  145. package/dist/cjs/util/select_styles.js.map +1 -0
  146. package/dist/esm/Admin.js +17 -16
  147. package/dist/esm/Admin.js.map +1 -0
  148. package/dist/esm/App.js +15 -3
  149. package/dist/esm/App.js.map +1 -0
  150. package/dist/esm/api.js +125 -63
  151. package/dist/esm/api.js.map +1 -0
  152. package/dist/esm/components/Branding.js +4 -2
  153. package/dist/esm/components/Branding.js.map +1 -0
  154. package/dist/esm/components/Hamburger.js +17 -5
  155. package/dist/esm/components/Hamburger.js.map +1 -0
  156. package/dist/esm/components/Link.js +6 -4
  157. package/dist/esm/components/Link.js.map +1 -0
  158. package/dist/esm/components/Logo.js +4 -2
  159. package/dist/esm/components/Logo.js.map +1 -0
  160. package/dist/esm/components/NavBar.js +38 -21
  161. package/dist/esm/components/NavBar.js.map +1 -0
  162. package/dist/esm/components/NavBarItem.js +8 -6
  163. package/dist/esm/components/NavBarItem.js.map +1 -0
  164. package/dist/esm/components/NavBarRoutes.js +19 -14
  165. package/dist/esm/components/NavBarRoutes.js.map +1 -0
  166. package/dist/esm/components/ProgressBar.js +3 -1
  167. package/dist/esm/components/ProgressBar.js.map +1 -0
  168. package/dist/esm/components/TitleBar.js +9 -8
  169. package/dist/esm/components/TitleBar.js.map +1 -0
  170. package/dist/esm/components/User.js +24 -11
  171. package/dist/esm/components/User.js.map +1 -0
  172. package/dist/esm/containers/Content.js +5 -3
  173. package/dist/esm/containers/Content.js.map +1 -0
  174. package/dist/esm/containers/ErrorScreen.js +10 -8
  175. package/dist/esm/containers/ErrorScreen.js.map +1 -0
  176. package/dist/esm/containers/LoadingScreen.js +56 -41
  177. package/dist/esm/containers/LoadingScreen.js.map +1 -0
  178. package/dist/esm/containers/PageErrorBoundary.js +33 -13
  179. package/dist/esm/containers/PageErrorBoundary.js.map +1 -0
  180. package/dist/esm/containers/PageLoader.js +124 -34
  181. package/dist/esm/containers/PageLoader.js.map +1 -0
  182. package/dist/esm/contexts/ApiContext.js +49 -12
  183. package/dist/esm/contexts/ApiContext.js.map +1 -0
  184. package/dist/esm/contexts/I18nContext.js +55 -15
  185. package/dist/esm/contexts/I18nContext.js.map +1 -0
  186. package/dist/esm/contexts/RouterContext.js +47 -39
  187. package/dist/esm/contexts/RouterContext.js.map +1 -0
  188. package/dist/esm/contexts/UserContext.js +93 -40
  189. package/dist/esm/contexts/UserContext.js.map +1 -0
  190. package/dist/esm/extensions/bananas/components/PasswordChangeForm.js +32 -19
  191. package/dist/esm/extensions/bananas/components/PasswordChangeForm.js.map +1 -0
  192. package/dist/esm/extensions/bananas/index.js +3 -2
  193. package/dist/esm/extensions/bananas/index.js.map +1 -0
  194. package/dist/esm/extensions/bananas/pages/me/list.js +3 -2
  195. package/dist/esm/extensions/bananas/pages/me/list.js.map +1 -0
  196. package/dist/esm/extensions/fulfillment/components/AddressInfo.js +5 -3
  197. package/dist/esm/extensions/fulfillment/components/AddressInfo.js.map +1 -0
  198. package/dist/esm/extensions/fulfillment/components/ContactInfo.js +5 -3
  199. package/dist/esm/extensions/fulfillment/components/ContactInfo.js.map +1 -0
  200. package/dist/esm/extensions/fulfillment/components/RecipientCard.js +6 -4
  201. package/dist/esm/extensions/fulfillment/components/RecipientCard.js.map +1 -0
  202. package/dist/esm/extensions/fulfillment/components/ShipmentAccordion.js +109 -50
  203. package/dist/esm/extensions/fulfillment/components/ShipmentAccordion.js.map +1 -0
  204. package/dist/esm/extensions/fulfillment/components/ShipmentCard.js +8 -6
  205. package/dist/esm/extensions/fulfillment/components/ShipmentCard.js.map +1 -0
  206. package/dist/esm/extensions/fulfillment/components/ShipmentDestinationButtons.js +27 -14
  207. package/dist/esm/extensions/fulfillment/components/ShipmentDestinationButtons.js.map +1 -0
  208. package/dist/esm/extensions/fulfillment/components/ShipmentDestinationIcon.js +18 -6
  209. package/dist/esm/extensions/fulfillment/components/ShipmentDestinationIcon.js.map +1 -0
  210. package/dist/esm/extensions/fulfillment/components/ShipmentItemsCard.js +54 -27
  211. package/dist/esm/extensions/fulfillment/components/ShipmentItemsCard.js.map +1 -0
  212. package/dist/esm/extensions/fulfillment/components/ShipmentItemsTable.js +40 -18
  213. package/dist/esm/extensions/fulfillment/components/ShipmentItemsTable.js.map +1 -0
  214. package/dist/esm/extensions/fulfillment/components/ShipmentRow.js +8 -6
  215. package/dist/esm/extensions/fulfillment/components/ShipmentRow.js.map +1 -0
  216. package/dist/esm/extensions/fulfillment/components/order/OrderAccordion.js +207 -0
  217. package/dist/esm/extensions/fulfillment/components/order/OrderAccordion.js.map +1 -0
  218. package/dist/esm/extensions/fulfillment/components/order/OrderItemsTable.js +91 -0
  219. package/dist/esm/extensions/fulfillment/components/order/OrderItemsTable.js.map +1 -0
  220. package/dist/esm/extensions/fulfillment/components/order/OrderStateChip.js +70 -0
  221. package/dist/esm/extensions/fulfillment/components/order/OrderStateChip.js.map +1 -0
  222. package/dist/esm/extensions/fulfillment/index.js +61 -14
  223. package/dist/esm/extensions/fulfillment/index.js.map +1 -0
  224. package/dist/esm/extensions/fulfillment/pages/order/list.js +40 -26
  225. package/dist/esm/extensions/fulfillment/pages/order/list.js.map +1 -0
  226. package/dist/esm/extensions/fulfillment/pages/recipient/detail.js +4 -2
  227. package/dist/esm/extensions/fulfillment/pages/recipient/detail.js.map +1 -0
  228. package/dist/esm/extensions/fulfillment/pages/shipment/detail.js +38 -23
  229. package/dist/esm/extensions/fulfillment/pages/shipment/detail.js.map +1 -0
  230. package/dist/esm/extensions/fulfillment/pages/shipment/list.js +24 -20
  231. package/dist/esm/extensions/fulfillment/pages/shipment/list.js.map +1 -0
  232. package/dist/esm/extensions/fulfillment/types/order.js +2 -0
  233. package/dist/esm/extensions/fulfillment/types/order.js.map +1 -0
  234. package/dist/esm/extensions/fulfillment/types/recipient.js +1 -0
  235. package/dist/esm/extensions/fulfillment/types/recipient.js.map +1 -0
  236. package/dist/esm/extensions/fulfillment/types/shipment.js +1 -0
  237. package/dist/esm/extensions/fulfillment/types/shipment.js.map +1 -0
  238. package/dist/esm/extensions/fulfillment/types/util.js +1 -0
  239. package/dist/esm/extensions/fulfillment/types/util.js.map +1 -0
  240. package/dist/esm/extensions/pos/components/PurchaseRow.js +8 -6
  241. package/dist/esm/extensions/pos/components/PurchaseRow.js.map +1 -0
  242. package/dist/esm/extensions/pos/components/ReceiptCard.js +28 -26
  243. package/dist/esm/extensions/pos/components/ReceiptCard.js.map +1 -0
  244. package/dist/esm/extensions/pos/components/ReceiptLine.js +11 -6
  245. package/dist/esm/extensions/pos/components/ReceiptLine.js.map +1 -0
  246. package/dist/esm/extensions/pos/components/ReceiptTable.js +128 -32
  247. package/dist/esm/extensions/pos/components/ReceiptTable.js.map +1 -0
  248. package/dist/esm/extensions/pos/components/SearchBar.js +28 -13
  249. package/dist/esm/extensions/pos/components/SearchBar.js.map +1 -0
  250. package/dist/esm/extensions/pos/index.js +58 -13
  251. package/dist/esm/extensions/pos/index.js.map +1 -0
  252. package/dist/esm/extensions/pos/pages/purchase/detail.js +20 -12
  253. package/dist/esm/extensions/pos/pages/purchase/detail.js.map +1 -0
  254. package/dist/esm/extensions/pos/pages/purchase/list.js +23 -16
  255. package/dist/esm/extensions/pos/pages/purchase/list.js.map +1 -0
  256. package/dist/esm/extensions/pos/types/purchase.js +1 -0
  257. package/dist/esm/extensions/pos/types/purchase.js.map +1 -0
  258. package/dist/esm/extensions/pos/types/receipt.js +7 -1
  259. package/dist/esm/extensions/pos/types/receipt.js.map +1 -0
  260. package/dist/esm/forms/LoginForm.js +19 -18
  261. package/dist/esm/forms/LoginForm.js.map +1 -0
  262. package/dist/esm/hooks/useAsyncError.js +4 -3
  263. package/dist/esm/hooks/useAsyncError.js.map +1 -0
  264. package/dist/esm/hooks/useLocalStorage.js +7 -6
  265. package/dist/esm/hooks/useLocalStorage.js.map +1 -0
  266. package/dist/esm/index.js +1 -0
  267. package/dist/esm/index.js.map +1 -0
  268. package/dist/esm/pages/DashboardPage.js +3 -2
  269. package/dist/esm/pages/DashboardPage.js.map +1 -0
  270. package/dist/esm/pages/LoginPage.js +5 -3
  271. package/dist/esm/pages/LoginPage.js.map +1 -0
  272. package/dist/esm/router/Router.js +17 -11
  273. package/dist/esm/router/Router.js.map +1 -0
  274. package/dist/esm/router/routes.js +7 -6
  275. package/dist/esm/router/routes.js.map +1 -0
  276. package/dist/esm/types/index.js +1 -0
  277. package/dist/esm/types/index.js.map +1 -0
  278. package/dist/esm/util/format_purchase_number.js +2 -1
  279. package/dist/esm/util/format_purchase_number.js.map +1 -0
  280. package/dist/esm/util/get_cookie.js +4 -3
  281. package/dist/esm/util/get_cookie.js.map +1 -0
  282. package/dist/esm/util/index.js +10 -7
  283. package/dist/esm/util/index.js.map +1 -0
  284. package/dist/esm/util/is_email.js +1 -0
  285. package/dist/esm/util/is_email.js.map +1 -0
  286. package/dist/esm/util/is_positive_integer.js +2 -1
  287. package/dist/esm/util/is_positive_integer.js.map +1 -0
  288. package/dist/esm/util/select_styles.js +25 -8
  289. package/dist/esm/util/select_styles.js.map +1 -0
  290. package/dist/types/Admin.d.ts +1 -1
  291. package/dist/types/App.d.ts +1 -1
  292. package/dist/types/components/Hamburger.d.ts +1 -1
  293. package/dist/types/components/Link.d.ts +1 -1
  294. package/dist/types/components/User.d.ts +4 -7
  295. package/dist/types/containers/PageErrorBoundary.d.ts +1 -1
  296. package/dist/types/containers/PageLoader.d.ts +1 -0
  297. package/dist/types/contexts/RouterContext.d.ts +2 -2
  298. package/dist/types/extensions/fulfillment/components/ShipmentDestinationIcon.d.ts +1 -1
  299. package/dist/types/extensions/fulfillment/components/order/OrderAccordion.d.ts +7 -0
  300. package/dist/types/extensions/fulfillment/components/order/OrderItemsTable.d.ts +9 -0
  301. package/dist/types/extensions/fulfillment/components/order/OrderStateChip.d.ts +10 -0
  302. package/dist/types/extensions/fulfillment/pages/order/list.d.ts +2 -2
  303. package/dist/types/extensions/fulfillment/types/order.d.ts +38 -0
  304. package/dist/types/extensions/fulfillment/types/shipment.d.ts +1 -1
  305. package/dist/types/extensions/pos/components/PurchaseRow.d.ts +2 -2
  306. package/dist/types/extensions/pos/components/ReceiptCard.d.ts +3 -3
  307. package/dist/types/extensions/pos/components/ReceiptLine.d.ts +1 -0
  308. package/dist/types/extensions/pos/components/ReceiptTable.d.ts +4 -3
  309. package/dist/types/extensions/pos/components/SearchBar.d.ts +1 -1
  310. package/dist/types/extensions/pos/pages/purchase/list.d.ts +2 -2
  311. package/dist/types/extensions/pos/types/purchase.d.ts +27 -6
  312. package/dist/types/extensions/pos/types/receipt.d.ts +7 -9
  313. package/dist/types/router/Router.d.ts +2 -1
  314. package/dist/types/types/index.d.ts +7 -4
  315. package/example/index.tsx +28 -9
  316. package/example/package.json +18 -8
  317. package/example/scripts/build.js +4 -0
  318. package/example/scripts/options.js +81 -0
  319. package/{example/pages/.gitkeep → nodemon.json} +0 -0
  320. package/package.json +8 -4
  321. package/src/Admin.tsx +36 -36
  322. package/src/App.tsx +8 -4
  323. package/src/components/TitleBar.tsx +23 -18
  324. package/src/containers/Content.tsx +1 -1
  325. package/src/containers/PageLoader.tsx +32 -14
  326. package/src/contexts/UserContext.tsx +15 -14
  327. package/src/extensions/fulfillment/components/ShipmentAccordion.tsx +126 -116
  328. package/src/extensions/fulfillment/components/ShipmentCard.tsx +3 -9
  329. package/src/extensions/fulfillment/components/ShipmentItemsCard.tsx +42 -45
  330. package/src/extensions/fulfillment/components/order/OrderAccordion.tsx +213 -0
  331. package/src/extensions/fulfillment/components/order/OrderItemsTable.tsx +128 -0
  332. package/src/extensions/fulfillment/components/order/OrderStateChip.tsx +79 -0
  333. package/src/extensions/fulfillment/index.tsx +27 -9
  334. package/src/extensions/fulfillment/pages/order/list.tsx +43 -54
  335. package/src/extensions/fulfillment/pages/shipment/detail.tsx +47 -55
  336. package/src/extensions/fulfillment/types/order.ts +53 -0
  337. package/src/extensions/pos/components/PurchaseRow.tsx +3 -5
  338. package/src/extensions/pos/components/ReceiptCard.tsx +50 -47
  339. package/src/extensions/pos/components/ReceiptLine.tsx +6 -5
  340. package/src/extensions/pos/components/ReceiptTable.tsx +183 -78
  341. package/src/extensions/pos/index.tsx +3 -3
  342. package/src/extensions/pos/pages/purchase/detail.tsx +29 -34
  343. package/src/extensions/pos/pages/purchase/list.tsx +14 -20
  344. package/src/extensions/pos/types/purchase.ts +28 -6
  345. package/src/extensions/pos/types/receipt.ts +8 -9
  346. package/src/pages/DashboardPage.tsx +1 -1
  347. package/src/router/Router.tsx +14 -15
  348. package/src/types/index.ts +4 -1
  349. package/tsconfig.json +5 -13
  350. package/example/Dockerfile +0 -27
  351. package/example/README.md +0 -6
  352. package/example/build.js +0 -19
  353. package/example/docker-compose.yml +0 -7
  354. package/example/package-lock.json +0 -1762
  355. package/example/public/index.html +0 -14
@@ -22,9 +22,15 @@ export interface PageLoaderProps {
22
22
  route: RouteInfo;
23
23
  page: PageComponent | Promise<PageComponent>;
24
24
  request?: OpenAPI.Request;
25
+ defaultRequest?: OpenAPI.Request;
25
26
  }
26
27
 
27
- const PageLoader: React.FC<PageLoaderProps> = ({ route, page, request }) => {
28
+ const PageLoader: React.FC<PageLoaderProps> = ({
29
+ route,
30
+ page,
31
+ request,
32
+ defaultRequest,
33
+ }) => {
28
34
  const Page = React.lazy(async () => ({
29
35
  default: await Promise.resolve(page),
30
36
  }));
@@ -37,17 +43,29 @@ const PageLoader: React.FC<PageLoaderProps> = ({ route, page, request }) => {
37
43
 
38
44
  React.useEffect(() => {
39
45
  if (data === null) {
40
- api.operations[route.id].call({
41
- params: { ...params, ...request?.params },
42
- query: new URLSearchParams([
43
- ...searchParams.entries(),
44
- ...(request?.query != null
45
- ? request.query instanceof URLSearchParams
46
- ? request.query.entries()
47
- : Object.entries(request.query)
48
- : []),
49
- ]),
50
- })
46
+ const query =
47
+ Array.from(searchParams.entries()).length == 0
48
+ ? defaultRequest?.query != null
49
+ ? defaultRequest.query instanceof URLSearchParams
50
+ ? defaultRequest.query.entries()
51
+ : Object.entries(defaultRequest.query)
52
+ : []
53
+ : searchParams.entries();
54
+
55
+ api.operations[route.id]
56
+ .call({
57
+ params: { ...params, ...request?.params },
58
+ query: new URLSearchParams([
59
+ ...Array.from(query),
60
+ ...Array.from(
61
+ request?.query != null
62
+ ? request.query instanceof URLSearchParams
63
+ ? request.query.entries()
64
+ : Object.entries(request.query)
65
+ : []
66
+ ),
67
+ ]),
68
+ })
51
69
  .then(async (response) => {
52
70
  if (response.ok) {
53
71
  setData(await response.json());
@@ -55,8 +73,8 @@ const PageLoader: React.FC<PageLoaderProps> = ({ route, page, request }) => {
55
73
  throwError(
56
74
  new PageLoadFailedError(
57
75
  response,
58
- `Page data load failed with ${response.status} ${response.statusText}`,
59
- ),
76
+ `Page data load failed with ${response.status} ${response.statusText}`
77
+ )
60
78
  );
61
79
  }
62
80
  })
@@ -19,18 +19,18 @@ interface UserContext {
19
19
  changePassword: (
20
20
  oldPassword: string,
21
21
  newPassword1: string,
22
- newPassword2: string,
22
+ newPassword2: string
23
23
  ) => Promise<void>;
24
24
  }
25
25
 
26
26
  const UserContext = React.createContext<UserContext>(
27
- undefined as unknown as UserContext,
27
+ undefined as unknown as UserContext
28
28
  );
29
29
  export const useUser = () => React.useContext(UserContext);
30
30
 
31
- export const UserContextProvider: React.FC<React.PropsWithChildren<{}>> = (
32
- { children },
33
- ) => {
31
+ export const UserContextProvider: React.FC<React.PropsWithChildren<{}>> = ({
32
+ children,
33
+ }) => {
34
34
  const api = useApi();
35
35
  const [user, setUser] = useLocalStorage("user", null);
36
36
 
@@ -62,16 +62,17 @@ export const UserContextProvider: React.FC<React.PropsWithChildren<{}>> = (
62
62
  const changePassword = async (
63
63
  oldPassword: string,
64
64
  newPassword1: string,
65
- newPassword2: string,
65
+ newPassword2: string
66
66
  ) => {
67
- const response = await api?.operations["bananas.change_password:create"]
68
- .call({
69
- body: {
70
- old_password: oldPassword,
71
- new_password1: newPassword1,
72
- new_password2: newPassword2,
73
- },
74
- });
67
+ const response = await api?.operations[
68
+ "bananas.change_password:create"
69
+ ].call({
70
+ body: {
71
+ old_password: oldPassword,
72
+ new_password1: newPassword1,
73
+ new_password2: newPassword2,
74
+ },
75
+ });
75
76
 
76
77
  if (!response.ok) {
77
78
  throw new Error("Failed to change password");
@@ -26,9 +26,9 @@ interface ShipmentAccordionProps {
26
26
  shipment: ShipmentListItem;
27
27
  }
28
28
 
29
- export const ShipmentAccordion: React.FC<ShipmentAccordionProps> = (
30
- { shipment },
31
- ) => {
29
+ export const ShipmentAccordion: React.FC<ShipmentAccordionProps> = ({
30
+ shipment,
31
+ }) => {
32
32
  const api = useApi();
33
33
  const { enqueueSnackbar } = useSnackbar();
34
34
  const [details, setDetails] = React.useState<ShipmentDetail | null>(null);
@@ -39,90 +39,106 @@ export const ShipmentAccordion: React.FC<ShipmentAccordionProps> = (
39
39
  shipment.name,
40
40
  shipment.email,
41
41
  shipment.phone,
42
- ].filter((entry) => entry != null).join(" • ");
42
+ ]
43
+ .filter((entry) => entry != null)
44
+ .join(" • ");
43
45
 
44
46
  const loadDetails = () => {
45
47
  setDetails(null);
46
- api.operations["fulfillment.shipment:detail"].call({
47
- params: {
48
- "shipment_reference": shipment.shipment_reference,
49
- },
50
- }).then(async (response) => setDetails(await response.json()));
48
+ api.operations["fulfillment.shipment:detail"]
49
+ .call({
50
+ params: {
51
+ shipment_reference: shipment.shipment_reference,
52
+ },
53
+ })
54
+ .then(async (response) => setDetails(await response.json()));
51
55
  };
52
56
 
53
57
  const markAsArrived = () => {
54
58
  setButtonsLoading(true);
55
- api.operations["fulfillment.shipment:arrived"].call({
56
- params: { shipment_reference: shipment.shipment_reference },
57
- body: selected,
58
- }).then((response) => {
59
- if (response.ok) {
60
- enqueueSnackbar("Successfully marked shipment items as arrived!", {
61
- variant: "success",
62
- });
63
- } else {
64
- enqueueSnackbar(
65
- "Failed to mark shipment items as arrived, view console for more info",
66
- {
67
- variant: "error",
68
- },
69
- );
70
- throw response;
71
- }
72
- }).finally(() => {
73
- setButtonsLoading(false);
74
- loadDetails();
75
- });
59
+ api.operations["fulfillment.shipment:arrived"]
60
+ .call({
61
+ params: { shipment_reference: shipment.shipment_reference },
62
+ body: selected,
63
+ })
64
+ .then((response) => {
65
+ if (response.ok) {
66
+ enqueueSnackbar("Successfully marked shipment items as arrived!", {
67
+ variant: "success",
68
+ });
69
+ } else {
70
+ enqueueSnackbar(
71
+ "Failed to mark shipment items as arrived, view console for more info",
72
+ {
73
+ variant: "error",
74
+ }
75
+ );
76
+ throw response;
77
+ }
78
+ })
79
+ .finally(() => {
80
+ setButtonsLoading(false);
81
+ loadDetails();
82
+ });
76
83
  };
77
84
 
78
85
  const markAsDelivered = () => {
79
86
  setButtonsLoading(true);
80
- api.operations["fulfillment.shipment:delivered"].call({
81
- params: { shipment_reference: shipment.shipment_reference },
82
- }).then((response) => {
83
- if (response.ok) {
84
- enqueueSnackbar("Successfully marked shipment as delivered!", {
85
- variant: "success",
86
- });
87
- } else {
88
- enqueueSnackbar(
89
- "Failed to mark shipment as delivered, view console for more info",
90
- {
91
- variant: "error",
92
- },
93
- );
94
- throw response;
95
- }
96
- }).finally(() => {
97
- setButtonsLoading(false);
98
- loadDetails();
99
- });
87
+ api.operations["fulfillment.shipment:delivered"]
88
+ .call({
89
+ params: { shipment_reference: shipment.shipment_reference },
90
+ })
91
+ .then((response) => {
92
+ if (response.ok) {
93
+ enqueueSnackbar("Successfully marked shipment as delivered!", {
94
+ variant: "success",
95
+ });
96
+ } else {
97
+ enqueueSnackbar(
98
+ "Failed to mark shipment as delivered, view console for more info",
99
+ {
100
+ variant: "error",
101
+ }
102
+ );
103
+ throw response;
104
+ }
105
+ })
106
+ .finally(() => {
107
+ setButtonsLoading(false);
108
+ loadDetails();
109
+ });
100
110
  };
101
111
 
102
112
  const doCancel = () => {
103
- api.operations["fulfillment.shipment:cancel"].call({
104
- params: { shipment_reference: shipment.shipment_reference },
105
- }).then((response) => {
106
- if (response.ok) {
107
- enqueueSnackbar("Successfully cancelled shipment!", {
108
- variant: "success",
109
- });
110
- } else {
111
- enqueueSnackbar(
112
- "Failed to cancel shipment, view console for more info",
113
- {
114
- variant: "error",
115
- },
116
- );
117
- throw response;
118
- }
119
- }).finally(() => {
120
- setButtonsLoading(false);
121
- loadDetails();
122
- });
113
+ api.operations["fulfillment.shipment:cancel"]
114
+ .call({
115
+ params: { shipment_reference: shipment.shipment_reference },
116
+ })
117
+ .then((response) => {
118
+ if (response.ok) {
119
+ enqueueSnackbar("Successfully cancelled shipment!", {
120
+ variant: "success",
121
+ });
122
+ } else {
123
+ enqueueSnackbar(
124
+ "Failed to cancel shipment, view console for more info",
125
+ {
126
+ variant: "error",
127
+ }
128
+ );
129
+ throw response;
130
+ }
131
+ })
132
+ .finally(() => {
133
+ setButtonsLoading(false);
134
+ loadDetails();
135
+ });
123
136
  };
124
137
 
125
138
  const StatusButton = () => {
139
+ if (!details) {
140
+ return null;
141
+ }
126
142
  const props: LoadingButtonProps = {
127
143
  variant: "contained",
128
144
  color: "secondary",
@@ -130,11 +146,11 @@ export const ShipmentAccordion: React.FC<ShipmentAccordionProps> = (
130
146
  disabled: buttonsLoading,
131
147
  };
132
148
 
133
- if (shipment.date_confirmed || shipment.date_cancelled) {
149
+ if (details.date_delivered || details.date_cancelled) {
134
150
  return null;
135
151
  }
136
152
 
137
- if (!shipment.date_arrived_at_destination) {
153
+ if (!details.date_arrived_at_destination) {
138
154
  props.disabled ||= selected.length === 0;
139
155
  return (
140
156
  <LoadingButton {...props} onClick={markAsArrived}>
@@ -143,7 +159,7 @@ export const ShipmentAccordion: React.FC<ShipmentAccordionProps> = (
143
159
  );
144
160
  }
145
161
 
146
- if (shipment.date_arrived_at_destination) {
162
+ if (details.date_arrived_at_destination) {
147
163
  return (
148
164
  <LoadingButton {...props} onClick={markAsDelivered}>
149
165
  Delivered
@@ -155,60 +171,54 @@ export const ShipmentAccordion: React.FC<ShipmentAccordionProps> = (
155
171
  };
156
172
 
157
173
  return (
158
- <Accordion onChange={() => details == null ? loadDetails() : void 0}>
174
+ <Accordion onChange={() => (details == null ? loadDetails() : void 0)}>
159
175
  <AccordionSummary sx={{ margin: 1 }} expandIcon={<ExpandMoreIcon />}>
160
- {
161
- /* TODO: Re-enable when we implement some kind of bulk update thing
176
+ {/* TODO: Re-enable when we implement some kind of bulk update thing
162
177
  <Checkbox
163
178
  color="secondary"
164
179
  onClick={(event) => event.stopPropagation()}
165
180
  />
166
- */
167
- }
168
- <Typography sx={{ marginY: "auto", flexGrow: 1 }}>
169
- {title}
170
- </Typography>
181
+ */}
182
+ <Typography sx={{ marginY: "auto", flexGrow: 1 }}>{title}</Typography>
171
183
  <ShipmentDestinationIcon
172
184
  sx={{ marginY: "auto", marginX: 1 }}
173
185
  type={shipment.destination_type}
174
186
  />
175
187
  </AccordionSummary>
176
- {details != null
177
- ? (
178
- <>
179
- <AccordionDetails>
180
- <ShipmentItemsTable
181
- items={details.items}
182
- editable={!shipment.date_confirmed &&
183
- !shipment.date_cancelled &&
184
- !shipment.date_arrived_at_destination}
185
- onSelect={setSelected}
186
- />
187
- </AccordionDetails>
188
- <AccordionActions>
189
- {!shipment.date_confirmed && !shipment.date_cancelled
190
- ? (
191
- <Button variant="outlined" color="error" onClick={doCancel}>
192
- Cancel order
193
- </Button>
194
- )
195
- : null}
196
- <StatusButton />
197
- </AccordionActions>
198
- </>
199
- )
200
- : (
201
- <AccordionDetails
202
- sx={{
203
- display: "flex",
204
- justifyContent: "center",
205
- alignItems: "center",
206
- minHeight: 100,
207
- }}
208
- >
209
- <CircularProgress color="secondary" />
188
+ {details != null ? (
189
+ <>
190
+ <AccordionDetails>
191
+ <ShipmentItemsTable
192
+ items={details.items}
193
+ editable={
194
+ !details.date_confirmed &&
195
+ !details.date_cancelled &&
196
+ !details.date_arrived_at_destination
197
+ }
198
+ onSelect={setSelected}
199
+ />
210
200
  </AccordionDetails>
211
- )}
201
+ <AccordionActions>
202
+ {!details.date_confirmed && !details.date_cancelled ? (
203
+ <Button variant="outlined" color="error" onClick={doCancel}>
204
+ Cancel order
205
+ </Button>
206
+ ) : null}
207
+ <StatusButton />
208
+ </AccordionActions>
209
+ </>
210
+ ) : (
211
+ <AccordionDetails
212
+ sx={{
213
+ display: "flex",
214
+ justifyContent: "center",
215
+ alignItems: "center",
216
+ minHeight: 100,
217
+ }}
218
+ >
219
+ <CircularProgress color="secondary" />
220
+ </AccordionDetails>
221
+ )}
212
222
  </Accordion>
213
223
  );
214
224
  };
@@ -60,9 +60,7 @@ export const ShipmentCard: React.FC<ShipmentCardProps> = ({ shipment }) => {
60
60
  minHeight={100}
61
61
  >
62
62
  <Box sx={{ width: "100%" }}>
63
- <Typography>
64
- {shipment.shipment_reference}
65
- </Typography>
63
+ <Typography>{shipment.shipment_reference}</Typography>
66
64
  <Typography>
67
65
  {shipment.date_sent != null
68
66
  ? dateTimeFormatter.format(new Date(shipment.date_sent))
@@ -77,12 +75,8 @@ export const ShipmentCard: React.FC<ShipmentCardProps> = ({ shipment }) => {
77
75
  />
78
76
  </Box>
79
77
  <Box sx={{ width: "100%" }}>
80
- <Typography>
81
- {shipment.carrier}
82
- </Typography>
83
- <Typography>
84
- {shipment.tracking_number}
85
- </Typography>
78
+ <Typography>{shipment.carrier}</Typography>
79
+ <Typography>{shipment.tracking_number}</Typography>
86
80
  </Box>
87
81
  </Stack>
88
82
  </CardActionArea>
@@ -25,21 +25,21 @@ export interface ShipmentItemsCardProps {
25
25
  shipment: Shipment;
26
26
  }
27
27
 
28
- export const ShipmentItemsCard: React.FC<ShipmentItemsCardProps> = (
29
- { shipment },
30
- ) => {
28
+ export const ShipmentItemsCard: React.FC<ShipmentItemsCardProps> = ({
29
+ shipment,
30
+ }) => {
31
31
  const theme = useTheme();
32
32
  const api = useApi();
33
33
  const { enqueueSnackbar } = useSnackbar();
34
34
  const [selected, setSelected] = React.useState<ShipmentItem[]>([]);
35
35
  const [loading, setLoading] = React.useState(false);
36
36
  const [disabled, setDisabled] = React.useState(
37
- false, /* "date_arrived_at_destination" in shipment && shipment.date_arrived_at_destination != null */
37
+ false /* "date_arrived_at_destination" in shipment && shipment.date_arrived_at_destination != null */
38
38
  );
39
39
 
40
40
  const toggleSelectAll = (
41
41
  _: React.ChangeEvent<HTMLInputElement>,
42
- checked: boolean,
42
+ checked: boolean
43
43
  ) => {
44
44
  setSelected(checked ? shipment.items : []);
45
45
  };
@@ -65,27 +65,27 @@ export const ShipmentItemsCard: React.FC<ShipmentItemsCardProps> = (
65
65
 
66
66
  const markAsArrived = () => {
67
67
  setLoading(true);
68
- api.operations["fulfillment.shipment:arrived"].call({
69
- params: { shipment_reference: shipment.shipment_reference },
70
- body: selected,
71
- }).then((response) => {
72
- if (response.ok) {
73
- enqueueSnackbar("Successfully marked shipment items as arrived!", {
74
- variant: "success",
75
- });
76
- setDisabled(true);
77
- } else {
78
- enqueueSnackbar(
79
- "Failed to mark shipment items as arrived, view console for more info",
80
- {
68
+ api.operations["fulfillment.shipment:arrived"]
69
+ .call({
70
+ params: { shipment_reference: shipment.shipment_reference },
71
+ body: selected,
72
+ })
73
+ .then((response) => {
74
+ if (response.ok) {
75
+ enqueueSnackbar("Successfully marked shipment items as arrived!", {
76
+ variant: "success",
77
+ });
78
+ setDisabled(true);
79
+ } else {
80
+ enqueueSnackbar("Failed to mark order as ready for pickup", {
81
81
  variant: "error",
82
- },
83
- );
84
- throw response;
85
- }
86
- }).finally(() => {
87
- setLoading(false);
88
- });
82
+ });
83
+ throw response;
84
+ }
85
+ })
86
+ .finally(() => {
87
+ setLoading(false);
88
+ });
89
89
  };
90
90
 
91
91
  return (
@@ -93,9 +93,7 @@ export const ShipmentItemsCard: React.FC<ShipmentItemsCardProps> = (
93
93
  <CardHeader
94
94
  title={
95
95
  <Typography variant="h6">
96
- <b>
97
- Items
98
- </b>
96
+ <b>Items</b>
99
97
  </Typography>
100
98
  }
101
99
  avatar={<Inventory2OutlinedIcon />}
@@ -113,27 +111,27 @@ export const ShipmentItemsCard: React.FC<ShipmentItemsCardProps> = (
113
111
  <TableCell align="left" padding="checkbox">
114
112
  <Checkbox
115
113
  color="secondary"
116
- indeterminate={selected.length > 0 &&
117
- selected.length < shipment.items.length}
118
- checked={shipment.items.length !== 0 &&
119
- selected.length === shipment.items.length}
114
+ indeterminate={
115
+ selected.length > 0 &&
116
+ selected.length < shipment.items.length
117
+ }
118
+ checked={
119
+ shipment.items.length !== 0 &&
120
+ selected.length === shipment.items.length
121
+ }
120
122
  onChange={toggleSelectAll}
121
123
  disabled={disabled || shipment.items.length === 0}
122
124
  />
123
125
  </TableCell>
124
- <TableCell align="left">
125
- Reference
126
- </TableCell>
127
- <TableCell align="right">
128
- Quantity
129
- </TableCell>
126
+ <TableCell align="left">Reference</TableCell>
127
+ <TableCell align="right">Quantity</TableCell>
130
128
  </TableRow>
131
129
  </TableHead>
132
130
  <TableBody>
133
131
  {shipment.items.map((item) => {
134
- const isSelected = selected.map(({ code }) => code).includes(
135
- item.code,
136
- );
132
+ const isSelected = selected
133
+ .map(({ code }) => code)
134
+ .includes(item.code);
137
135
  return (
138
136
  <TableRow key={item.code}>
139
137
  <TableCell align="left" padding="checkbox">
@@ -144,9 +142,7 @@ export const ShipmentItemsCard: React.FC<ShipmentItemsCardProps> = (
144
142
  onChange={(_, checked) => toggleItem(item, checked)}
145
143
  />
146
144
  </TableCell>
147
- <TableCell align="left">
148
- {item.code}
149
- </TableCell>
145
+ <TableCell align="left">{item.code}</TableCell>
150
146
  <TableCell align="right">
151
147
  <Input
152
148
  type="number"
@@ -157,7 +153,8 @@ export const ShipmentItemsCard: React.FC<ShipmentItemsCardProps> = (
157
153
  itemQuantityChange({
158
154
  code: item.code,
159
155
  quantity: parseInt(event.target.value),
160
- })}
156
+ })
157
+ }
161
158
  />
162
159
  </TableCell>
163
160
  </TableRow>