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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/api.js +784 -6
  3. package/api.js.map +1 -1
  4. package/chunks/components.js +4 -0
  5. package/chunks/components.js.map +1 -0
  6. package/containers/ApprovalRuleDetails.js +1 -1
  7. package/containers/ApprovalRuleDetails.js.map +1 -1
  8. package/containers/ApprovalRuleForm.js +1 -1
  9. package/containers/ApprovalRuleForm.js.map +1 -1
  10. package/containers/ApprovalRulesList.js +1 -1
  11. package/containers/ApprovalRulesList.js.map +1 -1
  12. package/containers/CompanyPurchaseOrders.js +1 -1
  13. package/containers/CompanyPurchaseOrders.js.map +1 -1
  14. package/containers/CustomerPurchaseOrders.js +1 -1
  15. package/containers/CustomerPurchaseOrders.js.map +1 -1
  16. package/containers/PurchaseOrderApprovalFlow.js +1 -1
  17. package/containers/PurchaseOrderApprovalFlow.js.map +1 -1
  18. package/containers/PurchaseOrderCommentForm.js +1 -1
  19. package/containers/PurchaseOrderCommentForm.js.map +1 -1
  20. package/containers/PurchaseOrderCommentsList.js +1 -1
  21. package/containers/PurchaseOrderCommentsList.js.map +1 -1
  22. package/containers/PurchaseOrderConfirmation.js +1 -1
  23. package/containers/PurchaseOrderConfirmation.js.map +1 -1
  24. package/containers/PurchaseOrderHistoryLog.js +1 -1
  25. package/containers/PurchaseOrderHistoryLog.js.map +1 -1
  26. package/containers/PurchaseOrderStatus.js +1 -1
  27. package/containers/PurchaseOrderStatus.js.map +1 -1
  28. package/containers/RequireApprovalPurchaseOrders.js +1 -1
  29. package/containers/RequireApprovalPurchaseOrders.js.map +1 -1
  30. package/package.json +1 -1
  31. package/render.js +2 -3
  32. package/render.js.map +1 -1
  33. package/chunks/FormLoader.js +0 -4
  34. package/chunks/FormLoader.js.map +0 -1
  35. package/chunks/PurchaseOrderHistoryLogContent.js +0 -4
  36. package/chunks/PurchaseOrderHistoryLogContent.js.map +0 -1
  37. package/chunks/PurchaseOrdersHeader.js +0 -4
  38. package/chunks/PurchaseOrdersHeader.js.map +0 -1
  39. package/chunks/PurchaseOrdersTableActions.js +0 -4
  40. package/chunks/PurchaseOrdersTableActions.js.map +0 -1
  41. package/chunks/addPurchaseOrderComment.js +0 -36
  42. package/chunks/addPurchaseOrderComment.js.map +0 -1
  43. package/chunks/case-converter.js +0 -4
  44. package/chunks/case-converter.js.map +0 -1
  45. package/chunks/currencyInfo.js +0 -124
  46. package/chunks/currencyInfo.js.map +0 -1
  47. package/chunks/fetch-error.js +0 -4
  48. package/chunks/fetch-error.js.map +0 -1
  49. package/chunks/formatDate.js +0 -4
  50. package/chunks/formatDate.js.map +0 -1
  51. package/chunks/getPurchaseOrderApprovalRule.js +0 -45
  52. package/chunks/getPurchaseOrderApprovalRule.js.map +0 -1
  53. package/chunks/getPurchaseOrderApprovalRules.js +0 -75
  54. package/chunks/getPurchaseOrderApprovalRules.js.map +0 -1
  55. package/chunks/getPurchaseOrders.js +0 -29
  56. package/chunks/getPurchaseOrders.js.map +0 -1
  57. package/chunks/initialize.js +0 -13
  58. package/chunks/initialize.js.map +0 -1
  59. package/chunks/pageSize.config.js +0 -4
  60. package/chunks/pageSize.config.js.map +0 -1
  61. package/chunks/permissions.js +0 -4
  62. package/chunks/permissions.js.map +0 -1
  63. package/chunks/placeOrderForPurchaseOrder.js +0 -39
  64. package/chunks/placeOrderForPurchaseOrder.js.map +0 -1
  65. package/chunks/rejectPurchaseOrders.js +0 -30
  66. package/chunks/rejectPurchaseOrders.js.map +0 -1
  67. package/chunks/transform-purchase-order-approval-rule.js +0 -4
  68. package/chunks/transform-purchase-order-approval-rule.js.map +0 -1
  69. package/chunks/transform-purchase-order.js +0 -423
  70. package/chunks/transform-purchase-order.js.map +0 -1
  71. package/chunks/useCustomerRolePermissions.js +0 -4
  72. package/chunks/useCustomerRolePermissions.js.map +0 -1
  73. package/chunks/usePurchaseOrderData.js +0 -4
  74. package/chunks/usePurchaseOrderData.js.map +0 -1
  75. package/chunks/usePurchaseOrders.js +0 -4
  76. package/chunks/usePurchaseOrders.js.map +0 -1
