@dropins/storefront-requisition-list 0.6.0-beta → 0.8.0-beta

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 (80) hide show
  1. package/api/addProductsToRequisitionList/addProductsToRequisitionList.d.ts +11 -2
  2. package/api/getRequisitionList/graphql/refineProduct.d.ts +18 -0
  3. package/api/getStoreConfig/{isRequisitionListEnabled.d.ts → getStoreConfig.d.ts} +2 -2
  4. package/api/getStoreConfig/graphql/storeConfigQuery.d.ts +1 -1
  5. package/api/getStoreConfig/index.d.ts +1 -1
  6. package/api/updateRequisitionList/index.d.ts +1 -1
  7. package/api/updateRequisitionList/updateRequisitionList.d.ts +1 -1
  8. package/api.js +3 -2
  9. package/api.js.map +1 -1
  10. package/chunks/PageSizePicker.js +1 -1
  11. package/chunks/PageSizePicker.js.map +1 -1
  12. package/chunks/RequisitionListActions.js +4 -0
  13. package/chunks/RequisitionListActions.js.map +1 -0
  14. package/chunks/RequisitionListForm.js +1 -37
  15. package/chunks/RequisitionListForm.js.map +1 -1
  16. package/chunks/RequisitionListForm2.js +21 -0
  17. package/chunks/RequisitionListForm2.js.map +1 -0
  18. package/chunks/RequisitionListHeader.js +4 -0
  19. package/chunks/RequisitionListHeader.js.map +1 -0
  20. package/chunks/RequisitionListModal.js +4 -0
  21. package/chunks/RequisitionListModal.js.map +1 -0
  22. package/chunks/RequisitionListView.js +4 -0
  23. package/chunks/RequisitionListView.js.map +1 -0
  24. package/chunks/addRequisitionListItemsToCart.js +40 -14
  25. package/chunks/addRequisitionListItemsToCart.js.map +1 -1
  26. package/chunks/deleteRequisitionList.js +1 -1
  27. package/chunks/deleteRequisitionList.js.map +1 -1
  28. package/chunks/getRequisitionLists.js +1 -1
  29. package/chunks/getRequisitionLists.js.map +1 -1
  30. package/chunks/state.js +4 -0
  31. package/chunks/state.js.map +1 -0
  32. package/chunks/updateRequisitionList.js +108 -0
  33. package/chunks/updateRequisitionList.js.map +1 -0
  34. package/components/NotFound/NotFound.d.ts +11 -0
  35. package/{containers/RequisitionListNames → components/NotFound}/index.d.ts +2 -2
  36. package/components/RequisitionListHeader/RequisitionListHeader.d.ts +20 -0
  37. package/components/RequisitionListHeader/index.d.ts +19 -0
  38. package/components/index.d.ts +2 -0
  39. package/containers/RequisitionListForm.js +1 -1
  40. package/containers/RequisitionListGrid/RequisitionListGrid.d.ts +0 -2
  41. package/containers/RequisitionListGrid.js +1 -1
  42. package/containers/RequisitionListGrid.js.map +1 -1
  43. package/containers/RequisitionListHeader/RequisitionListHeader.d.ts +10 -0
  44. package/containers/RequisitionListHeader/index.d.ts +19 -0
  45. package/containers/RequisitionListHeader.d.ts +1 -0
  46. package/containers/RequisitionListHeader.js +4 -0
  47. package/containers/RequisitionListHeader.js.map +1 -0
  48. package/containers/RequisitionListSelector/RequisitionListSelector.d.ts +12 -0
  49. package/containers/RequisitionListSelector/index.d.ts +19 -0
  50. package/containers/RequisitionListSelector.d.ts +3 -0
  51. package/containers/RequisitionListSelector.js +23 -0
  52. package/containers/RequisitionListSelector.js.map +1 -0
  53. package/containers/RequisitionListView/RequisitionListView.d.ts +12 -5
  54. package/containers/RequisitionListView.js +1 -1
  55. package/containers/RequisitionListView.js.map +1 -1
  56. package/containers/index.d.ts +2 -1
  57. package/data/models/item.d.ts +89 -66
  58. package/data/transforms/transform-requisition-list.d.ts +8 -68
  59. package/hooks/index.d.ts +2 -0
  60. package/hooks/useRequisitionListEnabled.d.ts +20 -0
  61. package/hooks/useRequisitionListGrid.d.ts +1 -2
  62. package/hooks/useRequisitionListSelectedItems.d.ts +3 -3
  63. package/hooks/useRequisitionLists.d.ts +7 -0
  64. package/i18n/en_US.json.d.ts +32 -10
  65. package/lib/constants.d.ts +28 -0
  66. package/lib/state.d.ts +16 -16
  67. package/lib/validate-uid.d.ts +25 -0
  68. package/package.json +1 -1
  69. package/render.js +4 -3
  70. package/render.js.map +1 -1
  71. package/chunks/PageSizePicker2.js +0 -4
  72. package/chunks/PageSizePicker2.js.map +0 -1
  73. package/chunks/RequisitionListItemsFragment.graphql.js +0 -75
  74. package/chunks/RequisitionListItemsFragment.graphql.js.map +0 -1
  75. package/chunks/transform-requisition-list.js +0 -12
  76. package/chunks/transform-requisition-list.js.map +0 -1
  77. package/containers/RequisitionListNames/RequisitionListNames.d.ts +0 -15
  78. package/containers/RequisitionListNames.d.ts +0 -3
  79. package/containers/RequisitionListNames.js +0 -23
  80. package/containers/RequisitionListNames.js.map +0 -1
@@ -1,4 +1,4 @@
1
1
  /*! Copyright 2025 Adobe
2
2
  All Rights Reserved. */
