@dropins/storefront-purchase-order 1.1.1 → 1.2.0-beta.0

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 (76) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/api.js +784 -6
  3. package/api.js.map +1 -1
  4. package/chunks/components.js +4 -0
  5. package/chunks/components.js.map +1 -0
  6. package/containers/ApprovalRuleDetails.js +1 -1
  7. package/containers/ApprovalRuleDetails.js.map +1 -1
  8. package/containers/ApprovalRuleForm.js +1 -1
  9. package/containers/ApprovalRuleForm.js.map +1 -1
  10. package/containers/ApprovalRulesList.js +1 -1
  11. package/containers/ApprovalRulesList.js.map +1 -1
  12. package/containers/CompanyPurchaseOrders.js +1 -1
  13. package/containers/CompanyPurchaseOrders.js.map +1 -1
  14. package/containers/CustomerPurchaseOrders.js +1 -1
  15. package/containers/CustomerPurchaseOrders.js.map +1 -1
  16. package/containers/PurchaseOrderApprovalFlow.js +1 -1
  17. package/containers/PurchaseOrderApprovalFlow.js.map +1 -1
  18. package/containers/PurchaseOrderCommentForm.js +1 -1
  19. package/containers/PurchaseOrderCommentForm.js.map +1 -1
  20. package/containers/PurchaseOrderCommentsList.js +1 -1
  21. package/containers/PurchaseOrderCommentsList.js.map +1 -1
  22. package/containers/PurchaseOrderConfirmation.js +1 -1
  23. package/containers/PurchaseOrderConfirmation.js.map +1 -1
  24. package/containers/PurchaseOrderHistoryLog.js +1 -1
  25. package/containers/PurchaseOrderHistoryLog.js.map +1 -1
  26. package/containers/PurchaseOrderStatus.js +1 -1
  27. package/containers/PurchaseOrderStatus.js.map +1 -1
  28. package/containers/RequireApprovalPurchaseOrders.js +1 -1
  29. package/containers/RequireApprovalPurchaseOrders.js.map +1 -1
  30. package/package.json +1 -1
  31. package/render.js +2 -3
  32. package/render.js.map +1 -1
  33. package/chunks/FormLoader.js +0 -4
  34. package/chunks/FormLoader.js.map +0 -1
  35. package/chunks/PurchaseOrderHistoryLogContent.js +0 -4
  36. package/chunks/PurchaseOrderHistoryLogContent.js.map +0 -1
  37. package/chunks/PurchaseOrdersHeader.js +0 -4
  38. package/chunks/PurchaseOrdersHeader.js.map +0 -1
  39. package/chunks/PurchaseOrdersTableActions.js +0 -4
  40. package/chunks/PurchaseOrdersTableActions.js.map +0 -1
  41. package/chunks/addPurchaseOrderComment.js +0 -36
  42. package/chunks/addPurchaseOrderComment.js.map +0 -1
  43. package/chunks/case-converter.js +0 -4
  44. package/chunks/case-converter.js.map +0 -1
  45. package/chunks/currencyInfo.js +0 -124
  46. package/chunks/currencyInfo.js.map +0 -1
  47. package/chunks/fetch-error.js +0 -4
  48. package/chunks/fetch-error.js.map +0 -1
  49. package/chunks/formatDate.js +0 -4
  50. package/chunks/formatDate.js.map +0 -1
  51. package/chunks/getPurchaseOrderApprovalRule.js +0 -45
  52. package/chunks/getPurchaseOrderApprovalRule.js.map +0 -1
  53. package/chunks/getPurchaseOrderApprovalRules.js +0 -75
  54. package/chunks/getPurchaseOrderApprovalRules.js.map +0 -1
  55. package/chunks/getPurchaseOrders.js +0 -29
  56. package/chunks/getPurchaseOrders.js.map +0 -1
  57. package/chunks/initialize.js +0 -13
  58. package/chunks/initialize.js.map +0 -1
  59. package/chunks/pageSize.config.js +0 -4
  60. package/chunks/pageSize.config.js.map +0 -1
  61. package/chunks/permissions.js +0 -4
  62. package/chunks/permissions.js.map +0 -1
  63. package/chunks/placeOrderForPurchaseOrder.js +0 -39
  64. package/chunks/placeOrderForPurchaseOrder.js.map +0 -1
  65. package/chunks/rejectPurchaseOrders.js +0 -30
  66. package/chunks/rejectPurchaseOrders.js.map +0 -1
  67. package/chunks/transform-purchase-order-approval-rule.js +0 -4
  68. package/chunks/transform-purchase-order-approval-rule.js.map +0 -1
  69. package/chunks/transform-purchase-order.js +0 -423
  70. package/chunks/transform-purchase-order.js.map +0 -1
  71. package/chunks/useCustomerRolePermissions.js +0 -4
  72. package/chunks/useCustomerRolePermissions.js.map +0 -1
  73. package/chunks/usePurchaseOrderData.js +0 -4
  74. package/chunks/usePurchaseOrderData.js.map +0 -1
  75. package/chunks/usePurchaseOrders.js +0 -4
  76. package/chunks/usePurchaseOrders.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"usePurchaseOrders.js","sources":["/@dropins/storefront-purchase-order/src/types/api/api.enums.types.ts","/@dropins/storefront-purchase-order/src/hooks/usePurchaseOrders.tsx"],"sourcesContent":["/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nexport enum PurchaseOrderApprovalRuleStatus {\n ENABLED = 'ENABLED',\n DISABLED = 'DISABLED',\n}\n\nexport enum PurchaseOrderApprovalRuleType {\n GRAND_TOTAL = 'GRAND_TOTAL',\n SHIPPING_INCL_TAX = 'SHIPPING_INCL_TAX',\n NUMBER_OF_SKUS = 'NUMBER_OF_SKUS',\n}\n\nexport enum PurchaseOrderApprovalRuleConditionOperator {\n MORE_THAN = 'MORE_THAN',\n LESS_THAN = 'LESS_THAN',\n MORE_THAN_OR_EQUAL_TO = 'MORE_THAN_OR_EQUAL_TO',\n LESS_THAN_OR_EQUAL_TO = 'LESS_THAN_OR_EQUAL_TO',\n}\n\nexport enum EnumPurchaseOrdersView {\n CUSTOMER_PURCHASE_ORDERS = 'customerPurchaseOrders',\n COMPANY_PURCHASE_ORDERS = 'companyPurchaseOrders',\n CUSTOMER_APPROVAL_PURCHASE_ORDERS = 'customerApprovalPurchaseOrders',\n}\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport React from 'preact/compat';\nimport { useCallback, useEffect, useMemo, useState } from 'preact/hooks';\nimport { events } from '@adobe-commerce/event-bus';\nimport {\n formatDate,\n isValidUrl,\n getStatusVariant,\n} from '@/b2b-purchase-order/lib';\nimport { ActionButton, Price, Tag } from '@adobe-commerce/elsie/components';\nimport {\n AlertMessageConfigType,\n UsePurchaseOrdersParams,\n UsePurchaseOrdersReturn,\n} from '@/b2b-purchase-order/types/hooks';\nimport { EnumPurchaseOrdersView } from '@/b2b-purchase-order/types/api';\nimport { PurchaseOrderModel } from '@/b2b-purchase-order/data/models';\nimport { Column } from '@/b2b-purchase-order/types/components';\nimport {\n approvePurchaseOrders,\n getPurchaseOrders,\n rejectPurchaseOrders,\n} from '@/b2b-purchase-order/api';\nimport {\n defaultColumns,\n defaultCompanyColumns,\n} from '@/b2b-purchase-order/configs';\nimport { Text } from '@adobe-commerce/elsie/i18n';\n\nconst DEFAULT_PAGE_SIZE = 20;\n\nexport const usePurchaseOrders = ({\n view,\n initialPageSize,\n routePurchaseOrderDetails,\n setColumns,\n setRowsData,\n t,\n permissions,\n loadingPermissions,\n}: UsePurchaseOrdersParams): UsePurchaseOrdersReturn => {\n const isCompanyPOsView =\n view === EnumPurchaseOrdersView.COMPANY_PURCHASE_ORDERS;\n const isRequireApprovalPOsView =\n view === EnumPurchaseOrdersView.CUSTOMER_APPROVAL_PURCHASE_ORDERS;\n const [shouldRefetch, setShouldRefetch] = useState(true);\n const [selectedOrderIds, setSelectedOrderIds] = useState<string[]>([]);\n const [purchaseOrders, setPurchaseOrders] = useState<PurchaseOrderModel[]>(\n []\n );\n const [pageSizeOptionsList, setPageSizeOptionsList] =\n useState(initialPageSize);\n const [loading, setLoading] = useState<boolean>(true);\n const [pagination, setPagination] = useState({\n currentPage: 1,\n totalPages: 1,\n totalCount: 0,\n });\n const [alertMessageConfig, setAlertMessageConfig] =\n useState<AlertMessageConfigType>({\n heading: '',\n description: '',\n type: 'success',\n });\n const [expandedRowIndices, setExpandedRowIndices] = useState<Set<number>>(\n new Set()\n );\n\n // Refetch data on the purchase-order/refresh event\n useEffect(() => {\n const event = events.on(\n 'purchase-order/refresh',\n () => {\n setShouldRefetch(true);\n },\n { eager: true }\n );\n\n return () => {\n event?.off();\n };\n }, []);\n\n // Auto-clear alert message after 7 seconds\n useEffect(() => {\n if (alertMessageConfig.heading || alertMessageConfig.description) {\n const timer = setTimeout(() => {\n setAlertMessageConfig({\n heading: '',\n description: '',\n type: 'success',\n });\n }, 7000);\n\n return () => clearTimeout(timer);\n }\n }, [alertMessageConfig.heading, alertMessageConfig.description]);\n\n const { currentPage, totalPages, totalCount } = pagination;\n\n const handlePageChange = useCallback((page: number) => {\n setPagination((prev) => {\n return { ...prev, currentPage: page };\n });\n\n setExpandedRowIndices(new Set());\n setShouldRefetch(true);\n }, []);\n\n const handleChangePageSize = useCallback(\n (event: Event) => {\n const size = (event.target as HTMLSelectElement).value;\n\n setPageSizeOptionsList((prev) => {\n return prev.map((option) => ({\n ...option,\n selected: option.value === size,\n }));\n });\n\n // Reset the current page to 1 on page size change\n handlePageChange(1);\n\n setExpandedRowIndices(new Set());\n setShouldRefetch(true);\n },\n [handlePageChange]\n );\n\n const isAdmin = permissions?.isAdmin ?? false;\n\n const filterConfig = useMemo(() => {\n let config = {};\n\n if (isCompanyPOsView) {\n config = { companyPurchaseOrders: true };\n }\n\n if (isRequireApprovalPOsView) {\n config = { myApprovals: true };\n }\n\n return config;\n }, [isCompanyPOsView, isRequireApprovalPOsView]);\n\n useEffect(() => {\n // Re-fetch controlled by shouldRefetch flag\n if (!shouldRefetch) {\n return;\n }\n\n // Don't fetch purchase orders until permissions are loaded\n if (loadingPermissions) {\n return;\n }\n\n setLoading(true);\n const pageSize = pageSizeOptionsList?.find(\n (option) => option.selected\n )?.value;\n const selectedPageSize = parseInt(\n pageSize ?? DEFAULT_PAGE_SIZE.toString(),\n 10\n );\n\n getPurchaseOrders(filterConfig, selectedPageSize, currentPage)\n .then((data) => {\n const responsePurchaseOrders = data?.purchaseOrderItems ?? [];\n const responseCurrentPage = data?.pageInfo?.currentPage;\n const responseTotalPages = data?.pageInfo?.totalPages;\n const responseTotalCount = data?.totalCount;\n\n setPagination({\n currentPage:\n responseCurrentPage > responseTotalPages\n ? responseTotalPages || 1\n : responseCurrentPage,\n totalPages: responseTotalPages,\n totalCount: responseTotalCount,\n });\n setPurchaseOrders(responsePurchaseOrders);\n })\n .catch((error) => {\n console.error('Failed to fetch purchase orders:', error);\n setPurchaseOrders([]);\n })\n .finally(() => {\n setLoading(false);\n setShouldRefetch(false);\n });\n }, [\n shouldRefetch,\n currentPage,\n pageSizeOptionsList,\n filterConfig,\n loadingPermissions,\n ]);\n\n const handlePurchaseOrderDetailsRedirect = useCallback(\n (poNumber: string): string => {\n const url = routePurchaseOrderDetails?.(poNumber) as string;\n\n if (!isValidUrl(url ?? '')) return '#';\n\n return url;\n },\n [routePurchaseOrderDetails]\n );\n\n const toggleExpandedRow = useCallback((rowIndex: number) => {\n setExpandedRowIndices((prev) => {\n const newSet = new Set(prev);\n if (newSet.has(rowIndex)) {\n newSet.delete(rowIndex);\n } else {\n newSet.add(rowIndex);\n }\n return newSet;\n });\n }, []);\n\n const handleSelectedOrderId = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n const uid = (event.target as HTMLInputElement).value;\n const isChecked = (event.target as HTMLInputElement).checked;\n\n setSelectedOrderIds((prevSelected) => {\n if (isChecked) {\n return [...prevSelected, uid];\n }\n return prevSelected.filter((po) => po !== uid);\n });\n },\n []\n );\n\n const handleSelectedOrderIds = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n const isChecked = (event.target as HTMLInputElement).checked;\n setSelectedOrderIds(() =>\n isChecked\n ? purchaseOrders\n .filter((po) =>\n ['PENDING', 'APPROVAL_REQUIRED'].includes(po.status)\n )\n .map((po) => po.uid ?? '')\n : []\n );\n },\n [purchaseOrders]\n );\n\n const handleRejectSelected = useCallback(() => {\n setLoading(true);\n rejectPurchaseOrders(selectedOrderIds)\n .then(() => {\n setAlertMessageConfig({\n heading: t.alertHeaderReject,\n description: t.alertDescriptionReject,\n type: 'success',\n });\n setSelectedOrderIds([]);\n events.emit('purchase-order/refresh', true);\n })\n .catch((err) => {\n setAlertMessageConfig({\n heading: t.alertHeaderError,\n description: t.alertDescriptionError,\n type: 'error',\n });\n console.error(err);\n })\n .finally(() => {\n setLoading(false);\n });\n }, [selectedOrderIds, t]);\n\n const handleApproveSelected = useCallback(() => {\n setLoading(true);\n approvePurchaseOrders(selectedOrderIds)\n .then(() => {\n setAlertMessageConfig({\n heading: t.alertHeaderApprove,\n description: t.alertDescriptionApprove,\n type: 'success',\n });\n setSelectedOrderIds([]);\n events.emit('purchase-order/refresh', true);\n })\n .catch((err) => {\n setAlertMessageConfig({\n heading: t.alertHeaderError,\n description: t.alertDescriptionError,\n type: 'error',\n });\n console.error(err);\n })\n .finally(() => {\n setLoading(false);\n });\n }, [selectedOrderIds, t]);\n\n const columns = useMemo(() => {\n const currentColumns =\n isCompanyPOsView || isRequireApprovalPOsView\n ? defaultCompanyColumns\n : defaultColumns;\n\n return (\n setColumns?.(currentColumns) ??\n currentColumns.map((col) => {\n if (\n col.key === 'checkboxView' &&\n (isAdmin || isRequireApprovalPOsView)\n ) {\n return {\n key: col.key,\n label: (\n <input\n type=\"checkbox\"\n name={'selectAll'}\n disabled={purchaseOrders.every(\n (po) => !['PENDING', 'APPROVAL_REQUIRED'].includes(po.status)\n )}\n onChange={handleSelectedOrderIds}\n />\n ),\n ariaLabel: t.selectAllAriaLabel,\n } as Column;\n }\n\n return {\n ...col,\n label: t[col.key as keyof typeof t] || col.label,\n } as Column;\n })\n );\n }, [\n t,\n isAdmin,\n isCompanyPOsView,\n isRequireApprovalPOsView,\n setColumns,\n purchaseOrders,\n handleSelectedOrderIds,\n ]);\n\n const rows = useMemo(() => {\n const formattedPurchaseOrders = purchaseOrders.map((po, rowIndex) => {\n const poNumber = po.number ?? '';\n const isExpanded = expandedRowIndices.has(rowIndex);\n const createdBy = `${po.createdBy?.firstname ?? ''} ${\n po.createdBy?.lastname ?? ''\n }`.trim();\n const action = (\n <ActionButton type=\"button\" onClick={() => toggleExpandedRow(rowIndex)}>\n <Text\n id={`PurchaseOrders.purchaseOrdersTable.buttons.${\n isExpanded ? 'expandedHidden' : 'expandedShow'\n }`}\n />\n </ActionButton>\n );\n const status = (\n <Tag\n className={`b2b-purchase-order-purchase-orders-table__status b2b-purchase-order-purchase-orders-table__status--${getStatusVariant(\n po.status\n )}`}\n >\n <Text\n id={`PurchaseOrders.purchaseOrdersTable.statusOrder.${po.status.toLowerCase()}`}\n />\n </Tag>\n );\n const _rowDetails = (\n <div className=\"b2b-purchase-order-purchase-orders-table__row-details\">\n <div className=\"b2b-purchase-order-purchase-orders-table__row-details-content\">\n <p>\n <span>\n <Text id=\"PurchaseOrders.purchaseOrdersTable.expandedRowLabels.orderNumber\" />\n </span>{' '}\n {po.order.orderNumber}\n </p>\n <p>\n <span>\n <Text id=\"PurchaseOrders.purchaseOrdersTable.expandedRowLabels.createdDate\" />\n </span>{' '}\n {formatDate(po.createdAt)}\n </p>\n <p>\n <span>\n <Text id=\"PurchaseOrders.purchaseOrdersTable.expandedRowLabels.updatedDate\" />\n </span>{' '}\n {formatDate(po.updatedAt)}\n </p>\n <p>\n <span>\n <Text id=\"PurchaseOrders.purchaseOrdersTable.expandedRowLabels.total\" />\n </span>{' '}\n <Price\n amount={po?.quote?.grandTotal?.value}\n currency={po?.quote?.grandTotal?.currency}\n weight=\"normal\"\n />\n </p>\n </div>\n <div className=\"b2b-purchase-order-purchase-orders-table__row-details-action\">\n <ActionButton\n onClick={() => {\n window.location.href = handlePurchaseOrderDetailsRedirect(\n po.uid ?? ''\n );\n }}\n aria-label={`View purchase order ${poNumber}`}\n >\n {t.actionView}\n </ActionButton>\n </div>\n </div>\n );\n\n return {\n ...(isAdmin || isRequireApprovalPOsView\n ? {\n checkboxView: (\n <input\n type=\"checkbox\"\n name={poNumber}\n value={po.uid}\n checked={selectedOrderIds.includes(po.uid)}\n onChange={handleSelectedOrderId}\n disabled={\n !['PENDING', 'APPROVAL_REQUIRED'].includes(po.status)\n }\n />\n ),\n }\n : {}),\n poNumber,\n status,\n createdBy,\n action,\n _rowDetails,\n };\n });\n\n let finalRows = formattedPurchaseOrders;\n\n if (setRowsData) {\n const customRows = setRowsData(formattedPurchaseOrders);\n // If setRowsData returns something, use it, otherwise keep original data\n if (customRows !== undefined && Array.isArray(customRows)) {\n finalRows = customRows as typeof formattedPurchaseOrders;\n }\n }\n\n return finalRows;\n }, [\n purchaseOrders,\n setRowsData,\n isAdmin,\n isRequireApprovalPOsView,\n selectedOrderIds,\n handleSelectedOrderId,\n handlePurchaseOrderDetailsRedirect,\n t.actionView,\n expandedRowIndices,\n toggleExpandedRow,\n ]);\n\n return {\n tableConfig: {\n columns,\n rows,\n expandedRows: expandedRowIndices,\n },\n paginationConfig: {\n currentPage,\n totalPages,\n handlePageChange,\n },\n pageSizeConfig: {\n pageSizeOptionsList,\n onChange: handleChangePageSize,\n },\n totalCount,\n loading,\n selectedOrderIds,\n handleRejectSelected,\n handleApproveSelected,\n isAdmin,\n isRequireApprovalPOsView,\n alertMessageConfig,\n };\n};\n"],"names":["EnumPurchaseOrdersView","DEFAULT_PAGE_SIZE","usePurchaseOrders","view","initialPageSize","routePurchaseOrderDetails","setColumns","setRowsData","t","permissions","loadingPermissions","isCompanyPOsView","isRequireApprovalPOsView","shouldRefetch","setShouldRefetch","useState","selectedOrderIds","setSelectedOrderIds","purchaseOrders","setPurchaseOrders","pageSizeOptionsList","setPageSizeOptionsList","loading","setLoading","pagination","setPagination","alertMessageConfig","setAlertMessageConfig","expandedRowIndices","setExpandedRowIndices","useEffect","event","events","timer","currentPage","totalPages","totalCount","handlePageChange","useCallback","page","prev","handleChangePageSize","size","option","isAdmin","filterConfig","useMemo","config","pageSize","_a","selectedPageSize","getPurchaseOrders","data","responsePurchaseOrders","responseCurrentPage","responseTotalPages","_b","responseTotalCount","error","handlePurchaseOrderDetailsRedirect","poNumber","url","isValidUrl","toggleExpandedRow","rowIndex","newSet","handleSelectedOrderId","uid","isChecked","prevSelected","po","handleSelectedOrderIds","handleRejectSelected","rejectPurchaseOrders","err","handleApproveSelected","approvePurchaseOrders","columns","currentColumns","defaultCompanyColumns","defaultColumns","col","jsx","rows","formattedPurchaseOrders","isExpanded","createdBy","action","ActionButton","Text","status","Tag","getStatusVariant","_rowDetails","jsxs","formatDate","Price","_d","_c","_f","_e","finalRows","customRows"],"mappings":"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"}