@@ -0,0 +1,4 @@
1
+ /*! Copyright 2026 Adobe
2
+ All Rights Reserved. */
3
+ import{classes as x,Slot as He}from"@dropins/tools/lib.js";import{useText as ae,Text as y}from"@dropins/tools/i18n.js";import{jsxs as u,Fragment as _e,jsx as e}from"@dropins/tools/preact-jsx-runtime.js";import{InLineAlert as Le,Table as $e,Pagination as je,Picker as he,Card as ke,Header as Ge,Button as H,Tag as Me,Price as ze,ActionButton as ne,PriceRange as qe,Checkbox as We,Input as Ce,TextArea as Ie,RadioButton as Qe,MultiSelect as Ae}from"@dropins/tools/components.js";import{events as z}from"@dropins/tools/event-bus.js";import{g as Ze,getPurchaseOrders as Ke,i as Fe,rejectPurchaseOrders as xe,approvePurchaseOrders as Ve,a as De,f as be,PO_PERMISSIONS as Z,I as Je,c as Ye,b as Xe,d as er,currencyInfo as rr,getPurchaseOrderApprovalRuleMetadata as ar,getPurchaseOrderApprovalRule as Ue,t as sr,V as fe,R as tr,v as me,e as lr,updatePurchaseOrderApprovalRule as or,createPurchaseOrderApprovalRule as nr,u as ve,h as cr,getPurchaseOrderApprovalRules as ir,deletePurchaseOrderApprovalRule as dr,cancelPurchaseOrders as ur,placeOrderForPurchaseOrder as pr,addPurchaseOrderComment as hr}from"../api.js";import{useState as C,useEffect as q,useCallback as k,useMemo as B,useReducer as mr}from"@dropins/tools/preact-hooks.js";import{Fragment as Oe}from"@dropins/tools/preact.js";import*as K from"@dropins/tools/preact-compat.js";const Dr=({pageSizeConfig:r,totalCount:a=0,columns:s=[],rows:c=[],paginationConfig:t,alertMessageConfig:n={heading:"",description:"",type:"success"},loading:i=!1,className:l="",variant:o="secondary",skeletonRowCount:f=10,emptyTitle:g,header:E,footer:_,withWrapper:O,expandedRows:T})=>{var v;const P=ae({title:"PurchaseOrders.purchaseOrdersTable.noPurchaseOrders.default"}),{heading:d,description:M,type:L}=n,{currentPage:p,totalPages:R,handlePageChange:V}=t,{pageSizeOptionsList:A,onChange:I}=r,D=A==null?void 0:A.find(F=>F.selected),$=D&&D.value!==void 0?Number(D.value):10,{from:W,to:Q,total:ce}=Ze(p,$,a),j=!i&&c.length===0,se=u(_e,{children:[d||M?e(Le,{heading:d,description:M,type:L}):null,E?e("div",{className:"purchase-orders-table__header",children:E}):null,e($e,{className:"purchase-orders-table__table-wrapper",mobileLayout:"stacked",columns:s,rowData:c,expandedRows:T,loading:i,skeletonRowCount:+f}),j&&e("div",{className:"purchase-orders-table__empty-state",role:"status","aria-live":"polite",children:e("p",{children:g||P.title})}),a>0?u("div",{className:"purchase-orders-table__pagination-wrapper",children:[e("div",{className:"purchase-orders-table__pagination-counter",children:e(y,{id:"PurchaseOrders.purchaseOrdersTable.pagination.status",fields:{from:W,to:Q,total:ce}})}),R>1&&e(je,{className:x(["purchase-orders-table__pagination",["purchase-orders-table__pagination--loading",i]]),currentPage:p,totalPages:R,onChange:V}),a>0&&A.length?u("div",{className:"purchase-orders-table__pagination-page-size",children:[e(y,{id:"PurchaseOrders.purchaseOrdersTable.pagination.pageSizeLabel.start"}),e(he,{disabled:i,handleSelect:I,options:A,value:((v=A==null?void 0:A.find(F=>F.selected))==null?void 0:v.value)||""})]}):null]}):null,_?e("div",{className:"purchase-orders-table__footer",children:_}):null]});return O?e(ke,{variant:o,"data-testid":"purchaseOrdersTable",className:x(["b2b-purchase-order-purchase-orders-table",["b2b-purchase-order-purchase-orders-table--empty-state",j],l]),children:se}):e("div",{"data-testid":"purchaseOrdersTable",className:x(["b2b-purchase-order-purchase-orders-table",["b2b-purchase-order-purchase-orders-table--empty-state",j],l]),children:se})},br=({headerText:r,divider:a=!1})=>e(Ge,{title:r,divider:a,className:x(["purchase-orders-header",["purchase-orders-header--with-divider",a]]),"data-testid":"purchase-orders-header"}),Ur=({loading:r,selectedCount:a,className:s,handleRejectSelected:c,handleApproveSelected:t})=>u("div",{className:x(["b2b-purchase-order-purchase-orders-table-actions",s]),children:[u("div",{children:["Selected ",a]}),u("div",{className:"b2b-purchase-order-purchase-orders-table-actions__buttons",children:[e(H,{variant:"secondary",onClick:c,disabled:r||a===0,children:"Reject selected"}),e(H,{variant:"primary",onClick:t,disabled:r||a===0,children:"Approve selected"})]})]});var ge=(r=>(r.CUSTOMER_PURCHASE_ORDERS="customerPurchaseOrders",r.COMPANY_PURCHASE_ORDERS="companyPurchaseOrders",r.CUSTOMER_APPROVAL_PURCHASE_ORDERS="customerApprovalPurchaseOrders",r))(ge||{});const Br=[{text:"10",value:"10",selected:!1},{text:"20",value:"20",selected:!0},{text:"30",value:"30",selected:!1},{text:"50",value:"50",selected:!1}],Be=[{key:"poNumber",label:"PO #"},{key:"status",label:"Status"},{key:"createdBy",label:"Created By"},{key:"action",label:"Actions"}],Se=[{key:"ruleName",label:"Rule Name"},{key:"status",label:"Status"},{key:"createdBy",label:"Created By"},{key:"action",label:"Actions"}],fr=[{key:"checkboxView",label:""},...Be],vr=20,Hr=({view:r,initialPageSize:a,routePurchaseOrderDetails:s,setColumns:c,setRowsData:t,t:n,permissions:i,loadingPermissions:l})=>{const o=r===ge.COMPANY_PURCHASE_ORDERS,f=r===ge.CUSTOMER_APPROVAL_PURCHASE_ORDERS,[g,E]=C(!0),[_,O]=C([]),[T,P]=C([]),[d,M]=C(a),[L,p]=C(!0),[R,V]=C({currentPage:1,totalPages:1,totalCount:0}),[A,I]=C({heading:"",description:"",type:"success"}),[D,$]=C(new Set);q(()=>{const b=z.on("purchase-order/refresh",()=>{E(!0)},{eager:!0});return()=>{b==null||b.off()}},[]),q(()=>{if(A.heading||A.description){const b=setTimeout(()=>{I({heading:"",description:"",type:"success"})},7e3);return()=>clearTimeout(b)}},[A.heading,A.description]);const{currentPage:W,totalPages:Q,totalCount:ce}=R,j=k(b=>{V(S=>({...S,currentPage:b})),$(new Set),E(!0)},[]),se=k(b=>{const S=b.target.value;M(m=>m.map(w=>({...w,selected:w.value===S}))),j(1),$(new Set),E(!0)},[j]),v=(i==null?void 0:i.isAdmin)??!1,F=B(()=>{let b={};return o&&(b={companyPurchaseOrders:!0}),f&&(b={myApprovals:!0}),b},[o,f]);q(()=>{var m;if(!g||l)return;p(!0);const b=(m=d==null?void 0:d.find(w=>w.selected))==null?void 0:m.value,S=parseInt(b??vr.toString(),10);Ke(F,S,W).then(w=>{var de,ue;const G=(w==null?void 0:w.purchaseOrderItems)??[],X=(de=w==null?void 0:w.pageInfo)==null?void 0:de.currentPage,U=(ue=w==null?void 0:w.pageInfo)==null?void 0:ue.totalPages,ee=w==null?void 0:w.totalCount;V({currentPage:X>U?U||1:X,totalPages:U,totalCount:ee}),P(G)}).catch(w=>{console.error("Failed to fetch purchase orders:",w),P([])}).finally(()=>{p(!1),E(!1)})},[g,W,d,F,l]);const h=k(b=>{const S=s==null?void 0:s(b);return Fe(S??"")?S:"#"},[s]),N=k(b=>{$(S=>{const m=new Set(S);return m.has(b)?m.delete(b):m.add(b),m})},[]),te=k(b=>{const S=b.target.value,m=b.target.checked;O(w=>m?[...w,S]:w.filter(G=>G!==S))},[]),J=k(b=>{const S=b.target.checked;O(()=>S?T.filter(m=>["PENDING","APPROVAL_REQUIRED"].includes(m.status)).map(m=>m.uid??""):[])},[T]),Y=k(()=>{p(!0),xe(_).then(()=>{I({heading:n.alertHeaderReject,description:n.alertDescriptionReject,type:"success"}),O([]),z.emit("purchase-order/refresh",!0)}).catch(b=>{I({heading:n.alertHeaderError,description:n.alertDescriptionError,type:"error"}),console.error(b)}).finally(()=>{p(!1)})},[_,n]),ie=k(()=>{p(!0),Ve(_).then(()=>{I({heading:n.alertHeaderApprove,description:n.alertDescriptionApprove,type:"success"}),O([]),z.emit("purchase-order/refresh",!0)}).catch(b=>{I({heading:n.alertHeaderError,description:n.alertDescriptionError,type:"error"}),console.error(b)}).finally(()=>{p(!1)})},[_,n]),le=B(()=>{const b=o||f?fr:Be;return(c==null?void 0:c(b))??b.map(S=>S.key==="checkboxView"&&(v||f)?{key:S.key,label:e("input",{type:"checkbox",name:"selectAll",disabled:T.every(m=>!["PENDING","APPROVAL_REQUIRED"].includes(m.status)),onChange:J}),ariaLabel:n.selectAllAriaLabel}:{...S,label:n[S.key]||S.label})},[n,v,o,f,c,T,J]),oe=B(()=>{const b=T.map((m,w)=>{var Pe,ye,Ee,Re,Te,we;const G=m.number??"",X=D.has(w),U=`${((Pe=m.createdBy)==null?void 0:Pe.firstname)??""} ${((ye=m.createdBy)==null?void 0:ye.lastname)??""}`.trim(),ee=e(ne,{type:"button",onClick:()=>N(w),children:e(y,{id:`PurchaseOrders.purchaseOrdersTable.buttons.${X?"expandedHidden":"expandedShow"}`})}),de=e(Me,{className:`b2b-purchase-order-purchase-orders-table__status b2b-purchase-order-purchase-orders-table__status--${De(m.status)}`,children:e(y,{id:`PurchaseOrders.purchaseOrdersTable.statusOrder.${m.status.toLowerCase()}`})}),ue=u("div",{className:"b2b-purchase-order-purchase-orders-table__row-details",children:[u("div",{className:"b2b-purchase-order-purchase-orders-table__row-details-content",children:[u("p",{children:[e("span",{children:e(y,{id:"PurchaseOrders.purchaseOrdersTable.expandedRowLabels.orderNumber"})})," ",m.order.orderNumber]}),u("p",{children:[e("span",{children:e(y,{id:"PurchaseOrders.purchaseOrdersTable.expandedRowLabels.createdDate"})})," ",be(m.createdAt)]}),u("p",{children:[e("span",{children:e(y,{id:"PurchaseOrders.purchaseOrdersTable.expandedRowLabels.updatedDate"})})," ",be(m.updatedAt)]}),u("p",{children:[e("span",{children:e(y,{id:"PurchaseOrders.purchaseOrdersTable.expandedRowLabels.total"})})," ",e(ze,{amount:(Re=(Ee=m==null?void 0:m.quote)==null?void 0:Ee.grandTotal)==null?void 0:Re.value,currency:(we=(Te=m==null?void 0:m.quote)==null?void 0:Te.grandTotal)==null?void 0:we.currency,weight:"normal"})]})]}),e("div",{className:"b2b-purchase-order-purchase-orders-table__row-details-action",children:e(ne,{onClick:()=>{window.location.href=h(m.uid??"")},"aria-label":`View purchase order ${G}`,children:n.actionView})})]});return{...v||f?{checkboxView:e("input",{type:"checkbox",name:G,value:m.uid,checked:_.includes(m.uid),onChange:te,disabled:!["PENDING","APPROVAL_REQUIRED"].includes(m.status)})}:{},poNumber:G,status:de,createdBy:U,action:ee,_rowDetails:ue}});let S=b;if(t){const m=t(b);m!==void 0&&Array.isArray(m)&&(S=m)}return S},[T,t,v,f,_,te,h,n.actionView,D,N]);return{tableConfig:{columns:le,rows:oe,expandedRows:D},paginationConfig:{currentPage:W,totalPages:Q,handlePageChange:j},pageSizeConfig:{pageSizeOptionsList:d,onChange:se},totalCount:ce,loading:L,selectedOrderIds:_,handleRejectSelected:Y,handleApproveSelected:ie,isAdmin:v,isRequireApprovalPOsView:f,alertMessageConfig:A}},gr=r=>{if(!r)return{isAdmin:!1,purchaseOrderEnabled:!1,role:{id:"",name:""},permissions:{purchaseOrderAll:!1,viewPurchaseOrders:!1,viewPurchaseOrdersForSubordinates:!1,viewPurchaseOrdersForCompany:!1,autoApprovePurchaseOrder:!1,superApprovePurchaseOrder:!1,viewApprovalRules:!1,manageApprovalRules:!1}};const a=r.admin===!0,s=i=>{const l=r[i];return l===!1?!1:l===!0?!0:a},c={purchaseOrderAll:s(Z.PO_ALL),viewPurchaseOrders:s(Z.VIEW_CUSTOMER),viewPurchaseOrdersForSubordinates:s(Z.VIEW_SUBORDINATES),viewPurchaseOrdersForCompany:s(Z.VIEW_COMPANY),autoApprovePurchaseOrder:s(Z.AUTO_APPROVE),superApprovePurchaseOrder:s(Z.SUPER_APPROVE),viewApprovalRules:s(Z.VIEW_RULES),manageApprovalRules:s(Z.MANAGE_RULES)},n=Object.values(r).some(i=>i===!1)?!1:Object.values(c).some(i=>i===!0);return{isAdmin:a,purchaseOrderEnabled:n,role:{id:"",name:a?"Company Administrator":""},permissions:c}},_r=()=>{const r=z.lastPayload("auth/permissions"),[a,s]=C(r);q(()=>{const n=z.on("auth/permissions",i=>{s(i)},{eager:!0});return()=>{n==null||n.off()}},[]);const c=!a;return{permissions:B(()=>gr(a),[a]),loadingPermissions:c}};function Or(r,a){switch(a.type){case"SET_LOADING":return{...r,isLoading:a.payload};case"SET_SUBMIT_ERROR":return{...r,submitError:a.payload};case"SET_FORM_VALUES":return{...r,formValues:a.payload};case"SET_AVAILABLE_APPLIES_TO":return{...r,availableAppliesTo:a.payload};case"SET_AVAILABLE_APPROVERS":return{...r,availableRequiresApprovalFrom:a.payload};case"SET_ERRORS":return{...r,errors:a.payload};case"SET_TOUCHED":return{...r,touched:a.payload};case"SET_CURRENCIES":return{...r,currencyCodesList:a.payload};case"UPDATE_FIELD":{const{key:s,value:c}=a.payload,t=cr(r.formValues,s,c),n={...r.touched,[s]:!0};s==="roleType"&&c==="specific_roles"&&(n.appliesTo=!0);const i=me(t),l=ve(i,r.errors,n);return{...r,formValues:t,touched:n,errors:l}}case"TOUCH_FIELD":{const s=a.payload,c={...r.touched,[s]:!0},t=me(r.formValues),n=ve(t,r.errors,c);return{...r,touched:c,errors:n}}case"MARK_FIELDS_TOUCHED":{const s={...r.touched,...a.payload},c=me(r.formValues),t=ve(c,r.errors,s);return{...r,touched:s,errors:t}}default:return r}}const Pr=({t:r,approvalRuleID:a,routeApprovalRulesList:s,onSubmit:c,onChange:t,permissions:n,loadingPermissions:i})=>{const[l,o]=mr(Or,Je),f=B(()=>Ye(r),[r]),g=B(()=>Xe(r),[r]),E=B(()=>er(r),[r]);q(()=>{o({type:"SET_LOADING",payload:!0}),rr().then(d=>{o({type:"SET_CURRENCIES",payload:d.availableCurrencyCodes})}).catch(d=>{console.error("Failed to fetch currencies:",d)}),ar().then(d=>{const{availableAppliesTo:M,availableRequiresApprovalFrom:L}=d;return o({type:"SET_AVAILABLE_APPLIES_TO",payload:M}),o({type:"SET_AVAILABLE_APPROVERS",payload:L}),a?Ue(a):null}).then(d=>{d&&o({type:"SET_FORM_VALUES",payload:sr(d)}),o({type:"SET_SUBMIT_ERROR",payload:null})}).catch(d=>{console.error("Failed to fetch data:",d),o({type:"SET_SUBMIT_ERROR",payload:(d==null?void 0:d.message)||fe.FAILED_TO_LOAD})}).finally(()=>{o({type:"SET_LOADING",payload:!1})})},[a]);const _=k((d,M)=>{o({type:"UPDATE_FIELD",payload:{key:d,value:M}}),t&&t({...l.formValues,[d]:M})},[t,l.formValues]),O=k(d=>{o({type:"TOUCH_FIELD",payload:d}),t&&t(l.formValues)},[t,l.formValues]),T=k(async()=>{o({type:"SET_LOADING",payload:!0}),o({type:"SET_SUBMIT_ERROR",payload:null}),o({type:"MARK_FIELDS_TOUCHED",payload:tr});const d=me(l.formValues);if(Object.keys(d).length>0){o({type:"SET_ERRORS",payload:d}),o({type:"SET_LOADING",payload:!1});return}const M=lr(l.formValues);try{let L;if(a?L=await or({uid:a,...M}):L=await nr(M),!L.uid){o({type:"SET_SUBMIT_ERROR",payload:fe.FAILED_TO_CREATE}),o({type:"SET_LOADING",payload:!1});return}c&&c(l.formValues),s?window.location.href=s():o({type:"SET_LOADING",payload:!1})}catch(L){console.error("Failed to save approval rule:",L),o({type:"SET_SUBMIT_ERROR",payload:(L==null?void 0:L.message)||fe.FAILED_TO_CREATE}),o({type:"SET_LOADING",payload:!1})}},[l.formValues,s,a,c]),P=B(()=>!!(l.isLoading||i||!(n!=null&&n.permissions.viewApprovalRules)&&!(n!=null&&n.permissions.manageApprovalRules)),[l.isLoading,i,n]);return{availableAppliesTo:l.availableAppliesTo,availableRequiresApprovalFrom:l.availableRequiresApprovalFrom,formValues:l.formValues,ruleTypeOptions:f,conditionOperators:g,currencies:l.currencyCodesList,appliesToOptions:E,handleSetFormValues:_,handleSubmit:T,handleFieldTouch:O,errors:l.errors,touched:l.touched,isLoading:l.isLoading,formLoading:P,submitError:l.submitError}},$r=({approvalRuleID:r,routeApprovalRulesList:a})=>{const[s,c]=C(!0),[t,n]=C(null);q(()=>{r&&(c(!0),Ue(r).then(o=>{o.uid&&n(o)}).catch(()=>{n(null)}).finally(()=>{c(!1)}))},[r]);const i=B(()=>{if(!t||s)return[];const{name:o,status:f,description:g,appliesToRoles:E,approverRoles:_,condition:O}=t;return[{label:e(y,{id:"PurchaseOrders.approvalRuleDetails.fields.ruleName"}),value:o},{label:e(y,{id:"PurchaseOrders.approvalRuleDetails.fields.status"}),value:e(y,{id:`PurchaseOrders.approvalRuleDetails.fields.statusView.${f.toLocaleLowerCase()}`})},{label:e(y,{id:"PurchaseOrders.approvalRuleDetails.fields.description"}),value:g},{label:e(y,{id:"PurchaseOrders.approvalRuleDetails.fields.appliesTo"}),value:e("ul",{children:E.map(T=>e("li",{children:T.name},T.id))})},{label:e(y,{id:"PurchaseOrders.approvalRuleDetails.fields.ruleType"}),value:e(y,{id:`PurchaseOrders.approvalRuleDetails.fields.condition.attribute.${O.attribute.toLocaleLowerCase()}`})},{label:u(_e,{children:[e(y,{id:`PurchaseOrders.approvalRuleDetails.fields.condition.attribute.${O.attribute.toLocaleLowerCase()}`}),":"]}),value:u("div",{children:[e(y,{id:`PurchaseOrders.approvalRuleDetails.fields.condition.operator.${O.operator.toLocaleLowerCase()}`}),e(y,{id:"PurchaseOrders.approvalRuleDetails.fields.amount.label"}),e(qe,{amount:O.amount.value,currency:O.amount.currency})]})},{label:e(y,{id:"PurchaseOrders.approvalRuleDetails.fields.requiresApprovalFrom"}),value:e("ul",{children:_.map(T=>e("li",{children:T.name},T.id))})}]},[t,s]);return{handleRedirectToList:()=>{window.location.href=(a==null?void 0:a())??""},loading:s,formValues:i}},yr=20,jr=({routeApprovalRuleDetails:r,routeCreateApprovalRule:a,routeEditApprovalRule:s,setColumns:c,setRowsData:t,initialPageSize:n,permissions:i,loadingPermissions:l,t:o})=>{const[f,g]=C([]),[E,_]=C(!0),[O,T]=C(!0),[P,d]=C(n),[M,L]=C({currentPage:1,totalPages:1,totalCount:0}),[p,R]=C(new Set);q(()=>{const v=z.on("purchase-order/refresh",()=>{_(!0)},{eager:!0});return()=>{v==null||v.off()}},[]);const{currentPage:V,totalPages:A,totalCount:I}=M,D=k(v=>{L(F=>({...F,currentPage:v})),R(new Set),_(!0)},[]),$=k(v=>{const F=v.target.value;d(h=>h.map(N=>({...N,selected:N.value===F}))),D(1),R(new Set),_(!0)},[D]),W=k(v=>{R(F=>{const h=new Set(F);return h.has(v)?h.delete(v):h.add(v),h})},[]);q(()=>{var h;if(!E||l)return;T(!0);const v=(h=P==null?void 0:P.find(N=>N.selected))==null?void 0:h.value,F=parseInt(v??yr.toString(),10);ir(V,F).then(N=>{var le,oe;const te=(N==null?void 0:N.items)??[],J=(le=N==null?void 0:N.pageInfo)==null?void 0:le.currentPage,Y=(oe=N==null?void 0:N.pageInfo)==null?void 0:oe.totalPages,ie=N==null?void 0:N.totalCount;L({currentPage:J>Y?Y||1:J,totalPages:Y,totalCount:ie}),g(te)}).catch(N=>{console.error("Error fetching approval rules:",N),g([])}).finally(()=>{T(!1),_(!1)})},[E,V,P,A,l]);const Q=k((v,F)=>{let h="";switch(F){case"new":{h=a==null?void 0:a(v);break}case"edit":{h=s==null?void 0:s(v);break}case"view":{h=r==null?void 0:r(v);break}}return Fe(h??"")?h:"#"},[a,s,r]),ce=B(()=>(c==null?void 0:c(Se))??Se.map(v=>({...v,label:o[v.key]||v.label})),[c,o]),j=k((v,F)=>{v.preventDefault(),T(!0),dr(F).then(()=>{z.emit("purchase-order/refresh",!0)}).finally(()=>{R(new Set)})},[]),se=B(()=>{const v=f==null?void 0:f.map((h,N)=>{var b,S,m,w,G,X;const{isAdmin:te,permissions:{manageApprovalRules:J}}=i,Y=p.has(N),ie=te||J,le=e(ne,{onClick:()=>W(N),children:e(y,{id:`PurchaseOrders.purchaseOrdersTable.buttons.${Y?"expandedHidden":"expandedShow"}`})}),oe=u("div",{className:"b2b-purchase-order-purchase-orders-table__row-details",children:[u("div",{className:"b2b-purchase-order-purchase-orders-table__row-details-content",children:[u("p",{children:[e("span",{children:e(y,{id:"PurchaseOrders.purchaseOrdersTable.expandedRowLabels.ruleType"})})," ",e(y,{id:`PurchaseOrders.purchaseOrdersTable.ruleTypes.${(S=(b=h.condition)==null?void 0:b.attribute)==null?void 0:S.toLocaleLowerCase()}`})]}),e("p",{children:e("span",{children:e(y,{id:"PurchaseOrders.purchaseOrdersTable.expandedRowLabels.appliesTo"})})}),e("ul",{children:((m=h==null?void 0:h.appliesToRoles)==null?void 0:m.length)<=0?e("li",{children:o.appliesToAll}):(w=h==null?void 0:h.appliesToRoles)==null?void 0:w.map((U,ee)=>e("li",{children:U.name},ee))}),e("p",{children:e("span",{children:e(y,{id:"PurchaseOrders.purchaseOrdersTable.expandedRowLabels.approver"})})}),e("ul",{children:(G=h==null?void 0:h.approverRoles)==null?void 0:G.map((U,ee)=>e("li",{children:U==null?void 0:U.name},ee))})]}),ie?e("div",{className:"b2b-purchase-order-purchase-orders-table__row-details-action",children:u("div",{className:"b2b-purchase-order-purchase-orders-table__row-details-action-inner-wrapper",children:[e(ne,{onClick:()=>{window.location.href=Q(h.uid,"edit")},"aria-label":o.ariaLabelEditRule.replace("{{ruleName}}",h.name),"data-testid":`edit-approval-rule-${h.uid}`,children:o.actionEdit}),e(ne,{onClick:U=>j(U,h.uid),"aria-label":o.ariaLabelDeleteRule.replace("{{ruleName}}",h.name),"data-testid":`delete-approval-rule-${h.uid}`,children:o.actionDelete})]})}):e("div",{className:"b2b-purchase-order-purchase-orders-table__row-details-action",children:e(ne,{onClick:()=>{window.location.href=Q(h.uid,"view")},"aria-label":o.ariaLabelViewRule.replace("{{ruleName}}",h.name),"data-testid":`view-approval-rule-${h.uid}`,children:o.actionView})})]});return{ruleName:h.name,status:e(Me,{className:`b2b-purchase-order-purchase-orders-table__status b2b-purchase-order-purchase-orders-table__status--${De(h.status)}`,children:e(y,{id:`PurchaseOrders.purchaseOrdersTable.rulesStatus.${(X=h.status)==null?void 0:X.toLocaleLowerCase()}`})}),createdBy:h.createdBy,action:le,_rowDetails:oe}});let F=v;if(t){const h=t(v);h!==void 0&&Array.isArray(h)&&(F=h)}return F},[f,p,i,t,o,Q,j,W]);return{tableConfig:{columns:ce,rows:se,expandedRows:p},paginationConfig:{currentPage:V,totalPages:A,handlePageChange:D},pageSizeConfig:{pageSizeOptionsList:P,onChange:$},totalCount:I,loading:O,handleCreateUrl:Q}},Er=()=>{const[r,a]=C(!0),[s,c]=C(null);return q(()=>{const t=z.on("purchase-order/data",n=>{n!=null&&n.uid&&c(n),a(!1)},{eager:!0});return()=>{t==null||t.off()}},[]),{poDataLoading:r,purchaseOrderData:s}},Gr=()=>{const{poDataLoading:r,purchaseOrderData:a}=Er(),s=ae({approvalSuccessMessage:"PurchaseOrders.purchaseOrderStatus.alertMessages.success.approval",rejectSuccessMessage:"PurchaseOrders.purchaseOrderStatus.alertMessages.success.reject",cancelSuccessMessage:"PurchaseOrders.purchaseOrderStatus.alertMessages.success.cancel",placeOrderSuccessMessage:"PurchaseOrders.purchaseOrderStatus.alertMessages.success.placeOrder",approvalErrorMessage:"PurchaseOrders.purchaseOrderStatus.alertMessages.errors.approval",rejectErrorMessage:"PurchaseOrders.purchaseOrderStatus.alertMessages.errors.reject",cancelErrorMessage:"PurchaseOrders.purchaseOrderStatus.alertMessages.errors.cancel",placeOrderErrorMessage:"PurchaseOrders.purchaseOrderStatus.alertMessages.errors.placeOrder"}),c=(a==null?void 0:a.uid)??null,t=(a==null?void 0:a.status)??"PENDING",n=(a==null?void 0:a.availableActions)??[],[i,l]=C("success"),[o,f]=C(""),[g,E]=C(!1),[_,O]=C(!0),T=()=>{O(!0)},P=k((V,A)=>{let I="";if(V){switch(A){case"APPROVE":I=s.approvalSuccessMessage;break;case"REJECT":I=s.rejectSuccessMessage;break;case"CANCEL":I=s.cancelSuccessMessage;break;case"PLACE_ORDER":I=s.placeOrderSuccessMessage;break}l("success")}else{switch(A){case"APPROVE":I=s.approvalErrorMessage;break;case"REJECT":I=s.rejectErrorMessage;break;case"CANCEL":I=s.cancelErrorMessage;break;case"PLACE_ORDER":I=s.placeOrderErrorMessage;break}l("error")}f(I),O(!1)},[s]),d=k(async(V,A)=>{if(c){E(!0);try{await V(c),P(!0,A)}catch{P(!1,A)}finally{E(!1),z.emit("purchase-order/refresh",!0)}}},[c,P]),M=k(()=>d(Ve,"APPROVE"),[d]),L=k(()=>d(xe,"REJECT"),[d]),p=k(()=>d(ur,"CANCEL"),[d]),R=k(()=>d(pr,"PLACE_ORDER"),[d]);return{poId:c,status:t,availableActions:n,alertType:i,loading:g,poDataLoading:r,isDismissed:_,alertMessage:o,handleOnDismiss:T,handleApprove:M,handleReject:L,handleCancel:p,handlePlaceOrder:R}},pe=({touched:r=!1,error:a,className:s="error-message"})=>!r||!a?null:e("span",{className:s,children:e(y,{id:a})}),Rr=({availableRequiresApprovalFrom:r,conditionOperators:a,availableAppliesTo:s,appliesToOptions:c,ruleTypeOptions:t,currencies:n,formValues:i,errors:l,touched:o,isLoading:f,permissions:g,handleSubmit:E,handleFieldTouch:_,handleSetFormValues:O,routeApprovalRulesList:T,t:P})=>{var M,L;const d=f||!((M=g==null?void 0:g.permissions)!=null&&M.viewApprovalRules);return u("form",{"data-testid":"approval-rule-form",children:[e(We,{"data-testid":"status-toggle",className:"b2b-purchase-order-approval-rule-form__toggle",disabled:d,name:"status",label:P.formEnabled,checked:i.status==="ENABLED",onChange:p=>{const R=p.target.checked;O("status",R)}}),u("div",{"data-testid":"name-input-container",children:[e(Ce,{"data-testid":"name-input",className:"b2b-purchase-order-approval-rule-form__name-input",disabled:d,name:"name",floatingLabel:P.inputRuleNameFloatingLabel,placeholder:P.inputRuleNamePlaceholder,value:i.name,error:!!(o.name&&l.name),onChange:p=>{const R=p.target.value;O("name",R)},onBlur:()=>_("name")}),e(pe,{touched:o.name,error:l.name})]}),e(Ie,{"data-testid":"description-textarea",className:"b2b-purchase-order-approval-rule-form__description",disabled:d,name:"description",label:P.textAreaDescriptionLabel,value:i.description,onChange:p=>{const R=p.target.value;O("description",R)}}),u("div",{"data-testid":"applies-to-section",className:"b2b-purchase-order-approval-rule-form__applies-to",children:[e("span",{className:"b2b-purchase-order-approval-rule-form__applies-to-title",children:P.titleAppliesTo}),c.map((p,R)=>e(Qe,{"data-testid":`applies-to-radio-${R}`,disabled:d,name:"radio-group",value:p.value,label:p.text,checked:i.roleType===p.value,onChange:V=>{const A=V.target.value;O("roleType",A)}},p.value)),i.roleType==="specific_roles"?u("div",{"data-testid":"applies-to-multiselect-container",className:"b2b-purchase-order-approval-rule-form__applies-to-multiselect",children:[e(Ae,{"data-testid":"applies-to-multiselect",disabled:d,name:"appliesTo",value:[...i.appliesTo],options:s.map(p=>({value:p.id,label:p.name})),error:!!(o.appliesTo&&l.appliesTo),onChange:p=>{O("appliesTo",p),o.appliesTo||_("appliesTo")}}),e(pe,{touched:o.appliesTo,error:l.appliesTo})]}):null]}),u("div",{"data-testid":"rule-type-section",className:"b2b-purchase-order-approval-rule-form__rule-type",children:[e("span",{className:"b2b-purchase-order-approval-rule-form__rule-type-title",children:P.titleRuleType}),e(he,{"data-testid":"rule-type-picker",className:"b2b-purchase-order-approval-rule-form__rule-type-picker",disabled:d,name:"ruleType",value:i.condition.attribute,options:t,handleSelect:p=>{const R=p.target.value;O("ruleType",R)}})]}),u("div",{"data-testid":"rule-condition-section",className:"b2b-purchase-order-approval-rule-form__rule-condition",children:[e("span",{className:"b2b-purchase-order-approval-rule-form__rule-condition-title",children:(L=t.find(p=>p.value===i.condition.attribute))==null?void 0:L.text}),u("div",{className:x(["b2b-purchase-order-approval-rule-form__rule-condition-container",["b2b-purchase-order-approval-rule-form__rule-condition-container--error",!!l.ruleValue&&o.ruleValue]]),children:[e(he,{"data-testid":"rule-condition-picker",className:"b2b-purchase-order-approval-rule-form__rule-condition-picker",disabled:d,name:"ruleCondition",value:i.condition.operator,options:a,handleSelect:p=>{const R=p.target.value;O("ruleCondition",R)}}),u("div",{"data-testid":"rule-value-container",children:[e(Ce,{"data-testid":"rule-value-input",className:"b2b-purchase-order-approval-rule-form__rule-value-input",disabled:d,name:"ruleValue",floatingLabel:i.condition.attribute==="NUMBER_OF_SKUS"?P.inputQuantityFloatingLabel:P.inputAmountFloatingLabel,placeholder:i.condition.attribute==="NUMBER_OF_SKUS"?P.inputQuantityPlaceholder:P.inputAmountPlaceholder,value:i.condition.attribute==="NUMBER_OF_SKUS"?i.condition.quantity:i.condition.amount.value,error:!!(o.ruleValue&&l.ruleValue),onChange:p=>{const R=p.target.value;O("ruleValue",R)},onBlur:()=>_("ruleValue")}),e(pe,{touched:o.ruleValue,error:l.ruleValue})]}),i.condition.attribute!=="NUMBER_OF_SKUS"?e(he,{"data-testid":"rule-condition-currency-picker",className:"b2b-purchase-order-approval-rule-form__rule-condition-currency-picker",disabled:d,name:"ruleConditionCurrency",value:i.condition.amount.currency,options:n,handleSelect:p=>{const R=p.target.value;O("ruleConditionCurrency",R)}}):null]})]}),u("div",{"data-testid":"approval-role-section",className:"b2b-purchase-order-approval-rule-form__approval-role",children:[e("span",{className:"b2b-purchase-order-approval-rule-form__approval-role-title",children:P.titleRequiresApprovalRole}),u("div",{className:"b2b-purchase-order-approval-rule-form__approval-role-multiselect",children:[e(Ae,{"data-testid":"approvers-multiselect",disabled:d,name:"approvers",value:[...i.approvers],options:r.map(p=>({value:p.id,label:p.name})),error:!!(o.approvers&&l.approvers),onChange:p=>{O("approvers",p),o.approvers||_("approvers")}}),e(pe,{touched:o.approvers,error:l.approvers})]})]}),u("div",{"data-testid":"form-buttons",className:"b2b-purchase-order-approval-rule-form__buttons",children:[e(H,{"data-testid":"save-button",type:"button",disabled:d,onClick:E,children:P.buttonSave}),e(H,{"data-testid":"cancel-button",disabled:f,variant:"secondary",type:"button",onClick:()=>{window.location.href=(T==null?void 0:T())??""},children:P.buttonCancel})]})]})},zr=({className:r,approvalRuleID:a,withHeader:s,withWrapper:c,routeApprovalRulesList:t,onSubmit:n,onChange:i})=>{const l=ae({headerText:"PurchaseOrders.approvalRuleForm.headerText",titleAppliesTo:"PurchaseOrders.approvalRuleForm.titleAppliesTo",titleRuleType:"PurchaseOrders.approvalRuleForm.titleRuleType",titleRequiresApprovalRole:"PurchaseOrders.approvalRuleForm.titleRequiresApprovalRole",formEnabled:"PurchaseOrders.approvalRuleForm.fields.enabled",formDisabled:"PurchaseOrders.approvalRuleForm.fields.disabled",inputRuleNameFloatingLabel:"PurchaseOrders.approvalRuleForm.fields.inputRuleName.floatingLabel",inputRuleNamePlaceholder:"PurchaseOrders.approvalRuleForm.fields.inputRuleName.placeholder",textAreaDescriptionLabel:"PurchaseOrders.approvalRuleForm.fields.textAreaDescription.label",appliesToAllUsers:"PurchaseOrders.approvalRuleForm.fields.appliesTo.allUsers",appliesToSpecificRoles:"PurchaseOrders.approvalRuleForm.fields.appliesTo.specificRoles",ruleTypeGrandTotal:"PurchaseOrders.approvalRuleForm.fields.ruleTypeOptions.grandTotal",ruleTypeShippingInclTax:"PurchaseOrders.approvalRuleForm.fields.ruleTypeOptions.shippingInclTax",ruleTypeNumberOfSkus:"PurchaseOrders.approvalRuleForm.fields.ruleTypeOptions.numberOfSkus",conditionOperatorMoreThan:"PurchaseOrders.approvalRuleForm.fields.conditionOperators.moreThan",conditionOperatorLessThan:"PurchaseOrders.approvalRuleForm.fields.conditionOperators.lessThan",conditionOperatorMoreThanOrEqualTo:"PurchaseOrders.approvalRuleForm.fields.conditionOperators.moreThanOrEqualTo",conditionOperatorLessThanOrEqualTo:"PurchaseOrders.approvalRuleForm.fields.conditionOperators.lessThanOrEqualTo",inputQuantityFloatingLabel:"PurchaseOrders.approvalRuleForm.fields.inputQuantity.floatingLabel",inputQuantityPlaceholder:"PurchaseOrders.approvalRuleForm.fields.inputQuantity.placeholder",inputAmountFloatingLabel:"PurchaseOrders.approvalRuleForm.fields.inputAmount.floatingLabel",inputAmountPlaceholder:"PurchaseOrders.approvalRuleForm.fields.inputAmount.placeholder",buttonCancel:"PurchaseOrders.approvalRuleForm.fields.buttons.cancel",buttonSave:"PurchaseOrders.approvalRuleForm.fields.buttons.save"}),{permissions:o,loadingPermissions:f}=_r(),{availableRequiresApprovalFrom:g,conditionOperators:E,availableAppliesTo:_,appliesToOptions:O,ruleTypeOptions:T,currencies:P,formValues:d,errors:M,touched:L,isLoading:p,submitError:R,formLoading:V,handleSubmit:A,handleFieldTouch:I,handleSetFormValues:D}=Pr({t:l,approvalRuleID:a,loadingPermissions:f,permissions:o,routeApprovalRulesList:t,onSubmit:n,onChange:i});if(V)return e(wr,{testId:"b2b-purchase-order-approval-rule-form",className:x(["b2b-purchase-order-approval-rule-form",r])});const $=u(_e,{children:[!!R&&e(Le,{heading:"",description:R}),e(Rr,{availableRequiresApprovalFrom:g,conditionOperators:E,availableAppliesTo:_,appliesToOptions:O,ruleTypeOptions:T,currencies:P,formValues:d,errors:M,touched:L,isLoading:p,handleSubmit:A,handleFieldTouch:I,handleSetFormValues:D,permissions:o,routeApprovalRulesList:t,t:l})]});return u("div",{"data-testid":"b2b-purchase-order-approval-rule-form",className:x(["b2b-purchase-order-approval-rule-form",r]),children:[s?e(br,{headerText:l.headerText}):null,c?e(ke,{variant:"secondary",children:$}):$]})},qr=({className:r,purchaseOrderNumber:a,routePurchaseOrderDetails:s,...c})=>{const t=ae({title:"PurchaseOrders.purchaseOrderConfirmation.title",messagePrefix:"PurchaseOrders.purchaseOrderConfirmation.messagePrefix",messageSuffix:"PurchaseOrders.purchaseOrderConfirmation.messageSuffix"});return u("div",{...c,className:x(["purchase-orders-confirmation-content",r]),children:[e("h2",{className:"purchase-orders-confirmation-content__title",children:t.title}),u("p",{className:"purchase-orders-confirmation-content__message",children:[t.messagePrefix," ",u("a",{className:"purchase-orders-confirmation-content__link",href:s()??"",children:["#",a]}),". ",t.messageSuffix]})]})},Wr=({slots:r,t:a,loading:s,children:c,availableActions:t=[],handleApprove:n,handleReject:i,handleCancel:l,handlePlaceOrder:o})=>{const f=t.map(g=>{switch(g){case"APPROVE":return e(H,{variant:"secondary",disabled:s,type:"button",onClick:n,children:a.approveButtonText},g);case"PLACE_ORDER":return e(H,{variant:"secondary",disabled:s,type:"button",onClick:o,children:a.placeOrderButtonText},g);case"REJECT":return e(H,{variant:"secondary",disabled:s,type:"button",onClick:i,children:a.rejectButtonText},g);case"CANCEL":return e(H,{variant:"secondary",disabled:s,type:"button",onClick:l,children:a.cancelButtonText},g);default:return null}});return u("div",{className:x(["b2b-purchase-order-status-content"]),children:[e("div",{className:"b2b-purchase-order-status-content__message",children:a.statusMessageText}),c,e("div",{className:"b2b-purchase-order-status-content__actions",children:e(He,{"data-testid":"PurchaseOrderActions",name:"PurchaseOrderActions",slot:r==null?void 0:r.PurchaseOrderActions,context:{loading:s,availableActions:t,handleApprove:n,handleReject:i,handleCancel:l,handlePlaceOrder:o},children:f})})]})},Qr=({formValues:r})=>e("div",{className:x(["b2b-purchase-order-approval-rule-details-content"]),children:r.map((a,s)=>u("div",{className:x(["b2b-purchase-order-approval-rule-details-content__item"]),children:[e("span",{className:"b2b-purchase-order-approval-rule-details-content__label",children:a.label}),e("div",{className:"b2b-purchase-order-approval-rule-details-content__value",children:a.value})]},s))}),Ne=1,re=({className:r,fullWidth:a=!1,lines:s=Ne,size:c="small",variant:t="row",children:n=null,multilineGap:i="medium",...l})=>{const o=[[`dropin-skeleton-row__${t}`,t],[`dropin-skeleton-row__${t}-${c}`,t&&c]];if(!n&&t==="empty")return e("div",{className:x(["dropin-skeleton-row dropin-skeleton-row__empty",r])});if(n){const g=n.trim();return e("div",{...l,class:x(["dropin-skeleton-row",["dropin-skeleton-row--full",a],r]),dangerouslySetInnerHTML:{__html:g}})}return s>Ne===!1?e("div",{...l,class:x(["dropin-skeleton-row",["dropin-skeleton-row--full",a],"dropin-skeleton--row__content",...o,r])}):e("div",{...l,style:{"--multiline-gap-spacing":`var(--spacing-${i})`},class:x(["dropin-skeleton-row--multiline",["dropin-skeleton-row--full",a],r]),children:Array.from({length:s}).map((g,E)=>e("div",{class:x(["dropin-skeleton-row",["dropin-skeleton-row--full",a],"dropin-skeleton--row__content",...o])},E))})},Tr=({className:r,children:a,rowGap:s="medium",...c})=>e("div",{style:{"--row-gap-spacing":`var(--spacing-${s})`},...c,className:x(["dropin-skeleton",r]),role:"status","aria-label":"Loading...",children:a}),wr=({testId:r="",className:a=""})=>e("div",{"data-testid":r,className:x(["b2b-purchase-order-form-loader",a]),children:u(Tr,{rowGap:"medium","data-testid":"form-loader-root",children:[e(re,{size:"small",variant:"row",fullWidth:!0,lines:1,style:{maxWidth:300},"data-testid":"form-loader-status-toggle"}),e(re,{size:"medium",variant:"row",fullWidth:!0,lines:1,"data-testid":"form-loader-name"}),e(re,{size:"medium",variant:"row",fullWidth:!0,lines:4,"data-testid":"form-loader-description"}),u("div",{className:"approval-rule-form-loader__section","data-testid":"form-loader-approval-role-section",children:[e(re,{size:"small",variant:"row",fullWidth:!0,lines:1,"data-testid":"form-loader-approval-role-label"}),e(re,{size:"small",variant:"row",fullWidth:!0,lines:1,"data-testid":"form-loader-approval-role-input"})]}),u("div",{className:"approval-rule-form-loader__buttons","data-testid":"form-loader-buttons",children:[e(re,{size:"medium",variant:"row",fullWidth:!0,lines:1,style:{width:120},"data-testid":"form-loader-button-save"}),e(re,{size:"medium",variant:"row",fullWidth:!0,lines:1,style:{width:120},"data-testid":"form-loader-button-cancel"})]})]})}),Zr=({commentsList:r=[],visibleRecordsLimit:a=5})=>{const[s,c]=C(a),t=r.length>s,n=r.length<=a,i=ae({showMoreLabel:"PurchaseOrders.comments.view.ariaLabel.showMore",showLessLabel:"PurchaseOrders.comments.view.ariaLabel.showLess"});return r.length?u("div",{className:"b2b-purchase-order-comment-list-content",children:[e("ul",{className:"b2b-purchase-order-comment-list-content__list",children:r.slice(0,s).map((l,o)=>{var g,E;const f=Math.min(s,r.length);return u(Oe,{children:[u("li",{className:"b2b-purchase-order-comment-list-content__item",children:[u("div",{className:"b2b-purchase-order-comment-list-content__title",children:[be(l.createdAt),(g=l.author)!=null&&g.firstname&&((E=l.author)!=null&&E.lastname)?` (${l.author.firstname} ${l.author.lastname})`:""]}),e("div",{className:"b2b-purchase-order-comment-list-content__description",children:l.text})]}),o<f-1&&e("hr",{className:"b2b-purchase-order-comment-list-content__divider"})]},l.uid)})}),!n&&e("div",{className:"b2b-purchase-order-comment-list-content__actions",children:e(H,{variant:"secondary","aria-expanded":!t,"aria-label":t?i.showMoreLabel:i.showLessLabel,onClick:()=>{c(t?r.length:a)},children:e(y,{id:`PurchaseOrders.comments.view.buttons.${t?"viewMore":"viewLess"}`})})})]}):e("div",{className:"b2b-purchase-order-comment-list-content",children:e(y,{id:"PurchaseOrders.comments.view.emptyText"})})},Kr=({t:r,purchaseOrderData:a})=>{const[s,c]=C(!1),[t,n]=C(""),[i,l]=C(""),o=B(()=>!t.trim().length||!(a!=null&&a.uid)||s,[t,a,s]),f=k(E=>{const _=E.target.value;n(_),i&&l("")},[i]),g=k(()=>{const E=(a==null?void 0:a.uid)??"";!E||!t.trim().length||(c(!0),hr(E,t).then(_=>{_&&(a!=null&&a.uid)&&(z.emit("purchase-order/refresh",!0),n(""))}).catch(()=>{l(r.errorMessage||"Failed to add comment. Please try again.")}).finally(()=>{c(!1)}))},[a,t,r]);return u("div",{className:x(["b2b-purchase-order-comment-form-content"]),children:[e(Ie,{errorMessage:i,disabled:s,value:t,label:r.textAreaPlaceholder,onChange:f}),e(H,{variant:"primary",disabled:o,onClick:g,children:r.buttonText})]})},Cr=r=>K.createElement("svg",{width:24,height:24,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",...r},K.createElement("path",{vectorEffect:"non-scaling-stroke",d:"M0.75 12C0.75 5.78421 5.78421 0.75 12 0.75C18.2158 0.75 23.25 5.78421 23.25 12C23.25 18.2158 18.2158 23.25 12 23.25C5.78421 23.25 0.75 18.2158 0.75 12Z",stroke:"currentColor"}),K.createElement("path",{vectorEffect:"non-scaling-stroke",d:"M6.75 12.762L10.2385 15.75L17.25 9",stroke:"currentColor"})),Ar=r=>K.createElement("svg",{width:24,height:24,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",...r},K.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M0 12C0 5.37931 5.37931 0 12 0C18.6207 0 24 5.37931 24 12C24 18.6207 18.6207 24 12 24C5.37931 24 0 18.6207 0 12ZM11.8885 5.06101C11.1405 5.06101 10.5357 5.66579 10.5357 6.4138V6.57295C10.5835 7.27321 11.1882 7.81433 11.8885 7.76658H12.0795C12.7797 7.70292 13.289 7.09815 13.2413 6.4138C13.2413 5.66579 12.6365 5.06101 11.8885 5.06101ZM13.1935 16.8223H14.1007C14.2599 16.8223 14.4031 16.9655 14.4031 17.1247V17.7294C14.4031 17.9045 14.2599 18.0318 14.1007 18.0318H9.8832C9.70813 18.0318 9.58081 17.8886 9.58081 17.7294V17.1247C9.58081 16.9496 9.72405 16.8223 9.8832 16.8223H10.7904V10.7905H9.8832C9.70813 10.7905 9.58081 10.6472 9.58081 10.4881V9.88329C9.58081 9.70823 9.72405 9.58091 9.8832 9.58091H12.5888C12.923 9.58091 13.1935 9.85146 13.1935 10.1857V16.8223Z",fill:"currentColor"})),Sr=r=>K.createElement("svg",{width:24,height:24,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",...r},K.createElement("path",{vectorEffect:"non-scaling-stroke",d:"M0.75 12C0.75 5.78421 5.78421 0.75 12 0.75C18.2158 0.75 23.25 5.78421 23.25 12C23.25 18.2158 18.2158 23.25 12 23.25C5.78421 23.25 0.75 18.2158 0.75 12Z",stroke:"currentColor"}),K.createElement("path",{vectorEffect:"non-scaling-stroke",d:"M11.75 5.88423V4.75H12.25V5.88423L12.0485 13.0713H11.9515L11.75 5.88423ZM11.7994 18.25V16.9868H12.2253V18.25H11.7994Z",stroke:"currentColor"})),Jr=({approvalFlow:r=[]})=>{const a=ae({pending:"PurchaseOrders.approvalFlow.ariaLabels.icons.pending",approved:"PurchaseOrders.approvalFlow.ariaLabels.icons.approved",rejected:"PurchaseOrders.approvalFlow.ariaLabels.icons.rejected"});if(!(r!=null&&r.length))return e("div",{className:"b2b-purchase-order-approval-flow-content",children:e(y,{id:"PurchaseOrders.approvalFlow.emptyText"})});const s=c=>{switch(c){case"PENDING":return e(Ar,{className:"b2b-purchase-order-approval-flow-content__icon--pending","aria-label":a.pending,role:"img"});case"APPROVED":return e(Cr,{className:"b2b-purchase-order-approval-flow-content__icon--approved","aria-label":a.approved,role:"img"});case"REJECTED":return e(Sr,{className:"b2b-purchase-order-approval-flow-content__icon--rejected","aria-label":a.rejected,role:"img"});default:return null}};return e("div",{className:x(["b2b-purchase-order-approval-flow-content"]),children:e("ul",{className:"b2b-purchase-order-approval-flow-content__list",children:r.map((c,t)=>u(Oe,{children:[u("li",{className:"b2b-purchase-order-approval-flow-content__item",children:[e("div",{className:"b2b-purchase-order-approval-flow-content__title",children:c.ruleName}),c.events.map((n,i)=>u("div",{className:"b2b-purchase-order-approval-flow-content__description",children:[s(n.status),n.message]},i))]}),t<r.length-1&&e("hr",{className:"b2b-purchase-order-approval-flow-content__divider"})]},t))})})},Yr=({historyLogRecords:r=[],visibleRecordsLimit:a})=>{const[s,c]=C(a),t=r.length>s,n=r.length<=a,i=ae({showMoreLabel:"PurchaseOrders.historyLog.ariaLabel.showMore",showLessLabel:"PurchaseOrders.historyLog.ariaLabel.showLess"});return r.length?u("div",{className:"b2b-purchase-order-history-log-content",children:[e("ul",{className:"b2b-purchase-order-history-log-content__list",role:"list",children:r.slice(0,s).map((l,o)=>{const f=Math.min(s,r.length);return u(Oe,{children:[u("li",{className:"b2b-purchase-order-history-log-content__item",children:[e("div",{className:"b2b-purchase-order-history-log-content__title",children:e(y,{id:`PurchaseOrders.historyLog.status.${l.activity}`,fields:{date:be(l.createdAt)}})}),e("div",{className:"b2b-purchase-order-history-log-content__description",children:l.message})]}),o<f-1&&e("hr",{className:"b2b-purchase-order-history-log-content__divider"})]},l.uid)})}),!n&&e("div",{className:"b2b-purchase-order-history-log-content__actions",children:e(H,{variant:"secondary","aria-expanded":!t,"aria-label":t?i.showMoreLabel:i.showLessLabel,onClick:()=>{c(t?r.length:a)},children:e(y,{id:`PurchaseOrders.historyLog.buttons.${t?"viewMore":"viewLess"}`})})})]}):e("div",{className:"b2b-purchase-order-history-log-content",children:e(y,{id:"PurchaseOrders.historyLog.emptyText"})})};export{zr as A,ge as E,wr as F,br as P,Hr as a,Dr as b,Ur as c,Br as d,Gr as e,Wr as f,Er as g,Yr as h,qr as i,Zr as j,Kr as k,Jr as l,jr as m,$r as n,Qr as o,_r as u};
4
+ //# sourceMappingURL=components.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"components.js","sources":["/@dropins/storefront-purchase-order/src/components/PurchaseOrdersTable/PurchaseOrdersTable.tsx","/@dropins/storefront-purchase-order/src/components/PurchaseOrdersHeader/PurchaseOrdersHeader.tsx","/@dropins/storefront-purchase-order/src/components/PurchaseOrdersTableActions/PurchaseOrdersTableActions.tsx","/@dropins/storefront-purchase-order/src/types/api/api.enums.types.ts","/@dropins/storefront-purchase-order/src/configs/pageSize.config.ts","/@dropins/storefront-purchase-order/src/configs/customerPurchaseOrders.config.ts","/@dropins/storefront-purchase-order/src/configs/purchaseOrderApprovalRules.config.ts","/@dropins/storefront-purchase-order/src/configs/companyPurchaseOrders.config.ts","/@dropins/storefront-purchase-order/src/hooks/usePurchaseOrders.tsx","/@dropins/storefront-purchase-order/src/data/transforms/transform-customer-role-permissions.ts","/@dropins/storefront-purchase-order/src/hooks/useCustomerRolePermissions.tsx","/@dropins/storefront-purchase-order/src/hooks/useApprovalRuleForm.tsx","/@dropins/storefront-purchase-order/src/hooks/useApprovalRuleDetails.tsx","/@dropins/storefront-purchase-order/src/hooks/useApprovalRulesList.tsx","/@dropins/storefront-purchase-order/src/hooks/usePurchaseOrderData.tsx","/@dropins/storefront-purchase-order/src/hooks/usePurchaseOrderStatus.tsx","/@dropins/storefront-purchase-order/src/components/ApprovalRuleForm/blocks/ErrorMessage.tsx","/@dropins/storefront-purchase-order/src/components/ApprovalRuleForm/blocks/Form.tsx","/@dropins/storefront-purchase-order/src/components/ApprovalRuleForm/ApprovalRuleForm.tsx","/@dropins/storefront-purchase-order/src/components/PurchaseOrderConfirmationContent/PurchaseOrderConfirmationContent.tsx","/@dropins/storefront-purchase-order/src/components/PurchaseOrderStatusContent/PurchaseOrderStatusContent.tsx","/@dropins/storefront-purchase-order/src/components/ApprovalRuleDetailsContent/ApprovalRuleDetailsContent.tsx","../../node_modules/@adobe-commerce/elsie/src/components/Skeleton/Skeleton.tsx","/@dropins/storefront-purchase-order/src/components/FormLoader/FormLoader.tsx","/@dropins/storefront-purchase-order/src/components/PurchaseOrderCommentsListContent/PurchaseOrderCommentsListContent.tsx","/@dropins/storefront-purchase-order/src/components/PurchaseOrderCommentFormContent/PurchaseOrderCommentFormContent.tsx","../../node_modules/@adobe-commerce/elsie/src/icons/CheckWithCircle.svg","../../node_modules/@adobe-commerce/elsie/src/icons/InfoFilled.svg","../../node_modules/@adobe-commerce/elsie/src/icons/WarningWithCircle.svg","/@dropins/storefront-purchase-order/src/components/PurchaseOrderApprovalFlowContent/PurchaseOrderApprovalFlowContent.tsx","/@dropins/storefront-purchase-order/src/components/PurchaseOrderHistoryLogContent/PurchaseOrderHistoryLogContent.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 { FunctionComponent } from 'preact';\nimport {\n Table,\n Pagination,\n Card,\n Picker,\n InLineAlert,\n} from '@adobe-commerce/elsie/components';\nimport { classes } from '@adobe-commerce/elsie/lib';\nimport {\n PurchaseOrdersTableProps,\n TableColumn,\n} from '@/b2b-purchase-order/types/components';\nimport { Text, useText } from '@adobe-commerce/elsie/i18n';\nimport { getRange } from '@/b2b-purchase-order/lib';\nimport '@/b2b-purchase-order/components/PurchaseOrdersTable/PurchaseOrdersTable.css';\n\nexport const PurchaseOrdersTable: FunctionComponent<\n PurchaseOrdersTableProps\n> = ({\n pageSizeConfig,\n totalCount = 0,\n columns = [],\n rows = [],\n paginationConfig,\n alertMessageConfig = {\n heading: '',\n description: '',\n type: 'success',\n },\n loading = false,\n className = '',\n variant = 'secondary',\n skeletonRowCount = 10,\n emptyTitle,\n header,\n footer,\n withWrapper,\n expandedRows,\n}) => {\n const t = useText({\n title: 'PurchaseOrders.purchaseOrdersTable.noPurchaseOrders.default',\n });\n\n const {\n heading: alertMessageHeading,\n description: alertMessageDescription,\n type: alertMessageType,\n } = alertMessageConfig;\n\n const { currentPage, totalPages, handlePageChange } = paginationConfig;\n const { pageSizeOptionsList, onChange } = pageSizeConfig;\n\n // Extract pageSize value safely\n const selectedPageSizeOption = pageSizeOptionsList?.find(\n (option) => option.selected\n );\n const pageSize =\n selectedPageSizeOption && selectedPageSizeOption.value !== undefined\n ? Number(selectedPageSizeOption.value)\n : 10;\n const { from, to, total } = getRange(currentPage, pageSize, totalCount);\n const isEmpty = !loading && rows.length === 0;\n\n const content = (\n <>\n {alertMessageHeading || alertMessageDescription ? (\n <InLineAlert\n heading={alertMessageHeading}\n description={alertMessageDescription}\n type={alertMessageType}\n />\n ) : null}\n\n {header ? (\n <div className=\"purchase-orders-table__header\">{header}</div>\n ) : null}\n\n <Table\n className=\"purchase-orders-table__table-wrapper\"\n mobileLayout=\"stacked\"\n columns={columns as TableColumn[]}\n rowData={rows}\n expandedRows={expandedRows}\n loading={loading}\n skeletonRowCount={+skeletonRowCount}\n />\n {isEmpty && (\n <div\n className=\"purchase-orders-table__empty-state\"\n role=\"status\"\n aria-live=\"polite\"\n >\n <p>{emptyTitle || t.title}</p>\n </div>\n )}\n\n {totalCount > 0 ? (\n <div className=\"purchase-orders-table__pagination-wrapper\">\n <div className=\"purchase-orders-table__pagination-counter\">\n <Text\n id=\"PurchaseOrders.purchaseOrdersTable.pagination.status\"\n fields={{\n from,\n to,\n total,\n }}\n />\n </div>\n {totalPages > 1 && (\n <Pagination\n className={classes([\n 'purchase-orders-table__pagination',\n ['purchase-orders-table__pagination--loading', loading],\n ])}\n currentPage={currentPage}\n totalPages={totalPages}\n onChange={handlePageChange}\n />\n )}\n {totalCount > 0 && pageSizeOptionsList.length ? (\n <div className=\"purchase-orders-table__pagination-page-size\">\n <Text id=\"PurchaseOrders.purchaseOrdersTable.pagination.pageSizeLabel.start\" />\n <Picker\n disabled={loading}\n handleSelect={onChange}\n options={pageSizeOptionsList}\n value={\n pageSizeOptionsList?.find((option) => option.selected)\n ?.value || ''\n }\n />\n </div>\n ) : null}\n </div>\n ) : null}\n\n {footer ? (\n <div className=\"purchase-orders-table__footer\">{footer}</div>\n ) : null}\n </>\n );\n\n if (!withWrapper) {\n return (\n <div\n data-testid=\"purchaseOrdersTable\"\n className={classes([\n 'b2b-purchase-order-purchase-orders-table',\n ['b2b-purchase-order-purchase-orders-table--empty-state', isEmpty],\n className,\n ])}\n >\n {content}\n </div>\n );\n }\n\n return (\n <Card\n variant={variant}\n data-testid=\"purchaseOrdersTable\"\n className={classes([\n 'b2b-purchase-order-purchase-orders-table',\n ['b2b-purchase-order-purchase-orders-table--empty-state', isEmpty],\n className,\n ])}\n >\n {content}\n </Card>\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 { Header } from '@adobe-commerce/elsie/components';\nimport { classes } from '@adobe-commerce/elsie/lib';\nimport { FunctionComponent } from 'preact';\nimport '@/b2b-purchase-order/components/PurchaseOrdersHeader/PurchaseOrdersHeader.css';\n\nexport const PurchaseOrdersHeader: FunctionComponent<{\n headerText: string;\n divider?: boolean;\n}> = ({ headerText, divider = false }) => {\n return (\n <Header\n title={headerText}\n divider={divider}\n className={classes([\n 'purchase-orders-header',\n ['purchase-orders-header--with-divider', divider],\n ])}\n data-testid=\"purchase-orders-header\"\n />\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 { FunctionComponent } from 'preact';\nimport { classes } from '@adobe-commerce/elsie/lib';\nimport '@/b2b-purchase-order/components/PurchaseOrdersTableActions/PurchaseOrdersTableActions.css';\nimport { Button } from '@adobe-commerce/elsie/components';\nimport { PurchaseOrdersTableActionsProps } from '@/b2b-purchase-order/types/components';\n\nexport const PurchaseOrdersTableActions: FunctionComponent<\n PurchaseOrdersTableActionsProps\n> = ({\n loading,\n selectedCount,\n className,\n handleRejectSelected,\n handleApproveSelected,\n}) => {\n return (\n <div\n className={classes([\n 'b2b-purchase-order-purchase-orders-table-actions',\n className,\n ])}\n >\n <div>Selected {selectedCount}</div>\n <div\n className={'b2b-purchase-order-purchase-orders-table-actions__buttons'}\n >\n <Button\n variant=\"secondary\"\n onClick={handleRejectSelected}\n disabled={loading || selectedCount === 0}\n >\n Reject selected\n </Button>\n <Button\n variant=\"primary\"\n onClick={handleApproveSelected}\n disabled={loading || selectedCount === 0}\n >\n Approve selected\n </Button>\n </div>\n </div>\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\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\nexport const defaultPageSizeConfig = [\n {\n text: '10',\n value: '10',\n selected: false,\n },\n {\n text: '20',\n value: '20',\n selected: true,\n },\n {\n text: '30',\n value: '30',\n selected: false,\n },\n {\n text: '50',\n value: '50',\n selected: false,\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 { Column } from '@/b2b-purchase-order/types/components';\n\nexport const defaultColumns: Column[] = [\n { key: 'poNumber', label: 'PO #' },\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 { 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 { Column } from '@/b2b-purchase-order/types/components';\nimport { defaultColumns } from '@/b2b-purchase-order/configs/customerPurchaseOrders.config';\n\nexport const defaultCompanyColumns: Column[] = [\n {\n key: 'checkboxView',\n label: '',\n },\n ...defaultColumns,\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","/********************************************************************\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 { CustomerRolePermissionsModel } from '@/b2b-purchase-order/data/models/customer-role-permissions-model';\nimport { PO_PERMISSIONS } from '@/b2b-purchase-order/api/permissions';\n\ntype PermissionsPayload = {\n admin?: boolean;\n [key: string]: boolean | undefined;\n};\n\n/**\n * Transforms flat permissions object from auth/permissions event into CustomerRolePermissionsModel\n *\n * Permission Logic:\n * - true: Permission granted\n * - false: Permission disabled (overrides admin privileges - indicates PO feature is disabled)\n * - Default: Admins get access, regular users don't\n *\n * @param permissionsData - Flat object with permission keys and admin flag\n * @returns CustomerRolePermissionsModel\n */\nexport const transformPermissions = (\n permissionsData: PermissionsPayload | null | undefined\n): CustomerRolePermissionsModel => {\n // Fallback for edge cases\n if (!permissionsData) {\n return {\n isAdmin: false,\n purchaseOrderEnabled: false,\n role: { id: '', name: '' },\n permissions: {\n purchaseOrderAll: false,\n viewPurchaseOrders: false,\n viewPurchaseOrdersForSubordinates: false,\n viewPurchaseOrdersForCompany: false,\n autoApprovePurchaseOrder: false,\n superApprovePurchaseOrder: false,\n viewApprovalRules: false,\n manageApprovalRules: false,\n },\n };\n }\n\n const isAdmin = permissionsData.admin === true;\n\n /**\n * Check if permission is granted\n * - false: Overrides admin (PO disabled)\n * - true: Permission granted\n * - Default: Use admin status\n */\n const hasPermission = (key: string): boolean => {\n const permissionValue = permissionsData[key];\n\n if (permissionValue === false) {\n return false;\n }\n\n if (permissionValue === true) {\n return true;\n }\n\n return isAdmin;\n };\n\n const permissions = {\n purchaseOrderAll: hasPermission(PO_PERMISSIONS.PO_ALL),\n viewPurchaseOrders: hasPermission(PO_PERMISSIONS.VIEW_CUSTOMER),\n viewPurchaseOrdersForSubordinates: hasPermission(\n PO_PERMISSIONS.VIEW_SUBORDINATES\n ),\n viewPurchaseOrdersForCompany: hasPermission(PO_PERMISSIONS.VIEW_COMPANY),\n autoApprovePurchaseOrder: hasPermission(PO_PERMISSIONS.AUTO_APPROVE),\n superApprovePurchaseOrder: hasPermission(PO_PERMISSIONS.SUPER_APPROVE),\n viewApprovalRules: hasPermission(PO_PERMISSIONS.VIEW_RULES),\n manageApprovalRules: hasPermission(PO_PERMISSIONS.MANAGE_RULES),\n };\n\n // Purchase orders are disabled if ANY permission in the payload is explicitly set to false\n // Otherwise enabled if user has at least one permission\n const hasExplicitlyDisabledPermission = Object.values(permissionsData).some(\n (value) => value === false\n );\n const purchaseOrderEnabled = hasExplicitlyDisabledPermission\n ? false\n : Object.values(permissions).some((permission) => permission === true);\n\n return {\n isAdmin,\n purchaseOrderEnabled,\n role: {\n id: '',\n name: isAdmin ? 'Company Administrator' : '',\n },\n permissions,\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 { useMemo, useState, useEffect } from 'preact/hooks';\nimport { events } from '@adobe-commerce/event-bus';\nimport { transformPermissions } from '@/b2b-purchase-order/data/transforms/transform-customer-role-permissions';\nimport { CustomerRolePermissionsModel } from '@/b2b-purchase-order/data/models';\n\n/**\n * Hook to consume customer role permissions from the auth/permissions event\n *\n * Initializes with last payload and subscribes to real-time updates.\n * Transforms permissions data where:\n * - true: Permission granted\n * - false: Permission disabled (overrides admin - PO feature disabled)\n * - Default: Admins get access, regular users don't\n *\n * @returns {permissions: CustomerRolePermissionsModel, loadingPermissions: boolean}\n */\nexport const useCustomerRolePermissions = (): {\n permissions: CustomerRolePermissionsModel;\n loadingPermissions: boolean;\n} => {\n // Initialize with the last payload from the auth/permissions event\n const initialPermissionsData = events.lastPayload('auth/permissions');\n\n // State to hold permissions data, updated when event is triggered\n const [permissionsData, setPermissionsData] = useState(\n initialPermissionsData\n );\n\n // Subscribe to auth/permissions event for real-time updates\n useEffect(() => {\n const subscription = events.on(\n 'auth/permissions',\n (payload) => {\n setPermissionsData(payload);\n },\n { eager: true }\n );\n\n // Cleanup subscription on unmount\n return () => {\n subscription?.off();\n };\n }, []);\n\n // We're loading if we don't have permissions data from the event yet\n const loadingPermissions = !permissionsData;\n\n // Transform and memoize the permissions data\n const permissions = useMemo(() => {\n return transformPermissions(permissionsData);\n }, [permissionsData]);\n\n return {\n permissions,\n loadingPermissions,\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 { useCallback, useEffect, useMemo, useReducer } from 'preact/hooks';\nimport {\n FormAction,\n FormState,\n UseApprovalRuleFormProps,\n UseApprovalRuleFormReturn,\n} from '@/b2b-purchase-order/types/hooks';\n\nimport {\n currencyInfo,\n getPurchaseOrderApprovalRule,\n createPurchaseOrderApprovalRule,\n updatePurchaseOrderApprovalRule,\n getPurchaseOrderApprovalRuleMetadata,\n} from '@/b2b-purchase-order/api';\nimport {\n updateFormFieldValue,\n validateFormFields,\n updateValidationErrors,\n transformToFormValues,\n cleanAndDeep,\n} from '@/b2b-purchase-order/lib';\nimport {\n INITIAL_FORM_STATE,\n REQUIRED_FIELDS_ON_SUBMIT,\n VALIDATION_ERROR_KEYS,\n createRuleTypeOptions,\n createConditionOperators,\n createAppliesToOptions,\n} from '@/b2b-purchase-order/configs';\n\n// Reducer function - handles all state updates in one place\nfunction formReducer(state: FormState, action: FormAction): FormState {\n switch (action.type) {\n case 'SET_LOADING':\n return { ...state, isLoading: action.payload };\n\n case 'SET_SUBMIT_ERROR':\n return { ...state, submitError: action.payload };\n\n case 'SET_FORM_VALUES':\n return { ...state, formValues: action.payload };\n\n case 'SET_AVAILABLE_APPLIES_TO':\n return { ...state, availableAppliesTo: action.payload };\n\n case 'SET_AVAILABLE_APPROVERS':\n return { ...state, availableRequiresApprovalFrom: action.payload };\n\n case 'SET_ERRORS':\n return { ...state, errors: action.payload };\n\n case 'SET_TOUCHED':\n return { ...state, touched: action.payload };\n\n case 'SET_CURRENCIES':\n return { ...state, currencyCodesList: action.payload };\n\n case 'UPDATE_FIELD': {\n const { key, value } = action.payload;\n const newFormValues = updateFormFieldValue(state.formValues, key, value);\n\n // Build new touched state\n const newTouched = { ...state.touched, [key]: true };\n\n // Special case: when roleType changes to specific_roles, mark appliesTo as touched\n if (key === 'roleType' && value === 'specific_roles') {\n newTouched.appliesTo = true;\n }\n\n // Validate and get updated errors\n const allErrors = validateFormFields(newFormValues);\n const newErrors = updateValidationErrors(\n allErrors,\n state.errors,\n newTouched\n );\n\n return {\n ...state,\n formValues: newFormValues,\n touched: newTouched,\n errors: newErrors,\n };\n }\n\n case 'TOUCH_FIELD': {\n const fieldName = action.payload;\n const newTouched = { ...state.touched, [fieldName]: true };\n\n // Validate and update errors for touched field\n const allErrors = validateFormFields(state.formValues);\n const newErrors = updateValidationErrors(\n allErrors,\n state.errors,\n newTouched\n );\n\n return {\n ...state,\n touched: newTouched,\n errors: newErrors,\n };\n }\n\n case 'MARK_FIELDS_TOUCHED': {\n const newTouched = { ...state.touched, ...action.payload };\n const allErrors = validateFormFields(state.formValues);\n const newErrors = updateValidationErrors(\n allErrors,\n state.errors,\n newTouched\n );\n\n return {\n ...state,\n touched: newTouched,\n errors: newErrors,\n };\n }\n\n default:\n return state;\n }\n}\n\nexport const useApprovalRuleForm = ({\n t,\n approvalRuleID,\n routeApprovalRulesList,\n onSubmit,\n onChange,\n permissions,\n loadingPermissions,\n}: UseApprovalRuleFormProps): UseApprovalRuleFormReturn => {\n const [state, dispatch] = useReducer(formReducer, INITIAL_FORM_STATE);\n\n // Memoize options to prevent re-creation on each render\n const ruleTypeOptions = useMemo(() => createRuleTypeOptions(t), [t]);\n const conditionOperators = useMemo(() => createConditionOperators(t), [t]);\n const appliesToOptions = useMemo(() => createAppliesToOptions(t), [t]);\n\n // Load initial data (currencies and approval rule metadata)\n useEffect(() => {\n dispatch({ type: 'SET_LOADING', payload: true });\n\n // Load currency codes\n currencyInfo()\n .then((data) => {\n dispatch({\n type: 'SET_CURRENCIES',\n payload: data.availableCurrencyCodes,\n });\n })\n .catch((error) => {\n console.error('Failed to fetch currencies:', error);\n });\n\n // Load metadata (available roles) first - always needed\n getPurchaseOrderApprovalRuleMetadata()\n .then((data) => {\n const { availableAppliesTo, availableRequiresApprovalFrom } = data;\n dispatch({\n type: 'SET_AVAILABLE_APPLIES_TO',\n payload: availableAppliesTo,\n });\n dispatch({\n type: 'SET_AVAILABLE_APPROVERS',\n payload: availableRequiresApprovalFrom,\n });\n\n // Then load approval rule data if in edit mode\n if (approvalRuleID) {\n return getPurchaseOrderApprovalRule(approvalRuleID);\n }\n return null;\n })\n .then((ruleData) => {\n if (ruleData) {\n // Edit mode: set form values from existing rule\n dispatch({\n type: 'SET_FORM_VALUES',\n payload: transformToFormValues(ruleData),\n });\n }\n dispatch({ type: 'SET_SUBMIT_ERROR', payload: null });\n })\n .catch((error) => {\n console.error('Failed to fetch data:', error);\n dispatch({\n type: 'SET_SUBMIT_ERROR',\n payload: error?.message || VALIDATION_ERROR_KEYS.FAILED_TO_LOAD,\n });\n })\n .finally(() => {\n dispatch({ type: 'SET_LOADING', payload: false });\n });\n }, [approvalRuleID]);\n\n // Handler for field value changes\n const handleSetFormValues = useCallback(\n (key: string, value: string | number | boolean | string[]) => {\n dispatch({ type: 'UPDATE_FIELD', payload: { key, value } });\n if (onChange) {\n onChange({ ...state.formValues, [key]: value });\n }\n },\n [onChange, state.formValues]\n );\n\n // Handler for field touch (blur)\n const handleFieldTouch = useCallback(\n (fieldName: string) => {\n dispatch({ type: 'TOUCH_FIELD', payload: fieldName });\n if (onChange) {\n onChange(state.formValues);\n }\n },\n [onChange, state.formValues]\n );\n\n // Handler for form submission\n const handleSubmit = useCallback(async () => {\n dispatch({ type: 'SET_LOADING', payload: true });\n dispatch({ type: 'SET_SUBMIT_ERROR', payload: null });\n\n // Mark all required fields as touched to show all errors\n dispatch({\n type: 'MARK_FIELDS_TOUCHED',\n payload: REQUIRED_FIELDS_ON_SUBMIT,\n });\n\n // Validate form\n const validationErrors = validateFormFields(state.formValues);\n\n if (Object.keys(validationErrors).length > 0) {\n dispatch({ type: 'SET_ERRORS', payload: validationErrors });\n dispatch({ type: 'SET_LOADING', payload: false });\n return;\n }\n\n // Clean and prepare data for API\n const cleanedData = cleanAndDeep(state.formValues);\n\n // Submit to API (create or update based on approvalRuleID)\n try {\n let data;\n\n if (approvalRuleID) {\n // Update existing approval rule\n data = await updatePurchaseOrderApprovalRule({\n uid: approvalRuleID,\n ...cleanedData,\n });\n } else {\n // Create new approval rule\n data = await createPurchaseOrderApprovalRule(cleanedData);\n }\n\n if (!data.uid) {\n dispatch({\n type: 'SET_SUBMIT_ERROR',\n payload: VALIDATION_ERROR_KEYS.FAILED_TO_CREATE,\n });\n dispatch({ type: 'SET_LOADING', payload: false });\n return;\n }\n\n // Success - call onSubmit callback if provided\n if (onSubmit) {\n onSubmit(state.formValues as any);\n }\n\n if (routeApprovalRulesList) {\n window.location.href = routeApprovalRulesList();\n } else {\n dispatch({ type: 'SET_LOADING', payload: false });\n }\n } catch (error: any) {\n console.error('Failed to save approval rule:', error);\n dispatch({\n type: 'SET_SUBMIT_ERROR',\n payload: error?.message || VALIDATION_ERROR_KEYS.FAILED_TO_CREATE,\n });\n dispatch({ type: 'SET_LOADING', payload: false });\n }\n }, [state.formValues, routeApprovalRulesList, approvalRuleID, onSubmit]);\n\n // Memoized: true if form is loading or permissions not loaded or missing required permission\n const formLoading = useMemo(() => {\n if (state.isLoading || loadingPermissions) return true;\n\n if (\n !permissions?.permissions.viewApprovalRules &&\n !permissions?.permissions.manageApprovalRules\n ) {\n return true;\n }\n\n return false;\n }, [state.isLoading, loadingPermissions, permissions]);\n\n return {\n availableAppliesTo: state.availableAppliesTo,\n availableRequiresApprovalFrom: state.availableRequiresApprovalFrom,\n formValues: state.formValues,\n ruleTypeOptions,\n conditionOperators,\n currencies: state.currencyCodesList,\n appliesToOptions,\n handleSetFormValues,\n handleSubmit,\n handleFieldTouch,\n errors: state.errors,\n touched: state.touched,\n isLoading: state.isLoading,\n formLoading,\n submitError: state.submitError,\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 { useEffect, useState, useMemo } from 'preact/hooks';\nimport { getPurchaseOrderApprovalRule } from '@/b2b-purchase-order/api';\nimport { UseApprovalRuleDetailsProps } from '@/b2b-purchase-order/types/hooks';\nimport { PriceRange } from '@adobe-commerce/elsie/components';\nimport { PurchaseOrderApprovalRuleModel } from '@/b2b-purchase-order/data/models';\nimport { Text } from '@adobe-commerce/elsie/i18n';\n\nexport const useApprovalRuleDetails = ({\n approvalRuleID,\n routeApprovalRulesList,\n}: UseApprovalRuleDetailsProps) => {\n const [loading, setLoading] = useState(true);\n const [approvalRule, setApprovalRule] =\n useState<PurchaseOrderApprovalRuleModel | null>(null);\n\n useEffect(() => {\n if (!approvalRuleID) return;\n\n setLoading(true);\n\n getPurchaseOrderApprovalRule(approvalRuleID)\n .then((data) => {\n if (!data.uid) return;\n\n setApprovalRule(data);\n })\n .catch(() => {\n setApprovalRule(null);\n })\n .finally(() => {\n setLoading(false);\n });\n }, [approvalRuleID]);\n\n const formValues = useMemo(() => {\n if (!approvalRule || loading) return [];\n\n const {\n name,\n status,\n description,\n appliesToRoles,\n approverRoles,\n condition,\n } = approvalRule;\n\n return [\n {\n label: <Text id=\"PurchaseOrders.approvalRuleDetails.fields.ruleName\" />,\n value: name,\n },\n {\n label: <Text id=\"PurchaseOrders.approvalRuleDetails.fields.status\" />,\n value: (\n <Text\n id={`PurchaseOrders.approvalRuleDetails.fields.statusView.${status.toLocaleLowerCase()}`}\n />\n ),\n },\n {\n label: (\n <Text id=\"PurchaseOrders.approvalRuleDetails.fields.description\" />\n ),\n value: description,\n },\n {\n label: (\n <Text id=\"PurchaseOrders.approvalRuleDetails.fields.appliesTo\" />\n ),\n value: (\n <ul>\n {appliesToRoles.map((item) => (\n <li key={item.id}>{item.name}</li>\n ))}\n </ul>\n ),\n },\n {\n label: <Text id=\"PurchaseOrders.approvalRuleDetails.fields.ruleType\" />,\n value: (\n <Text\n id={`PurchaseOrders.approvalRuleDetails.fields.condition.attribute.${condition.attribute.toLocaleLowerCase()}`}\n />\n ),\n },\n {\n label: (\n <>\n <Text\n id={`PurchaseOrders.approvalRuleDetails.fields.condition.attribute.${condition.attribute.toLocaleLowerCase()}`}\n />\n {':'}\n </>\n ),\n value: (\n <div>\n <Text\n id={`PurchaseOrders.approvalRuleDetails.fields.condition.operator.${condition.operator.toLocaleLowerCase()}`}\n />\n <Text id=\"PurchaseOrders.approvalRuleDetails.fields.amount.label\" />\n <PriceRange\n amount={condition.amount.value}\n currency={condition.amount.currency}\n />\n </div>\n ),\n },\n {\n label: (\n <Text id=\"PurchaseOrders.approvalRuleDetails.fields.requiresApprovalFrom\" />\n ),\n value: (\n <ul>\n {approverRoles.map((item) => (\n <li key={item.id}>{item.name}</li>\n ))}\n </ul>\n ),\n },\n ];\n }, [approvalRule, loading]);\n\n const handleRedirectToList = () => {\n window.location.href = routeApprovalRulesList?.() ?? '';\n };\n\n return { handleRedirectToList, loading, formValues };\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 setExpandedRowIndices(new Set());\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 { useEffect, useState } from 'preact/hooks';\nimport { PurchaseOrderModel } from '../data/models';\nimport { events } from '@adobe-commerce/event-bus';\n\nexport const usePurchaseOrderData = () => {\n const [poDataLoading, setPoDataLoading] = useState(true);\n const [purchaseOrderData, setPurchaseOrderData] =\n useState<PurchaseOrderModel | null>(null);\n\n useEffect(() => {\n const event = events.on(\n 'purchase-order/data',\n (po: PurchaseOrderModel) => {\n if (po?.uid) {\n setPurchaseOrderData(po);\n }\n\n setPoDataLoading(false);\n },\n { eager: true }\n );\n\n return () => {\n event?.off();\n };\n }, []);\n\n return { poDataLoading, purchaseOrderData };\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 { useState, useCallback } from 'preact/hooks';\nimport {\n approvePurchaseOrders,\n cancelPurchaseOrders,\n placeOrderForPurchaseOrder,\n rejectPurchaseOrders,\n} from '@/b2b-purchase-order/api';\nimport { InLineAlertProps } from '@adobe-commerce/elsie/components';\nimport {\n UsePurchaseOrderStatusReturn,\n PURCHASE_ORDER_ACTION,\n PURCHASE_ORDER_STATUS,\n} from '@/b2b-purchase-order/types/hooks';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { usePurchaseOrderData } from './usePurchaseOrderData';\nimport { events } from '@adobe-commerce/event-bus';\n\nexport const usePurchaseOrderStatus = (): UsePurchaseOrderStatusReturn => {\n const { poDataLoading, purchaseOrderData } = usePurchaseOrderData();\n\n const t = useText({\n approvalSuccessMessage:\n 'PurchaseOrders.purchaseOrderStatus.alertMessages.success.approval',\n rejectSuccessMessage:\n 'PurchaseOrders.purchaseOrderStatus.alertMessages.success.reject',\n cancelSuccessMessage:\n 'PurchaseOrders.purchaseOrderStatus.alertMessages.success.cancel',\n placeOrderSuccessMessage:\n 'PurchaseOrders.purchaseOrderStatus.alertMessages.success.placeOrder',\n approvalErrorMessage:\n 'PurchaseOrders.purchaseOrderStatus.alertMessages.errors.approval',\n rejectErrorMessage:\n 'PurchaseOrders.purchaseOrderStatus.alertMessages.errors.reject',\n cancelErrorMessage:\n 'PurchaseOrders.purchaseOrderStatus.alertMessages.errors.cancel',\n placeOrderErrorMessage:\n 'PurchaseOrders.purchaseOrderStatus.alertMessages.errors.placeOrder',\n });\n\n const poId = purchaseOrderData?.uid ?? null;\n const status =\n (purchaseOrderData?.status as PURCHASE_ORDER_STATUS) ?? 'PENDING';\n const availableActions =\n (purchaseOrderData?.availableActions as PURCHASE_ORDER_ACTION[]) ?? [];\n\n const [alertType, setAlertType] =\n useState<NonNullable<InLineAlertProps['type']>>('success');\n const [alertMessage, setAlertMessage] = useState('');\n const [loading, setLoading] = useState(false);\n const [isDismissed, setIsDismissed] = useState(true);\n const handleOnDismiss = () => {\n setIsDismissed(true);\n };\n\n const showAlert = useCallback(\n (isSuccess: boolean, actionType: PURCHASE_ORDER_ACTION) => {\n let message = '';\n if (isSuccess) {\n switch (actionType) {\n case 'APPROVE':\n message = t.approvalSuccessMessage;\n break;\n case 'REJECT':\n message = t.rejectSuccessMessage;\n break;\n case 'CANCEL':\n message = t.cancelSuccessMessage;\n break;\n case 'PLACE_ORDER':\n message = t.placeOrderSuccessMessage;\n break;\n }\n setAlertType('success');\n } else {\n switch (actionType) {\n case 'APPROVE':\n message = t.approvalErrorMessage;\n break;\n case 'REJECT':\n message = t.rejectErrorMessage;\n break;\n case 'CANCEL':\n message = t.cancelErrorMessage;\n break;\n case 'PLACE_ORDER':\n message = t.placeOrderErrorMessage;\n break;\n }\n setAlertType('error');\n }\n\n setAlertMessage(message);\n setIsDismissed(false);\n },\n [t]\n );\n\n const handleAction = useCallback(\n async (\n apiFn: (id: string) => Promise<any>,\n actionType: PURCHASE_ORDER_ACTION\n ) => {\n if (!poId) return;\n setLoading(true);\n try {\n await apiFn(poId);\n showAlert(true, actionType);\n } catch {\n showAlert(false, actionType);\n } finally {\n setLoading(false);\n events.emit('purchase-order/refresh', true);\n }\n },\n [poId, showAlert]\n );\n\n const handleApprove = useCallback(\n () => handleAction(approvePurchaseOrders, 'APPROVE'),\n [handleAction]\n );\n const handleReject = useCallback(\n () => handleAction(rejectPurchaseOrders, 'REJECT'),\n [handleAction]\n );\n const handleCancel = useCallback(\n () => handleAction(cancelPurchaseOrders, 'CANCEL'),\n [handleAction]\n );\n const handlePlaceOrder = useCallback(\n () => handleAction(placeOrderForPurchaseOrder, 'PLACE_ORDER'),\n [handleAction]\n );\n\n return {\n poId,\n status,\n availableActions,\n alertType,\n loading,\n poDataLoading,\n isDismissed,\n alertMessage,\n handleOnDismiss,\n handleApprove,\n handleReject,\n handleCancel,\n handlePlaceOrder,\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 { Text } from '@adobe-commerce/elsie/i18n';\nimport { FunctionComponent } from 'preact';\n\nconst ErrorMessage: FunctionComponent<{\n touched?: boolean;\n error?: string;\n className?: string;\n}> = ({ touched = false, error, className = 'error-message' }) => {\n if (!touched || !error) {\n return null;\n }\n\n return (\n <span className={className}>\n <Text id={error} />\n </span>\n );\n};\n\nexport default ErrorMessage;\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 Input,\n Picker,\n TextArea,\n RadioButton,\n Checkbox,\n MultiSelect,\n Button,\n} from '@adobe-commerce/elsie/components';\nimport { ErrorMessage } from '@/b2b-purchase-order/components/ApprovalRuleForm/blocks';\nimport { CustomerRolePermissionsModel } from '@/b2b-purchase-order/data/models';\nimport { classes } from '@adobe-commerce/elsie/lib';\n\nconst Form = ({\n availableRequiresApprovalFrom,\n conditionOperators,\n availableAppliesTo,\n appliesToOptions,\n ruleTypeOptions,\n currencies,\n formValues,\n errors,\n touched,\n isLoading,\n permissions,\n handleSubmit,\n handleFieldTouch,\n handleSetFormValues,\n routeApprovalRulesList,\n t,\n}: {\n availableRequiresApprovalFrom: { id: string; name: string }[];\n conditionOperators: { value: string; text: string }[];\n availableAppliesTo: { id: string; name: string }[];\n appliesToOptions: { value: string; text: string }[];\n ruleTypeOptions: { value: string; text: string }[];\n currencies: { value: string; text: string }[];\n formValues: any;\n errors: Record<string, string>;\n touched: Record<string, boolean>;\n isLoading: boolean;\n permissions?: CustomerRolePermissionsModel;\n handleSubmit: () => void;\n handleFieldTouch: (field: string) => void;\n handleSetFormValues: (field: string, value: any) => void;\n routeApprovalRulesList?: () => string;\n t: Record<string, string>;\n}) => {\n const disabledInputField =\n isLoading || !permissions?.permissions?.viewApprovalRules;\n\n return (\n <form data-testid=\"approval-rule-form\">\n <Checkbox\n data-testid=\"status-toggle\"\n className=\"b2b-purchase-order-approval-rule-form__toggle\"\n disabled={disabledInputField}\n name=\"status\"\n label={t.formEnabled}\n checked={formValues.status === 'ENABLED'}\n onChange={(event) => {\n const value = (event.target as HTMLInputElement).checked;\n\n handleSetFormValues('status', value);\n }}\n />\n <div data-testid=\"name-input-container\">\n <Input\n data-testid=\"name-input\"\n className=\"b2b-purchase-order-approval-rule-form__name-input\"\n disabled={disabledInputField}\n name={'name'}\n floatingLabel={t.inputRuleNameFloatingLabel}\n placeholder={t.inputRuleNamePlaceholder}\n value={formValues.name}\n error={!!(touched.name && errors.name)}\n onChange={(event: Event) => {\n const value = (event.target as HTMLInputElement).value;\n\n handleSetFormValues('name', value);\n }}\n onBlur={() => handleFieldTouch('name')}\n />\n <ErrorMessage touched={touched.name} error={errors.name} />\n </div>\n <TextArea\n data-testid=\"description-textarea\"\n className=\"b2b-purchase-order-approval-rule-form__description\"\n disabled={disabledInputField}\n name=\"description\"\n label={t.textAreaDescriptionLabel}\n value={formValues.description}\n onChange={(event) => {\n const value = (event.target as HTMLTextAreaElement).value;\n handleSetFormValues('description', value);\n }}\n />\n <div\n data-testid=\"applies-to-section\"\n className=\"b2b-purchase-order-approval-rule-form__applies-to\"\n >\n <span className=\"b2b-purchase-order-approval-rule-form__applies-to-title\">\n {t.titleAppliesTo}\n </span>\n {appliesToOptions.map((option, index) => {\n return (\n <RadioButton\n key={option.value}\n data-testid={`applies-to-radio-${index}`}\n disabled={disabledInputField}\n name=\"radio-group\"\n value={option.value}\n label={option.text}\n checked={formValues.roleType === option.value}\n onChange={(event) => {\n const value = (event.target as HTMLInputElement).value;\n handleSetFormValues('roleType', value);\n }}\n />\n );\n })}\n {formValues.roleType === 'specific_roles' ? (\n <div\n data-testid=\"applies-to-multiselect-container\"\n className=\"b2b-purchase-order-approval-rule-form__applies-to-multiselect\"\n >\n <MultiSelect\n data-testid=\"applies-to-multiselect\"\n disabled={disabledInputField}\n name=\"appliesTo\"\n value={[...formValues.appliesTo]}\n options={availableAppliesTo.map((option) => ({\n value: option.id,\n label: option.name,\n }))}\n error={!!(touched.appliesTo && errors.appliesTo)}\n onChange={(value) => {\n handleSetFormValues('appliesTo', value as string[]);\n if (!touched.appliesTo) handleFieldTouch('appliesTo');\n }}\n />\n <ErrorMessage\n touched={touched.appliesTo}\n error={errors.appliesTo}\n />\n </div>\n ) : null}\n </div>\n <div\n data-testid=\"rule-type-section\"\n className=\"b2b-purchase-order-approval-rule-form__rule-type\"\n >\n <span className=\"b2b-purchase-order-approval-rule-form__rule-type-title\">\n {t.titleRuleType}\n </span>\n <Picker\n data-testid=\"rule-type-picker\"\n className=\"b2b-purchase-order-approval-rule-form__rule-type-picker\"\n disabled={disabledInputField}\n name=\"ruleType\"\n value={formValues.condition.attribute}\n options={ruleTypeOptions}\n handleSelect={(event) => {\n const value = (event.target as HTMLSelectElement).value;\n handleSetFormValues('ruleType', value);\n }}\n />\n </div>\n <div\n data-testid=\"rule-condition-section\"\n className=\"b2b-purchase-order-approval-rule-form__rule-condition\"\n >\n <span className=\"b2b-purchase-order-approval-rule-form__rule-condition-title\">\n {\n ruleTypeOptions.find(\n (item) => item.value === formValues.condition.attribute\n )?.text\n }\n </span>\n <div\n className={classes([\n 'b2b-purchase-order-approval-rule-form__rule-condition-container',\n [\n 'b2b-purchase-order-approval-rule-form__rule-condition-container--error',\n !!errors.ruleValue && touched.ruleValue,\n ],\n ])}\n >\n <Picker\n data-testid=\"rule-condition-picker\"\n className=\"b2b-purchase-order-approval-rule-form__rule-condition-picker\"\n disabled={disabledInputField}\n name=\"ruleCondition\"\n value={formValues.condition.operator}\n options={conditionOperators}\n handleSelect={(event) => {\n const value = (event.target as HTMLSelectElement).value;\n handleSetFormValues('ruleCondition', value);\n }}\n />\n <div data-testid=\"rule-value-container\">\n <Input\n data-testid=\"rule-value-input\"\n className=\"b2b-purchase-order-approval-rule-form__rule-value-input\"\n disabled={disabledInputField}\n name=\"ruleValue\"\n floatingLabel={\n formValues.condition.attribute === 'NUMBER_OF_SKUS'\n ? t.inputQuantityFloatingLabel\n : t.inputAmountFloatingLabel\n }\n placeholder={\n formValues.condition.attribute === 'NUMBER_OF_SKUS'\n ? t.inputQuantityPlaceholder\n : t.inputAmountPlaceholder\n }\n value={\n formValues.condition.attribute === 'NUMBER_OF_SKUS'\n ? formValues.condition.quantity\n : formValues.condition.amount.value\n }\n error={!!(touched.ruleValue && errors.ruleValue)}\n onChange={(event) => {\n const value = (event.target as HTMLInputElement).value;\n handleSetFormValues('ruleValue', value);\n }}\n onBlur={() => handleFieldTouch('ruleValue')}\n />\n <ErrorMessage\n touched={touched.ruleValue}\n error={errors.ruleValue}\n />\n </div>\n {formValues.condition.attribute !== 'NUMBER_OF_SKUS' ? (\n <Picker\n data-testid=\"rule-condition-currency-picker\"\n className=\"b2b-purchase-order-approval-rule-form__rule-condition-currency-picker\"\n disabled={disabledInputField}\n name=\"ruleConditionCurrency\"\n value={formValues.condition.amount.currency}\n options={currencies}\n handleSelect={(event) => {\n const value = (event.target as HTMLSelectElement).value;\n handleSetFormValues('ruleConditionCurrency', value);\n }}\n />\n ) : null}\n </div>\n </div>\n <div\n data-testid=\"approval-role-section\"\n className=\"b2b-purchase-order-approval-rule-form__approval-role\"\n >\n <span className=\"b2b-purchase-order-approval-rule-form__approval-role-title\">\n {t.titleRequiresApprovalRole}\n </span>\n <div className=\"b2b-purchase-order-approval-rule-form__approval-role-multiselect\">\n <MultiSelect\n data-testid=\"approvers-multiselect\"\n disabled={disabledInputField}\n name=\"approvers\"\n value={[...formValues.approvers]}\n options={availableRequiresApprovalFrom.map((option) => ({\n value: option.id,\n label: option.name,\n }))}\n error={!!(touched.approvers && errors.approvers)}\n onChange={(value) => {\n handleSetFormValues('approvers', value as string[]);\n if (!touched.approvers) handleFieldTouch('approvers');\n }}\n />\n <ErrorMessage touched={touched.approvers} error={errors.approvers} />\n </div>\n </div>\n <div\n data-testid=\"form-buttons\"\n className=\"b2b-purchase-order-approval-rule-form__buttons\"\n >\n <Button\n data-testid=\"save-button\"\n type=\"button\"\n disabled={disabledInputField}\n onClick={handleSubmit}\n >\n {t.buttonSave}\n </Button>\n\n <Button\n data-testid=\"cancel-button\"\n disabled={isLoading}\n variant=\"secondary\"\n type=\"button\"\n onClick={() => {\n window.location.href = routeApprovalRulesList?.() ?? '';\n }}\n >\n {t.buttonCancel}\n </Button>\n </div>\n </form>\n );\n};\n\nexport default Form;\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 { FunctionComponent } from 'preact';\nimport { classes } from '@adobe-commerce/elsie/lib';\nimport { Card, InLineAlert } from '@adobe-commerce/elsie/components';\nimport {\n useApprovalRuleForm,\n useCustomerRolePermissions,\n} from '@/b2b-purchase-order/hooks';\nimport { ApprovalRuleFormProps } from '@/b2b-purchase-order/types/components';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { Form } from '@/b2b-purchase-order/components/ApprovalRuleForm/blocks';\nimport '@/b2b-purchase-order/components/ApprovalRuleForm/ApprovalRuleForm.css';\nimport {\n PurchaseOrdersHeader,\n FormLoader,\n} from '@/b2b-purchase-order/components';\n\nexport const ApprovalRuleForm: FunctionComponent<ApprovalRuleFormProps> = ({\n className,\n approvalRuleID,\n withHeader,\n withWrapper,\n routeApprovalRulesList,\n onSubmit,\n onChange,\n}) => {\n const t = useText({\n headerText: 'PurchaseOrders.approvalRuleForm.headerText',\n titleAppliesTo: 'PurchaseOrders.approvalRuleForm.titleAppliesTo',\n titleRuleType: 'PurchaseOrders.approvalRuleForm.titleRuleType',\n titleRequiresApprovalRole:\n 'PurchaseOrders.approvalRuleForm.titleRequiresApprovalRole',\n formEnabled: 'PurchaseOrders.approvalRuleForm.fields.enabled',\n formDisabled: 'PurchaseOrders.approvalRuleForm.fields.disabled',\n inputRuleNameFloatingLabel:\n 'PurchaseOrders.approvalRuleForm.fields.inputRuleName.floatingLabel',\n inputRuleNamePlaceholder:\n 'PurchaseOrders.approvalRuleForm.fields.inputRuleName.placeholder',\n textAreaDescriptionLabel:\n 'PurchaseOrders.approvalRuleForm.fields.textAreaDescription.label',\n appliesToAllUsers:\n 'PurchaseOrders.approvalRuleForm.fields.appliesTo.allUsers',\n appliesToSpecificRoles:\n 'PurchaseOrders.approvalRuleForm.fields.appliesTo.specificRoles',\n ruleTypeGrandTotal:\n 'PurchaseOrders.approvalRuleForm.fields.ruleTypeOptions.grandTotal',\n ruleTypeShippingInclTax:\n 'PurchaseOrders.approvalRuleForm.fields.ruleTypeOptions.shippingInclTax',\n ruleTypeNumberOfSkus:\n 'PurchaseOrders.approvalRuleForm.fields.ruleTypeOptions.numberOfSkus',\n conditionOperatorMoreThan:\n 'PurchaseOrders.approvalRuleForm.fields.conditionOperators.moreThan',\n conditionOperatorLessThan:\n 'PurchaseOrders.approvalRuleForm.fields.conditionOperators.lessThan',\n conditionOperatorMoreThanOrEqualTo:\n 'PurchaseOrders.approvalRuleForm.fields.conditionOperators.moreThanOrEqualTo',\n conditionOperatorLessThanOrEqualTo:\n 'PurchaseOrders.approvalRuleForm.fields.conditionOperators.lessThanOrEqualTo',\n inputQuantityFloatingLabel:\n 'PurchaseOrders.approvalRuleForm.fields.inputQuantity.floatingLabel',\n inputQuantityPlaceholder:\n 'PurchaseOrders.approvalRuleForm.fields.inputQuantity.placeholder',\n inputAmountFloatingLabel:\n 'PurchaseOrders.approvalRuleForm.fields.inputAmount.floatingLabel',\n inputAmountPlaceholder:\n 'PurchaseOrders.approvalRuleForm.fields.inputAmount.placeholder',\n buttonCancel: 'PurchaseOrders.approvalRuleForm.fields.buttons.cancel',\n buttonSave: 'PurchaseOrders.approvalRuleForm.fields.buttons.save',\n });\n const { permissions, loadingPermissions } = useCustomerRolePermissions();\n const {\n availableRequiresApprovalFrom,\n conditionOperators,\n availableAppliesTo,\n appliesToOptions,\n ruleTypeOptions,\n currencies,\n formValues,\n errors,\n touched,\n isLoading,\n submitError,\n formLoading,\n handleSubmit,\n handleFieldTouch,\n handleSetFormValues,\n } = useApprovalRuleForm({\n t,\n approvalRuleID,\n loadingPermissions,\n permissions,\n routeApprovalRulesList,\n onSubmit,\n onChange,\n });\n\n if (formLoading) {\n return (\n <FormLoader\n testId=\"b2b-purchase-order-approval-rule-form\"\n className={classes([\n 'b2b-purchase-order-approval-rule-form',\n className,\n ])}\n />\n );\n }\n\n const renderContentForm = (\n <>\n {!!submitError && <InLineAlert heading=\"\" description={submitError} />}\n <Form\n availableRequiresApprovalFrom={availableRequiresApprovalFrom}\n conditionOperators={conditionOperators}\n availableAppliesTo={availableAppliesTo}\n appliesToOptions={appliesToOptions}\n ruleTypeOptions={ruleTypeOptions}\n currencies={currencies}\n formValues={formValues}\n errors={errors}\n touched={touched}\n isLoading={isLoading}\n handleSubmit={handleSubmit}\n handleFieldTouch={handleFieldTouch}\n handleSetFormValues={handleSetFormValues}\n permissions={permissions}\n routeApprovalRulesList={routeApprovalRulesList}\n t={t}\n />\n </>\n );\n\n return (\n <div\n data-testid=\"b2b-purchase-order-approval-rule-form\"\n className={classes(['b2b-purchase-order-approval-rule-form', className])}\n >\n {withHeader ? <PurchaseOrdersHeader headerText={t.headerText} /> : null}\n {withWrapper ? (\n <Card variant=\"secondary\">{renderContentForm}</Card>\n ) : (\n renderContentForm\n )}\n </div>\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 { FunctionComponent } from 'preact';\nimport { classes } from '@adobe-commerce/elsie/lib';\nimport { PurchaseOrderConfirmationContentProps } from '@/b2b-purchase-order/types/components';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport '@/b2b-purchase-order/components/PurchaseOrderConfirmationContent/PurchaseOrderConfirmationContent.css';\n\nexport const PurchaseOrderConfirmationContent: FunctionComponent<\n PurchaseOrderConfirmationContentProps\n> = ({\n className,\n purchaseOrderNumber,\n routePurchaseOrderDetails,\n ...props\n}) => {\n const t = useText({\n title: 'PurchaseOrders.purchaseOrderConfirmation.title',\n messagePrefix: 'PurchaseOrders.purchaseOrderConfirmation.messagePrefix',\n messageSuffix: 'PurchaseOrders.purchaseOrderConfirmation.messageSuffix',\n });\n\n return (\n <div\n {...props}\n className={classes(['purchase-orders-confirmation-content', className])}\n >\n <h2 className=\"purchase-orders-confirmation-content__title\">{t.title}</h2>\n <p className=\"purchase-orders-confirmation-content__message\">\n {t.messagePrefix}{' '}\n <a\n className=\"purchase-orders-confirmation-content__link\"\n href={routePurchaseOrderDetails() ?? ''}\n >\n #{purchaseOrderNumber}\n </a>\n . {t.messageSuffix}\n </p>\n </div>\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 { FunctionComponent } from 'preact';\nimport { classes, Slot } from '@adobe-commerce/elsie/lib';\nimport '@/b2b-purchase-order/components/PurchaseOrderStatusContent/PurchaseOrderStatusContent.css';\nimport { PurchaseOrderStatusContentProps } from '@/b2b-purchase-order/types/components';\nimport { Button } from '@adobe-commerce/elsie/components';\nimport { PURCHASE_ORDER_ACTION } from '@/b2b-purchase-order/types/hooks';\n\nexport const PurchaseOrderStatusContent: FunctionComponent<\n PurchaseOrderStatusContentProps\n> = ({\n slots,\n t,\n loading,\n children,\n availableActions = [],\n handleApprove,\n handleReject,\n handleCancel,\n handlePlaceOrder,\n}) => {\n const renderButtons = availableActions.map((action) => {\n switch (action as PURCHASE_ORDER_ACTION) {\n case 'APPROVE':\n return (\n <Button\n variant=\"secondary\"\n disabled={loading}\n type=\"button\"\n key={action}\n onClick={handleApprove}\n >\n {t.approveButtonText}\n </Button>\n );\n case 'PLACE_ORDER':\n return (\n <Button\n variant=\"secondary\"\n disabled={loading}\n type=\"button\"\n key={action}\n onClick={handlePlaceOrder}\n >\n {t.placeOrderButtonText}\n </Button>\n );\n case 'REJECT':\n return (\n <Button\n variant=\"secondary\"\n disabled={loading}\n type=\"button\"\n key={action}\n onClick={handleReject}\n >\n {t.rejectButtonText}\n </Button>\n );\n case 'CANCEL':\n return (\n <Button\n variant=\"secondary\"\n disabled={loading}\n type=\"button\"\n key={action}\n onClick={handleCancel}\n >\n {t.cancelButtonText}\n </Button>\n );\n default:\n return null;\n }\n });\n\n return (\n <div className={classes(['b2b-purchase-order-status-content'])}>\n <div className={'b2b-purchase-order-status-content__message'}>\n {t.statusMessageText}\n </div>\n {children}\n <div className={'b2b-purchase-order-status-content__actions'}>\n <Slot\n data-testid=\"PurchaseOrderActions\"\n name=\"PurchaseOrderActions\"\n slot={slots?.PurchaseOrderActions}\n context={{\n loading,\n availableActions,\n handleApprove,\n handleReject,\n handleCancel,\n handlePlaceOrder,\n }}\n >\n {renderButtons}\n </Slot>\n </div>\n </div>\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 { FunctionComponent } from 'preact';\nimport { classes } from '@adobe-commerce/elsie/lib';\nimport '@/b2b-purchase-order/components/ApprovalRuleDetailsContent/ApprovalRuleDetailsContent.css';\nimport { ApprovalRuleDetailsContentProps } from '@/b2b-purchase-order/types/components';\n\nexport const ApprovalRuleDetailsContent: FunctionComponent<\n ApprovalRuleDetailsContentProps\n> = ({ formValues }) => {\n return (\n <div\n className={classes(['b2b-purchase-order-approval-rule-details-content'])}\n >\n {formValues.map((item, i) => {\n return (\n <div\n key={i}\n className={classes([\n 'b2b-purchase-order-approval-rule-details-content__item',\n ])}\n >\n <span className=\"b2b-purchase-order-approval-rule-details-content__label\">\n {item.label}\n </span>\n <div className=\"b2b-purchase-order-approval-rule-details-content__value\">\n {item.value}\n </div>\n </div>\n );\n })}\n </div>\n );\n};\n","/********************************************************************\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this \n * file in accordance with the terms of the Adobe license agreement \n * accompanying it. \n *******************************************************************/\n\nimport { FunctionComponent } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\nimport { classes } from '@adobe-commerce/elsie/lib';\nimport '@adobe-commerce/elsie/components/Skeleton/Skeleton.css';\n\nexport interface SkeletonRowProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'size'> {\n fullWidth?: boolean;\n lines?: number;\n size?: 'xsmall' | 'small' | 'medium' | 'large' | 'xlarge';\n variant?: 'heading' | 'row' | 'empty';\n multilineGap?: 'xsmall' | 'small' | 'medium' | 'big' | 'xbig';\n children?: string;\n}\n\nconst SINGLELINE = 1;\n\nexport const SkeletonRow: FunctionComponent<SkeletonRowProps> = ({\n className,\n fullWidth = false,\n lines = SINGLELINE,\n size = 'small',\n variant = 'row',\n children = null,\n multilineGap = 'medium',\n ...props\n}) => {\n const sharedClasses = [\n [`dropin-skeleton-row__${variant}`, variant],\n [`dropin-skeleton-row__${variant}-${size}`, variant && size],\n ];\n\n if (!children && variant === 'empty') {\n return (\n <div\n className={classes([\n 'dropin-skeleton-row dropin-skeleton-row__empty',\n className,\n ])}\n />\n );\n }\n\n if (children) {\n const svg = children.trim();\n return (\n <div\n {...props}\n class={classes([\n 'dropin-skeleton-row',\n [`dropin-skeleton-row--full`, fullWidth],\n className,\n ])}\n // eslint-disable-next-line react/no-danger\n dangerouslySetInnerHTML={{ __html: svg }}\n />\n );\n }\n\n const isMultiline = lines > SINGLELINE;\n\n if (isMultiline === false) {\n return (\n <div\n {...props}\n class={classes([\n 'dropin-skeleton-row',\n [`dropin-skeleton-row--full`, fullWidth],\n 'dropin-skeleton--row__content',\n ...sharedClasses,\n className,\n ])}\n />\n );\n }\n\n return (\n <div\n {...props}\n style={{ '--multiline-gap-spacing': `var(--spacing-${multilineGap})` }}\n class={classes([\n 'dropin-skeleton-row--multiline',\n [`dropin-skeleton-row--full`, fullWidth],\n className,\n ])}\n >\n {Array.from({ length: lines }).map((_, index) => (\n <div\n key={index}\n class={classes([\n 'dropin-skeleton-row',\n [`dropin-skeleton-row--full`, fullWidth],\n 'dropin-skeleton--row__content',\n ...sharedClasses,\n ])}\n />\n ))}\n </div>\n );\n};\n\nexport interface SkeletonProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'size'> {\n rowGap?: 'xsmall' | 'small' | 'medium' | 'big' | 'xbig';\n}\n\nexport const Skeleton: FunctionComponent<SkeletonProps> = ({\n className,\n children,\n rowGap = 'medium',\n ...props\n}) => {\n return (\n <div\n style={{ '--row-gap-spacing': `var(--spacing-${rowGap})` }}\n {...props}\n className={classes(['dropin-skeleton', className])}\n role=\"status\"\n aria-label=\"Loading...\"\n >\n {children}\n </div>\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 { FunctionComponent } from 'preact';\nimport { classes } from '@adobe-commerce/elsie/lib';\nimport {\n Skeleton,\n SkeletonRow,\n} from '@adobe-commerce/elsie/components/Skeleton';\nimport '@/b2b-purchase-order/components/FormLoader/FormLoader.css';\n\nexport interface FormLoaderProps {\n className?: string;\n testId?: string;\n}\n\nexport const FormLoader: FunctionComponent<FormLoaderProps> = ({\n testId = '',\n className = '',\n}) => {\n return (\n <div\n data-testid={testId}\n className={classes(['b2b-purchase-order-form-loader', className])}\n >\n <Skeleton rowGap=\"medium\" data-testid=\"form-loader-root\">\n {/* Status toggle */}\n <SkeletonRow\n size=\"small\"\n variant=\"row\"\n fullWidth\n lines={1}\n style={{ maxWidth: 300 }}\n data-testid=\"form-loader-status-toggle\"\n />\n <SkeletonRow\n size=\"medium\"\n variant=\"row\"\n fullWidth\n lines={1}\n data-testid=\"form-loader-name\"\n />\n <SkeletonRow\n size=\"medium\"\n variant=\"row\"\n fullWidth\n lines={4}\n data-testid=\"form-loader-description\"\n />\n {/* Approval role section */}\n <div\n className=\"approval-rule-form-loader__section\"\n data-testid=\"form-loader-approval-role-section\"\n >\n <SkeletonRow\n size=\"small\"\n variant=\"row\"\n fullWidth\n lines={1}\n data-testid=\"form-loader-approval-role-label\"\n />\n <SkeletonRow\n size=\"small\"\n variant=\"row\"\n fullWidth\n lines={1}\n data-testid=\"form-loader-approval-role-input\"\n />\n </div>\n\n <div\n className=\"approval-rule-form-loader__buttons\"\n data-testid=\"form-loader-buttons\"\n >\n <SkeletonRow\n size=\"medium\"\n variant=\"row\"\n fullWidth\n lines={1}\n style={{ width: 120 }}\n data-testid=\"form-loader-button-save\"\n />\n <SkeletonRow\n size=\"medium\"\n variant=\"row\"\n fullWidth\n lines={1}\n style={{ width: 120 }}\n data-testid=\"form-loader-button-cancel\"\n />\n </div>\n </Skeleton>\n </div>\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 { Fragment, FunctionComponent } from 'preact';\nimport { Text, useText } from '@adobe-commerce/elsie/i18n';\nimport { formatDate } from '@/b2b-purchase-order/lib/formatDate';\nimport { Button } from '@adobe-commerce/elsie/components';\nimport { useState } from 'preact/hooks';\nimport '@/b2b-purchase-order/components/PurchaseOrderCommentsListContent/PurchaseOrderCommentsListContent.css';\nimport { PurchaseOrderCommentsListContentProps } from '@/b2b-purchase-order/types/components';\n\nexport const PurchaseOrderCommentsListContent: FunctionComponent<\n PurchaseOrderCommentsListContentProps\n> = ({ commentsList = [], visibleRecordsLimit = 5 }) => {\n const [recordsLimit, setRecordsLimit] = useState<number>(visibleRecordsLimit);\n const showMore = commentsList.length > recordsLimit;\n const buttonIsHidden = commentsList.length <= visibleRecordsLimit;\n\n const t = useText({\n showMoreLabel: 'PurchaseOrders.comments.view.ariaLabel.showMore',\n showLessLabel: 'PurchaseOrders.comments.view.ariaLabel.showLess',\n });\n\n if (!commentsList.length) {\n return (\n <div className={'b2b-purchase-order-comment-list-content'}>\n <Text id=\"PurchaseOrders.comments.view.emptyText\" />\n </div>\n );\n }\n\n return (\n <div className={'b2b-purchase-order-comment-list-content'}>\n <ul className={'b2b-purchase-order-comment-list-content__list'}>\n {commentsList.slice(0, recordsLimit).map((item, index) => {\n const slicedLength = Math.min(recordsLimit, commentsList.length);\n return (\n <Fragment key={item.uid}>\n <li className={'b2b-purchase-order-comment-list-content__item'}>\n <div\n className={'b2b-purchase-order-comment-list-content__title'}\n >\n {formatDate(item.createdAt)}\n {item.author?.firstname && item.author?.lastname\n ? ` (${item.author.firstname} ${item.author.lastname})`\n : ''}\n </div>\n <div\n className={\n 'b2b-purchase-order-comment-list-content__description'\n }\n >\n {item.text}\n </div>\n </li>\n {index < slicedLength - 1 && (\n <hr\n className={'b2b-purchase-order-comment-list-content__divider'}\n />\n )}\n </Fragment>\n );\n })}\n </ul>\n {!buttonIsHidden && (\n <div className={'b2b-purchase-order-comment-list-content__actions'}>\n <Button\n variant=\"secondary\"\n aria-expanded={!showMore}\n aria-label={showMore ? t.showMoreLabel : t.showLessLabel}\n onClick={() => {\n setRecordsLimit(\n showMore ? commentsList.length : visibleRecordsLimit\n );\n }}\n >\n <Text\n id={`PurchaseOrders.comments.view.buttons.${\n showMore ? 'viewMore' : 'viewLess'\n }`}\n />\n </Button>\n </div>\n )}\n </div>\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 { useState, useMemo, useCallback } from 'preact/hooks';\nimport { FunctionComponent } from 'preact';\nimport { classes } from '@adobe-commerce/elsie/lib';\nimport { Button, TextArea } from '@adobe-commerce/elsie/components';\nimport { addPurchaseOrderComment } from '@/b2b-purchase-order/api';\nimport '@/b2b-purchase-order/components/PurchaseOrderCommentFormContent/PurchaseOrderCommentFormContent.css';\nimport { PurchaseOrderCommentFormContentProps } from '@/b2b-purchase-order/types/components';\nimport { events } from '@adobe-commerce/event-bus';\n\nexport const PurchaseOrderCommentFormContent: FunctionComponent<\n PurchaseOrderCommentFormContentProps\n> = ({ t, purchaseOrderData }) => {\n const [loading, setLoading] = useState(false);\n const [textAreaValue, setTextAreaValue] = useState('');\n const [errorMessage, setErrorMessage] = useState('');\n\n const isSubmitDisabled = useMemo(\n () => !textAreaValue.trim().length || !purchaseOrderData?.uid || loading,\n [textAreaValue, purchaseOrderData, loading]\n );\n\n const handleUpdateCommentValue = useCallback(\n (event: Event) => {\n const value = (event.target as HTMLTextAreaElement).value;\n setTextAreaValue(value);\n if (errorMessage) {\n setErrorMessage('');\n }\n },\n [errorMessage]\n );\n\n const handleSubmitComment = useCallback(() => {\n const uid = purchaseOrderData?.uid ?? '';\n if (!uid || !textAreaValue.trim().length) {\n return;\n }\n\n setLoading(true);\n\n addPurchaseOrderComment(uid, textAreaValue)\n .then((data) => {\n if (data && purchaseOrderData?.uid) {\n events.emit('purchase-order/refresh', true);\n setTextAreaValue('');\n }\n })\n .catch(() => {\n setErrorMessage(\n t.errorMessage || 'Failed to add comment. Please try again.'\n );\n })\n .finally(() => {\n setLoading(false);\n });\n }, [purchaseOrderData, textAreaValue, t]);\n\n return (\n <div className={classes(['b2b-purchase-order-comment-form-content'])}>\n <TextArea\n errorMessage={errorMessage}\n disabled={loading}\n value={textAreaValue}\n label={t.textAreaPlaceholder}\n onChange={handleUpdateCommentValue}\n />\n <Button\n variant=\"primary\"\n disabled={isSubmitDisabled}\n onClick={handleSubmitComment}\n >\n {t.buttonText}\n </Button>\n </div>\n );\n};\n","import * as React from \"react\";\nconst SvgCheckWithCircle = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M0.75 12C0.75 5.78421 5.78421 0.75 12 0.75C18.2158 0.75 23.25 5.78421 23.25 12C23.25 18.2158 18.2158 23.25 12 23.25C5.78421 23.25 0.75 18.2158 0.75 12Z\", stroke: \"currentColor\" }), /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M6.75 12.762L10.2385 15.75L17.25 9\", stroke: \"currentColor\" }));\nexport default SvgCheckWithCircle;\n","import * as React from \"react\";\nconst SvgInfoFilled = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { fillRule: \"evenodd\", clipRule: \"evenodd\", d: \"M0 12C0 5.37931 5.37931 0 12 0C18.6207 0 24 5.37931 24 12C24 18.6207 18.6207 24 12 24C5.37931 24 0 18.6207 0 12ZM11.8885 5.06101C11.1405 5.06101 10.5357 5.66579 10.5357 6.4138V6.57295C10.5835 7.27321 11.1882 7.81433 11.8885 7.76658H12.0795C12.7797 7.70292 13.289 7.09815 13.2413 6.4138C13.2413 5.66579 12.6365 5.06101 11.8885 5.06101ZM13.1935 16.8223H14.1007C14.2599 16.8223 14.4031 16.9655 14.4031 17.1247V17.7294C14.4031 17.9045 14.2599 18.0318 14.1007 18.0318H9.8832C9.70813 18.0318 9.58081 17.8886 9.58081 17.7294V17.1247C9.58081 16.9496 9.72405 16.8223 9.8832 16.8223H10.7904V10.7905H9.8832C9.70813 10.7905 9.58081 10.6472 9.58081 10.4881V9.88329C9.58081 9.70823 9.72405 9.58091 9.8832 9.58091H12.5888C12.923 9.58091 13.1935 9.85146 13.1935 10.1857V16.8223Z\", fill: \"currentColor\" }));\nexport default SvgInfoFilled;\n","import * as React from \"react\";\nconst SvgWarningWithCircle = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M0.75 12C0.75 5.78421 5.78421 0.75 12 0.75C18.2158 0.75 23.25 5.78421 23.25 12C23.25 18.2158 18.2158 23.25 12 23.25C5.78421 23.25 0.75 18.2158 0.75 12Z\", stroke: \"currentColor\" }), /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M11.75 5.88423V4.75H12.25V5.88423L12.0485 13.0713H11.9515L11.75 5.88423ZM11.7994 18.25V16.9868H12.2253V18.25H11.7994Z\", stroke: \"currentColor\" }));\nexport default SvgWarningWithCircle;\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 { Fragment, FunctionComponent } from 'preact';\nimport { classes } from '@adobe-commerce/elsie/lib';\nimport '@/b2b-purchase-order/components/PurchaseOrderApprovalFlowContent/PurchaseOrderApprovalFlowContent.css';\nimport { PurchaseOrderApprovalFlowContentProps } from '@/b2b-purchase-order/types/components';\nimport { Text, useText } from '@adobe-commerce/elsie/i18n';\nimport {\n CheckWithCircle,\n InfoFilled,\n WarningWithCircle,\n} from '@adobe-commerce/elsie/icons';\n\nexport const PurchaseOrderApprovalFlowContent: FunctionComponent<\n PurchaseOrderApprovalFlowContentProps\n> = ({ approvalFlow = [] }) => {\n const t = useText({\n pending: 'PurchaseOrders.approvalFlow.ariaLabels.icons.pending',\n approved: 'PurchaseOrders.approvalFlow.ariaLabels.icons.approved',\n rejected: 'PurchaseOrders.approvalFlow.ariaLabels.icons.rejected',\n });\n if (!approvalFlow?.length) {\n return (\n <div className={'b2b-purchase-order-approval-flow-content'}>\n <Text id=\"PurchaseOrders.approvalFlow.emptyText\" />\n </div>\n );\n }\n\n const getIconWithAriaLabel = (\n type: 'PENDING' | 'APPROVED' | 'REJECTED' | string\n ) => {\n switch (type) {\n case 'PENDING': {\n return (\n <InfoFilled\n className={\n 'b2b-purchase-order-approval-flow-content__icon--pending'\n }\n aria-label={t.pending}\n role=\"img\"\n />\n );\n }\n case 'APPROVED': {\n return (\n <CheckWithCircle\n className={\n 'b2b-purchase-order-approval-flow-content__icon--approved'\n }\n aria-label={t.approved}\n role=\"img\"\n />\n );\n }\n case 'REJECTED': {\n return (\n <WarningWithCircle\n className={\n 'b2b-purchase-order-approval-flow-content__icon--rejected'\n }\n aria-label={t.rejected}\n role=\"img\"\n />\n );\n }\n\n default:\n return null;\n }\n };\n\n return (\n <div className={classes(['b2b-purchase-order-approval-flow-content'])}>\n <ul className={'b2b-purchase-order-approval-flow-content__list'}>\n {approvalFlow.map((item, index) => (\n <Fragment key={index}>\n <li className={'b2b-purchase-order-approval-flow-content__item'}>\n <div\n className={'b2b-purchase-order-approval-flow-content__title'}\n >\n {item.ruleName}\n </div>\n {item.events.map((event, evtIndex) => {\n return (\n <div\n key={evtIndex}\n className={\n 'b2b-purchase-order-approval-flow-content__description'\n }\n >\n {getIconWithAriaLabel(event.status)}\n {event.message}\n </div>\n );\n })}\n </li>\n {index < approvalFlow.length - 1 && (\n <hr\n className={'b2b-purchase-order-approval-flow-content__divider'}\n />\n )}\n </Fragment>\n ))}\n </ul>\n </div>\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 { Fragment, FunctionComponent } from 'preact';\nimport '@/b2b-purchase-order/components/PurchaseOrderHistoryLogContent/PurchaseOrderHistoryLogContent.css';\nimport { PurchaseOrderHistoryLogContentProps } from '@/b2b-purchase-order/types/components';\nimport { Text, useText } from '@adobe-commerce/elsie/i18n';\nimport { formatDate } from '@/b2b-purchase-order/lib/formatDate';\nimport { Button } from '@adobe-commerce/elsie/components';\nimport { useState } from 'preact/hooks';\n\nexport const PurchaseOrderHistoryLogContent: FunctionComponent<\n PurchaseOrderHistoryLogContentProps\n> = ({ historyLogRecords = [], visibleRecordsLimit }) => {\n const [visibleRecordsCount, setVisibleRecordsCount] =\n useState<number>(visibleRecordsLimit);\n const showMore = historyLogRecords.length > visibleRecordsCount;\n const buttonIsHidden = historyLogRecords.length <= visibleRecordsLimit;\n\n const t = useText({\n showMoreLabel: 'PurchaseOrders.historyLog.ariaLabel.showMore',\n showLessLabel: 'PurchaseOrders.historyLog.ariaLabel.showLess',\n });\n\n if (!historyLogRecords.length) {\n return (\n <div className={'b2b-purchase-order-history-log-content'}>\n <Text id=\"PurchaseOrders.historyLog.emptyText\" />\n </div>\n );\n }\n\n return (\n <div className={'b2b-purchase-order-history-log-content'}>\n <ul\n className={'b2b-purchase-order-history-log-content__list'}\n role=\"list\"\n >\n {historyLogRecords.slice(0, visibleRecordsCount).map((item, index) => {\n const slicedLength = Math.min(\n visibleRecordsCount,\n historyLogRecords.length\n );\n return (\n <Fragment key={item.uid}>\n <li className={'b2b-purchase-order-history-log-content__item'}>\n <div\n className={'b2b-purchase-order-history-log-content__title'}\n >\n <Text\n id={`PurchaseOrders.historyLog.status.${item.activity}`}\n fields={{ date: formatDate(item.createdAt) }}\n />\n </div>\n <div\n className={\n 'b2b-purchase-order-history-log-content__description'\n }\n >\n {item.message}\n </div>\n </li>\n {index < slicedLength - 1 && (\n <hr\n className={'b2b-purchase-order-history-log-content__divider'}\n />\n )}\n </Fragment>\n );\n })}\n </ul>\n {!buttonIsHidden && (\n <div className={'b2b-purchase-order-history-log-content__actions'}>\n <Button\n variant=\"secondary\"\n aria-expanded={!showMore}\n aria-label={showMore ? t.showMoreLabel : t.showLessLabel}\n onClick={() => {\n setVisibleRecordsCount(\n showMore ? historyLogRecords.length : visibleRecordsLimit\n );\n }}\n >\n <Text\n id={`PurchaseOrders.historyLog.buttons.${\n showMore ? 'viewMore' : 'viewLess'\n }`}\n />\n </Button>\n </div>\n )}\n </div>\n );\n};\n"],"names":["PurchaseOrdersTable","pageSizeConfig","totalCount","columns","rows","paginationConfig","alertMessageConfig","loading","className","variant","skeletonRowCount","emptyTitle","header","footer","withWrapper","expandedRows","t","useText","alertMessageHeading","alertMessageDescription","alertMessageType","currentPage","totalPages","handlePageChange","pageSizeOptionsList","onChange","selectedPageSizeOption","option","pageSize","from","to","total","getRange","isEmpty","content","jsxs","Fragment","jsx","InLineAlert","Table","Text","Pagination","classes","Picker","_a","Card","PurchaseOrdersHeader","headerText","divider","Header","PurchaseOrdersTableActions","selectedCount","handleRejectSelected","handleApproveSelected","Button","EnumPurchaseOrdersView","defaultPageSizeConfig","defaultColumns","defaultApprovalRulesColumns","defaultCompanyColumns","DEFAULT_PAGE_SIZE","usePurchaseOrders","view","initialPageSize","routePurchaseOrderDetails","setColumns","setRowsData","permissions","loadingPermissions","isCompanyPOsView","isRequireApprovalPOsView","shouldRefetch","setShouldRefetch","useState","selectedOrderIds","setSelectedOrderIds","purchaseOrders","setPurchaseOrders","setPageSizeOptionsList","setLoading","pagination","setPagination","setAlertMessageConfig","expandedRowIndices","setExpandedRowIndices","useEffect","event","events","timer","useCallback","page","prev","handleChangePageSize","size","isAdmin","filterConfig","useMemo","config","selectedPageSize","getPurchaseOrders","data","responsePurchaseOrders","responseCurrentPage","responseTotalPages","_b","responseTotalCount","error","handlePurchaseOrderDetailsRedirect","poNumber","url","isValidUrl","toggleExpandedRow","rowIndex","newSet","handleSelectedOrderId","uid","isChecked","prevSelected","po","handleSelectedOrderIds","rejectPurchaseOrders","err","approvePurchaseOrders","currentColumns","col","formattedPurchaseOrders","isExpanded","createdBy","action","ActionButton","status","Tag","getStatusVariant","_rowDetails","formatDate","Price","_d","_c","_f","_e","finalRows","customRows","transformPermissions","permissionsData","hasPermission","key","permissionValue","PO_PERMISSIONS","purchaseOrderEnabled","value","permission","useCustomerRolePermissions","initialPermissionsData","setPermissionsData","subscription","payload","formReducer","state","newFormValues","updateFormFieldValue","newTouched","allErrors","validateFormFields","newErrors","updateValidationErrors","fieldName","useApprovalRuleForm","approvalRuleID","routeApprovalRulesList","onSubmit","dispatch","useReducer","INITIAL_FORM_STATE","ruleTypeOptions","createRuleTypeOptions","conditionOperators","createConditionOperators","appliesToOptions","createAppliesToOptions","currencyInfo","getPurchaseOrderApprovalRuleMetadata","availableAppliesTo","availableRequiresApprovalFrom","getPurchaseOrderApprovalRule","ruleData","transformToFormValues","VALIDATION_ERROR_KEYS","handleSetFormValues","handleFieldTouch","handleSubmit","REQUIRED_FIELDS_ON_SUBMIT","validationErrors","cleanedData","cleanAndDeep","updatePurchaseOrderApprovalRule","createPurchaseOrderApprovalRule","formLoading","useApprovalRuleDetails","approvalRule","setApprovalRule","formValues","name","description","appliesToRoles","approverRoles","condition","item","PriceRange","useApprovalRulesList","routeApprovalRuleDetails","routeCreateApprovalRule","routeEditApprovalRule","approvalRules","setApprovalRules","getPurchaseOrderApprovalRules","responseApprovalRules","handleCreateUrl","id","type","handleDeleteRule","e","deletePurchaseOrderApprovalRule","modifiedApprovalRules","ar","manageApprovalRules","canManage","role","idx","usePurchaseOrderData","poDataLoading","setPoDataLoading","purchaseOrderData","setPurchaseOrderData","usePurchaseOrderStatus","poId","availableActions","alertType","setAlertType","alertMessage","setAlertMessage","isDismissed","setIsDismissed","handleOnDismiss","showAlert","isSuccess","actionType","message","handleAction","apiFn","handleApprove","handleReject","handleCancel","cancelPurchaseOrders","handlePlaceOrder","placeOrderForPurchaseOrder","ErrorMessage","touched","Form","currencies","errors","isLoading","disabledInputField","Checkbox","Input","TextArea","index","RadioButton","MultiSelect","ApprovalRuleForm","withHeader","submitError","FormLoader","renderContentForm","PurchaseOrderConfirmationContent","purchaseOrderNumber","props","PurchaseOrderStatusContent","slots","children","renderButtons","Slot","ApprovalRuleDetailsContent","i","SINGLELINE","SkeletonRow","fullWidth","lines","multilineGap","sharedClasses","svg","_","Skeleton","rowGap","testId","PurchaseOrderCommentsListContent","commentsList","visibleRecordsLimit","recordsLimit","setRecordsLimit","showMore","buttonIsHidden","slicedLength","PurchaseOrderCommentFormContent","textAreaValue","setTextAreaValue","errorMessage","setErrorMessage","isSubmitDisabled","handleUpdateCommentValue","handleSubmitComment","addPurchaseOrderComment","SvgCheckWithCircle","React","SvgInfoFilled","SvgWarningWithCircle","PurchaseOrderApprovalFlowContent","approvalFlow","getIconWithAriaLabel","InfoFilled","CheckWithCircle","WarningWithCircle","evtIndex","PurchaseOrderHistoryLogContent","historyLogRecords","visibleRecordsCount","setVisibleRecordsCount"],"mappings":"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","x_google_ignoreList":[22,26,27,28]}
@@ -1,4 +1,4 @@
1
1
  /*! Copyright 2026 Adobe
2
2
  All Rights Reserved. */
