@dropins/storefront-quote-management 0.0.1-alpha26 → 0.0.1-alpha28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. package/api/graphql/NegotiableQuoteTemplateFragment.d.ts +1 -1
  2. package/api/initialize/initialize.d.ts +1 -0
  3. package/api.js +22 -226
  4. package/api.js.map +1 -1
  5. package/chunks/ItemsQuoted.js +1 -1
  6. package/chunks/ItemsQuoted.js.map +1 -1
  7. package/chunks/ItemsQuotedTemplate.js +4 -0
  8. package/chunks/ItemsQuotedTemplate.js.map +1 -0
  9. package/chunks/NegotiableQuoteTemplateFragment.js +190 -0
  10. package/chunks/NegotiableQuoteTemplateFragment.js.map +1 -0
  11. package/chunks/OrderSummaryLine.js +1 -1
  12. package/chunks/OrderSummaryLine.js.map +1 -1
  13. package/chunks/QuoteCommentsList.js +1 -1
  14. package/chunks/QuoteCommentsList.js.map +1 -1
  15. package/chunks/QuoteCommentsList3.js +4 -0
  16. package/chunks/QuoteCommentsList3.js.map +1 -0
  17. package/chunks/QuoteHistoryLog.js +1 -1
  18. package/chunks/QuoteHistoryLog.js.map +1 -1
  19. package/chunks/QuoteHistoryLog3.js +4 -0
  20. package/chunks/QuoteHistoryLog3.js.map +1 -0
  21. package/chunks/QuotePricesSummary.js +4 -0
  22. package/chunks/QuotePricesSummary.js.map +1 -0
  23. package/chunks/QuoteTemplateCommentsList.js +4 -0
  24. package/chunks/QuoteTemplateCommentsList.js.map +1 -0
  25. package/chunks/QuoteTemplateHistoryLog.js +4 -0
  26. package/chunks/QuoteTemplateHistoryLog.js.map +1 -0
  27. package/chunks/TabbedContent.js +4 -0
  28. package/chunks/TabbedContent.js.map +1 -0
  29. package/chunks/dateUtils.js +1 -1
  30. package/chunks/dateUtils.js.map +1 -1
  31. package/chunks/getQuoteTemplates.js +2 -2
  32. package/chunks/getQuoteTemplates.js.map +1 -1
  33. package/chunks/negotiableQuotes.js +1 -1
  34. package/chunks/negotiableQuotes.js.map +1 -1
  35. package/chunks/removeNegotiableQuoteItems.js +3 -3
  36. package/chunks/removeNegotiableQuoteItems.js.map +1 -1
  37. package/chunks/renameNegotiableQuote.js +17 -9
  38. package/chunks/renameNegotiableQuote.js.map +1 -1
  39. package/chunks/sendQuoteTemplateForReview.js +15 -0
  40. package/chunks/sendQuoteTemplateForReview.js.map +1 -0
  41. package/chunks/state.js +1 -1
  42. package/chunks/state.js.map +1 -1
  43. package/chunks/transform-quote-template.js +4 -0
  44. package/chunks/transform-quote-template.js.map +1 -0
  45. package/chunks/transform-quote.js +4 -0
  46. package/chunks/transform-quote.js.map +1 -0
  47. package/chunks/uploadFile.js +1 -1
  48. package/chunks/uploadFile.js.map +1 -1
  49. package/components/ManageNegotiableQuote/ManageNegotiableQuote.d.ts +1 -1
  50. package/components/ManageNegotiableQuoteTemplate/ManageNegotiableQuoteTemplate.d.ts +22 -0
  51. package/components/ManageNegotiableQuoteTemplate/__fixtures__/ManageNegotiableQuoteTemplateProps.d.ts +4 -0
  52. package/components/ManageNegotiableQuoteTemplate/index.d.ts +11 -0
  53. package/components/ProductListTable/ProductListTable.d.ts +41 -5
  54. package/components/QuoteHistoryLog/QuoteHistoryLog.d.ts +70 -2
  55. package/components/index.d.ts +1 -0
  56. package/containers/ItemsQuoted.js +1 -1
  57. package/containers/ItemsQuotedTemplate/ItemsQuotedTemplate.d.ts +19 -0
  58. package/containers/ItemsQuotedTemplate/index.d.ts +11 -0
  59. package/containers/ItemsQuotedTemplate.d.ts +3 -0
  60. package/containers/ItemsQuotedTemplate.js +4 -0
  61. package/containers/ItemsQuotedTemplate.js.map +1 -0
  62. package/containers/ManageNegotiableQuote.js +1 -1
  63. package/containers/ManageNegotiableQuote.js.map +1 -1
  64. package/containers/ManageNegotiableQuoteTemplate/ManageNegotiableQuoteTemplate.d.ts +63 -0
  65. package/containers/ManageNegotiableQuoteTemplate/index.d.ts +11 -0
  66. package/containers/ManageNegotiableQuoteTemplate.d.ts +3 -0
  67. package/containers/ManageNegotiableQuoteTemplate.js +4 -0
  68. package/containers/ManageNegotiableQuoteTemplate.js.map +1 -0
  69. package/containers/OrderSummary.js +1 -1
  70. package/containers/OrderSummary.js.map +1 -1
  71. package/containers/OrderSummaryLine.js +1 -1
  72. package/containers/QuoteCommentsList.js +1 -1
  73. package/containers/QuoteHistoryLog.js +1 -1
  74. package/containers/QuoteSummaryList.js +1 -1
  75. package/containers/QuoteSummaryList.js.map +1 -1
  76. package/containers/QuoteTemplateCommentsList/QuoteTemplateCommentsList.d.ts +9 -0
  77. package/containers/QuoteTemplateCommentsList/index.d.ts +11 -0
  78. package/containers/QuoteTemplateCommentsList.d.ts +3 -0
  79. package/containers/QuoteTemplateCommentsList.js +4 -0
  80. package/containers/QuoteTemplateCommentsList.js.map +1 -0
  81. package/containers/QuoteTemplateHistoryLog/QuoteTemplateHistoryLog.d.ts +9 -0
  82. package/containers/QuoteTemplateHistoryLog/index.d.ts +11 -0
  83. package/containers/QuoteTemplateHistoryLog.d.ts +3 -0
  84. package/containers/QuoteTemplateHistoryLog.js +4 -0
  85. package/containers/QuoteTemplateHistoryLog.js.map +1 -0
  86. package/containers/QuoteTemplatesListTable/QuoteTemplatesListTable.d.ts +2 -0
  87. package/containers/QuoteTemplatesListTable.js +1 -1
  88. package/containers/QuoteTemplatesListTable.js.map +1 -1
  89. package/containers/QuotesListTable.js +1 -1
  90. package/containers/QuotesListTable.js.map +1 -1
  91. package/containers/RequestNegotiableQuoteForm.js +1 -1
  92. package/containers/RequestNegotiableQuoteForm.js.map +1 -1
  93. package/containers/index.d.ts +4 -0
  94. package/data/models/__fixtures__/negotiableQuoteTemplateModel.d.ts +4 -0
  95. package/data/models/negotiable-quote-template-model.d.ts +3 -2
  96. package/data/transforms/__fixtures__/negotiableQuoteTemplateData.d.ts +6 -0
  97. package/i18n/en_US.json.d.ts +48 -4
  98. package/package.json +1 -1
  99. package/render.js +2 -3
  100. package/render.js.map +1 -1
  101. package/types/state.types.d.ts +2 -0
  102. package/utils/dateUtils.d.ts +7 -2
  103. package/chunks/fetch-graphql.js +0 -4
  104. package/chunks/fetch-graphql.js.map +0 -1
