@dropins/storefront-purchase-order 0.0.6-alpha2 → 0.0.6-alpha4
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.
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
/*! Copyright 2025 Adobe
|
|
2
2
|
All Rights Reserved. */
|
|
3
|
-
import{jsx as a,jsxs as
|
|
3
|
+
import{jsx as a,jsxs as f}from"@dropins/tools/preact-jsx-runtime.js";import{useState as o,useEffect as U,useCallback as d,useMemo as V}from"@dropins/tools/preact-hooks.js";import{events as H}from"@dropins/tools/event-bus.js";import{i as fe,g as ge}from"./pageSize.config.js";import{f as re}from"./formatDate.js";import{Tag as me,Price as Pe,ActionButton as te}from"@dropins/tools/components.js";import{r as be,a as Re}from"./rejectPurchaseOrders.js";import{g as Oe}from"./getPurchaseOrders.js";import{d as Ae,a as Ce}from"./PurchaseOrderHistoryLogContent.js";import{Text as g}from"@dropins/tools/i18n.js";var M=(i=>(i.CUSTOMER_PURCHASE_ORDERS="customerPurchaseOrders",i.COMPANY_PURCHASE_ORDERS="companyPurchaseOrders",i.CUSTOMER_APPROVAL_PURCHASE_ORDERS="customerApprovalPurchaseOrders",i))(M||{});const Ee=20,Ie=({view:i,initialPageSize:se,routePurchaseOrderDetails:A,setColumns:C,setRowsData:k,t:n,permissions:v,loadingPermissions:j})=>{const E=i===M.COMPANY_PURCHASE_ORDERS,c=i===M.CUSTOMER_APPROVAL_PURCHASE_ORDERS,[$,S]=o(!0),[l,y]=o([]),[h,z]=o([]),[m,ae]=o(se),[ne,p]=o(!0),[ce,B]=o({currentPage:1,totalPages:1,totalCount:0}),[P,b]=o({heading:"",description:"",type:"success"}),[x,N]=o(new Set);U(()=>{const r=H.on("purchase-order/refresh",()=>{S(!0)},{eager:!0});return()=>{r==null||r.off()}},[]),U(()=>{if(P.heading||P.description){const r=setTimeout(()=>{b({heading:"",description:"",type:"success"})},7e3);return()=>clearTimeout(r)}},[P.heading,P.description]);const{currentPage:D,totalPages:oe,totalCount:de}=ce,I=d(r=>{B(s=>({...s,currentPage:r})),N(new Set),S(!0)},[]),ie=d(r=>{const s=r.target.value;ae(e=>e.map(t=>({...t,selected:t.value===s}))),I(1),N(new Set),S(!0)},[I]),R=(v==null?void 0:v.isAdmin)??!1,G=V(()=>{let r={};return E&&(r={companyPurchaseOrders:!0}),c&&(r={myApprovals:!0}),r},[E,c]);U(()=>{var e;if(!$||j)return;p(!0);const r=(e=m==null?void 0:m.find(t=>t.selected))==null?void 0:e.value,s=parseInt(r??Ee.toString(),10);Oe(G,s,D).then(t=>{var w,T;const u=(t==null?void 0:t.purchaseOrderItems)??[],_=(w=t==null?void 0:t.pageInfo)==null?void 0:w.currentPage,O=(T=t==null?void 0:t.pageInfo)==null?void 0:T.totalPages,L=t==null?void 0:t.totalCount;B({currentPage:_>O?O||1:_,totalPages:O,totalCount:L}),z(u)}).catch(t=>{console.error("Failed to fetch purchase orders:",t),z([])}).finally(()=>{p(!1),S(!1)})},[$,D,m,G,j]);const q=d(r=>{const s=A==null?void 0:A(r);return fe(s??"")?s:"#"},[A]),Q=d(r=>{N(s=>{const e=new Set(s);return e.has(r)?e.delete(r):e.add(r),e})},[]),F=d(r=>{const s=r.target.value,e=r.target.checked;y(t=>e?[...t,s]:t.filter(u=>u!==s))},[]),Y=d(r=>{const s=r.target.checked;y(()=>s?h.filter(e=>["PENDING","APPROVAL_REQUIRED"].includes(e.status)).map(e=>e.uid??""):[])},[h]),le=d(()=>{p(!0),be(l).then(()=>{b({heading:n.alertHeaderReject,description:n.alertDescriptionReject,type:"success"}),y([]),H.emit("purchase-order/refresh",!0)}).catch(r=>{b({heading:n.alertHeaderError,description:n.alertDescriptionError,type:"error"}),console.error(r)}).finally(()=>{p(!1)})},[l,n]),ue=d(()=>{p(!0),Re(l).then(()=>{b({heading:n.alertHeaderApprove,description:n.alertDescriptionApprove,type:"success"}),y([]),H.emit("purchase-order/refresh",!0)}).catch(r=>{b({heading:n.alertHeaderError,description:n.alertDescriptionError,type:"error"}),console.error(r)}).finally(()=>{p(!1)})},[l,n]),he=V(()=>{const r=E||c?Ae:Ce;return(C==null?void 0:C(r))??r.map(s=>s.key==="checkboxView"&&(R||c)?{key:s.key,label:a("input",{type:"checkbox",name:"selectAll",disabled:h.every(e=>!["PENDING","APPROVAL_REQUIRED"].includes(e.status)),onChange:Y}),ariaLabel:n.selectAllAriaLabel}:{...s,label:n[s.key]||s.label})},[n,R,E,c,C,h,Y]),pe=V(()=>{const r=h.map((e,t)=>{var Z,J,K,W,X,ee;const u=e.number??"",_=x.has(t),O=`${((Z=e.createdBy)==null?void 0:Z.firstname)??""} ${((J=e.createdBy)==null?void 0:J.lastname)??""}`.trim(),L=a(te,{type:"button",onClick:()=>Q(t),children:a(g,{id:`PurchaseOrders.purchaseOrdersTable.buttons.${_?"expandedHidden":"expandedShow"}`})}),w=a(me,{className:`b2b-purchase-order-purchase-orders-table__status b2b-purchase-order-purchase-orders-table__status--${ge(e.status)}`,children:a(g,{id:`PurchaseOrders.purchaseOrdersTable.statusOrder.${e.status.toLowerCase()}`})}),T=f("div",{className:"b2b-purchase-order-purchase-orders-table__row-details",children:[f("div",{className:"b2b-purchase-order-purchase-orders-table__row-details-content",children:[f("p",{children:[a("span",{children:a(g,{id:"PurchaseOrders.purchaseOrdersTable.expandedRowLabels.orderNumber"})})," ",e.order.orderNumber]}),f("p",{children:[a("span",{children:a(g,{id:"PurchaseOrders.purchaseOrdersTable.expandedRowLabels.createdDate"})})," ",re(e.createdAt)]}),f("p",{children:[a("span",{children:a(g,{id:"PurchaseOrders.purchaseOrdersTable.expandedRowLabels.updatedDate"})})," ",re(e.updatedAt)]}),f("p",{children:[a("span",{children:a(g,{id:"PurchaseOrders.purchaseOrdersTable.expandedRowLabels.total"})})," ",a(Pe,{amount:(W=(K=e==null?void 0:e.quote)==null?void 0:K.grandTotal)==null?void 0:W.value,currency:(ee=(X=e==null?void 0:e.quote)==null?void 0:X.grandTotal)==null?void 0:ee.currency,weight:"normal"})]})]}),a("div",{className:"b2b-purchase-order-purchase-orders-table__row-details-action",children:a(te,{onClick:()=>{window.location.href=q(e.uid??"")},"aria-label":`View purchase order ${u}`,children:n.actionView})})]});return{...R||c?{checkboxView:a("input",{type:"checkbox",name:u,value:e.uid,checked:l.includes(e.uid),onChange:F,disabled:!["PENDING","APPROVAL_REQUIRED"].includes(e.status)})}:{},poNumber:u,status:w,createdBy:O,action:L,_rowDetails:T}});let s=r;if(k){const e=k(r);e!==void 0&&Array.isArray(e)&&(s=e)}return s},[h,k,R,c,l,F,q,n.actionView,x,Q]);return{tableConfig:{columns:he,rows:pe,expandedRows:x},paginationConfig:{currentPage:D,totalPages:oe,handlePageChange:I},pageSizeConfig:{pageSizeOptionsList:m,onChange:ie},totalCount:de,loading:ne,selectedOrderIds:l,handleRejectSelected:le,handleApproveSelected:ue,isAdmin:R,isRequireApprovalPOsView:c,alertMessageConfig:P}};export{M as E,Ie as u};
|
|
4
4
|
//# sourceMappingURL=usePurchaseOrders.js.map
|
|
@@ -1 +1 @@
|
|
|
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 {\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 // 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 setShouldRefetch(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 setShouldRefetch(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","timer","currentPage","totalPages","totalCount","handlePageChange","useCallback","page","prev","handleChangePageSize","event","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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"}
|
|
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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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
/*! Copyright 2025 Adobe
|
|
2
2
|
All Rights Reserved. */
|
|
3
|
-
import{jsxs as L,jsx as r}from"@dropins/tools/preact-jsx-runtime.js";import{classes as
|
|
3
|
+
import{jsxs as L,jsx as r}from"@dropins/tools/preact-jsx-runtime.js";import{classes as le}from"@dropins/tools/lib.js";import{i as ne,g as oe,P as ie,d as ce}from"../chunks/pageSize.config.js";import{P as de}from"../chunks/PurchaseOrdersHeader.js";import"../chunks/PurchaseOrderHistoryLogContent.js";import{ActionButton as V,Tag as ue,Button as pe,Skeleton as he,SkeletonRow as me}from"@dropins/tools/components.js";import{useState as g,useEffect as W,useCallback as v,useMemo as X}from"@dropins/tools/preact-hooks.js";import{events as Y}from"@dropins/tools/event-bus.js";import{u as be}from"../chunks/useCustomerRolePermissions.js";import{g as ge,d as fe}from"../chunks/getPurchaseOrderApprovalRules.js";import{Text as f,useText as we}from"@dropins/tools/i18n.js";import"@dropins/tools/preact.js";import"../chunks/permissions.js";import"../chunks/fetch-graphql.js";import"@dropins/tools/fetch-graphql.js";import"../chunks/fetch-error.js";import"../chunks/transform-purchase-order-approval-rule.js";const ee=[{key:"ruleName",label:"Rule Name"},{key:"status",label:"Status"},{key:"createdBy",label:"Created By"},{key:"action",label:"Actions"}],Pe=20,Te=({routeApprovalRuleDetails:u,routeCreateApprovalRule:p,routeEditApprovalRule:h,setColumns:m,setRowsData:w,initialPageSize:$,permissions:y,loadingPermissions:S,t:l})=>{const[b,i]=g([]),[P,n]=g(!0),[k,o]=g(!0),[c,A]=g($),[U,x]=g({currentPage:1,totalPages:1,totalCount:0}),[T,O]=g(new Set);W(()=>{const s=Y.on("purchase-order/refresh",()=>{n(!0)},{eager:!0});return()=>{s==null||s.off()}},[]);const{currentPage:R,totalPages:N,totalCount:re}=U,I=v(s=>{x(t=>({...t,currentPage:s})),O(new Set),n(!0)},[]),se=v(s=>{const t=s.target.value;A(e=>e.map(a=>({...a,selected:a.value===t}))),I(1),O(new Set),n(!0)},[I]),H=v(s=>{O(t=>{const e=new Set(t);return e.has(s)?e.delete(s):e.add(s),e})},[]);W(()=>{var e;if(!P||S)return;o(!0);const s=(e=c==null?void 0:c.find(a=>a.selected))==null?void 0:e.value,t=parseInt(s??Pe.toString(),10);ge(R,t).then(a=>{var z,E;const j=(a==null?void 0:a.items)??[],B=(z=a==null?void 0:a.pageInfo)==null?void 0:z.currentPage,C=(E=a==null?void 0:a.pageInfo)==null?void 0:E.totalPages,D=a==null?void 0:a.totalCount;x({currentPage:B>C?C||1:B,totalPages:C,totalCount:D}),i(j)}).catch(a=>{console.error("Error fetching approval rules:",a),i([])}).finally(()=>{o(!1),n(!1)})},[P,R,c,N,S]);const _=v((s,t)=>{let e="";switch(t){case"new":{e=p==null?void 0:p(s);break}case"edit":{e=h==null?void 0:h(s);break}case"view":{e=u==null?void 0:u(s);break}}return ne(e??"")?e:"#"},[p,h,u]),ae=X(()=>(m==null?void 0:m(ee))??ee.map(s=>({...s,label:l[s.key]||s.label})),[m,l]),M=v((s,t)=>{s.preventDefault(),o(!0),fe(t).then(()=>{Y.emit("purchase-order/refresh",!0)}).finally(()=>{o(!1)})},[]),te=X(()=>{const s=b==null?void 0:b.map((e,a)=>{var G,Z,q,J,K,Q;const{isAdmin:j,permissions:{manageApprovalRules:B}}=y,C=T.has(a),D=j||B,z=r(V,{onClick:()=>H(a),children:r(f,{id:`PurchaseOrders.purchaseOrdersTable.buttons.${C?"expandedHidden":"expandedShow"}`})}),E=L("div",{className:"b2b-purchase-order-purchase-orders-table__row-details",children:[L("div",{className:"b2b-purchase-order-purchase-orders-table__row-details-content",children:[L("p",{children:[r("span",{children:r(f,{id:"PurchaseOrders.purchaseOrdersTable.expandedRowLabels.ruleType"})})," ",r(f,{id:`PurchaseOrders.purchaseOrdersTable.ruleTypes.${(Z=(G=e.condition)==null?void 0:G.attribute)==null?void 0:Z.toLocaleLowerCase()}`})]}),r("p",{children:r("span",{children:r(f,{id:"PurchaseOrders.purchaseOrdersTable.expandedRowLabels.appliesTo"})})}),r("ul",{children:((q=e==null?void 0:e.appliesToRoles)==null?void 0:q.length)<=0?r("li",{children:l.appliesToAll}):(J=e==null?void 0:e.appliesToRoles)==null?void 0:J.map((d,F)=>r("li",{children:d.name},F))}),r("p",{children:r("span",{children:r(f,{id:"PurchaseOrders.purchaseOrdersTable.expandedRowLabels.approver"})})}),r("ul",{children:(K=e==null?void 0:e.approverRoles)==null?void 0:K.map((d,F)=>r("li",{children:d==null?void 0:d.name},F))})]}),D?r("div",{className:"b2b-purchase-order-purchase-orders-table__row-details-action",children:L("div",{className:"b2b-purchase-order-purchase-orders-table__row-details-action-inner-wrapper",children:[r(V,{onClick:()=>{window.location.href=_(e.uid,"edit")},"aria-label":l.ariaLabelEditRule.replace("{{ruleName}}",e.name),"data-testid":`edit-approval-rule-${e.uid}`,children:l.actionEdit}),r(V,{onClick:d=>M(d,e.uid),"aria-label":l.ariaLabelDeleteRule.replace("{{ruleName}}",e.name),"data-testid":`delete-approval-rule-${e.uid}`,children:l.actionDelete})]})}):r("div",{className:"b2b-purchase-order-purchase-orders-table__row-details-action",children:r(V,{onClick:()=>{window.location.href=_(e.uid,"view")},"aria-label":l.ariaLabelViewRule.replace("{{ruleName}}",e.name),"data-testid":`view-approval-rule-${e.uid}`,children:l.actionView})})]});return{ruleName:e.name,status:r(ue,{className:`b2b-purchase-order-purchase-orders-table__status b2b-purchase-order-purchase-orders-table__status--${oe(e.status)}`,children:r(f,{id:`PurchaseOrders.purchaseOrdersTable.rulesStatus.${(Q=e.status)==null?void 0:Q.toLocaleLowerCase()}`})}),createdBy:e.createdBy,action:z,_rowDetails:E}});let t=s;if(w){const e=w(s);e!==void 0&&Array.isArray(e)&&(t=e)}return t},[b,T,y,w,l,_,M,H]);return{tableConfig:{columns:ae,rows:te,expandedRows:T},paginationConfig:{currentPage:R,totalPages:N,handlePageChange:I},pageSizeConfig:{pageSizeOptionsList:c,onChange:se},totalCount:re,loading:k,handleCreateUrl:_}},Ue=({routeCreateApprovalRule:u,routeEditApprovalRule:p,routeApprovalRuleDetails:h,setColumns:m,setRowsData:w,className:$="",withHeader:y=!0,withWrapper:S=!0,skeletonRowCount:l=5,initialPageSize:b=ce})=>{const i=we({headerText:"PurchaseOrders.approvalRulesList.containerTitle",ruleName:"PurchaseOrders.purchaseOrdersTable.tableColumns.ruleName",ruleType:"PurchaseOrders.purchaseOrdersTable.tableColumns.ruleType",appliesTo:"PurchaseOrders.purchaseOrdersTable.tableColumns.appliesTo",approver:"PurchaseOrders.purchaseOrdersTable.tableColumns.approver",createdBy:"PurchaseOrders.purchaseOrdersTable.tableColumns.createdBy",status:"PurchaseOrders.purchaseOrdersTable.tableColumns.status",actionEdit:"PurchaseOrders.purchaseOrdersTable.actionEdit",actionDelete:"PurchaseOrders.purchaseOrdersTable.actionDelete",addNewRule:"PurchaseOrders.approvalRulesList.buttons.newRule",actionView:"PurchaseOrders.purchaseOrdersTable.actionView",appliesToAll:"PurchaseOrders.purchaseOrdersTable.appliesToAll",emptyTitle:"PurchaseOrders.approvalRulesList.emptyTitle",ariaLabelEditRule:"PurchaseOrders.approvalRulesList.ariaLabel.editRule",ariaLabelDeleteRule:"PurchaseOrders.approvalRulesList.ariaLabel.deleteRule",ariaLabelViewRule:"PurchaseOrders.approvalRulesList.ariaLabel.viewRule"}),{permissions:P,loadingPermissions:n}=be(),{loading:k,tableConfig:o,paginationConfig:c,totalCount:A,pageSizeConfig:U,handleCreateUrl:x}=Te({routeCreateApprovalRule:u,routeEditApprovalRule:p,routeApprovalRuleDetails:h,setColumns:m,setRowsData:w,permissions:P,initialPageSize:b,loadingPermissions:n,t:i}),{isAdmin:T,permissions:{manageApprovalRules:O}}=P,R=T||O?r(pe,{variant:"primary",onClick:()=>{window.location.href=x("","new")},"data-testid":"add-new-rule-button",children:i.addNewRule}):null,N=k||n?r(he,{"data-testid":"approval-rules-skeleton",children:r(me,{variant:"row",size:"small"})}):R;return L("div",{className:le(["purchase-orders",$]),"data-testid":"purchase-orders-container",children:[y?r(de,{headerText:i.headerText}):null,r(ie,{totalCount:A,columns:o.columns,rows:o.rows,expandedRows:o.expandedRows,paginationConfig:c,loading:k||n,skeletonRowCount:l,pageSizeConfig:U,emptyTitle:i.emptyTitle,withWrapper:S,footer:N})]})};export{Ue as ApprovalRulesList,Ue as default};
|
|
4
4
|
//# sourceMappingURL=ApprovalRulesList.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ApprovalRulesList.js","sources":["/@dropins/storefront-purchase-order/src/configs/purchaseOrderApprovalRules.config.ts","/@dropins/storefront-purchase-order/src/hooks/useApprovalRulesList.tsx","/@dropins/storefront-purchase-order/src/containers/ApprovalRulesList/ApprovalRulesList.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\nimport { Column } from '@/b2b-purchase-order/types/components';\n\nexport const defaultApprovalRulesColumns: Column[] = [\n { key: 'ruleName', label: 'Rule Name' },\n { key: 'status', label: 'Status' },\n {\n key: 'createdBy',\n label: 'Created By',\n },\n { key: 'action', label: 'Actions' },\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 {\n UseApprovalRulesList,\n UseApprovalRulesListReturn,\n} from '@/b2b-purchase-order/types/hooks';\nimport { useCallback, useEffect, useMemo, useState } from 'preact/hooks';\nimport { getStatusVariant, isValidUrl } from '@/b2b-purchase-order/lib';\nimport { Text } from '@adobe-commerce/elsie/i18n';\nimport { defaultApprovalRulesColumns } from '@/b2b-purchase-order/configs';\nimport {\n deletePurchaseOrderApprovalRule,\n getPurchaseOrderApprovalRules,\n} from '@/b2b-purchase-order/api';\nimport { PurchaseOrderApprovalRuleModel } from '@/b2b-purchase-order/data/models';\nimport { ActionButton, Tag } from '@adobe-commerce/elsie/components';\n\nconst DEFAULT_PAGE_SIZE = 20;\n\nexport const useApprovalRulesList = ({\n routeApprovalRuleDetails,\n routeCreateApprovalRule,\n routeEditApprovalRule,\n setColumns,\n setRowsData,\n initialPageSize,\n permissions,\n loadingPermissions,\n t,\n}: UseApprovalRulesList): UseApprovalRulesListReturn => {\n const [approvalRules, setApprovalRules] = useState<\n PurchaseOrderApprovalRuleModel[]\n >([]);\n const [shouldRefetch, setShouldRefetch] = useState(true);\n const [loading, setLoading] = useState<boolean>(true);\n const [pageSizeOptionsList, setPageSizeOptionsList] =\n useState(initialPageSize);\n const [pagination, setPagination] = useState({\n currentPage: 1,\n totalPages: 1,\n totalCount: 0,\n });\n const [expandedRowIndices, setExpandedRowIndices] = useState<Set<number>>(\n new Set()\n );\n\n // Derive pagination values\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 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 useEffect(() => {\n // Re-fetch controlled by shouldRefetch flag\n if (!shouldRefetch) {\n return;\n }\n\n // Don't fetch approval rules 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 getPurchaseOrderApprovalRules(currentPage, selectedPageSize)\n .then((data) => {\n const responseApprovalRules = data?.items ?? [];\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 setApprovalRules(responseApprovalRules);\n })\n .catch((error) => {\n console.error('Error fetching approval rules:', error);\n setApprovalRules([]);\n })\n .finally(() => {\n setLoading(false);\n setShouldRefetch(false);\n });\n }, [\n shouldRefetch,\n currentPage,\n pageSizeOptionsList,\n totalPages,\n loadingPermissions,\n ]);\n\n const handleCreateUrl = useCallback(\n (id: string, type: 'edit' | 'new' | 'view'): string => {\n let url = '';\n\n switch (type) {\n case 'new': {\n url = routeCreateApprovalRule?.(id) as string;\n break;\n }\n case 'edit': {\n url = routeEditApprovalRule?.(id) as string;\n break;\n }\n case 'view': {\n url = routeApprovalRuleDetails?.(id) as string;\n break;\n }\n }\n\n if (!isValidUrl(url ?? '')) return '#';\n\n return url;\n },\n [routeCreateApprovalRule, routeEditApprovalRule, routeApprovalRuleDetails]\n );\n\n const columns = useMemo(() => {\n return (\n setColumns?.(defaultApprovalRulesColumns) ??\n defaultApprovalRulesColumns.map((col) => ({\n ...col,\n label: t[col.key as keyof typeof t] || col.label,\n }))\n );\n }, [setColumns, t]);\n\n const handleDeleteRule = useCallback((e: Event, id: string) => {\n e.preventDefault();\n setLoading(true);\n deletePurchaseOrderApprovalRule(id)\n .then(() => {\n setShouldRefetch(true);\n })\n .finally(() => {\n setLoading(false);\n });\n }, []);\n\n const rows = useMemo(() => {\n const modifiedApprovalRules = approvalRules?.map((ar, rowIndex) => {\n const {\n isAdmin,\n permissions: { manageApprovalRules },\n } = permissions;\n\n const isExpanded = expandedRowIndices.has(rowIndex);\n const canManage = isAdmin || manageApprovalRules;\n\n // Main row action\n const action = (\n <ActionButton onClick={() => toggleExpandedRow(rowIndex)}>\n <Text\n id={`PurchaseOrders.purchaseOrdersTable.buttons.${\n isExpanded ? 'expandedHidden' : 'expandedShow'\n }`}\n />\n </ActionButton>\n );\n\n // Expanded row details\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.ruleType\" />\n </span>{' '}\n <Text\n id={`PurchaseOrders.purchaseOrdersTable.ruleTypes.${ar.condition?.attribute?.toLocaleLowerCase()}`}\n />\n </p>\n <p>\n <span>\n <Text id=\"PurchaseOrders.purchaseOrdersTable.expandedRowLabels.appliesTo\" />\n </span>\n </p>\n <ul>\n {ar?.appliesToRoles?.length <= 0 ? (\n <li>{t.appliesToAll}</li>\n ) : (\n ar?.appliesToRoles?.map((role, idx) => (\n <li key={idx}>{role.name}</li>\n ))\n )}\n </ul>\n <p>\n <span>\n <Text id=\"PurchaseOrders.purchaseOrdersTable.expandedRowLabels.approver\" />\n </span>\n </p>\n <ul>\n {ar?.approverRoles?.map((role, idx) => (\n <li key={idx}>{role?.name}</li>\n ))}\n </ul>\n </div>\n {canManage ? (\n <div className=\"b2b-purchase-order-purchase-orders-table__row-details-action\">\n <div className=\"b2b-purchase-order-purchase-orders-table__row-details-action-inner-wrapper\">\n <ActionButton\n onClick={() => {\n window.location.href = handleCreateUrl(ar.uid, 'edit');\n }}\n aria-label={t.ariaLabelEditRule.replace(\n '{{ruleName}}',\n ar.name\n )}\n data-testid={`edit-approval-rule-${ar.uid}`}\n >\n {t.actionEdit}\n </ActionButton>\n <ActionButton\n onClick={(e) => handleDeleteRule(e, ar.uid)}\n aria-label={t.ariaLabelDeleteRule.replace(\n '{{ruleName}}',\n ar.name\n )}\n data-testid={`delete-approval-rule-${ar.uid}`}\n >\n {t.actionDelete}\n </ActionButton>\n </div>\n </div>\n ) : (\n <div className=\"b2b-purchase-order-purchase-orders-table__row-details-action\">\n <ActionButton\n onClick={() => {\n window.location.href = handleCreateUrl(ar.uid, 'view');\n }}\n aria-label={t.ariaLabelViewRule.replace(\n '{{ruleName}}',\n ar.name\n )}\n data-testid={`view-approval-rule-${ar.uid}`}\n >\n {t.actionView}\n </ActionButton>\n </div>\n )}\n </div>\n );\n\n return {\n ruleName: ar.name,\n status: (\n <Tag\n className={`b2b-purchase-order-purchase-orders-table__status b2b-purchase-order-purchase-orders-table__status--${getStatusVariant(\n ar.status\n )}`}\n >\n <Text\n id={`PurchaseOrders.purchaseOrdersTable.rulesStatus.${ar.status?.toLocaleLowerCase()}`}\n />\n </Tag>\n ),\n createdBy: ar.createdBy,\n action,\n _rowDetails,\n };\n });\n\n let finalRows = modifiedApprovalRules;\n\n if (setRowsData) {\n const customRows = setRowsData(modifiedApprovalRules);\n // If setRowsData returns something, use it, otherwise keep original data\n if (customRows !== undefined && Array.isArray(customRows)) {\n finalRows = customRows as typeof modifiedApprovalRules;\n }\n }\n\n return finalRows;\n }, [\n approvalRules,\n expandedRowIndices,\n permissions,\n setRowsData,\n t,\n handleCreateUrl,\n handleDeleteRule,\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 handleCreateUrl,\n };\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 { classes, Container } from '@adobe-commerce/elsie/lib';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport {\n PurchaseOrdersHeader,\n PurchaseOrdersTable,\n} from '@/b2b-purchase-order/components';\nimport { ApprovalRulesListProps } from '@/b2b-purchase-order/types/containers';\nimport {\n useApprovalRulesList,\n useCustomerRolePermissions,\n} from '@/b2b-purchase-order/hooks';\nimport {\n Button,\n Skeleton,\n SkeletonRow,\n} from '@adobe-commerce/elsie/components';\nimport { defaultPageSizeConfig } from '@/b2b-purchase-order/configs';\n\nexport const ApprovalRulesList: Container<ApprovalRulesListProps> = ({\n routeCreateApprovalRule,\n routeEditApprovalRule,\n routeApprovalRuleDetails,\n setColumns,\n setRowsData,\n className = '',\n withHeader = true,\n withWrapper = true,\n skeletonRowCount = 5,\n initialPageSize = defaultPageSizeConfig,\n}) => {\n const t = useText({\n headerText: 'PurchaseOrders.approvalRulesList.containerTitle',\n ruleName: 'PurchaseOrders.purchaseOrdersTable.tableColumns.ruleName',\n ruleType: 'PurchaseOrders.purchaseOrdersTable.tableColumns.ruleType',\n appliesTo: 'PurchaseOrders.purchaseOrdersTable.tableColumns.appliesTo',\n approver: 'PurchaseOrders.purchaseOrdersTable.tableColumns.approver',\n createdBy: 'PurchaseOrders.purchaseOrdersTable.tableColumns.createdBy',\n status: 'PurchaseOrders.purchaseOrdersTable.tableColumns.status',\n actionEdit: 'PurchaseOrders.purchaseOrdersTable.actionEdit',\n actionDelete: 'PurchaseOrders.purchaseOrdersTable.actionDelete',\n addNewRule: 'PurchaseOrders.approvalRulesList.buttons.newRule',\n actionView: 'PurchaseOrders.purchaseOrdersTable.actionView',\n appliesToAll: 'PurchaseOrders.purchaseOrdersTable.appliesToAll',\n emptyTitle: 'PurchaseOrders.approvalRulesList.emptyTitle',\n ariaLabelEditRule: 'PurchaseOrders.approvalRulesList.ariaLabel.editRule',\n ariaLabelDeleteRule:\n 'PurchaseOrders.approvalRulesList.ariaLabel.deleteRule',\n ariaLabelViewRule: 'PurchaseOrders.approvalRulesList.ariaLabel.viewRule',\n });\n\n const { permissions, loadingPermissions } = useCustomerRolePermissions();\n const {\n loading,\n tableConfig,\n paginationConfig,\n totalCount,\n pageSizeConfig,\n handleCreateUrl,\n } = useApprovalRulesList({\n routeCreateApprovalRule,\n routeEditApprovalRule,\n routeApprovalRuleDetails,\n setColumns,\n setRowsData,\n permissions,\n initialPageSize,\n loadingPermissions,\n t,\n });\n\n const {\n isAdmin,\n permissions: { manageApprovalRules },\n } = permissions;\n\n const renderFooterButton =\n isAdmin || manageApprovalRules ? (\n <Button\n variant=\"primary\"\n onClick={() => {\n window.location.href = handleCreateUrl('', 'new');\n }}\n data-testid=\"add-new-rule-button\"\n >\n {t.addNewRule}\n </Button>\n ) : null;\n\n const footerContent =\n loading || loadingPermissions ? (\n <Skeleton data-testid=\"approval-rules-skeleton\">\n <SkeletonRow variant=\"row\" size=\"small\" />\n </Skeleton>\n ) : (\n renderFooterButton\n );\n\n return (\n <div\n className={classes(['purchase-orders', className])}\n data-testid=\"purchase-orders-container\"\n >\n {withHeader ? <PurchaseOrdersHeader headerText={t.headerText} /> : null}\n <PurchaseOrdersTable\n totalCount={totalCount}\n columns={tableConfig.columns}\n rows={tableConfig.rows}\n expandedRows={tableConfig.expandedRows}\n paginationConfig={paginationConfig}\n loading={loading || loadingPermissions}\n skeletonRowCount={skeletonRowCount}\n pageSizeConfig={pageSizeConfig}\n emptyTitle={t.emptyTitle}\n withWrapper={withWrapper}\n footer={footerContent}\n />\n </div>\n );\n};\n"],"names":["defaultApprovalRulesColumns","DEFAULT_PAGE_SIZE","useApprovalRulesList","routeApprovalRuleDetails","routeCreateApprovalRule","routeEditApprovalRule","setColumns","setRowsData","initialPageSize","permissions","loadingPermissions","t","approvalRules","setApprovalRules","useState","shouldRefetch","setShouldRefetch","loading","setLoading","pageSizeOptionsList","setPageSizeOptionsList","pagination","setPagination","expandedRowIndices","setExpandedRowIndices","currentPage","totalPages","totalCount","handlePageChange","useCallback","page","prev","handleChangePageSize","event","size","option","toggleExpandedRow","rowIndex","newSet","useEffect","pageSize","_a","selectedPageSize","getPurchaseOrderApprovalRules","data","responseApprovalRules","responseCurrentPage","responseTotalPages","_b","responseTotalCount","error","handleCreateUrl","id","type","url","isValidUrl","columns","useMemo","col","handleDeleteRule","e","deletePurchaseOrderApprovalRule","rows","modifiedApprovalRules","ar","isAdmin","manageApprovalRules","isExpanded","canManage","action","jsx","ActionButton","Text","_rowDetails","jsxs","_c","_d","role","idx","_e","Tag","getStatusVariant","_f","finalRows","customRows","ApprovalRulesList","className","withHeader","withWrapper","skeletonRowCount","defaultPageSizeConfig","useText","useCustomerRolePermissions","tableConfig","paginationConfig","pageSizeConfig","renderFooterButton","Button","footerContent","Skeleton","SkeletonRow","classes","PurchaseOrdersHeader","PurchaseOrdersTable"],"mappings":"s9BAmBO,MAAMA,EAAwC,CACnD,CAAE,IAAK,WAAY,MAAO,WAAA,EAC1B,CAAE,IAAK,SAAU,MAAO,QAAA,EACxB,CACE,IAAK,YACL,MAAO,YAAA,EAET,CAAE,IAAK,SAAU,MAAO,SAAA,CAC1B,ECKMC,GAAoB,GAEbC,GAAuB,CAAC,CACnC,yBAAAC,EACA,wBAAAC,EACA,sBAAAC,EACA,WAAAC,EACA,YAAAC,EACA,gBAAAC,EACA,YAAAC,EACA,mBAAAC,EACA,EAAAC,CACF,IAAwD,CACtD,KAAM,CAACC,EAAeC,CAAgB,EAAIC,EAExC,CAAA,CAAE,EACE,CAACC,EAAeC,CAAgB,EAAIF,EAAS,EAAI,EACjD,CAACG,EAASC,CAAU,EAAIJ,EAAkB,EAAI,EAC9C,CAACK,EAAqBC,CAAsB,EAChDN,EAASN,CAAe,EACpB,CAACa,EAAYC,CAAa,EAAIR,EAAS,CAC3C,YAAa,EACb,WAAY,EACZ,WAAY,CAAA,CACb,EACK,CAACS,EAAoBC,CAAqB,EAAIV,MAC9C,GAAI,EAIJ,CAAE,YAAAW,EAAa,WAAAC,EAAY,WAAAC,CAAA,EAAeN,EAE1CO,EAAmBC,EAAaC,GAAiB,CACrDR,EAAeS,IACN,CAAE,GAAGA,EAAM,YAAaD,CAAA,EAChC,EAEDN,EAAsB,IAAI,GAAK,EAC/BR,EAAiB,EAAI,CACvB,EAAG,CAAA,CAAE,EAECgB,GAAuBH,EAC1BI,GAAiB,CAChB,MAAMC,EAAQD,EAAM,OAA6B,MAEjDb,EAAwBW,GACfA,EAAK,IAAKI,IAAY,CAC3B,GAAGA,EACH,SAAUA,EAAO,QAAUD,CAAA,EAC3B,CACH,EAGDN,EAAiB,CAAC,EAElBJ,EAAsB,IAAI,GAAK,EAC/BR,EAAiB,EAAI,CACvB,EACA,CAACY,CAAgB,CAAA,EAGbQ,EAAoBP,EAAaQ,GAAqB,CAC1Db,EAAuBO,GAAS,CAC9B,MAAMO,EAAS,IAAI,IAAIP,CAAI,EAC3B,OAAIO,EAAO,IAAID,CAAQ,EACrBC,EAAO,OAAOD,CAAQ,EAEtBC,EAAO,IAAID,CAAQ,EAEdC,CACT,CAAC,CACH,EAAG,CAAA,CAAE,EAELC,GAAU,IAAM,OAOd,GALI,CAACxB,GAKDL,EACF,OAGFQ,EAAW,EAAI,EACf,MAAMsB,GAAWC,EAAAtB,GAAA,YAAAA,EAAqB,KACnCgB,GAAWA,EAAO,YADJ,YAAAM,EAEd,MACGC,EAAmB,SACvBF,GAAYvC,GAAkB,SAAA,EAC9B,EAAA,EAGF0C,GAA8BlB,EAAaiB,CAAgB,EACxD,KAAME,GAAS,SACd,MAAMC,GAAwBD,GAAA,YAAAA,EAAM,QAAS,CAAA,EACvCE,GAAsBL,EAAAG,GAAA,YAAAA,EAAM,WAAN,YAAAH,EAAgB,YACtCM,GAAqBC,EAAAJ,GAAA,YAAAA,EAAM,WAAN,YAAAI,EAAgB,WACrCC,EAAqBL,GAAA,YAAAA,EAAM,WAEjCtB,EAAc,CACZ,YACEwB,EAAsBC,EAClBA,GAAsB,EACtBD,EACN,WAAYC,EACZ,WAAYE,CAAA,CACb,EACDpC,EAAiBgC,CAAqB,CACxC,CAAC,EACA,MAAOK,GAAU,CAChB,QAAQ,MAAM,iCAAkCA,CAAK,EACrDrC,EAAiB,CAAA,CAAE,CACrB,CAAC,EACA,QAAQ,IAAM,CACbK,EAAW,EAAK,EAChBF,EAAiB,EAAK,CACxB,CAAC,CACL,EAAG,CACDD,EACAU,EACAN,EACAO,EACAhB,CAAA,CACD,EAED,MAAMyC,EAAkBtB,EACtB,CAACuB,EAAYC,IAA0C,CACrD,IAAIC,EAAM,GAEV,OAAQD,EAAA,CACN,IAAK,MAAO,CACVC,EAAMlD,GAAA,YAAAA,EAA0BgD,GAChC,KACF,CACA,IAAK,OAAQ,CACXE,EAAMjD,GAAA,YAAAA,EAAwB+C,GAC9B,KACF,CACA,IAAK,OAAQ,CACXE,EAAMnD,GAAA,YAAAA,EAA2BiD,GACjC,KACF,CAAA,CAGF,OAAKG,GAAWD,GAAO,EAAE,EAElBA,EAF4B,GAGrC,EACA,CAAClD,EAAyBC,EAAuBF,CAAwB,CAAA,EAGrEqD,GAAUC,EAAQ,KAEpBnD,GAAA,YAAAA,EAAaN,KACbA,EAA4B,IAAK0D,IAAS,CACxC,GAAGA,EACH,MAAO/C,EAAE+C,EAAI,GAAqB,GAAKA,EAAI,KAAA,EAC3C,EAEH,CAACpD,EAAYK,CAAC,CAAC,EAEZgD,EAAmB9B,EAAY,CAAC+B,EAAUR,IAAe,CAC7DQ,EAAE,eAAA,EACF1C,EAAW,EAAI,EACf2C,GAAgCT,CAAE,EAC/B,KAAK,IAAM,CACVpC,EAAiB,EAAI,CACvB,CAAC,EACA,QAAQ,IAAM,CACbE,EAAW,EAAK,CAClB,CAAC,CACL,EAAG,CAAA,CAAE,EAEC4C,GAAOL,EAAQ,IAAM,CACzB,MAAMM,EAAwBnD,GAAA,YAAAA,EAAe,IAAI,CAACoD,EAAI3B,IAAa,iBACjE,KAAM,CACJ,QAAA4B,EACA,YAAa,CAAE,oBAAAC,CAAA,CAAoB,EACjCzD,EAEE0D,EAAa5C,EAAmB,IAAIc,CAAQ,EAC5C+B,EAAYH,GAAWC,EAGvBG,EACJC,EAACC,EAAA,CAAa,QAAS,IAAMnC,EAAkBC,CAAQ,EACrD,SAAAiC,EAACE,EAAA,CACC,GAAI,8CACFL,EAAa,iBAAmB,cAClC,EAAA,CAAA,EAEJ,EAIIM,EACJC,EAAC,MAAA,CAAI,UAAU,wDACb,SAAA,CAAAA,EAAC,MAAA,CAAI,UAAU,gEACb,SAAA,CAAAA,EAAC,IAAA,CACC,SAAA,CAAAJ,EAAC,OAAA,CACC,SAAAA,EAACE,EAAA,CAAK,GAAG,gEAAgE,EAC3E,EAAQ,IACRF,EAACE,EAAA,CACC,GAAI,iDAAgDxB,GAAAP,EAAAuB,EAAG,YAAH,YAAAvB,EAAc,YAAd,YAAAO,EAAyB,mBAAmB,EAAA,CAAA,CAClG,EACF,EACAsB,EAAC,KACC,SAAAA,EAAC,OAAA,CACC,WAACE,EAAA,CAAK,GAAG,gEAAA,CAAiE,CAAA,CAC5E,CAAA,CACF,EACAF,EAAC,MACE,WAAAK,EAAAX,GAAA,YAAAA,EAAI,iBAAJ,YAAAW,EAAoB,SAAU,EAC7BL,EAAC,KAAA,CAAI,SAAA3D,EAAE,YAAA,CAAa,GAEpBiE,EAAAZ,GAAA,YAAAA,EAAI,iBAAJ,YAAAY,EAAoB,IAAI,CAACC,EAAMC,IAC7BR,EAAC,MAAc,SAAAO,EAAK,IAAA,EAAXC,CAAgB,EAC1B,CAEL,EACAR,EAAC,KACC,SAAAA,EAAC,OAAA,CACC,WAACE,EAAA,CAAK,GAAG,+DAAA,CAAgE,CAAA,CAC3E,CAAA,CACF,EACAF,EAAC,KAAA,CACE,UAAAS,EAAAf,GAAA,YAAAA,EAAI,gBAAJ,YAAAe,EAAmB,IAAI,CAACF,EAAMC,IAC7BR,EAAC,KAAA,CAAc,SAAAO,GAAA,YAAAA,EAAM,IAAA,EAAZC,CAAiB,EAC3B,CACH,CAAA,EACF,EACCV,IACE,MAAA,CAAI,UAAU,+DACb,SAAAM,EAAC,MAAA,CAAI,UAAU,6EACb,SAAA,CAAAJ,EAACC,EAAA,CACC,QAAS,IAAM,CACb,OAAO,SAAS,KAAOpB,EAAgBa,EAAG,IAAK,MAAM,CACvD,EACA,aAAYrD,EAAE,kBAAkB,QAC9B,eACAqD,EAAG,IAAA,EAEL,cAAa,sBAAsBA,EAAG,GAAG,GAExC,SAAArD,EAAE,UAAA,CAAA,EAEL2D,EAACC,EAAA,CACC,QAAUX,GAAMD,EAAiBC,EAAGI,EAAG,GAAG,EAC1C,aAAYrD,EAAE,oBAAoB,QAChC,eACAqD,EAAG,IAAA,EAEL,cAAa,wBAAwBA,EAAG,GAAG,GAE1C,SAAArD,EAAE,YAAA,CAAA,CACL,EACF,CAAA,CACF,EAEA2D,EAAC,MAAA,CAAI,UAAU,+DACb,SAAAA,EAACC,EAAA,CACC,QAAS,IAAM,CACb,OAAO,SAAS,KAAOpB,EAAgBa,EAAG,IAAK,MAAM,CACvD,EACA,aAAYrD,EAAE,kBAAkB,QAC9B,eACAqD,EAAG,IAAA,EAEL,cAAa,sBAAsBA,EAAG,GAAG,GAExC,SAAArD,EAAE,UAAA,CAAA,CACL,CACF,CAAA,EAEJ,EAGF,MAAO,CACL,SAAUqD,EAAG,KACb,OACEM,EAACU,GAAA,CACC,UAAW,sGAAsGC,GAC/GjB,EAAG,MAAA,CACJ,GAED,SAAAM,EAACE,EAAA,CACC,GAAI,mDAAkDU,EAAAlB,EAAG,SAAH,YAAAkB,EAAW,mBAAmB,EAAA,CAAA,CACtF,CAAA,EAGJ,UAAWlB,EAAG,UACd,OAAAK,EACA,YAAAI,CAAA,CAEJ,GAEA,IAAIU,EAAYpB,EAEhB,GAAIxD,EAAa,CACf,MAAM6E,EAAa7E,EAAYwD,CAAqB,EAEhDqB,IAAe,QAAa,MAAM,QAAQA,CAAU,IACtDD,EAAYC,EAEhB,CAEA,OAAOD,CACT,EAAG,CACDvE,EACAW,EACAd,EACAF,EACAI,EACAwC,EACAQ,EACAvB,CAAA,CACD,EAED,MAAO,CACL,YAAa,CACX,QAAAoB,GACA,KAAAM,GACA,aAAcvC,CAAA,EAEhB,iBAAkB,CAChB,YAAAE,EACA,WAAAC,EACA,iBAAAE,CAAA,EAEF,eAAgB,CACd,oBAAAT,EACA,SAAUa,EAAA,EAEZ,WAAAL,EACA,QAAAV,EACA,gBAAAkC,CAAA,CAEJ,EC/UakC,GAAuD,CAAC,CACnE,wBAAAjF,EACA,sBAAAC,EACA,yBAAAF,EACA,WAAAG,EACA,YAAAC,EACA,UAAA+E,EAAY,GACZ,WAAAC,EAAa,GACb,YAAAC,EAAc,GACd,iBAAAC,EAAmB,EACnB,gBAAAjF,EAAkBkF,EACpB,IAAM,CACJ,MAAM/E,EAAIgF,GAAQ,CAChB,WAAY,kDACZ,SAAU,2DACV,SAAU,2DACV,UAAW,4DACX,SAAU,2DACV,UAAW,4DACX,OAAQ,yDACR,WAAY,gDACZ,aAAc,kDACd,WAAY,mDACZ,WAAY,gDACZ,aAAc,kDACd,WAAY,8CACZ,kBAAmB,sDACnB,oBACE,wDACF,kBAAmB,qDAAA,CACpB,EAEK,CAAE,YAAAlF,EAAa,mBAAAC,CAAA,EAAuBkF,GAAA,EACtC,CACJ,QAAA3E,EACA,YAAA4E,EACA,iBAAAC,EACA,WAAAnE,EACA,eAAAoE,EACA,gBAAA5C,CAAA,EACEjD,GAAqB,CACvB,wBAAAE,EACA,sBAAAC,EACA,yBAAAF,EACA,WAAAG,EACA,YAAAC,EACA,YAAAE,EACA,gBAAAD,EACA,mBAAAE,EACA,EAAAC,CAAA,CACD,EAEK,CACJ,QAAAsD,EACA,YAAa,CAAE,oBAAAC,CAAA,CAAoB,EACjCzD,EAEEuF,EACJ/B,GAAWC,EACTI,EAAC2B,GAAA,CACC,QAAQ,UACR,QAAS,IAAM,CACb,OAAO,SAAS,KAAO9C,EAAgB,GAAI,KAAK,CAClD,EACA,cAAY,sBAEX,SAAAxC,EAAE,UAAA,CAAA,EAEH,KAEAuF,EACJjF,GAAWP,EACT4D,EAAC6B,IAAS,cAAY,0BACpB,SAAA7B,EAAC8B,GAAA,CAAY,QAAQ,MAAM,KAAK,OAAA,CAAQ,EAC1C,EAEAJ,EAGJ,OACEtB,EAAC,MAAA,CACC,UAAW2B,GAAQ,CAAC,kBAAmBf,CAAS,CAAC,EACjD,cAAY,4BAEX,SAAA,CAAAC,EAAajB,EAACgC,GAAA,CAAqB,WAAY3F,EAAE,WAAY,EAAK,KACnE2D,EAACiC,GAAA,CACC,WAAA5E,EACA,QAASkE,EAAY,QACrB,KAAMA,EAAY,KAClB,aAAcA,EAAY,aAC1B,iBAAAC,EACA,QAAS7E,GAAWP,EACpB,iBAAA+E,EACA,eAAAM,EACA,WAAYpF,EAAE,WACd,YAAA6E,EACA,OAAQU,CAAA,CAAA,CACV,CAAA,CAAA,CAGN"}
|
|
1
|
+
{"version":3,"file":"ApprovalRulesList.js","sources":["/@dropins/storefront-purchase-order/src/configs/purchaseOrderApprovalRules.config.ts","/@dropins/storefront-purchase-order/src/hooks/useApprovalRulesList.tsx","/@dropins/storefront-purchase-order/src/containers/ApprovalRulesList/ApprovalRulesList.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\nimport { Column } from '@/b2b-purchase-order/types/components';\n\nexport const defaultApprovalRulesColumns: Column[] = [\n { key: 'ruleName', label: 'Rule Name' },\n { key: 'status', label: 'Status' },\n {\n key: 'createdBy',\n label: 'Created By',\n },\n { key: 'action', label: 'Actions' },\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 {\n UseApprovalRulesList,\n UseApprovalRulesListReturn,\n} from '@/b2b-purchase-order/types/hooks';\nimport { useCallback, useEffect, useMemo, useState } from 'preact/hooks';\nimport { events } from '@adobe-commerce/event-bus';\nimport { getStatusVariant, isValidUrl } from '@/b2b-purchase-order/lib';\nimport { Text } from '@adobe-commerce/elsie/i18n';\nimport { defaultApprovalRulesColumns } from '@/b2b-purchase-order/configs';\nimport {\n deletePurchaseOrderApprovalRule,\n getPurchaseOrderApprovalRules,\n} from '@/b2b-purchase-order/api';\nimport { PurchaseOrderApprovalRuleModel } from '@/b2b-purchase-order/data/models';\nimport { ActionButton, Tag } from '@adobe-commerce/elsie/components';\n\nconst DEFAULT_PAGE_SIZE = 20;\n\nexport const useApprovalRulesList = ({\n routeApprovalRuleDetails,\n routeCreateApprovalRule,\n routeEditApprovalRule,\n setColumns,\n setRowsData,\n initialPageSize,\n permissions,\n loadingPermissions,\n t,\n}: UseApprovalRulesList): UseApprovalRulesListReturn => {\n const [approvalRules, setApprovalRules] = useState<\n PurchaseOrderApprovalRuleModel[]\n >([]);\n const [shouldRefetch, setShouldRefetch] = useState(true);\n const [loading, setLoading] = useState<boolean>(true);\n const [pageSizeOptionsList, setPageSizeOptionsList] =\n useState(initialPageSize);\n const [pagination, setPagination] = useState({\n currentPage: 1,\n totalPages: 1,\n totalCount: 0,\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 // Derive pagination values\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 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 useEffect(() => {\n // Re-fetch controlled by shouldRefetch flag\n if (!shouldRefetch) {\n return;\n }\n\n // Don't fetch approval rules 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 getPurchaseOrderApprovalRules(currentPage, selectedPageSize)\n .then((data) => {\n const responseApprovalRules = data?.items ?? [];\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 setApprovalRules(responseApprovalRules);\n })\n .catch((error) => {\n console.error('Error fetching approval rules:', error);\n setApprovalRules([]);\n })\n .finally(() => {\n setLoading(false);\n setShouldRefetch(false);\n });\n }, [\n shouldRefetch,\n currentPage,\n pageSizeOptionsList,\n totalPages,\n loadingPermissions,\n ]);\n\n const handleCreateUrl = useCallback(\n (id: string, type: 'edit' | 'new' | 'view'): string => {\n let url = '';\n\n switch (type) {\n case 'new': {\n url = routeCreateApprovalRule?.(id) as string;\n break;\n }\n case 'edit': {\n url = routeEditApprovalRule?.(id) as string;\n break;\n }\n case 'view': {\n url = routeApprovalRuleDetails?.(id) as string;\n break;\n }\n }\n\n if (!isValidUrl(url ?? '')) return '#';\n\n return url;\n },\n [routeCreateApprovalRule, routeEditApprovalRule, routeApprovalRuleDetails]\n );\n\n const columns = useMemo(() => {\n return (\n setColumns?.(defaultApprovalRulesColumns) ??\n defaultApprovalRulesColumns.map((col) => ({\n ...col,\n label: t[col.key as keyof typeof t] || col.label,\n }))\n );\n }, [setColumns, t]);\n\n const handleDeleteRule = useCallback((e: Event, id: string) => {\n e.preventDefault();\n setLoading(true);\n deletePurchaseOrderApprovalRule(id)\n .then(() => {\n events.emit('purchase-order/refresh', true);\n })\n .finally(() => {\n setLoading(false);\n });\n }, []);\n\n const rows = useMemo(() => {\n const modifiedApprovalRules = approvalRules?.map((ar, rowIndex) => {\n const {\n isAdmin,\n permissions: { manageApprovalRules },\n } = permissions;\n\n const isExpanded = expandedRowIndices.has(rowIndex);\n const canManage = isAdmin || manageApprovalRules;\n\n // Main row action\n const action = (\n <ActionButton onClick={() => toggleExpandedRow(rowIndex)}>\n <Text\n id={`PurchaseOrders.purchaseOrdersTable.buttons.${\n isExpanded ? 'expandedHidden' : 'expandedShow'\n }`}\n />\n </ActionButton>\n );\n\n // Expanded row details\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.ruleType\" />\n </span>{' '}\n <Text\n id={`PurchaseOrders.purchaseOrdersTable.ruleTypes.${ar.condition?.attribute?.toLocaleLowerCase()}`}\n />\n </p>\n <p>\n <span>\n <Text id=\"PurchaseOrders.purchaseOrdersTable.expandedRowLabels.appliesTo\" />\n </span>\n </p>\n <ul>\n {ar?.appliesToRoles?.length <= 0 ? (\n <li>{t.appliesToAll}</li>\n ) : (\n ar?.appliesToRoles?.map((role, idx) => (\n <li key={idx}>{role.name}</li>\n ))\n )}\n </ul>\n <p>\n <span>\n <Text id=\"PurchaseOrders.purchaseOrdersTable.expandedRowLabels.approver\" />\n </span>\n </p>\n <ul>\n {ar?.approverRoles?.map((role, idx) => (\n <li key={idx}>{role?.name}</li>\n ))}\n </ul>\n </div>\n {canManage ? (\n <div className=\"b2b-purchase-order-purchase-orders-table__row-details-action\">\n <div className=\"b2b-purchase-order-purchase-orders-table__row-details-action-inner-wrapper\">\n <ActionButton\n onClick={() => {\n window.location.href = handleCreateUrl(ar.uid, 'edit');\n }}\n aria-label={t.ariaLabelEditRule.replace(\n '{{ruleName}}',\n ar.name\n )}\n data-testid={`edit-approval-rule-${ar.uid}`}\n >\n {t.actionEdit}\n </ActionButton>\n <ActionButton\n onClick={(e) => handleDeleteRule(e, ar.uid)}\n aria-label={t.ariaLabelDeleteRule.replace(\n '{{ruleName}}',\n ar.name\n )}\n data-testid={`delete-approval-rule-${ar.uid}`}\n >\n {t.actionDelete}\n </ActionButton>\n </div>\n </div>\n ) : (\n <div className=\"b2b-purchase-order-purchase-orders-table__row-details-action\">\n <ActionButton\n onClick={() => {\n window.location.href = handleCreateUrl(ar.uid, 'view');\n }}\n aria-label={t.ariaLabelViewRule.replace(\n '{{ruleName}}',\n ar.name\n )}\n data-testid={`view-approval-rule-${ar.uid}`}\n >\n {t.actionView}\n </ActionButton>\n </div>\n )}\n </div>\n );\n\n return {\n ruleName: ar.name,\n status: (\n <Tag\n className={`b2b-purchase-order-purchase-orders-table__status b2b-purchase-order-purchase-orders-table__status--${getStatusVariant(\n ar.status\n )}`}\n >\n <Text\n id={`PurchaseOrders.purchaseOrdersTable.rulesStatus.${ar.status?.toLocaleLowerCase()}`}\n />\n </Tag>\n ),\n createdBy: ar.createdBy,\n action,\n _rowDetails,\n };\n });\n\n let finalRows = modifiedApprovalRules;\n\n if (setRowsData) {\n const customRows = setRowsData(modifiedApprovalRules);\n // If setRowsData returns something, use it, otherwise keep original data\n if (customRows !== undefined && Array.isArray(customRows)) {\n finalRows = customRows as typeof modifiedApprovalRules;\n }\n }\n\n return finalRows;\n }, [\n approvalRules,\n expandedRowIndices,\n permissions,\n setRowsData,\n t,\n handleCreateUrl,\n handleDeleteRule,\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 handleCreateUrl,\n };\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 { classes, Container } from '@adobe-commerce/elsie/lib';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport {\n PurchaseOrdersHeader,\n PurchaseOrdersTable,\n} from '@/b2b-purchase-order/components';\nimport { ApprovalRulesListProps } from '@/b2b-purchase-order/types/containers';\nimport {\n useApprovalRulesList,\n useCustomerRolePermissions,\n} from '@/b2b-purchase-order/hooks';\nimport {\n Button,\n Skeleton,\n SkeletonRow,\n} from '@adobe-commerce/elsie/components';\nimport { defaultPageSizeConfig } from '@/b2b-purchase-order/configs';\n\nexport const ApprovalRulesList: Container<ApprovalRulesListProps> = ({\n routeCreateApprovalRule,\n routeEditApprovalRule,\n routeApprovalRuleDetails,\n setColumns,\n setRowsData,\n className = '',\n withHeader = true,\n withWrapper = true,\n skeletonRowCount = 5,\n initialPageSize = defaultPageSizeConfig,\n}) => {\n const t = useText({\n headerText: 'PurchaseOrders.approvalRulesList.containerTitle',\n ruleName: 'PurchaseOrders.purchaseOrdersTable.tableColumns.ruleName',\n ruleType: 'PurchaseOrders.purchaseOrdersTable.tableColumns.ruleType',\n appliesTo: 'PurchaseOrders.purchaseOrdersTable.tableColumns.appliesTo',\n approver: 'PurchaseOrders.purchaseOrdersTable.tableColumns.approver',\n createdBy: 'PurchaseOrders.purchaseOrdersTable.tableColumns.createdBy',\n status: 'PurchaseOrders.purchaseOrdersTable.tableColumns.status',\n actionEdit: 'PurchaseOrders.purchaseOrdersTable.actionEdit',\n actionDelete: 'PurchaseOrders.purchaseOrdersTable.actionDelete',\n addNewRule: 'PurchaseOrders.approvalRulesList.buttons.newRule',\n actionView: 'PurchaseOrders.purchaseOrdersTable.actionView',\n appliesToAll: 'PurchaseOrders.purchaseOrdersTable.appliesToAll',\n emptyTitle: 'PurchaseOrders.approvalRulesList.emptyTitle',\n ariaLabelEditRule: 'PurchaseOrders.approvalRulesList.ariaLabel.editRule',\n ariaLabelDeleteRule:\n 'PurchaseOrders.approvalRulesList.ariaLabel.deleteRule',\n ariaLabelViewRule: 'PurchaseOrders.approvalRulesList.ariaLabel.viewRule',\n });\n\n const { permissions, loadingPermissions } = useCustomerRolePermissions();\n const {\n loading,\n tableConfig,\n paginationConfig,\n totalCount,\n pageSizeConfig,\n handleCreateUrl,\n } = useApprovalRulesList({\n routeCreateApprovalRule,\n routeEditApprovalRule,\n routeApprovalRuleDetails,\n setColumns,\n setRowsData,\n permissions,\n initialPageSize,\n loadingPermissions,\n t,\n });\n\n const {\n isAdmin,\n permissions: { manageApprovalRules },\n } = permissions;\n\n const renderFooterButton =\n isAdmin || manageApprovalRules ? (\n <Button\n variant=\"primary\"\n onClick={() => {\n window.location.href = handleCreateUrl('', 'new');\n }}\n data-testid=\"add-new-rule-button\"\n >\n {t.addNewRule}\n </Button>\n ) : null;\n\n const footerContent =\n loading || loadingPermissions ? (\n <Skeleton data-testid=\"approval-rules-skeleton\">\n <SkeletonRow variant=\"row\" size=\"small\" />\n </Skeleton>\n ) : (\n renderFooterButton\n );\n\n return (\n <div\n className={classes(['purchase-orders', className])}\n data-testid=\"purchase-orders-container\"\n >\n {withHeader ? <PurchaseOrdersHeader headerText={t.headerText} /> : null}\n <PurchaseOrdersTable\n totalCount={totalCount}\n columns={tableConfig.columns}\n rows={tableConfig.rows}\n expandedRows={tableConfig.expandedRows}\n paginationConfig={paginationConfig}\n loading={loading || loadingPermissions}\n skeletonRowCount={skeletonRowCount}\n pageSizeConfig={pageSizeConfig}\n emptyTitle={t.emptyTitle}\n withWrapper={withWrapper}\n footer={footerContent}\n />\n </div>\n );\n};\n"],"names":["defaultApprovalRulesColumns","DEFAULT_PAGE_SIZE","useApprovalRulesList","routeApprovalRuleDetails","routeCreateApprovalRule","routeEditApprovalRule","setColumns","setRowsData","initialPageSize","permissions","loadingPermissions","t","approvalRules","setApprovalRules","useState","shouldRefetch","setShouldRefetch","loading","setLoading","pageSizeOptionsList","setPageSizeOptionsList","pagination","setPagination","expandedRowIndices","setExpandedRowIndices","useEffect","event","events","currentPage","totalPages","totalCount","handlePageChange","useCallback","page","prev","handleChangePageSize","size","option","toggleExpandedRow","rowIndex","newSet","pageSize","_a","selectedPageSize","getPurchaseOrderApprovalRules","data","responseApprovalRules","responseCurrentPage","responseTotalPages","_b","responseTotalCount","error","handleCreateUrl","id","type","url","isValidUrl","columns","useMemo","col","handleDeleteRule","e","deletePurchaseOrderApprovalRule","rows","modifiedApprovalRules","ar","isAdmin","manageApprovalRules","isExpanded","canManage","action","jsx","ActionButton","Text","_rowDetails","jsxs","_c","_d","role","idx","_e","Tag","getStatusVariant","_f","finalRows","customRows","ApprovalRulesList","className","withHeader","withWrapper","skeletonRowCount","defaultPageSizeConfig","useText","useCustomerRolePermissions","tableConfig","paginationConfig","pageSizeConfig","renderFooterButton","Button","footerContent","Skeleton","SkeletonRow","classes","PurchaseOrdersHeader","PurchaseOrdersTable"],"mappings":"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"}
|
package/i18n/en_US.json.d.ts
CHANGED
|
@@ -60,7 +60,7 @@ declare const _default: {
|
|
|
60
60
|
"any_item": "Any Item",
|
|
61
61
|
"all_items": "All Items"
|
|
62
62
|
},
|
|
63
|
-
"buttons":{
|
|
63
|
+
"buttons": {
|
|
64
64
|
"expandedHidden": "Hide",
|
|
65
65
|
"expandedShow": "Show"
|
|
66
66
|
},
|
|
@@ -164,7 +164,7 @@ declare const _default: {
|
|
|
164
164
|
}
|
|
165
165
|
},
|
|
166
166
|
"approvalRuleForm": {
|
|
167
|
-
"headerText": "Purchase
|
|
167
|
+
"headerText": "Purchase order approval rule",
|
|
168
168
|
"titleAppliesTo": "Applies To",
|
|
169
169
|
"titleRuleType": "Rule Type",
|
|
170
170
|
"titleRequiresApprovalRole": "Requires Approval From",
|
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name": "@dropins/storefront-purchase-order", "version": "0.0.6-
|
|
1
|
+
{"name": "@dropins/storefront-purchase-order", "version": "0.0.6-alpha4", "@dropins/tools": "1.6.0-beta2", "license": "SEE LICENSE IN LICENSE.md"}
|
package/render.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*! Copyright 2025 Adobe
|
|
2
2
|
All Rights Reserved. */
|
|
3
3
|
(function(t,a){try{if(typeof document<"u"){const e=document.createElement("style"),n=a.styleId;for(const r in a.attributes)e.setAttribute(r,a.attributes[r]);e.setAttribute("data-dropin",n),e.appendChild(document.createTextNode(t));const o=document.querySelector('style[data-dropin="sdk"]');if(o)o.after(e);else{const r=document.querySelector('link[rel="stylesheet"], style');r?r.before(e):document.head.append(e)}}}catch(e){console.error("dropin-styles (injectCodeFunction)",e)}})(`.dropin-skeleton{--row-gap-spacing: var(--spacing-medium);display:grid;grid-template-columns:1fr 1fr;gap:var(--row-gap-spacing)}.dropin-skeleton .dropin-skeleton--row__content{background:var(--color-neutral-300) linear-gradient(to right,var(--color-neutral-300) 0%,var(--color-neutral-100) 20%,var(--color-neutral-300) 40%,var(--color-neutral-300) 100%) no-repeat;animation:skeletonShimmer infinite 1.2s linear;border-radius:var(--shape-border-radius-2)}.dropin-skeleton__empty{background:none}.dropin-skeleton-row--multiline{--multiline-gap-spacing: var(--spacing-medium);display:grid;grid-auto-rows:max-content;gap:var(--multiline-gap-spacing)}.dropin-skeleton-row--full{grid-column:1 / -1}.dropin-skeleton-row svg{fill:var(--color-neutral-400);fill-opacity:.5;animation-duration:1s;animation-fill-mode:forwards;animation-iteration-count:infinite;animation-name:placeholderShimmer;animation-timing-function:linear}.dropin-skeleton-row__row-xsmall{height:32px}.dropin-skeleton-row__row-small{height:40px}.dropin-skeleton-row__row-medium{height:48px}.dropin-skeleton-row__row-large{height:56px}.dropin-skeleton-row__row-xlarge{height:72px}.dropin-skeleton-row__heading-xsmall{height:20px}.dropin-skeleton-row__heading-small{height:24px}.dropin-skeleton-row__heading-medium{height:32px}.dropin-skeleton-row__heading-large{height:40px}.dropin-skeleton-row__heading-xlarge{height:48px}@keyframes skeletonShimmer{0%{background-position:-600px 0}to{background-position:600px 0}}@keyframes placeholderShimmer{0%{fill-opacity:.5}50%{fill-opacity:1}to{fill-opacity:.5}}@media only screen and (max-width: 600px){.dropin-skeleton{grid-template-columns:1fr}}
|
|
4
|
-
.b2b-purchase-order-purchase-orders-table{display:flex;flex-direction:column;gap:var(--spacing-medium)}.b2b-purchase-order-purchase-orders-table__row-details-action-inner-wrapper{display:flex;gap:var(--spacing-xsmall)}.b2b-purchase-order-purchase-orders-table--empty-state,.b2b-purchase-order-purchase-orders-table--empty-state>.dropin-card__content{gap:0}.b2b-purchase-order-purchase-orders-table a{cursor:pointer}.b2b-purchase-order-purchase-orders-table .purchase-orders-table__item--skeleton{max-width:200px}.purchase-orders-table__empty-state{text-align:center;color:var(--color-neutral-600);font:var(--type-body-1-default-font);letter-spacing:var(--type-body-1-default-letter-spacing);border:var(--shape-border-width-1) solid var(--color-neutral-400);border-top:none}.purchase-orders-table__empty-state:not(:last-child){margin-bottom:var(--spacing-medium)}.purchase-orders-table__pagination--loading{pointer-events:none;opacity:.5;cursor:not-allowed}.purchase-orders-table__pagination-wrapper{display:flex;justify-content:space-between;align-items:center}.purchase-orders-table__pagination-page-size{display:flex;align-items:center;gap:var(--spacing-small)}.purchase-orders-table__pagination-counter,.purchase-orders-table__pagination-page-size{color:var(--color-neutral-800);font:var(--type-body-2-default-font);letter-spacing:var(--type-body-2-default-letter-spacing)}@media (max-width: 783px){.purchase-orders-table__pagination-wrapper{display:grid;grid-template-areas:"counter page-size" "pagination pagination";grid-template-columns:auto auto;gap:var(--spacing-small)}.purchase-orders-table__pagination-counter{grid-area:counter}.purchase-orders-table__pagination-page-size{grid-area:page-size}.purchase-orders-table__pagination{grid-area:pagination;justify-self:center}}@media (max-width: 600px){.purchase-orders-table__pagination-wrapper{grid-template-areas:"counter" "page-size" "pagination";grid-template-columns:1fr;justify-items:center}.purchase-orders-table__pagination-counter{grid-area:counter}.purchase-orders-table__pagination-page-size{grid-area:page-size}.purchase-orders-table__pagination{grid-area:pagination}}.b2b-purchase-order-purchase-orders-table__row-details{display:flex;justify-content:space-between;align-items:flex-end}.b2b-purchase-order-purchase-orders-table__row-details-content{flex:1;text-align:left}.b2b-purchase-order-purchase-orders-table__row-details-content p,.b2b-purchase-order-purchase-orders-table__row-details-content ul{margin:0 var(--spacing-xsmall) var(--spacing-xsmall) 0}.b2b-purchase-order-purchase-orders-table__row-details-content span:first-child{font:var(--type-body-1-emphasized-font);letter-spacing:var(--type-body-1-emphasized-letter-spacing)}.b2b-purchase-order-purchase-orders-table__status{max-width:max-content}.b2b-purchase-order-purchase-orders-table__status--positive{background-color:var(--color-positive-200)}.b2b-purchase-order-purchase-orders-table__status--negative{background-color:var(--color-alert-200)}.b2b-purchase-order-purchase-orders-table__status--waiting{background-color:var(--color-informational-200)}.b2b-purchase-order-purchase-orders-table .dropin-table__body td:last-child{text-align:center}.b2b-purchase-order-purchase-orders-table .dropin-table__header__row th:last-child{text-align:center}.dropin-table__body__cell .dropin-action-button{font:var(--type-body-1-default-font);letter-spacing:var(--type-body-1-default-letter-spacing)}.purchase-orders-header{margin-bottom:var(--spacing-medium)}.b2b-purchase-order-purchase-orders-table-actions{display:flex;justify-content:space-between;align-items:center}.b2b-purchase-order-purchase-orders-table-actions__buttons{display:flex;gap:10px;justify-content:space-between}.b2b-purchase-order-approval-rule-form form{display:flex;flex-direction:column;gap:var(--spacing-small)}.b2b-purchase-order-approval-rule-form__rule-condition,.b2b-purchase-order-approval-rule-form__approval-role,.b2b-purchase-order-approval-rule-form__rule-type,.b2b-purchase-order-approval-rule-form__applies-to,.b2b-purchase-order-approval-rule-form__rule-condition-container,.b2b-purchase-order-approval-rule-form__buttons{display:flex;flex-direction:column;gap:var(--spacing-xsmall)}.b2b-purchase-order-approval-rule-form form>label.dropin-checkbox{align-items:center}.b2b-purchase-order-approval-rule-form__rule-type select,.b2b-purchase-order-approval-rule-form__rule-condition-container select{min-height:56px}.b2b-purchase-order-approval-rule-form__rule-condition-container{flex-direction:row;position:relative}.b2b-purchase-order-approval-rule-form__rule-condition-container--error{margin-bottom:var( --spacing-xsmall )}.b2b-purchase-order-approval-rule-form__rule-condition-container>div{position:relative}.b2b-purchase-order-approval-rule-form__rule-condition-container .error-message{position:absolute;top:100%;left:0;right:0;z-index:10}.b2b-purchase-order-approval-rule-form__buttons{justify-content:flex-start;flex-direction:row}@media (max-width: 600px){.b2b-purchase-order-approval-rule-form__rule-condition-container{flex-direction:column;margin-bottom:var(--spacing-xsmall)}.b2b-purchase-order-approval-rule-form__rule-condition-container .error-message{position:static}.b2b-purchase-order-approval-rule-form form .dropin-multi-select{min-width:100%}}.error-message{font:var(--type-details-caption-2-font);letter-spacing:var(--type-details-caption-2-letter-spacing);padding-top:var(--spacing-xsmall);text-align:left;color:var(--color-alert-800)}.b2b-purchase-order-approval-rule-form .dropin-skeleton{width:100%;display:flex;flex-direction:column;gap:var(--spacing-xsmall)}.approval-rule-form-loader__section{display:flex;flex-direction:column;gap:var(--spacing-xsmall);margin-bottom:var(--spacing-medium)}.approval-rule-form-loader__buttons{display:flex;gap:var(--spacing-small)}.purchase-orders-confirmation-content__title{color:var(--color-neutral-800);font:var(--type-headline-1-font);letter-spacing:var(--type-headline-1-letter-spacing)}.purchase-orders-confirmation-content__message{font:var(--type-body-1-default-font);letter-spacing:var(--type-body-1-default-letter-spacing)}.purchase-orders-confirmation-content__link{color:var(--color-brand-500);font:var(--type-body-1-strong-font);letter-spacing:var(--type-body-1-strong-letter-spacing)}.b2b-purchase-order-status-content__message{padding:0;margin:0;box-sizing:border-box;font:var(--type-body-1-default-font);letter-spacing:var(--type-body-1-default-letter-spacing);margin-bottom:var(--spacing-small)}.b2b-purchase-order-status-content__actions>div{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:var(--spacing-xsmall)}.purchase-order-status .dropin-card__content{gap:0}.b2b-purchase-order-approval-rule-details-content__item{margin-bottom:var(--spacing-medium);display:grid;grid-template-columns:1fr;gap:var(--spacing-xsmall)}.b2b-purchase-order-approval-rule-details-content__label{font:var(--type-body-1-emphasized-font);letter-spacing:var(--type-body-1-emphasized-letter-spacing)}.b2b-purchase-order-approval-rule-details-content__value{display:block}.b2b-purchase-order-approval-rule-details-content__value ul{margin:0;padding-left:var(--spacing-medium)}.b2b-purchase-order-approval-rule-details-content__value>div{display:inline-flex;flex-wrap:wrap;align-items:center;margin-right:var(--spacing-small);gap:var(--spacing-xsmall)}.approval-rule-details__button{max-width:max-content}.b2b-purchase-order-form-loader .dropin-skeleton{width:100%;display:flex;flex-direction:column;gap:var(--spacing-xsmall)}.b2b-purchase-order-form-loader .approval-rule-form-loader__section{display:flex;flex-direction:column;gap:var(--spacing-xsmall);margin-bottom:var(--spacing-medium)}.b2b-purchase-order-form-loader .approval-rule-form-loader__buttons{display:flex;gap:var(--spacing-small)}.b2b-purchase-order-comment-list-content__list{list-style:none;margin:0;padding:0}.b2b-purchase-order-comment-list-content__item{padding:var(--spacing-small) 0}.b2b-purchase-order-comment-list-content__item:first-child{padding-top:0}.b2b-purchase-order-comment-list-content__item:last-child{padding-bottom:0}.b2b-purchase-order-comment-list-content__title{font:var(--type-body-1-emphasized-font);margin-bottom:var(--spacing-xsmall)}.b2b-purchase-order-comment-list-content__description{color:var(--color-neutral-700)}.b2b-purchase-order-comment-list-content__divider{border:none;border-top:var(--shape-border-width-1) solid var(--color-neutral-300);margin:0}.b2b-purchase-order-comment-list-content__actions{display:flex;justify-content:center;align-items:center;margin-top:var(--spacing-small)}.b2b-purchase-order-comment-form-content{display:flex;flex-direction:column;gap:var(--spacing-small)}.b2b-purchase-order-comment-form-content button{align-self:flex-end}.b2b-purchase-order-comment-form-content .dropin-textarea:not(:placeholder-shown)+.dropin-textarea__label--floating{background-color:transparent}.b2b-purchase-order-approval-flow-content__list{list-style:none;margin:0;padding:0}.b2b-purchase-order-approval-flow-content__item{padding:var(--spacing-small) 0}.b2b-purchase-order-approval-flow-content__item:first-child{padding-top:0}.b2b-purchase-order-approval-flow-content__item:last-child{padding-bottom:0}.b2b-purchase-order-approval-flow-content__title{font-weight:600;margin-bottom:var(--spacing-xsmall)}.b2b-purchase-order-approval-flow-content__description{color:var(--color-neutral-700);display:flex;justify-content:flex-start;align-items:center;gap:var(--spacing-xsmall)}.b2b-purchase-order-approval-flow-content__divider{border:none;border-top:var(--shape-border-width-1) solid var(--color-neutral-300);margin:0}.b2b-purchase-order-approval-flow-content__icon--pending{color:var(--color-neutral-50);background-color:var(--color-informational-500);border-radius:50%;border:1px solid var(--color-informational-500)}.b2b-purchase-order-approval-flow-content__icon--approved{color:var(--color-positive-500)}.b2b-purchase-order-approval-flow-content__icon--rejected{color:var(--color-alert-500)}.b2b-purchase-order-history-log-content__list{list-style:none;margin:0;padding:0}.b2b-purchase-order-history-log-content__item{padding:var(--spacing-small) 0}.b2b-purchase-order-history-log-content__item:first-child{padding-top:0}.b2b-purchase-order-history-log-content__item:last-child{padding-bottom:0}.b2b-purchase-order-history-log-content__title{font:var(--type-body-1-emphasized-font);margin-bottom:var(--spacing-xsmall)}.b2b-purchase-order-history-log-content__description{color:var(--color-neutral-700)}.b2b-purchase-order-history-log-content__divider{border:none;border-top:var(--shape-border-width-1) solid var(--color-neutral-300);margin:0}.b2b-purchase-order-history-log-content__actions{margin-top:var(--spacing-small);display:flex;justify-content:center;align-items:center}`,{styleId:"b2b-purchase-order"});
|
|
5
|
-
import{jsx as r}from"@dropins/tools/preact-jsx-runtime.js";import{Render as l}from"@dropins/tools/lib.js";import{useState as p,useEffect as d}from"@dropins/tools/preact-hooks.js";import{UIProvider as n}from"@dropins/tools/components.js";import{events as i}from"@dropins/tools/event-bus.js";const u={customerPurchaseOrders:{containerTitle:"My purchase orders",noPurchaseOrders:"No purchase orders found."},companyPurchaseOrders:{containerTitle:"Company purchase orders",noPurchaseOrders:"No company purchase orders found."},requireApprovalPurchaseOrders:{containerTitle:"Requires my approval",noPurchaseOrders:"No purchase orders requiring my approval found."},approvalRulesList:{containerTitle:"Approval rules",emptyTitle:"No approval rules found",ariaLabel:{editRule:"Edit approval rule {{ruleName}}",deleteRule:"Delete approval rule {{ruleName}}",viewRule:"View approval rule {{ruleName}}"},buttons:{newRule:"Add New Rule"}},alertMessages:{header:{approve:"Approve Purchase Orders",reject:"Reject Purchase Orders",error:"Error"},description:{approve:"The selected purchase orders were approved successfully.",reject:"The selected purchase orders were rejected successfully.",error:"An error occurred while processing your request."}},purchaseOrdersTable:{noPurchaseOrders:{default:"No purchase orders found."},pagination:{status:"Items {{from}}-{{to}} of {{total}}",pageSizeLabel:{start:"Show"}},loading:"Loading purchase orders...",actionView:"View",actionEdit:"Edit",actionDelete:"Delete",rulesStatus:{enabled:"Enabled",disabled:"Disabled"},ruleTypes:{grand_total:"Grand Total",number_of_skus:"Number of SKUs",any_item:"Any Item",all_items:"All Items"},buttons:{expandedHidden:"Hide",expandedShow:"Show"},appliesToAll:"All",statusOrder:{order_placed:"Order placed",order_failed:"Order failed",pending:"Pending",approved:"Approved",rejected:"Rejected",canceled:"Canceled",order_in_progress:"Order in progress",approval_required:"Approval required",approved_pending_payment:"Approved pending Payment"},expandedRowLabels:{orderNumber:"Order Number:",createdDate:"Created Date:",updatedDate:"Updated Date:",total:"Total:",ruleType:"Rule Type:",appliesTo:"Applies To:",approver:"Approver:"},tableColumns:{poNumber:"PO #",orderNumber:"Order #",createdDate:"Created",updatedDate:"Updated",createdBy:"Created By",status:"Status",total:"Total",action:"Action",ruleName:"Rule Name",selectAllAriaLabel:"Select all not approved purchase orders"}},purchaseOrderConfirmation:{title:"Your Purchase Order has been submitted for approval.",messagePrefix:"Your Purchase Order request number is",messageSuffix:"A copy of this Purchase Order will be emailed to you shortly."},purchaseOrderStatus:{status:{pending:{title:"Pending Approval",message:"Purchase order is awaiting approval."},approval_required:{title:"Approval Required",message:"Purchase order requires approval before it can be processed."},approved:{title:"Approved",message:"Purchase order has been approved."},order_in_progress:{title:"Processing in Progress",message:"Purchase order is currently being processed."},order_placed:{title:"Placed",message:"Purchase order has been placed successfully."},order_failed:{title:"Failed",message:"Purchase order processing has failed."},rejected:{title:"Rejected",message:"Purchase order has been rejected."},canceled:{title:"Canceled",message:"Purchase order has been canceled."},approved_pending_payment:{title:"Approved - Pending Payment",message:"Purchase order has been approved and is awaiting payment."}},alertMessages:{success:{approval:"The purchase order was approved successfully.",reject:"The purchase order was rejected successfully.",cancel:"The purchase order was canceled successfully.",placeOrder:"The sales order was placed successfully."},errors:{approval:"An error occurred while approving the purchase order. Please try again.",reject:"An error occurred while rejecting the purchase order. Please try again.",cancel:"An error occurred while canceling the purchase order. Please try again.",placeOrder:"An error occurred while placing the sales order. Please try again."}},buttons:{approve:"Approve",reject:"Reject",cancel:"Cancel",placeOrder:"Place Order"}},approvalRuleForm:{headerText:"Purchase
|
|
4
|
+
.b2b-purchase-order-purchase-orders-table{display:flex;flex-direction:column;gap:var(--spacing-medium)}.b2b-purchase-order-purchase-orders-table__row-details-action-inner-wrapper{display:flex;gap:var(--spacing-xsmall)}.b2b-purchase-order-purchase-orders-table--empty-state,.b2b-purchase-order-purchase-orders-table--empty-state>.dropin-card__content{gap:0}.b2b-purchase-order-purchase-orders-table a{cursor:pointer}.b2b-purchase-order-purchase-orders-table .purchase-orders-table__item--skeleton{max-width:200px}.purchase-orders-table__empty-state{text-align:center;color:var(--color-neutral-600);font:var(--type-body-1-default-font);letter-spacing:var(--type-body-1-default-letter-spacing);border:var(--shape-border-width-1) solid var(--color-neutral-400);border-top:none}.purchase-orders-table__empty-state:not(:last-child){margin-bottom:var(--spacing-medium)}.purchase-orders-table__pagination--loading{pointer-events:none;opacity:.5;cursor:not-allowed}.purchase-orders-table__pagination-wrapper{display:flex;justify-content:space-between;align-items:center}.purchase-orders-table__pagination-page-size{display:flex;align-items:center;gap:var(--spacing-small)}.purchase-orders-table__pagination-counter,.purchase-orders-table__pagination-page-size{color:var(--color-neutral-800);font:var(--type-body-2-default-font);letter-spacing:var(--type-body-2-default-letter-spacing)}@media (max-width: 783px){.purchase-orders-table__pagination-wrapper{display:grid;grid-template-areas:"counter page-size" "pagination pagination";grid-template-columns:auto auto;gap:var(--spacing-small)}.purchase-orders-table__pagination-counter{grid-area:counter}.purchase-orders-table__pagination-page-size{grid-area:page-size}.purchase-orders-table__pagination{grid-area:pagination;justify-self:center}}@media (max-width: 600px){.purchase-orders-table__pagination-wrapper{grid-template-areas:"counter" "page-size" "pagination";grid-template-columns:1fr;justify-items:center}.purchase-orders-table__pagination-counter{grid-area:counter}.purchase-orders-table__pagination-page-size{grid-area:page-size}.purchase-orders-table__pagination{grid-area:pagination}}.b2b-purchase-order-purchase-orders-table__row-details{display:flex;justify-content:space-between;align-items:flex-end}.b2b-purchase-order-purchase-orders-table__row-details-content{flex:1;text-align:left}.b2b-purchase-order-purchase-orders-table__row-details-content p,.b2b-purchase-order-purchase-orders-table__row-details-content ul{margin:0 var(--spacing-xsmall) var(--spacing-xsmall) 0}.b2b-purchase-order-purchase-orders-table__row-details-content span:first-child{font:var(--type-body-1-emphasized-font);letter-spacing:var(--type-body-1-emphasized-letter-spacing)}.b2b-purchase-order-purchase-orders-table__status{max-width:max-content}.b2b-purchase-order-purchase-orders-table__status--positive{background-color:var(--color-positive-200)}.b2b-purchase-order-purchase-orders-table__status--negative{background-color:var(--color-alert-200)}.b2b-purchase-order-purchase-orders-table__status--waiting{background-color:var(--color-informational-200)}.b2b-purchase-order-purchase-orders-table .dropin-table__body td:last-child,.b2b-purchase-order-purchase-orders-table .dropin-table__header__row th:last-child{text-align:center}@container (max-width: 600px){.b2b-purchase-order-purchase-orders-table .dropin-table__body td:last-child,.b2b-purchase-order-purchase-orders-table .dropin-table__header__row th:last-child{text-align:left}}.dropin-table__body__cell .dropin-action-button{font:var(--type-body-1-default-font);letter-spacing:var(--type-body-1-default-letter-spacing)}.purchase-orders-header{margin-bottom:var(--spacing-medium)}.b2b-purchase-order-purchase-orders-table-actions{display:flex;justify-content:space-between;align-items:center}.b2b-purchase-order-purchase-orders-table-actions__buttons{display:flex;gap:10px;justify-content:space-between}.b2b-purchase-order-approval-rule-form form{display:flex;flex-direction:column;gap:var(--spacing-small)}.b2b-purchase-order-approval-rule-form__rule-condition,.b2b-purchase-order-approval-rule-form__approval-role,.b2b-purchase-order-approval-rule-form__rule-type,.b2b-purchase-order-approval-rule-form__applies-to,.b2b-purchase-order-approval-rule-form__rule-condition-container,.b2b-purchase-order-approval-rule-form__buttons{display:flex;flex-direction:column;gap:var(--spacing-xsmall)}.b2b-purchase-order-approval-rule-form form>label.dropin-checkbox{align-items:center}.b2b-purchase-order-approval-rule-form__rule-type select,.b2b-purchase-order-approval-rule-form__rule-condition-container select{min-height:56px}.b2b-purchase-order-approval-rule-form__rule-condition-container{flex-direction:row;position:relative}.b2b-purchase-order-approval-rule-form__rule-condition-container--error{margin-bottom:var( --spacing-xsmall )}.b2b-purchase-order-approval-rule-form__rule-condition-container>div{position:relative}.b2b-purchase-order-approval-rule-form__rule-condition-container .error-message{position:absolute;top:100%;left:0;right:0;z-index:10}.b2b-purchase-order-approval-rule-form__buttons{justify-content:flex-start;flex-direction:row}@media (max-width: 600px){.b2b-purchase-order-approval-rule-form__rule-condition-container{flex-direction:column;margin-bottom:var(--spacing-xsmall)}.b2b-purchase-order-approval-rule-form__rule-condition-container .error-message{position:static}.b2b-purchase-order-approval-rule-form form .dropin-multi-select{min-width:100%}}.error-message{font:var(--type-details-caption-2-font);letter-spacing:var(--type-details-caption-2-letter-spacing);padding-top:var(--spacing-xsmall);text-align:left;color:var(--color-alert-800)}.b2b-purchase-order-approval-rule-form .dropin-skeleton{width:100%;display:flex;flex-direction:column;gap:var(--spacing-xsmall)}.approval-rule-form-loader__section{display:flex;flex-direction:column;gap:var(--spacing-xsmall);margin-bottom:var(--spacing-medium)}.approval-rule-form-loader__buttons{display:flex;gap:var(--spacing-small)}.purchase-orders-confirmation-content__title{color:var(--color-neutral-800);font:var(--type-headline-1-font);letter-spacing:var(--type-headline-1-letter-spacing)}.purchase-orders-confirmation-content__message{font:var(--type-body-1-default-font);letter-spacing:var(--type-body-1-default-letter-spacing)}.purchase-orders-confirmation-content__link{color:var(--color-brand-500);font:var(--type-body-1-strong-font);letter-spacing:var(--type-body-1-strong-letter-spacing)}.b2b-purchase-order-status-content__message{padding:0;margin:0;box-sizing:border-box;font:var(--type-body-1-default-font);letter-spacing:var(--type-body-1-default-letter-spacing);margin-bottom:var(--spacing-small)}.b2b-purchase-order-status-content__actions>div{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:var(--spacing-xsmall)}.purchase-order-status .dropin-card__content{gap:0}.b2b-purchase-order-approval-rule-details-content__item{margin-bottom:var(--spacing-medium);display:grid;grid-template-columns:1fr;gap:var(--spacing-xsmall)}.b2b-purchase-order-approval-rule-details-content__label{font:var(--type-body-1-emphasized-font);letter-spacing:var(--type-body-1-emphasized-letter-spacing)}.b2b-purchase-order-approval-rule-details-content__value{display:block}.b2b-purchase-order-approval-rule-details-content__value ul{margin:0;padding-left:var(--spacing-medium)}.b2b-purchase-order-approval-rule-details-content__value>div{display:inline-flex;flex-wrap:wrap;align-items:center;margin-right:var(--spacing-small);gap:var(--spacing-xsmall)}.approval-rule-details__button{max-width:max-content}.b2b-purchase-order-form-loader .dropin-skeleton{width:100%;display:flex;flex-direction:column;gap:var(--spacing-xsmall)}.b2b-purchase-order-form-loader .approval-rule-form-loader__section{display:flex;flex-direction:column;gap:var(--spacing-xsmall);margin-bottom:var(--spacing-medium)}.b2b-purchase-order-form-loader .approval-rule-form-loader__buttons{display:flex;gap:var(--spacing-small)}.b2b-purchase-order-comment-list-content__list{list-style:none;margin:0;padding:0}.b2b-purchase-order-comment-list-content__item{padding:var(--spacing-small) 0}.b2b-purchase-order-comment-list-content__item:first-child{padding-top:0}.b2b-purchase-order-comment-list-content__item:last-child{padding-bottom:0}.b2b-purchase-order-comment-list-content__title{font:var(--type-body-1-emphasized-font);margin-bottom:var(--spacing-xsmall)}.b2b-purchase-order-comment-list-content__description{color:var(--color-neutral-700)}.b2b-purchase-order-comment-list-content__divider{border:none;border-top:var(--shape-border-width-1) solid var(--color-neutral-300);margin:0}.b2b-purchase-order-comment-list-content__actions{display:flex;justify-content:center;align-items:center;margin-top:var(--spacing-small)}.b2b-purchase-order-comment-form-content{display:flex;flex-direction:column;gap:var(--spacing-small)}.b2b-purchase-order-comment-form-content button{align-self:flex-end}.b2b-purchase-order-comment-form-content .dropin-textarea:not(:placeholder-shown)+.dropin-textarea__label--floating{background-color:transparent}.b2b-purchase-order-approval-flow-content__list{list-style:none;margin:0;padding:0}.b2b-purchase-order-approval-flow-content__item{padding:var(--spacing-small) 0}.b2b-purchase-order-approval-flow-content__item:first-child{padding-top:0}.b2b-purchase-order-approval-flow-content__item:last-child{padding-bottom:0}.b2b-purchase-order-approval-flow-content__title{font-weight:600;margin-bottom:var(--spacing-xsmall)}.b2b-purchase-order-approval-flow-content__description{color:var(--color-neutral-700);display:flex;justify-content:flex-start;align-items:center;gap:var(--spacing-xsmall)}.b2b-purchase-order-approval-flow-content__divider{border:none;border-top:var(--shape-border-width-1) solid var(--color-neutral-300);margin:0}.b2b-purchase-order-approval-flow-content__icon--pending{color:var(--color-neutral-50);background-color:var(--color-informational-500);border-radius:50%;border:1px solid var(--color-informational-500)}.b2b-purchase-order-approval-flow-content__icon--approved{color:var(--color-positive-500)}.b2b-purchase-order-approval-flow-content__icon--rejected{color:var(--color-alert-500)}.b2b-purchase-order-history-log-content__list{list-style:none;margin:0;padding:0}.b2b-purchase-order-history-log-content__item{padding:var(--spacing-small) 0}.b2b-purchase-order-history-log-content__item:first-child{padding-top:0}.b2b-purchase-order-history-log-content__item:last-child{padding-bottom:0}.b2b-purchase-order-history-log-content__title{font:var(--type-body-1-emphasized-font);margin-bottom:var(--spacing-xsmall)}.b2b-purchase-order-history-log-content__description{color:var(--color-neutral-700)}.b2b-purchase-order-history-log-content__divider{border:none;border-top:var(--shape-border-width-1) solid var(--color-neutral-300);margin:0}.b2b-purchase-order-history-log-content__actions{margin-top:var(--spacing-small);display:flex;justify-content:center;align-items:center}`,{styleId:"b2b-purchase-order"});
|
|
5
|
+
import{jsx as r}from"@dropins/tools/preact-jsx-runtime.js";import{Render as l}from"@dropins/tools/lib.js";import{useState as p,useEffect as d}from"@dropins/tools/preact-hooks.js";import{UIProvider as n}from"@dropins/tools/components.js";import{events as i}from"@dropins/tools/event-bus.js";const u={customerPurchaseOrders:{containerTitle:"My purchase orders",noPurchaseOrders:"No purchase orders found."},companyPurchaseOrders:{containerTitle:"Company purchase orders",noPurchaseOrders:"No company purchase orders found."},requireApprovalPurchaseOrders:{containerTitle:"Requires my approval",noPurchaseOrders:"No purchase orders requiring my approval found."},approvalRulesList:{containerTitle:"Approval rules",emptyTitle:"No approval rules found",ariaLabel:{editRule:"Edit approval rule {{ruleName}}",deleteRule:"Delete approval rule {{ruleName}}",viewRule:"View approval rule {{ruleName}}"},buttons:{newRule:"Add New Rule"}},alertMessages:{header:{approve:"Approve Purchase Orders",reject:"Reject Purchase Orders",error:"Error"},description:{approve:"The selected purchase orders were approved successfully.",reject:"The selected purchase orders were rejected successfully.",error:"An error occurred while processing your request."}},purchaseOrdersTable:{noPurchaseOrders:{default:"No purchase orders found."},pagination:{status:"Items {{from}}-{{to}} of {{total}}",pageSizeLabel:{start:"Show"}},loading:"Loading purchase orders...",actionView:"View",actionEdit:"Edit",actionDelete:"Delete",rulesStatus:{enabled:"Enabled",disabled:"Disabled"},ruleTypes:{grand_total:"Grand Total",number_of_skus:"Number of SKUs",any_item:"Any Item",all_items:"All Items"},buttons:{expandedHidden:"Hide",expandedShow:"Show"},appliesToAll:"All",statusOrder:{order_placed:"Order placed",order_failed:"Order failed",pending:"Pending",approved:"Approved",rejected:"Rejected",canceled:"Canceled",order_in_progress:"Order in progress",approval_required:"Approval required",approved_pending_payment:"Approved pending Payment"},expandedRowLabels:{orderNumber:"Order Number:",createdDate:"Created Date:",updatedDate:"Updated Date:",total:"Total:",ruleType:"Rule Type:",appliesTo:"Applies To:",approver:"Approver:"},tableColumns:{poNumber:"PO #",orderNumber:"Order #",createdDate:"Created",updatedDate:"Updated",createdBy:"Created By",status:"Status",total:"Total",action:"Action",ruleName:"Rule Name",selectAllAriaLabel:"Select all not approved purchase orders"}},purchaseOrderConfirmation:{title:"Your Purchase Order has been submitted for approval.",messagePrefix:"Your Purchase Order request number is",messageSuffix:"A copy of this Purchase Order will be emailed to you shortly."},purchaseOrderStatus:{status:{pending:{title:"Pending Approval",message:"Purchase order is awaiting approval."},approval_required:{title:"Approval Required",message:"Purchase order requires approval before it can be processed."},approved:{title:"Approved",message:"Purchase order has been approved."},order_in_progress:{title:"Processing in Progress",message:"Purchase order is currently being processed."},order_placed:{title:"Placed",message:"Purchase order has been placed successfully."},order_failed:{title:"Failed",message:"Purchase order processing has failed."},rejected:{title:"Rejected",message:"Purchase order has been rejected."},canceled:{title:"Canceled",message:"Purchase order has been canceled."},approved_pending_payment:{title:"Approved - Pending Payment",message:"Purchase order has been approved and is awaiting payment."}},alertMessages:{success:{approval:"The purchase order was approved successfully.",reject:"The purchase order was rejected successfully.",cancel:"The purchase order was canceled successfully.",placeOrder:"The sales order was placed successfully."},errors:{approval:"An error occurred while approving the purchase order. Please try again.",reject:"An error occurred while rejecting the purchase order. Please try again.",cancel:"An error occurred while canceling the purchase order. Please try again.",placeOrder:"An error occurred while placing the sales order. Please try again."}},buttons:{approve:"Approve",reject:"Reject",cancel:"Cancel",placeOrder:"Place Order"}},approvalRuleForm:{headerText:"Purchase order approval rule",titleAppliesTo:"Applies To",titleRuleType:"Rule Type",titleRequiresApprovalRole:"Requires Approval From",fields:{enabled:"Rule Enabled",disabled:"Rule Disabled",inputRuleName:{floatingLabel:"Rule Name",placeholder:"Rule Name"},textAreaDescription:{label:"Rule Description"},appliesTo:{allUsers:"All Users",specificRoles:"Specific Roles"},ruleTypeOptions:{grandTotal:"Grand Total",shippingInclTax:"Shipping Cost",numberOfSkus:"Number of SKUs"},conditionOperators:{moreThan:"is more than",lessThan:"is less than",moreThanOrEqualTo:"is more than or equal to",lessThanOrEqualTo:"is less than or equal to"},inputQuantity:{floatingLabel:"Enter Amount",placeholder:"Enter Amount"},inputAmount:{floatingLabel:"Enter Amount",placeholder:"Enter Amount"},buttons:{cancel:"Cancel",save:"Save"}},errorsMessages:{required:"This field is required.",quantity:"Quantity must be greater than 0.",amount:"Amount must be greater than 0.",approvers:"Please select at least one approver."}},approvalRuleDetails:{containerTitle:"Approval rule details",buttons:{back:"Back to Rules List"},fields:{ruleName:"Rule Name:",status:"Status:",description:"Description:",appliesTo:"Applies To:",requiresApprovalFrom:"Requires Approval From:",ruleType:"Rule Type:",amount:{label:" amount "},statusView:{enabled:"Enabled",disabled:"Disabled"},condition:{attribute:{grand_total:"Grand Total",shipping_incl_tax:"Shipping Cost",number_of_skus:"Number of SKUs"},operator:{more_than:"Is more than",less_than:"Is less than",more_than_or_equal_to:"Is more than or equal to",less_than_or_equal_to:"Is less than or equal to"}}}},historyLog:{headerText:"Purchase order history log",statusTitle:"Status Changes",emptyText:"No history log available.",status:{place_order:"Order placed on {{date}}",auto_approve:"Auto approved on {{date}}",submit:"Submitted for approval on {{date}}"},buttons:{viewMore:"View More",viewLess:"View Less"},ariaLabel:{showMore:"Show more history items",showLess:"Show fewer history items"}},comments:{view:{headerText:"Purchase order comments",emptyText:"No comments available.",buttons:{viewMore:"View More",viewLess:"View Less"},ariaLabel:{showMore:"Show more comments",showLess:"Show fewer comments"}},add:{headerText:"Add purchase order comment",placeholder:"Add your comment",submit:"Add Comment",errorMessage:"Something went wrong while adding your comment. Please try again."}},approvalFlow:{headerText:"Purchase order approval flow",emptyText:"No approval flow is available for this purchase order.",ariaLabels:{icons:{approved:"Status approved",rejected:"Status rejected",pending:"Status pending approval"}}}},c={PurchaseOrders:u},h={default:c},m=({children:a})=>{const[s,o]=p("en_US");return d(()=>{const e=i.on("locale",t=>{o(t)},{eager:!0});return()=>{e==null||e.off()}},[]),r(n,{lang:s,langDefinitions:h,children:a})},T=new l(r(m,{}));export{T as render};
|
|
6
6
|
//# sourceMappingURL=render.js.map
|