3
- import{jsx as i,jsxs as g,Fragment as U}from"@dropins/tools/preact-jsx-runtime.js";import*as v from"@dropins/tools/preact-compat.js";import{useState as P,useCallback as h,useEffect as H,useMemo as W}from"@dropins/tools/preact-compat.js";import{Card as F,Button as E,Header as Q,InLineAlert as X,Table as Y,Pagination as Z,Icon as $,Modal as I,ProgressSpinner as ii}from"@dropins/tools/components.js";import{Slot as ei,classes as x,VComponent as ti}from"@dropins/tools/lib.js";import"@dropins/tools/preact-hooks.js";/* empty css */import{R as G}from"../chunks/RequisitionListForm.js";import{u as ni}from"../chunks/PageSizePicker2.js";import{events as _}from"@dropins/tools/event-bus.js";import"@dropins/tools/preact.js";import{E as si,P as ai}from"../chunks/PageSizePicker.js";import{useText as T}from"@dropins/tools/i18n.js";import{d as oi}from"../chunks/deleteRequisitionList.js";import{g as O}from"../chunks/getRequisitionLists.js";import"../chunks/transform-requisition-list.js";import"@dropins/tools/fetch-graphql.js";function ri(l,r,s){const a=T({actionDelete:"RequisitionList.RequisitionListItem.actionDelete",actionUpdate:"RequisitionList.RequisitionListItem.actionUpdate"}),[e,q]=P(l),[n,d]=P(null),[C,f]=P(!1),[b,R]=P(!1),L=h(t=>{d(t),f(!1)},[]),w=h(()=>d(null),[]),m=h(()=>{f(!0),d(null)},[]),A=h(()=>f(!1),[]),c=h(async(t=(S=>(S=e==null?void 0:e.page_info)==null?void 0:S.current_page)()??1,y=(k=>(k=e==null?void 0:e.page_info)==null?void 0:k.page_size)()??10)=>{var z,B,M;R(!0);try{const p=await O(t,y),D=((z=p==null?void 0:p.page_info)==null?void 0:z.current_page)??1,V=((B=p==null?void 0:p.page_info)==null?void 0:B.total_pages)??0;if(!((((M=p==null?void 0:p.items)==null?void 0:M.length)??0)>0)&&D>1&&V>=D-1){const J=D-1,K=await O(J,y);q(K)}else q(p)}finally{R(!1)}},[e]);H(()=>{e||c(1)},[e,c]);const o=h(t=>c(t),[c]),N=h(async t=>{await c(1,t)},[c]),u=W(()=>((e==null?void 0:e.items)??[]).map(t=>{const y=n===t.uid;return{name:g("div",{className:"requisition-list-grid-wrapper__name",children:[i("div",{className:"requisition-list-grid-wrapper__name__title",children:i("a",{href:"#",onClick:S=>{if(S.preventDefault(),s){const k=s(t.uid);typeof k=="string"&&(window.location.href=k)}},children:t.name})}),t.description&&i("div",{className:"requisition-list-grid-wrapper__name__description",children:t.description})]}),items_count:t.items_count,last_updated:new Date(t.updated_at).toLocaleString(),actions:g("div",{className:"requisition-list-grid-wrapper__actions",children:[i(E,{variant:"tertiary",type:"button","data-testid":"update-button",onClick:()=>L(t.uid),children:a.actionUpdate}),i(E,{variant:"tertiary",type:"button","data-testid":"delete-button",onClick:()=>r==null?void 0:r.handleOpenModal(t),children:a.actionDelete})]}),_rowDetails:y?i(F,{variant:"secondary",className:"requisition-list-grid-wrapper__form-row",children:i(G,{mode:"update",requisitionListUid:t.uid,defaultValues:{name:t.name,description:t.description},onSuccess:async()=>{await o(),_.emit("requisitionList/alert",{action:"update",type:"success",context:"requisitionList"}),d(null)},onError:()=>{_.emit("requisitionList/alert",{action:"update",type:"error",context:"requisitionList"})},onCancel:w})}):void 0}}),[e==null?void 0:e.items,n,L,w,a.actionUpdate,a.actionDelete,r,o,s]),j=W(()=>new Set(u.map((t,y)=>t._rowDetails?y:-1).filter(t=>t>=0)),[u]);return{rows:u,expandedRows:j,isLoading:b||!e,pageInfo:e==null?void 0:e.page_info,handlePageChange:o,handlePageSizeChange:N,isAdding:C,handleAddNew:m,handleCancelCreate:A}}const xi=({requisitionLists:l,routeRequisitionListDetails:r,slots:s})=>{const[a,e]=P({isOpen:!1,isLoading:!1,rl:null}),q=u=>e({isOpen:!0,isLoading:!1,rl:u}),n=()=>e({isOpen:!1,isLoading:!1,rl:null}),d=async()=>{a.rl&&(e(u=>({...u,isLoading:!0})),await oi(a.rl.uid).then(async()=>{_.emit("requisitionList/alert",{type:"success",action:"delete",context:"requisitionList"})}).catch(()=>{_.emit("requisitionList/alert",{type:"error",action:"delete",context:"requisitionList"})}).finally(async()=>{await L(),n()}))},{rows:C,expandedRows:f,isLoading:b,pageInfo:R,handlePageChange:L,handlePageSizeChange:w,isAdding:m,handleAddNew:A,handleCancelCreate:c}=ri(l,{handleOpenModal:q},r),o=T({containerTitle:"RequisitionList.containerTitle",deleteRequisitionListTitle:"RequisitionList.RequisitionListWrapper.deleteRequisitionListTitle",deleteRequisitionListMessage:"RequisitionList.RequisitionListWrapper.deleteRequisitionListMessage",cancelAction:"RequisitionList.RequisitionListWrapper.cancelAction",confirmAction:"RequisitionList.RequisitionListWrapper.confirmAction"}),N=h(()=>s!=null&&s.Header?i(ei,{name:"Header","aria-label":o.containerTitle,title:o.containerTitle,slot:s.Header}):i(Q,{"aria-label":o.containerTitle,role:"region",title:o.containerTitle}),[s,o.containerTitle]);return g(U,{children:[i(di,{header:N(),rows:C,expandedRows:f,skeletonRowCount:10,isLoading:b,pageInfo:R,handlePageChange:L,handlePageSizeChange:w,defaultPageSize:10,isAdding:m,handleAddNew:A,handleCancelCreate:c}),a.isOpen&&i(ui,{isOpen:!0,isLoading:a.isLoading,title:o.deleteRequisitionListTitle,modalContent:o.deleteRequisitionListMessage,confirmBtnCaption:o.confirmAction,closeBtnCaption:o.cancelAction,handleModalOnClose:n,handleModalOnConfirm:d})]})},li=l=>v.createElement("svg",{id:"Icon_Add_Base","data-name":"Icon \\u2013 Add \\u2013 Base",xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",...l},v.createElement("g",{id:"Large"},v.createElement("rect",{id:"Placement_area","data-name":"Placement area",width:24,height:24,fill:"#fff",opacity:0}),v.createElement("g",{id:"Add_icon","data-name":"Add icon",transform:"translate(9.734 9.737)"},v.createElement("line",{vectorEffect:"non-scaling-stroke",id:"Line_579","data-name":"Line 579",y2:12.7,transform:"translate(2.216 -4.087)",fill:"none",stroke:"currentColor"}),v.createElement("line",{vectorEffect:"non-scaling-stroke",id:"Line_580","data-name":"Line 580",x2:12.7,transform:"translate(-4.079 2.263)",fill:"none",stroke:"currentColor"})))),di=({className:l,isLoading:r=!1,header:s,rows:a=[],expandedRows:e,skeletonRowCount:q=10,pageInfo:n,handlePageChange:d,handlePageSizeChange:C,defaultPageSize:f=10,isAdding:b,handleAddNew:R,handleCancelCreate:L,...w})=>{const m=T({name:"RequisitionList.RequisitionListWrapper.name",itemsCount:"RequisitionList.RequisitionListWrapper.itemsCount",lastUpdated:"RequisitionList.RequisitionListWrapper.lastUpdated",actions:"RequisitionList.RequisitionListWrapper.actions",emptyList:"RequisitionList.RequisitionListWrapper.emptyList"}),A=((n==null?void 0:n.total_pages)??0)>0,c=!r&&a.length===0&&!A,{alert:o,setAlert:N,handleRequisitionListAlert:u}=ni();return H(()=>{_.on("requisitionList/alert",u)},[u]),g("div",{...w,className:x(["requisition-list-grid-wrapper",l]),"data-testid":"requisition-list-grid-wrapper",children:[s&&i("div",{className:x(["requisition-list-grid-wrapper__header",l]),"data-testid":"requisition-list-grid-wrapper-header",children:i(ti,{node:s})}),o&&i(U,{children:i(X,{heading:o.description,type:o.type,variant:"primary",onDismiss:()=>N(null)})}),c?i(si,{textContent:m.emptyList}):g(U,{children:[i(Y,{columns:[{key:"name",label:m.name},{key:"items_count",label:m.itemsCount},{key:"last_updated",label:m.lastUpdated},{key:"actions",label:m.actions}],rowData:a,expandedRows:e,loading:r,skeletonRowCount:q}),i("div",{className:x(["requisition-list-grid-wrapper__pagination",l]),children:g("div",{className:"requisition-list-grid-wrapper__pagination-controls",children:[i(ai,{currentPageSize:(n==null?void 0:n.page_size)||f,onPageSizeChange:C||(()=>Promise.resolve()),disabled:r}),n&&n.total_pages>1&&i(Z,{totalPages:n.total_pages,currentPage:n.current_page,onChange:d})]})})]}),i("div",{className:x(["requisition-list-grid-wrapper__add-new",l]),children:b?i(F,{variant:"secondary",children:i(G,{mode:"create",onSuccess:async()=>{await d(),L(),_.emit("requisitionList/alert",{type:"success",action:"create",context:"requisitionList"})},onError:()=>{_.emit("requisitionList/alert",{type:"error",action:"create",context:"requisitionList"})},onCancel:L})}):i(ci,{onAddNew:R})})]})},ci=({selectable:l,className:r,onAddNew:s})=>{const a=T({addNewReqListBtn:"RequisitionList.AddNewReqList.addNewReqListBtn"});return g("button",{type:"button","aria-label":a.addNewReqListBtn,role:"button",className:x(["requisition-list-actions",["requisition-list-actions--selectable",l],r]),"data-testid":"requisition-list-actions-button",onClick:s,children:[i("span",{className:"requisition-list-actions__title","data-testid":"requisition-list-actions-button-text",children:a.addNewReqListBtn}),i($,{source:li,size:"32"})]})},ui=({isOpen:l,isLoading:r,title:s,modalContent:a,closeBtnCaption:e,confirmBtnCaption:q,handleModalOnClose:n,handleModalOnConfirm:d})=>l?i(I,{className:"requisition-list-modal--overlay","data-testid":"requisition-list-modal",size:"medium",centered:!1,title:s,onClose:n,backgroundDim:!0,clickToDismiss:!0,escapeToDismiss:!0,role:"dialog","aria-label":s,children:g("div",{className:"requisition-list-modal",children:[r?i("div",{className:"requisition-list-modal__spinner","data-testid":"progress-spinner",children:i(ii,{stroke:"4",size:"large"})}):null,i("p",{children:a}),g("div",{className:"requisition-list-modal__buttons",children:[n&&i(E,{"data-testid":"rl-modal-close-button",type:"button",onClick:n,variant:"secondary",disabled:r,children:e}),d&&i(E,{"data-testid":"rl-modal-confirm-button",type:"button",onClick:d,disabled:r,children:q})]})]})}):null;export{xi as RequisitionListGrid,xi as default};
3
+ import{jsx as t,jsxs as A,Fragment as N}from"@dropins/tools/preact-jsx-runtime.js";import{useState as T,useCallback as g,useEffect as W,useMemo as b}from"@dropins/tools/preact-compat.js";import{Card as F,Button as z,Header as V,InLineAlert as Z,Table as J,Pagination as K}from"@dropins/tools/components.js";import{Slot as Q,classes as U,VComponent as X}from"@dropins/tools/lib.js";import"@dropins/tools/preact-hooks.js";import{D as E}from"../chunks/RequisitionListForm.js";import{R as H}from"../chunks/RequisitionListForm2.js";import"../chunks/state.js";import{events as L}from"@dropins/tools/event-bus.js";import{u as Y,E as $}from"../chunks/RequisitionListView.js";import"@dropins/tools/preact.js";import{R as I}from"../chunks/RequisitionListActions.js";import{R as ii}from"../chunks/RequisitionListModal.js";import{P as ei}from"../chunks/PageSizePicker.js";import{useText as O}from"@dropins/tools/i18n.js";import{d as ti}from"../chunks/deleteRequisitionList.js";import{g as k}from"../chunks/getRequisitionLists.js";import"../chunks/updateRequisitionList.js";import"@dropins/tools/fetch-graphql.js";function ni(l,a){const o=O({actionDelete:"RequisitionList.RequisitionListItem.actionDelete",actionUpdate:"RequisitionList.RequisitionListItem.actionUpdate"}),[e,q]=T(null),[h,n]=T(null),[y,f]=T(!1),[P,C]=T(!1),R=g(i=>{n(i),f(!1)},[]),_=g(()=>n(null),[]),x=g(()=>{f(!0),n(null)},[]),u=g(()=>f(!1),[]),c=g(async(i,r)=>{var v,m,S;C(!0);try{const d=await k(i,r),D=((v=d==null?void 0:d.page_info)==null?void 0:v.current_page)??1,G=((m=d==null?void 0:d.page_info)==null?void 0:m.total_pages)??0;if(!((((S=d==null?void 0:d.items)==null?void 0:S.length)??0)>0)&&D>1&&G>=D-1){const B=D-1,j=await k(B,r);q(j)}else q(d)}finally{C(!1)}},[]);W(()=>{const i=L.on("requisitionLists/data",r=>{r&&r.items&&q(r)},{eager:!0});return()=>{i==null||i.off()}},[]),W(()=>{e||c(1,E)},[e,c]);const s=g(i=>{var m,S;const r=i??((m=e==null?void 0:e.page_info)==null?void 0:m.current_page)??1,v=((S=e==null?void 0:e.page_info)==null?void 0:S.page_size)??E;return c(r,v)},[c,e]),w=g(async i=>{await c(1,i)},[c]),p=b(()=>((e==null?void 0:e.items)??[]).map(i=>{const r=h===i.uid;return{name:A("div",{className:"requisition-list-grid-wrapper__name",children:[t("div",{className:"requisition-list-grid-wrapper__name__title",children:t("a",{href:"#",onClick:v=>{if(v.preventDefault(),a){const m=a(i.uid);typeof m=="string"&&(window.location.href=m)}},children:i.name})}),i.description&&t("div",{className:"requisition-list-grid-wrapper__name__description",children:i.description})]}),items_count:i.items_count,last_updated:new Date(i.updated_at).toLocaleString(),actions:A("div",{className:"requisition-list-grid-wrapper__actions",children:[t(z,{variant:"tertiary",type:"button","data-testid":"update-button",onClick:()=>R(i.uid),children:o.actionUpdate}),t(z,{variant:"tertiary",type:"button","data-testid":"delete-button",onClick:()=>l==null?void 0:l.handleOpenModal(i),children:o.actionDelete})]}),_rowDetails:r?t(F,{variant:"secondary",className:"requisition-list-grid-wrapper__form-row",children:t(H,{mode:"update",requisitionListUid:i.uid,defaultValues:{name:i.name,description:i.description},onSuccess:async()=>{await s(),L.emit("requisitionList/alert",{action:"update",type:"success",context:"requisitionList"}),n(null)},onError:()=>{L.emit("requisitionList/alert",{action:"update",type:"error",context:"requisitionList"})},onCancel:_})}):void 0}}),[e==null?void 0:e.items,h,R,_,o.actionUpdate,o.actionDelete,l,s,a]),M=b(()=>new Set(p.map((i,r)=>i._rowDetails?r:-1).filter(i=>i>=0)),[p]);return{rows:p,expandedRows:M,isLoading:P||!e,pageInfo:e==null?void 0:e.page_info,handlePageChange:s,handlePageSizeChange:w,isAdding:y,handleAddNew:x,handleCancelCreate:u}}const Ai=({routeRequisitionListDetails:l,slots:a})=>{const[o,e]=T({isOpen:!1,isLoading:!1,rl:null}),q=p=>e({isOpen:!0,isLoading:!1,rl:p}),h=()=>e({isOpen:!1,isLoading:!1,rl:null}),n=async()=>{o.rl&&(e(p=>({...p,isLoading:!0})),await ti(o.rl.uid).then(async()=>{L.emit("requisitionList/alert",{type:"success",action:"delete",context:"requisitionList"})}).catch(()=>{L.emit("requisitionList/alert",{type:"error",action:"delete",context:"requisitionList"})}).finally(async()=>{await R(),h()}))},{rows:y,expandedRows:f,isLoading:P,pageInfo:C,handlePageChange:R,handlePageSizeChange:_,isAdding:x,handleAddNew:u,handleCancelCreate:c}=ni({handleOpenModal:q},l),s=O({containerTitle:"RequisitionList.containerTitle",deleteRequisitionListTitle:"RequisitionList.RequisitionListWrapper.deleteRequisitionListTitle",deleteRequisitionListMessage:"RequisitionList.RequisitionListWrapper.deleteRequisitionListMessage",cancelAction:"RequisitionList.RequisitionListWrapper.cancelAction",confirmAction:"RequisitionList.RequisitionListWrapper.confirmAction"}),w=g(()=>a!=null&&a.Header?t(Q,{name:"Header","aria-label":s.containerTitle,title:s.containerTitle,slot:a.Header}):t(V,{"aria-label":s.containerTitle,role:"region",title:s.containerTitle}),[a,s.containerTitle]);return A(N,{children:[t(si,{header:w(),rows:y,expandedRows:f,skeletonRowCount:10,isLoading:P,pageInfo:C,handlePageChange:R,handlePageSizeChange:_,defaultPageSize:10,isAdding:x,handleAddNew:u,handleCancelCreate:c}),o.isOpen&&t(ii,{isOpen:!0,isLoading:o.isLoading,title:s.deleteRequisitionListTitle,modalContent:s.deleteRequisitionListMessage,confirmBtnCaption:s.confirmAction,closeBtnCaption:s.cancelAction,handleModalOnClose:h,handleModalOnConfirm:n})]})},si=({className:l,isLoading:a=!1,header:o,rows:e=[],expandedRows:q,skeletonRowCount:h=10,pageInfo:n,handlePageChange:y,handlePageSizeChange:f,defaultPageSize:P=10,isAdding:C,handleAddNew:R,handleCancelCreate:_,...x})=>{const u=O({name:"RequisitionList.RequisitionListWrapper.name",itemsCount:"RequisitionList.RequisitionListWrapper.itemsCount",lastUpdated:"RequisitionList.RequisitionListWrapper.lastUpdated",actions:"RequisitionList.RequisitionListWrapper.actions",emptyList:"RequisitionList.RequisitionListWrapper.emptyList"}),c=((n==null?void 0:n.total_pages)??0)>0,s=!a&&e.length===0&&!c,{alert:w,setAlert:p,handleRequisitionListAlert:M}=Y();return W(()=>{L.on("requisitionList/alert",M)},[M]),A("div",{...x,className:U(["requisition-list-grid-wrapper",l]),"data-testid":"requisition-list-grid-wrapper",children:[o&&t("div",{className:U(["requisition-list-grid-wrapper__header",l]),"data-testid":"requisition-list-grid-wrapper-header",children:t(X,{node:o})}),w&&t(N,{children:t(Z,{heading:w.description,type:w.type,variant:"primary",onDismiss:()=>p(null)})}),s?t($,{textContent:u.emptyList}):A(N,{children:[t(J,{columns:[{key:"name",label:u.name},{key:"items_count",label:u.itemsCount},{key:"last_updated",label:u.lastUpdated},{key:"actions",label:u.actions}],rowData:e,expandedRows:q,loading:a,skeletonRowCount:h}),t("div",{className:U(["requisition-list-grid-wrapper__pagination",l]),children:A("div",{className:"requisition-list-grid-wrapper__pagination-controls",children:[t(ei,{currentPageSize:(n==null?void 0:n.page_size)||P,onPageSizeChange:f||(()=>Promise.resolve()),disabled:a}),n&&n.total_pages>1&&t(K,{totalPages:n.total_pages,currentPage:n.current_page,onChange:y})]})})]}),t("div",{className:U(["requisition-list-grid-wrapper__add-new",l]),children:C?t(F,{variant:"secondary",children:t(H,{mode:"create",onSuccess:async()=>{await y(),_(),L.emit("requisitionList/alert",{type:"success",action:"create",context:"requisitionList"})},onError:()=>{L.emit("requisitionList/alert",{type:"error",action:"create",context:"requisitionList"})},onCancel:_})}):t(I,{onAddNew:R})})]})};export{Ai as RequisitionListGrid,Ai as default};
4
4
  //# sourceMappingURL=RequisitionListGrid.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RequisitionListGrid.js","sources":["/@dropins/storefront-requisition-list/src/hooks/useRequisitionListGrid.tsx","/@dropins/storefront-requisition-list/src/containers/RequisitionListGrid/RequisitionListGrid.tsx","../../node_modules/@adobe-commerce/elsie/src/icons/Add.svg","/@dropins/storefront-requisition-list/src/components/RequisitionListGridWrapper/RequisitionListGridWrapper.tsx","/@dropins/storefront-requisition-list/src/components/RequisitionListActions/RequisitionListActions.tsx","/@dropins/storefront-requisition-list/src/components/RequisitionListModal/RequisitionListModal.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 { useMemo, useState, useCallback, useEffect } from 'preact/compat';\nimport { VNode } from 'preact';\nimport { Button, Card } from '@adobe-commerce/elsie/components';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { RequisitionList as RequisitionListModel } from '@/requisitionList/data/models/requisitionList';\nimport { RequisitionListForm } from '@/requisitionList/containers';\nimport { getRequisitionLists } from '@/requisitionList/api/getRequisitionLists';\nimport { RequisitionLists } from '@/requisitionList/data/models/requisitionLists';\nimport { events } from '@adobe-commerce/event-bus';\n\ntype Row = Record<string, VNode | string | number | undefined>;\ntype Callbacks = { handleOpenModal: (rl: RequisitionListModel) => void };\n\nexport function useRequisitionListGrid(\n initial?: RequisitionLists | null,\n callbacks?: Callbacks,\n routeRequisitionListDetails?: (uid: string) => string | void\n) {\n const translations = useText({\n actionDelete: 'RequisitionList.RequisitionListItem.actionDelete',\n actionUpdate: 'RequisitionList.RequisitionListItem.actionUpdate',\n });\n\n const [reqLists, setReqLists] = useState<RequisitionLists | undefined>(\n initial\n );\n const [reqListUid, setReqListUid] = useState<string | null>(null);\n const [isAdding, setIsAdding] = useState(false);\n const [isFetching, setIsFetching] = useState(false);\n const handleClick = useCallback((uid: string) => {\n setReqListUid(uid);\n setIsAdding(false); // Close create form when opening update form\n }, []);\n const handleCancel = useCallback(() => setReqListUid(null), []);\n const handleAddNew = useCallback(() => {\n setIsAdding(true);\n setReqListUid(null); // Close update form when opening create form\n }, []);\n const handleCancelCreate = useCallback(() => setIsAdding(false), []);\n\n const fetchPage = useCallback(\n async (\n page = reqLists?.page_info?.current_page ?? 1,\n pageSize = reqLists?.page_info?.page_size ?? 10\n ) => {\n setIsFetching(true);\n try {\n const data = await getRequisitionLists(page, pageSize);\n const currentPage = data?.page_info?.current_page ?? 1;\n const totalPages = data?.page_info?.total_pages ?? 0;\n const hasRows = (data?.items?.length ?? 0) > 0;\n\n if (!hasRows && currentPage > 1 && totalPages >= currentPage - 1) {\n const prev = currentPage - 1;\n const prevData = await getRequisitionLists(prev, pageSize);\n setReqLists(prevData);\n } else {\n setReqLists(data);\n }\n } finally {\n setIsFetching(false);\n }\n },\n [reqLists]\n );\n\n useEffect(() => {\n if (!reqLists) void fetchPage(1);\n }, [reqLists, fetchPage]);\n\n const handlePageChange = useCallback(\n (page?: number) => fetchPage(page),\n [fetchPage]\n );\n\n const handlePageSizeChange = useCallback(\n async (pageSize: number) => {\n // Reset to page 1 when changing page size\n await fetchPage(1, pageSize);\n },\n [fetchPage]\n );\n\n const rows: Row[] = useMemo(\n () =>\n (reqLists?.items ?? []).map((rl: RequisitionListModel) => {\n const isUpdating = reqListUid === rl.uid;\n return {\n name: (\n <div className=\"requisition-list-grid-wrapper__name\">\n <div className=\"requisition-list-grid-wrapper__name__title\">\n <a\n href=\"#\"\n onClick={(e: Event): void => {\n e.preventDefault();\n if (routeRequisitionListDetails) {\n const result = routeRequisitionListDetails(rl.uid);\n if (typeof result === 'string') {\n window.location.href = result;\n }\n }\n }}\n >\n {rl.name}\n </a>\n </div>\n {rl.description && (\n <div className=\"requisition-list-grid-wrapper__name__description\">\n {rl.description}\n </div>\n )}\n </div>\n ),\n items_count: rl.items_count,\n last_updated: new Date(rl.updated_at).toLocaleString(),\n actions: (\n <div className=\"requisition-list-grid-wrapper__actions\">\n <Button\n variant=\"tertiary\"\n type=\"button\"\n data-testid=\"update-button\"\n onClick={() => handleClick(rl.uid)}\n >\n {translations.actionUpdate}\n </Button>\n <Button\n variant=\"tertiary\"\n type=\"button\"\n data-testid=\"delete-button\"\n onClick={() => callbacks?.handleOpenModal(rl)}\n >\n {translations.actionDelete}\n </Button>\n </div>\n ),\n _rowDetails: isUpdating ? (\n <Card\n variant=\"secondary\"\n className=\"requisition-list-grid-wrapper__form-row\"\n >\n <RequisitionListForm\n mode=\"update\"\n requisitionListUid={rl.uid}\n defaultValues={{ name: rl.name, description: rl.description }}\n onSuccess={async () => {\n await handlePageChange();\n events.emit('requisitionList/alert', {\n action: 'update',\n type: 'success',\n context: 'requisitionList',\n });\n setReqListUid(null);\n }}\n onError={() => {\n events.emit('requisitionList/alert', {\n action: 'update',\n type: 'error',\n context: 'requisitionList',\n });\n }}\n onCancel={handleCancel}\n />\n </Card>\n ) : undefined,\n };\n }),\n [\n reqLists?.items,\n reqListUid,\n handleClick,\n handleCancel,\n translations.actionUpdate,\n translations.actionDelete,\n callbacks,\n handlePageChange,\n routeRequisitionListDetails,\n ]\n );\n\n const expandedRows = useMemo(\n () =>\n new Set(\n rows\n .map((row, index) => (row._rowDetails ? index : -1))\n .filter((index) => index >= 0) as number[]\n ),\n [rows]\n );\n\n return {\n rows,\n expandedRows,\n isLoading: isFetching || !reqLists,\n pageInfo: reqLists?.page_info,\n handlePageChange,\n handlePageSizeChange,\n isAdding,\n handleAddNew,\n handleCancelCreate,\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 { HTMLAttributes, useState, useCallback } from 'preact/compat';\nimport { Header } from '@adobe-commerce/elsie/components';\nimport { Container, Slot, SlotProps } from '@adobe-commerce/elsie/lib';\nimport { RequisitionLists as RequisitionListsModel } from '@/requisitionList/data/models/requisitionLists';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport {\n RequisitionListGridWrapper,\n RequisitionListModal,\n} from '@/requisitionList/components';\nimport { useRequisitionListGrid } from '@/requisitionList/hooks';\nimport { deleteRequisitionList } from '@/requisitionList/api/deleteRequisitionList/deleteRequisitionList';\nimport { events } from '@adobe-commerce/event-bus';\n\nexport interface RequisitionListGridProps\n extends HTMLAttributes<HTMLDivElement> {\n requisitionLists?: RequisitionListsModel | null;\n routeRequisitionListDetails?: (uid: string) => string | void;\n slots?: {\n Header?: SlotProps;\n };\n}\n\nexport const RequisitionListGrid: Container<RequisitionListGridProps> = ({\n requisitionLists,\n routeRequisitionListDetails,\n slots,\n}: RequisitionListGridProps) => {\n const [modal, setModal] = useState<{\n isOpen: boolean;\n isLoading: boolean;\n rl: RequisitionListsModel | null;\n }>({\n isOpen: false,\n isLoading: false,\n rl: null,\n });\n\n const handleOpenModal = (rl: RequisitionListsModel) =>\n setModal({ isOpen: true, isLoading: false, rl });\n const handleCloseModal = () =>\n setModal({ isOpen: false, isLoading: false, rl: null });\n\n const handleConfirmModal = async () => {\n if (!modal.rl) return;\n setModal((m) => ({ ...m, isLoading: true }));\n await deleteRequisitionList(modal.rl.uid)\n .then(async () => {\n events.emit('requisitionList/alert', {\n type: 'success',\n action: 'delete',\n context: 'requisitionList',\n });\n })\n .catch(() => {\n events.emit('requisitionList/alert', {\n type: 'error',\n action: 'delete',\n context: 'requisitionList',\n });\n })\n .finally(async () => {\n await handlePageChange();\n handleCloseModal();\n });\n };\n\n const {\n rows,\n expandedRows,\n isLoading,\n pageInfo,\n handlePageChange,\n handlePageSizeChange,\n isAdding,\n handleAddNew,\n handleCancelCreate,\n } = useRequisitionListGrid(\n requisitionLists,\n { handleOpenModal },\n routeRequisitionListDetails\n );\n\n const translations = useText({\n containerTitle: `RequisitionList.containerTitle`,\n deleteRequisitionListTitle:\n 'RequisitionList.RequisitionListWrapper.deleteRequisitionListTitle',\n deleteRequisitionListMessage:\n 'RequisitionList.RequisitionListWrapper.deleteRequisitionListMessage',\n cancelAction: 'RequisitionList.RequisitionListWrapper.cancelAction',\n confirmAction: 'RequisitionList.RequisitionListWrapper.confirmAction',\n });\n\n const getHeader = useCallback(() => {\n if (slots?.Header) {\n return (\n <Slot\n name=\"Header\"\n aria-label={translations.containerTitle}\n title={translations.containerTitle}\n slot={slots.Header}\n />\n );\n }\n return (\n <Header\n aria-label={translations.containerTitle}\n role=\"region\"\n title={translations.containerTitle}\n />\n );\n }, [slots, translations.containerTitle]);\n\n return (\n <>\n <RequisitionListGridWrapper\n header={getHeader()}\n rows={rows}\n expandedRows={expandedRows}\n skeletonRowCount={10}\n isLoading={isLoading}\n pageInfo={pageInfo}\n handlePageChange={handlePageChange}\n handlePageSizeChange={handlePageSizeChange}\n defaultPageSize={10}\n isAdding={isAdding}\n handleAddNew={handleAddNew}\n handleCancelCreate={handleCancelCreate}\n />\n {modal.isOpen && (\n <RequisitionListModal\n isOpen\n isLoading={modal.isLoading}\n title={translations.deleteRequisitionListTitle}\n modalContent={translations.deleteRequisitionListMessage}\n confirmBtnCaption={translations.confirmAction}\n closeBtnCaption={translations.cancelAction}\n handleModalOnClose={handleCloseModal}\n handleModalOnConfirm={handleConfirmModal}\n />\n )}\n </>\n );\n};\n","import * as React from \"react\";\nconst SvgAdd = (props) => /* @__PURE__ */ React.createElement(\"svg\", { id: \"Icon_Add_Base\", \"data-name\": \"Icon \\\\u2013 Add \\\\u2013 Base\", xmlns: \"http://www.w3.org/2000/svg\", width: 24, height: 24, viewBox: \"0 0 24 24\", ...props }, /* @__PURE__ */ React.createElement(\"g\", { id: \"Large\" }, /* @__PURE__ */ React.createElement(\"rect\", { id: \"Placement_area\", \"data-name\": \"Placement area\", width: 24, height: 24, fill: \"#fff\", opacity: 0 }), /* @__PURE__ */ React.createElement(\"g\", { id: \"Add_icon\", \"data-name\": \"Add icon\", transform: \"translate(9.734 9.737)\" }, /* @__PURE__ */ React.createElement(\"line\", { vectorEffect: \"non-scaling-stroke\", id: \"Line_579\", \"data-name\": \"Line 579\", y2: 12.7, transform: \"translate(2.216 -4.087)\", fill: \"none\", stroke: \"currentColor\" }), /* @__PURE__ */ React.createElement(\"line\", { vectorEffect: \"non-scaling-stroke\", id: \"Line_580\", \"data-name\": \"Line 580\", x2: 12.7, transform: \"translate(-4.079 2.263)\", fill: \"none\", stroke: \"currentColor\" }))));\nexport default SvgAdd;\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 { HTMLAttributes, useEffect } from 'preact/compat';\nimport { FunctionComponent, VNode } from 'preact';\nimport { VComponent, classes } from '@adobe-commerce/elsie/lib';\nimport {\n RequisitionListActions,\n EmptyList,\n PageSizePicker,\n} from '@/requisitionList/components';\nimport { RequisitionListForm } from '@/requisitionList/containers';\nimport {\n Pagination,\n Card,\n Table,\n InLineAlert,\n} from '@adobe-commerce/elsie/components';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { events } from '@adobe-commerce/event-bus';\nimport '@/requisitionList/components/RequisitionListGridWrapper/RequisitionListGridWrapper.css';\nimport { useRequisitionListAlert } from '@/requisitionList/hooks';\n\nexport interface RequisitionListGridWrapperProps\n extends HTMLAttributes<HTMLDivElement> {\n className?: string;\n isLoading?: boolean;\n header?: VNode;\n rows: Array<Record<string, VNode | string | number | undefined>>;\n expandedRows: Set<number>;\n skeletonRowCount: number;\n pageInfo?: {\n total_pages: number;\n current_page: number;\n page_size: number;\n };\n handlePageChange: (page?: number) => Promise<void>;\n handlePageSizeChange?: (pageSize: number) => Promise<void>;\n defaultPageSize?: number;\n isAdding: boolean;\n handleAddNew: () => void;\n handleCancelCreate: () => void;\n}\n\nexport const RequisitionListGridWrapper: FunctionComponent<\n RequisitionListGridWrapperProps\n> = ({\n className,\n isLoading = false,\n header,\n rows = [],\n expandedRows,\n skeletonRowCount = 10,\n pageInfo,\n handlePageChange,\n handlePageSizeChange,\n defaultPageSize = 10,\n isAdding,\n handleAddNew,\n handleCancelCreate,\n ...props\n}) => {\n const translations = useText({\n name: `RequisitionList.RequisitionListWrapper.name`,\n itemsCount: `RequisitionList.RequisitionListWrapper.itemsCount`,\n lastUpdated: `RequisitionList.RequisitionListWrapper.lastUpdated`,\n actions: `RequisitionList.RequisitionListWrapper.actions`,\n emptyList: `RequisitionList.RequisitionListWrapper.emptyList`,\n });\n\n const hasAnyItems = (pageInfo?.total_pages ?? 0) > 0;\n const showEmptyList = !isLoading && rows.length === 0 && !hasAnyItems;\n\n const { alert, setAlert, handleRequisitionListAlert } =\n useRequisitionListAlert();\n\n useEffect(() => {\n events.on('requisitionList/alert', handleRequisitionListAlert);\n }, [handleRequisitionListAlert]);\n\n return (\n <div\n {...props}\n className={classes(['requisition-list-grid-wrapper', className])}\n data-testid=\"requisition-list-grid-wrapper\"\n >\n {/* Requisition List Header */}\n {header && (\n <div\n className={classes([\n 'requisition-list-grid-wrapper__header',\n className,\n ])}\n data-testid=\"requisition-list-grid-wrapper-header\"\n >\n <VComponent node={header} />\n </div>\n )}\n {/* Requisition List alerts go here */}\n {alert && (\n <>\n <InLineAlert\n heading={alert.description}\n type={alert.type}\n variant=\"primary\"\n onDismiss={() => setAlert(null)}\n />\n </>\n )}\n\n {showEmptyList ? (\n <EmptyList textContent={translations.emptyList} />\n ) : (\n <>\n {/* Requisition Lists Table */}\n <Table\n columns={[\n { key: 'name', label: translations.name },\n { key: 'items_count', label: translations.itemsCount },\n { key: 'last_updated', label: translations.lastUpdated },\n { key: 'actions', label: translations.actions },\n ]}\n rowData={rows}\n expandedRows={expandedRows}\n loading={isLoading}\n skeletonRowCount={skeletonRowCount}\n />\n <div\n className={classes([\n 'requisition-list-grid-wrapper__pagination',\n className,\n ])}\n >\n <div className=\"requisition-list-grid-wrapper__pagination-controls\">\n <PageSizePicker\n currentPageSize={pageInfo?.page_size || defaultPageSize}\n onPageSizeChange={\n handlePageSizeChange || (() => Promise.resolve())\n }\n disabled={isLoading}\n />\n {pageInfo && pageInfo.total_pages > 1 && (\n <Pagination\n totalPages={pageInfo.total_pages}\n currentPage={pageInfo.current_page}\n onChange={handlePageChange}\n />\n )}\n </div>\n </div>\n </>\n )}\n\n {/* Requisition Lists Form */}\n <div\n className={classes([\n 'requisition-list-grid-wrapper__add-new',\n className,\n ])}\n >\n {isAdding ? (\n <Card variant=\"secondary\">\n <RequisitionListForm\n mode=\"create\"\n onSuccess={async () => {\n await handlePageChange();\n handleCancelCreate();\n events.emit('requisitionList/alert', {\n type: 'success',\n action: 'create',\n context: 'requisitionList',\n });\n }}\n onError={() => {\n events.emit('requisitionList/alert', {\n type: 'error',\n action: 'create',\n context: 'requisitionList',\n });\n }}\n onCancel={handleCancelCreate}\n />\n </Card>\n ) : (\n <RequisitionListActions onAddNew={handleAddNew} />\n )}\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 { Add } from '@adobe-commerce/elsie/icons';\nimport { Icon } from '@adobe-commerce/elsie/components';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport '@/requisitionList/components/RequisitionListActions/RequisitionListActions.css';\n\nexport interface RequisitionListActionsProps {\n className?: string;\n selectable?: boolean;\n onAddNew?: () => void;\n}\n\nexport const RequisitionListActions: FunctionComponent<\n RequisitionListActionsProps\n> = ({ selectable, className, onAddNew }) => {\n const translations = useText({\n addNewReqListBtn: `RequisitionList.AddNewReqList.addNewReqListBtn`,\n });\n\n return (\n <button\n type=\"button\"\n aria-label={translations.addNewReqListBtn}\n role=\"button\"\n className={classes([\n 'requisition-list-actions',\n ['requisition-list-actions--selectable', selectable],\n className,\n ])}\n data-testid=\"requisition-list-actions-button\"\n onClick={onAddNew}\n >\n <span\n className=\"requisition-list-actions__title\"\n data-testid=\"requisition-list-actions-button-text\"\n >\n {translations.addNewReqListBtn}\n </span>\n <Icon source={Add} size=\"32\" />\n </button>\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 *******************************************************************/\nimport { FunctionComponent, VNode } from 'preact';\nimport {\n Modal,\n Button,\n ProgressSpinner,\n} from '@adobe-commerce/elsie/components';\nimport '@/requisitionList/components/RequisitionListModal/RequisitionListModal.css';\n\nexport interface RequisitionListModalProps {\n isOpen: boolean;\n isLoading: boolean;\n title: VNode | string;\n modalContent: VNode | string;\n closeBtnCaption?: string;\n confirmBtnCaption?: string;\n handleModalOnClose?: () => void;\n handleModalOnConfirm?: () => void;\n}\n\nexport const RequisitionListModal: FunctionComponent<\n RequisitionListModalProps\n> = ({\n isOpen,\n isLoading,\n title,\n modalContent,\n closeBtnCaption,\n confirmBtnCaption,\n handleModalOnClose,\n handleModalOnConfirm,\n}) => {\n if (!isOpen) return null;\n\n return (\n <Modal\n className=\"requisition-list-modal--overlay\"\n data-testid=\"requisition-list-modal\"\n size={'medium'}\n centered={false}\n title={title}\n onClose={handleModalOnClose}\n backgroundDim={true}\n clickToDismiss={true}\n escapeToDismiss={true}\n role=\"dialog\"\n aria-label={title}\n >\n <div className=\"requisition-list-modal\">\n {isLoading ? (\n <div\n className=\"requisition-list-modal__spinner\"\n data-testid=\"progress-spinner\"\n >\n <ProgressSpinner stroke={'4'} size={'large'} />\n </div>\n ) : null}\n <p>{modalContent}</p>\n <div className=\"requisition-list-modal__buttons\">\n {handleModalOnClose && (\n <Button\n data-testid=\"rl-modal-close-button\"\n type={'button'}\n onClick={handleModalOnClose}\n variant=\"secondary\"\n disabled={isLoading}\n >\n {closeBtnCaption}\n </Button>\n )}\n {handleModalOnConfirm && (\n <Button\n data-testid=\"rl-modal-confirm-button\"\n type={'button'}\n onClick={handleModalOnConfirm}\n disabled={isLoading}\n >\n {confirmBtnCaption}\n </Button>\n )}\n </div>\n </div>\n </Modal>\n );\n};\n"],"names":["useRequisitionListGrid","initial","callbacks","routeRequisitionListDetails","translations","useText","reqLists","setReqLists","useState","reqListUid","setReqListUid","isAdding","setIsAdding","isFetching","setIsFetching","handleClick","useCallback","uid","handleCancel","handleAddNew","handleCancelCreate","fetchPage","page","_a","pageSize","_b","data","getRequisitionLists","currentPage","totalPages","_c","prev","prevData","useEffect","handlePageChange","handlePageSizeChange","rows","useMemo","rl","isUpdating","jsxs","jsx","e","result","Button","Card","RequisitionListForm","events","expandedRows","row","index","RequisitionListGrid","requisitionLists","slots","modal","setModal","handleOpenModal","handleCloseModal","handleConfirmModal","m","deleteRequisitionList","isLoading","pageInfo","getHeader","Slot","Header","Fragment","RequisitionListGridWrapper","RequisitionListModal","SvgAdd","props","React","className","header","skeletonRowCount","defaultPageSize","hasAnyItems","showEmptyList","alert","setAlert","handleRequisitionListAlert","useRequisitionListAlert","classes","VComponent","InLineAlert","EmptyList","Table","PageSizePicker","Pagination","RequisitionListActions","selectable","onAddNew","Icon","Add","isOpen","title","modalContent","closeBtnCaption","confirmBtnCaption","handleModalOnClose","handleModalOnConfirm","Modal","ProgressSpinner"],"mappings":"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","x_google_ignoreList":[2]}
1
+ {"version":3,"file":"RequisitionListGrid.js","sources":["/@dropins/storefront-requisition-list/src/hooks/useRequisitionListGrid.tsx","/@dropins/storefront-requisition-list/src/containers/RequisitionListGrid/RequisitionListGrid.tsx","/@dropins/storefront-requisition-list/src/components/RequisitionListGridWrapper/RequisitionListGridWrapper.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 { useMemo, useState, useCallback, useEffect } from 'preact/compat';\nimport { VNode } from 'preact';\nimport { Button, Card } from '@adobe-commerce/elsie/components';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { RequisitionList as RequisitionListModel } from '@/requisitionList/data/models/requisitionList';\nimport { RequisitionListForm } from '@/requisitionList/containers';\nimport { getRequisitionLists } from '@/requisitionList/api/getRequisitionLists';\nimport { RequisitionLists } from '@/requisitionList/data/models/requisitionLists';\nimport { events } from '@adobe-commerce/event-bus';\nimport { DEFAULT_PAGE_SIZE } from '@/requisitionList/lib/constants';\n\ntype Row = Record<string, VNode | string | number | undefined>;\ntype Callbacks = { handleOpenModal: (rl: RequisitionListModel) => void };\n\nexport function useRequisitionListGrid(\n callbacks?: Callbacks,\n routeRequisitionListDetails?: (uid: string) => string | void\n) {\n const translations = useText({\n actionDelete: 'RequisitionList.RequisitionListItem.actionDelete',\n actionUpdate: 'RequisitionList.RequisitionListItem.actionUpdate',\n });\n\n const [reqLists, setReqLists] = useState<RequisitionLists | null>(null);\n const [reqListUid, setReqListUid] = useState<string | null>(null);\n const [isAdding, setIsAdding] = useState(false);\n const [isFetching, setIsFetching] = useState(false);\n\n const handleClick = useCallback((uid: string) => {\n setReqListUid(uid);\n setIsAdding(false); // Close create form when opening update form\n }, []);\n const handleCancel = useCallback(() => setReqListUid(null), []);\n const handleAddNew = useCallback(() => {\n setIsAdding(true);\n setReqListUid(null); // Close update form when opening create form\n }, []);\n const handleCancelCreate = useCallback(() => setIsAdding(false), []);\n\n const fetchPage = useCallback(async (page: number, pageSize: number) => {\n setIsFetching(true);\n try {\n const data = await getRequisitionLists(page, pageSize);\n const currentPage = data?.page_info?.current_page ?? 1;\n const totalPages = data?.page_info?.total_pages ?? 0;\n const hasRows = (data?.items?.length ?? 0) > 0;\n\n if (!hasRows && currentPage > 1 && totalPages >= currentPage - 1) {\n const prev = currentPage - 1;\n const prevData = await getRequisitionLists(prev, pageSize);\n setReqLists(prevData);\n } else {\n setReqLists(data);\n }\n } finally {\n setIsFetching(false);\n }\n }, []);\n\n useEffect(() => {\n const requisitionListsEvent = events.on(\n 'requisitionLists/data',\n (data: RequisitionLists) => {\n if (data && data.items) {\n setReqLists(data);\n }\n },\n { eager: true }\n );\n return () => {\n requisitionListsEvent?.off();\n };\n }, []);\n\n useEffect(() => {\n if (!reqLists) {\n void fetchPage(1, DEFAULT_PAGE_SIZE);\n }\n }, [reqLists, fetchPage]);\n\n const handlePageChange = useCallback(\n (page?: number) => {\n const currentPage = page ?? reqLists?.page_info?.current_page ?? 1;\n const currentPageSize =\n reqLists?.page_info?.page_size ?? DEFAULT_PAGE_SIZE;\n return fetchPage(currentPage, currentPageSize);\n },\n [fetchPage, reqLists]\n );\n\n const handlePageSizeChange = useCallback(\n async (pageSize: number) => {\n // Reset to page 1 when changing page size\n await fetchPage(1, pageSize);\n },\n [fetchPage]\n );\n\n const rows: Row[] = useMemo(\n () =>\n (reqLists?.items ?? []).map((rl: RequisitionListModel) => {\n const isUpdating = reqListUid === rl.uid;\n return {\n name: (\n <div className=\"requisition-list-grid-wrapper__name\">\n <div className=\"requisition-list-grid-wrapper__name__title\">\n <a\n href=\"#\"\n onClick={(e: Event): void => {\n e.preventDefault();\n if (routeRequisitionListDetails) {\n const result = routeRequisitionListDetails(rl.uid);\n if (typeof result === 'string') {\n window.location.href = result;\n }\n }\n }}\n >\n {rl.name}\n </a>\n </div>\n {rl.description && (\n <div className=\"requisition-list-grid-wrapper__name__description\">\n {rl.description}\n </div>\n )}\n </div>\n ),\n items_count: rl.items_count,\n last_updated: new Date(rl.updated_at).toLocaleString(),\n actions: (\n <div className=\"requisition-list-grid-wrapper__actions\">\n <Button\n variant=\"tertiary\"\n type=\"button\"\n data-testid=\"update-button\"\n onClick={() => handleClick(rl.uid)}\n >\n {translations.actionUpdate}\n </Button>\n <Button\n variant=\"tertiary\"\n type=\"button\"\n data-testid=\"delete-button\"\n onClick={() => callbacks?.handleOpenModal(rl)}\n >\n {translations.actionDelete}\n </Button>\n </div>\n ),\n _rowDetails: isUpdating ? (\n <Card\n variant=\"secondary\"\n className=\"requisition-list-grid-wrapper__form-row\"\n >\n <RequisitionListForm\n mode=\"update\"\n requisitionListUid={rl.uid}\n defaultValues={{ name: rl.name, description: rl.description }}\n onSuccess={async () => {\n await handlePageChange();\n events.emit('requisitionList/alert', {\n action: 'update',\n type: 'success',\n context: 'requisitionList',\n });\n setReqListUid(null);\n }}\n onError={() => {\n events.emit('requisitionList/alert', {\n action: 'update',\n type: 'error',\n context: 'requisitionList',\n });\n }}\n onCancel={handleCancel}\n />\n </Card>\n ) : undefined,\n };\n }),\n [\n reqLists?.items,\n reqListUid,\n handleClick,\n handleCancel,\n translations.actionUpdate,\n translations.actionDelete,\n callbacks,\n handlePageChange,\n routeRequisitionListDetails,\n ]\n );\n\n const expandedRows = useMemo(\n () =>\n new Set(\n rows\n .map((row, index) => (row._rowDetails ? index : -1))\n .filter((index) => index >= 0) as number[]\n ),\n [rows]\n );\n\n return {\n rows,\n expandedRows,\n isLoading: isFetching || !reqLists,\n pageInfo: reqLists?.page_info,\n handlePageChange,\n handlePageSizeChange,\n isAdding,\n handleAddNew,\n handleCancelCreate,\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 { HTMLAttributes, useState, useCallback } from 'preact/compat';\nimport { Header } from '@adobe-commerce/elsie/components';\nimport { Container, Slot, SlotProps } from '@adobe-commerce/elsie/lib';\nimport { RequisitionLists as RequisitionListsModel } from '@/requisitionList/data/models/requisitionLists';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport {\n RequisitionListGridWrapper,\n RequisitionListModal,\n} from '@/requisitionList/components';\nimport { useRequisitionListGrid } from '@/requisitionList/hooks';\nimport { deleteRequisitionList } from '@/requisitionList/api/deleteRequisitionList/deleteRequisitionList';\nimport { events } from '@adobe-commerce/event-bus';\n\nexport interface RequisitionListGridProps\n extends HTMLAttributes<HTMLDivElement> {\n routeRequisitionListDetails?: (uid: string) => string | void;\n slots?: {\n Header?: SlotProps;\n };\n}\n\nexport const RequisitionListGrid: Container<RequisitionListGridProps> = ({\n routeRequisitionListDetails,\n slots,\n}: RequisitionListGridProps) => {\n const [modal, setModal] = useState<{\n isOpen: boolean;\n isLoading: boolean;\n rl: RequisitionListsModel | null;\n }>({\n isOpen: false,\n isLoading: false,\n rl: null,\n });\n\n const handleOpenModal = (rl: RequisitionListsModel) =>\n setModal({ isOpen: true, isLoading: false, rl });\n const handleCloseModal = () =>\n setModal({ isOpen: false, isLoading: false, rl: null });\n\n const handleConfirmModal = async () => {\n if (!modal.rl) return;\n setModal((m) => ({ ...m, isLoading: true }));\n await deleteRequisitionList(modal.rl.uid)\n .then(async () => {\n events.emit('requisitionList/alert', {\n type: 'success',\n action: 'delete',\n context: 'requisitionList',\n });\n })\n .catch(() => {\n events.emit('requisitionList/alert', {\n type: 'error',\n action: 'delete',\n context: 'requisitionList',\n });\n })\n .finally(async () => {\n await handlePageChange();\n handleCloseModal();\n });\n };\n\n const {\n rows,\n expandedRows,\n isLoading,\n pageInfo,\n handlePageChange,\n handlePageSizeChange,\n isAdding,\n handleAddNew,\n handleCancelCreate,\n } = useRequisitionListGrid({ handleOpenModal }, routeRequisitionListDetails);\n\n const translations = useText({\n containerTitle: `RequisitionList.containerTitle`,\n deleteRequisitionListTitle:\n 'RequisitionList.RequisitionListWrapper.deleteRequisitionListTitle',\n deleteRequisitionListMessage:\n 'RequisitionList.RequisitionListWrapper.deleteRequisitionListMessage',\n cancelAction: 'RequisitionList.RequisitionListWrapper.cancelAction',\n confirmAction: 'RequisitionList.RequisitionListWrapper.confirmAction',\n });\n\n const getHeader = useCallback(() => {\n if (slots?.Header) {\n return (\n <Slot\n name=\"Header\"\n aria-label={translations.containerTitle}\n title={translations.containerTitle}\n slot={slots.Header}\n />\n );\n }\n return (\n <Header\n aria-label={translations.containerTitle}\n role=\"region\"\n title={translations.containerTitle}\n />\n );\n }, [slots, translations.containerTitle]);\n\n return (\n <>\n <RequisitionListGridWrapper\n header={getHeader()}\n rows={rows}\n expandedRows={expandedRows}\n skeletonRowCount={10}\n isLoading={isLoading}\n pageInfo={pageInfo}\n handlePageChange={handlePageChange}\n handlePageSizeChange={handlePageSizeChange}\n defaultPageSize={10}\n isAdding={isAdding}\n handleAddNew={handleAddNew}\n handleCancelCreate={handleCancelCreate}\n />\n {modal.isOpen && (\n <RequisitionListModal\n isOpen\n isLoading={modal.isLoading}\n title={translations.deleteRequisitionListTitle}\n modalContent={translations.deleteRequisitionListMessage}\n confirmBtnCaption={translations.confirmAction}\n closeBtnCaption={translations.cancelAction}\n handleModalOnClose={handleCloseModal}\n handleModalOnConfirm={handleConfirmModal}\n />\n )}\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 { HTMLAttributes, useEffect } from 'preact/compat';\nimport { FunctionComponent, VNode } from 'preact';\nimport { VComponent, classes } from '@adobe-commerce/elsie/lib';\nimport {\n RequisitionListActions,\n EmptyList,\n PageSizePicker,\n} from '@/requisitionList/components';\nimport { RequisitionListForm } from '@/requisitionList/containers';\nimport {\n Pagination,\n Card,\n Table,\n InLineAlert,\n} from '@adobe-commerce/elsie/components';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { events } from '@adobe-commerce/event-bus';\nimport '@/requisitionList/components/RequisitionListGridWrapper/RequisitionListGridWrapper.css';\nimport { useRequisitionListAlert } from '@/requisitionList/hooks';\n\nexport interface RequisitionListGridWrapperProps\n extends HTMLAttributes<HTMLDivElement> {\n className?: string;\n isLoading?: boolean;\n header?: VNode;\n rows: Array<Record<string, VNode | string | number | undefined>>;\n expandedRows: Set<number>;\n skeletonRowCount: number;\n pageInfo?: {\n total_pages: number;\n current_page: number;\n page_size: number;\n };\n handlePageChange: (page?: number) => Promise<void>;\n handlePageSizeChange?: (pageSize: number) => Promise<void>;\n defaultPageSize?: number;\n isAdding: boolean;\n handleAddNew: () => void;\n handleCancelCreate: () => void;\n}\n\nexport const RequisitionListGridWrapper: FunctionComponent<\n RequisitionListGridWrapperProps\n> = ({\n className,\n isLoading = false,\n header,\n rows = [],\n expandedRows,\n skeletonRowCount = 10,\n pageInfo,\n handlePageChange,\n handlePageSizeChange,\n defaultPageSize = 10,\n isAdding,\n handleAddNew,\n handleCancelCreate,\n ...props\n}) => {\n const translations = useText({\n name: `RequisitionList.RequisitionListWrapper.name`,\n itemsCount: `RequisitionList.RequisitionListWrapper.itemsCount`,\n lastUpdated: `RequisitionList.RequisitionListWrapper.lastUpdated`,\n actions: `RequisitionList.RequisitionListWrapper.actions`,\n emptyList: `RequisitionList.RequisitionListWrapper.emptyList`,\n });\n\n const hasAnyItems = (pageInfo?.total_pages ?? 0) > 0;\n const showEmptyList = !isLoading && rows.length === 0 && !hasAnyItems;\n\n const { alert, setAlert, handleRequisitionListAlert } =\n useRequisitionListAlert();\n\n useEffect(() => {\n events.on('requisitionList/alert', handleRequisitionListAlert);\n }, [handleRequisitionListAlert]);\n\n return (\n <div\n {...props}\n className={classes(['requisition-list-grid-wrapper', className])}\n data-testid=\"requisition-list-grid-wrapper\"\n >\n {/* Requisition List Header */}\n {header && (\n <div\n className={classes([\n 'requisition-list-grid-wrapper__header',\n className,\n ])}\n data-testid=\"requisition-list-grid-wrapper-header\"\n >\n <VComponent node={header} />\n </div>\n )}\n {/* Requisition List alerts go here */}\n {alert && (\n <>\n <InLineAlert\n heading={alert.description}\n type={alert.type}\n variant=\"primary\"\n onDismiss={() => setAlert(null)}\n />\n </>\n )}\n\n {showEmptyList ? (\n <EmptyList textContent={translations.emptyList} />\n ) : (\n <>\n {/* Requisition Lists Table */}\n <Table\n columns={[\n { key: 'name', label: translations.name },\n { key: 'items_count', label: translations.itemsCount },\n { key: 'last_updated', label: translations.lastUpdated },\n { key: 'actions', label: translations.actions },\n ]}\n rowData={rows}\n expandedRows={expandedRows}\n loading={isLoading}\n skeletonRowCount={skeletonRowCount}\n />\n <div\n className={classes([\n 'requisition-list-grid-wrapper__pagination',\n className,\n ])}\n >\n <div className=\"requisition-list-grid-wrapper__pagination-controls\">\n <PageSizePicker\n currentPageSize={pageInfo?.page_size || defaultPageSize}\n onPageSizeChange={\n handlePageSizeChange || (() => Promise.resolve())\n }\n disabled={isLoading}\n />\n {pageInfo && pageInfo.total_pages > 1 && (\n <Pagination\n totalPages={pageInfo.total_pages}\n currentPage={pageInfo.current_page}\n onChange={handlePageChange}\n />\n )}\n </div>\n </div>\n </>\n )}\n\n {/* Requisition Lists Form */}\n <div\n className={classes([\n 'requisition-list-grid-wrapper__add-new',\n className,\n ])}\n >\n {isAdding ? (\n <Card variant=\"secondary\">\n <RequisitionListForm\n mode=\"create\"\n onSuccess={async () => {\n await handlePageChange();\n handleCancelCreate();\n events.emit('requisitionList/alert', {\n type: 'success',\n action: 'create',\n context: 'requisitionList',\n });\n }}\n onError={() => {\n events.emit('requisitionList/alert', {\n type: 'error',\n action: 'create',\n context: 'requisitionList',\n });\n }}\n onCancel={handleCancelCreate}\n />\n </Card>\n ) : (\n <RequisitionListActions onAddNew={handleAddNew} />\n )}\n </div>\n </div>\n );\n};\n"],"names":["useRequisitionListGrid","callbacks","routeRequisitionListDetails","translations","useText","reqLists","setReqLists","useState","reqListUid","setReqListUid","isAdding","setIsAdding","isFetching","setIsFetching","handleClick","useCallback","uid","handleCancel","handleAddNew","handleCancelCreate","fetchPage","page","pageSize","data","getRequisitionLists","currentPage","_a","totalPages","_b","_c","prev","prevData","useEffect","requisitionListsEvent","events","DEFAULT_PAGE_SIZE","handlePageChange","currentPageSize","handlePageSizeChange","rows","useMemo","rl","isUpdating","jsxs","jsx","e","result","Button","Card","RequisitionListForm","expandedRows","row","index","RequisitionListGrid","slots","modal","setModal","handleOpenModal","handleCloseModal","handleConfirmModal","m","deleteRequisitionList","isLoading","pageInfo","getHeader","Slot","Header","Fragment","RequisitionListGridWrapper","RequisitionListModal","className","header","skeletonRowCount","defaultPageSize","props","hasAnyItems","showEmptyList","alert","setAlert","handleRequisitionListAlert","useRequisitionListAlert","classes","VComponent","InLineAlert","EmptyList","Table","PageSizePicker","Pagination","RequisitionListActions"],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { Container } from '@dropins/tools/types/elsie/src/lib';
2
+ import { RequisitionList } from '../../data/models/requisitionList';
3
+
4
+ export interface RequisitionListHeaderProps {
5
+ requisitionList: RequisitionList;
6
+ routeRequisitionListGrid?: () => string | void;
7
+ onUpdate?: (updatedList: RequisitionList) => void | Promise<void>;
8
+ }
9
+ export declare const RequisitionListHeader: Container<RequisitionListHeaderProps>;
10
+ //# sourceMappingURL=RequisitionListHeader.d.ts.map
@@ -0,0 +1,19 @@
1
+ /********************************************************************
2
+ * ADOBE CONFIDENTIAL
3
+ * __________________
4
+ *
5
+ * Copyright 2025 Adobe
6
+ * All Rights Reserved.
7
+ *
8
+ * NOTICE: All information contained herein is, and remains
9
+ * the property of Adobe and its suppliers, if any. The intellectual
10
+ * and technical concepts contained herein are proprietary to Adobe
11
+ * and its suppliers and are protected by all applicable intellectual
12
+ * property laws, including trade secret and copyright laws.
13
+ * Dissemination of this information or reproduction of this material
14
+ * is strictly forbidden unless prior written permission is obtained
15
+ * from Adobe.
16
+ *******************************************************************/
17
+ export { RequisitionListHeader } from './RequisitionListHeader';
18
+ export type { RequisitionListHeaderProps } from './RequisitionListHeader';
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ export * from './RequisitionListHeader/index'
@@ -0,0 +1,4 @@
1
+ /*! Copyright 2025 Adobe
2
+ All Rights Reserved. */
3
+ import{R as q}from"../chunks/RequisitionListHeader.js";import"@dropins/tools/preact-jsx-runtime.js";import"@dropins/tools/preact-hooks.js";import"@dropins/tools/event-bus.js";import"../chunks/RequisitionListModal.js";import"@dropins/tools/components.js";import"../chunks/RequisitionListForm.js";import"@dropins/tools/lib.js";import"@dropins/tools/i18n.js";import"../chunks/updateRequisitionList.js";import"@dropins/tools/fetch-graphql.js";import"../chunks/deleteRequisitionList.js";export{q as RequisitionListHeader};
4
+ //# sourceMappingURL=RequisitionListHeader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RequisitionListHeader.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,12 @@
1
+ import { HTMLAttributes } from 'preact/compat';
2
+ import { Container } from '@dropins/tools/types/elsie/src/lib';
3
+
4
+ export interface RequisitionListSelectorProps extends HTMLAttributes<HTMLDivElement> {
5
+ canCreate?: boolean;
6
+ sku: string;
7
+ selectedOptions?: string[];
8
+ quantity?: number;
9
+ beforeAddProdToReqList?: () => Promise<void> | void;
10
+ }
11
+ export declare const RequisitionListSelector: Container<RequisitionListSelectorProps>;
12
+ //# sourceMappingURL=RequisitionListSelector.d.ts.map
@@ -0,0 +1,19 @@
1
+ /********************************************************************
2
+ * ADOBE CONFIDENTIAL
3
+ * __________________
4
+ *
5
+ * Copyright 2025 Adobe
6
+ * All Rights Reserved.
7
+ *
8
+ * NOTICE: All information contained herein is, and remains
9
+ * the property of Adobe and its suppliers, if any. The intellectual
10
+ * and technical concepts contained herein are proprietary to Adobe
11
+ * and its suppliers and are protected by all applicable intellectual
12
+ * property laws, including trade secret and copyright laws.
13
+ * Dissemination of this information or reproduction of this material
14
+ * is strictly forbidden unless prior written permission is obtained
15
+ * from Adobe.
16
+ *******************************************************************/
17
+ export * from './RequisitionListSelector';
18
+ export { RequisitionListSelector as default } from './RequisitionListSelector';
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,3 @@
1
+ export * from './RequisitionListSelector/index'
2
+ import _default from './RequisitionListSelector/index'
3
+ export default _default
@@ -0,0 +1,23 @@
1
+ /*! Copyright 2025 Adobe
2
+ All Rights Reserved. */
3
+ import{jsx as n,jsxs as p,Fragment as x}from"@dropins/tools/preact-jsx-runtime.js";import*as k from"@dropins/tools/preact-compat.js";import{useState as m,useEffect as f,useCallback as _,useMemo as D}from"@dropins/tools/preact-compat.js";import{Card as v,Icon as E,Button as F,InLineAlert as V}from"@dropins/tools/components.js";import{c as H,R as J,f as K,h as X,t as Y}from"../chunks/updateRequisitionList.js";import{events as q}from"@dropins/tools/event-bus.js";import"@dropins/tools/preact-hooks.js";import"@dropins/tools/lib.js";import"../chunks/RequisitionListForm.js";import{R as Z}from"../chunks/RequisitionListForm2.js";import{s as l,a as $,b as N,u as ii}from"../chunks/state.js";import{g as ti}from"../chunks/getRequisitionLists.js";import{u as si,S as P,E as ei}from"../chunks/RequisitionListView.js";import"@dropins/tools/preact.js";import{R as oi}from"../chunks/RequisitionListActions.js";import{R as ni}from"../chunks/RequisitionListModal.js";import{useText as ri}from"@dropins/tools/i18n.js";import"@dropins/tools/fetch-graphql.js";let L=0;const ai=()=>{const[d,o]=m(l.requisitionLists),[c,u]=m(l.requisitionListsLoading),[r,a]=m(L);return f(()=>{l.requisitionLists.length===0&&!l.requisitionListsLoading&&($(!0),ti(1,100).then(s=>{const i=(s==null?void 0:s.items)||[];N(i),L++}).catch(s=>{console.error("Error fetching requisition lists:",s),N([]),L++}).finally(()=>{$(!1)}))},[]),f(()=>{const s=q.on("requisitionLists/data",e=>{e&&(N(e),L++,a(L),o(l.requisitionLists),u(l.requisitionListsLoading))}),i=q.on("requisitionList/data",e=>{e&&(ii(e),L++,a(L),o([...l.requisitionLists]),u(l.requisitionListsLoading))});return()=>{s==null||s.off(),i==null||i.off()}},[]),f(()=>{r!==L&&(o(l.requisitionLists),u(l.requisitionListsLoading),a(L))},[r]),{lists:d,loading:c}},li=()=>{var c,u;const[d,o]=m(((c=l.config)==null?void 0:c.is_requisition_list_active)==="1"&&((u=l.config)==null?void 0:u.company_enabled)===!0);return f(()=>{const r=q.on("requisitionList/initialized",()=>{var a,s;o(((a=l.config)==null?void 0:a.is_requisition_list_active)==="1"&&((s=l.config)==null?void 0:s.company_enabled)===!0)});return()=>r==null?void 0:r.off()},[]),{isEnabled:d}},ui=`
4
+ mutation ADD_PRODUCTS_TO_REQUISITION_LIST_MUTATION(
5
+ $requisitionListUid: ID!,
6
+ $requisitionListItems: [RequisitionListItemsInput!]!
7
+ ) {
8
+ addProductsToRequisitionList(
9
+ requisitionListUid: $requisitionListUid
10
+ requisitionListItems: $requisitionListItems
11
+ ) {
12
+ requisition_list {
13
+ ...REQUISITION_LIST_FRAGMENT
14
+ items {
15
+ ...REQUISITION_LIST_ITEMS_FRAGMENT
16
+ }
17
+ }
18
+ }
19
+ }
20
+ ${H}
21
+ ${J}
22
+ `,ci=async(d,o)=>{var s;const c=o.map(i=>{const e={sku:i.sku,quantity:i.quantity};return i.parent_sku&&(e.parent_sku=i.parent_sku),i.selected_options&&i.selected_options.length>0&&(e.selected_options=i.selected_options),i.entered_options&&i.entered_options.length>0&&(e.entered_options=i.entered_options),e}),{errors:u,data:r}=await K(ui,{variables:{requisitionListUid:d,requisitionListItems:c}});if(u)return X(u);if(!((s=r==null?void 0:r.addProductsToRequisitionList)!=null&&s.requisition_list))return null;const a=Y(r.addProductsToRequisitionList.requisition_list);return q.emit("requisitionList/data",a),a},di=d=>k.createElement("svg",{width:24,height:24,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",...d},k.createElement("path",{d:"M7.74512 9.87701L12.0001 14.132L16.2551 9.87701",stroke:"currentColor",strokeWidth:1.5,strokeLinecap:"square",strokeLinejoin:"round"})),Ai=({canCreate:d=!0,sku:o,selectedOptions:c,quantity:u=1,beforeAddProdToReqList:r})=>{const a=ri({createTitle:"RequisitionList.RequisitionListForm.createTitle",addToRequisitionList:"RequisitionList.RequisitionListForm.addToRequisitionList",emptyList:"RequisitionList.RequisitionListWrapper.emptyList",addToNewRequisitionList:"RequisitionList.RequisitionListSelector.addToNewRequisitionList",addToSelected:"RequisitionList.RequisitionListSelector.addToSelected"}),[s,i]=m(!1),[e,b]=m(null),{lists:R}=ai(),{isEnabled:A}=li(),{alert:h,setAlert:O,handleRequisitionListAlert:U}=si(),[w,M]=m({isOpen:!1,isLoading:!1});f(()=>{const t=q.on("requisitionList/alert",U);return()=>{t==null||t.off()}},[U]);const I=_(()=>{M({isOpen:!0,isLoading:!1})},[]),g=_(()=>{M({isOpen:!1,isLoading:!1}),b(null),i(!1),O(null)},[O]),C=_(async t=>{try{const T={sku:o,quantity:u,...c&&c.length>0?{selected_options:c}:{}};await ci(t,[T])}catch(T){throw console.error("Error adding product to list:",T),T}},[o,u,c]),S=_(async t=>{try{await C(t),q.emit("requisitionList/alert",{action:"add",type:"success",context:"product",skus:[o]})}catch{q.emit("requisitionList/alert",{action:"add",type:"error",context:"product",skus:[o]})}finally{setTimeout(()=>{g()},2e3)}},[o,C,g]),Q=_(t=>{t.preventDefault(),e&&S(e)},[e,S]),G=_(()=>{if(!r){I();return}Promise.resolve(r()).then(()=>{I()}).catch(()=>{})},[r,I]),y=D(()=>[...(R==null?void 0:R.map(t=>({value:t.uid,text:t.name})))??[]],[R]),j=D(()=>n("div",{className:"requisition-list-selector__available-lists",children:y.map(t=>p(v,{variant:e===t.value?"primary":"secondary",onClick:()=>{b(t.value)},children:[n(E,{source:P}),n("span",{children:t.text})]},t.value))}),[y,e]),z=y.length>0?s?p("button",{type:"button","aria-label":"Select a requisition list",role:"button",className:"requisition-list-actions","data-testid":"requisition-list-actions-button",onClick:()=>i(!1),children:[n("span",{className:"requisition-list-actions__title","data-testid":"requisition-list-actions-button-text",children:a.addToRequisitionList}),n(E,{source:di,size:"32"})]}):n(v,{variant:"secondary",children:p("form",{onSubmit:Q,className:"requisition-list-selector__form",children:[j,n("div",{className:"requisition-list-form__actions",children:n(F,{type:"submit",disabled:!e,children:a.addToSelected})})]})}):n(ei,{textContent:a.emptyList}),W=s?n(v,{variant:"secondary",children:n(Z,{mode:"create",onSuccess:async t=>{await S(t.uid)},onError:()=>{q.emit("requisitionList/alert",{action:"add",type:"error",context:"product",skus:[o]})},onCancel:()=>{i(!1)}})}):n(oi,{onAddNew:()=>{i(!0)}}),B=p(x,{children:[h&&n(V,{id:`requisition-list-selector__alert__${o}`,className:"requisition-list-selector__alert",heading:h.description,type:h.type,variant:"primary"},`requisition-list-selector__alert__${o}`),!h&&p(x,{children:[z,d&&W]})]});return A===null||!A?null:p("div",{className:"requisition-list-selector",children:[n(F,{"aria-label":a.addToRequisitionList,"data-testid":"requisition-list-selector",size:"medium",variant:"tertiary",icon:n(E,{source:P}),onClick:G}),w.isOpen&&n(ni,{isOpen:!0,isLoading:w.isLoading,title:a.addToRequisitionList,modalContent:B,handleModalOnClose:g})]})};export{Ai as RequisitionListSelector,Ai as default};
23
+ //# sourceMappingURL=RequisitionListSelector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RequisitionListSelector.js","sources":["/@dropins/storefront-requisition-list/src/hooks/useRequisitionLists.ts","/@dropins/storefront-requisition-list/src/hooks/useRequisitionListEnabled.ts","/@dropins/storefront-requisition-list/src/api/addProductsToRequisitionList/graphql/addProductsToRequisitionList.ts","/@dropins/storefront-requisition-list/src/api/addProductsToRequisitionList/addProductsToRequisitionList.ts","../../node_modules/@adobe-commerce/elsie/src/icons/ChevronDown.svg","/@dropins/storefront-requisition-list/src/containers/RequisitionListSelector/RequisitionListSelector.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 { useEffect, useState } from 'preact/compat';\nimport {\n state,\n setRequisitionLists,\n setRequisitionListsLoading,\n updateRequisitionList,\n} from '@/requisitionList/lib/state';\nimport { getRequisitionLists } from '@/requisitionList/api';\nimport { RequisitionList } from '@/requisitionList/data/models/requisitionList';\nimport { events } from '@adobe-commerce/event-bus';\n\nlet updateCounter = 0; // Counter to track updates across all hooks\n\nexport const useRequisitionLists = () => {\n const [lists, setLists] = useState<RequisitionList[]>(state.requisitionLists);\n const [loading, setLoading] = useState(state.requisitionListsLoading);\n const [lastUpdate, setLastUpdate] = useState(updateCounter);\n\n // Fetch lists if empty on mount\n useEffect(() => {\n if (state.requisitionLists.length === 0 && !state.requisitionListsLoading) {\n setRequisitionListsLoading(true);\n getRequisitionLists(1, 100)\n .then((res: { items: RequisitionList[] }) => {\n const newLists = res?.items || [];\n setRequisitionLists(newLists);\n updateCounter++;\n })\n .catch((error: any) => {\n console.error('Error fetching requisition lists:', error);\n setRequisitionLists([]);\n updateCounter++;\n })\n .finally(() => {\n setRequisitionListsLoading(false);\n });\n }\n }, []);\n\n // Listen to event bus updates\n useEffect(() => {\n const multiListListener = events.on(\n 'requisitionLists/data',\n (payload: RequisitionList[] | null) => {\n if (payload) {\n setRequisitionLists(payload);\n updateCounter++;\n setLastUpdate(updateCounter);\n setLists(state.requisitionLists);\n setLoading(state.requisitionListsLoading);\n }\n }\n );\n\n const singleListListener = events.on(\n 'requisitionList/data',\n (payload: RequisitionList | null) => {\n if (!payload) return;\n\n // Only the FIRST hook instance to receive this should update\n // Use the updateRequisitionList helper which handles both add and update\n updateRequisitionList(payload);\n updateCounter++;\n setLastUpdate(updateCounter);\n setLists([...state.requisitionLists]);\n setLoading(state.requisitionListsLoading);\n }\n );\n\n return () => {\n multiListListener?.off();\n singleListListener?.off();\n };\n }, []);\n\n // Sync with global state when it changes\n useEffect(() => {\n if (lastUpdate !== updateCounter) {\n setLists(state.requisitionLists);\n setLoading(state.requisitionListsLoading);\n setLastUpdate(updateCounter);\n }\n }, [lastUpdate]);\n\n return { lists, loading };\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/compat';\nimport { state } from '@/requisitionList/lib/state';\nimport { events } from '@adobe-commerce/event-bus';\n\nexport const useRequisitionListEnabled = () => {\n const [isEnabled, setIsEnabled] = useState<boolean>(\n state.config?.is_requisition_list_active === '1' &&\n state.config?.company_enabled === true\n );\n\n useEffect(() => {\n // Listen for requisition list initialization via event bus\n const configListener = events.on('requisitionList/initialized', () => {\n setIsEnabled(\n state.config?.is_requisition_list_active === '1' &&\n state.config?.company_enabled === true\n );\n });\n\n return () => configListener?.off();\n }, []);\n\n return { isEnabled };\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 { REQUISITION_LIST_FRAGMENT } from '@/requisitionList/api/fragments/RequisitionListFragment.graphql';\nimport { REQUISITION_LIST_ITEMS_FRAGMENT } from '@/requisitionList/api/fragments/RequisitionListItemsFragment.graphql';\n\nexport const ADD_PRODUCTS_TO_REQUISITION_LIST_MUTATION = `\n mutation ADD_PRODUCTS_TO_REQUISITION_LIST_MUTATION(\n $requisitionListUid: ID!, \n $requisitionListItems: [RequisitionListItemsInput!]!\n ) {\n addProductsToRequisitionList(\n requisitionListUid: $requisitionListUid\n requisitionListItems: $requisitionListItems\n ) {\n requisition_list {\n ...REQUISITION_LIST_FRAGMENT\n items {\n ...REQUISITION_LIST_ITEMS_FRAGMENT\n }\n }\n }\n }\n${REQUISITION_LIST_ITEMS_FRAGMENT}\n${REQUISITION_LIST_FRAGMENT}\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 { RequisitionList } from '@/requisitionList/data/models/requisitionList';\nimport { fetchGraphQl } from '@/requisitionList/api';\nimport { ADD_PRODUCTS_TO_REQUISITION_LIST_MUTATION } from '@/requisitionList/api/addProductsToRequisitionList/graphql/addProductsToRequisitionList';\nimport { handleFetchError } from '@/requisitionList/lib/fetch-error';\nimport { transformRequisitionList } from '@/requisitionList/data/transforms';\nimport { events } from '@adobe-commerce/event-bus';\n\n// Correct type for GraphQL RequisitionListItemsInput\nexport type RequisitionListItemsInput = {\n sku: string;\n quantity: number;\n parent_sku?: string;\n selected_options?: string[];\n entered_options?: Array<{ uid: string; value: string }>;\n};\n\nexport const addProductsToRequisitionList = async (\n requisitionListUid: string,\n requisitionListItems: Array<RequisitionListItemsInput>\n): Promise<RequisitionList | null> => {\n // Clean items before performing the mutation - remove empty fields\n const cleanedItems = requisitionListItems.map((item) => {\n const cleaned: any = {\n sku: item.sku,\n quantity: item.quantity,\n };\n\n if (item.parent_sku) cleaned.parent_sku = item.parent_sku;\n if (item.selected_options && item.selected_options.length > 0) {\n cleaned.selected_options = item.selected_options;\n }\n if (item.entered_options && item.entered_options.length > 0) {\n cleaned.entered_options = item.entered_options;\n }\n\n return cleaned;\n });\n\n const { errors, data } = await fetchGraphQl(\n ADD_PRODUCTS_TO_REQUISITION_LIST_MUTATION,\n {\n variables: {\n requisitionListUid,\n requisitionListItems: cleanedItems,\n },\n }\n );\n\n if (errors) return handleFetchError(errors);\n\n if (!data?.addProductsToRequisitionList?.requisition_list) {\n return null;\n }\n\n const payload = transformRequisitionList(\n data.addProductsToRequisitionList.requisition_list\n );\n events.emit('requisitionList/data', payload);\n return payload;\n};\n","import * as React from \"react\";\nconst SvgChevronDown = (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\", { d: \"M7.74512 9.87701L12.0001 14.132L16.2551 9.87701\", stroke: \"currentColor\", strokeWidth: 1.5, strokeLinecap: \"square\", strokeLinejoin: \"round\" }));\nexport default SvgChevronDown;\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 HTMLAttributes,\n useCallback,\n useEffect,\n useMemo,\n useState,\n} from 'preact/compat';\nimport { Container } from '@adobe-commerce/elsie/lib';\nimport { RequisitionList } from '../../data/models/requisitionList.js';\nimport {\n Button,\n Card,\n Icon,\n InLineAlert,\n} from '@adobe-commerce/elsie/components';\nimport { addProductsToRequisitionList } from '@/requisitionList/api/addProductsToRequisitionList/addProductsToRequisitionList';\nimport {\n EmptyList,\n RequisitionListModal,\n RequisitionListActions,\n} from '@/requisitionList/components';\nimport { RequisitionListForm } from '@/requisitionList/containers';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { ChevronDown, List } from '@adobe-commerce/elsie/icons';\nimport { JSX } from 'preact';\nimport { events } from '@adobe-commerce/event-bus';\nimport '@/requisitionList/containers/RequisitionListSelector/RequisitionListSelector.css';\nimport {\n useRequisitionLists,\n useRequisitionListAlert,\n useRequisitionListEnabled,\n} from '@/requisitionList/hooks';\n\nexport interface RequisitionListSelectorProps\n extends HTMLAttributes<HTMLDivElement> {\n canCreate?: boolean;\n sku: string;\n selectedOptions?: string[];\n quantity?: number;\n beforeAddProdToReqList?: () => Promise<void> | void;\n}\n\nexport const RequisitionListSelector: Container<\n RequisitionListSelectorProps\n> = ({\n canCreate = true,\n sku,\n selectedOptions,\n quantity = 1,\n beforeAddProdToReqList,\n}: RequisitionListSelectorProps) => {\n const translations = useText({\n createTitle: `RequisitionList.RequisitionListForm.createTitle`,\n addToRequisitionList: `RequisitionList.RequisitionListForm.addToRequisitionList`,\n emptyList: `RequisitionList.RequisitionListWrapper.emptyList`,\n addToNewRequisitionList: `RequisitionList.RequisitionListSelector.addToNewRequisitionList`,\n addToSelected: `RequisitionList.RequisitionListSelector.addToSelected`,\n });\n const [isAdding, setIsAdding] = useState(false);\n const [selectedReqListUid, setSelectedReqListUid] = useState<string | null>(\n null\n );\n const { lists } = useRequisitionLists();\n const { isEnabled } = useRequisitionListEnabled();\n\n const { alert, setAlert, handleRequisitionListAlert } =\n useRequisitionListAlert();\n\n const [modal, setModal] = useState<{\n isOpen: boolean;\n isLoading: boolean;\n }>({\n isOpen: false,\n isLoading: false,\n });\n\n useEffect(() => {\n const alertListener = events.on(\n 'requisitionList/alert',\n handleRequisitionListAlert\n );\n\n return () => {\n alertListener?.off();\n };\n }, [handleRequisitionListAlert]);\n\n const handleOpenModal = useCallback(() => {\n setModal({ isOpen: true, isLoading: false });\n }, []);\n\n const handleCloseModal = useCallback(() => {\n setModal({ isOpen: false, isLoading: false });\n setSelectedReqListUid(null);\n setIsAdding(false);\n setAlert(null);\n }, [setAlert]);\n\n const handleAddProdToReqList = useCallback(\n async (requisitionListUid: string) => {\n try {\n // Build the object dynamically, omitting selected_options if not present\n const itemToAdd = {\n sku,\n quantity,\n ...(selectedOptions && selectedOptions.length > 0\n ? { selected_options: selectedOptions }\n : {}),\n };\n\n await addProductsToRequisitionList(requisitionListUid, [itemToAdd]);\n } catch (error) {\n console.error('Error adding product to list:', error);\n throw error;\n }\n },\n [sku, quantity, selectedOptions]\n );\n\n const handleAddProductAndEmitAlert = useCallback(\n async (requisitionListUid: string) => {\n try {\n await handleAddProdToReqList(requisitionListUid);\n\n events.emit('requisitionList/alert', {\n action: 'add',\n type: 'success',\n context: 'product',\n skus: [sku],\n });\n } catch {\n events.emit('requisitionList/alert', {\n action: 'add',\n type: 'error',\n context: 'product',\n skus: [sku],\n });\n } finally {\n setTimeout(() => {\n handleCloseModal();\n }, 2000);\n }\n },\n [sku, handleAddProdToReqList, handleCloseModal]\n );\n\n const handleSubmit = useCallback(\n (event: JSX.TargetedEvent<HTMLFormElement, SubmitEvent>) => {\n event.preventDefault();\n if (!selectedReqListUid) return;\n handleAddProductAndEmitAlert(selectedReqListUid);\n },\n [selectedReqListUid, handleAddProductAndEmitAlert]\n );\n\n const handleOpenModalWithValidation = useCallback(() => {\n if (!beforeAddProdToReqList) {\n handleOpenModal();\n return;\n }\n\n Promise.resolve(beforeAddProdToReqList())\n .then(() => {\n handleOpenModal();\n })\n .catch(() => {\n // Validation failed - don't open modal\n });\n }, [beforeAddProdToReqList, handleOpenModal]);\n\n const reqListOptions = useMemo(\n () => [\n ...(lists?.map((reqList: RequisitionList) => ({\n value: reqList.uid,\n text: reqList.name,\n })) ?? []),\n ],\n [lists]\n );\n\n const availableReqLists = useMemo(\n () => (\n <div className=\"requisition-list-selector__available-lists\">\n {reqListOptions.map((option: { value: string; text: string }) => (\n <Card\n variant={\n selectedReqListUid === option.value ? 'primary' : 'secondary'\n }\n key={option.value}\n onClick={() => {\n setSelectedReqListUid(option.value);\n }}\n >\n <Icon source={List} />\n <span>{option.text}</span>\n </Card>\n ))}\n </div>\n ),\n [reqListOptions, selectedReqListUid]\n );\n\n const selectReqListSection =\n reqListOptions.length > 0 ? (\n isAdding ? (\n <button\n type=\"button\"\n aria-label=\"Select a requisition list\"\n role=\"button\"\n className=\"requisition-list-actions\"\n data-testid=\"requisition-list-actions-button\"\n onClick={() => setIsAdding(false)}\n >\n <span\n className=\"requisition-list-actions__title\"\n data-testid=\"requisition-list-actions-button-text\"\n >\n {translations.addToRequisitionList}\n </span>\n <Icon source={ChevronDown} size=\"32\" />\n </button>\n ) : (\n <Card variant=\"secondary\">\n <form\n onSubmit={handleSubmit}\n className=\"requisition-list-selector__form\"\n >\n {availableReqLists}\n <div className=\"requisition-list-form__actions\">\n <Button type=\"submit\" disabled={!selectedReqListUid}>\n {translations.addToSelected}\n </Button>\n </div>\n </form>\n </Card>\n )\n ) : (\n <EmptyList textContent={translations.emptyList} />\n );\n\n const createReqListSection = !isAdding ? (\n <RequisitionListActions\n onAddNew={() => {\n setIsAdding(true);\n }}\n />\n ) : (\n <Card variant=\"secondary\">\n <RequisitionListForm\n mode=\"create\"\n onSuccess={async (newList: RequisitionList) => {\n await handleAddProductAndEmitAlert(newList.uid);\n }}\n onError={() => {\n events.emit('requisitionList/alert', {\n action: 'add',\n type: 'error',\n context: 'product',\n skus: [sku],\n });\n }}\n onCancel={() => {\n setIsAdding(false);\n }}\n />\n </Card>\n );\n\n const modalContent = (\n <>\n {alert && (\n <InLineAlert\n key={`requisition-list-selector__alert__${sku}`}\n id={`requisition-list-selector__alert__${sku}`}\n className=\"requisition-list-selector__alert\"\n heading={alert.description}\n type={alert.type}\n variant=\"primary\"\n />\n )}\n {!alert && (\n <>\n {selectReqListSection}\n {canCreate && createReqListSection}\n </>\n )}\n </>\n );\n\n // Early return after all hooks have been called\n if (isEnabled === null || !isEnabled) {\n return null;\n }\n\n return (\n <div className=\"requisition-list-selector\">\n <Button\n aria-label={translations.addToRequisitionList}\n data-testid=\"requisition-list-selector\"\n size=\"medium\"\n variant=\"tertiary\"\n icon={<Icon source={List} />}\n onClick={handleOpenModalWithValidation}\n />\n {modal.isOpen && (\n <RequisitionListModal\n isOpen\n isLoading={modal.isLoading}\n title={translations.addToRequisitionList}\n modalContent={modalContent}\n handleModalOnClose={handleCloseModal}\n />\n )}\n </div>\n );\n};\n"],"names":["updateCounter","useRequisitionLists","lists","setLists","useState","state","loading","setLoading","lastUpdate","setLastUpdate","useEffect","setRequisitionListsLoading","getRequisitionLists","res","newLists","setRequisitionLists","error","multiListListener","events","payload","singleListListener","updateRequisitionList","useRequisitionListEnabled","isEnabled","setIsEnabled","_a","_b","configListener","ADD_PRODUCTS_TO_REQUISITION_LIST_MUTATION","REQUISITION_LIST_ITEMS_FRAGMENT","REQUISITION_LIST_FRAGMENT","addProductsToRequisitionList","requisitionListUid","requisitionListItems","cleanedItems","item","cleaned","errors","data","fetchGraphQl","handleFetchError","transformRequisitionList","SvgChevronDown","props","React","RequisitionListSelector","canCreate","sku","selectedOptions","quantity","beforeAddProdToReqList","translations","useText","isAdding","setIsAdding","selectedReqListUid","setSelectedReqListUid","alert","setAlert","handleRequisitionListAlert","useRequisitionListAlert","modal","setModal","alertListener","handleOpenModal","useCallback","handleCloseModal","handleAddProdToReqList","itemToAdd","handleAddProductAndEmitAlert","handleSubmit","event","handleOpenModalWithValidation","reqListOptions","useMemo","reqList","availableReqLists","option","jsxs","Card","jsx","Icon","List","selectReqListSection","ChevronDown","Button","EmptyList","createReqListSection","RequisitionListForm","newList","RequisitionListActions","modalContent","Fragment","InLineAlert","RequisitionListModal"],"mappings":"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","x_google_ignoreList":[4]}
@@ -1,9 +1,14 @@
1
1
  import { HTMLAttributes } from 'preact/compat';
2
2
  import { Container } from '@dropins/tools/types/elsie/src/lib';
3
- import { RequisitionList } from '../../data/models/requisitionList';
4
3
 
5
4
  export interface RequisitionListViewProps extends HTMLAttributes<HTMLDivElement> {
6
- requisitionList: RequisitionList;
5
+ /**
6
+ * The UID of the requisition list to display.
7
+ * The UID must be a base64-encoded string.
8
+ * If an invalid UID is provided, the component will render the NotFound state.
9
+ * The component will fetch the requisition list data internally.
10
+ */
11
+ requisitionListUid: string;
7
12
  /**
8
13
  * When true, skips automatic product data fetching on component mount.
9
14
  * Used in tests to prevent API calls.
@@ -11,12 +16,14 @@ export interface RequisitionListViewProps extends HTMLAttributes<HTMLDivElement>
11
16
  skipProductLoading?: boolean;
12
17
  /**
13
18
  * Number of items per page for pagination.
14
- * Defaults to 10.
19
+ * Defaults to DEFAULT_PAGE_SIZE.
15
20
  */
16
21
  pageSize?: number;
17
- loadingProducts?: boolean;
18
22
  selectedItems: Set<string>;
19
- loadingPage?: boolean;
23
+ /**
24
+ * Function that returns the URL to the requisition list grid view or performs navigation
25
+ */
26
+ routeRequisitionListGrid?: () => string | void;
20
27
  }
21
28
  export declare const RequisitionListView: Container<RequisitionListViewProps>;
22
29
  //# sourceMappingURL=RequisitionListView.d.ts.map
@@ -1,4 +1,4 @@
1
1
  /*! Copyright 2025 Adobe
2
2
  All Rights Reserved. */
3
- import{jsxs as N,jsx as i,Fragment as nt}from"@dropins/tools/preact-jsx-runtime.js";import*as p from"@dropins/tools/preact-compat.js";import{useState as P,useEffect as K,useCallback as T}from"@dropins/tools/preact-compat.js";import{b as st,a as ot,d as at,u as rt,g as Y}from"../chunks/addRequisitionListItemsToCart.js";import{Button as E,Icon as J,Field as lt,Input as ct,Price as U,Checkbox as ut,Table as dt,Header as pt,InLineAlert as mt,Pagination as ht}from"@dropins/tools/components.js";import{events as f}from"@dropins/tools/event-bus.js";import{useState as tt,useCallback as O}from"@dropins/tools/preact-hooks.js";import{VComponent as Lt,classes as qt}from"@dropins/tools/lib.js";/* empty css */import{u as ft}from"../chunks/PageSizePicker2.js";import{h as gt}from"@dropins/tools/preact.js";import{useText as X}from"@dropins/tools/i18n.js";import{E as yt,P as wt}from"../chunks/PageSizePicker.js";import"../chunks/transform-requisition-list.js";import"@dropins/tools/fetch-graphql.js";import"../chunks/RequisitionListItemsFragment.graphql.js";function kt(o){const[c,m]=tt(o),[h,u]=tt(new Set),_=O((L,r)=>{u(k=>{const g=new Set(k);return r?g.add(L):g.delete(L),g})},[]),w=O(()=>{var r;const L=(r=c.items)==null?void 0:r.map(k=>k.uid);u(new Set(L))},[c]),v=O(()=>{u(new Set)},[]);return{currentRequisitionList:c,setCurrentRequisitionList:m,selectedItems:h,setSelectedItems:u,handleItemSelection:_,handleSelectAll:w,handleSelectNone:v}}const et=o=>p.createElement("svg",{width:24,height:24,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",...o},p.createElement("g",{clipPath:"url(#clip0_102_196)"},p.createElement("path",{vectorEffect:"non-scaling-stroke",d:"M18.3601 18.16H6.5601L4.8801 3H2.3501M19.6701 19.59C19.6701 20.3687 19.0388 21 18.2601 21C17.4814 21 16.8501 20.3687 16.8501 19.59C16.8501 18.8113 17.4814 18.18 18.2601 18.18C19.0388 18.18 19.6701 18.8113 19.6701 19.59ZM7.42986 19.59C7.42986 20.3687 6.79858 21 6.01986 21C5.24114 21 4.60986 20.3687 4.60986 19.59C4.60986 18.8113 5.24114 18.18 6.01986 18.18C6.79858 18.18 7.42986 18.8113 7.42986 19.59Z",stroke:"currentColor",strokeLinejoin:"round"}),p.createElement("path",{vectorEffect:"non-scaling-stroke",d:"M5.25 6.37L20.89 8.06L20.14 14.8H6.19",stroke:"currentColor",strokeLinejoin:"round"})),p.createElement("defs",null,p.createElement("clipPath",{id:"clip0_102_196"},p.createElement("rect",{vectorEffect:"non-scaling-stroke",width:19.29,height:19.5,fill:"white",transform:"translate(2.3501 2.25)"})))),it=o=>p.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",...o},p.createElement("path",{d:"M1 5H23",stroke:"currentColor",strokeWidth:1.5,strokeMiterlimit:10}),p.createElement("path",{d:"M17.3674 22H6.63446C5.67952 22 4.88992 21.2688 4.8379 20.3338L4 5H20L19.1621 20.3338C19.1119 21.2688 18.3223 22 17.3655 22H17.3674Z",stroke:"currentColor",strokeWidth:1.5,strokeMiterlimit:10}),p.createElement("path",{d:"M9.87189 2H14.1281C14.6085 2 15 2.39766 15 2.88889V5H9V2.88889C9 2.39912 9.39006 2 9.87189 2Z",stroke:"currentColor",strokeWidth:1.5,strokeMiterlimit:10}),p.createElement("path",{d:"M8.87402 8.58057L9.39348 17.682",stroke:"currentColor",strokeWidth:1.5,strokeMiterlimit:10}),p.createElement("path",{d:"M14.6673 8.58057L14.146 17.682",stroke:"currentColor",strokeWidth:1.5,strokeMiterlimit:10})),bt=({className:o,items:c,selectedItems:m,currentPage:h,pageSize:u,canEdit:_=!0,handleItemSelection:w,handleUpdateQuantity:v,onAddToCart:L,onDeleteItem:r,...k})=>{const g=X({productNameHeader:"RequisitionList.RequisitionListView.productListTable.headers.productName",skuHeader:"RequisitionList.RequisitionListView.productListTable.headers.sku",priceHeader:"RequisitionList.RequisitionListView.productListTable.headers.price",quantityHeader:"RequisitionList.RequisitionListView.productListTable.headers.quantity",subtotalHeader:"RequisitionList.RequisitionListView.productListTable.headers.subtotal",actionsHeader:"RequisitionList.RequisitionListView.productListTable.headers.actions",actionAddToCart:"RequisitionList.RequisitionListView.actionAddToCart",actionDelete:"RequisitionList.RequisitionListView.actionDelete",itemQuantity:"RequisitionList.RequisitionListView.productListTable.itemQuantity"}),x=[{label:"#",key:"index"},{label:"item",key:"item"},{label:g.priceHeader,key:"price"},{label:g.quantityHeader,key:"quantity"},{label:g.subtotalHeader,key:"subtotal"}];_&&(x.unshift({label:"",key:"checkbox"}),x.push({label:g.actionsHeader,key:"actions"}));const I=(s,n)=>{const a=s.target.checked;w(n.uid,a)},A=c.map((s,n)=>{var a,S,H,$,W,j,q,V,Z,M,d,D,z,F,Q,G,t;return{index:i("span",{children:(h-1)*u+n+1}),item:N("div",{style:"display: inline-block",children:[i("div",{style:"float: left;",children:i(ut,{className:"requisition-list-view-product-list-table__checkbox",name:"itemSelected","data-testid":`item-checkbox-${s.sku}`,onChange:e=>I(e,s),value:s.sku,checked:m.has(s.uid)})}),i("div",{className:"requisition-list-view-product-list-table__product-name",children:((a=s.product)==null?void 0:a.name)||s.sku}),i("div",{className:"requisition-list-view-product-list-table__sku",children:s.sku})]}),price:i(U,{className:"requisition-list-view-product-list-table__price",amount:(W=($=(H=(S=s.product)==null?void 0:S.price)==null?void 0:H.final)==null?void 0:$.amount)==null?void 0:W.value,currency:(Z=(V=(q=(j=s.product)==null?void 0:j.price)==null?void 0:q.final)==null?void 0:V.amount)==null?void 0:Z.currency}),subtotal:i(U,{className:"requisition-list-view-product-list-table__price",amount:((z=(D=(d=(M=s.product)==null?void 0:M.price)==null?void 0:d.final)==null?void 0:D.amount)==null?void 0:z.value)*s.quantity,currency:(t=(G=(Q=(F=s.product)==null?void 0:F.price)==null?void 0:Q.final)==null?void 0:G.amount)==null?void 0:t.currency}),quantity:i("span",{className:"requisition-list-view-product-list-table__quantity",children:i(lt,{disabled:!1,children:i(ct,{id:"requisition-list-item-quantity",name:"quantity",type:"text",value:s.quantity,onBlur:e=>{const l=Number.parseInt(e.target.value,10);v(s.uid,l)}})})}),actions:N("div",{className:"requisition-list-view__bulk-actions",children:[i(E,{type:"button",onClick:()=>L([s.uid]),icon:i(J,{source:et}),"data-testid":"product-list-table-add-to-cart-button"}),i(E,{type:"button",variant:"secondary",icon:i(J,{source:it}),onClick:()=>r([s.uid]),"data-testid":"product-list-table-delete-button"})]})}}),R=i(dt,{columns:x,rowData:A,"data-testid":"product-list-table",mobileLayout:"stacked"});return i(Lt,{node:gt("div",{}),className:qt(["requisition-list-view-product-list-table-container",o]),"data-testid":"product-list-table-container",...k,children:R})},Rt=({selectedItems:o,deletingItemId:c,addingToCartItemId:m,bulkAddingToCart:h,updatingQuantityItemId:u,onSelectAll:_,onSelectNone:w,onBulkAddToCart:v,onBulkDelete:L})=>{const r=X({statusDeleting:"RequisitionList.RequisitionListView.statusDeleting",actionDeleteSelected:"RequisitionList.RequisitionListView.actionDeleteSelected",actionSelectAll:"RequisitionList.RequisitionListView.actionSelectAll",actionSelectNone:"RequisitionList.RequisitionListView.actionSelectNone",actionAddToCart:"RequisitionList.RequisitionListView.actionAddToCart",actionAddSelectedToCart:"RequisitionList.RequisitionListView.actionAddSelectedToCart",statusBulkAddingToCart:"RequisitionList.RequisitionListView.statusBulkAddingToCart"});return N("div",{class:"requisition-list-view__bulk-actions",children:[i(E,{"data-testid":"bulk-actions-select-all-btn",type:"button",variant:"secondary",onClick:_,disabled:c!==null||m!==null||h||u!==null,children:r.actionSelectAll}),i(E,{"data-testid":"bulk-actions-select-none-btn",type:"button",variant:"secondary",onClick:w,disabled:c!==null||m!==null||h||u!==null||o.size===0,children:r.actionSelectNone}),o.size>0&&i(E,{"data-testid":"bulk-actions-add-to-cart-btn",type:"button",variant:"primary",onClick:v,icon:i(J,{source:et}),disabled:c!==null||m!==null||h||u!==null,children:h?r.statusBulkAddingToCart:`${r.actionAddSelectedToCart} (${o.size})`}),o.size>0&&i(E,{"data-testid":"bulk-actions-delete-all-btn",type:"button",variant:"secondary",onClick:L,icon:i(J,{source:it}),disabled:c!==null||m!==null||h||u!==null,children:c==="bulk"?r.statusDeleting:`${r.actionDeleteSelected} (${o.size})`})]})},Bt=({requisitionList:o,skipProductLoading:c=!1,pageSize:m=10})=>{const[h,u]=P(!1),[_,w]=P(null),[v,L]=P(null),[r,k]=P(!1),[g,x]=P(null),[I,A]=P(!1),[R,s]=P(m),{currentRequisitionList:n,setCurrentRequisitionList:a,selectedItems:S,setSelectedItems:H,handleItemSelection:$,handleSelectAll:W,handleSelectNone:j}=kt(o),q=X({emptyRequisitionList:"RequisitionList.RequisitionListView.emptyRequisitionList",errorLoadingProducts:"RequisitionList.RequisitionListView.errorLoadingProducts",errorLoadPage:"RequisitionList.RequisitionListView.errorLoadPage"}),{alert:V,setAlert:Z,handleRequisitionListAlert:M}=ft();K(()=>{const t=f.on("requisitionList/data",e=>{a(e),H(new Set)});return f.on("requisitionList/alert",M),()=>{t==null||t.off()}},[M,a,H]),K(()=>{s(m)},[m]);const d=T(async t=>{var l,C;const e=((l=t.items)==null?void 0:l.map(b=>b.sku))||[];if(e.length===0)return t;u(!0);try{const b=await st(e);if(b){const B=new Map;return b.forEach(y=>{B.set(y.sku,y)}),{...t,items:(C=t.items)==null?void 0:C.map(y=>({...y,product:B.get(y.sku)||y.product}))}}return console.warn("No products found"),t}catch(b){return console.warn(b instanceof Error?b.message:q.errorLoadingProducts),t}finally{u(!1)}},[q.errorLoadingProducts]);K(()=>{if(c)return;(async()=>{const e=await d(o);a(e)})()},[o,d,c,a]);const D=T(async t=>{t&&t.length===1?(k(!1),L(t)):(k(!0),L(null));try{const e=await ot(n.uid,t);e&&e.length>0?f.emit("requisitionList/alert",{action:"move",type:"error",context:"product",message:e.map(l=>l.message)}):f.emit("requisitionList/alert",{action:"move",type:"success",context:"product"})}catch{f.emit("requisitionList/alert",{action:"move",type:"error",context:"product"})}finally{L(null),k(!1)}},[n]),z=T(async t=>{t&&t.length===1?w(t[0]):w("bulk");try{const e=await at(n.uid,t,R,n.page_info.current_page);if(e){const l=await d(e);a(l),f.emit("requisitionList/alert",{action:"delete",type:"success",context:"product"})}else f.emit("requisitionList/alert",{action:"delete",type:"error",context:"product"})}catch{f.emit("requisitionList/alert",{action:"delete",type:"error",context:"product"})}finally{w(null)}},[n,R,d,a]),F=T(async(t,e)=>{var l;x(t);try{const C=(l=n.items)==null?void 0:l.find(y=>y.uid===t);if(!C){f.emit("requisitionList/alert",{action:"update",type:"error",context:"product"});return}const b={item_id:C.uid,entered_options:C.entered_options,selected_options:C.selected_options,quantity:e},B=await rt(n.uid,[b],R,n.page_info.current_page);if(B){const y=await d(B);a(y),f.emit("requisitionList/alert",{action:"update",type:"success",context:"product"})}else f.emit("requisitionList/alert",{action:"update",type:"error",context:"product"})}catch{f.emit("requisitionList/alert",{action:"update",type:"error",context:"product"})}finally{x(null)}},[n,d,a,R]),Q=T(async t=>{A(!0);try{const e=await Y(n.uid,t,R);if(e){const l=await d(e);a(l)}else console.warn(q.errorLoadPage)}catch(e){console.warn(e instanceof Error?e.message:q.errorLoadPage)}finally{A(!1)}},[n.uid,d,R,q,a]),G=T(async t=>{s(t),A(!0);try{const e=await Y(n.uid,1,t);if(e){const l=await d(e);a(l)}else console.warn(q.errorLoadPage)}catch{console.warn(q.errorLoadPage)}finally{A(!1)}},[n.uid,d,q,a]);return N("div",{className:"requisition-list-view__container",children:[i(pt,{"aria-label":n.name,role:"region",title:n.name}),n.items_count===0?i(yt,{textContent:`${n.name} ${q.emptyRequisitionList}`}):N(nt,{children:[V&&i(mt,{heading:V.description,type:V.type,variant:"primary",onDismiss:()=>Z(null)}),i(Rt,{selectedItems:S,deletingItemId:_,addingToCartItemId:v,bulkAddingToCart:r,updatingQuantityItemId:g,onSelectAll:W,onSelectNone:j,onBulkAddToCart:()=>D(Array.from(S)),onBulkDelete:()=>z(Array.from(S))}),i(bt,{items:n.items,selectedItems:S,currentPage:n.page_info.current_page,pageSize:n.page_info.page_size,handleItemSelection:$,handleUpdateQuantity:F,onAddToCart:D,onDeleteItem:z}),n.page_info&&i("div",{className:"requisition-list-view__pagination",children:N("div",{className:"requisition-list-view__pagination-controls",children:[i(wt,{currentPageSize:n.page_info.page_size,onPageSizeChange:G,disabled:I||h}),n.page_info.total_pages>1&&i(ht,{totalPages:n.page_info.total_pages,currentPage:n.page_info.current_page,onChange:Q,disabled:I||h})]})})]})]})};export{Bt as RequisitionListView,Bt as default};
3
+ import{jsxs as k,jsx as n,Fragment as de}from"@dropins/tools/preact-jsx-runtime.js";import*as l from"@dropins/tools/preact-compat.js";import{useState as P,useEffect as Y,useCallback as T}from"@dropins/tools/preact-compat.js";import{b as ke,a as ye,d as ve,u as Ce,g as G,i as Re}from"../chunks/addRequisitionListItemsToCart.js";import{Icon as j,Button as K,Price as me,Field as Se,Input as Ie,Image as Pe,Checkbox as Ae,Table as Ne,ProgressSpinner as Ee,InLineAlert as Te,Pagination as xe}from"@dropins/tools/components.js";import{events as b}from"@dropins/tools/event-bus.js";import{useState as pe,useCallback as U}from"@dropins/tools/preact-hooks.js";import{classes as ge,VComponent as Ve}from"@dropins/tools/lib.js";import{D as J}from"../chunks/RequisitionListForm.js";import"../chunks/state.js";import{u as Me,E as De}from"../chunks/RequisitionListView.js";import{h as He}from"@dropins/tools/preact.js";import{useText as ee}from"@dropins/tools/i18n.js";import{R as Be}from"../chunks/RequisitionListHeader.js";import{R as ze}from"../chunks/RequisitionListModal.js";import{P as Fe}from"../chunks/PageSizePicker.js";import"../chunks/updateRequisitionList.js";import"@dropins/tools/fetch-graphql.js";import"../chunks/deleteRequisitionList.js";function We(){const[a,R]=pe(null),[p,d]=pe(new Set),y=U((f,S)=>{d(m=>{const w=new Set(m);return S?w.add(f):w.delete(f),w})},[]),v=U(()=>{var S;const f=(S=a==null?void 0:a.items)==null?void 0:S.map(m=>m.uid);d(new Set(f))},[a]),A=U(()=>{d(new Set)},[]);return{currentRequisitionList:a,setCurrentRequisitionList:R,selectedItems:p,setSelectedItems:d,handleItemSelection:y,handleSelectAll:v,handleSelectNone:A}}const $e=a=>l.createElement("svg",{width:24,height:24,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",...a},l.createElement("g",{clipPath:"url(#clip0_102_196)"},l.createElement("path",{vectorEffect:"non-scaling-stroke",d:"M18.3601 18.16H6.5601L4.8801 3H2.3501M19.6701 19.59C19.6701 20.3687 19.0388 21 18.2601 21C17.4814 21 16.8501 20.3687 16.8501 19.59C16.8501 18.8113 17.4814 18.18 18.2601 18.18C19.0388 18.18 19.6701 18.8113 19.6701 19.59ZM7.42986 19.59C7.42986 20.3687 6.79858 21 6.01986 21C5.24114 21 4.60986 20.3687 4.60986 19.59C4.60986 18.8113 5.24114 18.18 6.01986 18.18C6.79858 18.18 7.42986 18.8113 7.42986 19.59Z",stroke:"currentColor",strokeLinejoin:"round"}),l.createElement("path",{vectorEffect:"non-scaling-stroke",d:"M5.25 6.37L20.89 8.06L20.14 14.8H6.19",stroke:"currentColor",strokeLinejoin:"round"})),l.createElement("defs",null,l.createElement("clipPath",{id:"clip0_102_196"},l.createElement("rect",{vectorEffect:"non-scaling-stroke",width:19.29,height:19.5,fill:"white",transform:"translate(2.3501 2.25)"})))),je=a=>l.createElement("svg",{width:24,height:24,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",...a},l.createElement("path",{d:"M17.3332 11.75H6.6665",strokeWidth:1.5,strokeLinecap:"square",strokeLinejoin:"round",vectorEffect:"non-scaling-stroke",fill:"none",stroke:"currentColor"})),Qe=a=>l.createElement("svg",{id:"Icon_Search_Base","data-name":"Icon \\u2013 Search \\u2013 Base",xmlns:"http://www.w3.org/2000/svg",width:24,height:24,fill:"none",viewBox:"0 0 24 24",...a},l.createElement("g",{id:"Large"},l.createElement("rect",{id:"Placement_area","data-name":"Placement area",width:24,height:24,fill:"#fff",opacity:0}),l.createElement("g",{id:"Search_icon","data-name":"Search icon",transform:"translate(3.75 3.75)"},l.createElement("circle",{vectorEffect:"non-scaling-stroke",id:"Ellipse_186","data-name":"Ellipse 186",cx:6,cy:6,r:6,fill:"none",stroke:"currentColor"}),l.createElement("line",{vectorEffect:"non-scaling-stroke",id:"Line_556","data-name":"Line 556",x2:6,y2:6,transform:"translate(10.5 10.5)",fill:"none",stroke:"currentColor"})))),he=a=>l.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",...a},l.createElement("path",{d:"M1 5H23",stroke:"currentColor",strokeWidth:1.5,strokeMiterlimit:10}),l.createElement("path",{d:"M17.3674 22H6.63446C5.67952 22 4.88992 21.2688 4.8379 20.3338L4 5H20L19.1621 20.3338C19.1119 21.2688 18.3223 22 17.3655 22H17.3674Z",stroke:"currentColor",strokeWidth:1.5,strokeMiterlimit:10}),l.createElement("path",{d:"M9.87189 2H14.1281C14.6085 2 15 2.39766 15 2.88889V5H9V2.88889C9 2.39912 9.39006 2 9.87189 2Z",stroke:"currentColor",strokeWidth:1.5,strokeMiterlimit:10}),l.createElement("path",{d:"M8.87402 8.58057L9.39348 17.682",stroke:"currentColor",strokeWidth:1.5,strokeMiterlimit:10}),l.createElement("path",{d:"M14.6673 8.58057L14.146 17.682",stroke:"currentColor",strokeWidth:1.5,strokeMiterlimit:10})),Ze=({className:a,title:R="404 - Not Found",message:p="The requisition list you are looking for does not exist.",actionLabel:d,onAction:y,...v})=>k("div",{className:ge(["not-found",a]),"data-testid":"not-found",...v,children:[n(j,{source:Qe,size:"64",stroke:"2"}),n("h2",{children:R}),p&&n("p",{children:p}),d&&y&&n(K,{variant:"primary",onClick:y,children:d})]}),Oe=({className:a,items:R,selectedItems:p,currentPage:d,pageSize:y,canEdit:v=!0,handleItemSelection:A,handleUpdateQuantity:f,onAddToCart:S,onDeleteItem:m,...w})=>{const g=ee({productNameHeader:"RequisitionList.RequisitionListView.productListTable.headers.productName",skuHeader:"RequisitionList.RequisitionListView.productListTable.headers.sku",priceHeader:"RequisitionList.RequisitionListView.productListTable.headers.price",quantityHeader:"RequisitionList.RequisitionListView.productListTable.headers.quantity",subtotalHeader:"RequisitionList.RequisitionListView.productListTable.headers.subtotal",actionsHeader:"RequisitionList.RequisitionListView.productListTable.headers.actions",actionAddToCart:"RequisitionList.RequisitionListView.actionAddToCart",actionDelete:"RequisitionList.RequisitionListView.actionDelete",itemQuantity:"RequisitionList.RequisitionListView.productListTable.itemQuantity"}),z=[{label:"#",key:"index"},{label:"item",key:"item"},{label:g.priceHeader,key:"price"},{label:g.quantityHeader,key:"quantity"},{label:g.subtotalHeader,key:"subtotal"}];v&&(z.unshift({label:"",key:"selector"}),z.push({label:g.actionsHeader,key:"actions"}));const Q=(e,s)=>{const u=e.target.checked;A(s.uid,u)},Z=e=>(d-1)*y+e+1,D=e=>{var s,u;return((s=e.configured_product)==null?void 0:s.name)||((u=e.product)==null?void 0:u.name)||e.sku},E=e=>{var s,u,L,I;return(s=e.configured_product)!=null&&s.images?(u=e.configured_product.images[0])==null?void 0:u.url:(L=e.product)!=null&&L.images?(I=e.product.images[0])==null?void 0:I.url:""},O=e=>{var s;return((s=e.product)==null?void 0:s.name)||e.sku},X=e=>{var s;return(s=e.configured_product)==null?void 0:s.name},F=e=>{var s;return((s=e.configured_product)==null?void 0:s.sku)||e.sku},W=e=>{var s,u,L,I,x,r,N,V;return((I=(L=(u=(s=e.configured_product)==null?void 0:s.price)==null?void 0:u.final)==null?void 0:L.amount)==null?void 0:I.value)||((V=(N=(r=(x=e.product)==null?void 0:x.price)==null?void 0:r.final)==null?void 0:N.amount)==null?void 0:V.value)||0},H=e=>{var s,u,L,I,x,r,N,V;return((I=(L=(u=(s=e.configured_product)==null?void 0:s.price)==null?void 0:u.final)==null?void 0:L.amount)==null?void 0:I.currency)||((V=(N=(r=(x=e.product)==null?void 0:x.price)==null?void 0:r.final)==null?void 0:N.amount)==null?void 0:V.currency)},B=e=>W(e)*e.quantity,$=R.map((e,s)=>({selector:n(Ae,{className:"requisition-list-view-product-list-table__checkbox",name:"itemSelected","data-testid":`item-checkbox-${e.sku}`,onChange:u=>Q(u,e),value:e.sku,checked:p.has(e.uid)}),index:n("div",{className:"requisition-list-view-product-list-table__index-container",children:Z(s)}),item:k("div",{className:"requisition-list-view-product-list-table__item-container",children:[n(Pe,{className:"requisition-list-view-product-list-table__thumbnail",alt:D(e),src:E(e)}),k("div",{className:"requisition-list-view-product-list-table__item-details",children:[n("div",{className:"requisition-list-view-product-list-table__product-name",children:O(e)}),n("span",{className:"requisition-list-view-product-list-table__product-configurable-name",children:X(e)}),n("div",{className:"requisition-list-view-product-list-table__sku",children:F(e)})]})]}),price:n(me,{className:"requisition-list-view-product-list-table__price",amount:W(e),currency:H(e)}),quantity:n("span",{className:"requisition-list-view-product-list-table__quantity",children:n(Se,{disabled:!1,children:n(Ie,{id:"requisition-list-item-quantity",name:"quantity",type:"text",value:e.quantity,onBlur:u=>{const L=Number.parseInt(u.target.value,10);f(e.uid,L)}})})}),subtotal:n(me,{className:"requisition-list-view-product-list-table__price",amount:B(e),currency:H(e)}),actions:k("div",{className:"requisition-list-view__bulk-actions",children:[n(K,{type:"button",onClick:()=>S([e.uid]),icon:n(j,{source:$e}),"data-testid":"product-list-table-add-to-cart-button"}),n(K,{type:"button",variant:"secondary",icon:n(j,{source:he}),onClick:()=>m([e.uid]),"data-testid":"product-list-table-delete-button"})]})})),t=n(Ne,{columns:z,rowData:$,"data-testid":"product-list-table",mobileLayout:"stacked"});return n(Ve,{node:He("div",{}),className:ge(["requisition-list-view-product-list-table-container",a]),"data-testid":"product-list-table-container",...w,children:t})},Je=({selectedItems:a,deletingItemId:R,addingToCartItemId:p,bulkAddingToCart:d,updatingQuantityItemId:y,onSelectAll:v,onSelectNone:A,onBulkAddToCart:f,onBulkDelete:S})=>{const m=ee({statusDeleting:"RequisitionList.RequisitionListView.statusDeleting",actionSelectAll:"RequisitionList.RequisitionListView.actionSelectAll",actionSelectNone:"RequisitionList.RequisitionListView.actionSelectNone",actionAddToCart:"RequisitionList.RequisitionListView.actionAddToCart",actionDeleteSelectedItems:"RequisitionList.RequisitionListView.actionDeleteSelectedItems",statusBulkAddingToCart:"RequisitionList.RequisitionListView.statusBulkAddingToCart"}),w=R!==null||p!==null||d||y!==null,g=a.size>0;return k("div",{className:"requisition-list-view__batch-actions",children:[k("div",{className:"requisition-list-view__batch-actions-left",children:[n("button",{"data-testid":"bulk-actions-select-toggle-btn",type:"button",className:`requisition-list-view__batch-actions-select-toggle ${g?"requisition-list-view__batch-actions-select-toggle--active":""}`,onClick:g?A:v,disabled:w,"aria-label":g?m.actionSelectNone:m.actionSelectAll,children:n(j,{source:je})}),n("button",{type:"button",className:"requisition-list-view__batch-actions-select-label",onClick:g?A:v,disabled:w,children:m.actionSelectAll})]}),g&&k("div",{className:"requisition-list-view__batch-actions-buttons",children:[n("span",{className:"requisition-list-view__batch-actions-count-badge","aria-label":`${a.size} items selected`,children:a.size}),n(K,{"data-testid":"bulk-actions-add-to-cart-btn",type:"button",variant:"secondary",onClick:f,disabled:w,children:d?m.statusBulkAddingToCart:m.actionAddToCart}),n("button",{"data-testid":"bulk-actions-delete-btn",type:"button",className:"requisition-list-view__batch-actions-delete-icon",onClick:S,disabled:w,"aria-label":m.actionDeleteSelectedItems,children:n(j,{source:he})})]})]})},pt=({requisitionListUid:a,skipProductLoading:R=!1,pageSize:p=J,routeRequisitionListGrid:d})=>{var oe,se,ae,re,ce,le;const[y,v]=P(!1),[A,f]=P(null),[S,m]=P(null),[w,g]=P(!1),[z,Q]=P(null),[Z,D]=P(!1),[E,O]=P(p),[X,F]=P(!0),[W,H]=P(!1),[B,$]=P([]),{currentRequisitionList:t,setCurrentRequisitionList:e,selectedItems:s,setSelectedItems:u,handleItemSelection:L,handleSelectAll:I,handleSelectNone:x}=We(),r=ee({emptyRequisitionList:"RequisitionList.RequisitionListView.emptyRequisitionList",errorLoadingProducts:"RequisitionList.RequisitionListView.errorLoadingProducts",errorLoadPage:"RequisitionList.RequisitionListView.errorLoadPage",notFoundTitle:"RequisitionList.RequisitionListView.notFoundTitle",notFoundMessage:"RequisitionList.RequisitionListView.notFoundMessage",notFoundActionLabel:"RequisitionList.RequisitionListView.notFoundActionLabel",show:"RequisitionList.RequisitionListView.show",itemsCounter:"RequisitionList.RequisitionListView.itemsCounter",deleteItemsTitle:"RequisitionList.RequisitionListView.deleteItemsTitle",deleteItemsMessage:"RequisitionList.RequisitionListView.deleteItemsMessage",confirmAction:"RequisitionList.RequisitionListView.confirmAction",cancelAction:"RequisitionList.RequisitionListView.cancelAction"}),{alert:N,setAlert:V,handleRequisitionListAlert:te}=Me();Y(()=>{const i=b.on("requisitionList/data",c=>{(c==null?void 0:c.uid)===a&&(e(c),u(new Set))}),o=b.on("requisitionList/alert",te);return()=>{i==null||i.off(),o==null||o.off()}},[te,a,e,u]),Y(()=>{O(p)},[p]);const q=T(async i=>{var c,_;const o=((c=i.items)==null?void 0:c.map(C=>C.sku))||[];if(o.length===0)return i;v(!0);try{const C=await ke(o);if(C){const M=new Map;return C.forEach(h=>{M.set(h.sku,h)}),{...i,items:(_=i.items)==null?void 0:_.map(h=>({...h,product:M.get(h.sku)||h.product}))}}return console.warn("No products found"),i}catch(C){return console.warn(C instanceof Error?C.message:r.errorLoadingProducts),i}finally{v(!1)}},[r.errorLoadingProducts]);Y(()=>{if(!a){F(!1);return}if(t&&t.uid===a)return;F(!0),(async()=>{try{const o=await G(a,1,p);if(o)if(R)e(o);else{const c=await q(o);e(c)}}catch(o){console.error("Failed to initialize requisition list from UID:",o)}finally{F(!1)}})()},[a,p,R,q,e,t]);const ie=T(async i=>{i&&i.length===1?(g(!1),m(i)):(g(!0),m(null));try{const o=await ye(t.uid,i);o&&o.length>0?b.emit("requisitionList/alert",{action:"move",type:"error",context:"product",message:o.map(c=>c.message)}):b.emit("requisitionList/alert",{action:"move",type:"success",context:"product"})}catch{b.emit("requisitionList/alert",{action:"move",type:"error",context:"product"})}finally{m(null),g(!1)}},[t]),ne=T(i=>{i&&i.length>0&&($(i),H(!0))},[]),fe=T(async()=>{B.length===1?f(B[0]):f("bulk");try{const i=await ve(t.uid,B,E,t.page_info.current_page);if(i){const o=await q(i);e(o),b.emit("requisitionList/alert",{action:"delete",type:"success",context:"product"})}else b.emit("requisitionList/alert",{action:"delete",type:"error",context:"product"})}catch{b.emit("requisitionList/alert",{action:"delete",type:"error",context:"product"})}finally{f(null),H(!1),$([])}},[B,t,E,q,e]),we=T(async(i,o)=>{var c;Q(i);try{const _=(c=t.items)==null?void 0:c.find(h=>h.uid===i);if(!_){b.emit("requisitionList/alert",{action:"update",type:"error",context:"product"});return}const C={item_id:_.uid,entered_options:_.entered_options,selected_options:_.selected_options,quantity:o},M=await Ce(t.uid,[C],E,t.page_info.current_page);if(M){const h=await q(M);e(h),b.emit("requisitionList/alert",{action:"update",type:"success",context:"product"})}else b.emit("requisitionList/alert",{action:"update",type:"error",context:"product"})}catch{b.emit("requisitionList/alert",{action:"update",type:"error",context:"product"})}finally{Q(null)}},[t,q,e,E]),Le=T(async i=>{D(!0);try{const o=await G(t.uid,i,E);if(o){const c=await q(o);e(c)}else console.warn(r.errorLoadPage)}catch(o){console.warn(o instanceof Error?o.message:r.errorLoadPage)}finally{D(!1)}},[t==null?void 0:t.uid,q,E,r,e]),qe=T(async i=>{O(i),D(!0);try{const o=await G(t.uid,1,i);if(o){const c=await q(o);e(c)}else console.warn(r.errorLoadPage)}catch{console.warn(r.errorLoadPage)}finally{D(!1)}},[t==null?void 0:t.uid,q,r,e]),_e=T(async i=>{const o=await q(i);e(o)},[e,q]),be=()=>{var h,ue;const i=((h=t.page_info)==null?void 0:h.page_size)??J,o=((ue=t.page_info)==null?void 0:ue.current_page)??1,c=i*o,_=(t==null?void 0:t.items_count)??0,C=c-i+1,M=c>_?_:c;return n("span",{className:"requisition-list-view__pagination-items",children:r.itemsCounter.replace("{from}",C.toString()).replace("{to}",M.toString()).replace("{total}",_.toString())})};return k("div",{className:"requisition-list-view__container",children:[X?n("div",{className:"requisition-list-view__loading",children:n(Ee,{stroke:"4",size:"large"})}):!t||!Re(t==null?void 0:t.uid)?n(Ze,{title:r.notFoundTitle,message:r.notFoundMessage,actionLabel:d?r.notFoundActionLabel:void 0,onAction:d?()=>{const i=d();i&&typeof i=="string"&&(window.location.href=i)}:void 0}):k(de,{children:[n(Be,{requisitionList:t,routeRequisitionListGrid:d,onUpdate:_e}),t.items_count===0?n(De,{textContent:`${t.name} ${r.emptyRequisitionList}`}):k(de,{children:[N&&n(Te,{heading:N.description,type:N.type,variant:"primary",onDismiss:()=>V(null)}),n(Je,{selectedItems:s,deletingItemId:A,addingToCartItemId:S,bulkAddingToCart:w,updatingQuantityItemId:z,onSelectAll:I,onSelectNone:x,onBulkAddToCart:()=>ie(Array.from(s)),onBulkDelete:()=>ne(Array.from(s))}),n(Oe,{items:t.items,selectedItems:s,currentPage:((oe=t.page_info)==null?void 0:oe.current_page)||1,pageSize:((se=t.page_info)==null?void 0:se.page_size)||J,handleItemSelection:L,handleUpdateQuantity:we,onAddToCart:ie,onDeleteItem:ne}),t.page_info&&k("div",{className:"requisition-list-view__pagination",children:[be(),(((ae=t.page_info)==null?void 0:ae.total_pages)||0)>1&&n(xe,{totalPages:((re=t.page_info)==null?void 0:re.total_pages)||1,currentPage:((ce=t.page_info)==null?void 0:ce.current_page)||1,onChange:Le,disabled:Z||y}),k("div",{className:"requisition-list-view__pagination-picker",children:[n("span",{children:r.show}),n(Fe,{currentPageSize:((le=t.page_info)==null?void 0:le.page_size)||J,onPageSizeChange:qe,disabled:Z||y})]})]})]})]}),W&&n(ze,{isOpen:W,isLoading:A!==null,title:r.deleteItemsTitle,modalContent:r.deleteItemsMessage,confirmBtnCaption:r.confirmAction,closeBtnCaption:r.cancelAction,handleModalOnClose:()=>{H(!1),$([])},handleModalOnConfirm:fe})]})};export{pt as RequisitionListView,pt as default};
4
4
  //# sourceMappingURL=RequisitionListView.js.map