3
- import{jsx as e,jsxs as u,Fragment as b}from"@dropins/tools/preact-jsx-runtime.js";import{PriceRange as O,Card as T,Button as C}from"@dropins/tools/components.js";import{classes as h}from"@dropins/tools/lib.js";import"@dropins/tools/event-bus.js";import"../chunks/PurchaseOrderHistoryLogContent.js";import{P as L}from"../chunks/PurchaseOrdersHeader.js";import{useState as f,useEffect as x,useMemo as N}from"@dropins/tools/preact-hooks.js";import{g as _}from"../chunks/getPurchaseOrderApprovalRule.js";import{Text as a,useText as g}from"@dropins/tools/i18n.js";import{F as w}from"../chunks/FormLoader.js";import"@dropins/tools/preact.js";import"../chunks/fetch-error.js";import"@dropins/tools/fetch-graphql.js";import"../chunks/transform-purchase-order-approval-rule.js";const y=({approvalRuleID:l,routeApprovalRulesList:r})=>{const[t,i]=f(!0),[o,c]=f(null);x(()=>{l&&(i(!0),_(l).then(s=>{s.uid&&c(s)}).catch(()=>{c(null)}).finally(()=>{i(!1)}))},[l]);const m=N(()=>{if(!o||t)return[];const{name:s,status:p,description:R,appliesToRoles:P,approverRoles:D,condition:d}=o;return[{label:e(a,{id:"PurchaseOrders.approvalRuleDetails.fields.ruleName"}),value:s},{label:e(a,{id:"PurchaseOrders.approvalRuleDetails.fields.status"}),value:e(a,{id:`PurchaseOrders.approvalRuleDetails.fields.statusView.${p.toLocaleLowerCase()}`})},{label:e(a,{id:"PurchaseOrders.approvalRuleDetails.fields.description"}),value:R},{label:e(a,{id:"PurchaseOrders.approvalRuleDetails.fields.appliesTo"}),value:e("ul",{children:P.map(n=>e("li",{children:n.name},n.id))})},{label:e(a,{id:"PurchaseOrders.approvalRuleDetails.fields.ruleType"}),value:e(a,{id:`PurchaseOrders.approvalRuleDetails.fields.condition.attribute.${d.attribute.toLocaleLowerCase()}`})},{label:u(b,{children:[e(a,{id:`PurchaseOrders.approvalRuleDetails.fields.condition.attribute.${d.attribute.toLocaleLowerCase()}`}),":"]}),value:u("div",{children:[e(a,{id:`PurchaseOrders.approvalRuleDetails.fields.condition.operator.${d.operator.toLocaleLowerCase()}`}),e(a,{id:"PurchaseOrders.approvalRuleDetails.fields.amount.label"}),e(O,{amount:d.amount.value,currency:d.amount.currency})]})},{label:e(a,{id:"PurchaseOrders.approvalRuleDetails.fields.requiresApprovalFrom"}),value:e("ul",{children:D.map(n=>e("li",{children:n.name},n.id))})}]},[o,t]);return{handleRedirectToList:()=>{window.location.href=(r==null?void 0:r())??""},loading:t,formValues:m}},F=({formValues:l})=>e("div",{className:h(["b2b-purchase-order-approval-rule-details-content"]),children:l.map((r,t)=>u("div",{className:h(["b2b-purchase-order-approval-rule-details-content__item"]),children:[e("span",{className:"b2b-purchase-order-approval-rule-details-content__label",children:r.label}),e("div",{className:"b2b-purchase-order-approval-rule-details-content__value",children:r.value})]},t))}),K=({withHeader:l=!0,withWrapper:r=!0,className:t,approvalRuleID:i,routeApprovalRulesList:o})=>{const c=g({headerText:"PurchaseOrders.approvalRuleDetails.containerTitle"}),{handleRedirectToList:m,loading:v,formValues:s}=y({routeApprovalRulesList:o,approvalRuleID:i});if(!i)return null;const p=v?e(w,{className:"approval-rule-details--loader","data-testid":"approval-rule-details-container--loader"}):u(b,{children:[e(F,{formValues:s}),e(C,{className:"approval-rule-details__button",onClick:m,children:e(a,{id:"PurchaseOrders.approvalRuleDetails.buttons.back"})})]});return u("div",{className:h(["approval-rule-details",t]),"data-testid":"approval-rule-details-container",children:[l?e(L,{headerText:c.headerText}):null,r?e(T,{variant:"secondary","data-testid":"approvalRuleDetailsCard",children:p}):p]})};export{K as ApprovalRuleDetails,K as default};
3
+ import{jsxs as t,jsx as e,Fragment as c}from"@dropins/tools/preact-jsx-runtime.js";import{Card as m,Button as v}from"@dropins/tools/components.js";import{classes as h}from"@dropins/tools/lib.js";import"@dropins/tools/event-bus.js";import{n as f,P as x,o as T,F as D}from"../chunks/components.js";import"@dropins/tools/preact-hooks.js";import"@dropins/tools/preact.js";import{useText as R,Text as C}from"@dropins/tools/i18n.js";import"../api.js";import"@dropins/tools/fetch-graphql.js";import"@dropins/tools/preact-compat.js";const y=({withHeader:l=!0,withWrapper:o=!0,className:s,approvalRuleID:a,routeApprovalRulesList:i})=>{const d=R({headerText:"PurchaseOrders.approvalRuleDetails.containerTitle"}),{handleRedirectToList:n,loading:p,formValues:u}=f({routeApprovalRulesList:i,approvalRuleID:a});if(!a)return null;const r=p?e(D,{className:"approval-rule-details--loader","data-testid":"approval-rule-details-container--loader"}):t(c,{children:[e(T,{formValues:u}),e(v,{className:"approval-rule-details__button",onClick:n,children:e(C,{id:"PurchaseOrders.approvalRuleDetails.buttons.back"})})]});return t("div",{className:h(["approval-rule-details",s]),"data-testid":"approval-rule-details-container",children:[l?e(x,{headerText:d.headerText}):null,o?e(m,{variant:"secondary","data-testid":"approvalRuleDetailsCard",children:r}):r]})};export{y as ApprovalRuleDetails,y as default};
4
4
  //# sourceMappingURL=ApprovalRuleDetails.js.map