@dropins/storefront-quote-management 0.0.1-alpha27 → 0.0.1-alpha29
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.
- package/api/duplicateNegotiableQuote/duplicateNegotiableQuote.d.ts +8 -0
- package/api/duplicateNegotiableQuote/graphql/duplicateNegotiableQuoteMutation.d.ts +10 -0
- package/api/duplicateNegotiableQuote/index.d.ts +10 -0
- package/api/graphql/NegotiableQuoteTemplateFragment.d.ts +1 -1
- package/api/index.d.ts +2 -0
- package/api/setLineItemNote/graphql/SetLineItemNoteMutation.d.ts +10 -0
- package/api/setLineItemNote/index.d.ts +10 -0
- package/api/setLineItemNote/setLineItemNote.d.ts +10 -0
- package/api.js +11 -239
- package/api.js.map +1 -1
- package/chunks/ConfirmationModal.js +4 -0
- package/chunks/ConfirmationModal.js.map +1 -0
- package/chunks/ItemsQuoted.js +1 -1
- package/chunks/ItemsQuoted.js.map +1 -1
- package/chunks/ItemsQuotedTemplate.js +1 -1
- package/chunks/ItemsQuotedTemplate.js.map +1 -1
- package/chunks/NegotiableQuoteTemplateFragment.js +190 -0
- package/chunks/NegotiableQuoteTemplateFragment.js.map +1 -0
- package/chunks/OrderSummaryLine.js +1 -1
- package/chunks/OrderSummaryLine.js.map +1 -1
- package/chunks/QuotePricesSummary.js +1 -1
- package/chunks/QuotePricesSummary.js.map +1 -1
- package/chunks/TabbedContent.js +1 -1
- package/chunks/TabbedContent.js.map +1 -1
- package/chunks/dateUtils.js +1 -1
- package/chunks/dateUtils.js.map +1 -1
- package/chunks/duplicateNegotiableQuote.js +121 -0
- package/chunks/duplicateNegotiableQuote.js.map +1 -0
- package/chunks/generateQuoteFromTemplate.js +12 -0
- package/chunks/generateQuoteFromTemplate.js.map +1 -0
- package/chunks/getQuoteTemplates.js +2 -2
- package/chunks/getQuoteTemplates.js.map +1 -1
- package/chunks/openQuoteTemplate.js +31 -0
- package/chunks/openQuoteTemplate.js.map +1 -0
- package/chunks/setLineItemNote.js +47 -0
- package/chunks/setLineItemNote.js.map +1 -0
- package/chunks/state.js +1 -1
- package/chunks/state.js.map +1 -1
- package/chunks/transform-quote-template.js +4 -0
- package/chunks/transform-quote-template.js.map +1 -0
- package/chunks/transform-quote.js +1 -1
- package/chunks/transform-quote.js.map +1 -1
- package/components/LineItemNoteModal/LineItemNoteModal.d.ts +16 -0
- package/components/LineItemNoteModal/index.d.ts +11 -0
- package/components/ManageNegotiableQuoteTemplate/ManageNegotiableQuoteTemplate.d.ts +0 -2
- package/components/ProductListTable/ProductListTable.d.ts +8 -0
- package/components/index.d.ts +1 -0
- package/containers/ItemsQuoted/ItemsQuoted.d.ts +1 -1
- package/containers/ItemsQuoted.js +1 -1
- package/containers/ItemsQuotedTemplate.js +1 -1
- package/containers/ManageNegotiableQuote/ManageNegotiableQuote.d.ts +4 -0
- package/containers/ManageNegotiableQuote.js +1 -1
- package/containers/ManageNegotiableQuote.js.map +1 -1
- package/containers/ManageNegotiableQuoteTemplate/ManageNegotiableQuoteTemplate.d.ts +13 -0
- package/containers/ManageNegotiableQuoteTemplate.js +1 -1
- package/containers/ManageNegotiableQuoteTemplate.js.map +1 -1
- package/containers/OrderSummary.js +1 -1
- package/containers/OrderSummary.js.map +1 -1
- package/containers/OrderSummaryLine.js +1 -1
- package/containers/QuoteSummaryList.js +1 -1
- package/containers/QuoteSummaryList.js.map +1 -1
- package/containers/QuoteTemplatesListTable/QuoteTemplatesListTable.d.ts +2 -0
- package/containers/QuoteTemplatesListTable.js +1 -1
- package/containers/QuoteTemplatesListTable.js.map +1 -1
- package/containers/QuotesListTable.js +1 -1
- package/containers/QuotesListTable.js.map +1 -1
- package/containers/RequestNegotiableQuoteForm.js +1 -1
- package/containers/RequestNegotiableQuoteForm.js.map +1 -1
- package/data/models/negotiable-quote-template-model.d.ts +18 -8
- package/data/transforms/__fixtures__/negotiableQuoteTemplateData.d.ts +6 -0
- package/i18n/en_US.json.d.ts +72 -0
- package/package.json +1 -1
- package/render.js +3 -3
- package/render.js.map +1 -1
- package/types/state.types.d.ts +3 -0
- package/chunks/removeNegotiableQuoteItems.js +0 -38
- package/chunks/removeNegotiableQuoteItems.js.map +0 -1
- package/chunks/renameNegotiableQuote.js +0 -104
- package/chunks/renameNegotiableQuote.js.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
/*! Copyright 2025 Adobe
|
|
2
2
|
All Rights Reserved. */
|
|
3
|
-
import{jsx as t,jsxs as s,Fragment as we}from"@dropins/tools/preact-jsx-runtime.js";import*as xe from"@dropins/tools/preact-compat.js";import{useState as c,useRef as ie,useEffect as y,useCallback as d,useMemo as f,createPortal as j}from"@dropins/tools/preact-compat.js";import{classes as l,VComponent as h,Slot as g}from"@dropins/tools/lib.js";import{f as Le}from"../chunks/dateUtils.js";/* empty css */import{Picker as ia,Skeleton as ma,SkeletonRow as H,Modal as la,Input as ca,TextArea as Re,Button as G,InLineAlert as L}from"@dropins/tools/components.js";import{events as w}from"@dropins/tools/event-bus.js";import"@dropins/tools/preact.js";import"@dropins/tools/preact-hooks.js";import{I as sa,C as me}from"../chunks/ItemsQuoted.js";/* empty css *//* empty css */import{T as da}from"../chunks/TabbedContent.js";/* empty css */import{useText as Ee}from"@dropins/tools/i18n.js";import{S as ua}from"../chunks/ShippingAddressDisplay.js";import{Q as ga}from"../chunks/QuoteHistoryLog3.js";import{g as ba,r as fa,c as pa,s as Ma,d as ha}from"../chunks/renameNegotiableQuote.js";import"../chunks/state.js";import{Q as Na}from"../chunks/QuoteCommentsList3.js";import{a as $,S as le}from"../chunks/WarningFilled.js";import"../chunks/QuotePricesSummary.js";import"../chunks/removeNegotiableQuoteItems.js";import"../chunks/transform-quote.js";import"@dropins/tools/fetch-graphql.js";import"../chunks/NegotiableQuoteFragment.js";import"../chunks/QuoteHistoryLog.js";import"../chunks/QuoteCommentsList.js";const qa=p=>xe.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",className:"feather feather-edit-2",...p},xe.createElement("path",{d:"M17 3a2.828 2.828 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5L17 3z"})),va=({className:p,dropdownPlaceholder:a,dropdownOptions:m,dropdownValue:N,handleDropdownChange:Q,buttons:e,...u})=>{const q=m&&m.length>0,S=e&&e.length>0,_=(m==null?void 0:m.map(M=>({text:M.label,value:M.value})))||[];return _.unshift({text:a||"",value:""}),t("div",{className:"quote-management-actions-bar__container","data-testid":"actions-bar-container",children:s("div",{className:l(["quote-management-actions-bar",p]),"data-testid":"actions-bar",...u,children:[q&&t(ia,{name:"dropdown",id:"dropdown",handleSelect:Q,className:"quote-management-actions-bar__dropdown","data-testid":"dropdown",options:_,value:N||""},`actions-bar-picker-${N||"empty"}`),S&&t("div",{className:"quote-management-actions-bar__buttons","data-testid":"buttons-container",children:e==null?void 0:e.map((M,C)=>t(h,{node:M,className:l(["quote-management-actions-bar__button"])},C))})]})})},Qa=({className:p,loading:a,quoteName:m,quoteStatus:N,banner:Q,details:e,actionBar:u,quoteContent:q,shippingInformationTitle:S,shippingInformation:_,quoteCommentsTitle:M,quoteComments:C,footer:b,...I})=>a?t(Sa,{}):s("div",{...I,className:l(["quote-management-manage-negotiable-quote",p]),children:[s("div",{className:l(["quote-management-manage-negotiable-quote__header"]),children:[m&&t(h,{node:m,className:l(["quote-management-manage-negotiable-quote__quote-name"])}),N&&t(h,{node:N,className:l(["quote-management-manage-negotiable-quote__quote-status"])})]}),Q&&t(h,{node:Q,className:l(["quote-management-manage-negotiable-quote__banner"])}),e&&t(h,{node:e,className:l(["quote-management-manage-negotiable-quote__details"])}),u&&t(h,{node:u,className:l(["quote-management-manage-negotiable-quote__action-bar"])}),q&&t(h,{node:q,className:l(["quote-management-manage-negotiable-quote__quote-content"])}),s("div",{"data-testid":"quote-shipping-information-container",className:l(["quote-management-manage-negotiable-quote__shipping-information-container"]),children:[S&&t(h,{node:S,className:l(["quote-management-manage-negotiable-quote__shipping-information-title"])}),_&&t(h,{node:_,className:l(["quote-management-manage-negotiable-quote__shipping-information"])})]}),s("div",{"data-testid":"quote-comments-container",className:l(["quote-management-manage-negotiable-quote__quote-comments-container"]),children:[M&&t(h,{node:M,className:l(["quote-management-manage-negotiable-quote__quote-comments-title"])}),C&&t(h,{node:C,className:l(["quote-management-manage-negotiable-quote__quote-comments"])})]}),t(h,{node:b,className:l(["quote-management-manage-negotiable-quote__footer"])})]}),Sa=()=>s(ma,{"data-testid":"manage-negotiable-quote-skeleton",children:[t(H,{variant:"heading",fullWidth:!0,size:"large"}),t(H,{variant:"row",fullWidth:!1,size:"small"}),t(H,{variant:"row",fullWidth:!1,size:"small"}),t(H,{variant:"row",fullWidth:!0}),t(H,{variant:"row",fullWidth:!0,size:"xlarge",lines:2}),t(H,{variant:"row",fullWidth:!1,size:"small"})]}),_a=({className:p,open:a,quoteName:m,renameReason:N,quoteNameError:Q,errorBanner:e,successBanner:u,showCloseButton:q=!0,onQuoteNameChange:S,onRenameReasonChange:_,onSave:M,onClose:C})=>{const b=Ee({title:"NegotiableQuote.Manage.rename.title",quoteNameLabel:"NegotiableQuote.Manage.rename.quoteNameLabel",reasonLabel:"NegotiableQuote.Manage.rename.reasonLabel",renameButton:"NegotiableQuote.Manage.rename.renameButton",cancelButton:"NegotiableQuote.Manage.rename.cancelButton"});return a?s(la,{open:a,size:"medium",title:t(we,{children:b.title}),onClose:C,clickToDismiss:!0,escapeToDismiss:!0,showCloseButton:q,className:l(["quote-management-rename-quote-modal",p]),"data-testid":"rename-quote-modal",children:[e&&t("div",{className:l(["quote-management-rename-quote-modal__error-banner"]),"data-testid":"rename-quote-modal-error-banner",children:e}),u&&t("div",{className:l(["quote-management-rename-quote-modal__success-banner"]),"data-testid":"rename-quote-modal-success-banner",children:u}),s("div",{className:l(["quote-management-rename-quote-modal__content"]),children:[s("div",{children:[t(ca,{name:"quoteName",type:"text",value:m,onInput:I=>S(I.target.value),floatingLabel:b.quoteNameLabel,required:!0,error:!!Q}),Q&&t("span",{className:l(["quote-management-rename-quote-modal__error-text"]),children:Q})]}),t(Re,{name:"quoteComment",value:N,onInput:I=>_(I.target.value),label:b.reasonLabel,rows:3})]}),s("div",{className:l(["quote-management-rename-quote-modal__actions"]),children:[t(G,{variant:"secondary",size:"medium",onClick:C,className:l(["quote-management-rename-quote-modal__cancel-button"]),children:b.cancelButton}),t(G,{variant:"primary",size:"medium",onClick:M,className:l(["quote-management-rename-quote-modal__save-button"]),children:b.renameButton})]})]}):null},at=({onActionsDropdownChange:p,slots:a,onActionsButtonClick:m,onSendForReview:N,...Q})=>{const[e,u]=c(void 0),[q,S]=c(!0),[_,M]=c(!1),[C,b]=c(null),[I,P]=c(!1),[T,ce]=c(""),[F,X]=c(!1),[se,J]=c(!1),[de,K]=c(!1),[ue,R]=c(""),[ge,B]=c(""),[be,Y]=c(!1),[U,z]=c(""),[Z,W]=c(""),[A,k]=c(""),[De,E]=c(""),[ee,O]=c(""),[ae,fe]=c(new Set),pe=ie(ae),te=ie(null),[D,ne]=c(""),V=ie(D),[Me,he]=c(!1);y(()=>{pe.current=ae},[ae]),y(()=>{V.current=D},[D]);const o=Ee({createdLabel:"NegotiableQuote.Manage.createdLabel",salesRepLabel:"NegotiableQuote.Manage.salesRepLabel",expiresLabel:"NegotiableQuote.Manage.expiresLabel",actionsLabel:"NegotiableQuote.Manage.actionsLabel",remove:"NegotiableQuote.Manage.actions.remove",close:"NegotiableQuote.Manage.actionButtons.close",delete:"NegotiableQuote.Manage.actionButtons.delete",print:"NegotiableQuote.Manage.actionButtons.print",createTemplate:"NegotiableQuote.Manage.actionButtons.createTemplate",createCopy:"NegotiableQuote.Manage.actionButtons.createCopy",shippingInformationTitle:"NegotiableQuote.Manage.shippingInformation.title",quoteCommentsTitle:"NegotiableQuote.Manage.quoteComments.title",quoteCommentsPlaceholder:"NegotiableQuote.Manage.quoteComments.placeholder",sendForReview:"NegotiableQuote.Manage.actionButtons.sendForReview",bannerTitle:"NegotiableQuote.Manage.bannerTitle",statusSubmitted:"NegotiableQuote.Manage.bannerStatusMessages.submitted",statusPending:"NegotiableQuote.Manage.bannerStatusMessages.pending",statusExpired:"NegotiableQuote.Manage.bannerStatusMessages.expired",errorFallback:"NegotiableQuote.Manage.confirmationModal.delete.errorFallback",closeSuccessMessage:"NegotiableQuote.Manage.confirmationModal.close.successDescription",closeModalTitle:"NegotiableQuote.Manage.actionButtons.close",closeModalMessage:"NegotiableQuote.Manage.confirmationModal.close.message",closeModalCancel:"NegotiableQuote.Manage.confirmationModal.cancel",closeModalConfirm:"NegotiableQuote.Manage.confirmationModal.close.confirm",closeModalConfirmLoading:"NegotiableQuote.Manage.confirmationModal.close.confirmLoading",closeModalSuccessHeading:"NegotiableQuote.Manage.confirmationModal.close.successHeading",renameErrorHeading:"NegotiableQuote.Manage.rename.errorHeading",renameQuoteNameRequired:"NegotiableQuote.Manage.rename.quoteNameRequired",renameErrorDefault:"NegotiableQuote.Manage.rename.errorDefault",renameSuccessHeading:"NegotiableQuote.Manage.rename.successHeading",renameSuccessMessage:"NegotiableQuote.Manage.rename.successMessage",confirmationModalCancel:"NegotiableQuote.Manage.confirmationModal.cancel",confirmationModalDeleteTitle:"NegotiableQuote.Manage.confirmationModal.delete.title",confirmationModalDeleteMessage:"NegotiableQuote.Manage.confirmationModal.delete.message",confirmationModalDeleteConfirm:"NegotiableQuote.Manage.confirmationModal.delete.confirm",confirmationModalDeleteErrorHeading:"NegotiableQuote.Manage.confirmationModal.delete.errorHeading",confirmationModalDeleteErrorFallback:"NegotiableQuote.Manage.confirmationModal.delete.errorFallback",noItemsSelectedModalTitle:"NegotiableQuote.Manage.confirmationModal.noItemsSelected.title",noItemsSelectedModalMessage:"NegotiableQuote.Manage.confirmationModal.noItemsSelected.message",noItemsSelectedModalConfirm:"NegotiableQuote.Manage.confirmationModal.noItemsSelected.confirm",confirmationModalDeleteSuccessHeading:"NegotiableQuote.Manage.confirmationModal.delete.successHeading",confirmationModalDeleteSuccessDescription:"NegotiableQuote.Manage.confirmationModal.delete.successDescription"});y(()=>{const n=w.on("quote-management/quote-data",r=>{const{quote:i}=r;i&&(u(i),S(!1))},{eager:!0});return()=>n==null?void 0:n.off()},[]),y(()=>{const n=w.on("quote-management/shipping-address-set",r=>{const{quote:i}=r;i&&u(i)},{eager:!0});return()=>n==null?void 0:n.off()},[]),y(()=>{const n=w.on("quote-management/quote-sent-for-review",r=>{const{quote:i}=r;u(i),ce(""),X(!1)},{eager:!0});return()=>n==null?void 0:n.off()},[]),y(()=>{const n=w.on("quote-management/quote-items-removed",r=>{const{quote:i,removedItemUids:v}=r;i&&u(i),v&&fe(x=>{const Te=new Set(x);return v.forEach(ra=>Te.delete(ra)),Te})},{eager:!0});return()=>n==null?void 0:n.off()},[]);const Ne=d((n,r)=>{fe(i=>{const v=new Set(i);return r?v.add(n.uid):v.delete(n.uid),v})},[]),qe=d(n=>{const r=n.target.value,i=pe.current;if(r==="remove"){if(ne(r),V.current=r,i.size===0)he(!0);else if(e&&te.current){const v=e.items.filter(x=>i.has(x.uid));te.current(v)}}p==null||p(n)},[p,e]),ve=d(()=>{he(!1),ne(""),V.current=""},[]);y(()=>{const n=w.on("quote-management/negotiable-quote-closed",async r=>{K(!1),B(""),R(o.closeSuccessMessage),u(i=>{var v;return i!=null&&i.uid&&((v=r.closedQuoteUids)!=null&&v.includes(i.uid))&&ba(i.uid).then(x=>{u(x)}).catch(x=>{console.warn("Failed to refresh quote data after closure:",x)}),i}),setTimeout(()=>{J(!1),R("")},2e3)},{eager:!0});return()=>n==null?void 0:n.off()},[o.closeSuccessMessage]),y(()=>{const n=w.on("quote-management/negotiable-quote-close-error",r=>{console.log("Close error event received:",r),K(!1),R("");const i=r.error.message||o.errorFallback;B(i)},{eager:!0});return()=>n==null?void 0:n.off()},[o.errorFallback]),y(()=>{const n=w.on("quote-management/quote-renamed",r=>{const{quote:i}=r;u(i),k(""),E(""),O(o.renameSuccessMessage),setTimeout(()=>{Y(!1),z(""),W(""),O("")},2e3)},{eager:!0});return()=>n==null?void 0:n.off()},[o.renameSuccessMessage]);const Qe=d(()=>{z((e==null?void 0:e.name)||""),W(""),k(""),E(""),O(""),Y(!0)},[e]),He=d(()=>{Y(!1),z(""),W(""),k(""),E(""),O("")},[]),Fe=d(n=>{z(n),n.trim()&&E("")},[]),Be=d(async()=>{if(!U.trim()){E(o.renameQuoteNameRequired);return}try{k(""),E(""),await fa({quoteUid:e.uid,quoteName:U,quoteComment:Z.trim()||void 0})}catch(n){k(n.message||o.renameErrorDefault)}},[e,U,Z,o.renameQuoteNameRequired,o.renameErrorDefault]),ke=f(()=>{const n=e&&(e.lockedForEditing===!0||e.lockedForEditing===void 0&&(e.status==="SUBMITTED"||e.status==="PENDING"||e.status==="ORDERED"||e.status==="CLOSED"));return t(g,{name:"QuoteName",slot:a==null?void 0:a.QuoteName,context:{quoteName:e==null?void 0:e.name,quoteData:e},children:s("div",{className:"quote-management-manage-negotiable-quote__quote-name-wrapper",children:[t("h1",{"data-testid":"quote-name",className:"quote-management-manage-negotiable-quote__quote-name-title",children:e==null?void 0:e.name}),t("button",{onClick:Qe,disabled:n,"data-testid":"rename-quote-button",className:"quote-management-manage-negotiable-quote__rename-button","aria-label":"Rename quote",children:t(qa,{})})]})})},[a==null?void 0:a.QuoteName,e,Qe]),Pe=f(()=>t(g,{name:"QuoteStatus",slot:a==null?void 0:a.QuoteStatus,context:{quoteStatus:e==null?void 0:e.status,quoteData:e},children:t("div",{"data-testid":"quote-status",children:e==null?void 0:e.status})}),[a==null?void 0:a.QuoteStatus,e]),Se=d(n=>{switch(n){case"SUBMITTED":return o.statusSubmitted;case"PENDING":return o.statusPending;case"EXPIRED":return o.statusExpired;default:return null}},[o])(e==null?void 0:e.status),_e=Se&&t(L,{type:"warning",variant:"secondary",icon:t($,{}),heading:o.bannerTitle,description:Se}),Ue=_e&&t(g,{name:"Banner","data-testid":"banner",slot:a==null?void 0:a.Banner,context:{quoteData:e},children:_e}),ze=f(()=>{if(!e)return null;const n=e.expirationDate?Le(e.expirationDate,"short"):void 0;return s(g,{name:"Details",slot:a==null?void 0:a.Details,context:{quoteData:e},children:[s("div",{className:"quote-management-manage-negotiable-quote__detail",children:[t("span",{className:"quote-management-manage-negotiable-quote__detail-title","data-testid":"created-label",children:o.createdLabel}),s("span",{className:"quote-management-manage-negotiable-quote__detail-content","data-testid":"created-value",children:[Le(e.createdAt,"short")," (",e.buyer.firstname," ",e.buyer.lastname,")"]})]}),s("div",{className:"quote-management-manage-negotiable-quote__detail",children:[t("span",{className:"quote-management-manage-negotiable-quote__detail-title","data-testid":"sales-rep-label",children:o.salesRepLabel}),t("span",{className:"quote-management-manage-negotiable-quote__detail-content","data-testid":"sales-rep-value",children:e.salesRepName})]}),s("div",{className:"quote-management-manage-negotiable-quote__detail",children:[t("span",{className:"quote-management-manage-negotiable-quote__detail-title","data-testid":"expires-label",children:o.expiresLabel}),t("span",{className:"quote-management-manage-negotiable-quote__detail-content","data-testid":"expires-value",children:n})]})]})},[a==null?void 0:a.Details,o,e]),Ce=f(()=>[{label:o.close,value:"close",disabled:!(e!=null&&e.canClose)},{label:o.delete,value:"delete",disabled:!(e!=null&&e.canDelete)},{label:o.print,value:"print"},{label:o.createTemplate,value:"createTemplate"},{label:o.createCopy,value:"createCopy"}],[o,e==null?void 0:e.canDelete,e==null?void 0:e.canClose]),We=f(()=>{const n=r=>{switch(r){case"close":J(!0),B(""),R(""),m==null||m(r);break;case"delete":M(!0),m==null||m(r);break;case"print":m==null||m(r);break;case"createTemplate":m==null||m(r);break;case"createCopy":m==null||m(r);break}};return t(g,{name:"ActionBar",slot:a==null?void 0:a.ActionBar,context:{quoteData:e,actionsBarDropdownValue:D},children:t(va,{dropdownPlaceholder:o.actionsLabel,dropdownOptions:[{label:o.remove,value:"remove"}],dropdownValue:D,handleDropdownChange:qe,buttons:Ce.map(r=>t(G,{variant:"tertiary",onClick:()=>n(r.value),"data-testid":`actions-bar-${r.value}-button`,"data-action":r.value,disabled:r.disabled,children:r.label},r.value))})})},[Ce,o,a==null?void 0:a.ActionBar,e,qe,m,D]),Oe=f(()=>t(g,{name:"QuoteContent",slot:a==null?void 0:a.QuoteContent,context:{quoteData:e},children:t(da,{tabs:new Map([["items-quoted","Items Quoted"],["comments","Comments"],["history-log","History Log"]]),tabsContent:new Map([["items-quoted",t(g,{name:"ItemsQuotedTab",slot:a==null?void 0:a.ItemsQuotedTab,context:{quoteData:e},children:t(sa,{quoteData:e,onItemCheckboxChange:Ne,onRemoveItemsRef:n=>{te.current=n},onRemoveModalStateChange:n=>{!n&&V.current==="remove"&&ne("")}})},"items-quoted")],["comments",t(g,{name:"CommentsTab",slot:a==null?void 0:a.CommentsTab,context:{quoteData:e},children:t(Na,{quoteData:e})},"comments")],["history-log",t(g,{name:"HistoryLogTab",slot:a==null?void 0:a.HistoryLogTab,context:{quoteData:e},children:t(ga,{quoteData:e})},"history-log")]])})}),[a==null?void 0:a.QuoteContent,a==null?void 0:a.HistoryLogTab,a==null?void 0:a.CommentsTab,a==null?void 0:a.ItemsQuotedTab,e,Ne]),Ve=f(()=>t(g,{name:"ShippingInformationTitle",slot:a==null?void 0:a.ShippingInformationTitle,context:{quoteData:e},children:t("h2",{children:o.shippingInformationTitle})}),[a==null?void 0:a.ShippingInformationTitle,e,o]),je=f(()=>t(g,{name:"ShippingInformation",slot:a==null?void 0:a.ShippingInformation,context:{quoteData:e,loading:q,setLoading:S},children:t(ua,{quoteData:e,loading:q,"data-testid":"manage-quote-shipping-address"})}),[a==null?void 0:a.ShippingInformation,e,q,S]),$e=f(()=>t(g,{name:"QuoteCommentsTitle",slot:a==null?void 0:a.QuoteCommentsTitle,context:{quoteData:e},children:t("h2",{children:o.quoteCommentsTitle})}),[a==null?void 0:a.QuoteCommentsTitle,o,e]),Ge=f(()=>t(g,{name:"QuoteComments",slot:a==null?void 0:a.QuoteComments,context:{quoteData:e},children:t(Re,{name:"quoteComments",placeholder:o.quoteCommentsPlaceholder,rows:3,value:T,onInput:n=>{ce(n.target.value)},disabled:F})}),[a==null?void 0:a.QuoteComments,o,e,T,F]),Xe=d(async()=>{if(e!=null&&e.uid){K(!0),B(""),R("");try{await pa({quoteUids:[e.uid]})}catch(n){console.error("Failed to close quote:",n)}}},[e]),Je=d(()=>{J(!1),B(""),R("")},[]),ye=d(async()=>{if(N){N({quoteData:e,comment:T.trim()||void 0});return}X(!0);try{await Ma({quoteUid:e.uid,comment:T.trim()||void 0})}catch(n){console.error("Failed to send quote for review:",n),X(!1)}},[e,N,T]),Ke=f(()=>t(g,{name:"Footer",slot:a==null?void 0:a.Footer,context:{quoteData:e,comment:T,isSubmitting:F},children:t(G,{variant:"primary",onClick:ye,"data-testid":"send-for-review-button",disabled:!(e!=null&&e.canSendForReview)||F||!e,children:o.sendForReview})}),[a==null?void 0:a.Footer,o,e,T,F,ye]),Ye=f(()=>A?t(L,{type:"error",variant:"primary",icon:t($,{color:"var(--color-error)"}),heading:o.renameErrorHeading,description:A}):void 0,[A,o.renameErrorHeading]),Ze=f(()=>ee?t(L,{type:"success",variant:"primary",icon:t(le,{}),heading:o.renameSuccessHeading,description:ee}):void 0,[ee,o.renameSuccessHeading]),oe=d(n=>n.errors&&Array.isArray(n.errors)&&n.errors.length>0?n.errors[0].message||o.confirmationModalDeleteErrorFallback:(n==null?void 0:n.message)||o.confirmationModalDeleteErrorFallback,[o.confirmationModalDeleteErrorFallback]),Ae=d(()=>{M(!1),b(null),P(!1)},[]),ea=d(async()=>{if(e!=null&&e.uid){b(null),P(!1);try{const{operationResults:n}=await ha(e.uid),r=n.find(i=>i.__typename==="DeleteNegotiableQuoteOperationFailure");if(r){const i=oe(r);b(i);return}P(!0)}catch(n){const r=oe(n);b(r)}}},[e,oe]),aa=d(()=>{b(null)},[]),ta=d(()=>{P(!1)},[]),na=C?t(L,{type:"error",variant:"primary",icon:t($,{}),heading:o.confirmationModalDeleteErrorHeading,description:C,onDismiss:aa,"data-testid":"confirmation-modal-error-banner"}):null,Ie=(I?t(L,{type:"success",variant:"primary",icon:t(le,{}),heading:o.confirmationModalDeleteSuccessHeading,description:o.confirmationModalDeleteSuccessDescription,onDismiss:ta,"data-testid":"confirmation-modal-success-banner"}):null)||na,oa={...Q,loading:q,quoteName:ke,quoteStatus:Pe,banner:Ue||void 0,details:ze,actionBar:We,quoteContent:Oe,shippingInformationTitle:Ve,shippingInformation:je,quoteCommentsTitle:$e,quoteComments:Ge,footer:Ke};let re=null;return ue?re=t(L,{type:"success",variant:"primary",icon:t(le,{}),heading:o.closeModalSuccessHeading,description:ue,"data-testid":"close-quote-success-banner"}):ge&&(re=t(L,{type:"error",variant:"primary",icon:t($,{}),heading:o.confirmationModalDeleteErrorHeading,description:ge,"data-testid":"close-quote-error-banner"})),s(we,{children:[t(Qa,{...oa}),be&&j(t(_a,{open:be,quoteName:U,renameReason:Z,quoteNameError:De,errorBanner:Ye,successBanner:Ze,onQuoteNameChange:Fe,onRenameReasonChange:W,onSave:Be,onClose:He}),document.body),_&&j(t(me,{open:_,title:o.confirmationModalDeleteTitle,message:o.confirmationModalDeleteMessage,cancelLabel:o.confirmationModalCancel,confirmLabel:o.confirmationModalDeleteConfirm,onCancel:Ae,onConfirm:ea,showCloseButton:!Ie,confirmationBanner:Ie}),document.body),se&&j(t(me,{open:se,title:o.closeModalTitle,message:o.closeModalMessage,cancelLabel:o.closeModalCancel,confirmLabel:de?o.closeModalConfirmLoading:o.closeModalConfirm,onCancel:Je,onConfirm:de?void 0:Xe,showCloseButton:!0,confirmationBanner:re,"data-testid":"close-quote-confirmation-modal"}),document.body),Me&&j(t(me,{open:Me,title:o.noItemsSelectedModalTitle,message:o.noItemsSelectedModalMessage,confirmLabel:o.noItemsSelectedModalConfirm,onConfirm:ve,onClose:ve,showCloseButton:!0,"data-testid":"no-items-selected-modal"}),document.body)]})};export{at as ManageNegotiableQuote,at as default};
|
|
3
|
+
import{jsx as a,jsxs as d,Fragment as Xe}from"@dropins/tools/preact-jsx-runtime.js";import*as Ge from"@dropins/tools/preact-compat.js";import{useState as l,useRef as pe,useEffect as S,useCallback as c,useMemo as p,createPortal as B}from"@dropins/tools/preact-compat.js";import{classes as s,VComponent as b,Slot as u}from"@dropins/tools/lib.js";import{f as $e}from"../chunks/dateUtils.js";/* empty css */import{Skeleton as La,SkeletonRow as k,Modal as Ra,Input as xa,TextArea as Je,Button as A,InLineAlert as h}from"@dropins/tools/components.js";import{events as D}from"@dropins/tools/event-bus.js";import{A as Ha,T as Fa}from"../chunks/TabbedContent.js";import"@dropins/tools/preact.js";import"@dropins/tools/preact-hooks.js";import{C as W}from"../chunks/ConfirmationModal.js";/* empty css *//* empty css *//* empty css */import{useText as Ke}from"@dropins/tools/i18n.js";import{S as Ba}from"../chunks/ShippingAddressDisplay.js";import{Q as ka}from"../chunks/QuoteHistoryLog3.js";import{g as Ua,r as Oa,c as za,a as Pa,s as Wa,d as Va,b as ja}from"../chunks/duplicateNegotiableQuote.js";import"../chunks/state.js";import{I as Ga}from"../chunks/ItemsQuoted.js";import{Q as $a}from"../chunks/QuoteCommentsList3.js";import{a as U,S as V}from"../chunks/WarningFilled.js";import"../chunks/QuoteHistoryLog.js";import"../chunks/transform-quote.js";import"@dropins/tools/fetch-graphql.js";import"../chunks/NegotiableQuoteFragment.js";import"../chunks/transform-quote-template.js";import"../chunks/NegotiableQuoteTemplateFragment.js";import"../chunks/QuotePricesSummary.js";import"../chunks/setLineItemNote.js";import"../chunks/QuoteCommentsList.js";const Xa=N=>Ge.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",className:"feather feather-edit-2",...N},Ge.createElement("path",{d:"M17 3a2.828 2.828 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5L17 3z"})),Ja=({className:N,loading:t,quoteName:m,quoteStatus:C,banner:q,details:I,actionBar:e,quoteContent:f,shippingInformationTitle:T,shippingInformation:y,quoteCommentsTitle:E,quoteComments:_,footer:Q,...M})=>t?a(Ka,{}):d("div",{...M,className:s(["quote-management-manage-negotiable-quote",N]),children:[d("div",{className:s(["quote-management-manage-negotiable-quote__header"]),children:[m&&a(b,{node:m,className:s(["quote-management-manage-negotiable-quote__quote-name"])}),C&&a(b,{node:C,className:s(["quote-management-manage-negotiable-quote__quote-status"])})]}),q&&a(b,{node:q,className:s(["quote-management-manage-negotiable-quote__banner"])}),I&&a(b,{node:I,className:s(["quote-management-manage-negotiable-quote__details"])}),e&&a(b,{node:e,className:s(["quote-management-manage-negotiable-quote__action-bar"])}),f&&a(b,{node:f,className:s(["quote-management-manage-negotiable-quote__quote-content"])}),d("div",{"data-testid":"quote-shipping-information-container",className:s(["quote-management-manage-negotiable-quote__shipping-information-container"]),children:[T&&a(b,{node:T,className:s(["quote-management-manage-negotiable-quote__shipping-information-title"])}),y&&a(b,{node:y,className:s(["quote-management-manage-negotiable-quote__shipping-information"])})]}),d("div",{"data-testid":"quote-comments-container",className:s(["quote-management-manage-negotiable-quote__quote-comments-container"]),children:[E&&a(b,{node:E,className:s(["quote-management-manage-negotiable-quote__quote-comments-title"])}),_&&a(b,{node:_,className:s(["quote-management-manage-negotiable-quote__quote-comments"])})]}),a(b,{node:Q,className:s(["quote-management-manage-negotiable-quote__footer"])})]}),Ka=()=>d(La,{"data-testid":"manage-negotiable-quote-skeleton",children:[a(k,{variant:"heading",fullWidth:!0,size:"large"}),a(k,{variant:"row",fullWidth:!1,size:"small"}),a(k,{variant:"row",fullWidth:!1,size:"small"}),a(k,{variant:"row",fullWidth:!0}),a(k,{variant:"row",fullWidth:!0,size:"xlarge",lines:2}),a(k,{variant:"row",fullWidth:!1,size:"small"})]}),Ya=({className:N,open:t,quoteName:m,renameReason:C,quoteNameError:q,errorBanner:I,successBanner:e,showCloseButton:f=!0,onQuoteNameChange:T,onRenameReasonChange:y,onSave:E,onClose:_})=>{const Q=Ke({title:"NegotiableQuote.Manage.rename.title",quoteNameLabel:"NegotiableQuote.Manage.rename.quoteNameLabel",reasonLabel:"NegotiableQuote.Manage.rename.reasonLabel",renameButton:"NegotiableQuote.Manage.rename.renameButton",cancelButton:"NegotiableQuote.Manage.rename.cancelButton"});return t?d(Ra,{open:t,size:"medium",title:a(Xe,{children:Q.title}),onClose:_,clickToDismiss:!0,escapeToDismiss:!0,showCloseButton:f,className:s(["quote-management-rename-quote-modal",N]),"data-testid":"rename-quote-modal",children:[I&&a("div",{className:s(["quote-management-rename-quote-modal__error-banner"]),"data-testid":"rename-quote-modal-error-banner",children:I}),e&&a("div",{className:s(["quote-management-rename-quote-modal__success-banner"]),"data-testid":"rename-quote-modal-success-banner",children:e}),d("div",{className:s(["quote-management-rename-quote-modal__content"]),children:[d("div",{children:[a(xa,{name:"quoteName",type:"text",value:m,onInput:M=>T(M.target.value),floatingLabel:Q.quoteNameLabel,required:!0,error:!!q}),q&&a("span",{className:s(["quote-management-rename-quote-modal__error-text"]),children:q})]}),a(Je,{name:"quoteComment",value:C,onInput:M=>y(M.target.value),label:Q.reasonLabel,rows:3})]}),d("div",{className:s(["quote-management-rename-quote-modal__actions"]),children:[a(A,{variant:"secondary",size:"medium",onClick:_,className:s(["quote-management-rename-quote-modal__cancel-button"]),children:Q.cancelButton}),a(A,{variant:"primary",size:"medium",onClick:E,className:s(["quote-management-rename-quote-modal__save-button"]),children:Q.renameButton})]})]}):null},Lt=({onActionsDropdownChange:N,slots:t,onActionsButtonClick:m,onSendForReview:C,onDuplicateQuote:q,...I})=>{const[e,f]=l(void 0),[T,y]=l(!0),[E,_]=l(!1),[Q,M]=l(null),[Ye,j]=l(!1),[fe,ee]=l(!1),[Me,w]=l(null),[Ze,R]=l(!1),[L,be]=l(""),[O,ae]=l(!1),[he,te]=l(!1),[Ne,ne]=l(!1),[qe,x]=l(""),[Qe,z]=l(""),[Se,Te]=l(!1),[ve,Ce]=l(!1),[ye,G]=l(""),[_e,$]=l(""),[De,oe]=l(!1),[X,J]=l(""),[re,K]=l(""),[ie,P]=l(""),[Ae,H]=l(""),[le,Y]=l(""),[ce,Ie]=l(new Set),Ee=pe(ce),se=pe(null),[F,me]=l(""),Z=pe(F),[we,Le]=l(!1);S(()=>{Ee.current=ce},[ce]),S(()=>{Z.current=F},[F]);const o=Ke({createdLabel:"NegotiableQuote.Manage.createdLabel",salesRepLabel:"NegotiableQuote.Manage.salesRepLabel",expiresLabel:"NegotiableQuote.Manage.expiresLabel",actionsLabel:"NegotiableQuote.Manage.actionsLabel",remove:"NegotiableQuote.Manage.actions.remove",close:"NegotiableQuote.Manage.actionButtons.close",delete:"NegotiableQuote.Manage.actionButtons.delete",print:"NegotiableQuote.Manage.actionButtons.print",createTemplate:"NegotiableQuote.Manage.actionButtons.createTemplate",createCopy:"NegotiableQuote.Manage.actionButtons.createCopy",shippingInformationTitle:"NegotiableQuote.Manage.shippingInformation.title",quoteCommentsTitle:"NegotiableQuote.Manage.quoteComments.title",quoteCommentsPlaceholder:"NegotiableQuote.Manage.quoteComments.placeholder",sendForReview:"NegotiableQuote.Manage.actionButtons.sendForReview",bannerTitle:"NegotiableQuote.Manage.bannerTitle",statusSubmitted:"NegotiableQuote.Manage.bannerStatusMessages.submitted",statusPending:"NegotiableQuote.Manage.bannerStatusMessages.pending",statusExpired:"NegotiableQuote.Manage.bannerStatusMessages.expired",errorFallback:"NegotiableQuote.Manage.confirmationModal.delete.errorFallback",closeSuccessMessage:"NegotiableQuote.Manage.confirmationModal.close.successDescription",closeModalTitle:"NegotiableQuote.Manage.actionButtons.close",closeModalMessage:"NegotiableQuote.Manage.confirmationModal.close.message",closeModalCancel:"NegotiableQuote.Manage.confirmationModal.cancel",closeModalConfirm:"NegotiableQuote.Manage.confirmationModal.close.confirm",closeModalConfirmLoading:"NegotiableQuote.Manage.confirmationModal.close.confirmLoading",closeModalSuccessHeading:"NegotiableQuote.Manage.confirmationModal.close.successHeading",createTemplateModalTitle:"NegotiableQuote.Manage.actionButtons.createTemplate",createTemplateModalMessage:"NegotiableQuote.Manage.confirmationModal.createTemplate.message",createTemplateModalCancel:"NegotiableQuote.Manage.confirmationModal.cancel",createTemplateModalConfirm:"NegotiableQuote.Manage.confirmationModal.createTemplate.confirm",createTemplateModalConfirmLoading:"NegotiableQuote.Manage.confirmationModal.createTemplate.confirmLoading",createTemplateModalSuccessHeading:"NegotiableQuote.Manage.confirmationModal.createTemplate.successHeading",createTemplateSuccessMessage:"NegotiableQuote.Manage.confirmationModal.createTemplate.successDescription",createTemplateModalErrorHeading:"NegotiableQuote.Manage.confirmationModal.createTemplate.errorHeading",createTemplateErrorFallback:"NegotiableQuote.Manage.confirmationModal.createTemplate.errorFallback",renameErrorHeading:"NegotiableQuote.Manage.rename.errorHeading",renameQuoteNameRequired:"NegotiableQuote.Manage.rename.quoteNameRequired",renameErrorDefault:"NegotiableQuote.Manage.rename.errorDefault",renameSuccessHeading:"NegotiableQuote.Manage.rename.successHeading",renameSuccessMessage:"NegotiableQuote.Manage.rename.successMessage",confirmationModalCancel:"NegotiableQuote.Manage.confirmationModal.cancel",confirmationModalDeleteTitle:"NegotiableQuote.Manage.confirmationModal.delete.title",confirmationModalDeleteMessage:"NegotiableQuote.Manage.confirmationModal.delete.message",confirmationModalDeleteConfirm:"NegotiableQuote.Manage.confirmationModal.delete.confirm",confirmationModalDeleteErrorHeading:"NegotiableQuote.Manage.confirmationModal.delete.errorHeading",confirmationModalDeleteErrorFallback:"NegotiableQuote.Manage.confirmationModal.delete.errorFallback",confirmationModalDeleteSuccessHeading:"NegotiableQuote.Manage.confirmationModal.delete.successHeading",confirmationModalDeleteSuccessDescription:"NegotiableQuote.Manage.confirmationModal.delete.successDescription",confirmationModalDuplicateTitle:"NegotiableQuote.Manage.confirmationModal.duplicate.title",confirmationModalDuplicateMessage:"NegotiableQuote.Manage.confirmationModal.duplicate.message",confirmationModalDuplicateConfirm:"NegotiableQuote.Manage.confirmationModal.duplicate.confirm",confirmationModalDuplicateErrorHeading:"NegotiableQuote.Manage.confirmationModal.duplicate.errorHeading",confirmationModalDuplicateErrorFallback:"NegotiableQuote.Manage.confirmationModal.duplicate.errorFallback",confirmationModalDuplicateSuccessHeading:"NegotiableQuote.Manage.confirmationModal.duplicate.successHeading",confirmationModalDuplicateSuccessDescription:"NegotiableQuote.Manage.confirmationModal.duplicate.successDescription",noItemsSelectedModalTitle:"NegotiableQuote.Manage.confirmationModal.noItemsSelected.title",noItemsSelectedModalMessage:"NegotiableQuote.Manage.confirmationModal.noItemsSelected.message",noItemsSelectedModalConfirm:"NegotiableQuote.Manage.confirmationModal.noItemsSelected.confirm"});S(()=>{const n=D.on("quote-management/quote-data",r=>{const{quote:i}=r;i&&(f(i),y(!1))},{eager:!0});return()=>n==null?void 0:n.off()},[]),S(()=>{const n=D.on("quote-management/shipping-address-set",r=>{const{quote:i}=r;i&&f(i)},{eager:!0});return()=>n==null?void 0:n.off()},[]),S(()=>{const n=D.on("quote-management/quote-sent-for-review",r=>{const{quote:i}=r;f(i),be(""),ae(!1)},{eager:!0});return()=>n==null?void 0:n.off()},[]),S(()=>{const n=D.on("quote-management/quote-items-removed",r=>{const{quote:i,removedItemUids:g}=r;i&&f(i),g&&Ie(v=>{const je=new Set(v);return g.forEach(wa=>je.delete(wa)),je})},{eager:!0});return()=>n==null?void 0:n.off()},[]);const Re=c((n,r)=>{Ie(i=>{const g=new Set(i);return r?g.add(n.uid):g.delete(n.uid),g})},[]),xe=c(n=>{const r=n.target.value,i=Ee.current;if(r==="remove"){if(me(r),Z.current=r,i.size===0)Le(!0);else if(e&&se.current){const g=e.items.filter(v=>i.has(v.uid));se.current(g)}}N==null||N(n)},[N,e]),He=c(()=>{Le(!1),me(""),Z.current=""},[]);S(()=>{const n=D.on("quote-management/negotiable-quote-closed",async r=>{ne(!1),z(""),x(o.closeSuccessMessage),f(i=>{var g;return i!=null&&i.uid&&((g=r.closedQuoteUids)!=null&&g.includes(i.uid))&&Ua(i.uid).then(v=>{f(v)}).catch(v=>{console.warn("Failed to refresh quote data after closure:",v)}),i}),setTimeout(()=>{te(!1),x("")},2e3)},{eager:!0});return()=>n==null?void 0:n.off()},[o.closeSuccessMessage]),S(()=>{const n=D.on("quote-management/negotiable-quote-close-error",r=>{console.log("Close error event received:",r),ne(!1),x("");const i=r.error.message||o.errorFallback;z(i)},{eager:!0});return()=>n==null?void 0:n.off()},[o.errorFallback]),S(()=>{const n=D.on("quote-management/quote-renamed",r=>{const{quote:i}=r;f(i),P(""),H(""),Y(o.renameSuccessMessage),setTimeout(()=>{oe(!1),J(""),K(""),Y("")},2e3)},{eager:!0});return()=>n==null?void 0:n.off()},[o.renameSuccessMessage]),S(()=>{const n=D.on("quote-management/quote-duplicated",r=>{const{quote:i}=r;e&&q&&q({quoteData:e,newQuote:i}),R(!0),w(null),setTimeout(()=>{ee(!1),R(!1),w(null)},2e3)},{eager:!0});return()=>n==null?void 0:n.off()},[e,q]);const Fe=c(()=>{J((e==null?void 0:e.name)||""),K(""),P(""),H(""),Y(""),oe(!0)},[e]),ea=c(()=>{oe(!1),J(""),K(""),P(""),H(""),Y("")},[]),aa=c(n=>{J(n),n.trim()&&H("")},[]),Be=c(()=>{ee(!0),w(null),R(!1)},[]),ta=c(async()=>{if(!X.trim()){H(o.renameQuoteNameRequired);return}try{P(""),H(""),await Oa({quoteUid:e.uid,quoteName:X,quoteComment:re.trim()||void 0})}catch(n){P(n.message||o.renameErrorDefault)}},[e,X,re,o.renameQuoteNameRequired,o.renameErrorDefault]),na=p(()=>{const n=e&&(e.lockedForEditing===!0||e.lockedForEditing===void 0&&(e.status==="SUBMITTED"||e.status==="PENDING"||e.status==="ORDERED"||e.status==="CLOSED"));return a(u,{name:"QuoteName",slot:t==null?void 0:t.QuoteName,context:{quoteName:e==null?void 0:e.name,quoteData:e},children:d("div",{className:"quote-management-manage-negotiable-quote__quote-name-wrapper",children:[a("h1",{"data-testid":"quote-name",className:"quote-management-manage-negotiable-quote__quote-name-title",children:e==null?void 0:e.name}),a("button",{onClick:Fe,disabled:n,"data-testid":"rename-quote-button",className:"quote-management-manage-negotiable-quote__rename-button","aria-label":"Rename quote",children:a(Xa,{})})]})})},[t==null?void 0:t.QuoteName,e,Fe]),oa=p(()=>a(u,{name:"QuoteStatus",slot:t==null?void 0:t.QuoteStatus,context:{quoteStatus:e==null?void 0:e.status,quoteData:e},children:a("div",{"data-testid":"quote-status",children:e==null?void 0:e.status})}),[t==null?void 0:t.QuoteStatus,e]),ke=c(n=>{switch(n){case"SUBMITTED":return o.statusSubmitted;case"PENDING":return o.statusPending;case"EXPIRED":return o.statusExpired;default:return null}},[o])(e==null?void 0:e.status),Ue=ke&&a(h,{type:"warning",variant:"secondary",icon:a(U,{}),heading:o.bannerTitle,description:ke}),ra=Ue&&a(u,{name:"Banner","data-testid":"banner",slot:t==null?void 0:t.Banner,context:{quoteData:e},children:Ue}),ia=p(()=>{if(!e)return;const n=e.expirationDate?$e(e.expirationDate,"short"):void 0;return d(u,{name:"Details",slot:t==null?void 0:t.Details,context:{quoteData:e},children:[d("div",{className:"quote-management-manage-negotiable-quote__detail",children:[a("span",{className:"quote-management-manage-negotiable-quote__detail-title","data-testid":"created-label",children:o.createdLabel}),d("span",{className:"quote-management-manage-negotiable-quote__detail-content","data-testid":"created-value",children:[$e(e.createdAt,"short")," (",e.buyer.firstname," ",e.buyer.lastname,")"]})]}),d("div",{className:"quote-management-manage-negotiable-quote__detail",children:[a("span",{className:"quote-management-manage-negotiable-quote__detail-title","data-testid":"sales-rep-label",children:o.salesRepLabel}),a("span",{className:"quote-management-manage-negotiable-quote__detail-content","data-testid":"sales-rep-value",children:e.salesRepName})]}),d("div",{className:"quote-management-manage-negotiable-quote__detail",children:[a("span",{className:"quote-management-manage-negotiable-quote__detail-title","data-testid":"expires-label",children:o.expiresLabel}),a("span",{className:"quote-management-manage-negotiable-quote__detail-content","data-testid":"expires-value",children:n})]})]})},[t==null?void 0:t.Details,o,e]),Oe=p(()=>[{label:o.close,value:"close",disabled:!(e!=null&&e.canClose)},{label:o.delete,value:"delete",disabled:!(e!=null&&e.canDelete)},{label:o.print,value:"print"},{label:o.createTemplate,value:"createTemplate"},{label:o.createCopy,value:"createCopy"}],[o,e==null?void 0:e.canDelete,e==null?void 0:e.canClose]),la=p(()=>{const n=r=>{switch(r){case"close":te(!0),z(""),x(""),m==null||m(r);break;case"delete":_(!0),m==null||m(r);break;case"print":m==null||m(r);break;case"createTemplate":Te(!0),$(""),G(""),m==null||m(r);break;case"createCopy":Be(),m==null||m(r);break}};return a(u,{name:"ActionBar",slot:t==null?void 0:t.ActionBar,context:{quoteData:e,actionsBarDropdownValue:F},children:a(Ha,{dropdownPlaceholder:o.actionsLabel,dropdownOptions:[{label:o.remove,value:"remove"}],dropdownValue:F,handleDropdownChange:xe,buttons:Oe.map(r=>a(A,{variant:"tertiary",onClick:()=>n(r.value),"data-testid":`actions-bar-${r.value}-button`,"data-action":r.value,disabled:r.disabled,children:r.label},r.value))})})},[Oe,o,t==null?void 0:t.ActionBar,e,xe,m,Be,F]),ca=p(()=>a(u,{name:"QuoteContent",slot:t==null?void 0:t.QuoteContent,context:{quoteData:e},children:a(Fa,{tabs:new Map([["items-quoted","Items Quoted"],["comments","Comments"],["history-log","History Log"]]),tabsContent:new Map([["items-quoted",a(u,{name:"ItemsQuotedTab",slot:t==null?void 0:t.ItemsQuotedTab,context:{quoteData:e},children:a(Ga,{quoteData:e,onItemCheckboxChange:Re,onRemoveItemsRef:n=>{se.current=n},onRemoveModalStateChange:n=>{!n&&Z.current==="remove"&&me("")}})},"items-quoted")],["comments",a(u,{name:"CommentsTab",slot:t==null?void 0:t.CommentsTab,context:{quoteData:e},children:a($a,{quoteData:e})},"comments")],["history-log",a(u,{name:"HistoryLogTab",slot:t==null?void 0:t.HistoryLogTab,context:{quoteData:e},children:a(ka,{quoteData:e})},"history-log")]])})}),[t==null?void 0:t.QuoteContent,t==null?void 0:t.HistoryLogTab,t==null?void 0:t.CommentsTab,t==null?void 0:t.ItemsQuotedTab,e,Re]),sa=p(()=>a(u,{name:"ShippingInformationTitle",slot:t==null?void 0:t.ShippingInformationTitle,context:{quoteData:e},children:a("h2",{children:o.shippingInformationTitle})}),[t==null?void 0:t.ShippingInformationTitle,e,o]),ma=p(()=>a(u,{name:"ShippingInformation",slot:t==null?void 0:t.ShippingInformation,context:{quoteData:e,loading:T,setLoading:y},children:a(Ba,{quoteData:e,loading:T,"data-testid":"manage-quote-shipping-address"})}),[t==null?void 0:t.ShippingInformation,e,T,y]),da=p(()=>a(u,{name:"QuoteCommentsTitle",slot:t==null?void 0:t.QuoteCommentsTitle,context:{quoteData:e},children:a("h2",{children:o.quoteCommentsTitle})}),[t==null?void 0:t.QuoteCommentsTitle,o,e]),ua=p(()=>a(u,{name:"QuoteComments",slot:t==null?void 0:t.QuoteComments,context:{quoteData:e},children:a(Je,{name:"quoteComments",placeholder:o.quoteCommentsPlaceholder,rows:3,value:L,onInput:n=>{be(n.target.value)},disabled:!(e!=null&&e.canSendForReview)||O})}),[t==null?void 0:t.QuoteComments,o,e,L,O]),ga=c(async()=>{if(e!=null&&e.uid){ne(!0),z(""),x("");try{await za({quoteUids:[e.uid]})}catch(n){console.error("Failed to close quote:",n)}}},[e]),pa=c(()=>{te(!1),z(""),x("")},[]),fa=c(async()=>{if(e!=null&&e.uid){Ce(!0),$(""),G("");try{await Pa(e.uid),G(o.createTemplateSuccessMessage)}catch(n){console.error("Failed to create quote template:",n);const r=n instanceof Error?n.message:o.createTemplateErrorFallback;$(r)}finally{Ce(!1)}}},[e,o.createTemplateSuccessMessage,o.createTemplateErrorFallback]),Ma=c(()=>{Te(!1),$(""),G("")},[]),ze=c(async()=>{if(C){C({quoteData:e,comment:L.trim()||void 0});return}ae(!0);try{await Wa({quoteUid:e.uid,comment:L.trim()||void 0})}catch(n){console.error("Failed to send quote for review:",n),ae(!1)}},[e,C,L]),ba=p(()=>a(u,{name:"Footer",slot:t==null?void 0:t.Footer,context:{quoteData:e,comment:L,isSubmitting:O},children:a(A,{variant:"primary",onClick:ze,"data-testid":"send-for-review-button",disabled:!(e!=null&&e.canSendForReview)||O,children:o.sendForReview})}),[t==null?void 0:t.Footer,o,e,L,O,ze]),ha=p(()=>ie?a(h,{type:"error",variant:"primary",icon:a(U,{color:"var(--color-error)"}),heading:o.renameErrorHeading,description:ie}):void 0,[ie,o.renameErrorHeading]),Na=p(()=>le?a(h,{type:"success",variant:"primary",icon:a(V,{}),heading:o.renameSuccessHeading,description:le}):void 0,[le,o.renameSuccessHeading]),de=c(n=>n.errors&&Array.isArray(n.errors)&&n.errors.length>0?n.errors[0].message||o.confirmationModalDeleteErrorFallback:(n==null?void 0:n.message)||o.confirmationModalDeleteErrorFallback,[o.confirmationModalDeleteErrorFallback]),qa=c(()=>{_(!1),M(null),j(!1)},[]),Qa=c(async()=>{if(e!=null&&e.uid){M(null),j(!1);try{const{operationResults:n}=await Va(e.uid),r=n.find(i=>i.__typename==="DeleteNegotiableQuoteOperationFailure");if(r){const i=de(r);M(i);return}j(!0)}catch(n){const r=de(n);M(r)}}},[e,de]),Sa=c(()=>{M(null)},[]),Ta=c(()=>{j(!1)},[]),Pe=c(n=>(n==null?void 0:n.message)||o.confirmationModalDuplicateErrorFallback,[o.confirmationModalDuplicateErrorFallback]),va=c(()=>{ee(!1),w(null),R(!1)},[]),Ca=c(async()=>{if(e!=null&&e.uid){w(null),R(!1);try{const r=(i=>{const g=i.slice(0,-8),v=crypto.randomUUID().slice(0,8);return g+v})(e.uid);await ja({quoteUid:e.uid,duplicatedQuoteUid:r})}catch(n){const r=Pe(n);w(r)}}},[e,Pe]),ya=c(()=>{w(null)},[]),_a=c(()=>{R(!1)},[]),Da=Q?a(h,{type:"error",variant:"primary",icon:a(U,{}),heading:o.confirmationModalDeleteErrorHeading,description:Q,onDismiss:Sa,"data-testid":"confirmation-modal-error-banner"}):null,We=(Ye?a(h,{type:"success",variant:"primary",icon:a(V,{}),heading:o.confirmationModalDeleteSuccessHeading,description:o.confirmationModalDeleteSuccessDescription,onDismiss:Ta,"data-testid":"confirmation-modal-success-banner"}):null)||Da,Ia=Me?a(h,{type:"error",variant:"primary",icon:a(U,{}),heading:o.confirmationModalDuplicateErrorHeading,description:Me,onDismiss:ya,"data-testid":"confirmation-modal-duplicate-error-banner"}):null,Ve=(Ze?a(h,{type:"success",variant:"primary",icon:a(V,{}),heading:o.confirmationModalDuplicateSuccessHeading,description:o.confirmationModalDuplicateSuccessDescription,onDismiss:_a,"data-testid":"confirmation-modal-duplicate-success-banner"}):null)||Ia,Ea={...I,loading:T,quoteName:na,quoteStatus:oa,banner:ra||void 0,details:ia,actionBar:la,quoteContent:ca,shippingInformationTitle:sa,shippingInformation:ma,quoteCommentsTitle:da,quoteComments:ua,footer:ba};let ue=null;qe?ue=a(h,{type:"success",variant:"primary",icon:a(V,{}),heading:o.closeModalSuccessHeading,description:qe,"data-testid":"close-quote-success-banner"}):Qe&&(ue=a(h,{type:"error",variant:"primary",icon:a(U,{}),heading:o.confirmationModalDeleteErrorHeading,description:Qe,"data-testid":"close-quote-error-banner"}));let ge=null;return ye?ge=a(h,{type:"success",variant:"primary",icon:a(V,{}),heading:o.createTemplateModalSuccessHeading,description:ye,"data-testid":"create-template-success-banner"}):_e&&(ge=a(h,{type:"error",variant:"primary",icon:a(U,{}),heading:o.createTemplateModalErrorHeading,description:_e,"data-testid":"create-template-error-banner"})),d(Xe,{children:[a(Ja,{...Ea}),De&&B(a(Ya,{open:De,quoteName:X,renameReason:re,quoteNameError:Ae,errorBanner:ha,successBanner:Na,onQuoteNameChange:aa,onRenameReasonChange:K,onSave:ta,onClose:ea}),document.body),E&&B(a(W,{open:E,title:o.confirmationModalDeleteTitle,message:o.confirmationModalDeleteMessage,cancelLabel:o.confirmationModalCancel,confirmLabel:o.confirmationModalDeleteConfirm,onCancel:qa,onConfirm:Qa,showCloseButton:!We,confirmationBanner:We}),document.body),fe&&B(a(W,{open:fe,title:o.confirmationModalDuplicateTitle,message:o.confirmationModalDuplicateMessage,cancelLabel:o.confirmationModalCancel,confirmLabel:o.confirmationModalDuplicateConfirm,onCancel:va,onConfirm:Ca,showCloseButton:!Ve,confirmationBanner:Ve}),document.body),he&&B(a(W,{open:he,title:o.closeModalTitle,message:o.closeModalMessage,cancelLabel:o.closeModalCancel,confirmLabel:Ne?o.closeModalConfirmLoading:o.closeModalConfirm,onCancel:pa,onConfirm:Ne?void 0:ga,showCloseButton:!0,confirmationBanner:ue,"data-testid":"close-quote-confirmation-modal"}),document.body),Se&&B(a(W,{open:Se,title:o.createTemplateModalTitle,message:o.createTemplateModalMessage,cancelLabel:o.createTemplateModalCancel,confirmLabel:ve?o.createTemplateModalConfirmLoading:o.createTemplateModalConfirm,onCancel:Ma,onConfirm:ve?void 0:fa,showCloseButton:!0,confirmationBanner:ge,"data-testid":"create-template-confirmation-modal"}),document.body),we&&B(a(W,{open:we,title:o.noItemsSelectedModalTitle,message:o.noItemsSelectedModalMessage,confirmLabel:o.noItemsSelectedModalConfirm,onConfirm:He,onClose:He,showCloseButton:!0,"data-testid":"no-items-selected-modal"}),document.body)]})};export{Lt as ManageNegotiableQuote,Lt as default};
|
|
4
4
|
//# sourceMappingURL=ManageNegotiableQuote.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ManageNegotiableQuote.js","sources":["../../node_modules/@adobe-commerce/elsie/src/icons/Edit.svg","/@dropins/storefront-quote-management/src/components/ActionsBar/ActionsBar.tsx","/@dropins/storefront-quote-management/src/components/ManageNegotiableQuote/ManageNegotiableQuote.tsx","/@dropins/storefront-quote-management/src/components/RenameQuoteModal/RenameQuoteModal.tsx","/@dropins/storefront-quote-management/src/containers/ManageNegotiableQuote/ManageNegotiableQuote.tsx"],"sourcesContent":["import * as React from \"react\";\nconst SvgEdit = (props) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", stroke: \"currentColor\", strokeWidth: 2, strokeLinecap: \"round\", strokeLinejoin: \"round\", className: \"feather feather-edit-2\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M17 3a2.828 2.828 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5L17 3z\" }));\nexport default SvgEdit;\n","/********************************************************************\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this\n * file in accordance with the terms of the Adobe license agreement\n * accompanying it.\n *******************************************************************/\n\nimport { FunctionComponent, VNode } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\nimport { classes, VComponent } from '@adobe-commerce/elsie/lib';\nimport '@/quote-management/components/ActionsBar/ActionsBar.css';\nimport { Picker } from '@adobe-commerce/elsie/components';\n\nexport interface ActionsBarProps extends HTMLAttributes<HTMLDivElement> {\n dropdownPlaceholder?: string;\n dropdownOptions?: {\n label: string;\n value: string;\n }[];\n dropdownValue?: string;\n handleDropdownChange?: (event: Event) => void;\n buttons?: VNode[];\n}\n\nexport const ActionsBar: FunctionComponent<ActionsBarProps> = ({\n className,\n dropdownPlaceholder,\n dropdownOptions,\n dropdownValue,\n handleDropdownChange,\n buttons,\n ...props\n}) => {\n const hasDropdown = dropdownOptions && dropdownOptions.length > 0;\n const hasButtons = buttons && buttons.length > 0;\n\n const pickerOptions =\n dropdownOptions?.map((option) => ({\n text: option.label,\n value: option.value,\n })) || [];\n pickerOptions.unshift({\n text: dropdownPlaceholder || '',\n value: '',\n });\n\n return (\n <div\n className=\"quote-management-actions-bar__container\"\n data-testid=\"actions-bar-container\"\n >\n <div\n className={classes(['quote-management-actions-bar', className])}\n data-testid=\"actions-bar\"\n {...props}\n >\n {hasDropdown && (\n <Picker\n key={`actions-bar-picker-${dropdownValue || 'empty'}`}\n name=\"dropdown\"\n id=\"dropdown\"\n handleSelect={handleDropdownChange}\n className=\"quote-management-actions-bar__dropdown\"\n data-testid=\"dropdown\"\n options={pickerOptions}\n value={dropdownValue || ''}\n />\n )}\n {hasButtons && (\n <div\n className=\"quote-management-actions-bar__buttons\"\n data-testid=\"buttons-container\"\n >\n {buttons?.map((button, index) => (\n <VComponent\n node={button}\n className={classes(['quote-management-actions-bar__button'])}\n key={index}\n />\n ))}\n </div>\n )}\n </div>\n </div>\n );\n};\n","/********************************************************************\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this \n * file in accordance with the terms of the Adobe license agreement \n * accompanying it. \n *******************************************************************/\n\nimport { FunctionComponent, VNode } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\nimport { classes, VComponent } from '@adobe-commerce/elsie/lib';\nimport '@/quote-management/components/ManageNegotiableQuote/ManageNegotiableQuote.css';\nimport { Skeleton, SkeletonRow } from '@adobe-commerce/elsie/components';\n\nexport interface ManageNegotiableQuoteProps extends Omit<HTMLAttributes<HTMLDivElement>, 'loading'> {\n loading?: boolean;\n quoteName: VNode;\n quoteStatus: VNode;\n banner?: VNode;\n details?: VNode;\n actionBar?: VNode;\n quoteContent: VNode;\n shippingInformationTitle: VNode;\n shippingInformation: VNode;\n quoteCommentsTitle: VNode;\n quoteComments: VNode;\n footer: VNode;\n}\n\nexport const ManageNegotiableQuote: FunctionComponent<ManageNegotiableQuoteProps> = ({\n className,\n loading,\n quoteName,\n quoteStatus,\n banner,\n details,\n actionBar,\n quoteContent,\n shippingInformationTitle,\n shippingInformation,\n quoteCommentsTitle,\n quoteComments,\n footer,\n ...props\n}) => {\n if (loading) {\n return <ManageNegotiableQuoteSkeleton />;\n }\n\n return (\n <div {...props} className={classes(['quote-management-manage-negotiable-quote', className])}>\n <div className={classes(['quote-management-manage-negotiable-quote__header'])}>\n {quoteName &&\n <VComponent\n node={quoteName}\n className={classes(['quote-management-manage-negotiable-quote__quote-name'])}\n />\n }\n {quoteStatus &&\n <VComponent\n node={quoteStatus}\n className={classes(['quote-management-manage-negotiable-quote__quote-status'])}\n />\n }\n </div>\n {banner &&\n <VComponent\n node={banner}\n className={classes(['quote-management-manage-negotiable-quote__banner'])}\n />\n }\n {details &&\n <VComponent\n node={details}\n className={classes(['quote-management-manage-negotiable-quote__details'])}\n />\n }\n {actionBar &&\n <VComponent\n node={actionBar}\n className={classes(['quote-management-manage-negotiable-quote__action-bar'])}\n />\n }\n {quoteContent &&\n <VComponent\n node={quoteContent}\n className={classes(['quote-management-manage-negotiable-quote__quote-content'])}\n />\n }\n <div data-testid=\"quote-shipping-information-container\" className={classes(['quote-management-manage-negotiable-quote__shipping-information-container'])}>\n {shippingInformationTitle &&\n <VComponent\n node={shippingInformationTitle}\n className={classes(['quote-management-manage-negotiable-quote__shipping-information-title'])}\n />\n }\n {shippingInformation &&\n <VComponent\n node={shippingInformation}\n className={classes(['quote-management-manage-negotiable-quote__shipping-information'])}\n />\n }\n </div>\n <div data-testid=\"quote-comments-container\" className={classes(['quote-management-manage-negotiable-quote__quote-comments-container'])}>\n {quoteCommentsTitle &&\n <VComponent\n node={quoteCommentsTitle}\n className={classes(['quote-management-manage-negotiable-quote__quote-comments-title'])}\n />\n }\n {quoteComments &&\n <VComponent\n node={quoteComments}\n className={classes(['quote-management-manage-negotiable-quote__quote-comments'])}\n />\n }\n </div>\n <VComponent\n node={footer}\n className={classes(['quote-management-manage-negotiable-quote__footer'])}\n />\n </div>\n );\n};\n\nexport const ManageNegotiableQuoteSkeleton: FunctionComponent = () => {\n return (\n <Skeleton data-testid=\"manage-negotiable-quote-skeleton\">\n <SkeletonRow variant=\"heading\" fullWidth={true} size=\"large\" />\n <SkeletonRow variant=\"row\" fullWidth={false} size=\"small\" />\n <SkeletonRow variant=\"row\" fullWidth={false} size=\"small\" />\n <SkeletonRow variant=\"row\" fullWidth={true} />\n <SkeletonRow variant=\"row\" fullWidth={true} size=\"xlarge\" lines={2} />\n <SkeletonRow variant=\"row\" fullWidth={false} size=\"small\" />\n </Skeleton>\n );\n};\n","/********************************************************************\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this\n * file in accordance with the terms of the Adobe license agreement\n * accompanying it.\n *******************************************************************/\n\nimport { FunctionComponent, VNode } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\nimport { classes } from '@adobe-commerce/elsie/lib';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { Button, Input, TextArea, Modal } from '@adobe-commerce/elsie/components';\nimport '@/quote-management/components/RenameQuoteModal/RenameQuoteModal.css';\n\nexport interface RenameQuoteModalProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n open: boolean;\n quoteName: string;\n renameReason: string;\n quoteNameError?: string;\n errorBanner?: VNode;\n successBanner?: VNode;\n showCloseButton?: boolean;\n onQuoteNameChange: (value: string) => void;\n onRenameReasonChange: (value: string) => void;\n onSave: () => void;\n onClose?: () => void;\n}\n\nexport const RenameQuoteModal: FunctionComponent<RenameQuoteModalProps> = ({\n className,\n open,\n quoteName,\n renameReason,\n quoteNameError,\n errorBanner,\n successBanner,\n showCloseButton = true,\n onQuoteNameChange,\n onRenameReasonChange,\n onSave,\n onClose,\n}) => {\n const dictionary = useText({\n title: 'NegotiableQuote.Manage.rename.title',\n quoteNameLabel: 'NegotiableQuote.Manage.rename.quoteNameLabel',\n reasonLabel: 'NegotiableQuote.Manage.rename.reasonLabel',\n renameButton: 'NegotiableQuote.Manage.rename.renameButton',\n cancelButton: 'NegotiableQuote.Manage.rename.cancelButton',\n });\n\n if (!open) {\n return null;\n }\n\n return (\n <Modal\n open={open}\n size=\"medium\"\n title={<>{dictionary.title}</>}\n onClose={onClose}\n clickToDismiss={true}\n escapeToDismiss={true}\n showCloseButton={showCloseButton}\n className={classes(['quote-management-rename-quote-modal', className])}\n data-testid=\"rename-quote-modal\"\n >\n {errorBanner && (\n <div className={classes(['quote-management-rename-quote-modal__error-banner'])} data-testid=\"rename-quote-modal-error-banner\">\n {errorBanner}\n </div>\n )}\n\n {successBanner && (\n <div className={classes(['quote-management-rename-quote-modal__success-banner'])} data-testid=\"rename-quote-modal-success-banner\">\n {successBanner}\n </div>\n )}\n\n <div className={classes(['quote-management-rename-quote-modal__content'])}>\n <div>\n <Input\n name=\"quoteName\"\n type=\"text\"\n value={quoteName}\n onInput={(e: any) => onQuoteNameChange(e.target.value)}\n floatingLabel={dictionary.quoteNameLabel}\n required\n error={!!quoteNameError}\n />\n {quoteNameError && (\n <span className={classes(['quote-management-rename-quote-modal__error-text'])}>\n {quoteNameError}\n </span>\n )}\n </div>\n\n <TextArea\n name=\"quoteComment\"\n value={renameReason}\n onInput={(e: any) => onRenameReasonChange(e.target.value)}\n label={dictionary.reasonLabel}\n rows={3}\n />\n </div>\n\n <div className={classes(['quote-management-rename-quote-modal__actions'])}>\n <Button \n variant=\"secondary\"\n size=\"medium\"\n onClick={onClose}\n className={classes(['quote-management-rename-quote-modal__cancel-button'])}\n >\n {dictionary.cancelButton}\n </Button>\n <Button \n variant=\"primary\"\n size=\"medium\"\n onClick={onSave}\n className={classes(['quote-management-rename-quote-modal__save-button'])}\n >\n {dictionary.renameButton}\n </Button>\n </div>\n </Modal>\n );\n};\n","/********************************************************************\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this\n * file in accordance with the terms of the Adobe license agreement\n * accompanying it.\n *******************************************************************/\n\nimport {\n HTMLAttributes,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n createPortal,\n} from 'preact/compat';\nimport {\n Container,\n Slot,\n SlotProps,\n} from '@adobe-commerce/elsie/lib';\nimport { formattedDate } from '@/quote-management/utils/dateUtils';\nimport {\n NegotiableQuoteModel,\n NegotiableQuoteCartItem,\n} from '@/quote-management/data/models/negotiable-quote-model';\nimport {\n ManageNegotiableQuote as ManageNegotiableQuoteComponent,\n ManageNegotiableQuoteProps as ManageNegotiableQuoteComponentProps,\n} from '@/quote-management/components/ManageNegotiableQuote';\nimport { events } from '@adobe-commerce/event-bus';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport {\n ActionsBar,\n TabbedContent,\n ConfirmationModal,\n} from '@/quote-management/components';\nimport { ShippingAddressDisplay } from '@/quote-management/containers/ShippingAddressDisplay';\nimport { QuoteHistoryLog } from '@/quote-management/containers/QuoteHistoryLog';\nimport { ItemsQuoted, QuoteCommentsList } from '@/quote-management/containers';\nimport {\n Button,\n InLineAlert,\n TextArea,\n} from '@adobe-commerce/elsie/components';\nimport {\n WarningFilled,\n Edit,\n CheckWithCircle,\n} from '@adobe-commerce/elsie/icons';\nimport {\n deleteQuote,\n sendForReview,\n renameNegotiableQuote,\n closeNegotiableQuote,\n getQuoteData,\n} from '@/quote-management/api';\nimport { RenameQuoteModal } from '@/quote-management/components/RenameQuoteModal';\n\nexport interface ManageNegotiableQuoteProps\n extends HTMLAttributes<HTMLDivElement> {\n onActionsDropdownChange?: (event: Event) => void;\n onActionsButtonClick?: (action: string) => void;\n onSendForReview?: (params: {\n quoteData: NegotiableQuoteModel;\n comment?: string;\n }) => void;\n slots?: {\n QuoteName?: SlotProps<{\n quoteName?: string;\n quoteData?: NegotiableQuoteModel;\n }>;\n QuoteStatus?: SlotProps<{\n quoteStatus?: string;\n quoteData?: NegotiableQuoteModel;\n }>;\n Banner?: SlotProps<{\n quoteData?: NegotiableQuoteModel;\n }>;\n Details?: SlotProps<{\n quoteData?: NegotiableQuoteModel;\n }>;\n ActionBar?: SlotProps<{\n quoteData?: NegotiableQuoteModel;\n actionsBarDropdownValue?: string;\n }>;\n QuoteContent?: SlotProps<{\n quoteData?: NegotiableQuoteModel;\n }>;\n ItemsQuotedTab?: SlotProps<{\n quoteData?: NegotiableQuoteModel;\n }>;\n CommentsTab?: SlotProps<{\n quoteData?: NegotiableQuoteModel;\n }>;\n HistoryLogTab?: SlotProps<{\n quoteData?: NegotiableQuoteModel;\n }>;\n ShippingInformationTitle?: SlotProps<{\n quoteData?: NegotiableQuoteModel;\n }>;\n ShippingInformation?: SlotProps<{\n quoteData?: NegotiableQuoteModel;\n loading?: boolean;\n setLoading?: (loading: boolean) => void;\n }>;\n QuoteCommentsTitle?: SlotProps<{\n quoteData?: NegotiableQuoteModel;\n }>;\n QuoteComments?: SlotProps<{\n quoteData?: NegotiableQuoteModel;\n }>;\n Footer?: SlotProps<{\n quoteData?: NegotiableQuoteModel;\n comment?: string;\n isSubmitting?: boolean;\n }>;\n };\n}\n\nexport const ManageNegotiableQuote: Container<ManageNegotiableQuoteProps> = ({\n onActionsDropdownChange,\n slots,\n onActionsButtonClick,\n onSendForReview,\n ...props\n}) => {\n const [quoteData, setQuoteData] = useState<NegotiableQuoteModel | undefined>(\n undefined\n );\n const [loading, setLoading] = useState<boolean>(true);\n const [isDeleteDialogOpen, setIsDeleteDialogOpen] = useState<boolean>(false);\n const [deleteError, setDeleteError] = useState<string | null>(null);\n const [deleteSuccess, setDeleteSuccess] = useState<boolean>(false);\n const [comment, setComment] = useState<string>('');\n const [isSubmitting, setIsSubmitting] = useState<boolean>(false);\n const [showCloseModal, setShowCloseModal] = useState<boolean>(false);\n const [isClosing, setIsClosing] = useState<boolean>(false);\n const [modalSuccessMessage, setModalSuccessMessage] = useState<string>('');\n const [modalErrorMessage, setModalErrorMessage] = useState<string>('');\n const [isRenameModalOpen, setIsRenameModalOpen] = useState<boolean>(false);\n const [renameQuoteName, setRenameQuoteName] = useState<string>('');\n const [renameReason, setRenameReason] = useState<string>('');\n const [renameError, setRenameError] = useState<string>('');\n const [renameQuoteNameError, setRenameQuoteNameError] = useState<string>('');\n const [renameSuccess, setRenameSuccess] = useState<string>('');\n const [selectedItemUids, setSelectedItemUids] = useState<Set<string>>(\n new Set()\n );\n const selectedItemUidsRef = useRef<Set<string>>(selectedItemUids);\n const removeItemsHandlerRef = useRef<\n ((items: NegotiableQuoteCartItem[]) => void) | null\n >(null);\n const [actionsBarDropdownValue, setActionsBarDropdownValue] =\n useState<string>('');\n const actionsBarDropdownValueRef = useRef<string>(actionsBarDropdownValue);\n const [isNoItemsSelectedModalOpen, setIsNoItemsSelectedModalOpen] =\n useState<boolean>(false);\n\n // Keep refs in sync with state\n useEffect(() => {\n selectedItemUidsRef.current = selectedItemUids;\n }, [selectedItemUids]);\n\n useEffect(() => {\n actionsBarDropdownValueRef.current = actionsBarDropdownValue;\n }, [actionsBarDropdownValue]);\n\n const dictionary = useText({\n createdLabel: 'NegotiableQuote.Manage.createdLabel',\n salesRepLabel: 'NegotiableQuote.Manage.salesRepLabel',\n expiresLabel: 'NegotiableQuote.Manage.expiresLabel',\n actionsLabel: 'NegotiableQuote.Manage.actionsLabel',\n remove: 'NegotiableQuote.Manage.actions.remove',\n close: 'NegotiableQuote.Manage.actionButtons.close',\n delete: 'NegotiableQuote.Manage.actionButtons.delete',\n print: 'NegotiableQuote.Manage.actionButtons.print',\n createTemplate: 'NegotiableQuote.Manage.actionButtons.createTemplate',\n createCopy: 'NegotiableQuote.Manage.actionButtons.createCopy',\n shippingInformationTitle:\n 'NegotiableQuote.Manage.shippingInformation.title',\n quoteCommentsTitle: 'NegotiableQuote.Manage.quoteComments.title',\n quoteCommentsPlaceholder:\n 'NegotiableQuote.Manage.quoteComments.placeholder',\n sendForReview: 'NegotiableQuote.Manage.actionButtons.sendForReview',\n bannerTitle: 'NegotiableQuote.Manage.bannerTitle',\n statusSubmitted: 'NegotiableQuote.Manage.bannerStatusMessages.submitted',\n statusPending: 'NegotiableQuote.Manage.bannerStatusMessages.pending',\n statusExpired: 'NegotiableQuote.Manage.bannerStatusMessages.expired',\n errorFallback:\n 'NegotiableQuote.Manage.confirmationModal.delete.errorFallback',\n closeSuccessMessage:\n 'NegotiableQuote.Manage.confirmationModal.close.successDescription',\n closeModalTitle: 'NegotiableQuote.Manage.actionButtons.close',\n closeModalMessage: 'NegotiableQuote.Manage.confirmationModal.close.message',\n closeModalCancel: 'NegotiableQuote.Manage.confirmationModal.cancel',\n closeModalConfirm: 'NegotiableQuote.Manage.confirmationModal.close.confirm',\n closeModalConfirmLoading:\n 'NegotiableQuote.Manage.confirmationModal.close.confirmLoading',\n closeModalSuccessHeading:\n 'NegotiableQuote.Manage.confirmationModal.close.successHeading',\n renameErrorHeading: 'NegotiableQuote.Manage.rename.errorHeading',\n renameQuoteNameRequired: 'NegotiableQuote.Manage.rename.quoteNameRequired',\n renameErrorDefault: 'NegotiableQuote.Manage.rename.errorDefault',\n renameSuccessHeading: 'NegotiableQuote.Manage.rename.successHeading',\n renameSuccessMessage: 'NegotiableQuote.Manage.rename.successMessage',\n confirmationModalCancel: 'NegotiableQuote.Manage.confirmationModal.cancel',\n confirmationModalDeleteTitle:\n 'NegotiableQuote.Manage.confirmationModal.delete.title',\n confirmationModalDeleteMessage:\n 'NegotiableQuote.Manage.confirmationModal.delete.message',\n confirmationModalDeleteConfirm:\n 'NegotiableQuote.Manage.confirmationModal.delete.confirm',\n confirmationModalDeleteErrorHeading:\n 'NegotiableQuote.Manage.confirmationModal.delete.errorHeading',\n confirmationModalDeleteErrorFallback:\n 'NegotiableQuote.Manage.confirmationModal.delete.errorFallback',\n noItemsSelectedModalTitle:\n 'NegotiableQuote.Manage.confirmationModal.noItemsSelected.title',\n noItemsSelectedModalMessage:\n 'NegotiableQuote.Manage.confirmationModal.noItemsSelected.message',\n noItemsSelectedModalConfirm:\n 'NegotiableQuote.Manage.confirmationModal.noItemsSelected.confirm',\n confirmationModalDeleteSuccessHeading:\n 'NegotiableQuote.Manage.confirmationModal.delete.successHeading',\n confirmationModalDeleteSuccessDescription:\n 'NegotiableQuote.Manage.confirmationModal.delete.successDescription',\n });\n /* Event listeners */\n useEffect(() => {\n const quoteDataEvent = events.on(\n 'quote-management/quote-data',\n (data: { quote: NegotiableQuoteModel }) => {\n const { quote } = data;\n if (quote) {\n setQuoteData(quote);\n setLoading(false);\n }\n },\n {\n eager: true,\n }\n );\n return () => quoteDataEvent?.off();\n }, []);\n\n // Listen for shipping address set event\n useEffect(() => {\n const shippingAddressSetEvent = events.on(\n 'quote-management/shipping-address-set',\n (data: { quote: NegotiableQuoteModel }) => {\n const { quote } = data;\n if (quote) {\n setQuoteData(quote);\n }\n },\n {\n eager: true,\n }\n );\n return () => shippingAddressSetEvent?.off();\n }, []);\n\n // Listen for quote sent for review event\n useEffect(() => {\n const quoteSentForReviewEvent = events.on(\n 'quote-management/quote-sent-for-review',\n (data: { quote: NegotiableQuoteModel }) => {\n const { quote } = data;\n setQuoteData(quote);\n setComment(''); // Reset comment after successful submission\n setIsSubmitting(false);\n },\n {\n eager: true,\n }\n );\n return () => quoteSentForReviewEvent?.off();\n }, []);\n\n // Listen for quote items removed event\n useEffect(() => {\n const quoteItemsRemovedEvent = events.on(\n 'quote-management/quote-items-removed',\n (data: { quote: NegotiableQuoteModel; removedItemUids: string[] }) => {\n const { quote, removedItemUids } = data;\n /* istanbul ignore else */ // Always has quote in real usage; covered in integration tests\n if (quote) {\n setQuoteData(quote);\n }\n // Clear selected items that were removed\n /* istanbul ignore else */ // Always has removedItemUids in real usage; covered in integration tests\n if (removedItemUids) {\n setSelectedItemUids((prev) => {\n const next = new Set(prev);\n removedItemUids.forEach((uid) => next.delete(uid));\n return next;\n });\n }\n },\n {\n eager: true,\n }\n );\n return () => quoteItemsRemovedEvent?.off();\n }, []);\n\n /**\n * Handlers\n */\n const handleItemCheckboxChange = useCallback(\n (item: NegotiableQuoteCartItem, isSelected: boolean) => {\n setSelectedItemUids((prev) => {\n const next = new Set(prev);\n if (isSelected) {\n next.add(item.uid);\n } else {\n next.delete(item.uid);\n }\n return next;\n });\n },\n []\n );\n\n const handleActionsDropdownChange = useCallback(\n (event: Event) => {\n const action = (event.target as HTMLSelectElement).value;\n const currentSelectedUids = selectedItemUidsRef.current;\n /* istanbul ignore else */ if (action === 'remove') {\n setActionsBarDropdownValue(action);\n actionsBarDropdownValueRef.current = action; // Update ref immediately\n /* istanbul ignore next */ if (currentSelectedUids.size === 0) {\n // No items selected - show warning modal\n setIsNoItemsSelectedModalOpen(true);\n } else if (quoteData && removeItemsHandlerRef.current) {\n // Items selected - proceed with removal\n const itemsToRemove = quoteData.items.filter((item) =>\n currentSelectedUids.has(item.uid)\n );\n /* istanbul ignore next */ removeItemsHandlerRef.current(\n itemsToRemove\n );\n }\n }\n onActionsDropdownChange?.(event);\n },\n [onActionsDropdownChange, quoteData]\n );\n\n /* istanbul ignore next */ const handleCloseNoItemsSelectedModal =\n useCallback(() => {\n setIsNoItemsSelectedModalOpen(false);\n setActionsBarDropdownValue('');\n actionsBarDropdownValueRef.current = '';\n }, []);\n\n // Listen for quote closed event\n useEffect(() => {\n const quoteClosedEvent = events.on(\n 'quote-management/negotiable-quote-closed',\n async (data: { closedQuoteUids: string[] }) => {\n setIsClosing(false);\n setModalErrorMessage('');\n // Show success message in modal\n setModalSuccessMessage(dictionary.closeSuccessMessage);\n\n // Refresh quote data if the current quote was closed\n // Use a function to get the current quoteData to avoid stale closure\n setQuoteData((currentQuoteData) => {\n if (\n currentQuoteData?.uid &&\n data.closedQuoteUids?.includes(currentQuoteData.uid)\n ) {\n // Trigger async refresh\n getQuoteData(currentQuoteData.uid)\n .then((updatedQuoteData) => {\n setQuoteData(updatedQuoteData);\n })\n .catch((error) => {\n console.warn(\n 'Failed to refresh quote data after closure:',\n error\n );\n });\n }\n return currentQuoteData; // Return current data unchanged for this setter call\n });\n\n // Close modal and redirect after a delay to show success message\n setTimeout(() => {\n setShowCloseModal(false);\n setModalSuccessMessage('');\n }, 2000);\n },\n {\n eager: true,\n }\n );\n return () => quoteClosedEvent?.off();\n }, [dictionary.closeSuccessMessage]);\n\n // Listen for quote close error event\n useEffect(() => {\n const quoteCloseErrorEvent = events.on(\n 'quote-management/negotiable-quote-close-error',\n (data: { error: Error; attemptedQuoteUids: string[] }) => {\n console.log('Close error event received:', data);\n setIsClosing(false);\n setModalSuccessMessage('');\n const errorMsg = data.error.message || dictionary.errorFallback;\n setModalErrorMessage(errorMsg);\n },\n {\n eager: true,\n }\n );\n return () => quoteCloseErrorEvent?.off();\n }, [dictionary.errorFallback]);\n\n // Listen for quote renamed event\n useEffect(() => {\n const quoteRenamedEvent = events.on(\n 'quote-management/quote-renamed',\n (data: { quote: NegotiableQuoteModel }) => {\n const { quote } = data;\n setQuoteData(quote);\n setRenameError('');\n setRenameQuoteNameError('');\n setRenameSuccess(dictionary.renameSuccessMessage);\n\n // Wait 2 seconds before closing the modal\n setTimeout(() => {\n setIsRenameModalOpen(false);\n setRenameQuoteName('');\n setRenameReason('');\n setRenameSuccess('');\n }, 2000);\n },\n {\n eager: true,\n }\n );\n return () => quoteRenamedEvent?.off();\n }, [dictionary.renameSuccessMessage]);\n\n /**\n * VNodes for the ManageNegotiableQuote component\n */\n\n // Rename handlers\n const handleRenameClick = useCallback(() => {\n setRenameQuoteName(quoteData?.name || '');\n setRenameReason('');\n setRenameError('');\n setRenameQuoteNameError('');\n setRenameSuccess('');\n setIsRenameModalOpen(true);\n }, [quoteData]);\n\n const handleRenameClose = useCallback(() => {\n setIsRenameModalOpen(false);\n setRenameQuoteName('');\n setRenameReason('');\n setRenameError('');\n setRenameQuoteNameError('');\n setRenameSuccess('');\n }, []);\n\n const handleRenameQuoteNameChange = useCallback((value: string) => {\n setRenameQuoteName(value);\n if (value.trim()) {\n setRenameQuoteNameError('');\n }\n }, []);\n\n const handleRenameSave = useCallback(async () => {\n // Validate quote name\n if (!renameQuoteName.trim()) {\n setRenameQuoteNameError(dictionary.renameQuoteNameRequired);\n return;\n }\n\n try {\n setRenameError('');\n setRenameQuoteNameError('');\n await renameNegotiableQuote({\n quoteUid: quoteData!.uid,\n quoteName: renameQuoteName,\n quoteComment: renameReason.trim() || undefined,\n });\n // The quote-renamed event will handle closing the modal and updating state\n } catch (error) {\n setRenameError((error as Error).message || dictionary.renameErrorDefault);\n }\n }, [\n quoteData,\n renameQuoteName,\n renameReason,\n dictionary.renameQuoteNameRequired,\n dictionary.renameErrorDefault,\n ]);\n\n // Quote name with rename icon\n const quoteName = useMemo(() => {\n // Priority 1: Check lockedForEditing if explicitly set\n // Priority 2: Fall back to status check\n const isLocked =\n quoteData &&\n // If lockedForEditing is explicitly set, use it\n (quoteData.lockedForEditing === true ||\n // Otherwise, lock based on status\n (quoteData.lockedForEditing === undefined &&\n (quoteData.status === 'SUBMITTED' ||\n quoteData.status === 'PENDING' ||\n quoteData.status === 'ORDERED' ||\n quoteData.status === 'CLOSED')));\n\n return (\n <Slot\n name=\"QuoteName\"\n slot={slots?.QuoteName}\n context={{ quoteName: quoteData?.name, quoteData }}\n >\n <div className=\"quote-management-manage-negotiable-quote__quote-name-wrapper\">\n <h1\n data-testid=\"quote-name\"\n className=\"quote-management-manage-negotiable-quote__quote-name-title\"\n >\n {quoteData?.name}\n </h1>\n <button\n onClick={handleRenameClick}\n disabled={isLocked}\n data-testid=\"rename-quote-button\"\n className=\"quote-management-manage-negotiable-quote__rename-button\"\n aria-label=\"Rename quote\"\n >\n <Edit />\n </button>\n </div>\n </Slot>\n );\n }, [slots?.QuoteName, quoteData, handleRenameClick]);\n\n // Quote status\n const quoteStatus = useMemo(() => {\n return (\n <Slot\n name=\"QuoteStatus\"\n slot={slots?.QuoteStatus}\n context={{ quoteStatus: quoteData?.status, quoteData }}\n >\n <div data-testid=\"quote-status\">{quoteData?.status}</div>\n </Slot>\n );\n }, [slots?.QuoteStatus, quoteData]);\n\n // Banner\n const getBannerStatusMessage = useCallback(\n (status: string | undefined) => {\n switch (status) {\n case 'SUBMITTED':\n return dictionary.statusSubmitted;\n case 'PENDING':\n return dictionary.statusPending;\n case 'EXPIRED':\n return dictionary.statusExpired;\n default:\n return null;\n }\n },\n [dictionary]\n );\n\n const bannerMessage = getBannerStatusMessage(quoteData?.status);\n\n const bannerContent = bannerMessage && (\n <InLineAlert\n type=\"warning\"\n variant=\"secondary\"\n icon={<WarningFilled />}\n heading={dictionary.bannerTitle}\n description={bannerMessage}\n />\n );\n\n const banner = bannerContent && (\n <Slot\n name=\"Banner\"\n data-testid=\"banner\"\n slot={slots?.Banner}\n context={{ quoteData }}\n >\n {bannerContent}\n </Slot>\n );\n\n // Details\n const details = useMemo(() => {\n if (!quoteData) {\n return null;\n }\n\n // Some quotes, such as draft quotes, don't have a date formatted expiration date\n const expirationDate = quoteData.expirationDate ? formattedDate(quoteData.expirationDate, 'short') : undefined;\n\n return (\n <Slot name=\"Details\" slot={slots?.Details} context={{ quoteData }}>\n <div className=\"quote-management-manage-negotiable-quote__detail\">\n <span\n className=\"quote-management-manage-negotiable-quote__detail-title\"\n data-testid=\"created-label\"\n >\n {dictionary.createdLabel}\n </span>\n <span\n className=\"quote-management-manage-negotiable-quote__detail-content\"\n data-testid=\"created-value\"\n >\n {formattedDate(quoteData!.createdAt, 'short')} (\n {quoteData!.buyer.firstname} {quoteData!.buyer.lastname})\n </span>\n </div>\n <div className=\"quote-management-manage-negotiable-quote__detail\">\n <span\n className=\"quote-management-manage-negotiable-quote__detail-title\"\n data-testid=\"sales-rep-label\"\n >\n {dictionary.salesRepLabel}\n </span>\n <span\n className=\"quote-management-manage-negotiable-quote__detail-content\"\n data-testid=\"sales-rep-value\"\n >\n {quoteData!.salesRepName}\n </span>\n </div>\n <div className=\"quote-management-manage-negotiable-quote__detail\">\n <span\n className=\"quote-management-manage-negotiable-quote__detail-title\"\n data-testid=\"expires-label\"\n >\n {dictionary.expiresLabel}\n </span>\n <span\n className=\"quote-management-manage-negotiable-quote__detail-content\"\n data-testid=\"expires-value\"\n >\n {expirationDate}\n </span>\n </div>\n </Slot>\n );\n }, [slots?.Details, dictionary, quoteData]);\n\n // Action bar\n const buttons: { label: string; value: string; disabled?: boolean }[] =\n useMemo(() => {\n return [\n {\n label: dictionary.close,\n value: 'close',\n disabled: !quoteData?.canClose,\n },\n {\n label: dictionary.delete,\n value: 'delete',\n disabled: !quoteData?.canDelete,\n },\n {\n label: dictionary.print,\n value: 'print',\n },\n {\n label: dictionary.createTemplate,\n value: 'createTemplate',\n },\n {\n label: dictionary.createCopy,\n value: 'createCopy',\n },\n ];\n }, [dictionary, quoteData?.canDelete, quoteData?.canClose]);\n const actionBar = useMemo(() => {\n const handleActionsButtonClick = (action: string) => {\n switch (action) {\n case 'close':\n setShowCloseModal(true);\n setModalErrorMessage(''); // Clear modal errors\n setModalSuccessMessage(''); // Clear modal success messages\n onActionsButtonClick?.(action);\n break;\n case 'delete':\n setIsDeleteDialogOpen(true);\n onActionsButtonClick?.(action);\n break;\n case 'print':\n onActionsButtonClick?.(action);\n break;\n case 'createTemplate':\n onActionsButtonClick?.(action);\n break;\n case 'createCopy':\n onActionsButtonClick?.(action);\n break;\n }\n };\n return (\n <Slot\n name=\"ActionBar\"\n slot={slots?.ActionBar}\n context={{ quoteData, actionsBarDropdownValue }}\n >\n <ActionsBar\n dropdownPlaceholder={dictionary.actionsLabel}\n dropdownOptions={[\n {\n label: dictionary.remove,\n value: 'remove',\n },\n ]}\n dropdownValue={actionsBarDropdownValue}\n handleDropdownChange={handleActionsDropdownChange}\n buttons={buttons.map((button) => (\n <Button\n key={button.value}\n variant=\"tertiary\"\n onClick={() => handleActionsButtonClick(button.value)}\n data-testid={`actions-bar-${button.value}-button`}\n data-action={button.value}\n disabled={button.disabled}\n >\n {button.label}\n </Button>\n ))}\n />\n </Slot>\n );\n }, [\n buttons,\n dictionary,\n slots?.ActionBar,\n quoteData,\n handleActionsDropdownChange,\n onActionsButtonClick,\n actionsBarDropdownValue,\n ]);\n\n // Quote content\n const quoteContent = useMemo(() => {\n return (\n <Slot\n name=\"QuoteContent\"\n slot={slots?.QuoteContent}\n context={{ quoteData }}\n >\n <TabbedContent\n tabs={\n new Map([\n ['items-quoted', 'Items Quoted'],\n ['comments', 'Comments'],\n ['history-log', 'History Log'],\n ])\n }\n tabsContent={\n new Map([\n [\n 'items-quoted',\n <Slot\n key=\"items-quoted\"\n name=\"ItemsQuotedTab\"\n slot={slots?.ItemsQuotedTab}\n context={{ quoteData }}\n >\n <ItemsQuoted\n quoteData={quoteData}\n onItemCheckboxChange={handleItemCheckboxChange}\n onRemoveItemsRef={(handler) => {\n removeItemsHandlerRef.current = handler;\n }}\n onRemoveModalStateChange={\n /* istanbul ignore next */ (isOpen) => {\n if (\n !isOpen &&\n actionsBarDropdownValueRef.current === 'remove'\n ) {\n setActionsBarDropdownValue('');\n }\n }\n }\n />\n </Slot>,\n ],\n [\n 'comments',\n <Slot\n key=\"comments\"\n name=\"CommentsTab\"\n slot={slots?.CommentsTab}\n context={{ quoteData }}\n >\n <QuoteCommentsList quoteData={quoteData} />\n </Slot>,\n ],\n [\n 'history-log',\n <Slot\n key=\"history-log\"\n name=\"HistoryLogTab\"\n slot={slots?.HistoryLogTab}\n context={{ quoteData }}\n >\n <QuoteHistoryLog quoteData={quoteData} />\n </Slot>,\n ],\n ])\n }\n />\n </Slot>\n );\n }, [\n slots?.QuoteContent,\n slots?.HistoryLogTab,\n slots?.CommentsTab,\n slots?.ItemsQuotedTab,\n quoteData,\n handleItemCheckboxChange,\n ]);\n\n // Shipping information title\n const shippingInformationTitle = useMemo(() => {\n return (\n <Slot\n name=\"ShippingInformationTitle\"\n slot={slots?.ShippingInformationTitle}\n context={{ quoteData }}\n >\n <h2>{dictionary.shippingInformationTitle}</h2>\n </Slot>\n );\n }, [slots?.ShippingInformationTitle, quoteData, dictionary]);\n\n // Shipping information\n const shippingInformation = useMemo(() => {\n return (\n <Slot\n name=\"ShippingInformation\"\n slot={slots?.ShippingInformation}\n context={{ quoteData, loading, setLoading }}\n >\n <ShippingAddressDisplay\n quoteData={quoteData}\n loading={loading}\n data-testid=\"manage-quote-shipping-address\"\n />\n </Slot>\n );\n }, [slots?.ShippingInformation, quoteData, loading, setLoading]);\n\n // Quote comments title\n const quoteCommentsTitle = useMemo(() => {\n return (\n <Slot\n name=\"QuoteCommentsTitle\"\n slot={slots?.QuoteCommentsTitle}\n context={{ quoteData }}\n >\n <h2>{dictionary.quoteCommentsTitle}</h2>\n </Slot>\n );\n }, [slots?.QuoteCommentsTitle, dictionary, quoteData]);\n\n // Quote comments\n const quoteComments = useMemo(() => {\n return (\n <Slot\n name=\"QuoteComments\"\n slot={slots?.QuoteComments}\n context={{ quoteData }}\n >\n <TextArea\n name=\"quoteComments\"\n placeholder={dictionary.quoteCommentsPlaceholder}\n rows={3}\n value={comment}\n onInput={(e) => {\n setComment((e.target as HTMLTextAreaElement).value);\n }}\n disabled={isSubmitting}\n />\n </Slot>\n );\n }, [slots?.QuoteComments, dictionary, quoteData, comment, isSubmitting]);\n\n // Close quote handler - only called when quoteData exists\n const handleCloseQuote = useCallback(async () => {\n if (!quoteData?.uid) {\n return;\n }\n setIsClosing(true);\n setModalErrorMessage('');\n setModalSuccessMessage('');\n try {\n await closeNegotiableQuote({\n quoteUids: [quoteData!.uid],\n });\n } catch (error) {\n console.error('Failed to close quote:', error);\n }\n }, [quoteData]);\n\n const handleCloseModalCancel = useCallback(() => {\n setShowCloseModal(false);\n setModalErrorMessage('');\n setModalSuccessMessage('');\n }, []);\n\n // Footer\n const handleSendForReview = useCallback(async () => {\n // If override prop is provided, use it instead of the API\n if (onSendForReview) {\n onSendForReview({\n quoteData: quoteData!,\n comment: comment.trim() || undefined,\n });\n return;\n }\n\n // Otherwise, use the sendForReview API\n setIsSubmitting(true);\n try {\n await sendForReview({\n quoteUid: quoteData!.uid,\n comment: comment.trim() || undefined,\n });\n // The quote-sent-for-review event will handle updating state\n } catch (error) {\n console.error('Failed to send quote for review:', error);\n setIsSubmitting(false);\n // TODO: Show error notification to user\n }\n }, [quoteData, onSendForReview, comment]);\n\n const footer = useMemo(() => {\n return (\n <Slot\n name=\"Footer\"\n slot={slots?.Footer}\n context={{ quoteData, comment, isSubmitting }}\n >\n <Button\n variant=\"primary\"\n onClick={handleSendForReview}\n data-testid=\"send-for-review-button\"\n disabled={!quoteData?.canSendForReview || isSubmitting || !quoteData}\n >\n {dictionary.sendForReview}\n </Button>\n </Slot>\n );\n }, [\n slots?.Footer,\n dictionary,\n quoteData,\n comment,\n isSubmitting,\n handleSendForReview,\n ]);\n\n // Rename modal error banner\n const renameErrorBanner = useMemo(\n () =>\n renameError ? (\n <InLineAlert\n type=\"error\"\n variant=\"primary\"\n icon={<WarningFilled color=\"var(--color-error)\" />}\n heading={dictionary.renameErrorHeading}\n description={renameError}\n />\n ) : undefined,\n [renameError, dictionary.renameErrorHeading]\n );\n\n // Rename modal success banner\n const renameSuccessBanner = useMemo(\n () =>\n renameSuccess ? (\n <InLineAlert\n type=\"success\"\n variant=\"primary\"\n icon={<CheckWithCircle />}\n heading={dictionary.renameSuccessHeading}\n description={renameSuccess}\n />\n ) : undefined,\n [renameSuccess, dictionary.renameSuccessHeading]\n );\n\n // Delete quote functionality\n const getDeleteErrorMessage = useCallback(\n (error: any): string => {\n // If it's an operation failure with errors array, get the first error message\n if (\n error.errors &&\n Array.isArray(error.errors) &&\n error.errors.length > 0\n ) {\n return (\n error.errors[0].message ||\n dictionary.confirmationModalDeleteErrorFallback\n );\n }\n // Otherwise use the error message or fallback\n return error?.message || dictionary.confirmationModalDeleteErrorFallback;\n },\n [dictionary.confirmationModalDeleteErrorFallback]\n );\n\n const handleDeleteCancel = useCallback(() => {\n setIsDeleteDialogOpen(false);\n setDeleteError(null);\n setDeleteSuccess(false);\n }, []);\n\n const handleDeleteConfirm = useCallback(async () => {\n if (!quoteData?.uid) {\n return;\n }\n\n setDeleteError(null);\n setDeleteSuccess(false);\n\n try {\n const { operationResults } = await deleteQuote(quoteData.uid);\n\n const failure = operationResults.find(\n (res: any) => res.__typename === 'DeleteNegotiableQuoteOperationFailure'\n ) as any;\n if (failure) {\n const errorMessage = getDeleteErrorMessage(failure);\n setDeleteError(errorMessage);\n return;\n }\n\n setDeleteSuccess(true);\n } catch (error: any) {\n const errorMessage = getDeleteErrorMessage(error);\n setDeleteError(errorMessage);\n }\n }, [quoteData, getDeleteErrorMessage]);\n\n const handleDismissError = useCallback(() => {\n setDeleteError(null);\n }, []);\n\n const handleDismissSuccess = useCallback(() => {\n setDeleteSuccess(false);\n }, []);\n\n const deleteErrorBanner = deleteError ? (\n <InLineAlert\n type=\"error\"\n variant=\"primary\"\n icon={<WarningFilled />}\n heading={dictionary.confirmationModalDeleteErrorHeading}\n description={deleteError}\n onDismiss={handleDismissError}\n data-testid=\"confirmation-modal-error-banner\"\n />\n ) : null;\n\n const deleteSuccessBanner = deleteSuccess ? (\n <InLineAlert\n type=\"success\"\n variant=\"primary\"\n icon={<CheckWithCircle />}\n heading={dictionary.confirmationModalDeleteSuccessHeading}\n description={dictionary.confirmationModalDeleteSuccessDescription}\n onDismiss={handleDismissSuccess}\n data-testid=\"confirmation-modal-success-banner\"\n />\n ) : null;\n\n const deleteBanner = deleteSuccessBanner || deleteErrorBanner;\n\n const manageNegotiableQuoteProps: ManageNegotiableQuoteComponentProps = {\n ...props,\n loading,\n quoteName,\n quoteStatus,\n banner: banner || undefined,\n details,\n actionBar,\n quoteContent,\n shippingInformationTitle,\n shippingInformation,\n quoteCommentsTitle,\n quoteComments,\n footer,\n };\n\n // Create banner for close modal based on success/error state\n let closeModalBanner = null;\n if (modalSuccessMessage) {\n closeModalBanner = (\n <InLineAlert\n type=\"success\"\n variant=\"primary\"\n icon={<CheckWithCircle />}\n heading={dictionary.closeModalSuccessHeading}\n description={modalSuccessMessage}\n data-testid=\"close-quote-success-banner\"\n />\n );\n } else if (modalErrorMessage) {\n closeModalBanner = (\n <InLineAlert\n type=\"error\"\n variant=\"primary\"\n icon={<WarningFilled />}\n heading={dictionary.confirmationModalDeleteErrorHeading}\n description={modalErrorMessage}\n data-testid=\"close-quote-error-banner\"\n />\n );\n }\n\n return (\n <>\n <ManageNegotiableQuoteComponent {...manageNegotiableQuoteProps} />\n {isRenameModalOpen &&\n createPortal(\n <RenameQuoteModal\n open={isRenameModalOpen}\n quoteName={renameQuoteName}\n renameReason={renameReason}\n quoteNameError={renameQuoteNameError}\n errorBanner={renameErrorBanner}\n successBanner={renameSuccessBanner}\n onQuoteNameChange={handleRenameQuoteNameChange}\n onRenameReasonChange={setRenameReason}\n onSave={handleRenameSave}\n onClose={handleRenameClose}\n />,\n document.body\n )}\n {isDeleteDialogOpen &&\n createPortal(\n <ConfirmationModal\n open={isDeleteDialogOpen}\n title={dictionary.confirmationModalDeleteTitle}\n message={dictionary.confirmationModalDeleteMessage}\n cancelLabel={dictionary.confirmationModalCancel}\n confirmLabel={dictionary.confirmationModalDeleteConfirm}\n onCancel={handleDeleteCancel}\n onConfirm={handleDeleteConfirm}\n showCloseButton={!deleteBanner}\n confirmationBanner={deleteBanner}\n />,\n document.body\n )}\n {showCloseModal &&\n createPortal(\n <ConfirmationModal\n open={showCloseModal}\n title={dictionary.closeModalTitle}\n message={dictionary.closeModalMessage}\n cancelLabel={dictionary.closeModalCancel}\n confirmLabel={\n isClosing\n ? dictionary.closeModalConfirmLoading\n : dictionary.closeModalConfirm\n }\n onCancel={handleCloseModalCancel}\n onConfirm={isClosing ? undefined : handleCloseQuote}\n showCloseButton={true}\n confirmationBanner={closeModalBanner}\n data-testid=\"close-quote-confirmation-modal\"\n />,\n document.body\n )}\n {isNoItemsSelectedModalOpen &&\n createPortal(\n <ConfirmationModal\n open={isNoItemsSelectedModalOpen}\n title={dictionary.noItemsSelectedModalTitle}\n message={dictionary.noItemsSelectedModalMessage}\n confirmLabel={dictionary.noItemsSelectedModalConfirm}\n onConfirm={handleCloseNoItemsSelectedModal}\n onClose={handleCloseNoItemsSelectedModal}\n showCloseButton={true}\n data-testid=\"no-items-selected-modal\"\n />,\n document.body\n )}\n </>\n );\n};\n"],"names":["SvgEdit","props","React","ActionsBar","className","dropdownPlaceholder","dropdownOptions","dropdownValue","handleDropdownChange","buttons","hasDropdown","hasButtons","pickerOptions","option","jsx","jsxs","classes","Picker","button","index","VComponent","ManageNegotiableQuote","loading","quoteName","quoteStatus","banner","details","actionBar","quoteContent","shippingInformationTitle","shippingInformation","quoteCommentsTitle","quoteComments","footer","ManageNegotiableQuoteSkeleton","Skeleton","SkeletonRow","RenameQuoteModal","open","renameReason","quoteNameError","errorBanner","successBanner","showCloseButton","onQuoteNameChange","onRenameReasonChange","onSave","onClose","dictionary","useText","Modal","Fragment","Input","e","TextArea","Button","onActionsDropdownChange","slots","onActionsButtonClick","onSendForReview","quoteData","setQuoteData","useState","setLoading","isDeleteDialogOpen","setIsDeleteDialogOpen","deleteError","setDeleteError","deleteSuccess","setDeleteSuccess","comment","setComment","isSubmitting","setIsSubmitting","showCloseModal","setShowCloseModal","isClosing","setIsClosing","modalSuccessMessage","setModalSuccessMessage","modalErrorMessage","setModalErrorMessage","isRenameModalOpen","setIsRenameModalOpen","renameQuoteName","setRenameQuoteName","setRenameReason","renameError","setRenameError","renameQuoteNameError","setRenameQuoteNameError","renameSuccess","setRenameSuccess","selectedItemUids","setSelectedItemUids","selectedItemUidsRef","useRef","removeItemsHandlerRef","actionsBarDropdownValue","setActionsBarDropdownValue","actionsBarDropdownValueRef","isNoItemsSelectedModalOpen","setIsNoItemsSelectedModalOpen","useEffect","quoteDataEvent","events","data","quote","shippingAddressSetEvent","quoteSentForReviewEvent","quoteItemsRemovedEvent","removedItemUids","prev","next","uid","handleItemCheckboxChange","useCallback","item","isSelected","handleActionsDropdownChange","event","action","currentSelectedUids","itemsToRemove","handleCloseNoItemsSelectedModal","quoteClosedEvent","currentQuoteData","_a","getQuoteData","updatedQuoteData","error","quoteCloseErrorEvent","errorMsg","quoteRenamedEvent","handleRenameClick","handleRenameClose","handleRenameQuoteNameChange","value","handleRenameSave","renameNegotiableQuote","useMemo","isLocked","Slot","Edit","bannerMessage","status","bannerContent","InLineAlert","WarningFilled","expirationDate","formattedDate","handleActionsButtonClick","TabbedContent","ItemsQuoted","handler","isOpen","QuoteCommentsList","QuoteHistoryLog","ShippingAddressDisplay","handleCloseQuote","closeNegotiableQuote","handleCloseModalCancel","handleSendForReview","sendForReview","renameErrorBanner","renameSuccessBanner","CheckWithCircle","getDeleteErrorMessage","handleDeleteCancel","handleDeleteConfirm","operationResults","deleteQuote","failure","res","errorMessage","handleDismissError","handleDismissSuccess","deleteErrorBanner","deleteBanner","manageNegotiableQuoteProps","closeModalBanner","ManageNegotiableQuoteComponent","createPortal","ConfirmationModal"],"mappings":"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","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"ManageNegotiableQuote.js","sources":["../../node_modules/@adobe-commerce/elsie/src/icons/Edit.svg","/@dropins/storefront-quote-management/src/components/ManageNegotiableQuote/ManageNegotiableQuote.tsx","/@dropins/storefront-quote-management/src/components/RenameQuoteModal/RenameQuoteModal.tsx","/@dropins/storefront-quote-management/src/containers/ManageNegotiableQuote/ManageNegotiableQuote.tsx"],"sourcesContent":["import * as React from \"react\";\nconst SvgEdit = (props) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", stroke: \"currentColor\", strokeWidth: 2, strokeLinecap: \"round\", strokeLinejoin: \"round\", className: \"feather feather-edit-2\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M17 3a2.828 2.828 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5L17 3z\" }));\nexport default SvgEdit;\n","/********************************************************************\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this \n * file in accordance with the terms of the Adobe license agreement \n * accompanying it. \n *******************************************************************/\n\nimport { FunctionComponent, VNode } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\nimport { classes, VComponent } from '@adobe-commerce/elsie/lib';\nimport '@/quote-management/components/ManageNegotiableQuote/ManageNegotiableQuote.css';\nimport { Skeleton, SkeletonRow } from '@adobe-commerce/elsie/components';\n\nexport interface ManageNegotiableQuoteProps extends Omit<HTMLAttributes<HTMLDivElement>, 'loading'> {\n loading?: boolean;\n quoteName: VNode;\n quoteStatus: VNode;\n banner?: VNode;\n details?: VNode;\n actionBar?: VNode;\n quoteContent: VNode;\n shippingInformationTitle: VNode;\n shippingInformation: VNode;\n quoteCommentsTitle: VNode;\n quoteComments: VNode;\n footer: VNode;\n}\n\nexport const ManageNegotiableQuote: FunctionComponent<ManageNegotiableQuoteProps> = ({\n className,\n loading,\n quoteName,\n quoteStatus,\n banner,\n details,\n actionBar,\n quoteContent,\n shippingInformationTitle,\n shippingInformation,\n quoteCommentsTitle,\n quoteComments,\n footer,\n ...props\n}) => {\n if (loading) {\n return <ManageNegotiableQuoteSkeleton />;\n }\n\n return (\n <div {...props} className={classes(['quote-management-manage-negotiable-quote', className])}>\n <div className={classes(['quote-management-manage-negotiable-quote__header'])}>\n {quoteName &&\n <VComponent\n node={quoteName}\n className={classes(['quote-management-manage-negotiable-quote__quote-name'])}\n />\n }\n {quoteStatus &&\n <VComponent\n node={quoteStatus}\n className={classes(['quote-management-manage-negotiable-quote__quote-status'])}\n />\n }\n </div>\n {banner &&\n <VComponent\n node={banner}\n className={classes(['quote-management-manage-negotiable-quote__banner'])}\n />\n }\n {details &&\n <VComponent\n node={details}\n className={classes(['quote-management-manage-negotiable-quote__details'])}\n />\n }\n {actionBar &&\n <VComponent\n node={actionBar}\n className={classes(['quote-management-manage-negotiable-quote__action-bar'])}\n />\n }\n {quoteContent &&\n <VComponent\n node={quoteContent}\n className={classes(['quote-management-manage-negotiable-quote__quote-content'])}\n />\n }\n <div data-testid=\"quote-shipping-information-container\" className={classes(['quote-management-manage-negotiable-quote__shipping-information-container'])}>\n {shippingInformationTitle &&\n <VComponent\n node={shippingInformationTitle}\n className={classes(['quote-management-manage-negotiable-quote__shipping-information-title'])}\n />\n }\n {shippingInformation &&\n <VComponent\n node={shippingInformation}\n className={classes(['quote-management-manage-negotiable-quote__shipping-information'])}\n />\n }\n </div>\n <div data-testid=\"quote-comments-container\" className={classes(['quote-management-manage-negotiable-quote__quote-comments-container'])}>\n {quoteCommentsTitle &&\n <VComponent\n node={quoteCommentsTitle}\n className={classes(['quote-management-manage-negotiable-quote__quote-comments-title'])}\n />\n }\n {quoteComments &&\n <VComponent\n node={quoteComments}\n className={classes(['quote-management-manage-negotiable-quote__quote-comments'])}\n />\n }\n </div>\n <VComponent\n node={footer}\n className={classes(['quote-management-manage-negotiable-quote__footer'])}\n />\n </div>\n );\n};\n\nexport const ManageNegotiableQuoteSkeleton: FunctionComponent = () => {\n return (\n <Skeleton data-testid=\"manage-negotiable-quote-skeleton\">\n <SkeletonRow variant=\"heading\" fullWidth={true} size=\"large\" />\n <SkeletonRow variant=\"row\" fullWidth={false} size=\"small\" />\n <SkeletonRow variant=\"row\" fullWidth={false} size=\"small\" />\n <SkeletonRow variant=\"row\" fullWidth={true} />\n <SkeletonRow variant=\"row\" fullWidth={true} size=\"xlarge\" lines={2} />\n <SkeletonRow variant=\"row\" fullWidth={false} size=\"small\" />\n </Skeleton>\n );\n};\n","/********************************************************************\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this\n * file in accordance with the terms of the Adobe license agreement\n * accompanying it.\n *******************************************************************/\n\nimport { FunctionComponent, VNode } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\nimport { classes } from '@adobe-commerce/elsie/lib';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { Button, Input, TextArea, Modal } from '@adobe-commerce/elsie/components';\nimport '@/quote-management/components/RenameQuoteModal/RenameQuoteModal.css';\n\nexport interface RenameQuoteModalProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n open: boolean;\n quoteName: string;\n renameReason: string;\n quoteNameError?: string;\n errorBanner?: VNode;\n successBanner?: VNode;\n showCloseButton?: boolean;\n onQuoteNameChange: (value: string) => void;\n onRenameReasonChange: (value: string) => void;\n onSave: () => void;\n onClose?: () => void;\n}\n\nexport const RenameQuoteModal: FunctionComponent<RenameQuoteModalProps> = ({\n className,\n open,\n quoteName,\n renameReason,\n quoteNameError,\n errorBanner,\n successBanner,\n showCloseButton = true,\n onQuoteNameChange,\n onRenameReasonChange,\n onSave,\n onClose,\n}) => {\n const dictionary = useText({\n title: 'NegotiableQuote.Manage.rename.title',\n quoteNameLabel: 'NegotiableQuote.Manage.rename.quoteNameLabel',\n reasonLabel: 'NegotiableQuote.Manage.rename.reasonLabel',\n renameButton: 'NegotiableQuote.Manage.rename.renameButton',\n cancelButton: 'NegotiableQuote.Manage.rename.cancelButton',\n });\n\n if (!open) {\n return null;\n }\n\n return (\n <Modal\n open={open}\n size=\"medium\"\n title={<>{dictionary.title}</>}\n onClose={onClose}\n clickToDismiss={true}\n escapeToDismiss={true}\n showCloseButton={showCloseButton}\n className={classes(['quote-management-rename-quote-modal', className])}\n data-testid=\"rename-quote-modal\"\n >\n {errorBanner && (\n <div className={classes(['quote-management-rename-quote-modal__error-banner'])} data-testid=\"rename-quote-modal-error-banner\">\n {errorBanner}\n </div>\n )}\n\n {successBanner && (\n <div className={classes(['quote-management-rename-quote-modal__success-banner'])} data-testid=\"rename-quote-modal-success-banner\">\n {successBanner}\n </div>\n )}\n\n <div className={classes(['quote-management-rename-quote-modal__content'])}>\n <div>\n <Input\n name=\"quoteName\"\n type=\"text\"\n value={quoteName}\n onInput={(e: any) => onQuoteNameChange(e.target.value)}\n floatingLabel={dictionary.quoteNameLabel}\n required\n error={!!quoteNameError}\n />\n {quoteNameError && (\n <span className={classes(['quote-management-rename-quote-modal__error-text'])}>\n {quoteNameError}\n </span>\n )}\n </div>\n\n <TextArea\n name=\"quoteComment\"\n value={renameReason}\n onInput={(e: any) => onRenameReasonChange(e.target.value)}\n label={dictionary.reasonLabel}\n rows={3}\n />\n </div>\n\n <div className={classes(['quote-management-rename-quote-modal__actions'])}>\n <Button \n variant=\"secondary\"\n size=\"medium\"\n onClick={onClose}\n className={classes(['quote-management-rename-quote-modal__cancel-button'])}\n >\n {dictionary.cancelButton}\n </Button>\n <Button \n variant=\"primary\"\n size=\"medium\"\n onClick={onSave}\n className={classes(['quote-management-rename-quote-modal__save-button'])}\n >\n {dictionary.renameButton}\n </Button>\n </div>\n </Modal>\n );\n};\n","/********************************************************************\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this\n * file in accordance with the terms of the Adobe license agreement\n * accompanying it.\n *******************************************************************/\n\nimport {\n HTMLAttributes,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n createPortal,\n} from 'preact/compat';\nimport {\n Container,\n Slot,\n SlotProps,\n} from '@adobe-commerce/elsie/lib';\nimport { formattedDate } from '@/quote-management/utils/dateUtils';\nimport {\n NegotiableQuoteModel,\n NegotiableQuoteCartItem,\n} from '@/quote-management/data/models/negotiable-quote-model';\nimport {\n ManageNegotiableQuote as ManageNegotiableQuoteComponent,\n ManageNegotiableQuoteProps as ManageNegotiableQuoteComponentProps,\n} from '@/quote-management/components/ManageNegotiableQuote';\nimport { events } from '@adobe-commerce/event-bus';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport {\n ActionsBar,\n TabbedContent,\n ConfirmationModal,\n} from '@/quote-management/components';\nimport { ShippingAddressDisplay } from '@/quote-management/containers/ShippingAddressDisplay';\nimport { QuoteHistoryLog } from '@/quote-management/containers/QuoteHistoryLog';\nimport { ItemsQuoted, QuoteCommentsList } from '@/quote-management/containers';\nimport {\n Button,\n InLineAlert,\n TextArea,\n} from '@adobe-commerce/elsie/components';\nimport {\n WarningFilled,\n Edit,\n CheckWithCircle,\n} from '@adobe-commerce/elsie/icons';\nimport {\n deleteQuote,\n sendForReview,\n renameNegotiableQuote,\n closeNegotiableQuote,\n getQuoteData,\n duplicateQuote,\n createQuoteTemplate,\n} from '@/quote-management/api';\nimport { RenameQuoteModal } from '@/quote-management/components/RenameQuoteModal';\n\nexport interface ManageNegotiableQuoteProps\n extends HTMLAttributes<HTMLDivElement> {\n onActionsDropdownChange?: (event: Event) => void;\n onActionsButtonClick?: (action: string) => void;\n onSendForReview?: (params: {\n quoteData: NegotiableQuoteModel;\n comment?: string;\n }) => void;\n onDuplicateQuote?: (params: {\n quoteData: NegotiableQuoteModel;\n newQuote: NegotiableQuoteModel;\n }) => void;\n slots?: {\n QuoteName?: SlotProps<{\n quoteName?: string;\n quoteData?: NegotiableQuoteModel;\n }>;\n QuoteStatus?: SlotProps<{\n quoteStatus?: string;\n quoteData?: NegotiableQuoteModel;\n }>;\n Banner?: SlotProps<{\n quoteData?: NegotiableQuoteModel;\n }>;\n Details?: SlotProps<{\n quoteData?: NegotiableQuoteModel;\n }>;\n ActionBar?: SlotProps<{\n quoteData?: NegotiableQuoteModel;\n actionsBarDropdownValue?: string;\n }>;\n QuoteContent?: SlotProps<{\n quoteData?: NegotiableQuoteModel;\n }>;\n ItemsQuotedTab?: SlotProps<{\n quoteData?: NegotiableQuoteModel;\n }>;\n CommentsTab?: SlotProps<{\n quoteData?: NegotiableQuoteModel;\n }>;\n HistoryLogTab?: SlotProps<{\n quoteData?: NegotiableQuoteModel;\n }>;\n ShippingInformationTitle?: SlotProps<{\n quoteData?: NegotiableQuoteModel;\n }>;\n ShippingInformation?: SlotProps<{\n quoteData?: NegotiableQuoteModel;\n loading?: boolean;\n setLoading?: (loading: boolean) => void;\n }>;\n QuoteCommentsTitle?: SlotProps<{\n quoteData?: NegotiableQuoteModel;\n }>;\n QuoteComments?: SlotProps<{\n quoteData?: NegotiableQuoteModel;\n }>;\n Footer?: SlotProps<{\n quoteData?: NegotiableQuoteModel;\n comment?: string;\n isSubmitting?: boolean;\n }>;\n };\n}\n\nexport const ManageNegotiableQuote: Container<ManageNegotiableQuoteProps> = ({\n onActionsDropdownChange,\n slots,\n onActionsButtonClick,\n onSendForReview,\n onDuplicateQuote,\n ...props\n}) => {\n const [quoteData, setQuoteData] = useState<NegotiableQuoteModel | undefined>(\n undefined\n );\n const [loading, setLoading] = useState<boolean>(true);\n const [isDeleteDialogOpen, setIsDeleteDialogOpen] = useState<boolean>(false);\n const [deleteError, setDeleteError] = useState<string | null>(null);\n const [deleteSuccess, setDeleteSuccess] = useState<boolean>(false);\n const [isDuplicateDialogOpen, setIsDuplicateDialogOpen] = useState<boolean>(false);\n const [duplicateError, setDuplicateError] = useState<string | null>(null);\n const [duplicateSuccess, setDuplicateSuccess] = useState<boolean>(false);\n const [comment, setComment] = useState<string>('');\n const [isSubmitting, setIsSubmitting] = useState<boolean>(false);\n const [showCloseModal, setShowCloseModal] = useState<boolean>(false);\n const [isClosing, setIsClosing] = useState<boolean>(false);\n const [modalSuccessMessage, setModalSuccessMessage] = useState<string>('');\n const [modalErrorMessage, setModalErrorMessage] = useState<string>('');\n const [showCreateTemplateModal, setShowCreateTemplateModal] = useState<boolean>(false);\n const [isCreatingTemplate, setIsCreatingTemplate] = useState<boolean>(false);\n const [createTemplateSuccessMessage, setCreateTemplateSuccessMessage] = useState<string>('');\n const [createTemplateErrorMessage, setCreateTemplateErrorMessage] = useState<string>('');\n const [isRenameModalOpen, setIsRenameModalOpen] = useState<boolean>(false);\n const [renameQuoteName, setRenameQuoteName] = useState<string>('');\n const [renameReason, setRenameReason] = useState<string>('');\n const [renameError, setRenameError] = useState<string>('');\n const [renameQuoteNameError, setRenameQuoteNameError] = useState<string>('');\n const [renameSuccess, setRenameSuccess] = useState<string>('');\n const [selectedItemUids, setSelectedItemUids] = useState<Set<string>>(\n new Set()\n );\n const selectedItemUidsRef = useRef<Set<string>>(selectedItemUids);\n const removeItemsHandlerRef = useRef<\n ((items: NegotiableQuoteCartItem[]) => void) | null\n >(null);\n const [actionsBarDropdownValue, setActionsBarDropdownValue] =\n useState<string>('');\n const actionsBarDropdownValueRef = useRef<string>(actionsBarDropdownValue);\n const [isNoItemsSelectedModalOpen, setIsNoItemsSelectedModalOpen] =\n useState<boolean>(false);\n\n // Keep refs in sync with state\n useEffect(() => {\n selectedItemUidsRef.current = selectedItemUids;\n }, [selectedItemUids]);\n\n useEffect(() => {\n actionsBarDropdownValueRef.current = actionsBarDropdownValue;\n }, [actionsBarDropdownValue]);\n\n const dictionary = useText({\n createdLabel: 'NegotiableQuote.Manage.createdLabel',\n salesRepLabel: 'NegotiableQuote.Manage.salesRepLabel',\n expiresLabel: 'NegotiableQuote.Manage.expiresLabel',\n actionsLabel: 'NegotiableQuote.Manage.actionsLabel',\n remove: 'NegotiableQuote.Manage.actions.remove',\n close: 'NegotiableQuote.Manage.actionButtons.close',\n delete: 'NegotiableQuote.Manage.actionButtons.delete',\n print: 'NegotiableQuote.Manage.actionButtons.print',\n createTemplate: 'NegotiableQuote.Manage.actionButtons.createTemplate',\n createCopy: 'NegotiableQuote.Manage.actionButtons.createCopy',\n shippingInformationTitle:\n 'NegotiableQuote.Manage.shippingInformation.title',\n quoteCommentsTitle: 'NegotiableQuote.Manage.quoteComments.title',\n quoteCommentsPlaceholder:\n 'NegotiableQuote.Manage.quoteComments.placeholder',\n sendForReview: 'NegotiableQuote.Manage.actionButtons.sendForReview',\n bannerTitle: 'NegotiableQuote.Manage.bannerTitle',\n statusSubmitted: 'NegotiableQuote.Manage.bannerStatusMessages.submitted',\n statusPending: 'NegotiableQuote.Manage.bannerStatusMessages.pending',\n statusExpired: 'NegotiableQuote.Manage.bannerStatusMessages.expired',\n errorFallback:\n 'NegotiableQuote.Manage.confirmationModal.delete.errorFallback',\n closeSuccessMessage:\n 'NegotiableQuote.Manage.confirmationModal.close.successDescription',\n closeModalTitle: 'NegotiableQuote.Manage.actionButtons.close',\n closeModalMessage: 'NegotiableQuote.Manage.confirmationModal.close.message',\n closeModalCancel: 'NegotiableQuote.Manage.confirmationModal.cancel',\n closeModalConfirm: 'NegotiableQuote.Manage.confirmationModal.close.confirm',\n closeModalConfirmLoading:\n 'NegotiableQuote.Manage.confirmationModal.close.confirmLoading',\n closeModalSuccessHeading:\n 'NegotiableQuote.Manage.confirmationModal.close.successHeading',\n createTemplateModalTitle: 'NegotiableQuote.Manage.actionButtons.createTemplate',\n createTemplateModalMessage: 'NegotiableQuote.Manage.confirmationModal.createTemplate.message',\n createTemplateModalCancel: 'NegotiableQuote.Manage.confirmationModal.cancel',\n createTemplateModalConfirm: 'NegotiableQuote.Manage.confirmationModal.createTemplate.confirm',\n createTemplateModalConfirmLoading:\n 'NegotiableQuote.Manage.confirmationModal.createTemplate.confirmLoading',\n createTemplateModalSuccessHeading:\n 'NegotiableQuote.Manage.confirmationModal.createTemplate.successHeading',\n createTemplateSuccessMessage:\n 'NegotiableQuote.Manage.confirmationModal.createTemplate.successDescription',\n createTemplateModalErrorHeading:\n 'NegotiableQuote.Manage.confirmationModal.createTemplate.errorHeading',\n createTemplateErrorFallback:\n 'NegotiableQuote.Manage.confirmationModal.createTemplate.errorFallback',\n renameErrorHeading: 'NegotiableQuote.Manage.rename.errorHeading',\n renameQuoteNameRequired: 'NegotiableQuote.Manage.rename.quoteNameRequired',\n renameErrorDefault: 'NegotiableQuote.Manage.rename.errorDefault',\n renameSuccessHeading: 'NegotiableQuote.Manage.rename.successHeading',\n renameSuccessMessage: 'NegotiableQuote.Manage.rename.successMessage',\n confirmationModalCancel: 'NegotiableQuote.Manage.confirmationModal.cancel',\n confirmationModalDeleteTitle: 'NegotiableQuote.Manage.confirmationModal.delete.title',\n confirmationModalDeleteMessage: 'NegotiableQuote.Manage.confirmationModal.delete.message',\n confirmationModalDeleteConfirm: 'NegotiableQuote.Manage.confirmationModal.delete.confirm',\n confirmationModalDeleteErrorHeading: 'NegotiableQuote.Manage.confirmationModal.delete.errorHeading',\n confirmationModalDeleteErrorFallback: 'NegotiableQuote.Manage.confirmationModal.delete.errorFallback',\n confirmationModalDeleteSuccessHeading: 'NegotiableQuote.Manage.confirmationModal.delete.successHeading',\n confirmationModalDeleteSuccessDescription: 'NegotiableQuote.Manage.confirmationModal.delete.successDescription',\n confirmationModalDuplicateTitle: 'NegotiableQuote.Manage.confirmationModal.duplicate.title',\n confirmationModalDuplicateMessage: 'NegotiableQuote.Manage.confirmationModal.duplicate.message',\n confirmationModalDuplicateConfirm: 'NegotiableQuote.Manage.confirmationModal.duplicate.confirm',\n confirmationModalDuplicateErrorHeading: 'NegotiableQuote.Manage.confirmationModal.duplicate.errorHeading',\n confirmationModalDuplicateErrorFallback: 'NegotiableQuote.Manage.confirmationModal.duplicate.errorFallback',\n confirmationModalDuplicateSuccessHeading: 'NegotiableQuote.Manage.confirmationModal.duplicate.successHeading',\n confirmationModalDuplicateSuccessDescription: 'NegotiableQuote.Manage.confirmationModal.duplicate.successDescription',\n noItemsSelectedModalTitle: 'NegotiableQuote.Manage.confirmationModal.noItemsSelected.title',\n noItemsSelectedModalMessage: 'NegotiableQuote.Manage.confirmationModal.noItemsSelected.message',\n noItemsSelectedModalConfirm: 'NegotiableQuote.Manage.confirmationModal.noItemsSelected.confirm',\n });\n /* Event listeners */\n useEffect(() => {\n const quoteDataEvent = events.on(\n 'quote-management/quote-data',\n (data: { quote: NegotiableQuoteModel }) => {\n const { quote } = data;\n if (quote) {\n setQuoteData(quote);\n setLoading(false);\n }\n },\n {\n eager: true,\n }\n );\n return () => quoteDataEvent?.off();\n }, []);\n\n // Listen for shipping address set event\n useEffect(() => {\n const shippingAddressSetEvent = events.on(\n 'quote-management/shipping-address-set',\n (data: { quote: NegotiableQuoteModel }) => {\n const { quote } = data;\n if (quote) {\n setQuoteData(quote);\n }\n },\n {\n eager: true,\n }\n );\n return () => shippingAddressSetEvent?.off();\n }, []);\n\n // Listen for quote sent for review event\n useEffect(() => {\n const quoteSentForReviewEvent = events.on(\n 'quote-management/quote-sent-for-review',\n (data: { quote: NegotiableQuoteModel }) => {\n const { quote } = data;\n setQuoteData(quote);\n setComment(''); // Reset comment after successful submission\n setIsSubmitting(false);\n },\n {\n eager: true,\n }\n );\n return () => quoteSentForReviewEvent?.off();\n }, []);\n\n // Listen for quote items removed event\n useEffect(() => {\n const quoteItemsRemovedEvent = events.on(\n 'quote-management/quote-items-removed',\n (data: { quote: NegotiableQuoteModel; removedItemUids: string[] }) => {\n const { quote, removedItemUids } = data;\n /* istanbul ignore else */ // Always has quote in real usage; covered in integration tests\n if (quote) {\n setQuoteData(quote);\n }\n // Clear selected items that were removed\n /* istanbul ignore else */ // Always has removedItemUids in real usage; covered in integration tests\n if (removedItemUids) {\n setSelectedItemUids((prev) => {\n const next = new Set(prev);\n removedItemUids.forEach((uid) => next.delete(uid));\n return next;\n });\n }\n },\n {\n eager: true,\n }\n );\n return () => quoteItemsRemovedEvent?.off();\n }, []);\n\n /**\n * Handlers\n */\n const handleItemCheckboxChange = useCallback(\n (item: NegotiableQuoteCartItem, isSelected: boolean) => {\n setSelectedItemUids((prev) => {\n const next = new Set(prev);\n if (isSelected) {\n next.add(item.uid);\n } else {\n next.delete(item.uid);\n }\n return next;\n });\n },\n []\n );\n\n const handleActionsDropdownChange = useCallback(\n (event: Event) => {\n const action = (event.target as HTMLSelectElement).value;\n const currentSelectedUids = selectedItemUidsRef.current;\n /* istanbul ignore else */ if (action === 'remove') {\n setActionsBarDropdownValue(action);\n actionsBarDropdownValueRef.current = action; // Update ref immediately\n /* istanbul ignore next */ if (currentSelectedUids.size === 0) {\n // No items selected - show warning modal\n setIsNoItemsSelectedModalOpen(true);\n } else if (quoteData && removeItemsHandlerRef.current) {\n // Items selected - proceed with removal\n const itemsToRemove = quoteData.items.filter((item) =>\n currentSelectedUids.has(item.uid)\n );\n /* istanbul ignore next */ removeItemsHandlerRef.current(\n itemsToRemove\n );\n }\n }\n onActionsDropdownChange?.(event);\n },\n [onActionsDropdownChange, quoteData]\n );\n\n /* istanbul ignore next */ const handleCloseNoItemsSelectedModal =\n useCallback(() => {\n setIsNoItemsSelectedModalOpen(false);\n setActionsBarDropdownValue('');\n actionsBarDropdownValueRef.current = '';\n }, []);\n\n // Listen for quote closed event\n useEffect(() => {\n const quoteClosedEvent = events.on(\n 'quote-management/negotiable-quote-closed',\n async (data: { closedQuoteUids: string[] }) => {\n setIsClosing(false);\n setModalErrorMessage('');\n // Show success message in modal\n setModalSuccessMessage(dictionary.closeSuccessMessage);\n\n // Refresh quote data if the current quote was closed\n // Use a function to get the current quoteData to avoid stale closure\n setQuoteData((currentQuoteData) => {\n if (\n currentQuoteData?.uid &&\n data.closedQuoteUids?.includes(currentQuoteData.uid)\n ) {\n // Trigger async refresh\n getQuoteData(currentQuoteData.uid)\n .then((updatedQuoteData) => {\n setQuoteData(updatedQuoteData);\n })\n .catch((error) => {\n console.warn(\n 'Failed to refresh quote data after closure:',\n error\n );\n });\n }\n return currentQuoteData; // Return current data unchanged for this setter call\n });\n\n // Close modal and redirect after a delay to show success message\n setTimeout(() => {\n setShowCloseModal(false);\n setModalSuccessMessage('');\n }, 2000);\n },\n {\n eager: true,\n }\n );\n return () => quoteClosedEvent?.off();\n }, [dictionary.closeSuccessMessage]);\n\n // Listen for quote close error event\n useEffect(() => {\n const quoteCloseErrorEvent = events.on(\n 'quote-management/negotiable-quote-close-error',\n (data: { error: Error; attemptedQuoteUids: string[] }) => {\n console.log('Close error event received:', data);\n setIsClosing(false);\n setModalSuccessMessage('');\n const errorMsg = data.error.message || dictionary.errorFallback;\n setModalErrorMessage(errorMsg);\n },\n {\n eager: true,\n }\n );\n return () => quoteCloseErrorEvent?.off();\n }, [dictionary.errorFallback]);\n\n // Listen for quote renamed event\n useEffect(() => {\n const quoteRenamedEvent = events.on(\n 'quote-management/quote-renamed',\n (data: { quote: NegotiableQuoteModel }) => {\n const { quote } = data;\n setQuoteData(quote);\n setRenameError('');\n setRenameQuoteNameError('');\n setRenameSuccess(dictionary.renameSuccessMessage);\n\n // Wait 2 seconds before closing the modal\n setTimeout(() => {\n setIsRenameModalOpen(false);\n setRenameQuoteName('');\n setRenameReason('');\n setRenameSuccess('');\n }, 2000);\n },\n {\n eager: true,\n }\n );\n return () => quoteRenamedEvent?.off();\n }, [dictionary.renameSuccessMessage]);\n\n // Listen for quote duplicated event\n useEffect(() => {\n const quoteDuplicatedEvent = events.on(\n 'quote-management/quote-duplicated',\n (data: {\n quote: NegotiableQuoteModel;\n input: { quoteUid: string; duplicatedQuoteUid: string };\n }) => {\n const { quote: newQuote } = data;\n\n // Call parent callback if provided\n if (quoteData && onDuplicateQuote) {\n onDuplicateQuote({ quoteData, newQuote });\n }\n\n // Show success in modal\n setDuplicateSuccess(true);\n setDuplicateError(null);\n\n // Close modal after showing success message\n // Navigation is handled by the application layer listening to quote-duplicated event\n setTimeout(() => {\n setIsDuplicateDialogOpen(false);\n setDuplicateSuccess(false);\n setDuplicateError(null);\n }, 2000);\n },\n {\n eager: true,\n }\n );\n return () => quoteDuplicatedEvent?.off();\n }, [quoteData, onDuplicateQuote]);\n\n /**\n * VNodes for the ManageNegotiableQuote component\n */\n\n // Rename handlers\n const handleRenameClick = useCallback(() => {\n setRenameQuoteName(quoteData?.name || '');\n setRenameReason('');\n setRenameError('');\n setRenameQuoteNameError('');\n setRenameSuccess('');\n setIsRenameModalOpen(true);\n }, [quoteData]);\n\n const handleRenameClose = useCallback(() => {\n setIsRenameModalOpen(false);\n setRenameQuoteName('');\n setRenameReason('');\n setRenameError('');\n setRenameQuoteNameError('');\n setRenameSuccess('');\n }, []);\n\n const handleRenameQuoteNameChange = useCallback((value: string) => {\n setRenameQuoteName(value);\n if (value.trim()) {\n setRenameQuoteNameError('');\n }\n }, []);\n\n const handleDuplicateQuote = useCallback(() => {\n // Show confirmation modal\n setIsDuplicateDialogOpen(true);\n setDuplicateError(null);\n setDuplicateSuccess(false);\n }, []);\n\n const handleRenameSave = useCallback(async () => {\n // Validate quote name\n if (!renameQuoteName.trim()) {\n setRenameQuoteNameError(dictionary.renameQuoteNameRequired);\n return;\n }\n\n try {\n setRenameError('');\n setRenameQuoteNameError('');\n await renameNegotiableQuote({\n quoteUid: quoteData!.uid,\n quoteName: renameQuoteName,\n quoteComment: renameReason.trim() || undefined,\n });\n // The quote-renamed event will handle closing the modal and updating state\n } catch (error) {\n setRenameError((error as Error).message || dictionary.renameErrorDefault);\n }\n }, [\n quoteData,\n renameQuoteName,\n renameReason,\n dictionary.renameQuoteNameRequired,\n dictionary.renameErrorDefault,\n ]);\n\n // Quote name with rename icon\n const quoteName = useMemo(() => {\n // Priority 1: Check lockedForEditing if explicitly set\n // Priority 2: Fall back to status check\n const isLocked =\n quoteData &&\n // If lockedForEditing is explicitly set, use it\n (quoteData.lockedForEditing === true ||\n // Otherwise, lock based on status\n (quoteData.lockedForEditing === undefined &&\n (quoteData.status === 'SUBMITTED' ||\n quoteData.status === 'PENDING' ||\n quoteData.status === 'ORDERED' ||\n quoteData.status === 'CLOSED')));\n\n return (\n <Slot\n name=\"QuoteName\"\n slot={slots?.QuoteName}\n context={{ quoteName: quoteData?.name, quoteData }}\n >\n <div className=\"quote-management-manage-negotiable-quote__quote-name-wrapper\">\n <h1\n data-testid=\"quote-name\"\n className=\"quote-management-manage-negotiable-quote__quote-name-title\"\n >\n {quoteData?.name}\n </h1>\n <button\n onClick={handleRenameClick}\n disabled={isLocked}\n data-testid=\"rename-quote-button\"\n className=\"quote-management-manage-negotiable-quote__rename-button\"\n aria-label=\"Rename quote\"\n >\n <Edit />\n </button>\n </div>\n </Slot>\n );\n }, [slots?.QuoteName, quoteData, handleRenameClick]);\n\n // Quote status\n const quoteStatus = useMemo(() => {\n return (\n <Slot\n name=\"QuoteStatus\"\n slot={slots?.QuoteStatus}\n context={{ quoteStatus: quoteData?.status, quoteData }}\n >\n <div data-testid=\"quote-status\">{quoteData?.status}</div>\n </Slot>\n );\n }, [slots?.QuoteStatus, quoteData]);\n\n // Banner\n const getBannerStatusMessage = useCallback(\n (status: string | undefined) => {\n switch (status) {\n case 'SUBMITTED':\n return dictionary.statusSubmitted;\n case 'PENDING':\n return dictionary.statusPending;\n case 'EXPIRED':\n return dictionary.statusExpired;\n default:\n return null;\n }\n },\n [dictionary]\n );\n\n const bannerMessage = getBannerStatusMessage(quoteData?.status);\n\n const bannerContent = bannerMessage && (\n <InLineAlert\n type=\"warning\"\n variant=\"secondary\"\n icon={<WarningFilled />}\n heading={dictionary.bannerTitle}\n description={bannerMessage}\n />\n );\n\n const banner = bannerContent && (\n <Slot\n name=\"Banner\"\n data-testid=\"banner\"\n slot={slots?.Banner}\n context={{ quoteData }}\n >\n {bannerContent}\n </Slot>\n );\n\n // Details\n const details = useMemo(() => {\n if (!quoteData) {\n return;\n }\n\n // Some quotes, such as draft quotes, don't have a date formatted expiration date\n const expirationDate = quoteData.expirationDate ? formattedDate(quoteData.expirationDate, 'short') : undefined;\n\n return (\n <Slot name=\"Details\" slot={slots?.Details} context={{ quoteData }}>\n <div className=\"quote-management-manage-negotiable-quote__detail\">\n <span\n className=\"quote-management-manage-negotiable-quote__detail-title\"\n data-testid=\"created-label\"\n >\n {dictionary.createdLabel}\n </span>\n <span\n className=\"quote-management-manage-negotiable-quote__detail-content\"\n data-testid=\"created-value\"\n >\n {formattedDate(quoteData!.createdAt, 'short')} (\n {quoteData!.buyer.firstname} {quoteData!.buyer.lastname})\n </span>\n </div>\n <div className=\"quote-management-manage-negotiable-quote__detail\">\n <span\n className=\"quote-management-manage-negotiable-quote__detail-title\"\n data-testid=\"sales-rep-label\"\n >\n {dictionary.salesRepLabel}\n </span>\n <span\n className=\"quote-management-manage-negotiable-quote__detail-content\"\n data-testid=\"sales-rep-value\"\n >\n {quoteData!.salesRepName}\n </span>\n </div>\n <div className=\"quote-management-manage-negotiable-quote__detail\">\n <span\n className=\"quote-management-manage-negotiable-quote__detail-title\"\n data-testid=\"expires-label\"\n >\n {dictionary.expiresLabel}\n </span>\n <span\n className=\"quote-management-manage-negotiable-quote__detail-content\"\n data-testid=\"expires-value\"\n >\n {expirationDate}\n </span>\n </div>\n </Slot>\n );\n }, [slots?.Details, dictionary, quoteData]);\n\n // Action bar\n const buttons: { label: string; value: string; disabled?: boolean }[] =\n useMemo(() => {\n return [\n {\n label: dictionary.close,\n value: 'close',\n disabled: !quoteData?.canClose,\n },\n {\n label: dictionary.delete,\n value: 'delete',\n disabled: !quoteData?.canDelete,\n },\n {\n label: dictionary.print,\n value: 'print',\n },\n {\n label: dictionary.createTemplate,\n value: 'createTemplate',\n },\n {\n label: dictionary.createCopy,\n value: 'createCopy',\n },\n ];\n }, [dictionary, quoteData?.canDelete, quoteData?.canClose]);\n const actionBar = useMemo(() => {\n const handleActionsButtonClick = (action: string) => {\n switch (action) {\n case 'close':\n setShowCloseModal(true);\n setModalErrorMessage(''); // Clear modal errors\n setModalSuccessMessage(''); // Clear modal success messages\n onActionsButtonClick?.(action);\n break;\n case 'delete':\n setIsDeleteDialogOpen(true);\n onActionsButtonClick?.(action);\n break;\n case 'print':\n onActionsButtonClick?.(action);\n break;\n case 'createTemplate':\n setShowCreateTemplateModal(true);\n setCreateTemplateErrorMessage(''); // Clear modal errors\n setCreateTemplateSuccessMessage(''); // Clear modal success messages\n onActionsButtonClick?.(action);\n break;\n case 'createCopy':\n handleDuplicateQuote();\n onActionsButtonClick?.(action);\n break;\n }\n };\n return (\n <Slot\n name=\"ActionBar\"\n slot={slots?.ActionBar}\n context={{ quoteData, actionsBarDropdownValue }}\n >\n <ActionsBar\n dropdownPlaceholder={dictionary.actionsLabel}\n dropdownOptions={[\n {\n label: dictionary.remove,\n value: 'remove',\n },\n ]}\n dropdownValue={actionsBarDropdownValue}\n handleDropdownChange={handleActionsDropdownChange}\n buttons={buttons.map((button) => (\n <Button\n key={button.value}\n variant=\"tertiary\"\n onClick={() => handleActionsButtonClick(button.value)}\n data-testid={`actions-bar-${button.value}-button`}\n data-action={button.value}\n disabled={button.disabled}\n >\n {button.label}\n </Button>\n ))}\n />\n </Slot>\n );\n }, [\n buttons,\n dictionary,\n slots?.ActionBar,\n quoteData,\n handleActionsDropdownChange,\n onActionsButtonClick,\n handleDuplicateQuote,\n actionsBarDropdownValue,\n ]);\n\n // Quote content\n const quoteContent = useMemo(() => {\n return (\n <Slot\n name=\"QuoteContent\"\n slot={slots?.QuoteContent}\n context={{ quoteData }}\n >\n <TabbedContent\n tabs={\n new Map([\n ['items-quoted', 'Items Quoted'],\n ['comments', 'Comments'],\n ['history-log', 'History Log'],\n ])\n }\n tabsContent={\n new Map([\n [\n 'items-quoted',\n <Slot\n key=\"items-quoted\"\n name=\"ItemsQuotedTab\"\n slot={slots?.ItemsQuotedTab}\n context={{ quoteData }}\n >\n <ItemsQuoted\n quoteData={quoteData}\n onItemCheckboxChange={handleItemCheckboxChange}\n onRemoveItemsRef={(handler) => {\n removeItemsHandlerRef.current = handler;\n }}\n onRemoveModalStateChange={\n /* istanbul ignore next */ (isOpen) => {\n if (\n !isOpen &&\n actionsBarDropdownValueRef.current === 'remove'\n ) {\n setActionsBarDropdownValue('');\n }\n }\n }\n />\n </Slot>,\n ],\n [\n 'comments',\n <Slot\n key=\"comments\"\n name=\"CommentsTab\"\n slot={slots?.CommentsTab}\n context={{ quoteData }}\n >\n <QuoteCommentsList quoteData={quoteData} />\n </Slot>,\n ],\n [\n 'history-log',\n <Slot\n key=\"history-log\"\n name=\"HistoryLogTab\"\n slot={slots?.HistoryLogTab}\n context={{ quoteData }}\n >\n <QuoteHistoryLog quoteData={quoteData} />\n </Slot>,\n ],\n ])\n }\n />\n </Slot>\n );\n }, [\n slots?.QuoteContent,\n slots?.HistoryLogTab,\n slots?.CommentsTab,\n slots?.ItemsQuotedTab,\n quoteData,\n handleItemCheckboxChange,\n ]);\n\n // Shipping information title\n const shippingInformationTitle = useMemo(() => {\n return (\n <Slot\n name=\"ShippingInformationTitle\"\n slot={slots?.ShippingInformationTitle}\n context={{ quoteData }}\n >\n <h2>{dictionary.shippingInformationTitle}</h2>\n </Slot>\n );\n }, [slots?.ShippingInformationTitle, quoteData, dictionary]);\n\n // Shipping information\n const shippingInformation = useMemo(() => {\n return (\n <Slot\n name=\"ShippingInformation\"\n slot={slots?.ShippingInformation}\n context={{ quoteData, loading, setLoading }}\n >\n <ShippingAddressDisplay\n quoteData={quoteData}\n loading={loading}\n data-testid=\"manage-quote-shipping-address\"\n />\n </Slot>\n );\n }, [slots?.ShippingInformation, quoteData, loading, setLoading]);\n\n // Quote comments title\n const quoteCommentsTitle = useMemo(() => {\n return (\n <Slot\n name=\"QuoteCommentsTitle\"\n slot={slots?.QuoteCommentsTitle}\n context={{ quoteData }}\n >\n <h2>{dictionary.quoteCommentsTitle}</h2>\n </Slot>\n );\n }, [slots?.QuoteCommentsTitle, dictionary, quoteData]);\n\n // Quote comments\n const quoteComments = useMemo(() => {\n return (\n <Slot\n name=\"QuoteComments\"\n slot={slots?.QuoteComments}\n context={{ quoteData }}\n >\n <TextArea\n name=\"quoteComments\"\n placeholder={dictionary.quoteCommentsPlaceholder}\n rows={3}\n value={comment}\n onInput={(e) => {\n setComment((e.target as HTMLTextAreaElement).value);\n }}\n disabled={!quoteData?.canSendForReview || isSubmitting}\n />\n </Slot>\n );\n }, [slots?.QuoteComments, dictionary, quoteData, comment, isSubmitting]);\n\n // Close quote handler - only called when quoteData exists\n const handleCloseQuote = useCallback(async () => {\n if (!quoteData?.uid) {\n return;\n }\n setIsClosing(true);\n setModalErrorMessage('');\n setModalSuccessMessage('');\n try {\n await closeNegotiableQuote({\n quoteUids: [quoteData!.uid],\n });\n } catch (error) {\n console.error('Failed to close quote:', error);\n }\n }, [quoteData]);\n\n const handleCloseModalCancel = useCallback(() => {\n setShowCloseModal(false);\n setModalErrorMessage('');\n setModalSuccessMessage('');\n }, []);\n\n // Create template handler\n const handleCreateTemplate = useCallback(async () => {\n if (!quoteData?.uid) {\n return;\n }\n setIsCreatingTemplate(true);\n setCreateTemplateErrorMessage('');\n setCreateTemplateSuccessMessage('');\n try {\n await createQuoteTemplate(quoteData.uid);\n // Show success message\n setCreateTemplateSuccessMessage(dictionary.createTemplateSuccessMessage);\n } catch (error) {\n console.error('Failed to create quote template:', error);\n const errorMessage =\n error instanceof Error ? error.message : dictionary.createTemplateErrorFallback;\n setCreateTemplateErrorMessage(errorMessage);\n } finally {\n setIsCreatingTemplate(false);\n }\n }, [quoteData, dictionary.createTemplateSuccessMessage, dictionary.createTemplateErrorFallback]);\n\n const handleCreateTemplateModalCancel = useCallback(() => {\n setShowCreateTemplateModal(false);\n setCreateTemplateErrorMessage('');\n setCreateTemplateSuccessMessage('');\n }, []);\n\n // Footer\n const handleSendForReview = useCallback(async () => {\n // If override prop is provided, use it instead of the API\n if (onSendForReview) {\n onSendForReview({\n quoteData: quoteData!,\n comment: comment.trim() || undefined,\n });\n return;\n }\n\n // Otherwise, use the sendForReview API\n setIsSubmitting(true);\n try {\n await sendForReview({\n quoteUid: quoteData!.uid,\n comment: comment.trim() || undefined,\n });\n // The quote-sent-for-review event will handle updating state\n } catch (error) {\n console.error('Failed to send quote for review:', error);\n setIsSubmitting(false);\n // TODO: Show error notification to user\n }\n }, [quoteData, onSendForReview, comment]);\n\n const footer = useMemo(() => {\n return (\n <Slot\n name=\"Footer\"\n slot={slots?.Footer}\n context={{ quoteData, comment, isSubmitting }}\n >\n <Button\n variant=\"primary\"\n onClick={handleSendForReview}\n data-testid=\"send-for-review-button\"\n disabled={!quoteData?.canSendForReview || isSubmitting}\n >\n {dictionary.sendForReview}\n </Button>\n </Slot>\n );\n }, [\n slots?.Footer,\n dictionary,\n quoteData,\n comment,\n isSubmitting,\n handleSendForReview,\n ]);\n\n // Rename modal error banner\n const renameErrorBanner = useMemo(\n () =>\n renameError ? (\n <InLineAlert\n type=\"error\"\n variant=\"primary\"\n icon={<WarningFilled color=\"var(--color-error)\" />}\n heading={dictionary.renameErrorHeading}\n description={renameError}\n />\n ) : undefined,\n [renameError, dictionary.renameErrorHeading]\n );\n\n // Rename modal success banner\n const renameSuccessBanner = useMemo(\n () =>\n renameSuccess ? (\n <InLineAlert\n type=\"success\"\n variant=\"primary\"\n icon={<CheckWithCircle />}\n heading={dictionary.renameSuccessHeading}\n description={renameSuccess}\n />\n ) : undefined,\n [renameSuccess, dictionary.renameSuccessHeading]\n );\n\n // Delete quote functionality\n const getDeleteErrorMessage = useCallback(\n (error: any): string => {\n // If it's an operation failure with errors array, get the first error message\n if (\n error.errors &&\n Array.isArray(error.errors) &&\n error.errors.length > 0\n ) {\n return (\n error.errors[0].message ||\n dictionary.confirmationModalDeleteErrorFallback\n );\n }\n // Otherwise use the error message or fallback\n return error?.message || dictionary.confirmationModalDeleteErrorFallback;\n },\n [dictionary.confirmationModalDeleteErrorFallback]\n );\n\n const handleDeleteCancel = useCallback(() => {\n setIsDeleteDialogOpen(false);\n setDeleteError(null);\n setDeleteSuccess(false);\n }, []);\n\n const handleDeleteConfirm = useCallback(async () => {\n if (!quoteData?.uid) {\n return;\n }\n\n setDeleteError(null);\n setDeleteSuccess(false);\n\n try {\n const { operationResults } = await deleteQuote(quoteData.uid);\n\n const failure = operationResults.find(\n (res: any) => res.__typename === 'DeleteNegotiableQuoteOperationFailure'\n ) as any;\n if (failure) {\n const errorMessage = getDeleteErrorMessage(failure);\n setDeleteError(errorMessage);\n return;\n }\n\n setDeleteSuccess(true);\n } catch (error: any) {\n const errorMessage = getDeleteErrorMessage(error);\n setDeleteError(errorMessage);\n }\n }, [quoteData, getDeleteErrorMessage]);\n\n const handleDismissError = useCallback(() => {\n setDeleteError(null);\n }, []);\n\n const handleDismissSuccess = useCallback(() => {\n setDeleteSuccess(false);\n }, []);\n\n // Duplicate quote functionality\n const getDuplicateErrorMessage = useCallback((error: any): string => {\n return error?.message || dictionary.confirmationModalDuplicateErrorFallback;\n }, [dictionary.confirmationModalDuplicateErrorFallback]);\n\n const handleDuplicateCancel = useCallback(() => {\n setIsDuplicateDialogOpen(false);\n setDuplicateError(null);\n setDuplicateSuccess(false);\n }, []);\n\n const handleDuplicateConfirm = useCallback(async () => {\n if (!quoteData?.uid) {\n return;\n }\n\n setDuplicateError(null);\n setDuplicateSuccess(false);\n\n try {\n // Generate a unique duplicated quote UID by replacing the last 8 characters\n const generateUniqueUid = (originalUid: string): string => {\n const baseUid = originalUid.slice(0, -8); // Remove last 8 characters\n const randomSuffix = crypto.randomUUID().slice(0, 8);\n return baseUid + randomSuffix;\n };\n \n const duplicatedQuoteUid = generateUniqueUid(quoteData.uid);\n await duplicateQuote({ quoteUid: quoteData.uid, duplicatedQuoteUid });\n // Success handling is done in the event listener\n } catch (error: any) {\n const errorMessage = getDuplicateErrorMessage(error);\n setDuplicateError(errorMessage);\n }\n }, [quoteData, getDuplicateErrorMessage]);\n\n const handleDismissDuplicateError = useCallback(() => {\n setDuplicateError(null);\n }, []);\n\n const handleDismissDuplicateSuccess = useCallback(() => {\n setDuplicateSuccess(false);\n }, []);\n\n const deleteErrorBanner = deleteError ? (\n <InLineAlert\n type=\"error\"\n variant=\"primary\"\n icon={<WarningFilled />}\n heading={dictionary.confirmationModalDeleteErrorHeading}\n description={deleteError}\n onDismiss={handleDismissError}\n data-testid=\"confirmation-modal-error-banner\"\n />\n ) : null;\n\n const deleteSuccessBanner = deleteSuccess ? (\n <InLineAlert\n type=\"success\"\n variant=\"primary\"\n icon={<CheckWithCircle />}\n heading={dictionary.confirmationModalDeleteSuccessHeading}\n description={dictionary.confirmationModalDeleteSuccessDescription}\n onDismiss={handleDismissSuccess}\n data-testid=\"confirmation-modal-success-banner\"\n />\n ) : null;\n\n const deleteBanner = deleteSuccessBanner || deleteErrorBanner;\n\n const duplicateErrorBanner = duplicateError ? (\n <InLineAlert\n type=\"error\"\n variant=\"primary\"\n icon={<WarningFilled />}\n heading={dictionary.confirmationModalDuplicateErrorHeading}\n description={duplicateError}\n onDismiss={handleDismissDuplicateError}\n data-testid=\"confirmation-modal-duplicate-error-banner\"\n />\n ) : null;\n\n const duplicateSuccessBanner = duplicateSuccess ? (\n <InLineAlert\n type=\"success\"\n variant=\"primary\"\n icon={<CheckWithCircle />}\n heading={dictionary.confirmationModalDuplicateSuccessHeading}\n description={dictionary.confirmationModalDuplicateSuccessDescription}\n onDismiss={handleDismissDuplicateSuccess}\n data-testid=\"confirmation-modal-duplicate-success-banner\"\n />\n ) : null;\n\n const duplicateBanner = duplicateSuccessBanner || duplicateErrorBanner;\n\n const manageNegotiableQuoteProps: ManageNegotiableQuoteComponentProps = {\n ...props,\n loading,\n quoteName,\n quoteStatus,\n banner: banner || undefined,\n details,\n actionBar,\n quoteContent,\n shippingInformationTitle,\n shippingInformation,\n quoteCommentsTitle,\n quoteComments,\n footer,\n };\n\n // Create banner for close modal based on success/error state\n let closeModalBanner = null;\n if (modalSuccessMessage) {\n closeModalBanner = (\n <InLineAlert\n type=\"success\"\n variant=\"primary\"\n icon={<CheckWithCircle />}\n heading={dictionary.closeModalSuccessHeading}\n description={modalSuccessMessage}\n data-testid=\"close-quote-success-banner\"\n />\n );\n } else if (modalErrorMessage) {\n closeModalBanner = (\n <InLineAlert\n type=\"error\"\n variant=\"primary\"\n icon={<WarningFilled />}\n heading={dictionary.confirmationModalDeleteErrorHeading}\n description={modalErrorMessage}\n data-testid=\"close-quote-error-banner\"\n />\n );\n }\n\n // Create banner for create template modal based on success/error state\n let createTemplateModalBanner = null;\n if (createTemplateSuccessMessage) {\n createTemplateModalBanner = (\n <InLineAlert\n type=\"success\"\n variant=\"primary\"\n icon={<CheckWithCircle />}\n heading={dictionary.createTemplateModalSuccessHeading}\n description={createTemplateSuccessMessage}\n data-testid=\"create-template-success-banner\"\n />\n );\n } else if (createTemplateErrorMessage) {\n createTemplateModalBanner = (\n <InLineAlert\n type=\"error\"\n variant=\"primary\"\n icon={<WarningFilled />}\n heading={dictionary.createTemplateModalErrorHeading}\n description={createTemplateErrorMessage}\n data-testid=\"create-template-error-banner\"\n />\n );\n }\n\n return (\n <>\n <ManageNegotiableQuoteComponent {...manageNegotiableQuoteProps} />\n {isRenameModalOpen &&\n createPortal(\n <RenameQuoteModal\n open={isRenameModalOpen}\n quoteName={renameQuoteName}\n renameReason={renameReason}\n quoteNameError={renameQuoteNameError}\n errorBanner={renameErrorBanner}\n successBanner={renameSuccessBanner}\n onQuoteNameChange={handleRenameQuoteNameChange}\n onRenameReasonChange={setRenameReason}\n onSave={handleRenameSave}\n onClose={handleRenameClose}\n />,\n document.body\n )}\n {isDeleteDialogOpen &&\n createPortal(\n <ConfirmationModal\n open={isDeleteDialogOpen}\n title={dictionary.confirmationModalDeleteTitle}\n message={dictionary.confirmationModalDeleteMessage}\n cancelLabel={dictionary.confirmationModalCancel}\n confirmLabel={dictionary.confirmationModalDeleteConfirm}\n onCancel={handleDeleteCancel}\n onConfirm={handleDeleteConfirm}\n showCloseButton={!deleteBanner}\n confirmationBanner={deleteBanner}\n />,\n document.body\n )}\n {isDuplicateDialogOpen &&\n createPortal(\n <ConfirmationModal\n open={isDuplicateDialogOpen}\n title={dictionary.confirmationModalDuplicateTitle}\n message={dictionary.confirmationModalDuplicateMessage}\n cancelLabel={dictionary.confirmationModalCancel}\n confirmLabel={dictionary.confirmationModalDuplicateConfirm}\n onCancel={handleDuplicateCancel}\n onConfirm={handleDuplicateConfirm}\n showCloseButton={!duplicateBanner}\n confirmationBanner={duplicateBanner}\n />,\n document.body\n )}\n {showCloseModal &&\n createPortal(\n <ConfirmationModal\n open={showCloseModal}\n title={dictionary.closeModalTitle}\n message={dictionary.closeModalMessage}\n cancelLabel={dictionary.closeModalCancel}\n confirmLabel={\n isClosing\n ? dictionary.closeModalConfirmLoading\n : dictionary.closeModalConfirm\n }\n onCancel={handleCloseModalCancel}\n onConfirm={isClosing ? undefined : handleCloseQuote}\n showCloseButton={true}\n confirmationBanner={closeModalBanner}\n data-testid=\"close-quote-confirmation-modal\"\n />,\n document.body\n )}\n {showCreateTemplateModal &&\n createPortal(\n <ConfirmationModal\n open={showCreateTemplateModal}\n title={dictionary.createTemplateModalTitle}\n message={dictionary.createTemplateModalMessage}\n cancelLabel={dictionary.createTemplateModalCancel}\n confirmLabel={\n isCreatingTemplate\n ? dictionary.createTemplateModalConfirmLoading\n : dictionary.createTemplateModalConfirm\n }\n onCancel={handleCreateTemplateModalCancel}\n onConfirm={isCreatingTemplate ? undefined : handleCreateTemplate}\n showCloseButton={true}\n confirmationBanner={createTemplateModalBanner}\n data-testid=\"create-template-confirmation-modal\"\n />,\n document.body\n )}\n {isNoItemsSelectedModalOpen &&\n createPortal(\n <ConfirmationModal\n open={isNoItemsSelectedModalOpen}\n title={dictionary.noItemsSelectedModalTitle}\n message={dictionary.noItemsSelectedModalMessage}\n confirmLabel={dictionary.noItemsSelectedModalConfirm}\n onConfirm={handleCloseNoItemsSelectedModal}\n onClose={handleCloseNoItemsSelectedModal}\n showCloseButton={true}\n data-testid=\"no-items-selected-modal\"\n />,\n document.body\n )}\n </>\n );\n};\n"],"names":["SvgEdit","props","React","ManageNegotiableQuote","className","loading","quoteName","quoteStatus","banner","details","actionBar","quoteContent","shippingInformationTitle","shippingInformation","quoteCommentsTitle","quoteComments","footer","ManageNegotiableQuoteSkeleton","jsxs","classes","jsx","VComponent","Skeleton","SkeletonRow","RenameQuoteModal","open","renameReason","quoteNameError","errorBanner","successBanner","showCloseButton","onQuoteNameChange","onRenameReasonChange","onSave","onClose","dictionary","useText","Modal","Fragment","Input","e","TextArea","Button","onActionsDropdownChange","slots","onActionsButtonClick","onSendForReview","onDuplicateQuote","quoteData","setQuoteData","useState","setLoading","isDeleteDialogOpen","setIsDeleteDialogOpen","deleteError","setDeleteError","deleteSuccess","setDeleteSuccess","isDuplicateDialogOpen","setIsDuplicateDialogOpen","duplicateError","setDuplicateError","duplicateSuccess","setDuplicateSuccess","comment","setComment","isSubmitting","setIsSubmitting","showCloseModal","setShowCloseModal","isClosing","setIsClosing","modalSuccessMessage","setModalSuccessMessage","modalErrorMessage","setModalErrorMessage","showCreateTemplateModal","setShowCreateTemplateModal","isCreatingTemplate","setIsCreatingTemplate","createTemplateSuccessMessage","setCreateTemplateSuccessMessage","createTemplateErrorMessage","setCreateTemplateErrorMessage","isRenameModalOpen","setIsRenameModalOpen","renameQuoteName","setRenameQuoteName","setRenameReason","renameError","setRenameError","renameQuoteNameError","setRenameQuoteNameError","renameSuccess","setRenameSuccess","selectedItemUids","setSelectedItemUids","selectedItemUidsRef","useRef","removeItemsHandlerRef","actionsBarDropdownValue","setActionsBarDropdownValue","actionsBarDropdownValueRef","isNoItemsSelectedModalOpen","setIsNoItemsSelectedModalOpen","useEffect","quoteDataEvent","events","data","quote","shippingAddressSetEvent","quoteSentForReviewEvent","quoteItemsRemovedEvent","removedItemUids","prev","next","uid","handleItemCheckboxChange","useCallback","item","isSelected","handleActionsDropdownChange","event","action","currentSelectedUids","itemsToRemove","handleCloseNoItemsSelectedModal","quoteClosedEvent","currentQuoteData","_a","getQuoteData","updatedQuoteData","error","quoteCloseErrorEvent","errorMsg","quoteRenamedEvent","quoteDuplicatedEvent","newQuote","handleRenameClick","handleRenameClose","handleRenameQuoteNameChange","value","handleDuplicateQuote","handleRenameSave","renameNegotiableQuote","useMemo","isLocked","Slot","Edit","bannerMessage","status","bannerContent","InLineAlert","WarningFilled","expirationDate","formattedDate","buttons","handleActionsButtonClick","ActionsBar","button","TabbedContent","ItemsQuoted","handler","isOpen","QuoteCommentsList","QuoteHistoryLog","ShippingAddressDisplay","handleCloseQuote","closeNegotiableQuote","handleCloseModalCancel","handleCreateTemplate","createQuoteTemplate","errorMessage","handleCreateTemplateModalCancel","handleSendForReview","sendForReview","renameErrorBanner","renameSuccessBanner","CheckWithCircle","getDeleteErrorMessage","handleDeleteCancel","handleDeleteConfirm","operationResults","deleteQuote","failure","res","handleDismissError","handleDismissSuccess","getDuplicateErrorMessage","handleDuplicateCancel","handleDuplicateConfirm","duplicatedQuoteUid","originalUid","baseUid","randomSuffix","duplicateQuote","handleDismissDuplicateError","handleDismissDuplicateSuccess","deleteErrorBanner","deleteBanner","duplicateErrorBanner","duplicateBanner","manageNegotiableQuoteProps","closeModalBanner","createTemplateModalBanner","ManageNegotiableQuoteComponent","createPortal","ConfirmationModal"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -3,6 +3,11 @@ import { Container, SlotProps } from '@dropins/tools/types/elsie/src/lib';
|
|
|
3
3
|
import { NegotiableQuoteTemplateModel } from '../../data/models/negotiable-quote-template-model';
|
|
4
4
|
|
|
5
5
|
export interface ManageNegotiableQuoteTemplateProps extends HTMLAttributes<HTMLDivElement> {
|
|
6
|
+
onActionsButtonClick?: (action: string) => void;
|
|
7
|
+
onSendForReview?: (params: {
|
|
8
|
+
templateData?: NegotiableQuoteTemplateModel;
|
|
9
|
+
comment?: string;
|
|
10
|
+
}) => void;
|
|
6
11
|
slots?: {
|
|
7
12
|
TemplateName?: SlotProps<{
|
|
8
13
|
templateName?: string;
|
|
@@ -18,6 +23,9 @@ export interface ManageNegotiableQuoteTemplateProps extends HTMLAttributes<HTMLD
|
|
|
18
23
|
Details?: SlotProps<{
|
|
19
24
|
templateData?: NegotiableQuoteTemplateModel;
|
|
20
25
|
}>;
|
|
26
|
+
ActionBar?: SlotProps<{
|
|
27
|
+
templateData?: NegotiableQuoteTemplateModel;
|
|
28
|
+
}>;
|
|
21
29
|
ReferenceDocumentsTitle?: SlotProps<{
|
|
22
30
|
templateData?: NegotiableQuoteTemplateModel;
|
|
23
31
|
}>;
|
|
@@ -48,6 +56,11 @@ export interface ManageNegotiableQuoteTemplateProps extends HTMLAttributes<HTMLD
|
|
|
48
56
|
HistoryLog?: SlotProps<{
|
|
49
57
|
templateData?: NegotiableQuoteTemplateModel;
|
|
50
58
|
}>;
|
|
59
|
+
Footer?: SlotProps<{
|
|
60
|
+
templateData?: NegotiableQuoteTemplateModel;
|
|
61
|
+
comment?: string;
|
|
62
|
+
isSubmitting?: boolean;
|
|
63
|
+
}>;
|
|
51
64
|
};
|
|
52
65
|
}
|
|
53
66
|
export declare const ManageNegotiableQuoteTemplate: Container<ManageNegotiableQuoteTemplateProps>;
|