@dropins/storefront-purchase-order 0.0.6-alpha3 → 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 g}from"@dropins/tools/preact-jsx-runtime.js";import{useState as o,useEffect as X,useCallback as d,useMemo as U}from"@dropins/tools/preact-hooks.js";import"@dropins/tools/event-bus.js";import{i as pe,g as ge}from"./pageSize.config.js";import{f as ee}from"./formatDate.js";import{Tag as fe,Price as Pe,ActionButton as re}from"@dropins/tools/components.js";import{r as me,a as be}from"./rejectPurchaseOrders.js";import{g as Re}from"./getPurchaseOrders.js";import{d as Oe,a as Ae}from"./PurchaseOrderHistoryLogContent.js";import{Text as f}from"@dropins/tools/i18n.js";var V=(i=>(i.CUSTOMER_PURCHASE_ORDERS="customerPurchaseOrders",i.COMPANY_PURCHASE_ORDERS="companyPurchaseOrders",i.CUSTOMER_APPROVAL_PURCHASE_ORDERS="customerApprovalPurchaseOrders",i))(V||{});const Ce=20,De=({view:i,initialPageSize:te,routePurchaseOrderDetails:C,setColumns:E,setRowsData:k,t:n,permissions:v,loadingPermissions:H})=>{const S=i===V.COMPANY_PURCHASE_ORDERS,c=i===V.CUSTOMER_APPROVAL_PURCHASE_ORDERS,[M,P]=o(!0),[l,y]=o([]),[h,j]=o([]),[m,se]=o(te),[ae,p]=o(!0),[ne,$]=o({currentPage:1,totalPages:1,totalCount:0}),[b,R]=o({heading:"",description:"",type:"success"}),[x,N]=o(new Set);X(()=>{if(b.heading||b.description){const r=setTimeout(()=>{R({heading:"",description:"",type:"success"})},7e3);return()=>clearTimeout(r)}},[b.heading,b.description]);const{currentPage:D,totalPages:ce,totalCount:oe}=ne,I=d(r=>{$(s=>({...s,currentPage:r})),N(new Set),P(!0)},[]),de=d(r=>{const s=r.target.value;se(e=>e.map(t=>({...t,selected:t.value===s}))),I(1),N(new Set),P(!0)},[I]),O=(v==null?void 0:v.isAdmin)??!1,z=U(()=>{let r={};return S&&(r={companyPurchaseOrders:!0}),c&&(r={myApprovals:!0}),r},[S,c]);X(()=>{var e;if(!M||H)return;p(!0);const r=(e=m==null?void 0:m.find(t=>t.selected))==null?void 0:e.value,s=parseInt(r??Ce.toString(),10);Re(z,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,A=(T=t==null?void 0:t.pageInfo)==null?void 0:T.totalPages,L=t==null?void 0:t.totalCount;$({currentPage:_>A?A||1:_,totalPages:A,totalCount:L}),j(u)}).catch(t=>{console.error("Failed to fetch purchase orders:",t),j([])}).finally(()=>{p(!1),P(!1)})},[M,D,m,z,H]);const B=d(r=>{const s=C==null?void 0:C(r);return pe(s??"")?s:"#"},[C]),G=d(r=>{N(s=>{const e=new Set(s);return e.has(r)?e.delete(r):e.add(r),e})},[]),q=d(r=>{const s=r.target.value,e=r.target.checked;y(t=>e?[...t,s]:t.filter(u=>u!==s))},[]),Q=d(r=>{const s=r.target.checked;y(()=>s?h.filter(e=>["PENDING","APPROVAL_REQUIRED"].includes(e.status)).map(e=>e.uid??""):[])},[h]),ie=d(()=>{p(!0),me(l).then(()=>{R({heading:n.alertHeaderReject,description:n.alertDescriptionReject,type:"success"}),y([]),P(!0)}).catch(r=>{R({heading:n.alertHeaderError,description:n.alertDescriptionError,type:"error"}),console.error(r)}).finally(()=>{p(!1)})},[l,n]),le=d(()=>{p(!0),be(l).then(()=>{R({heading:n.alertHeaderApprove,description:n.alertDescriptionApprove,type:"success"}),y([]),P(!0)}).catch(r=>{R({heading:n.alertHeaderError,description:n.alertDescriptionError,type:"error"}),console.error(r)}).finally(()=>{p(!1)})},[l,n]),ue=U(()=>{const r=S||c?Oe:Ae;return(E==null?void 0:E(r))??r.map(s=>s.key==="checkboxView"&&(O||c)?{key:s.key,label:a("input",{type:"checkbox",name:"selectAll",disabled:h.every(e=>!["PENDING","APPROVAL_REQUIRED"].includes(e.status)),onChange:Q}),ariaLabel:n.selectAllAriaLabel}:{...s,label:n[s.key]||s.label})},[n,O,S,c,E,h,Q]),he=U(()=>{const r=h.map((e,t)=>{var F,Y,Z,J,K,W;const u=e.number??"",_=x.has(t),A=`${((F=e.createdBy)==null?void 0:F.firstname)??""} ${((Y=e.createdBy)==null?void 0:Y.lastname)??""}`.trim(),L=a(re,{type:"button",onClick:()=>G(t),children:a(f,{id:`PurchaseOrders.purchaseOrdersTable.buttons.${_?"expandedHidden":"expandedShow"}`})}),w=a(fe,{className:`b2b-purchase-order-purchase-orders-table__status b2b-purchase-order-purchase-orders-table__status--${ge(e.status)}`,children:a(f,{id:`PurchaseOrders.purchaseOrdersTable.statusOrder.${e.status.toLowerCase()}`})}),T=g("div",{className:"b2b-purchase-order-purchase-orders-table__row-details",children:[g("div",{className:"b2b-purchase-order-purchase-orders-table__row-details-content",children:[g("p",{children:[a("span",{children:a(f,{id:"PurchaseOrders.purchaseOrdersTable.expandedRowLabels.orderNumber"})})," ",e.order.orderNumber]}),g("p",{children:[a("span",{children:a(f,{id:"PurchaseOrders.purchaseOrdersTable.expandedRowLabels.createdDate"})})," ",ee(e.createdAt)]}),g("p",{children:[a("span",{children:a(f,{id:"PurchaseOrders.purchaseOrdersTable.expandedRowLabels.updatedDate"})})," ",ee(e.updatedAt)]}),g("p",{children:[a("span",{children:a(f,{id:"PurchaseOrders.purchaseOrdersTable.expandedRowLabels.total"})})," ",a(Pe,{amount:(J=(Z=e==null?void 0:e.quote)==null?void 0:Z.grandTotal)==null?void 0:J.value,currency:(W=(K=e==null?void 0:e.quote)==null?void 0:K.grandTotal)==null?void 0:W.currency,weight:"normal"})]})]}),a("div",{className:"b2b-purchase-order-purchase-orders-table__row-details-action",children:a(re,{onClick:()=>{window.location.href=B(e.uid??"")},"aria-label":`View purchase order ${u}`,children:n.actionView})})]});return{...O||c?{checkboxView:a("input",{type:"checkbox",name:u,value:e.uid,checked:l.includes(e.uid),onChange:q,disabled:!["PENDING","APPROVAL_REQUIRED"].includes(e.status)})}:{},poNumber:u,status:w,createdBy:A,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,O,c,l,q,B,n.actionView,x,G]);return{tableConfig:{columns:ue,rows:he,expandedRows:x},paginationConfig:{currentPage:D,totalPages:ce,handlePageChange:I},pageSizeConfig:{pageSizeOptionsList:m,onChange:de},totalCount:oe,loading:ae,selectedOrderIds:l,handleRejectSelected:ie,handleApproveSelected:le,isAdmin:O,isRequireApprovalPOsView:c,alertMessageConfig:b}};export{V as E,De as u};
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 ae}from"@dropins/tools/lib.js";import{i as te,g as le,P as ne,d as oe}from"../chunks/pageSize.config.js";import{P as ie}from"../chunks/PurchaseOrdersHeader.js";import"../chunks/PurchaseOrderHistoryLogContent.js";import{ActionButton as V,Tag as ce,Button as de,Skeleton as ue,SkeletonRow as pe}from"@dropins/tools/components.js";import{useState as g,useCallback as v,useEffect as he,useMemo as W}from"@dropins/tools/preact-hooks.js";import"@dropins/tools/event-bus.js";import{u as be}from"../chunks/useCustomerRolePermissions.js";import{g as me,d as ge}from"../chunks/getPurchaseOrderApprovalRules.js";import{Text as w,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 X=[{key:"ruleName",label:"Rule Name"},{key:"status",label:"Status"},{key:"createdBy",label:"Created By"},{key:"action",label:"Actions"}],Pe=20,fe=({routeApprovalRuleDetails:u,routeCreateApprovalRule:p,routeEditApprovalRule:h,setColumns:b,setRowsData:P,initialPageSize:$,permissions:y,loadingPermissions:S,t:l})=>{const[m,i]=g([]),[f,n]=g(!0),[k,o]=g(!0),[c,A]=g($),[U,x]=g({currentPage:1,totalPages:1,totalCount:0}),[T,O]=g(new Set),{currentPage:R,totalPages:N,totalCount:Y}=U,I=v(s=>{x(t=>({...t,currentPage:s})),O(new Set),n(!0)},[]),ee=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})},[]);he(()=>{var e;if(!f||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);me(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)})},[f,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 te(e??"")?e:"#"},[p,h,u]),re=W(()=>(b==null?void 0:b(X))??X.map(s=>({...s,label:l[s.key]||s.label})),[b,l]),M=v((s,t)=>{s.preventDefault(),o(!0),ge(t).then(()=>{n(!0)}).finally(()=>{o(!1)})},[]),se=W(()=>{const s=m==null?void 0:m.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(w,{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(w,{id:"PurchaseOrders.purchaseOrdersTable.expandedRowLabels.ruleType"})})," ",r(w,{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(w,{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(w,{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(ce,{className:`b2b-purchase-order-purchase-orders-table__status b2b-purchase-order-purchase-orders-table__status--${le(e.status)}`,children:r(w,{id:`PurchaseOrders.purchaseOrdersTable.rulesStatus.${(Q=e.status)==null?void 0:Q.toLocaleLowerCase()}`})}),createdBy:e.createdBy,action:z,_rowDetails:E}});let t=s;if(P){const e=P(s);e!==void 0&&Array.isArray(e)&&(t=e)}return t},[m,T,y,P,l,_,M,H]);return{tableConfig:{columns:re,rows:se,expandedRows:T},paginationConfig:{currentPage:R,totalPages:N,handlePageChange:I},pageSizeConfig:{pageSizeOptionsList:c,onChange:ee},totalCount:Y,loading:k,handleCreateUrl:_}},Ae=({routeCreateApprovalRule:u,routeEditApprovalRule:p,routeApprovalRuleDetails:h,setColumns:b,setRowsData:P,className:$="",withHeader:y=!0,withWrapper:S=!0,skeletonRowCount:l=5,initialPageSize:m=oe})=>{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:f,loadingPermissions:n}=be(),{loading:k,tableConfig:o,paginationConfig:c,totalCount:A,pageSizeConfig:U,handleCreateUrl:x}=fe({routeCreateApprovalRule:u,routeEditApprovalRule:p,routeApprovalRuleDetails:h,setColumns:b,setRowsData:P,permissions:f,initialPageSize:m,loadingPermissions:n,t:i}),{isAdmin:T,permissions:{manageApprovalRules:O}}=f,R=T||O?r(de,{variant:"primary",onClick:()=>{window.location.href=x("","new")},"data-testid":"add-new-rule-button",children:i.addNewRule}):null,N=k||n?r(ue,{"data-testid":"approval-rules-skeleton",children:r(pe,{variant:"row",size:"small"})}):R;return L("div",{className:ae(["purchase-orders",$]),"data-testid":"purchase-orders-container",children:[y?r(ie,{headerText:i.headerText}):null,r(ne,{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{Ae as ApprovalRulesList,Ae as default};
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":"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"}
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/package.json CHANGED
@@ -1 +1 @@
1
- {"name": "@dropins/storefront-purchase-order", "version": "0.0.6-alpha3", "@dropins/tools": "1.6.0-beta2", "license": "SEE LICENSE IN LICENSE.md"}
1
+ {"name": "@dropins/storefront-purchase-order", "version": "0.0.6-alpha4", "@dropins/tools": "1.6.0-beta2", "license": "SEE LICENSE IN LICENSE.md"}