@@ -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/TabbedContent/TabbedContent.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, useMemo, useState } from 'preact/compat';\nimport { classes, VComponent } from '@adobe-commerce/elsie/lib';\nimport '@/quote-management/components/TabbedContent/TabbedContent.css';\n\nexport interface TabbedContentProps extends HTMLAttributes<HTMLDivElement> {\n tabs: Map<string, string>;\n tabsContent: Map<string, VNode>;\n defaultActiveTab?: string;\n}\n\nexport const TabbedContent: FunctionComponent<TabbedContentProps> = ({\n className,\n tabs,\n tabsContent,\n defaultActiveTab,\n ...props\n}) => {\n const [activeTabId, setActiveTabId] = useState<string>(\n defaultActiveTab || Array.from(tabs.keys())[0]\n );\n\n const handleTabClick = (tabId: string) => {\n setActiveTabId(tabId);\n };\n\n const activeTabContent = useMemo(() => {\n return tabsContent.get(activeTabId);\n }, [activeTabId, tabsContent]);\n\n return (\n <div {...props} className={classes(['quote-management-tabbed-content', className])}>\n {tabs &&\n <div data-testid=\"tabbed-content-tabs\" className={classes(['quote-management-tabbed-content__tabs'])}>\n {Array.from(tabs.entries()).map(([tabId, tabLabel]) => (\n <button\n className={\n classes([\n 'quote-management-tabbed-content__tab',\n ['quote-management-tabbed-content__tab--active', tabId === activeTabId]\n ])}\n key={tabId}\n onClick={() => handleTabClick(tabId)}\n >\n {tabLabel}\n </button>\n ))}\n </div>\n }\n {\n activeTabContent &&\n <div className={classes(['quote-management-tabbed-content__active-tab-content'])}>\n <VComponent\n node={activeTabContent as VNode}\n />\n </div>\n }\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 } 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 getGlobalLocale,\n Slot,\n SlotProps,\n} from '@adobe-commerce/elsie/lib';\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 const calculatedLocale = getGlobalLocale() || 'en-US';\n\n const dateFormatter = new Intl.DateTimeFormat(calculatedLocale, {\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n });\n\n // Some quotes, such as draft quotes, don't have a date formatted expiration date\n let expirationDate;\n try {\n expirationDate = dateFormatter.format(\n new Date(quoteData!.expirationDate)\n );\n } catch (error) {\n expirationDate = quoteData!.expirationDate;\n }\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 {dateFormatter.format(new Date(quoteData!.createdAt))} (\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: details!, // Details will always be defined at this point\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","TabbedContent","tabs","tabsContent","defaultActiveTab","activeTabId","setActiveTabId","useState","handleTabClick","tabId","activeTabContent","useMemo","tabLabel","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","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","isLocked","Slot","Edit","bannerMessage","status","bannerContent","InLineAlert","WarningFilled","calculatedLocale","getGlobalLocale","dateFormatter","expirationDate","handleActionsButtonClick","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/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 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 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 [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:\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;\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 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={!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 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 // 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 {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","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","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","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","handleCreateTemplate","createQuoteTemplate","errorMessage","handleCreateTemplateModalCancel","handleSendForReview","sendForReview","renameErrorBanner","renameSuccessBanner","CheckWithCircle","getDeleteErrorMessage","handleDeleteCancel","handleDeleteConfirm","operationResults","deleteQuote","failure","res","handleDismissError","handleDismissSuccess","deleteErrorBanner","deleteBanner","manageNegotiableQuoteProps","closeModalBanner","createTemplateModalBanner","ManageNegotiableQuoteComponent","createPortal","ConfirmationModal"],"mappings":"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","x_google_ignoreList":[0]}
@@ -0,0 +1,63 @@
1
+ import { HTMLAttributes } from 'preact/compat';
2
+ import { Container, SlotProps } from '@dropins/tools/types/elsie/src/lib';
3
+ import { NegotiableQuoteTemplateModel } from '../../data/models/negotiable-quote-template-model';
4
+
5
+ export interface ManageNegotiableQuoteTemplateProps extends HTMLAttributes<HTMLDivElement> {
6
+ onSendForReview?: (params: {
7
+ templateData?: NegotiableQuoteTemplateModel;
8
+ comment?: string;
9
+ }) => void;
10
+ slots?: {
11
+ TemplateName?: SlotProps<{
12
+ templateName?: string;
13
+ templateData?: NegotiableQuoteTemplateModel;
14
+ }>;
15
+ TemplateId?: SlotProps<{
16
+ templateId?: string;
17
+ templateData?: NegotiableQuoteTemplateModel;
18
+ }>;
19
+ Banner?: SlotProps<{
20
+ templateData?: NegotiableQuoteTemplateModel;
21
+ }>;
22
+ Details?: SlotProps<{
23
+ templateData?: NegotiableQuoteTemplateModel;
24
+ }>;
25
+ ReferenceDocumentsTitle?: SlotProps<{
26
+ templateData?: NegotiableQuoteTemplateModel;
27
+ }>;
28
+ ReferenceDocuments?: SlotProps<{
29
+ templateData?: NegotiableQuoteTemplateModel;
30
+ }>;
31
+ ItemsTable?: SlotProps<{
32
+ templateData?: NegotiableQuoteTemplateModel;
33
+ }>;
34
+ ItemsQuotedTab?: SlotProps<{
35
+ templateData?: NegotiableQuoteTemplateModel;
36
+ }>;
37
+ CommentsTab?: SlotProps<{
38
+ templateData?: NegotiableQuoteTemplateModel;
39
+ }>;
40
+ HistoryLogTab?: SlotProps<{
41
+ templateData?: NegotiableQuoteTemplateModel;
42
+ }>;
43
+ CommentsTitle?: SlotProps<{
44
+ templateData?: NegotiableQuoteTemplateModel;
45
+ }>;
46
+ Comments?: SlotProps<{
47
+ templateData?: NegotiableQuoteTemplateModel;
48
+ }>;
49
+ HistoryLogTitle?: SlotProps<{
50
+ templateData?: NegotiableQuoteTemplateModel;
51
+ }>;
52
+ HistoryLog?: SlotProps<{
53
+ templateData?: NegotiableQuoteTemplateModel;
54
+ }>;
55
+ Footer?: SlotProps<{
56
+ templateData?: NegotiableQuoteTemplateModel;
57
+ comment?: string;
58
+ isSubmitting?: boolean;
59
+ }>;
60
+ };
61
+ }
62
+ export declare const ManageNegotiableQuoteTemplate: Container<ManageNegotiableQuoteTemplateProps>;
63
+ //# sourceMappingURL=ManageNegotiableQuoteTemplate.d.ts.map
@@ -0,0 +1,11 @@
1
+ /********************************************************************
2
+ * Copyright 2025 Adobe
3
+ * All Rights Reserved.
4
+ *
5
+ * NOTICE: Adobe permits you to use, modify, and distribute this
6
+ * file in accordance with the terms of the Adobe license agreement
7
+ * accompanying it.
8
+ *******************************************************************/
9
+ export * from './ManageNegotiableQuoteTemplate';
10
+ export { ManageNegotiableQuoteTemplate as default } from './ManageNegotiableQuoteTemplate';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,3 @@
1
+ export * from './ManageNegotiableQuoteTemplate/index'
2
+ import _default from './ManageNegotiableQuoteTemplate/index'
3
+ export default _default
@@ -0,0 +1,4 @@
1
+ /*! Copyright 2025 Adobe
2
+ All Rights Reserved. */
3
+ import{jsx as a,jsxs as c}from"@dropins/tools/preact-jsx-runtime.js";import{useState as x,useEffect as z,useCallback as D,useMemo as d}from"@dropins/tools/preact-compat.js";import{classes as m,VComponent as r,Slot as o}from"@dropins/tools/lib.js";import{f as C}from"../chunks/dateUtils.js";import{events as P}from"@dropins/tools/event-bus.js";import{Skeleton as j,SkeletonRow as b,TextArea as A,Button as O}from"@dropins/tools/components.js";/* empty css */import"@dropins/tools/preact.js";import"@dropins/tools/preact-hooks.js";/* empty css *//* empty css */import{T as s}from"../chunks/TabbedContent.js";/* empty css */import"../chunks/state.js";import{s as B}from"../chunks/sendQuoteTemplateForReview.js";import{I as V}from"../chunks/ItemsQuotedTemplate.js";import{Q as $}from"../chunks/QuoteTemplateCommentsList.js";import{Q as E}from"../chunks/QuoteTemplateHistoryLog.js";import{useText as G}from"@dropins/tools/i18n.js";import"../chunks/transform-quote-template.js";import"../chunks/transform-quote.js";import"@dropins/tools/fetch-graphql.js";import"../chunks/NegotiableQuoteTemplateFragment.js";import"../chunks/QuotePricesSummary.js";import"../chunks/QuoteCommentsList.js";import"../chunks/QuoteHistoryLog.js";const J=({className:e,loading:h,templateName:q,templateId:t,banner:f,details:_,actionBar:N,referenceDocuments:l,referenceDocumentsTitle:g,itemsTable:u,commentsTitle:p,comments:n,historyLogTitle:T,historyLog:v,footer:y,...L})=>h?a(K,{}):c("div",{...L,className:m(["quote-management-manage-negotiable-quote-template",e]),children:[c("div",{className:m(["quote-management-manage-negotiable-quote-template__header"]),children:[q&&a(r,{node:q,className:m(["quote-management-manage-negotiable-quote-template__template-name"])}),t&&a(r,{node:t,className:m(["quote-management-manage-negotiable-quote-template__template-id"])})]}),f&&a(r,{node:f,className:m(["quote-management-manage-negotiable-quote-template__banner"])}),_&&a(r,{node:_,className:m(["quote-management-manage-negotiable-quote-template__details"])}),N&&a(r,{node:N,className:m(["quote-management-manage-negotiable-quote-template__action-bar"])}),(g||l)&&c("div",{"data-testid":"reference-documents-container",className:m(["quote-management-manage-negotiable-quote-template__reference-documents-container"]),children:[g&&a(r,{node:g,className:m(["quote-management-manage-negotiable-quote-template__reference-documents-title"])}),l&&a(r,{node:l,className:m(["quote-management-manage-negotiable-quote-template__reference-documents"])})]}),u&&a(r,{node:u,className:m(["quote-management-manage-negotiable-quote-template__items-table"])}),c("div",{"data-testid":"comments-container",className:m(["quote-management-manage-negotiable-quote-template__comments-container"]),children:[p&&a(r,{node:p,className:m(["quote-management-manage-negotiable-quote-template__comments-title"])}),n&&a(r,{node:n,className:m(["quote-management-manage-negotiable-quote-template__comments"])})]}),c("div",{"data-testid":"history-log-container",className:m(["quote-management-manage-negotiable-quote-template__history-log-container"]),children:[T&&a(r,{node:T,className:m(["quote-management-manage-negotiable-quote-template__history-log-title"])}),v&&a(r,{node:v,className:m(["quote-management-manage-negotiable-quote-template__history-log"])})]}),y&&a(r,{node:y,className:m(["quote-management-manage-negotiable-quote-template__footer"])})]}),K=()=>c(j,{"data-testid":"manage-negotiable-quote-template-skeleton",children:[a(b,{variant:"heading",fullWidth:!0,size:"large"}),a(b,{variant:"row",fullWidth:!1,size:"small"}),a(b,{variant:"row",fullWidth:!1,size:"small"}),a(b,{variant:"row",fullWidth:!0}),a(b,{variant:"row",fullWidth:!0,size:"xlarge",lines:2}),a(b,{variant:"row",fullWidth:!1,size:"small"})]}),ye=({slots:e,onSendForReview:h,...q})=>{const[t,f]=x(void 0),[_,N]=x(!0),[l,g]=x(""),[u,p]=x(!1),n=G({createdLabel:"NegotiableQuoteTemplate.Manage.createdLabel",salesRepLabel:"NegotiableQuoteTemplate.Manage.salesRepLabel",expiresLabel:"NegotiableQuoteTemplate.Manage.expiresLabel",referenceDocumentsTitle:"NegotiableQuoteTemplate.Manage.referenceDocuments.title",commentsTitle:"NegotiableQuoteTemplate.Manage.comments.title",historyLogTitle:"NegotiableQuoteTemplate.Manage.historyLog.title",itemsQuotedTab:"NegotiableQuoteTemplate.Manage.tabs.itemsQuoted",commentsTab:"NegotiableQuoteTemplate.Manage.tabs.comments",historyLogTab:"NegotiableQuoteTemplate.Manage.tabs.historyLog",templateCommentsPlaceholder:"NegotiableQuoteTemplate.Manage.templateComments.placeholder",sendForReview:"NegotiableQuoteTemplate.Manage.actionButtons.sendForReview"});z(()=>{const i=P.on("quote-management/quote-template-data",Q=>{Q.quoteTemplate&&(f(Q.quoteTemplate),N(!1),g(""),p(!1))},{eager:!0});return()=>i==null?void 0:i.off()},[]);const T=D(async()=>{if(h){h({templateData:t,comment:l.trim()||void 0});return}p(!0);try{await B({templateId:t.id,comment:l.trim()||void 0})}catch(i){console.error("Failed to send quote template for review:",i),p(!1)}},[t,h,l]),v=d(()=>a(o,{name:"TemplateName",slot:e==null?void 0:e.TemplateName,context:{templateName:t==null?void 0:t.name,templateData:t},children:a("h1",{"data-testid":"template-name",children:t==null?void 0:t.name})}),[e==null?void 0:e.TemplateName,t]),y=d(()=>a(o,{name:"TemplateId",slot:e==null?void 0:e.TemplateId,context:{templateId:t==null?void 0:t.uid,templateData:t},children:c("div",{"data-testid":"template-id",children:["Template #",t==null?void 0:t.uid]})}),[e==null?void 0:e.TemplateId,t]),L=d(()=>{if(!t)return;const i=t.expirationDate?C(t.expirationDate,"short"):void 0;return c(o,{name:"Details",slot:e==null?void 0:e.Details,context:{templateData:t},children:[c("div",{className:"quote-management-manage-negotiable-quote-template__detail",children:[a("span",{className:"quote-management-manage-negotiable-quote-template__detail-title","data-testid":"created-label",children:n.createdLabel}),c("span",{className:"quote-management-manage-negotiable-quote-template__detail-content","data-testid":"created-value",children:[C(t.createdAt,"short")," (",t.buyer.firstname," ",t.buyer.lastname,")"]})]}),c("div",{className:"quote-management-manage-negotiable-quote-template__detail",children:[a("span",{className:"quote-management-manage-negotiable-quote-template__detail-title","data-testid":"sales-rep-label",children:n.salesRepLabel}),a("span",{className:"quote-management-manage-negotiable-quote-template__detail-content","data-testid":"sales-rep-value",children:t.salesRepName})]}),i&&c("div",{className:"quote-management-manage-negotiable-quote-template__detail",children:[a("span",{className:"quote-management-manage-negotiable-quote-template__detail-title","data-testid":"expires-label",children:n.expiresLabel}),a("span",{className:"quote-management-manage-negotiable-quote-template__detail-content","data-testid":"expires-value",children:i})]})]})},[e==null?void 0:e.Details,n,t]),w=d(()=>{if(!(!(t!=null&&t.referenceDocuments)||t.referenceDocuments.length===0))return a(o,{name:"ReferenceDocumentsTitle",slot:e==null?void 0:e.ReferenceDocumentsTitle,context:{templateData:t},children:a("h2",{children:n.referenceDocumentsTitle})})},[e==null?void 0:e.ReferenceDocumentsTitle,n,t]),M=d(()=>{if(!(!(t!=null&&t.referenceDocuments)||t.referenceDocuments.length===0))return a(o,{name:"ReferenceDocuments",slot:e==null?void 0:e.ReferenceDocuments,context:{templateData:t},children:a("ul",{"data-testid":"reference-documents",children:t.referenceDocuments.map(i=>a("li",{children:a("a",{href:i.url,target:"_blank",rel:"noopener noreferrer",children:i.name})},i.uid))})})},[e==null?void 0:e.ReferenceDocuments,t]),R=d(()=>a(o,{name:"ItemsTable",slot:e==null?void 0:e.ItemsTable,context:{templateData:t},children:a(s,{tabs:new Map([["items-quoted",n.itemsQuotedTab],["comments",n.commentsTab],["history-log",n.historyLogTab]]),tabsContent:new Map([["items-quoted",a(o,{name:"ItemsQuotedTab",slot:e==null?void 0:e.ItemsQuotedTab,context:{templateData:t},children:a(V,{templateData:t})},"items-quoted")],["comments",a(o,{name:"CommentsTab",slot:e==null?void 0:e.CommentsTab,context:{templateData:t},children:a($,{templateData:t})},"comments")],["history-log",a(o,{name:"HistoryLogTab",slot:e==null?void 0:e.HistoryLogTab,context:{templateData:t},children:a(E,{templateData:t})},"history-log")]])})}),[e==null?void 0:e.ItemsTable,e==null?void 0:e.ItemsQuotedTab,e==null?void 0:e.CommentsTab,e==null?void 0:e.HistoryLogTab,n,t]),I=d(()=>a(o,{name:"CommentsTitle",slot:e==null?void 0:e.CommentsTitle,context:{templateData:t},children:a("h2",{children:n.commentsTitle})}),[e==null?void 0:e.CommentsTitle,n,t]),H=d(()=>a(o,{name:"Comments",slot:e==null?void 0:e.Comments,context:{templateData:t},children:a(A,{name:"templateComments",placeholder:n.templateCommentsPlaceholder,rows:3,value:l,onInput:i=>{g(i.target.value)},disabled:!(t!=null&&t.canSendForReview)||u})}),[e==null?void 0:e.Comments,n,t,l,u]),F=d(()=>a(o,{name:"HistoryLogTitle",slot:e==null?void 0:e.HistoryLogTitle,context:{templateData:t},children:a("h2",{children:n.historyLogTitle})}),[e==null?void 0:e.HistoryLogTitle,n,t]),S=d(()=>a(o,{name:"HistoryLog",slot:e==null?void 0:e.HistoryLog,context:{templateData:t},children:"TODO: Not yet implemented."}),[e==null?void 0:e.HistoryLog,t]),k=d(()=>a(o,{name:"Footer",slot:e==null?void 0:e.Footer,context:{templateData:t,comment:l,isSubmitting:u},children:a(O,{variant:"primary",onClick:T,"data-testid":"send-for-review-button",disabled:!(t!=null&&t.canSendForReview)||u,children:n.sendForReview})}),[e==null?void 0:e.Footer,n,t,l,u,T]),W={...q,loading:_,templateName:v,templateId:y,details:L,referenceDocumentsTitle:w,referenceDocuments:M,itemsTable:R,commentsTitle:I,comments:H,historyLogTitle:F,historyLog:S,footer:k};return a(J,{...W})};export{ye as ManageNegotiableQuoteTemplate,ye as default};
4
+ //# sourceMappingURL=ManageNegotiableQuoteTemplate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ManageNegotiableQuoteTemplate.js","sources":["/@dropins/storefront-quote-management/src/components/ManageNegotiableQuoteTemplate/ManageNegotiableQuoteTemplate.tsx","/@dropins/storefront-quote-management/src/containers/ManageNegotiableQuoteTemplate/ManageNegotiableQuoteTemplate.tsx"],"sourcesContent":["/********************************************************************\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 { Skeleton, SkeletonRow } from '@adobe-commerce/elsie/components';\n\nimport '@/quote-management/components/ManageNegotiableQuoteTemplate/ManageNegotiableQuoteTemplate.css';\n\nexport interface ManageNegotiableQuoteTemplateProps extends Omit<HTMLAttributes<HTMLDivElement>, 'loading'> {\n loading?: boolean;\n templateName: VNode;\n templateId: VNode;\n banner?: VNode;\n details?: VNode;\n actionBar?: VNode;\n referenceDocuments?: VNode;\n referenceDocumentsTitle?: VNode;\n itemsTable: VNode;\n commentsTitle: VNode;\n comments: VNode;\n historyLogTitle: VNode;\n historyLog: VNode;\n footer?: VNode;\n}\n\nexport const ManageNegotiableQuoteTemplate: FunctionComponent<ManageNegotiableQuoteTemplateProps> = ({\n className,\n loading,\n templateName,\n templateId,\n banner,\n details,\n actionBar,\n referenceDocuments,\n referenceDocumentsTitle,\n itemsTable,\n commentsTitle,\n comments,\n historyLogTitle,\n historyLog,\n footer,\n ...props\n}) => {\n if (loading) {\n return <ManageNegotiableQuoteTemplateSkeleton />;\n }\n\n return (\n <div {...props} className={classes(['quote-management-manage-negotiable-quote-template', className])}>\n <div className={classes(['quote-management-manage-negotiable-quote-template__header'])}>\n {templateName &&\n <VComponent\n node={templateName}\n className={classes(['quote-management-manage-negotiable-quote-template__template-name'])}\n />\n }\n {templateId &&\n <VComponent\n node={templateId}\n className={classes(['quote-management-manage-negotiable-quote-template__template-id'])}\n />\n }\n </div>\n {banner &&\n <VComponent\n node={banner}\n className={classes(['quote-management-manage-negotiable-quote-template__banner'])}\n />\n }\n {details &&\n <VComponent\n node={details}\n className={classes(['quote-management-manage-negotiable-quote-template__details'])}\n />\n }\n {actionBar &&\n <VComponent\n node={actionBar}\n className={classes(['quote-management-manage-negotiable-quote-template__action-bar'])}\n />\n }\n {(referenceDocumentsTitle || referenceDocuments) &&\n <div data-testid=\"reference-documents-container\" className={classes(['quote-management-manage-negotiable-quote-template__reference-documents-container'])}>\n {referenceDocumentsTitle &&\n <VComponent\n node={referenceDocumentsTitle}\n className={classes(['quote-management-manage-negotiable-quote-template__reference-documents-title'])}\n />\n }\n {referenceDocuments &&\n <VComponent\n node={referenceDocuments}\n className={classes(['quote-management-manage-negotiable-quote-template__reference-documents'])}\n />\n }\n </div>\n }\n {itemsTable &&\n <VComponent\n node={itemsTable}\n className={classes(['quote-management-manage-negotiable-quote-template__items-table'])}\n />\n }\n <div data-testid=\"comments-container\" className={classes(['quote-management-manage-negotiable-quote-template__comments-container'])}>\n {commentsTitle &&\n <VComponent\n node={commentsTitle}\n className={classes(['quote-management-manage-negotiable-quote-template__comments-title'])}\n />\n }\n {comments &&\n <VComponent\n node={comments}\n className={classes(['quote-management-manage-negotiable-quote-template__comments'])}\n />\n }\n </div>\n <div data-testid=\"history-log-container\" className={classes(['quote-management-manage-negotiable-quote-template__history-log-container'])}>\n {historyLogTitle &&\n <VComponent\n node={historyLogTitle}\n className={classes(['quote-management-manage-negotiable-quote-template__history-log-title'])}\n />\n }\n {historyLog &&\n <VComponent\n node={historyLog}\n className={classes(['quote-management-manage-negotiable-quote-template__history-log'])}\n />\n }\n </div>\n {footer &&\n <VComponent\n node={footer}\n className={classes(['quote-management-manage-negotiable-quote-template__footer'])}\n />\n }\n </div>\n );\n};\n\nexport const ManageNegotiableQuoteTemplateSkeleton: FunctionComponent = () => {\n return (\n <Skeleton data-testid=\"manage-negotiable-quote-template-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 {\n HTMLAttributes,\n useCallback,\n useEffect,\n useMemo,\n useState,\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 { events } from '@adobe-commerce/event-bus';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { NegotiableQuoteTemplateModel } from '@/quote-management/data/models/negotiable-quote-template-model';\nimport {\n ManageNegotiableQuoteTemplate as ManageNegotiableQuoteTemplateComponent,\n ManageNegotiableQuoteTemplateProps as ManageNegotiableQuoteTemplateComponentProps,\n} from '@/quote-management/components/ManageNegotiableQuoteTemplate';\nimport { TabbedContent } from '@/quote-management/components';\nimport {\n ItemsQuotedTemplate,\n QuoteTemplateCommentsList,\n QuoteTemplateHistoryLog\n} from '@/quote-management/containers';\nimport {\n Button,\n TextArea,\n} from '@adobe-commerce/elsie/components';\nimport { sendQuoteTemplateForReview } from '@/quote-management/api';\n\nexport interface ManageNegotiableQuoteTemplateProps\n extends HTMLAttributes<HTMLDivElement> {\n onSendForReview?: (params: {\n templateData?: NegotiableQuoteTemplateModel;\n comment?: string;\n }) => void;\n slots?: {\n TemplateName?: SlotProps<{\n templateName?: string;\n templateData?: NegotiableQuoteTemplateModel;\n }>;\n TemplateId?: SlotProps<{\n templateId?: string;\n templateData?: NegotiableQuoteTemplateModel;\n }>;\n Banner?: SlotProps<{\n templateData?: NegotiableQuoteTemplateModel;\n }>;\n Details?: SlotProps<{\n templateData?: NegotiableQuoteTemplateModel;\n }>;\n ReferenceDocumentsTitle?: SlotProps<{\n templateData?: NegotiableQuoteTemplateModel;\n }>;\n ReferenceDocuments?: SlotProps<{\n templateData?: NegotiableQuoteTemplateModel;\n }>;\n ItemsTable?: SlotProps<{\n templateData?: NegotiableQuoteTemplateModel;\n }>;\n ItemsQuotedTab?: SlotProps<{\n templateData?: NegotiableQuoteTemplateModel;\n }>;\n CommentsTab?: SlotProps<{\n templateData?: NegotiableQuoteTemplateModel;\n }>;\n HistoryLogTab?: SlotProps<{\n templateData?: NegotiableQuoteTemplateModel;\n }>;\n CommentsTitle?: SlotProps<{\n templateData?: NegotiableQuoteTemplateModel;\n }>;\n Comments?: SlotProps<{\n templateData?: NegotiableQuoteTemplateModel;\n }>;\n HistoryLogTitle?: SlotProps<{\n templateData?: NegotiableQuoteTemplateModel;\n }>;\n HistoryLog?: SlotProps<{\n templateData?: NegotiableQuoteTemplateModel;\n }>;\n Footer?: SlotProps<{\n templateData?: NegotiableQuoteTemplateModel;\n comment?: string;\n isSubmitting?: boolean;\n }>;\n };\n}\n\nexport const ManageNegotiableQuoteTemplate: Container<ManageNegotiableQuoteTemplateProps> = ({\n slots,\n onSendForReview,\n ...props\n}) => {\n const [templateData, setTemplateData] = useState<NegotiableQuoteTemplateModel | undefined>(undefined);\n const [loading, setLoading] = useState<boolean>(true);\n const [comment, setComment] = useState<string>('');\n const [isSubmitting, setIsSubmitting] = useState<boolean>(false);\n\n const dictionary = useText({\n createdLabel: 'NegotiableQuoteTemplate.Manage.createdLabel',\n salesRepLabel: 'NegotiableQuoteTemplate.Manage.salesRepLabel',\n expiresLabel: 'NegotiableQuoteTemplate.Manage.expiresLabel',\n referenceDocumentsTitle: 'NegotiableQuoteTemplate.Manage.referenceDocuments.title',\n commentsTitle: 'NegotiableQuoteTemplate.Manage.comments.title',\n historyLogTitle: 'NegotiableQuoteTemplate.Manage.historyLog.title',\n itemsQuotedTab: 'NegotiableQuoteTemplate.Manage.tabs.itemsQuoted',\n commentsTab: 'NegotiableQuoteTemplate.Manage.tabs.comments',\n historyLogTab: 'NegotiableQuoteTemplate.Manage.tabs.historyLog',\n templateCommentsPlaceholder: 'NegotiableQuoteTemplate.Manage.templateComments.placeholder',\n sendForReview: 'NegotiableQuoteTemplate.Manage.actionButtons.sendForReview',\n });\n\n /* Event listeners */\n useEffect(() => {\n const quoteTemplateDataEvent = events.on('quote-management/quote-template-data', (data) => {\n if (data.quoteTemplate) {\n setTemplateData(data.quoteTemplate);\n setLoading(false);\n // Reset comment and submitting state after successful update\n setComment('');\n setIsSubmitting(false);\n }\n }, { eager: true });\n\n return () => quoteTemplateDataEvent?.off();\n }, []);\n\n /**\n * Handlers\n */\n const handleSendForReview = useCallback(async () => {\n // If override prop is provided, use it instead of the API\n if (onSendForReview) {\n onSendForReview({\n templateData,\n comment: comment.trim() || undefined,\n });\n return;\n }\n // Otherwise, use the sendQuoteTemplateForReview API\n setIsSubmitting(true);\n\n try {\n await sendQuoteTemplateForReview({\n templateId: templateData!.id, // the button should be disabled if templateData is null\n comment: comment.trim() || undefined,\n });\n // The quote-template-data event will handle updating state\n } catch (error) {\n console.error('Failed to send quote template for review:', error);\n setIsSubmitting(false);\n // TODO: Show error notification to user\n }\n }, [templateData, onSendForReview, comment]);\n\n /**\n * VNodes for the ManageNegotiableQuoteTemplate component\n */\n\n // Template name\n const templateName = useMemo(() => {\n return (\n <Slot\n name=\"TemplateName\"\n slot={slots?.TemplateName}\n context={{ templateName: templateData?.name, templateData }}\n >\n <h1 data-testid=\"template-name\">\n {templateData?.name}\n </h1>\n </Slot>\n );\n }, [slots?.TemplateName, templateData]);\n\n // Template ID\n const templateId = useMemo(() => {\n return (\n <Slot\n name=\"TemplateId\"\n slot={slots?.TemplateId}\n context={{ templateId: templateData?.uid, templateData }}\n >\n <div data-testid=\"template-id\">Template #{templateData?.uid}</div>\n </Slot>\n );\n }, [slots?.TemplateId, templateData]);\n\n // Details\n const details = useMemo(() => {\n if (!templateData) {\n return;\n }\n\n // Format expiration date if it exists\n const expirationDate = templateData.expirationDate ? formattedDate(templateData.expirationDate, 'short') : undefined;\n\n return (\n <Slot name=\"Details\" slot={slots?.Details} context={{ templateData }}>\n <div className=\"quote-management-manage-negotiable-quote-template__detail\">\n <span\n className=\"quote-management-manage-negotiable-quote-template__detail-title\"\n data-testid=\"created-label\"\n >\n {dictionary.createdLabel}\n </span>\n <span\n className=\"quote-management-manage-negotiable-quote-template__detail-content\"\n data-testid=\"created-value\"\n >\n {formattedDate(templateData.createdAt, 'short')} (\n {templateData.buyer.firstname} {templateData.buyer.lastname})\n </span>\n </div>\n\n <div className=\"quote-management-manage-negotiable-quote-template__detail\">\n <span\n className=\"quote-management-manage-negotiable-quote-template__detail-title\"\n data-testid=\"sales-rep-label\"\n >\n {dictionary.salesRepLabel}\n </span>\n <span\n className=\"quote-management-manage-negotiable-quote-template__detail-content\"\n data-testid=\"sales-rep-value\"\n >\n {templateData.salesRepName}\n </span>\n </div>\n\n {expirationDate && (\n <div className=\"quote-management-manage-negotiable-quote-template__detail\">\n <span\n className=\"quote-management-manage-negotiable-quote-template__detail-title\"\n data-testid=\"expires-label\"\n >\n {dictionary.expiresLabel}\n </span>\n <span\n className=\"quote-management-manage-negotiable-quote-template__detail-content\"\n data-testid=\"expires-value\"\n >\n {expirationDate}\n </span>\n </div>\n )}\n </Slot>\n );\n }, [slots?.Details, dictionary, templateData]);\n\n // Reference documents\n const referenceDocumentsTitle = useMemo(() => {\n if (!templateData?.referenceDocuments || templateData.referenceDocuments.length === 0) {\n return undefined;\n }\n\n return (\n <Slot\n name=\"ReferenceDocumentsTitle\"\n slot={slots?.ReferenceDocumentsTitle}\n context={{ templateData }}\n >\n <h2>{dictionary.referenceDocumentsTitle}</h2>\n </Slot>\n );\n }, [slots?.ReferenceDocumentsTitle, dictionary, templateData]);\n\n const referenceDocuments = useMemo(() => {\n if (!templateData?.referenceDocuments || templateData.referenceDocuments.length === 0) {\n return undefined;\n }\n\n return (\n <Slot\n name=\"ReferenceDocuments\"\n slot={slots?.ReferenceDocuments}\n context={{ templateData }}\n >\n <ul data-testid=\"reference-documents\">\n {templateData.referenceDocuments.map((doc) => (\n <li key={doc.uid}>\n <a href={doc.url} target=\"_blank\" rel=\"noopener noreferrer\">\n {doc.name}\n </a>\n </li>\n ))}\n </ul>\n </Slot>\n );\n }, [slots?.ReferenceDocuments, templateData]);\n\n // Items table (using TabbedContent with ItemsQuoted)\n const itemsTable = useMemo(() => {\n return (\n <Slot\n name=\"ItemsTable\"\n slot={slots?.ItemsTable}\n context={{ templateData }}\n >\n <TabbedContent\n tabs={\n new Map([\n ['items-quoted', dictionary.itemsQuotedTab],\n ['comments', dictionary.commentsTab],\n ['history-log', dictionary.historyLogTab],\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={{ templateData }}\n >\n <ItemsQuotedTemplate templateData={templateData} />\n </Slot>,\n ],\n [\n 'comments',\n <Slot\n key=\"comments\"\n name=\"CommentsTab\"\n slot={slots?.CommentsTab}\n context={{ templateData }}\n >\n <QuoteTemplateCommentsList templateData={templateData} />\n </Slot>,\n ],\n [\n 'history-log',\n <Slot\n key=\"history-log\"\n name=\"HistoryLogTab\"\n slot={slots?.HistoryLogTab}\n context={{ templateData }}\n >\n <QuoteTemplateHistoryLog templateData={templateData} />\n </Slot>,\n ],\n ])\n }\n />\n </Slot>\n );\n }, [\n slots?.ItemsTable,\n slots?.ItemsQuotedTab,\n slots?.CommentsTab,\n slots?.HistoryLogTab,\n dictionary,\n templateData,\n ]);\n\n // Comments title\n const commentsTitle = useMemo(() => {\n return (\n <Slot\n name=\"CommentsTitle\"\n slot={slots?.CommentsTitle}\n context={{ templateData }}\n >\n <h2>{dictionary.commentsTitle}</h2>\n </Slot>\n );\n }, [slots?.CommentsTitle, dictionary, templateData]);\n\n // Comments\n const comments = useMemo(() => {\n return (\n <Slot\n name=\"Comments\"\n slot={slots?.Comments}\n context={{ templateData }}\n >\n <TextArea\n name=\"templateComments\"\n placeholder={dictionary.templateCommentsPlaceholder}\n rows={3}\n value={comment}\n onInput={(e) => {\n setComment((e.target as HTMLTextAreaElement).value);\n }}\n disabled={!templateData?.canSendForReview || isSubmitting}\n />\n </Slot>\n );\n }, [slots?.Comments, dictionary, templateData, comment, isSubmitting]);\n\n // History log title\n const historyLogTitle = useMemo(() => {\n return (\n <Slot\n name=\"HistoryLogTitle\"\n slot={slots?.HistoryLogTitle}\n context={{ templateData }}\n >\n <h2>{dictionary.historyLogTitle}</h2>\n </Slot>\n );\n }, [slots?.HistoryLogTitle, dictionary, templateData]);\n\n // History log\n const historyLog = useMemo(() => {\n return (\n <Slot\n name=\"HistoryLog\"\n slot={slots?.HistoryLog}\n context={{ templateData }}\n >\n TODO: Not yet implemented.\n </Slot>\n );\n }, [slots?.HistoryLog, templateData]);\n\n // Footer\n const footer = useMemo(() => {\n return (\n <Slot\n name=\"Footer\"\n slot={slots?.Footer}\n context={{ templateData, comment, isSubmitting }}\n >\n <Button\n variant=\"primary\"\n onClick={handleSendForReview}\n data-testid=\"send-for-review-button\"\n disabled={!templateData?.canSendForReview || isSubmitting}\n >\n {dictionary.sendForReview}\n </Button>\n </Slot>\n );\n }, [\n slots?.Footer,\n dictionary,\n templateData,\n comment,\n isSubmitting,\n handleSendForReview,\n ]);\n\n const manageNegotiableQuoteTemplateProps: ManageNegotiableQuoteTemplateComponentProps = {\n ...props,\n loading,\n templateName,\n templateId,\n details,\n referenceDocumentsTitle,\n referenceDocuments,\n itemsTable,\n commentsTitle,\n comments,\n historyLogTitle,\n historyLog,\n footer,\n };\n\n return (\n <ManageNegotiableQuoteTemplateComponent {...manageNegotiableQuoteTemplateProps} />\n );\n};\n"],"names":["ManageNegotiableQuoteTemplate","className","loading","templateName","templateId","banner","details","actionBar","referenceDocuments","referenceDocumentsTitle","itemsTable","commentsTitle","comments","historyLogTitle","historyLog","footer","props","ManageNegotiableQuoteTemplateSkeleton","jsxs","classes","jsx","VComponent","Skeleton","SkeletonRow","slots","onSendForReview","templateData","setTemplateData","useState","setLoading","comment","setComment","isSubmitting","setIsSubmitting","dictionary","useText","useEffect","quoteTemplateDataEvent","events","data","handleSendForReview","useCallback","sendQuoteTemplateForReview","error","useMemo","Slot","expirationDate","formattedDate","doc","TabbedContent","ItemsQuotedTemplate","QuoteTemplateCommentsList","QuoteTemplateHistoryLog","TextArea","e","Button","manageNegotiableQuoteTemplateProps","ManageNegotiableQuoteTemplateComponent"],"mappings":"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"}