@dropins/storefront-quote-management 0.0.1-alpha16 → 0.0.1-alpha18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/api/deleteQuote/deleteQuote.d.ts +28 -0
- package/api/deleteQuote/graphql/DeleteQuoteMutation.d.ts +10 -0
- package/api/deleteQuote/index.d.ts +10 -0
- package/api/graphql/NegotiableQuoteAddressFragment.d.ts +10 -0
- package/api/graphql/NegotiableQuoteFragment.d.ts +1 -1
- package/api/graphql/ShippingMethodFragment.d.ts +10 -0
- package/api/index.d.ts +1 -0
- package/api.js +6 -6
- package/api.js.map +1 -1
- package/chunks/NegotiableQuoteFragment.js +74 -26
- package/chunks/NegotiableQuoteFragment.js.map +1 -1
- package/chunks/OrderSummaryLine.js +4 -0
- package/chunks/OrderSummaryLine.js.map +1 -0
- package/chunks/WarningFilled.js +1 -1
- package/chunks/WarningFilled.js.map +1 -1
- package/chunks/fetch-graphql.js +4 -0
- package/chunks/fetch-graphql.js.map +1 -0
- package/chunks/negotiableQuotes.js +2 -2
- package/chunks/negotiableQuotes.js.map +1 -1
- package/chunks/sendForReview.js +35 -3
- package/chunks/sendForReview.js.map +1 -1
- package/chunks/state.js +4 -0
- package/chunks/state.js.map +1 -0
- package/chunks/uploadFile.js +5 -5
- package/chunks/uploadFile.js.map +1 -1
- package/components/ConfirmationModal/ConfirmationModal.d.ts +16 -0
- package/components/ConfirmationModal/index.d.ts +11 -0
- package/components/OrderSummary/OrderSummary.d.ts +7 -26
- package/components/index.d.ts +1 -0
- package/containers/ManageNegotiableQuote.js +1 -1
- package/containers/ManageNegotiableQuote.js.map +1 -1
- package/containers/OrderSummary/OrderSummary.d.ts +11 -0
- package/containers/OrderSummary/index.d.ts +11 -0
- package/containers/OrderSummary.d.ts +3 -0
- package/containers/OrderSummary.js +4 -0
- package/containers/OrderSummary.js.map +1 -0
- package/containers/OrderSummaryLine/OrderSummaryLine.d.ts +14 -0
- package/containers/OrderSummaryLine/index.d.ts +11 -0
- package/containers/OrderSummaryLine.d.ts +3 -0
- package/containers/OrderSummaryLine.js +4 -0
- package/containers/OrderSummaryLine.js.map +1 -0
- package/containers/QuotesListTable.js +1 -1
- package/containers/QuotesListTable.js.map +1 -1
- package/containers/RequestNegotiableQuoteForm.js +1 -1
- package/containers/RequestNegotiableQuoteForm.js.map +1 -1
- package/containers/index.d.ts +14 -4
- package/data/models/index.d.ts +9 -0
- package/data/models/negotiable-quote-model.d.ts +30 -5
- package/data/models/store-config-model.d.ts +24 -0
- package/data/transforms/__fixtures__/negotiableQuoteData.d.ts +55 -0
- package/data/transforms/transform-quote.d.ts +8 -0
- package/i18n/en_US.json.d.ts +28 -0
- package/lib/state.d.ts +2 -0
- package/package.json +1 -1
- package/render.js +2 -2
- package/render.js.map +1 -1
- package/types/state.types.d.ts +3 -0
- package/chunks/transform-quote.js +0 -4
- package/chunks/transform-quote.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ManageNegotiableQuote.js","sources":["/@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/containers/ManageNegotiableQuote/ManageNegotiableQuote.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 '@/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 handleDropdownChange?: (event: Event) => void;\n buttons?: VNode[];\n}\n\nexport const ActionsBar: FunctionComponent<ActionsBarProps> = ({\n className,\n dropdownPlaceholder,\n dropdownOptions,\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 = 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 className=\"quote-management-actions-bar__container\" data-testid=\"actions-bar-container\">\n <div className={classes(['quote-management-actions-bar', className])} data-testid=\"actions-bar\" {...props}>\n {hasDropdown && (\n <Picker\n name=\"dropdown\"\n id=\"dropdown\"\n onInput={handleDropdownChange}\n className=\"quote-management-actions-bar__dropdown\"\n data-testid=\"dropdown\"\n options={pickerOptions}\n />\n )}\n {hasButtons && (\n <div className=\"quote-management-actions-bar__buttons\" data-testid=\"buttons-container\">\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 {\n HTMLAttributes,\n useCallback,\n useEffect,\n useMemo,\n useState,\n} from 'preact/compat';\nimport {\n Container,\n getGlobalLocale,\n Slot,\n SlotProps,\n} from '@adobe-commerce/elsie/lib';\nimport { NegotiableQuoteModel } 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 { ActionsBar, TabbedContent } 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 { WarningFilled } from '@adobe-commerce/elsie/icons';\nimport { sendForReview } from '@/quote-management/api';\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 }>;\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 [comment, setComment] = useState<string>('');\n const [isSubmitting, setIsSubmitting] = useState<boolean>(false);\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 });\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 /**\n * VNodes for the ManageNegotiableQuote component\n */\n\n // Quote name\n const quoteName = useMemo(() => {\n return (\n <Slot\n name=\"QuoteName\"\n slot={slots?.QuoteName}\n context={{ quoteName: quoteData?.name, quoteData }}\n >\n <h1 data-testid=\"quote-name\">{quoteData?.name}</h1>\n </Slot>\n );\n }, [slots?.QuoteName, quoteData]);\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 () => [\n {\n label: dictionary.close,\n value: 'close',\n },\n {\n label: dictionary.delete,\n value: 'delete',\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]\n );\n const actionBar = useMemo(() => {\n const handleActionsDropdownChange = (event: Event) => {\n onActionsDropdownChange?.(event);\n };\n\n const handleActionsButtonClick = (action: string) => {\n switch (action) {\n case 'close':\n onActionsButtonClick?.(action);\n break;\n case 'delete':\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 name=\"ActionBar\" slot={slots?.ActionBar} context={{ quoteData }}>\n <ActionsBar\n dropdownPlaceholder={dictionary.actionsLabel}\n dropdownOptions={[\n {\n label: dictionary.remove,\n value: 'remove',\n },\n ]}\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 onActionsDropdownChange,\n onActionsButtonClick,\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 quoteData={quoteData} />\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 ]);\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 // 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 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 return <ManageNegotiableQuoteComponent {...manageNegotiableQuoteProps} />;\n};\n"],"names":["ActionsBar","className","dropdownPlaceholder","dropdownOptions","handleDropdownChange","buttons","props","hasDropdown","hasButtons","pickerOptions","option","classes","jsx","Picker","button","index","VComponent","ManageNegotiableQuote","loading","quoteName","quoteStatus","banner","details","actionBar","quoteContent","shippingInformationTitle","shippingInformation","quoteCommentsTitle","quoteComments","footer","ManageNegotiableQuoteSkeleton","jsxs","Skeleton","SkeletonRow","TabbedContent","tabs","tabsContent","defaultActiveTab","activeTabId","setActiveTabId","useState","handleTabClick","tabId","activeTabContent","useMemo","tabLabel","onActionsDropdownChange","slots","onActionsButtonClick","onSendForReview","quoteData","setQuoteData","setLoading","comment","setComment","isSubmitting","setIsSubmitting","dictionary","useText","useEffect","quoteDataEvent","events","data","quote","shippingAddressSetEvent","quoteSentForReviewEvent","Slot","bannerMessage","useCallback","status","bannerContent","InLineAlert","WarningFilled","calculatedLocale","getGlobalLocale","dateFormatter","expirationDate","handleActionsDropdownChange","event","handleActionsButtonClick","action","Button","ItemsQuoted","QuoteCommentsList","QuoteHistoryLog","ShippingAddressDisplay","TextArea","e","handleSendForReview","sendForReview","error","manageNegotiableQuoteProps","ManageNegotiableQuoteComponent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ManageNegotiableQuote.js","sources":["/@dropins/storefront-quote-management/src/components/ActionsBar/ActionsBar.tsx","/@dropins/storefront-quote-management/src/components/ManageNegotiableQuote/ManageNegotiableQuote.tsx","/@dropins/storefront-quote-management/src/components/ConfirmationModal/ConfirmationModal.tsx","/@dropins/storefront-quote-management/src/components/TabbedContent/TabbedContent.tsx","/@dropins/storefront-quote-management/src/containers/ManageNegotiableQuote/ManageNegotiableQuote.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 '@/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 handleDropdownChange?: (event: Event) => void;\n buttons?: VNode[];\n}\n\nexport const ActionsBar: FunctionComponent<ActionsBarProps> = ({\n className,\n dropdownPlaceholder,\n dropdownOptions,\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 = 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 className=\"quote-management-actions-bar__container\" data-testid=\"actions-bar-container\">\n <div className={classes(['quote-management-actions-bar', className])} data-testid=\"actions-bar\" {...props}>\n {hasDropdown && (\n <Picker\n name=\"dropdown\"\n id=\"dropdown\"\n onInput={handleDropdownChange}\n className=\"quote-management-actions-bar__dropdown\"\n data-testid=\"dropdown\"\n options={pickerOptions}\n />\n )}\n {hasButtons && (\n <div className=\"quote-management-actions-bar__buttons\" data-testid=\"buttons-container\">\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 { Button, Modal } from '@adobe-commerce/elsie/components';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport '@/quote-management/components/ConfirmationModal/ConfirmationModal.css';\n\nexport interface ConfirmationModalProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n open?: boolean;\n title?: VNode | string;\n message?: VNode | string;\n cancelLabel?: VNode | string;\n confirmLabel?: VNode | string;\n onCancel?: () => void;\n onConfirm?: () => void;\n showCloseButton?: boolean;\n confirmationBanner?: VNode | null;\n}\n\nexport const ConfirmationModal: FunctionComponent<ConfirmationModalProps> = ({\n open = false,\n title,\n message,\n cancelLabel,\n confirmLabel,\n onCancel,\n onConfirm,\n showCloseButton,\n confirmationBanner,\n ...props\n}) => {\n const dictionary = useText({\n cancel: 'ConfirmationModal.cancel',\n confirm: 'ConfirmationModal.confirm',\n });\n\n if (!open) {\n return null;\n }\n\n const { className, ...restProps } = props;\n\n return (\n <Modal\n {...restProps}\n size={\"medium\"}\n onClose={onCancel}\n clickToDismiss={true}\n escapeToDismiss={true}\n showCloseButton={showCloseButton}\n data-testid=\"confirmation-modal\"\n className={className}\n >\n <div className=\"confirmation-modal__content\">\n {confirmationBanner && (\n <div className=\"confirmation-modal__banner\" data-testid=\"confirmation-modal-banner\">\n {confirmationBanner}\n </div>\n )}\n {title && (\n <div className=\"confirmation-modal__title\" data-testid=\"confirmation-modal-title\">\n {title}\n </div>\n )}\n {message && (\n <div className=\"confirmation-modal__message\" data-testid=\"confirmation-modal-message\">\n {message}\n </div>\n )}\n <div className=\"confirmation-modal__actions\" data-testid=\"confirmation-modal-actions\">\n <Button variant=\"secondary\" onClick={onCancel} data-testid=\"confirmation-modal-cancel\">\n {cancelLabel ?? dictionary.cancel}\n </Button>\n <Button variant=\"primary\" onClick={onConfirm} data-testid=\"confirmation-modal-confirm\">\n {confirmLabel ?? dictionary.confirm}\n </Button>\n </div>\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 { 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 {\n HTMLAttributes,\n useCallback,\n useEffect,\n useMemo,\n useState,\n createPortal,\n} from 'preact/compat';\nimport {\n Container,\n getGlobalLocale,\n Slot,\n SlotProps,\n} from '@adobe-commerce/elsie/lib';\nimport { NegotiableQuoteModel } 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 { ActionsBar, TabbedContent, ConfirmationModal } from '@/quote-management/components';\nimport { Button, InLineAlert, TextArea } from '@adobe-commerce/elsie/components';\nimport { ShippingAddressDisplay } from '@/quote-management/containers/ShippingAddressDisplay';\nimport { QuoteHistoryLog } from '@/quote-management/containers/QuoteHistoryLog';\nimport { ItemsQuoted, QuoteCommentsList } from '@/quote-management/containers';\nimport { WarningFilled, CheckWithCircle } from '@adobe-commerce/elsie/icons';\nimport { deleteQuote, sendForReview } from '@/quote-management/api';\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 }>;\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\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\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 confirmationModalCancel: 'NegotiableQuote.Manage.confirmationModal.cancel',\n confirmationModalDeleteTitle: 'NegotiableQuote.Manage.confirmationModal.delete.title',\n confirmationModalDeleteMessage: 'NegotiableQuote.Manage.confirmationModal.delete.message',\n confirmationModalDeleteConfirm: 'NegotiableQuote.Manage.confirmationModal.delete.confirm',\n confirmationModalDeleteErrorHeading: 'NegotiableQuote.Manage.confirmationModal.delete.errorHeading',\n confirmationModalDeleteErrorFallback: 'NegotiableQuote.Manage.confirmationModal.delete.errorFallback',\n confirmationModalDeleteSuccessHeading: 'NegotiableQuote.Manage.confirmationModal.delete.successHeading',\n confirmationModalDeleteSuccessDescription: 'NegotiableQuote.Manage.confirmationModal.delete.successDescription',\n });\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 /**\n * VNodes for the ManageNegotiableQuote component\n */\n\n // Quote name\n const quoteName = useMemo(() => {\n return (\n <Slot\n name=\"QuoteName\"\n slot={slots?.QuoteName}\n context={{ quoteName: quoteData?.name, quoteData }}\n >\n <h1 data-testid=\"quote-name\">{quoteData?.name}</h1>\n </Slot>\n );\n }, [slots?.QuoteName, quoteData]);\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 }[] = useMemo(() => {\n return [\n {\n label: dictionary.close,\n value: 'close'\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]);\n const actionBar = useMemo(() => {\n const handleActionsDropdownChange = (event: Event) => {\n onActionsDropdownChange?.(event);\n };\n\n const handleActionsButtonClick = (action: string) => {\n switch (action) {\n case 'close':\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 name=\"ActionBar\" slot={slots?.ActionBar} context={{ quoteData }}>\n <ActionsBar\n dropdownPlaceholder={dictionary.actionsLabel}\n dropdownOptions={[\n {\n label: dictionary.remove,\n value: 'remove',\n },\n ]}\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 onActionsDropdownChange,\n onActionsButtonClick,\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 quoteData={quoteData} />\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 ]);\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 // 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 // Delete quote functionality\n const getDeleteErrorMessage = useCallback((error: any): string => {\n // If it's an operation failure with errors array, get the first error message\n if (error.errors && Array.isArray(error.errors) && error.errors.length > 0) {\n return error.errors[0].message || dictionary.confirmationModalDeleteErrorFallback;\n }\n // Otherwise use the error message or fallback\n return error?.message || dictionary.confirmationModalDeleteErrorFallback;\n }, [dictionary.confirmationModalDeleteErrorFallback]);\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((res: any) => res.__typename === 'DeleteNegotiableQuoteOperationFailure') 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 return (\n <>\n <ManageNegotiableQuoteComponent {...manageNegotiableQuoteProps} />\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 </>\n );\n};\n"],"names":["ActionsBar","className","dropdownPlaceholder","dropdownOptions","handleDropdownChange","buttons","props","hasDropdown","hasButtons","pickerOptions","option","classes","jsx","Picker","button","index","VComponent","ManageNegotiableQuote","loading","quoteName","quoteStatus","banner","details","actionBar","quoteContent","shippingInformationTitle","shippingInformation","quoteCommentsTitle","quoteComments","footer","ManageNegotiableQuoteSkeleton","jsxs","Skeleton","SkeletonRow","ConfirmationModal","open","title","message","cancelLabel","confirmLabel","onCancel","onConfirm","showCloseButton","confirmationBanner","dictionary","useText","restProps","Modal","Button","TabbedContent","tabs","tabsContent","defaultActiveTab","activeTabId","setActiveTabId","useState","handleTabClick","tabId","activeTabContent","useMemo","tabLabel","onActionsDropdownChange","slots","onActionsButtonClick","onSendForReview","quoteData","setQuoteData","setLoading","isDeleteDialogOpen","setIsDeleteDialogOpen","deleteError","setDeleteError","deleteSuccess","setDeleteSuccess","comment","setComment","isSubmitting","setIsSubmitting","useEffect","quoteDataEvent","events","data","quote","shippingAddressSetEvent","quoteSentForReviewEvent","Slot","bannerMessage","useCallback","status","bannerContent","InLineAlert","WarningFilled","calculatedLocale","getGlobalLocale","dateFormatter","expirationDate","handleActionsDropdownChange","event","handleActionsButtonClick","action","ItemsQuoted","QuoteCommentsList","QuoteHistoryLog","ShippingAddressDisplay","TextArea","e","handleSendForReview","sendForReview","error","getDeleteErrorMessage","handleDeleteCancel","handleDeleteConfirm","operationResults","deleteQuote","failure","res","errorMessage","handleDismissError","handleDismissSuccess","deleteErrorBanner","deleteBanner","CheckWithCircle","manageNegotiableQuoteProps","Fragment","ManageNegotiableQuoteComponent","createPortal"],"mappings":"6tCAyBO,MAAMA,GAAiD,CAAC,CAC7D,UAAAC,EACA,oBAAAC,EACA,gBAAAC,EACA,qBAAAC,EACA,QAAAC,EACA,GAAGC,CACL,IAAM,CACJ,MAAMC,EAAcJ,GAAmBA,EAAgB,OAAS,EAC1DK,EAAaH,GAAWA,EAAQ,OAAS,EAEzCI,GAAgBN,GAAA,YAAAA,EAAiB,IAAKO,IAAY,CACtD,KAAMA,EAAO,MACb,MAAOA,EAAO,KAAA,MACT,CAAA,EACP,OAAAD,EAAc,QAAQ,CACpB,KAAMP,GAAuB,GAC7B,MAAO,EAAA,CACR,IAGE,MAAA,CAAI,UAAU,0CAA0C,cAAY,wBACnE,WAAC,MAAA,CAAI,UAAWS,EAAQ,CAAC,+BAAgCV,CAAS,CAAC,EAAG,cAAY,cAAe,GAAGK,EACjG,SAAA,CAAAC,GACCK,EAACC,GAAA,CACC,KAAK,WACL,GAAG,WACH,QAAST,EACT,UAAU,yCACV,cAAY,WACZ,QAASK,CAAA,CAAA,EAGZD,GACCI,EAAC,MAAA,CAAI,UAAU,wCAAwC,cAAY,oBAChE,SAAAP,GAAA,YAAAA,EAAS,IAAI,CAACS,EAAQC,IACrBH,EAACI,EAAA,CACC,KAAMF,EACN,UAAWH,EAAQ,CAAC,sCAAsC,CAAC,CAAA,EACtDI,CAAA,EAER,CACH,CAAA,CAAA,CAEJ,CAAA,CACF,CAEJ,EC1CaE,GAAuE,CAAC,CACnF,UAAAhB,EACA,QAAAiB,EACA,UAAAC,EACA,YAAAC,EACA,OAAAC,EACA,QAAAC,EACA,UAAAC,EACA,aAAAC,EACA,yBAAAC,EACA,oBAAAC,EACA,mBAAAC,EACA,cAAAC,EACA,OAAAC,EACA,GAAGvB,CACL,IACMY,IACMY,GAAA,EAA8B,EAItCC,EAAC,MAAA,CAAK,GAAGzB,EAAO,UAAWK,EAAQ,CAAC,2CAA4CV,CAAS,CAAC,EACxF,SAAA,CAAA8B,EAAC,OAAI,UAAWpB,EAAQ,CAAC,kDAAkD,CAAC,EACzE,SAAA,CAAAQ,GACCP,EAACI,EAAA,CACC,KAAMG,EACN,UAAWR,EAAQ,CAAC,sDAAsD,CAAC,CAAA,CAAA,EAG9ES,GACCR,EAACI,EAAA,CACC,KAAMI,EACN,UAAWT,EAAQ,CAAC,wDAAwD,CAAC,CAAA,CAAA,CAC/E,EAEJ,EACCU,GACCT,EAACI,EAAA,CACC,KAAMK,EACN,UAAWV,EAAQ,CAAC,kDAAkD,CAAC,CAAA,CAAA,EAG1EW,GACCV,EAACI,EAAA,CACC,KAAMM,EACN,UAAWX,EAAQ,CAAC,mDAAmD,CAAC,CAAA,CAAA,EAG3EY,GACCX,EAACI,EAAA,CACC,KAAMO,EACN,UAAWZ,EAAQ,CAAC,sDAAsD,CAAC,CAAA,CAAA,EAG9Ea,GACCZ,EAACI,EAAA,CACC,KAAMQ,EACN,UAAWb,EAAQ,CAAC,yDAAyD,CAAC,CAAA,CAAA,EAGlFoB,EAAC,OAAI,cAAY,uCAAuC,UAAWpB,EAAQ,CAAC,0EAA0E,CAAC,EACpJ,SAAA,CAAAc,GACCb,EAACI,EAAA,CACC,KAAMS,EACN,UAAWd,EAAQ,CAAC,sEAAsE,CAAC,CAAA,CAAA,EAG9Fe,GACCd,EAACI,EAAA,CACC,KAAMU,EACN,UAAWf,EAAQ,CAAC,gEAAgE,CAAC,CAAA,CAAA,CACvF,EAEJ,EACAoB,EAAC,OAAI,cAAY,2BAA2B,UAAWpB,EAAQ,CAAC,oEAAoE,CAAC,EAClI,SAAA,CAAAgB,GACCf,EAACI,EAAA,CACC,KAAMW,EACN,UAAWhB,EAAQ,CAAC,gEAAgE,CAAC,CAAA,CAAA,EAGxFiB,GACChB,EAACI,EAAA,CACC,KAAMY,EACN,UAAWjB,EAAQ,CAAC,0DAA0D,CAAC,CAAA,CAAA,CACjF,EAEJ,EACAC,EAACI,EAAA,CACC,KAAMa,EACN,UAAWlB,EAAQ,CAAC,kDAAkD,CAAC,CAAA,CAAA,CACzE,EACF,EAISmB,GAAmD,IAE5DC,EAACC,GAAA,CAAS,cAAY,mCACpB,SAAA,CAAApB,EAACqB,GAAY,QAAQ,UAAU,UAAW,GAAM,KAAK,QAAQ,IAC5DA,EAAA,CAAY,QAAQ,MAAM,UAAW,GAAO,KAAK,QAAQ,IACzDA,EAAA,CAAY,QAAQ,MAAM,UAAW,GAAO,KAAK,QAAQ,EAC1DrB,EAACqB,EAAA,CAAY,QAAQ,MAAM,UAAW,GAAM,EAC5CrB,EAACqB,GAAY,QAAQ,MAAM,UAAW,GAAM,KAAK,SAAS,MAAO,CAAA,CAAG,IACnEA,EAAA,CAAY,QAAQ,MAAM,UAAW,GAAO,KAAK,OAAA,CAAQ,CAAA,EAC5D,EC5GSC,GAA+D,CAAC,CAC3E,KAAAC,EAAO,GACP,MAAAC,EACA,QAAAC,EACA,YAAAC,EACA,aAAAC,EACA,SAAAC,EACA,UAAAC,EACA,gBAAAC,EACA,mBAAAC,EACA,GAAGrC,CACL,IAAM,CACJ,MAAMsC,EAAaC,EAAQ,CACzB,OAAQ,2BACR,QAAS,2BAAA,CACV,EAED,GAAI,CAACV,EACH,OAAO,KAGT,KAAM,CAAE,UAAAlC,EAAW,GAAG6C,CAAA,EAAcxC,EAEpC,OACEM,EAACmC,GAAA,CACE,GAAGD,EACJ,KAAM,SACN,QAASN,EACT,eAAgB,GAChB,gBAAiB,GACjB,gBAAAE,EACA,cAAY,qBACZ,UAAAzC,EAEA,SAAA8B,EAAC,MAAA,CAAI,UAAU,8BACZ,SAAA,CAAAY,KACE,MAAA,CAAI,UAAU,6BAA6B,cAAY,4BACrD,SAAAA,EACH,EAEDP,GACCxB,EAAC,MAAA,CAAI,UAAU,4BAA4B,cAAY,2BACpD,SAAAwB,EACH,EAEDC,GACCzB,EAAC,MAAA,CAAI,UAAU,8BAA8B,cAAY,6BACtD,SAAAyB,EACH,EAEFN,EAAC,MAAA,CAAI,UAAU,8BAA8B,cAAY,6BACvD,SAAA,CAAAnB,EAACoC,EAAA,CAAO,QAAQ,YAAY,QAASR,EAAU,cAAY,4BACxD,SAAAF,GAAeM,EAAW,MAAA,CAC7B,EACAhC,EAACoC,EAAA,CAAO,QAAQ,UAAU,QAASP,EAAW,cAAY,6BACvD,SAAAF,GAAgBK,EAAW,OAAA,CAC9B,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CAGN,ECpEaK,GAAuD,CAAC,CACnE,UAAAhD,EACA,KAAAiD,EACA,YAAAC,EACA,iBAAAC,EACA,GAAG9C,CACL,IAAM,CACJ,KAAM,CAAC+C,EAAaC,CAAc,EAAIC,EACpCH,GAAoB,MAAM,KAAKF,EAAK,KAAA,CAAM,EAAE,CAAC,CAAA,EAGzCM,EAAkBC,GAAkB,CACxCH,EAAeG,CAAK,CACtB,EAEMC,EAAmBC,EAAQ,IACxBR,EAAY,IAAIE,CAAW,EACjC,CAACA,EAAaF,CAAW,CAAC,EAE7B,OACEpB,EAAC,MAAA,CAAK,GAAGzB,EAAO,UAAWK,EAAQ,CAAC,kCAAmCV,CAAS,CAAC,EAC9E,SAAA,CAAAiD,GACCtC,EAAC,OAAI,cAAY,sBAAsB,UAAWD,EAAQ,CAAC,uCAAuC,CAAC,EAChG,eAAM,KAAKuC,EAAK,SAAS,EAAE,IAAI,CAAC,CAACO,EAAOG,CAAQ,IAC/ChD,EAAC,SAAA,CACC,UACED,EAAQ,CACN,uCACA,CAAC,+CAAgD8C,IAAUJ,CAAW,CAAA,CACvE,EAEH,QAAS,IAAMG,EAAeC,CAAK,EAElC,SAAAG,CAAA,EAHIH,CAAA,CAKR,EACH,EAGAC,KACC,MAAA,CAAI,UAAW/C,EAAQ,CAAC,qDAAqD,CAAC,EAC7E,SAAAC,EAACI,EAAA,CACC,KAAM0C,CAAA,CAAA,CACR,CACF,CAAA,EAEJ,CAEJ,EC8BazC,GAA+D,CAAC,CAC3E,wBAAA4C,EACA,MAAAC,EACA,qBAAAC,EACA,gBAAAC,EACA,GAAG1D,CACL,IAAM,CAEJ,KAAM,CAAC2D,EAAWC,CAAY,EAAIX,EAChC,MAAA,EAEI,CAACrC,EAASiD,CAAU,EAAIZ,EAAkB,EAAI,EAC9C,CAACa,EAAoBC,CAAqB,EAAId,EAAkB,EAAK,EACrE,CAACe,EAAaC,CAAc,EAAIhB,EAAwB,IAAI,EAC5D,CAACiB,EAAeC,CAAgB,EAAIlB,EAAkB,EAAK,EAC3D,CAACmB,EAASC,CAAU,EAAIpB,EAAiB,EAAE,EAC3C,CAACqB,EAAcC,CAAe,EAAItB,EAAkB,EAAK,EAEzDX,EAAaC,EAAQ,CACzB,aAAc,sCACd,cAAe,uCACf,aAAc,sCACd,aAAc,sCACd,OAAQ,wCACR,MAAO,6CACP,OAAQ,8CACR,MAAO,6CACP,eAAgB,sDAChB,WAAY,kDACZ,yBACE,mDACF,mBAAoB,6CACpB,yBACE,mDACF,cAAe,qDACf,YAAa,qCACb,gBAAiB,wDACjB,cAAe,sDACf,cAAe,sDACf,wBAAyB,kDACzB,6BAA8B,wDAC9B,+BAAgC,0DAChC,+BAAgC,0DAChC,oCAAqC,+DACrC,qCAAsC,gEACtC,sCAAuC,iEACvC,0CAA2C,oEAAA,CAC5C,EAEDiC,EAAU,IAAM,CACd,MAAMC,EAAiBC,EAAO,GAC5B,8BACCC,GAA0C,CACzC,KAAM,CAAE,MAAAC,GAAUD,EACdC,IACFhB,EAAagB,CAAK,EAClBf,EAAW,EAAK,EAEpB,EACA,CACE,MAAO,EAAA,CACT,EAEF,MAAO,IAAMY,GAAA,YAAAA,EAAgB,KAC/B,EAAG,CAAA,CAAE,EAGLD,EAAU,IAAM,CACd,MAAMK,EAA0BH,EAAO,GACrC,wCACCC,GAA0C,CACzC,KAAM,CAAE,MAAAC,GAAUD,EACdC,GACFhB,EAAagB,CAAK,CAEtB,EACA,CACE,MAAO,EAAA,CACT,EAEF,MAAO,IAAMC,GAAA,YAAAA,EAAyB,KACxC,EAAG,CAAA,CAAE,EAGLL,EAAU,IAAM,CACd,MAAMM,EAA0BJ,EAAO,GACrC,yCACCC,GAA0C,CACzC,KAAM,CAAE,MAAAC,GAAUD,EAClBf,EAAagB,CAAK,EAClBP,EAAW,EAAE,EACbE,EAAgB,EAAK,CACvB,EACA,CACE,MAAO,EAAA,CACT,EAEF,MAAO,IAAMO,GAAA,YAAAA,EAAyB,KACxC,EAAG,CAAA,CAAE,EAOL,MAAMjE,EAAYwC,EAAQ,IAEtB/C,EAACyE,EAAA,CACC,KAAK,YACL,KAAMvB,GAAA,YAAAA,EAAO,UACb,QAAS,CAAE,UAAWG,GAAA,YAAAA,EAAW,KAAM,UAAAA,CAAA,EAEvC,SAAArD,EAAC,KAAA,CAAG,cAAY,aAAc,0BAAW,IAAA,CAAK,CAAA,CAAA,EAGjD,CAACkD,GAAA,YAAAA,EAAO,UAAWG,CAAS,CAAC,EAG1B7C,EAAcuC,EAAQ,IAExB/C,EAACyE,EAAA,CACC,KAAK,cACL,KAAMvB,GAAA,YAAAA,EAAO,YACb,QAAS,CAAE,YAAaG,GAAA,YAAAA,EAAW,OAAQ,UAAAA,CAAA,EAE3C,SAAArD,EAAC,MAAA,CAAI,cAAY,eAAgB,0BAAW,MAAA,CAAO,CAAA,CAAA,EAGtD,CAACkD,GAAA,YAAAA,EAAO,YAAaG,CAAS,CAAC,EAmB5BqB,EAhByBC,EAC5BC,GAA+B,CAC9B,OAAQA,EAAA,CACN,IAAK,YACH,OAAO5C,EAAW,gBACpB,IAAK,UACH,OAAOA,EAAW,cACpB,IAAK,UACH,OAAOA,EAAW,cACpB,QACE,OAAO,IAAA,CAEb,EACA,CAACA,CAAU,CAAA,EAGgCqB,GAAA,YAAAA,EAAW,MAAM,EAExDwB,EAAgBH,GACpB1E,EAAC8E,EAAA,CACC,KAAK,UACL,QAAQ,YACR,OAAOC,EAAA,EAAc,EACrB,QAAS/C,EAAW,YACpB,YAAa0C,CAAA,CAAA,EAIXjE,EAASoE,GACb7E,EAACyE,EAAA,CACC,KAAK,SACL,cAAY,SACZ,KAAMvB,GAAA,YAAAA,EAAO,OACb,QAAS,CAAE,UAAAG,CAAA,EAEV,SAAAwB,CAAA,CAAA,EAKCnE,EAAUqC,EAAQ,IAAM,CAC5B,GAAI,CAACM,EACH,OAAO,KAGT,MAAM2B,EAAmBC,MAAqB,QAExCC,EAAgB,IAAI,KAAK,eAAeF,EAAkB,CAC9D,KAAM,UACN,MAAO,OACP,IAAK,SAAA,CACN,EAGD,IAAIG,EACJ,GAAI,CACFA,EAAiBD,EAAc,OAC7B,IAAI,KAAK7B,EAAW,cAAc,CAAA,CAEtC,MAAgB,CACd8B,EAAiB9B,EAAW,cAC9B,CAEA,OACElC,EAACsD,EAAA,CAAK,KAAK,UAAU,KAAMvB,GAAA,YAAAA,EAAO,QAAS,QAAS,CAAE,UAAAG,CAAA,EACpD,SAAA,CAAAlC,EAAC,MAAA,CAAI,UAAU,mDACb,SAAA,CAAAnB,EAAC,OAAA,CACC,UAAU,yDACV,cAAY,gBAEX,SAAAgC,EAAW,YAAA,CAAA,EAEdb,EAAC,OAAA,CACC,UAAU,2DACV,cAAY,gBAEX,SAAA,CAAA+D,EAAc,OAAO,IAAI,KAAK7B,EAAW,SAAS,CAAC,EAAE,KACrDA,EAAW,MAAM,UAAU,IAAEA,EAAW,MAAM,SAAS,GAAA,CAAA,CAAA,CAC1D,EACF,EACAlC,EAAC,MAAA,CAAI,UAAU,mDACb,SAAA,CAAAnB,EAAC,OAAA,CACC,UAAU,yDACV,cAAY,kBAEX,SAAAgC,EAAW,aAAA,CAAA,EAEdhC,EAAC,OAAA,CACC,UAAU,2DACV,cAAY,kBAEX,SAAAqD,EAAW,YAAA,CAAA,CACd,EACF,EACAlC,EAAC,MAAA,CAAI,UAAU,mDACb,SAAA,CAAAnB,EAAC,OAAA,CACC,UAAU,yDACV,cAAY,gBAEX,SAAAgC,EAAW,YAAA,CAAA,EAEdhC,EAAC,OAAA,CACC,UAAU,2DACV,cAAY,gBAEX,SAAAmF,CAAA,CAAA,CACH,CAAA,CACF,CAAA,EACF,CAEJ,EAAG,CAACjC,GAAA,YAAAA,EAAO,QAASlB,EAAYqB,CAAS,CAAC,EAGpC5D,EAAkEsD,EAAQ,IACvE,CACL,CACE,MAAOf,EAAW,MAClB,MAAO,OAAA,EAET,CACE,MAAOA,EAAW,OAClB,MAAO,SACP,SAAU,EAACqB,GAAA,MAAAA,EAAW,UAAA,EAExB,CACE,MAAOrB,EAAW,MAClB,MAAO,OAAA,EAET,CACE,MAAOA,EAAW,eAClB,MAAO,gBAAA,EAET,CACE,MAAOA,EAAW,WAClB,MAAO,YAAA,CACT,EAED,CAACA,EAAYqB,GAAA,YAAAA,EAAW,SAAS,CAAC,EAC/B1C,EAAYoC,EAAQ,IAAM,CAC9B,MAAMqC,EAA+BC,GAAiB,CACpDpC,GAAA,MAAAA,EAA0BoC,EAC5B,EAEMC,EAA4BC,GAAmB,CACnD,OAAQA,EAAA,CACN,IAAK,QACHpC,GAAA,MAAAA,EAAuBoC,GACvB,MACF,IAAK,SACH9B,EAAsB,EAAI,EAC1BN,GAAA,MAAAA,EAAuBoC,GACvB,MACF,IAAK,QACHpC,GAAA,MAAAA,EAAuBoC,GACvB,MACF,IAAK,iBACHpC,GAAA,MAAAA,EAAuBoC,GACvB,MACF,IAAK,aACHpC,GAAA,MAAAA,EAAuBoC,GACvB,KAAA,CAEN,EACA,OACEvF,EAACyE,EAAA,CAAK,KAAK,YAAY,KAAMvB,GAAA,YAAAA,EAAO,UAAW,QAAS,CAAE,UAAAG,CAAA,EACxD,SAAArD,EAACZ,GAAA,CACC,oBAAqB4C,EAAW,aAChC,gBAAiB,CACf,CACE,MAAOA,EAAW,OAClB,MAAO,QAAA,CACT,EAEF,qBAAsBoD,EACtB,QAAS3F,EAAQ,IAAKS,GACpBF,EAACoC,EAAA,CAEC,QAAQ,WACR,QAAS,IAAMkD,EAAyBpF,EAAO,KAAK,EACpD,cAAa,eAAeA,EAAO,KAAK,UACxC,cAAaA,EAAO,MACpB,SAAUA,EAAO,SAEhB,SAAAA,EAAO,KAAA,EAPHA,EAAO,KAAA,CASf,CAAA,CAAA,EAEL,CAEJ,EAAG,CACDT,EACAuC,EACAkB,GAAA,YAAAA,EAAO,UACPG,EACAJ,EACAE,CAAA,CACD,EAGKvC,EAAemC,EAAQ,IAEzB/C,EAACyE,EAAA,CACC,KAAK,eACL,KAAMvB,GAAA,YAAAA,EAAO,aACb,QAAS,CAAE,UAAAG,CAAA,EAEX,SAAArD,EAACqC,GAAA,CACC,SACM,IAAI,CACN,CAAC,eAAgB,cAAc,EAC/B,CAAC,WAAY,UAAU,EACvB,CAAC,cAAe,aAAa,CAAA,CAC9B,EAEH,gBACM,IAAI,CACN,CACE,eACArC,EAACyE,EAAA,CAEC,KAAK,iBACL,KAAMvB,GAAA,YAAAA,EAAO,eACb,QAAS,CAAE,UAAAG,CAAA,EAEX,SAAArD,EAACwF,IAAY,UAAAnC,CAAA,CAAsB,CAAA,EAL/B,cAAA,CAMN,EAEF,CACE,WACArD,EAACyE,EAAA,CAEC,KAAK,cACL,KAAMvB,GAAA,YAAAA,EAAO,YACb,QAAS,CAAE,UAAAG,CAAA,EAEX,SAAArD,EAACyF,IAAkB,UAAApC,CAAA,CAAsB,CAAA,EALrC,UAAA,CAMN,EAEF,CACE,cACArD,EAACyE,EAAA,CAEC,KAAK,gBACL,KAAMvB,GAAA,YAAAA,EAAO,cACb,QAAS,CAAE,UAAAG,CAAA,EAEX,SAAArD,EAAC0F,IAAgB,UAAArC,CAAA,CAAsB,CAAA,EALnC,aAAA,CAMN,CACF,CACD,CAAA,CAAA,CAEL,CAAA,EAGH,CACDH,GAAA,YAAAA,EAAO,aACPA,GAAA,YAAAA,EAAO,cACPA,GAAA,YAAAA,EAAO,YACPA,GAAA,YAAAA,EAAO,eACPG,CAAA,CACD,EAGKxC,EAA2BkC,EAAQ,IAErC/C,EAACyE,EAAA,CACC,KAAK,2BACL,KAAMvB,GAAA,YAAAA,EAAO,yBACb,QAAS,CAAE,UAAAG,CAAA,EAEX,SAAArD,EAAC,KAAA,CAAI,SAAAgC,EAAW,wBAAA,CAAyB,CAAA,CAAA,EAG5C,CAACkB,GAAA,YAAAA,EAAO,yBAA0BG,EAAWrB,CAAU,CAAC,EAGrDlB,EAAsBiC,EAAQ,IAEhC/C,EAACyE,EAAA,CACC,KAAK,sBACL,KAAMvB,GAAA,YAAAA,EAAO,oBACb,QAAS,CAAE,UAAAG,EAAW,QAAA/C,EAAS,WAAAiD,CAAA,EAE/B,SAAAvD,EAAC2F,GAAA,CACC,UAAAtC,EACA,QAAA/C,EACA,cAAY,+BAAA,CAAA,CACd,CAAA,EAGH,CAAC4C,GAAA,YAAAA,EAAO,oBAAqBG,EAAW/C,EAASiD,CAAU,CAAC,EAGzDxC,EAAqBgC,EAAQ,IAE/B/C,EAACyE,EAAA,CACC,KAAK,qBACL,KAAMvB,GAAA,YAAAA,EAAO,mBACb,QAAS,CAAE,UAAAG,CAAA,EAEX,SAAArD,EAAC,KAAA,CAAI,SAAAgC,EAAW,kBAAA,CAAmB,CAAA,CAAA,EAGtC,CAACkB,GAAA,YAAAA,EAAO,mBAAoBlB,EAAYqB,CAAS,CAAC,EAG/CrC,EAAgB+B,EAAQ,IAE1B/C,EAACyE,EAAA,CACC,KAAK,gBACL,KAAMvB,GAAA,YAAAA,EAAO,cACb,QAAS,CAAE,UAAAG,CAAA,EAEX,SAAArD,EAAC4F,GAAA,CACC,KAAK,gBACL,YAAa5D,EAAW,yBACxB,KAAM,EACN,MAAO8B,EACP,QAAU+B,GAAM,CACd9B,EAAY8B,EAAE,OAA+B,KAAK,CACpD,EACA,SAAU7B,CAAA,CAAA,CACZ,CAAA,EAGH,CAACd,GAAA,YAAAA,EAAO,cAAelB,EAAYqB,EAAWS,EAASE,CAAY,CAAC,EAGjE8B,EAAsBnB,EAAY,SAAY,CAElD,GAAIvB,EAAiB,CACnBA,EAAgB,CACd,UAAAC,EACA,QAASS,EAAQ,QAAU,MAAA,CAC5B,EACD,MACF,CAGAG,EAAgB,EAAI,EACpB,GAAI,CACF,MAAM8B,GAAc,CAClB,SAAU1C,EAAW,IACrB,QAASS,EAAQ,KAAA,GAAU,MAAA,CAC5B,CAEH,OAASkC,EAAO,CACd,QAAQ,MAAM,mCAAoCA,CAAK,EACvD/B,EAAgB,EAAK,CAEvB,CACF,EAAG,CAACZ,EAAWD,EAAiBU,CAAO,CAAC,EAElC7C,GAAS8B,EAAQ,IAEnB/C,EAACyE,EAAA,CACC,KAAK,SACL,KAAMvB,GAAA,YAAAA,EAAO,OACb,QAAS,CAAE,UAAAG,EAAW,QAAAS,EAAS,aAAAE,CAAA,EAE/B,SAAAhE,EAACoC,EAAA,CACC,QAAQ,UACR,QAAS0D,EACT,cAAY,yBACZ,SAAU,EAACzC,GAAA,MAAAA,EAAW,mBAAoBW,GAAgB,CAACX,EAE1D,SAAArB,EAAW,aAAA,CAAA,CACd,CAAA,EAGH,CACDkB,GAAA,YAAAA,EAAO,OACPlB,EACAqB,EACAS,EACAE,EACA8B,CAAA,CACD,EAGKG,EAAwBtB,EAAaqB,GAErCA,EAAM,QAAU,MAAM,QAAQA,EAAM,MAAM,GAAKA,EAAM,OAAO,OAAS,EAChEA,EAAM,OAAO,CAAC,EAAE,SAAWhE,EAAW,sCAGxCgE,GAAA,YAAAA,EAAO,UAAWhE,EAAW,qCACnC,CAACA,EAAW,oCAAoC,CAAC,EAE9CkE,GAAqBvB,EAAY,IAAM,CAC3ClB,EAAsB,EAAK,EAC3BE,EAAe,IAAI,EACnBE,EAAiB,EAAK,CACxB,EAAG,CAAA,CAAE,EAECsC,GAAsBxB,EAAY,SAAY,CAClD,GAAKtB,GAAA,MAAAA,EAAW,IAIhB,CAAAM,EAAe,IAAI,EACnBE,EAAiB,EAAK,EAEtB,GAAI,CACF,KAAM,CAAE,iBAAAuC,CAAA,EAAqB,MAAMC,GAAYhD,EAAU,GAAG,EAEtDiD,EAAUF,EAAiB,KAAMG,GAAaA,EAAI,aAAe,uCAAuC,EAC9G,GAAID,EAAS,CACX,MAAME,EAAeP,EAAsBK,CAAO,EAClD3C,EAAe6C,CAAY,EAC3B,MACF,CAEA3C,EAAiB,EAAI,CACvB,OAASmC,EAAY,CACnB,MAAMQ,EAAeP,EAAsBD,CAAK,EAChDrC,EAAe6C,CAAY,CAC7B,EACF,EAAG,CAACnD,EAAW4C,CAAqB,CAAC,EAE/BQ,GAAqB9B,EAAY,IAAM,CAC3ChB,EAAe,IAAI,CACrB,EAAG,CAAA,CAAE,EAEC+C,GAAuB/B,EAAY,IAAM,CAC7Cd,EAAiB,EAAK,CACxB,EAAG,CAAA,CAAE,EAEC8C,GAAoBjD,EACxB1D,EAAC8E,EAAA,CACC,KAAK,QACL,QAAQ,UACR,OAAOC,EAAA,EAAc,EACrB,QAAS/C,EAAW,oCACpB,YAAa0B,EACb,UAAW+C,GACX,cAAY,iCAAA,CAAA,EAEZ,KAcEG,GAZsBhD,EAC1B5D,EAAC8E,EAAA,CACC,KAAK,UACL,QAAQ,UACR,OAAO+B,GAAA,EAAgB,EACvB,QAAS7E,EAAW,sCACpB,YAAaA,EAAW,0CACxB,UAAW0E,GACX,cAAY,mCAAA,CAAA,EAEZ,OAEwCC,GAEtCG,GAAkE,CACtE,GAAGpH,EACH,QAAAY,EACA,UAAAC,EACA,YAAAC,EACA,OAAQC,GAAU,OAClB,QAAAC,EACA,UAAAC,EACA,aAAAC,EACA,yBAAAC,EACA,oBAAAC,EACA,mBAAAC,EACA,cAAAC,EACA,OAAAC,EAAA,EAGF,OACEE,EAAA4F,GAAA,CACE,SAAA,CAAA/G,EAACgH,GAAA,CAAgC,GAAGF,GAA4B,EAC/DtD,GACCyD,GACEjH,EAACsB,GAAA,CACC,KAAMkC,EACN,MAAOxB,EAAW,6BAClB,QAASA,EAAW,+BACpB,YAAaA,EAAW,wBACxB,aAAcA,EAAW,+BACzB,SAAUkE,GACV,UAAWC,GACX,gBAAiB,CAACS,EAClB,mBAAoBA,CAAA,CAAA,EAEtB,SAAS,IAAA,CACX,EACJ,CAEJ"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { OrderSummaryLineItem } from '../../components';
|
|
2
|
+
import { NegotiableQuoteModel } from '../../data/models';
|
|
3
|
+
import { Container } from '@dropins/tools/types/elsie/src/lib';
|
|
4
|
+
import { HTMLAttributes } from 'preact/compat';
|
|
5
|
+
|
|
6
|
+
export interface OrderSummaryProps extends HTMLAttributes<HTMLDivElement> {
|
|
7
|
+
showTotalSaved?: boolean;
|
|
8
|
+
updateLineItems?: (lineItems: Array<OrderSummaryLineItem>) => Array<OrderSummaryLineItem>;
|
|
9
|
+
}
|
|
10
|
+
export declare const OrderSummary: Container<OrderSummaryProps, NegotiableQuoteModel | null>;
|
|
11
|
+
//# sourceMappingURL=OrderSummary.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 './OrderSummary';
|
|
10
|
+
export { OrderSummary as default } from './OrderSummary';
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/*! Copyright 2025 Adobe
|
|
2
|
+
All Rights Reserved. */
|
|
3
|
+
import{jsxs as u,jsx as t,Fragment as Ne}from"@dropins/tools/preact-jsx-runtime.js";import{VComponent as Z,classes as _e}from"@dropins/tools/lib.js";/* empty css */import{Accordion as Ce,AccordionSection as fe,Divider as Ee,Price as l,Icon as Me}from"@dropins/tools/components.js";/* empty css */import{O as c}from"../chunks/OrderSummaryLine.js";import*as g from"@dropins/tools/preact-compat.js";import{useState as Se,useEffect as Ze}from"@dropins/tools/preact-compat.js";import{useText as we}from"@dropins/tools/i18n.js";import"@dropins/tools/preact.js";/* empty css *//* empty css *//* empty css */import{s as He,Q as H}from"../chunks/state.js";import{events as ke}from"@dropins/tools/event-bus.js";const ve=d=>g.createElement("svg",{width:24,height:24,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",...d},g.createElement("path",{d:"M7.74512 9.87701L12.0001 14.132L16.2551 9.87701",stroke:"currentColor",strokeWidth:1.5,strokeLinecap:"square",strokeLinejoin:"round"})),Le=d=>g.createElement("svg",{width:24,height:24,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",...d},g.createElement("path",{d:"M7.74512 14.132L12.0001 9.87701L16.2551 14.132",stroke:"currentColor",strokeWidth:1.5,strokeLinecap:"square",strokeLinejoin:"round"})),Ve=d=>g.createElement("svg",{width:24,height:24,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",...d},g.createElement("path",{vectorEffect:"non-scaling-stroke",d:"M22 6.25H22.75C22.75 5.83579 22.4142 5.5 22 5.5V6.25ZM22 9.27L22.2514 9.97663C22.5503 9.87029 22.75 9.58731 22.75 9.27H22ZM20.26 12.92L19.5534 13.1714L19.5539 13.1728L20.26 12.92ZM22 14.66H22.75C22.75 14.3433 22.551 14.0607 22.2528 13.9539L22 14.66ZM22 17.68V18.43C22.4142 18.43 22.75 18.0942 22.75 17.68H22ZM2 17.68H1.25C1.25 18.0942 1.58579 18.43 2 18.43V17.68ZM2 14.66L1.74865 13.9534C1.44969 14.0597 1.25 14.3427 1.25 14.66H2ZM3.74 11.01L4.44663 10.7586L4.44611 10.7572L3.74 11.01ZM2 9.27H1.25C1.25 9.58675 1.44899 9.86934 1.7472 9.97611L2 9.27ZM2 6.25V5.5C1.58579 5.5 1.25 5.83579 1.25 6.25H2ZM21.25 6.25V9.27H22.75V6.25H21.25ZM21.7486 8.56337C19.8706 9.23141 18.8838 11.2889 19.5534 13.1714L20.9666 12.6686C20.5762 11.5711 21.1494 10.3686 22.2514 9.97663L21.7486 8.56337ZM19.5539 13.1728C19.9195 14.1941 20.7259 15.0005 21.7472 15.3661L22.2528 13.9539C21.6541 13.7395 21.1805 13.2659 20.9661 12.6672L19.5539 13.1728ZM21.25 14.66V17.68H22.75V14.66H21.25ZM22 16.93H2V18.43H22V16.93ZM2.75 17.68V14.66H1.25V17.68H2.75ZM2.25135 15.3666C4.12941 14.6986 5.11623 12.6411 4.44663 10.7586L3.03337 11.2614C3.42377 12.3589 2.85059 13.5614 1.74865 13.9534L2.25135 15.3666ZM4.44611 10.7572C4.08045 9.73588 3.27412 8.92955 2.2528 8.56389L1.7472 9.97611C2.34588 10.1905 2.81955 10.6641 3.03389 11.2628L4.44611 10.7572ZM2.75 9.27V6.25H1.25V9.27H2.75ZM2 7H22V5.5H2V7ZM7.31 6.74V18.17H8.81V6.74H7.31ZM17.0997 8.39967L11.0397 14.4597L12.1003 15.5203L18.1603 9.46033L17.0997 8.39967ZM12.57 9.67C12.57 9.87231 12.4159 10 12.27 10V11.5C13.2839 11.5 14.07 10.6606 14.07 9.67H12.57ZM12.27 10C12.1241 10 11.97 9.87231 11.97 9.67H10.47C10.47 10.6606 11.2561 11.5 12.27 11.5V10ZM11.97 9.67C11.97 9.46769 12.1241 9.34 12.27 9.34V7.84C11.2561 7.84 10.47 8.67938 10.47 9.67H11.97ZM12.27 9.34C12.4159 9.34 12.57 9.46769 12.57 9.67H14.07C14.07 8.67938 13.2839 7.84 12.27 7.84V9.34ZM17.22 14.32C17.22 14.5223 17.0659 14.65 16.92 14.65V16.15C17.9339 16.15 18.72 15.3106 18.72 14.32H17.22ZM16.92 14.65C16.7741 14.65 16.62 14.5223 16.62 14.32H15.12C15.12 15.3106 15.9061 16.15 16.92 16.15V14.65ZM16.62 14.32C16.62 14.1177 16.7741 13.99 16.92 13.99V12.49C15.9061 12.49 15.12 13.3294 15.12 14.32H16.62ZM16.92 13.99C17.0659 13.99 17.22 14.1177 17.22 14.32H18.72C18.72 13.3294 17.9339 12.49 16.92 12.49V13.99Z",fill:"currentColor"})),Ie=({className:d,children:k,variant:y="primary",heading:C,subTotal:p,shipping:e,discounts:b,taxTotal:s,taxesApplied:a,total:n,totalSaved:T,updateLineItems:f=m=>m,...v})=>{const[m,x]=Se(!1),o=we({taxesBreakdownTitle:"NegotiableQuote.PriceSummary.taxes.breakdown",taxTotal:"NegotiableQuote.PriceSummary.taxes.total",taxTotalOnly:"NegotiableQuote.PriceSummary.taxes.totalOnly",showTaxBreakdown:"NegotiableQuote.PriceSummary.taxes.showBreakdown",hideTaxBreakdown:"NegotiableQuote.PriceSummary.taxes.hideBreakdown",subtotalLabel:"NegotiableQuote.PriceSummary.subTotal.label",subtotalWithTaxes:"NegotiableQuote.PriceSummary.subTotal.withTaxes",subtotalWithoutTaxes:"NegotiableQuote.PriceSummary.subTotal.withoutTaxes",shippingLabel:"NegotiableQuote.PriceSummary.shipping.label",shippingWithTaxes:"NegotiableQuote.PriceSummary.shipping.withTaxes",shippingWithoutTaxes:"NegotiableQuote.PriceSummary.shipping.withoutTaxes",totalLabel:"NegotiableQuote.PriceSummary.total.label",totalWithoutTax:"NegotiableQuote.PriceSummary.total.withoutTax",totalSaved:"NegotiableQuote.PriceSummary.total.saved"}),L=p&&u(c,{label:o.subtotalLabel,price:p.price,classSuffixes:["subTotal"],children:[p.taxIncluded&&t("div",{"data-testid":"sub-total-tax-caption",className:"quote-order-summary__caption",children:t("span",{children:o.subtotalWithTaxes})}),p.taxExcluded?t("div",{"data-testid":"sub-total-tax-caption-excluded",className:"quote-order-summary__caption",children:u("span",{children:[p.priceExcludingTax," ",o.subtotalWithoutTaxes]})}):void 0]},o.subtotalLabel),S=e&&u(c,{label:o.shippingLabel,price:e.price,classSuffixes:["shipping"],children:[e.taxIncluded&&t("div",{"data-testid":"shipping-tax-caption",className:"quote-order-summary__caption",children:t("span",{children:o.shippingWithTaxes})}),e.taxExcluded?t("div",{"data-testid":"shipping-tax-caption-excluded",className:"quote-order-summary__caption",children:u("span",{children:[e.priceExcludingTax," ",o.shippingWithoutTaxes]})}):void 0]},o.shippingLabel),w=b&&b.length>0&&t(Ne,{children:b.map(r=>u(c,{label:r.label,price:r.price,classSuffixes:["discount"],children:[r.coupon&&t(Z,{node:r.coupon,className:"quote-order-summary__coupon__code"}),r.caption&&t(Z,{node:r.caption,className:"quote-order-summary__caption"})]},r.label))}),N=a&&a.length>0?t(Ce,{"data-testid":"tax-breakdown",className:"quote-order-summary__taxes",iconOpen:ve,iconClose:Le,children:u(fe,{ariaLabelTitle:o.taxesBreakdownTitle,title:o.taxesBreakdownTitle,secondaryText:!m&&s?t(Z,{node:s.price,className:"quote-order-summary__price"}):void 0,renderContentWhenClosed:!1,onStateChange:x,children:[t("div",{className:"quote-order-summary__appliedTaxes",children:a.map(r=>t(c,{label:r.label,price:r.price,classSuffixes:["taxEntry"],labelClassSuffix:"muted"},r.label))}),s&&t(c,{label:o.taxTotal,price:s.price,classSuffixes:["taxTotal"],labelClassSuffix:"muted"})]})}):s&&t(c,{label:o.taxTotalOnly,price:s.price,classSuffixes:["taxTotal"],testId:"tax-total-only"}),_=[{key:"subTotalContent",sortOrder:100,content:L},{key:"shippingContent",sortOrder:200,content:S},{key:"discountsContent",sortOrder:600,content:w},{key:"taxContent",sortOrder:800,content:N},...n?[{key:"totalContent",sortOrder:900,content:t(c,{label:o.totalLabel,price:n.price,classSuffixes:["total","total--padded"],testId:"total-content",labelClassSuffix:"bold"})}]:[],...n!=null&&n.priceWithoutTax?[{key:"totalWithoutTaxContent",sortOrder:1e3,content:t(c,{label:o.totalWithoutTax,price:n.priceWithoutTax,classSuffixes:["totalWithoutTax"],testId:"total-without-tax",labelClassSuffix:"muted"})}]:[],...T?[{key:"totalSavedContent",sortOrder:1100,content:t(c,{label:o.totalSaved,price:T,classSuffixes:["saved"],testId:"total-saved",labelClassSuffix:"muted"})}]:[]],E=f(_).sort((r,h)=>r.sortOrder-h.sortOrder);return u("div",{...v,className:_e(["quote-order-summary",[`quote-order-summary__${y}`,y],d]),children:[u("div",{className:"quote-order-summary__heading",children:[C&&t(Z,{node:C,className:"quote-order-summary__heading-text"}),t(Ee,{variant:"primary",className:"quote-order-summary__divider-primary"})]}),t("div",{className:"quote-order-summary__content",children:E.map(r=>Array.isArray(r.content)?t(Ce,{className:r.className,actionIconPosition:"right",iconOpen:ve,iconClose:Le,children:t(fe,{defaultOpen:!1,title:r.title,renderContentWhenClosed:!1,children:r.content.map(h=>h.content)})},r.key):r.content)})]})},Re=({children:d,initialData:k=null,showTotalSaved:y,updateLineItems:C=e=>e,...p})=>{var o,L,S,w,N,_,E,r,h,V,I,O,P,Q,W,B,D,q,A,U,X,j,z,$,F,R,G,J,K,Y,ee,te,re,ae,oe,ie,ne,le,se,ce,ue,de,pe,me,xe,he,ge,be,Te,ye;const[e,b]=Se(k),s=e==null?void 0:e.isVirtual,{quoteDisplaySettings:a}=He.config,n=!!(a!=null&&a.zeroTax),T=(a==null?void 0:a.subtotal)===H.TAX_INCLUDED,f=a.subtotal===H.TAX_INCLUDED_AND_EXCLUDED,v=(a==null?void 0:a.shipping)===H.TAX_INCLUDED,m=a.shipping===H.TAX_INCLUDED_AND_EXCLUDED;Ze(()=>{const i=ke.on("quote-management/quote-data",M=>{b(M.quote)},{eager:!0});return()=>{i==null||i.off()}},[]);const x=we({free:"NegotiableQuote.PriceSummary.total.free",orderSummary:"NegotiableQuote.PriceSummary.orderSummary",taxToBeDetermined:"NegotiableQuote.PriceSummary.taxToBeDetermined"});return Object.keys(e??{}).length?t(Ie,{...p,"data-testid":"quote-order-summary",heading:t("div",{children:x.orderSummary}),updateLineItems:C,subTotal:{taxIncluded:T&&!n,taxExcluded:f,priceExcludingTax:t(l,{"data-testid":"subtotal",amount:(L=(o=e==null?void 0:e.prices)==null?void 0:o.subtotalExcludingTax)==null?void 0:L.value,currency:(w=(S=e==null?void 0:e.prices)==null?void 0:S.subtotalExcludingTax)==null?void 0:w.currency}),price:!n&&T||!n&&f?t(l,{"data-testid":"subtotal",amount:(_=(N=e==null?void 0:e.prices)==null?void 0:N.subtotalIncludingTax)==null?void 0:_.value,currency:(r=(E=e==null?void 0:e.prices)==null?void 0:E.subtotalIncludingTax)==null?void 0:r.currency}):t(l,{"data-testid":"subtotal",amount:(V=(h=e==null?void 0:e.prices)==null?void 0:h.subtotalExcludingTax)==null?void 0:V.value,currency:(O=(I=e==null?void 0:e.prices)==null?void 0:I.subtotalExcludingTax)==null?void 0:O.currency})},shipping:{taxIncluded:v&&!n,taxExcluded:m,priceExcludingTax:t(l,{"data-testid":"shipping",amount:(Q=(P=e==null?void 0:e.prices)==null?void 0:P.shippingExcludingTax)==null?void 0:Q.value,currency:(B=(W=e==null?void 0:e.prices)==null?void 0:W.shippingExcludingTax)==null?void 0:B.currency}),price:!n&&v||!n&&m?t(l,{"data-testid":"shipping",amount:(q=(D=e==null?void 0:e.prices)==null?void 0:D.shippingIncludingTax)==null?void 0:q.value,currency:(U=(A=e==null?void 0:e.prices)==null?void 0:A.shippingIncludingTax)==null?void 0:U.currency}):t(l,{"data-testid":"shipping",amount:(j=(X=e==null?void 0:e.prices)==null?void 0:X.shippingExcludingTax)==null?void 0:j.value,currency:($=(z=e==null?void 0:e.prices)==null?void 0:z.shippingExcludingTax)==null?void 0:$.currency})},discounts:(R=(F=e==null?void 0:e.prices)==null?void 0:F.appliedDiscounts)==null?void 0:R.map(i=>{var M;return{label:i.label,price:t(l,{"data-testid":"summary-discount-total",amount:-i.amount.value,currency:i.amount.currency,sale:!0}),coupon:i!=null&&i.coupon?u("span",{children:[t(Me,{source:Ve,size:"16"}),(M=i==null?void 0:i.coupon)==null?void 0:M.code]}):void 0}}),taxTotal:s&&!((J=(G=e==null?void 0:e.prices)==null?void 0:G.appliedTaxes)!=null&&J.length)?{price:t("span",{"data-testid":"tax-total-tbd",children:x.taxToBeDetermined})}:{price:t(l,{"data-testid":"tax-total-actual",amount:(Y=(K=e==null?void 0:e.prices)==null?void 0:K.totalTax)==null?void 0:Y.value,currency:(te=(ee=e==null?void 0:e.prices)==null?void 0:ee.totalTax)==null?void 0:te.currency})},taxesApplied:s?void 0:a!=null&&a.fullSummary?(ae=(re=e==null?void 0:e.prices)==null?void 0:re.appliedTaxes)==null?void 0:ae.map(i=>({label:i.label,price:t(l,{"data-testid":"applied-taxes",amount:i.amount.value,currency:i.amount.currency})})):void 0,total:{price:((ie=(oe=e==null?void 0:e.prices)==null?void 0:oe.grandTotal)==null?void 0:ie.value)===0?t("span",{"data-testid":"total-including-tax",children:x.free}):t(l,{"data-testid":"total-including-tax-actual",amount:(le=(ne=e==null?void 0:e.prices)==null?void 0:ne.grandTotal)==null?void 0:le.value,currency:(ce=(se=e==null?void 0:e.prices)==null?void 0:se.grandTotal)==null?void 0:ce.currency}),priceWithoutTax:a!=null&&a.grandTotal?((de=(ue=e==null?void 0:e.prices)==null?void 0:ue.grandTotalExcludingTax)==null?void 0:de.value)===0?t("span",{"data-testid":"total-excluding-tax",children:x.free}):t(l,{"data-testid":"total-excluding-tax",amount:(me=(pe=e==null?void 0:e.prices)==null?void 0:pe.grandTotalExcludingTax)==null?void 0:me.value,currency:(he=(xe=e==null?void 0:e.prices)==null?void 0:xe.grandTotalExcludingTax)==null?void 0:he.currency}):void 0},totalSaved:y?t(l,{amount:(be=(ge=e==null?void 0:e.prices)==null?void 0:ge.discount)==null?void 0:be.value,currency:(ye=(Te=e==null?void 0:e.prices)==null?void 0:Te.grandTotal)==null?void 0:ye.currency}):void 0}):null};export{Re as OrderSummary,Re as default};
|
|
4
|
+
//# sourceMappingURL=OrderSummary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OrderSummary.js","sources":["../../node_modules/@adobe-commerce/elsie/src/icons/ChevronDown.svg","../../node_modules/@adobe-commerce/elsie/src/icons/ChevronUp.svg","../../node_modules/@adobe-commerce/elsie/src/icons/Coupon.svg","/@dropins/storefront-quote-management/src/components/OrderSummary/OrderSummary.tsx","/@dropins/storefront-quote-management/src/containers/OrderSummary/OrderSummary.tsx"],"sourcesContent":["import * as React from \"react\";\nconst SvgChevronDown = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M7.74512 9.87701L12.0001 14.132L16.2551 9.87701\", stroke: \"currentColor\", strokeWidth: 1.5, strokeLinecap: \"square\", strokeLinejoin: \"round\" }));\nexport default SvgChevronDown;\n","import * as React from \"react\";\nconst SvgChevronUp = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M7.74512 14.132L12.0001 9.87701L16.2551 14.132\", stroke: \"currentColor\", strokeWidth: 1.5, strokeLinecap: \"square\", strokeLinejoin: \"round\" }));\nexport default SvgChevronUp;\n","import * as React from \"react\";\nconst SvgCoupon = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M22 6.25H22.75C22.75 5.83579 22.4142 5.5 22 5.5V6.25ZM22 9.27L22.2514 9.97663C22.5503 9.87029 22.75 9.58731 22.75 9.27H22ZM20.26 12.92L19.5534 13.1714L19.5539 13.1728L20.26 12.92ZM22 14.66H22.75C22.75 14.3433 22.551 14.0607 22.2528 13.9539L22 14.66ZM22 17.68V18.43C22.4142 18.43 22.75 18.0942 22.75 17.68H22ZM2 17.68H1.25C1.25 18.0942 1.58579 18.43 2 18.43V17.68ZM2 14.66L1.74865 13.9534C1.44969 14.0597 1.25 14.3427 1.25 14.66H2ZM3.74 11.01L4.44663 10.7586L4.44611 10.7572L3.74 11.01ZM2 9.27H1.25C1.25 9.58675 1.44899 9.86934 1.7472 9.97611L2 9.27ZM2 6.25V5.5C1.58579 5.5 1.25 5.83579 1.25 6.25H2ZM21.25 6.25V9.27H22.75V6.25H21.25ZM21.7486 8.56337C19.8706 9.23141 18.8838 11.2889 19.5534 13.1714L20.9666 12.6686C20.5762 11.5711 21.1494 10.3686 22.2514 9.97663L21.7486 8.56337ZM19.5539 13.1728C19.9195 14.1941 20.7259 15.0005 21.7472 15.3661L22.2528 13.9539C21.6541 13.7395 21.1805 13.2659 20.9661 12.6672L19.5539 13.1728ZM21.25 14.66V17.68H22.75V14.66H21.25ZM22 16.93H2V18.43H22V16.93ZM2.75 17.68V14.66H1.25V17.68H2.75ZM2.25135 15.3666C4.12941 14.6986 5.11623 12.6411 4.44663 10.7586L3.03337 11.2614C3.42377 12.3589 2.85059 13.5614 1.74865 13.9534L2.25135 15.3666ZM4.44611 10.7572C4.08045 9.73588 3.27412 8.92955 2.2528 8.56389L1.7472 9.97611C2.34588 10.1905 2.81955 10.6641 3.03389 11.2628L4.44611 10.7572ZM2.75 9.27V6.25H1.25V9.27H2.75ZM2 7H22V5.5H2V7ZM7.31 6.74V18.17H8.81V6.74H7.31ZM17.0997 8.39967L11.0397 14.4597L12.1003 15.5203L18.1603 9.46033L17.0997 8.39967ZM12.57 9.67C12.57 9.87231 12.4159 10 12.27 10V11.5C13.2839 11.5 14.07 10.6606 14.07 9.67H12.57ZM12.27 10C12.1241 10 11.97 9.87231 11.97 9.67H10.47C10.47 10.6606 11.2561 11.5 12.27 11.5V10ZM11.97 9.67C11.97 9.46769 12.1241 9.34 12.27 9.34V7.84C11.2561 7.84 10.47 8.67938 10.47 9.67H11.97ZM12.27 9.34C12.4159 9.34 12.57 9.46769 12.57 9.67H14.07C14.07 8.67938 13.2839 7.84 12.27 7.84V9.34ZM17.22 14.32C17.22 14.5223 17.0659 14.65 16.92 14.65V16.15C17.9339 16.15 18.72 15.3106 18.72 14.32H17.22ZM16.92 14.65C16.7741 14.65 16.62 14.5223 16.62 14.32H15.12C15.12 15.3106 15.9061 16.15 16.92 16.15V14.65ZM16.62 14.32C16.62 14.1177 16.7741 13.99 16.92 13.99V12.49C15.9061 12.49 15.12 13.3294 15.12 14.32H16.62ZM16.92 13.99C17.0659 13.99 17.22 14.1177 17.22 14.32H18.72C18.72 13.3294 17.9339 12.49 16.92 12.49V13.99Z\", fill: \"currentColor\" }));\nexport default SvgCoupon;\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 '@/quote-management/components/OrderSummary/OrderSummary.css';\nimport { OrderSummaryLine } from '@/quote-management/containers/OrderSummaryLine/OrderSummaryLine';\nimport {\n Accordion,\n AccordionSection,\n Divider,\n} from '@adobe-commerce/elsie/components';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { ChevronDown, ChevronUp } from '@adobe-commerce/elsie/icons';\nimport { classes, VComponent } from '@adobe-commerce/elsie/lib';\nimport { FunctionComponent, VNode } from 'preact';\nimport { HTMLAttributes, useState } from 'preact/compat';\nimport { JSXInternal } from 'preact/src/jsx';\n\nexport interface OrderSummaryLineItem {\n key: string;\n title?: string;\n className?: string;\n sortOrder: number;\n content:\n | string\n | JSXInternal.Element\n | VNode<HTMLAttributes<HTMLDivElement>>\n | OrderSummaryLineItem[]\n | undefined;\n}\n\nexport interface OrderSummaryProps extends HTMLAttributes<HTMLDivElement> {\n variant?: 'primary' | 'secondary';\n heading?: VNode<HTMLAttributes<HTMLDivElement>>;\n subTotal?: {\n price: VNode<HTMLAttributes<HTMLSpanElement>>;\n priceExcludingTax?: VNode<HTMLAttributes<HTMLSpanElement>>;\n taxIncluded?: boolean;\n taxExcluded?: boolean;\n };\n shipping?: {\n price: VNode<HTMLAttributes<HTMLSpanElement>>;\n priceExcludingTax?: VNode<HTMLAttributes<HTMLSpanElement>>;\n taxIncluded?: boolean;\n taxExcluded?: boolean;\n };\n discounts?: {\n label: string;\n price: VNode<HTMLAttributes<HTMLSpanElement>>;\n caption?: VNode<HTMLAttributes<HTMLDivElement>>;\n coupon?: VNode<HTMLAttributes<HTMLSpanElement>>;\n }[];\n taxTotal?: {\n price: VNode<HTMLAttributes<HTMLSpanElement>>;\n };\n taxesApplied?: {\n label: string;\n price: VNode<HTMLAttributes<HTMLSpanElement>>;\n }[];\n total?: {\n price: VNode<HTMLAttributes<HTMLSpanElement>>;\n priceWithoutTax?: VNode<HTMLAttributes<HTMLSpanElement>>;\n };\n totalSaved?: VNode<HTMLAttributes<HTMLSpanElement>>;\n updateLineItems?: (\n lineItems: Array<OrderSummaryLineItem>\n ) => Array<OrderSummaryLineItem>;\n}\n\nexport const OrderSummary: FunctionComponent<OrderSummaryProps> = ({\n className,\n children,\n variant = 'primary',\n heading,\n subTotal,\n shipping,\n discounts,\n taxTotal,\n taxesApplied,\n total,\n totalSaved,\n updateLineItems = (lineItems) => lineItems,\n ...props\n}) => {\n const [showTaxBreakdown, setShowTaxBreakdown] = useState(false);\n\n const translations = useText({\n // Taxes\n taxesBreakdownTitle: 'NegotiableQuote.PriceSummary.taxes.breakdown',\n taxTotal: 'NegotiableQuote.PriceSummary.taxes.total',\n taxTotalOnly: 'NegotiableQuote.PriceSummary.taxes.totalOnly',\n showTaxBreakdown: 'NegotiableQuote.PriceSummary.taxes.showBreakdown',\n hideTaxBreakdown: 'NegotiableQuote.PriceSummary.taxes.hideBreakdown',\n\n // Subtotal\n subtotalLabel: 'NegotiableQuote.PriceSummary.subTotal.label',\n subtotalWithTaxes: 'NegotiableQuote.PriceSummary.subTotal.withTaxes',\n subtotalWithoutTaxes: 'NegotiableQuote.PriceSummary.subTotal.withoutTaxes',\n\n // Shipping\n shippingLabel: 'NegotiableQuote.PriceSummary.shipping.label',\n shippingWithTaxes: 'NegotiableQuote.PriceSummary.shipping.withTaxes',\n shippingWithoutTaxes: 'NegotiableQuote.PriceSummary.shipping.withoutTaxes',\n\n // Total\n totalLabel: 'NegotiableQuote.PriceSummary.total.label',\n totalWithoutTax: 'NegotiableQuote.PriceSummary.total.withoutTax',\n totalSaved: 'NegotiableQuote.PriceSummary.total.saved',\n });\n\n const subTotalContent = subTotal && (\n <OrderSummaryLine\n key={translations.subtotalLabel}\n label={translations.subtotalLabel}\n price={subTotal.price}\n classSuffixes={['subTotal']}\n >\n {subTotal.taxIncluded && (\n <div\n data-testid=\"sub-total-tax-caption\"\n className=\"quote-order-summary__caption\"\n >\n <span>{translations.subtotalWithTaxes}</span>\n </div>\n )}\n\n {subTotal.taxExcluded ? (\n <div\n data-testid=\"sub-total-tax-caption-excluded\"\n className=\"quote-order-summary__caption\"\n >\n <span>\n {subTotal.priceExcludingTax}\n \n {translations.subtotalWithoutTaxes}\n </span>\n </div>\n ) : undefined}\n </OrderSummaryLine>\n );\n\n const shippingContent = shipping && (\n <OrderSummaryLine\n key={translations.shippingLabel}\n label={translations.shippingLabel}\n price={shipping.price}\n classSuffixes={['shipping']}\n >\n {shipping.taxIncluded && (\n <div\n data-testid=\"shipping-tax-caption\"\n className=\"quote-order-summary__caption\"\n >\n <span>{translations.shippingWithTaxes}</span>\n </div>\n )}\n\n {shipping.taxExcluded ? (\n <div\n data-testid=\"shipping-tax-caption-excluded\"\n className=\"quote-order-summary__caption\"\n >\n <span>\n {shipping.priceExcludingTax}\n \n {translations.shippingWithoutTaxes}\n </span>\n </div>\n ) : undefined}\n </OrderSummaryLine>\n );\n\n const discountsContent = discounts && discounts.length > 0 && (\n <>\n {discounts.map((discount) => (\n <OrderSummaryLine\n key={discount.label}\n label={discount.label}\n price={discount.price}\n classSuffixes={['discount']}\n >\n {discount.coupon && (\n <VComponent\n node={discount.coupon}\n className=\"quote-order-summary__coupon__code\"\n />\n )}\n\n {discount.caption && (\n <VComponent\n node={discount.caption}\n className=\"quote-order-summary__caption\"\n />\n )}\n </OrderSummaryLine>\n ))}\n </>\n );\n\n const taxContent =\n taxesApplied && taxesApplied.length > 0 ? (\n /* Show breakdown if provided */\n <Accordion\n data-testid=\"tax-breakdown\"\n className=\"quote-order-summary__taxes\"\n iconOpen={ChevronDown}\n iconClose={ChevronUp}\n >\n <AccordionSection\n ariaLabelTitle={translations.taxesBreakdownTitle}\n title={translations.taxesBreakdownTitle}\n secondaryText={\n !showTaxBreakdown && taxTotal ? (\n <VComponent\n node={taxTotal.price}\n className=\"quote-order-summary__price\"\n />\n ) : undefined\n }\n renderContentWhenClosed={false}\n onStateChange={setShowTaxBreakdown}\n >\n <div className=\"quote-order-summary__appliedTaxes\">\n {taxesApplied.map((tax) => (\n <OrderSummaryLine\n key={tax.label}\n label={tax.label}\n price={tax.price}\n classSuffixes={['taxEntry']}\n labelClassSuffix=\"muted\"\n />\n ))}\n </div>\n\n {taxTotal && (\n <OrderSummaryLine\n label={translations.taxTotal}\n price={taxTotal.price}\n classSuffixes={['taxTotal']}\n labelClassSuffix=\"muted\"\n />\n )}\n </AccordionSection>\n </Accordion>\n ) : (\n taxTotal && (\n <OrderSummaryLine\n label={translations.taxTotalOnly}\n price={taxTotal.price}\n classSuffixes={['taxTotal']}\n testId=\"tax-total-only\"\n />\n )\n );\n\n const lineItems: Array<OrderSummaryLineItem> = [\n {\n key: 'subTotalContent',\n sortOrder: 100,\n content: subTotalContent,\n },\n {\n key: 'shippingContent',\n sortOrder: 200,\n content: shippingContent,\n },\n {\n key: 'discountsContent',\n sortOrder: 600,\n content: discountsContent,\n },\n {\n key: 'taxContent',\n sortOrder: 800,\n content: taxContent,\n },\n ...(total\n ? [\n {\n key: 'totalContent',\n sortOrder: 900,\n content: (\n <OrderSummaryLine\n label={translations.totalLabel}\n price={total.price}\n classSuffixes={['total', 'total--padded']}\n testId=\"total-content\"\n labelClassSuffix=\"bold\"\n />\n ),\n },\n ]\n : []),\n ...(total?.priceWithoutTax\n ? [\n {\n key: 'totalWithoutTaxContent',\n sortOrder: 1000,\n content: (\n <OrderSummaryLine\n label={translations.totalWithoutTax}\n price={total.priceWithoutTax}\n classSuffixes={['totalWithoutTax']}\n testId=\"total-without-tax\"\n labelClassSuffix=\"muted\"\n />\n ),\n },\n ]\n : []),\n ...(totalSaved\n ? [\n {\n key: 'totalSavedContent',\n sortOrder: 1100,\n content: (\n <OrderSummaryLine\n label={translations.totalSaved}\n price={totalSaved}\n classSuffixes={['saved']}\n testId=\"total-saved\"\n labelClassSuffix=\"muted\"\n />\n ),\n },\n ]\n : []),\n ];\n\n const updatedLineItems: Array<OrderSummaryLineItem> = updateLineItems(\n lineItems\n ).sort(\n (currentLine: OrderSummaryLineItem, nextLine: OrderSummaryLineItem) => {\n return currentLine.sortOrder - nextLine.sortOrder;\n }\n );\n\n return (\n <div\n {...props}\n className={classes([\n 'quote-order-summary',\n [`quote-order-summary__${variant}`, variant],\n className,\n ])}\n >\n <div className=\"quote-order-summary__heading\">\n {heading && (\n <VComponent\n node={heading}\n className=\"quote-order-summary__heading-text\"\n />\n )}\n\n <Divider\n variant=\"primary\"\n className=\"quote-order-summary__divider-primary\"\n />\n </div>\n\n <div className=\"quote-order-summary__content\">\n {updatedLineItems.map((line: OrderSummaryLineItem) => {\n if (Array.isArray(line.content)) {\n return (\n <Accordion\n key={line.key}\n className={line.className}\n actionIconPosition={'right'}\n iconOpen={ChevronDown}\n iconClose={ChevronUp}\n >\n <AccordionSection\n defaultOpen={false}\n title={line.title}\n renderContentWhenClosed={false}\n >\n {line.content.map((innerLine) => {\n return innerLine.content;\n })}\n </AccordionSection>\n </Accordion>\n );\n }\n return line.content;\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 {\n OrderSummary as OrderSummaryComponent,\n OrderSummaryLineItem,\n} from '@/quote-management/components';\nimport {\n NegotiableQuoteModel,\n QuoteDisplayAmount,\n} from '@/quote-management/data/models';\nimport { state } from '@/quote-management/lib/state';\nimport { Icon, Price } from '@adobe-commerce/elsie/components';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { Coupon } from '@adobe-commerce/elsie/icons';\nimport { Container } from '@adobe-commerce/elsie/lib';\nimport { events } from '@adobe-commerce/event-bus';\nimport { HTMLAttributes, useEffect, useState } from 'preact/compat';\n\nexport interface OrderSummaryProps extends HTMLAttributes<HTMLDivElement> {\n showTotalSaved?: boolean;\n updateLineItems?: (\n lineItems: Array<OrderSummaryLineItem>\n ) => Array<OrderSummaryLineItem>;\n}\n\nexport const OrderSummary: Container<\n OrderSummaryProps,\n NegotiableQuoteModel | null\n> = ({\n children,\n initialData = null,\n showTotalSaved,\n updateLineItems = (lineItems) => lineItems,\n ...props\n}) => {\n const [data, setData] = useState<NegotiableQuoteModel | null>(initialData);\n const isVirtual = data?.isVirtual;\n\n const { quoteDisplaySettings } = state.config;\n\n const isZeroTax = Boolean(quoteDisplaySettings?.zeroTax);\n\n const isTaxIncludedInSubtotal =\n quoteDisplaySettings?.subtotal === QuoteDisplayAmount.TAX_INCLUDED;\n const isTaxIncludedAndExcludedInSubtotal =\n quoteDisplaySettings.subtotal ===\n QuoteDisplayAmount.TAX_INCLUDED_AND_EXCLUDED;\n\n const isTaxIncludedInShipping =\n quoteDisplaySettings?.shipping === QuoteDisplayAmount.TAX_INCLUDED;\n const isTaxIncludedAndExcludedInShipping =\n quoteDisplaySettings.shipping ===\n QuoteDisplayAmount.TAX_INCLUDED_AND_EXCLUDED;\n\n useEffect(() => {\n const dataEvent = events.on(\n 'quote-management/quote-data',\n (payload) => {\n setData(payload.quote as NegotiableQuoteModel);\n },\n { eager: true }\n );\n\n return () => {\n dataEvent?.off();\n };\n }, []);\n\n const translations = useText({\n free: 'NegotiableQuote.PriceSummary.total.free',\n orderSummary: 'NegotiableQuote.PriceSummary.orderSummary',\n taxToBeDetermined: 'NegotiableQuote.PriceSummary.taxToBeDetermined',\n });\n\n if (!Object.keys(data ?? {}).length) {\n return null;\n }\n\n return (\n <OrderSummaryComponent\n {...props}\n data-testid=\"quote-order-summary\"\n heading={<div>{translations.orderSummary}</div>}\n updateLineItems={updateLineItems}\n subTotal={{\n taxIncluded: isTaxIncludedInSubtotal && !isZeroTax,\n taxExcluded: isTaxIncludedAndExcludedInSubtotal,\n priceExcludingTax: (\n <Price\n data-testid=\"subtotal\"\n amount={data?.prices?.subtotalExcludingTax?.value}\n currency={data?.prices?.subtotalExcludingTax?.currency}\n />\n ),\n price:\n (!isZeroTax && isTaxIncludedInSubtotal) ||\n (!isZeroTax && isTaxIncludedAndExcludedInSubtotal) ? (\n <Price\n data-testid=\"subtotal\"\n amount={data?.prices?.subtotalIncludingTax?.value}\n currency={data?.prices?.subtotalIncludingTax?.currency}\n />\n ) : (\n <Price\n data-testid=\"subtotal\"\n amount={data?.prices?.subtotalExcludingTax?.value}\n currency={data?.prices?.subtotalExcludingTax?.currency}\n />\n ),\n }}\n shipping={{\n taxIncluded: isTaxIncludedInShipping && !isZeroTax,\n taxExcluded: isTaxIncludedAndExcludedInShipping,\n priceExcludingTax: (\n <Price\n data-testid=\"shipping\"\n amount={data?.prices?.shippingExcludingTax?.value}\n currency={data?.prices?.shippingExcludingTax?.currency}\n />\n ),\n price:\n (!isZeroTax && isTaxIncludedInShipping) ||\n (!isZeroTax && isTaxIncludedAndExcludedInShipping) ? (\n <Price\n data-testid=\"shipping\"\n amount={data?.prices?.shippingIncludingTax?.value}\n currency={data?.prices?.shippingIncludingTax?.currency}\n />\n ) : (\n <Price\n data-testid=\"shipping\"\n amount={data?.prices?.shippingExcludingTax?.value}\n currency={data?.prices?.shippingExcludingTax?.currency}\n />\n ),\n }}\n discounts={data?.prices?.appliedDiscounts?.map((discount) => {\n return {\n label: discount.label,\n price: (\n <Price\n data-testid=\"summary-discount-total\"\n amount={-discount.amount.value}\n currency={discount.amount.currency}\n sale={true}\n />\n ),\n coupon: discount?.coupon ? (\n <span>\n <Icon source={Coupon} size=\"16\" />\n {discount?.coupon?.code}\n </span>\n ) : undefined,\n };\n })}\n taxTotal={\n isVirtual && !data?.prices?.appliedTaxes?.length\n ? {\n price: (\n <span data-testid=\"tax-total-tbd\">\n {translations.taxToBeDetermined}\n </span>\n ),\n }\n : {\n price: (\n <Price\n data-testid=\"tax-total-actual\"\n amount={data?.prices?.totalTax?.value}\n currency={data?.prices?.totalTax?.currency}\n />\n ),\n }\n }\n taxesApplied={\n isVirtual\n ? undefined\n : quoteDisplaySettings?.fullSummary\n ? data?.prices?.appliedTaxes?.map((tax: any) => ({\n label: tax.label,\n price: (\n <Price\n data-testid=\"applied-taxes\"\n amount={tax.amount.value}\n currency={tax.amount.currency}\n />\n ),\n }))\n : undefined\n }\n total={{\n price:\n data?.prices?.grandTotal?.value === 0 ? (\n <span data-testid=\"total-including-tax\">{translations.free}</span>\n ) : (\n <Price\n data-testid=\"total-including-tax-actual\"\n amount={data?.prices?.grandTotal?.value}\n currency={data?.prices?.grandTotal?.currency}\n />\n ),\n priceWithoutTax: quoteDisplaySettings?.grandTotal ? (\n data?.prices?.grandTotalExcludingTax?.value === 0 ? (\n <span data-testid=\"total-excluding-tax\">{translations.free}</span>\n ) : (\n <Price\n data-testid=\"total-excluding-tax\"\n amount={data?.prices?.grandTotalExcludingTax?.value}\n currency={data?.prices?.grandTotalExcludingTax?.currency}\n />\n )\n ) : undefined,\n }}\n totalSaved={\n showTotalSaved ? (\n <Price\n amount={data?.prices?.discount?.value}\n currency={data?.prices?.grandTotal?.currency}\n />\n ) : undefined\n }\n />\n );\n};\n"],"names":["SvgChevronDown","props","React","SvgChevronUp","SvgCoupon","OrderSummary","className","children","variant","heading","subTotal","shipping","discounts","taxTotal","taxesApplied","total","totalSaved","updateLineItems","lineItems","showTaxBreakdown","setShowTaxBreakdown","useState","translations","useText","subTotalContent","jsxs","OrderSummaryLine","jsx","shippingContent","discountsContent","Fragment","discount","VComponent","taxContent","Accordion","ChevronDown","ChevronUp","AccordionSection","tax","updatedLineItems","currentLine","nextLine","classes","Divider","line","innerLine","initialData","showTotalSaved","data","setData","isVirtual","quoteDisplaySettings","state","isZeroTax","isTaxIncludedInSubtotal","QuoteDisplayAmount","isTaxIncludedAndExcludedInSubtotal","isTaxIncludedInShipping","isTaxIncludedAndExcludedInShipping","useEffect","dataEvent","events","payload","OrderSummaryComponent","Price","_b","_a","_d","_c","_f","_e","_h","_g","_j","_i","_l","_k","_n","_m","_p","_o","_r","_q","_t","_s","_v","_u","_x","_w","_z","_y","Icon","Coupon","_B","_A","_D","_C","_F","_E","_H","_G","_J","_I","_L","_K","_N","_M","_P","_O","_R","_Q","_T","_S","_V","_U","_X","_W"],"mappings":"2zBACA,MAAMA,GAAkBC,GAA0BC,EAAM,cAAc,MAAO,CAAE,MAAO,GAAI,OAAQ,GAAI,QAAS,YAAa,KAAM,OAAQ,MAAO,6BAA8B,GAAGD,CAAK,EAAoBC,EAAM,cAAc,OAAQ,CAAE,EAAG,kDAAmD,OAAQ,eAAgB,YAAa,IAAK,cAAe,SAAU,eAAgB,OAAO,CAAE,CAAC,ECAtXC,GAAgBF,GAA0BC,EAAM,cAAc,MAAO,CAAE,MAAO,GAAI,OAAQ,GAAI,QAAS,YAAa,KAAM,OAAQ,MAAO,6BAA8B,GAAGD,CAAK,EAAoBC,EAAM,cAAc,OAAQ,CAAE,EAAG,iDAAkD,OAAQ,eAAgB,YAAa,IAAK,cAAe,SAAU,eAAgB,OAAO,CAAE,CAAC,ECAnXE,GAAaH,GAA0BC,EAAM,cAAc,MAAO,CAAE,MAAO,GAAI,OAAQ,GAAI,QAAS,YAAa,KAAM,OAAQ,MAAO,6BAA8B,GAAGD,CAAK,EAAoBC,EAAM,cAAc,OAAQ,CAAE,aAAc,qBAAsB,EAAG,quEAAsuE,KAAM,cAAc,CAAE,CAAC,ECyE3/EG,GAAqD,CAAC,CACjE,UAAAC,EACA,SAAAC,EACA,QAAAC,EAAU,UACV,QAAAC,EACA,SAAAC,EACA,SAAAC,EACA,UAAAC,EACA,SAAAC,EACA,aAAAC,EACA,MAAAC,EACA,WAAAC,EACA,gBAAAC,EAAmBC,GAAcA,EACjC,GAAGjB,CACL,IAAM,CACJ,KAAM,CAACkB,EAAkBC,CAAmB,EAAIC,GAAS,EAAK,EAExDC,EAAeC,GAAQ,CAE3B,oBAAqB,+CACrB,SAAU,2CACV,aAAc,+CACd,iBAAkB,mDAClB,iBAAkB,mDAGlB,cAAe,8CACf,kBAAmB,kDACnB,qBAAsB,qDAGtB,cAAe,8CACf,kBAAmB,kDACnB,qBAAsB,qDAGtB,WAAY,2CACZ,gBAAiB,gDACjB,WAAY,0CAAA,CACb,EAEKC,EAAkBd,GACtBe,EAACC,EAAA,CAEC,MAAOJ,EAAa,cACpB,MAAOZ,EAAS,MAChB,cAAe,CAAC,UAAU,EAEzB,SAAA,CAAAA,EAAS,aACRiB,EAAC,MAAA,CACC,cAAY,wBACZ,UAAU,+BAEV,SAAAA,EAAC,OAAA,CAAM,SAAAL,EAAa,iBAAA,CAAkB,CAAA,CAAA,EAIzCZ,EAAS,YACRiB,EAAC,MAAA,CACC,cAAY,iCACZ,UAAU,+BAEV,WAAC,OAAA,CACE,SAAA,CAAAjB,EAAS,kBAAkB,IAE3BY,EAAa,oBAAA,CAAA,CAChB,CAAA,CAAA,EAEA,MAAA,CAAA,EAzBCA,EAAa,aAAA,EA6BhBM,EAAkBjB,GACtBc,EAACC,EAAA,CAEC,MAAOJ,EAAa,cACpB,MAAOX,EAAS,MAChB,cAAe,CAAC,UAAU,EAEzB,SAAA,CAAAA,EAAS,aACRgB,EAAC,MAAA,CACC,cAAY,uBACZ,UAAU,+BAEV,SAAAA,EAAC,OAAA,CAAM,SAAAL,EAAa,iBAAA,CAAkB,CAAA,CAAA,EAIzCX,EAAS,YACRgB,EAAC,MAAA,CACC,cAAY,gCACZ,UAAU,+BAEV,WAAC,OAAA,CACE,SAAA,CAAAhB,EAAS,kBAAkB,IAE3BW,EAAa,oBAAA,CAAA,CAChB,CAAA,CAAA,EAEA,MAAA,CAAA,EAzBCA,EAAa,aAAA,EA6BhBO,EAAmBjB,GAAaA,EAAU,OAAS,GACvDe,EAAAG,GAAA,CACG,SAAAlB,EAAU,IAAKmB,GACdN,EAACC,EAAA,CAEC,MAAOK,EAAS,MAChB,MAAOA,EAAS,MAChB,cAAe,CAAC,UAAU,EAEzB,SAAA,CAAAA,EAAS,QACRJ,EAACK,EAAA,CACC,KAAMD,EAAS,OACf,UAAU,mCAAA,CAAA,EAIbA,EAAS,SACRJ,EAACK,EAAA,CACC,KAAMD,EAAS,QACf,UAAU,8BAAA,CAAA,CACZ,CAAA,EAhBGA,EAAS,KAAA,CAmBjB,EACH,EAGIE,EACJnB,GAAgBA,EAAa,OAAS,EAEpCa,EAACO,GAAA,CACC,cAAY,gBACZ,UAAU,6BACV,SAAUC,GACV,UAAWC,GAEX,SAAAX,EAACY,GAAA,CACC,eAAgBf,EAAa,oBAC7B,MAAOA,EAAa,oBACpB,cACE,CAACH,GAAoBN,EACnBc,EAACK,EAAA,CACC,KAAMnB,EAAS,MACf,UAAU,4BAAA,CAAA,EAEV,OAEN,wBAAyB,GACzB,cAAeO,EAEf,SAAA,CAAAO,EAAC,OAAI,UAAU,oCACZ,SAAAb,EAAa,IAAKwB,GACjBX,EAACD,EAAA,CAEC,MAAOY,EAAI,MACX,MAAOA,EAAI,MACX,cAAe,CAAC,UAAU,EAC1B,iBAAiB,OAAA,EAJZA,EAAI,KAAA,CAMZ,EACH,EAECzB,GACCc,EAACD,EAAA,CACC,MAAOJ,EAAa,SACpB,MAAOT,EAAS,MAChB,cAAe,CAAC,UAAU,EAC1B,iBAAiB,OAAA,CAAA,CACnB,CAAA,CAAA,CAEJ,CAAA,EAGFA,GACEc,EAACD,EAAA,CACC,MAAOJ,EAAa,aACpB,MAAOT,EAAS,MAChB,cAAe,CAAC,UAAU,EAC1B,OAAO,gBAAA,CAAA,EAKTK,EAAyC,CAC7C,CACE,IAAK,kBACL,UAAW,IACX,QAASM,CAAA,EAEX,CACE,IAAK,kBACL,UAAW,IACX,QAASI,CAAA,EAEX,CACE,IAAK,mBACL,UAAW,IACX,QAASC,CAAA,EAEX,CACE,IAAK,aACL,UAAW,IACX,QAASI,CAAA,EAEX,GAAIlB,EACA,CACE,CACE,IAAK,eACL,UAAW,IACX,QACEY,EAACD,EAAA,CACC,MAAOJ,EAAa,WACpB,MAAOP,EAAM,MACb,cAAe,CAAC,QAAS,eAAe,EACxC,OAAO,gBACP,iBAAiB,MAAA,CAAA,CACnB,CAEJ,EAEF,CAAA,EACJ,GAAIA,GAAA,MAAAA,EAAO,gBACP,CACE,CACE,IAAK,yBACL,UAAW,IACX,QACEY,EAACD,EAAA,CACC,MAAOJ,EAAa,gBACpB,MAAOP,EAAM,gBACb,cAAe,CAAC,iBAAiB,EACjC,OAAO,oBACP,iBAAiB,OAAA,CAAA,CACnB,CAEJ,EAEF,CAAA,EACJ,GAAIC,EACA,CACE,CACE,IAAK,oBACL,UAAW,KACX,QACEW,EAACD,EAAA,CACC,MAAOJ,EAAa,WACpB,MAAON,EACP,cAAe,CAAC,OAAO,EACvB,OAAO,cACP,iBAAiB,OAAA,CAAA,CACnB,CAEJ,EAEF,CAAA,CAAC,EAGDuB,EAAgDtB,EACpDC,CAAA,EACA,KACA,CAACsB,EAAmCC,IAC3BD,EAAY,UAAYC,EAAS,SAC1C,EAGF,OACEhB,EAAC,MAAA,CACE,GAAGxB,EACJ,UAAWyC,GAAQ,CACjB,sBACA,CAAC,wBAAwBlC,CAAO,GAAIA,CAAO,EAC3CF,CAAA,CACD,EAED,SAAA,CAAAmB,EAAC,MAAA,CAAI,UAAU,+BACZ,SAAA,CAAAhB,GACCkB,EAACK,EAAA,CACC,KAAMvB,EACN,UAAU,mCAAA,CAAA,EAIdkB,EAACgB,GAAA,CACC,QAAQ,UACR,UAAU,sCAAA,CAAA,CACZ,EACF,IAEC,MAAA,CAAI,UAAU,+BACZ,SAAAJ,EAAiB,IAAKK,GACjB,MAAM,QAAQA,EAAK,OAAO,EAE1BjB,EAACO,GAAA,CAEC,UAAWU,EAAK,UAChB,mBAAoB,QACpB,SAAUT,GACV,UAAWC,GAEX,SAAAT,EAACU,GAAA,CACC,YAAa,GACb,MAAOO,EAAK,MACZ,wBAAyB,GAExB,SAAAA,EAAK,QAAQ,IAAKC,GACVA,EAAU,OAClB,CAAA,CAAA,CACH,EAdKD,EAAK,GAAA,EAkBTA,EAAK,OACb,CAAA,CACH,CAAA,CAAA,CAAA,CAGN,ECzWavC,GAGT,CAAC,CACH,SAAAE,EACA,YAAAuC,EAAc,KACd,eAAAC,EACA,gBAAA9B,EAAmBC,GAAcA,EACjC,GAAGjB,CACL,IAAM,6HACJ,KAAM,CAAC+C,EAAMC,CAAO,EAAI5B,GAAsCyB,CAAW,EACnEI,EAAYF,GAAA,YAAAA,EAAM,UAElB,CAAE,qBAAAG,GAAyBC,GAAM,OAEjCC,EAAY,GAAQF,GAAA,MAAAA,EAAsB,SAE1CG,GACJH,GAAA,YAAAA,EAAsB,YAAaI,EAAmB,aAClDC,EACJL,EAAqB,WACrBI,EAAmB,0BAEfE,GACJN,GAAA,YAAAA,EAAsB,YAAaI,EAAmB,aAClDG,EACJP,EAAqB,WACrBI,EAAmB,0BAErBI,GAAU,IAAM,CACd,MAAMC,EAAYC,GAAO,GACvB,8BACCC,GAAY,CACXb,EAAQa,EAAQ,KAA6B,CAC/C,EACA,CAAE,MAAO,EAAA,CAAK,EAGhB,MAAO,IAAM,CACXF,GAAA,MAAAA,EAAW,KACb,CACF,EAAG,CAAA,CAAE,EAEL,MAAMtC,EAAeC,GAAQ,CAC3B,KAAM,0CACN,aAAc,4CACd,kBAAmB,gDAAA,CACpB,EAED,OAAK,OAAO,KAAKyB,GAAQ,CAAA,CAAE,EAAE,OAK3BrB,EAACoC,GAAA,CACE,GAAG9D,EACJ,cAAY,sBACZ,QAAS0B,EAAC,MAAA,CAAK,SAAAL,EAAa,aAAa,EACzC,gBAAAL,EACA,SAAU,CACR,YAAaqC,GAA2B,CAACD,EACzC,YAAaG,EACb,kBACE7B,EAACqC,EAAA,CACC,cAAY,WACZ,QAAQC,GAAAC,EAAAlB,GAAA,YAAAA,EAAM,SAAN,YAAAkB,EAAc,uBAAd,YAAAD,EAAoC,MAC5C,UAAUE,GAAAC,EAAApB,GAAA,YAAAA,EAAM,SAAN,YAAAoB,EAAc,uBAAd,YAAAD,EAAoC,QAAA,CAAA,EAGlD,MACG,CAACd,GAAaC,GACd,CAACD,GAAaG,EACb7B,EAACqC,EAAA,CACC,cAAY,WACZ,QAAQK,GAAAC,EAAAtB,GAAA,YAAAA,EAAM,SAAN,YAAAsB,EAAc,uBAAd,YAAAD,EAAoC,MAC5C,UAAUE,GAAAC,EAAAxB,GAAA,YAAAA,EAAM,SAAN,YAAAwB,EAAc,uBAAd,YAAAD,EAAoC,QAAA,CAAA,EAGhD5C,EAACqC,EAAA,CACC,cAAY,WACZ,QAAQS,GAAAC,EAAA1B,GAAA,YAAAA,EAAM,SAAN,YAAA0B,EAAc,uBAAd,YAAAD,EAAoC,MAC5C,UAAUE,GAAAC,EAAA5B,GAAA,YAAAA,EAAM,SAAN,YAAA4B,EAAc,uBAAd,YAAAD,EAAoC,QAAA,CAAA,CAChD,EAGN,SAAU,CACR,YAAalB,GAA2B,CAACJ,EACzC,YAAaK,EACb,kBACE/B,EAACqC,EAAA,CACC,cAAY,WACZ,QAAQa,GAAAC,EAAA9B,GAAA,YAAAA,EAAM,SAAN,YAAA8B,EAAc,uBAAd,YAAAD,EAAoC,MAC5C,UAAUE,GAAAC,EAAAhC,GAAA,YAAAA,EAAM,SAAN,YAAAgC,EAAc,uBAAd,YAAAD,EAAoC,QAAA,CAAA,EAGlD,MACG,CAAC1B,GAAaI,GACd,CAACJ,GAAaK,EACb/B,EAACqC,EAAA,CACC,cAAY,WACZ,QAAQiB,GAAAC,EAAAlC,GAAA,YAAAA,EAAM,SAAN,YAAAkC,EAAc,uBAAd,YAAAD,EAAoC,MAC5C,UAAUE,GAAAC,EAAApC,GAAA,YAAAA,EAAM,SAAN,YAAAoC,EAAc,uBAAd,YAAAD,EAAoC,QAAA,CAAA,EAGhDxD,EAACqC,EAAA,CACC,cAAY,WACZ,QAAQqB,GAAAC,EAAAtC,GAAA,YAAAA,EAAM,SAAN,YAAAsC,EAAc,uBAAd,YAAAD,EAAoC,MAC5C,UAAUE,GAAAC,EAAAxC,GAAA,YAAAA,EAAM,SAAN,YAAAwC,EAAc,uBAAd,YAAAD,EAAoC,QAAA,CAAA,CAChD,EAGN,WAAWE,GAAAC,EAAA1C,GAAA,YAAAA,EAAM,SAAN,YAAA0C,EAAc,mBAAd,YAAAD,EAAgC,IAAK1D,GAAa,OAC3D,MAAO,CACL,MAAOA,EAAS,MAChB,MACEJ,EAACqC,EAAA,CACC,cAAY,yBACZ,OAAQ,CAACjC,EAAS,OAAO,MACzB,SAAUA,EAAS,OAAO,SAC1B,KAAM,EAAA,CAAA,EAGV,OAAQA,GAAA,MAAAA,EAAU,OAChBN,EAAC,OAAA,CACC,SAAA,CAAAE,EAACgE,GAAA,CAAK,OAAQC,GAAQ,KAAK,KAAK,GAC/B1B,EAAAnC,GAAA,YAAAA,EAAU,SAAV,YAAAmC,EAAkB,IAAA,CAAA,CACrB,EACE,MAAA,CAER,GACA,SACEhB,GAAa,GAAC2C,GAAAC,EAAA9C,GAAA,YAAAA,EAAM,SAAN,YAAA8C,EAAc,eAAd,MAAAD,EAA4B,QACtC,CACE,MACElE,EAAC,OAAA,CAAK,cAAY,gBACf,WAAa,iBAAA,CAChB,CAAA,EAGJ,CACE,MACEA,EAACqC,EAAA,CACC,cAAY,mBACZ,QAAQ+B,GAAAC,EAAAhD,GAAA,YAAAA,EAAM,SAAN,YAAAgD,EAAc,WAAd,YAAAD,EAAwB,MAChC,UAAUE,IAAAC,GAAAlD,GAAA,YAAAA,EAAM,SAAN,YAAAkD,GAAc,WAAd,YAAAD,GAAwB,QAAA,CAAA,CACpC,EAIV,aACE/C,EACI,OACAC,GAAA,MAAAA,EAAsB,aACtBgD,IAAAC,GAAApD,GAAA,YAAAA,EAAM,SAAN,YAAAoD,GAAc,eAAd,YAAAD,GAA4B,IAAK7D,IAAc,CAC7C,MAAOA,EAAI,MACX,MACEX,EAACqC,EAAA,CACC,cAAY,gBACZ,OAAQ1B,EAAI,OAAO,MACnB,SAAUA,EAAI,OAAO,QAAA,CAAA,CACvB,IAGJ,OAEN,MAAO,CACL,QACE+D,IAAAC,GAAAtD,GAAA,YAAAA,EAAM,SAAN,YAAAsD,GAAc,aAAd,YAAAD,GAA0B,SAAU,EAClC1E,EAAC,OAAA,CAAK,cAAY,sBAAuB,SAAAL,EAAa,IAAA,CAAK,EAE3DK,EAACqC,EAAA,CACC,cAAY,6BACZ,QAAQuC,IAAAC,GAAAxD,GAAA,YAAAA,EAAM,SAAN,YAAAwD,GAAc,aAAd,YAAAD,GAA0B,MAClC,UAAUE,IAAAC,GAAA1D,GAAA,YAAAA,EAAM,SAAN,YAAA0D,GAAc,aAAd,YAAAD,GAA0B,QAAA,CAAA,EAG1C,gBAAiBtD,GAAA,MAAAA,EAAsB,aACrCwD,IAAAC,GAAA5D,GAAA,YAAAA,EAAM,SAAN,YAAA4D,GAAc,yBAAd,YAAAD,GAAsC,SAAU,EAC9ChF,EAAC,OAAA,CAAK,cAAY,sBAAuB,SAAAL,EAAa,KAAK,EAE3DK,EAACqC,EAAA,CACC,cAAY,sBACZ,QAAQ6C,IAAAC,GAAA9D,GAAA,YAAAA,EAAM,SAAN,YAAA8D,GAAc,yBAAd,YAAAD,GAAsC,MAC9C,UAAUE,IAAAC,GAAAhE,GAAA,YAAAA,EAAM,SAAN,YAAAgE,GAAc,yBAAd,YAAAD,GAAsC,QAAA,CAAA,EAGlD,MAAA,EAEN,WACEhE,EACEpB,EAACqC,EAAA,CACC,QAAQiD,IAAAC,GAAAlE,GAAA,YAAAA,EAAM,SAAN,YAAAkE,GAAc,WAAd,YAAAD,GAAwB,MAChC,UAAUE,IAAAC,GAAApE,GAAA,YAAAA,EAAM,SAAN,YAAAoE,GAAc,aAAd,YAAAD,GAA0B,QAAA,CAAA,EAEpC,MAAA,CAAA,EAhJD,IAoJX","x_google_ignoreList":[0,1,2]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { HTMLAttributes } from 'preact/compat';
|
|
2
|
+
import { Container } from '@dropins/tools/types/elsie/src/lib';
|
|
3
|
+
import { VNode } from 'preact';
|
|
4
|
+
|
|
5
|
+
export interface OrderSummaryLineProps extends Omit<HTMLAttributes<HTMLDivElement>, 'label'> {
|
|
6
|
+
label: VNode | string;
|
|
7
|
+
price: VNode<HTMLAttributes<HTMLSpanElement>>;
|
|
8
|
+
classSuffixes?: Array<string>;
|
|
9
|
+
labelClassSuffix?: string;
|
|
10
|
+
testId?: string;
|
|
11
|
+
children?: any;
|
|
12
|
+
}
|
|
13
|
+
export declare const OrderSummaryLine: Container<OrderSummaryLineProps>;
|
|
14
|
+
//# sourceMappingURL=OrderSummaryLine.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 './OrderSummaryLine';
|
|
10
|
+
export { OrderSummaryLine as default } from './OrderSummaryLine';
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/*! Copyright 2025 Adobe
|
|
2
|
+
All Rights Reserved. */
|
|
3
|
+
import{O as u,O as l}from"../chunks/OrderSummaryLine.js";import"@dropins/tools/preact-jsx-runtime.js";import"@dropins/tools/lib.js";/* empty css */import"@dropins/tools/components.js";/* empty css */import"@dropins/tools/preact-compat.js";import"@dropins/tools/preact.js";/* empty css *//* empty css *//* empty css */export{u as OrderSummaryLine,l as default};
|
|
4
|
+
//# sourceMappingURL=OrderSummaryLine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OrderSummaryLine.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
/*! Copyright 2025 Adobe
|
|
2
2
|
All Rights Reserved. */
|
|
3
|
-
import{jsxs as P,jsx as t}from"@dropins/tools/preact-jsx-runtime.js";import{useState as Q,useEffect as $}from"@dropins/tools/preact-compat.js";import{classes as j,Slot as o}from"@dropins/tools/lib.js";import{Table as G,IllustratedMessage as H,Picker as J,Pagination as K,Button as W,Price as X}from"@dropins/tools/components.js";import{events as Y}from"@dropins/tools/event-bus.js";/* empty css *//* empty css */import"@dropins/tools/preact.js";import{useText as Z}from"@dropins/tools/i18n.js";/* empty css *//* empty css *//* empty css */import{g as V}from"../chunks/
|
|
3
|
+
import{jsxs as P,jsx as t}from"@dropins/tools/preact-jsx-runtime.js";import{useState as Q,useEffect as $}from"@dropins/tools/preact-compat.js";import{classes as j,Slot as o}from"@dropins/tools/lib.js";import{Table as G,IllustratedMessage as H,Picker as J,Pagination as K,Button as W,Price as X}from"@dropins/tools/components.js";import{events as Y}from"@dropins/tools/event-bus.js";/* empty css *//* empty css */import"@dropins/tools/preact.js";import{useText as Z}from"@dropins/tools/i18n.js";/* empty css *//* empty css *//* empty css */import{g as V}from"../chunks/fetch-graphql.js";import"../chunks/state.js";import{n as q}from"../chunks/negotiableQuotes.js";import"@dropins/tools/fetch-graphql.js";const ee=({rowData:h=[],loading:S=!1,className:N,emptyStateMessage:y,showItemRange:v=!0,itemRangeMessage:d,showPageSizePicker:u=!0,pageSizePickerMessage:i,showPagination:x=!0,paginationMessage:l,...b})=>{const m=Z({quoteName:"QuoteManagement.QuotesListTable.quoteName",created:"QuoteManagement.QuotesListTable.created",createdBy:"QuoteManagement.QuotesListTable.createdBy",status:"QuoteManagement.QuotesListTable.status",lastUpdated:"QuoteManagement.QuotesListTable.lastUpdated",quoteTemplate:"QuoteManagement.QuotesListTable.quoteTemplate",quoteTotal:"QuoteManagement.QuotesListTable.quoteTotal",actions:"QuoteManagement.QuotesListTable.actions"}),p=[{key:"quoteName",label:m.quoteName},{key:"created",label:m.created},{key:"createdBy",label:m.createdBy},{key:"status",label:m.status},{key:"lastUpdated",label:m.lastUpdated},{key:"quoteTemplate",label:m.quoteTemplate},{key:"quoteTotal",label:m.quoteTotal},{key:"actions",label:m.actions}],z=!S&&h.length===0&&y,s=v&&d,f=u&&i,g=x&&l,T=s||f||g;return P("div",{...b,className:j(["quote-management-quotes-list-table",N]),children:[t(G,{columns:p,rowData:h,loading:S,mobileLayout:"none",className:"quote-management-quotes-list-table__table"}),z&&t("div",{className:"quotes-list-table__empty-state",children:y}),T&&P("div",{className:"quotes-list-table__footer",children:[t("div",{className:"quotes-list-table__item-range",children:s&&d}),t("div",{className:"quotes-list-table__pagination",children:g&&l}),t("div",{className:"quotes-list-table__page-size-picker",children:f&&i})]})]})},ye=({pageSize:h,showItemRange:S=!0,showPageSizePicker:N=!0,showPagination:y=!0,onViewQuote:v,onPageSizeChange:d,onPageChange:u,slots:i,...x})=>{const[l,b]=Q(null),[m,p]=Q(!0),z=V()[0],[s,f]=Q(h||z),[g,T]=Q(1);$(()=>{const r=async()=>{try{p(!0);const c=await q({pageSize:s,currentPage:g});b(c)}catch(c){console.error("Failed to fetch quotes:",c)}finally{p(!1)}},e=Y.on("authenticated",c=>{c?r():(b(null),p(!1))},{eager:!0});return()=>{e==null||e.off()}},[s,g]);const k=r=>{f(r),T(1),d==null||d(r)},_=r=>{T(r),u==null||u(r)},A=r=>{const e=r.target,c=e==null?void 0:e.value;c&&k(Number(c))},U=(r,e,c)=>r.filter(a=>a==null?void 0:a.uid).map(a=>{var I,w,B,M;const F=`${a.buyer.firstname} ${a.buyer.lastname}`;return{id:a.uid,quoteName:t(o,{name:"QuoteName",slot:e==null?void 0:e.QuoteName,context:{quote:a},children:t("span",{children:a.name})}),created:t(o,{name:"Created",slot:e==null?void 0:e.Created,context:{quote:a},children:t("span",{children:a.createdAt?new Date(a.createdAt).toLocaleDateString():"N/A"})}),createdBy:t(o,{name:"CreatedBy",slot:e==null?void 0:e.CreatedBy,context:{quote:a},children:t("span",{children:F})}),status:t(o,{name:"Status",slot:e==null?void 0:e.Status,context:{quote:a},children:t("span",{children:a.status})}),lastUpdated:t(o,{name:"LastUpdated",slot:e==null?void 0:e.LastUpdated,context:{quote:a},children:t("span",{children:a.updatedAt?new Date(a.updatedAt).toLocaleDateString():"N/A"})}),quoteTemplate:t(o,{name:"QuoteTemplate",slot:e==null?void 0:e.QuoteTemplate,context:{quote:a},children:t("span",{children:a.templateName})}),quoteTotal:t(o,{name:"QuoteTotal",slot:e==null?void 0:e.QuoteTotal,context:{quote:a},children:t(X,{amount:(w=(I=a.prices)==null?void 0:I.grandTotal)==null?void 0:w.value,currency:(M=(B=a.prices)==null?void 0:B.grandTotal)==null?void 0:M.currency})}),actions:t(o,{name:"Actions",slot:e==null?void 0:e.Actions,context:{quote:a,onViewQuote:c},children:t(W,{variant:"tertiary",size:"medium",onClick:()=>c==null?void 0:c(a.uid,a.name,a.status),children:"View"})})}}),C=l!=null&&l.items?U(l.items,i,v):[],n=l==null?void 0:l.paginationInfo,L=!!n,O=t(o,{name:"EmptyQuotes",slot:i==null?void 0:i.EmptyQuotes,context:{quotesData:l},children:t(H,{heading:"No Quotes Found"})}),R=n?t(o,{name:"ItemRange",slot:i==null?void 0:i.ItemRange,context:n,children:P("span",{children:["Items ",n.startItem," to ",n.endItem," of"," ",n.totalCount," total"]})}):void 0,D=n&&n.pageSizeOptions?P(o,{name:"PageSizePicker",slot:i==null?void 0:i.PageSizePicker,context:{pageSize:n.pageSize,pageSizeOptions:n.pageSizeOptions,onPageSizeChange:k},children:[t("span",{children:"Show "}),t(J,{variant:"primary",size:"medium",value:String(n.pageSize),options:n.pageSizeOptions.map(r=>({value:String(r),text:String(r)})),handleSelect:A}),t("span",{children:" per page"})]}):void 0,E=n?t(o,{name:"Pagination",slot:i==null?void 0:i.Pagination,context:{currentPage:n.currentPage,totalPages:n.totalPages,onChange:_},children:t(K,{currentPage:n.currentPage,totalPages:n.totalPages,onChange:_})}):void 0;return t(ee,{rowData:C,loading:m,className:x.className,emptyStateMessage:O,showItemRange:S&&L,itemRangeMessage:R,showPageSizePicker:N&&L,pageSizePickerMessage:D,showPagination:y&&L,paginationMessage:E})};export{ye as QuotesListTable,ye as default};
|
|
4
4
|
//# sourceMappingURL=QuotesListTable.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QuotesListTable.js","sources":["/@dropins/storefront-quote-management/src/components/QuotesListTable/QuotesListTable.tsx","/@dropins/storefront-quote-management/src/containers/QuotesListTable/QuotesListTable.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 } from '@adobe-commerce/elsie/lib';\nimport { Table } from '@adobe-commerce/elsie/components';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport '@/quote-management/components/QuotesListTable/QuotesListTable.css';\n\ntype Column = {\n key: string;\n label: string;\n};\n\nexport interface QuotesListTableProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'loading' | 'children'> {\n rowData: QuoteRowData[];\n loading?: boolean;\n className?: string;\n emptyStateMessage?: VNode;\n showItemRange?: boolean;\n itemRangeMessage?: VNode;\n showPageSizePicker?: boolean;\n pageSizePickerMessage?: VNode;\n showPagination?: boolean;\n paginationMessage?: VNode;\n}\n\nexport type QuoteRowData = {\n id: string;\n quoteName: VNode;\n created: VNode;\n createdBy: VNode;\n status: VNode;\n lastUpdated: VNode;\n quoteTemplate: VNode;\n quoteTotal: VNode;\n actions: VNode;\n [key: string]: VNode | string | number | undefined;\n};\n\nexport const QuotesListTable: FunctionComponent<QuotesListTableProps> = ({\n rowData = [],\n loading = false,\n className,\n emptyStateMessage,\n showItemRange = true,\n itemRangeMessage,\n showPageSizePicker = true,\n pageSizePickerMessage,\n showPagination = true,\n paginationMessage,\n ...props\n}) => {\n const dictionary = useText({\n quoteName: 'QuoteManagement.QuotesListTable.quoteName',\n created: 'QuoteManagement.QuotesListTable.created',\n createdBy: 'QuoteManagement.QuotesListTable.createdBy',\n status: 'QuoteManagement.QuotesListTable.status',\n lastUpdated: 'QuoteManagement.QuotesListTable.lastUpdated',\n quoteTemplate: 'QuoteManagement.QuotesListTable.quoteTemplate',\n quoteTotal: 'QuoteManagement.QuotesListTable.quoteTotal',\n actions: 'QuoteManagement.QuotesListTable.actions',\n });\n\n const columns: Column[] = [\n { key: 'quoteName', label: dictionary.quoteName },\n { key: 'created', label: dictionary.created },\n { key: 'createdBy', label: dictionary.createdBy },\n { key: 'status', label: dictionary.status },\n { key: 'lastUpdated', label: dictionary.lastUpdated },\n { key: 'quoteTemplate', label: dictionary.quoteTemplate },\n { key: 'quoteTotal', label: dictionary.quoteTotal },\n { key: 'actions', label: dictionary.actions },\n ];\n\n // Check if we should show empty state\n const shouldShowEmptyState =\n !loading && rowData.length === 0 && emptyStateMessage;\n\n // Show item range if requested and message is provided\n const shouldShowItemRange = showItemRange && itemRangeMessage;\n\n // Show page size picker if requested and message is provided\n const shouldShowPageSizePicker = showPageSizePicker && pageSizePickerMessage;\n\n // Show pagination if requested and message is provided\n const shouldShowPagination = showPagination && paginationMessage;\n\n // Show footer if any pagination element should be shown\n const shouldShowFooter =\n shouldShowItemRange || shouldShowPageSizePicker || shouldShowPagination;\n\n return (\n <div\n {...props}\n className={classes(['quote-management-quotes-list-table', className])}\n >\n <Table\n columns={columns}\n rowData={rowData}\n loading={loading}\n mobileLayout=\"none\"\n className=\"quote-management-quotes-list-table__table\"\n />\n {shouldShowEmptyState && (\n <div className=\"quotes-list-table__empty-state\">\n {emptyStateMessage}\n </div>\n )}\n {shouldShowFooter && (\n <div className=\"quotes-list-table__footer\">\n <div className=\"quotes-list-table__item-range\">\n {shouldShowItemRange && itemRangeMessage}\n </div>\n <div className=\"quotes-list-table__pagination\">\n {shouldShowPagination && paginationMessage}\n </div>\n <div className=\"quotes-list-table__page-size-picker\">\n {shouldShowPageSizePicker && pageSizePickerMessage}\n </div>\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 { HTMLAttributes, useEffect, useState } from 'preact/compat';\nimport { Container, Slot, SlotProps } from '@adobe-commerce/elsie/lib';\nimport {\n Price,\n Button,\n IllustratedMessage,\n Picker,\n Pagination,\n type PickerOption,\n} from '@adobe-commerce/elsie/components';\nimport { events } from '@adobe-commerce/event-bus';\nimport {\n QuotesListTable as QuotesListTableComponent,\n QuoteRowData,\n} from '@/quote-management/components';\nimport { negotiableQuotes } from '@/quote-management/api';\nimport { getDefaultPageSizeOptions } from '@/quote-management/data/transforms';\nimport {\n NegotiableQuotesListModel,\n NegotiableQuoteListEntry,\n} from '@/quote-management/data/models';\n\nexport interface QuotesListTableProps extends HTMLAttributes<HTMLDivElement> {\n pageSize?: number;\n showItemRange?: boolean;\n showPageSizePicker?: boolean;\n showPagination?: boolean;\n onViewQuote?: (quoteId: string, quoteName: string, status: string) => void;\n onPageSizeChange?: (pageSize: number) => void;\n onPageChange?: (page: number) => void;\n slots?: {\n /** Slot for customizing the quote name cell content */\n QuoteName?: SlotProps<{ quote: NegotiableQuoteListEntry }>;\n /** Slot for customizing the created date cell content */\n Created?: SlotProps<{ quote: NegotiableQuoteListEntry }>;\n /** Slot for customizing the created by cell content */\n CreatedBy?: SlotProps<{ quote: NegotiableQuoteListEntry }>;\n /** Slot for customizing the status cell content */\n Status?: SlotProps<{ quote: NegotiableQuoteListEntry }>;\n /** Slot for customizing the last updated cell content */\n LastUpdated?: SlotProps<{ quote: NegotiableQuoteListEntry }>;\n /** Slot for customizing the quote template cell content */\n QuoteTemplate?: SlotProps<{ quote: NegotiableQuoteListEntry }>;\n /** Slot for customizing the quote total cell content */\n QuoteTotal?: SlotProps<{ quote: NegotiableQuoteListEntry }>;\n /** Slot for customizing the actions cell content */\n Actions?: SlotProps<{\n quote: NegotiableQuoteListEntry;\n onViewQuote?: (id: string, name: string, status: string) => void;\n }>;\n /** Slot for customizing the empty quotes message */\n EmptyQuotes?: SlotProps;\n /** Slot for customizing the item range display */\n ItemRange?: SlotProps<{\n startItem: number;\n endItem: number;\n totalCount: number;\n currentPage: number;\n pageSize: number;\n }>;\n /** Slot for customizing the page size picker */\n PageSizePicker?: SlotProps<{\n pageSize: number;\n pageSizeOptions: number[];\n onPageSizeChange?: (pageSize: number) => void;\n }>;\n /** Slot for customizing the pagination */\n Pagination?: SlotProps<{\n currentPage: number;\n totalPages: number;\n onChange?: (page: number) => void;\n }>;\n };\n}\n\nexport const QuotesListTable: Container<QuotesListTableProps> = ({\n pageSize,\n showItemRange = true,\n showPageSizePicker = true,\n showPagination = true,\n onViewQuote,\n onPageSizeChange,\n onPageChange,\n slots,\n ...props\n}) => {\n const [quotesData, setQuotesData] =\n useState<NegotiableQuotesListModel | null>(null);\n const [loading, setLoading] = useState(true);\n\n // Default to first page size option if no pageSize prop provided\n const defaultPageSize = getDefaultPageSizeOptions()[0];\n const [currentPageSize, setCurrentPageSize] = useState(\n pageSize || defaultPageSize\n );\n const [currentPage, setCurrentPage] = useState(1);\n\n // Fetch quotes data when authenticated\n useEffect(() => {\n const fetchQuotes = async () => {\n try {\n setLoading(true);\n const data = await negotiableQuotes({\n pageSize: currentPageSize,\n currentPage,\n });\n setQuotesData(data);\n } catch (error) {\n console.error('Failed to fetch quotes:', error);\n } finally {\n setLoading(false);\n }\n };\n\n // Listen for authentication events\n const unsubscribe = events.on(\n 'authenticated',\n (isAuthenticated) => {\n if (isAuthenticated) {\n fetchQuotes();\n } else {\n setQuotesData(null);\n setLoading(false);\n }\n },\n { eager: true }\n ); // eager: true means it fires immediately with current state\n\n return () => {\n unsubscribe?.off();\n };\n }, [currentPageSize, currentPage]);\n\n // Handle page size change\n const handlePageSizeChange = (newPageSize: number) => {\n setCurrentPageSize(newPageSize);\n setCurrentPage(1); // Reset to page 1 when page size changes\n onPageSizeChange?.(newPageSize); // Also call parent callback\n };\n\n // Handle page change\n const handlePageChange = (newPage: number) => {\n setCurrentPage(newPage);\n onPageChange?.(newPage); // Also call parent callback\n };\n\n // Handle page size picker selection\n const handlePageSizeSelect = (event: Event) => {\n const target = event.target as HTMLSelectElement;\n const value = target?.value;\n if (value) {\n handlePageSizeChange(Number(value));\n }\n };\n\n // Prepare transformed quote data for table component\n const prepareRowData = (\n quotes: NegotiableQuoteListEntry[],\n slots?: QuotesListTableProps['slots'],\n onViewQuote?: (quoteId: string, quoteName: string, status: string) => void\n ): QuoteRowData[] => {\n return quotes\n .filter((quote) => quote?.uid) // Filter out null quotes\n .map((quote) => {\n const createdByName = `${quote.buyer.firstname} ${quote.buyer.lastname}`;\n\n return {\n id: quote.uid,\n quoteName: (\n <Slot name=\"QuoteName\" slot={slots?.QuoteName} context={{ quote }}>\n <span>{quote.name}</span>\n </Slot>\n ),\n created: (\n <Slot name=\"Created\" slot={slots?.Created} context={{ quote }}>\n <span>\n {quote.createdAt\n ? new Date(quote.createdAt).toLocaleDateString()\n : 'N/A'}\n </span>\n </Slot>\n ),\n createdBy: (\n <Slot name=\"CreatedBy\" slot={slots?.CreatedBy} context={{ quote }}>\n <span>{createdByName}</span>\n </Slot>\n ),\n status: (\n <Slot name=\"Status\" slot={slots?.Status} context={{ quote }}>\n <span>{quote.status}</span>\n </Slot>\n ),\n lastUpdated: (\n <Slot\n name=\"LastUpdated\"\n slot={slots?.LastUpdated}\n context={{ quote }}\n >\n <span>\n {quote.updatedAt\n ? new Date(quote.updatedAt).toLocaleDateString()\n : 'N/A'}\n </span>\n </Slot>\n ),\n quoteTemplate: (\n <Slot\n name=\"QuoteTemplate\"\n slot={slots?.QuoteTemplate}\n context={{ quote }}\n >\n <span>{quote.templateName}</span>\n </Slot>\n ),\n quoteTotal: (\n <Slot\n name=\"QuoteTotal\"\n slot={slots?.QuoteTotal}\n context={{ quote }}\n >\n <Price\n amount={quote.prices?.grandTotal?.value}\n currency={quote.prices?.grandTotal?.currency}\n />\n </Slot>\n ),\n actions: (\n <Slot\n name=\"Actions\"\n slot={slots?.Actions}\n context={{ quote, onViewQuote }}\n >\n <Button\n variant=\"tertiary\"\n size=\"medium\"\n onClick={() =>\n onViewQuote?.(quote.uid, quote.name, quote.status)\n }\n >\n View\n </Button>\n </Slot>\n ),\n };\n });\n };\n\n // Prepare data for rendering\n const rowData = quotesData?.items\n ? prepareRowData(quotesData.items, slots, onViewQuote)\n : [];\n\n const paginationInfo = quotesData?.paginationInfo;\n const shouldShowPagination = !!paginationInfo;\n\n // Empty state message\n const emptyStateMessage = (\n <Slot name=\"EmptyQuotes\" slot={slots?.EmptyQuotes} context={{ quotesData }}>\n <IllustratedMessage heading=\"No Quotes Found\" />\n </Slot>\n );\n\n // Item range message\n const itemRangeMessage = paginationInfo ? (\n <Slot name=\"ItemRange\" slot={slots?.ItemRange} context={paginationInfo}>\n <span>\n Items {paginationInfo.startItem} to {paginationInfo.endItem} of{' '}\n {paginationInfo.totalCount} total\n </span>\n </Slot>\n ) : undefined;\n\n // Prepare page size picker message for component\n const pageSizePickerMessage =\n paginationInfo && paginationInfo.pageSizeOptions ? (\n <Slot\n name=\"PageSizePicker\"\n slot={slots?.PageSizePicker}\n context={{\n pageSize: paginationInfo.pageSize,\n pageSizeOptions: paginationInfo.pageSizeOptions,\n onPageSizeChange: handlePageSizeChange,\n }}\n >\n <span>Show </span>\n <Picker\n variant=\"primary\"\n size=\"medium\"\n value={String(paginationInfo.pageSize)}\n options={paginationInfo.pageSizeOptions.map(\n (size): PickerOption => ({\n value: String(size),\n text: String(size),\n })\n )}\n handleSelect={handlePageSizeSelect}\n />\n <span> per page</span>\n </Slot>\n ) : undefined;\n\n // Prepare pagination message for component\n const paginationMessage = paginationInfo ? (\n <Slot\n name=\"Pagination\"\n slot={slots?.Pagination}\n context={{\n currentPage: paginationInfo.currentPage,\n totalPages: paginationInfo.totalPages,\n onChange: handlePageChange,\n }}\n >\n <Pagination\n currentPage={paginationInfo.currentPage}\n totalPages={paginationInfo.totalPages}\n onChange={handlePageChange}\n />\n </Slot>\n ) : undefined;\n\n return (\n <QuotesListTableComponent\n rowData={rowData}\n loading={loading}\n className={props.className as string}\n emptyStateMessage={emptyStateMessage}\n showItemRange={showItemRange && shouldShowPagination}\n itemRangeMessage={itemRangeMessage}\n showPageSizePicker={showPageSizePicker && shouldShowPagination}\n pageSizePickerMessage={pageSizePickerMessage}\n showPagination={showPagination && shouldShowPagination}\n paginationMessage={paginationMessage}\n />\n );\n};\n"],"names":["QuotesListTable","rowData","loading","className","emptyStateMessage","showItemRange","itemRangeMessage","showPageSizePicker","pageSizePickerMessage","showPagination","paginationMessage","props","dictionary","useText","columns","shouldShowEmptyState","shouldShowItemRange","shouldShowPageSizePicker","shouldShowPagination","shouldShowFooter","jsxs","classes","jsx","Table","pageSize","onViewQuote","onPageSizeChange","onPageChange","slots","quotesData","setQuotesData","useState","setLoading","defaultPageSize","getDefaultPageSizeOptions","currentPageSize","setCurrentPageSize","currentPage","setCurrentPage","useEffect","fetchQuotes","data","negotiableQuotes","error","unsubscribe","events","isAuthenticated","handlePageSizeChange","newPageSize","handlePageChange","newPage","handlePageSizeSelect","event","target","value","prepareRowData","quotes","quote","createdByName","Slot","Price","_b","_a","_d","_c","Button","paginationInfo","IllustratedMessage","Picker","size","Pagination","QuotesListTableComponent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"QuotesListTable.js","sources":["/@dropins/storefront-quote-management/src/components/QuotesListTable/QuotesListTable.tsx","/@dropins/storefront-quote-management/src/containers/QuotesListTable/QuotesListTable.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 } from '@adobe-commerce/elsie/lib';\nimport { Table } from '@adobe-commerce/elsie/components';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport '@/quote-management/components/QuotesListTable/QuotesListTable.css';\n\ntype Column = {\n key: string;\n label: string;\n};\n\nexport interface QuotesListTableProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'loading' | 'children'> {\n rowData: QuoteRowData[];\n loading?: boolean;\n className?: string;\n emptyStateMessage?: VNode;\n showItemRange?: boolean;\n itemRangeMessage?: VNode;\n showPageSizePicker?: boolean;\n pageSizePickerMessage?: VNode;\n showPagination?: boolean;\n paginationMessage?: VNode;\n}\n\nexport type QuoteRowData = {\n id: string;\n quoteName: VNode;\n created: VNode;\n createdBy: VNode;\n status: VNode;\n lastUpdated: VNode;\n quoteTemplate: VNode;\n quoteTotal: VNode;\n actions: VNode;\n [key: string]: VNode | string | number | undefined;\n};\n\nexport const QuotesListTable: FunctionComponent<QuotesListTableProps> = ({\n rowData = [],\n loading = false,\n className,\n emptyStateMessage,\n showItemRange = true,\n itemRangeMessage,\n showPageSizePicker = true,\n pageSizePickerMessage,\n showPagination = true,\n paginationMessage,\n ...props\n}) => {\n const dictionary = useText({\n quoteName: 'QuoteManagement.QuotesListTable.quoteName',\n created: 'QuoteManagement.QuotesListTable.created',\n createdBy: 'QuoteManagement.QuotesListTable.createdBy',\n status: 'QuoteManagement.QuotesListTable.status',\n lastUpdated: 'QuoteManagement.QuotesListTable.lastUpdated',\n quoteTemplate: 'QuoteManagement.QuotesListTable.quoteTemplate',\n quoteTotal: 'QuoteManagement.QuotesListTable.quoteTotal',\n actions: 'QuoteManagement.QuotesListTable.actions',\n });\n\n const columns: Column[] = [\n { key: 'quoteName', label: dictionary.quoteName },\n { key: 'created', label: dictionary.created },\n { key: 'createdBy', label: dictionary.createdBy },\n { key: 'status', label: dictionary.status },\n { key: 'lastUpdated', label: dictionary.lastUpdated },\n { key: 'quoteTemplate', label: dictionary.quoteTemplate },\n { key: 'quoteTotal', label: dictionary.quoteTotal },\n { key: 'actions', label: dictionary.actions },\n ];\n\n // Check if we should show empty state\n const shouldShowEmptyState =\n !loading && rowData.length === 0 && emptyStateMessage;\n\n // Show item range if requested and message is provided\n const shouldShowItemRange = showItemRange && itemRangeMessage;\n\n // Show page size picker if requested and message is provided\n const shouldShowPageSizePicker = showPageSizePicker && pageSizePickerMessage;\n\n // Show pagination if requested and message is provided\n const shouldShowPagination = showPagination && paginationMessage;\n\n // Show footer if any pagination element should be shown\n const shouldShowFooter =\n shouldShowItemRange || shouldShowPageSizePicker || shouldShowPagination;\n\n return (\n <div\n {...props}\n className={classes(['quote-management-quotes-list-table', className])}\n >\n <Table\n columns={columns}\n rowData={rowData}\n loading={loading}\n mobileLayout=\"none\"\n className=\"quote-management-quotes-list-table__table\"\n />\n {shouldShowEmptyState && (\n <div className=\"quotes-list-table__empty-state\">\n {emptyStateMessage}\n </div>\n )}\n {shouldShowFooter && (\n <div className=\"quotes-list-table__footer\">\n <div className=\"quotes-list-table__item-range\">\n {shouldShowItemRange && itemRangeMessage}\n </div>\n <div className=\"quotes-list-table__pagination\">\n {shouldShowPagination && paginationMessage}\n </div>\n <div className=\"quotes-list-table__page-size-picker\">\n {shouldShowPageSizePicker && pageSizePickerMessage}\n </div>\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 { HTMLAttributes, useEffect, useState } from 'preact/compat';\nimport { Container, Slot, SlotProps } from '@adobe-commerce/elsie/lib';\nimport {\n Price,\n Button,\n IllustratedMessage,\n Picker,\n Pagination,\n type PickerOption,\n} from '@adobe-commerce/elsie/components';\nimport { events } from '@adobe-commerce/event-bus';\nimport {\n QuotesListTable as QuotesListTableComponent,\n QuoteRowData,\n} from '@/quote-management/components';\nimport { negotiableQuotes } from '@/quote-management/api';\nimport { getDefaultPageSizeOptions } from '@/quote-management/data/transforms';\nimport {\n NegotiableQuotesListModel,\n NegotiableQuoteListEntry,\n} from '@/quote-management/data/models';\n\nexport interface QuotesListTableProps extends HTMLAttributes<HTMLDivElement> {\n pageSize?: number;\n showItemRange?: boolean;\n showPageSizePicker?: boolean;\n showPagination?: boolean;\n onViewQuote?: (quoteId: string, quoteName: string, status: string) => void;\n onPageSizeChange?: (pageSize: number) => void;\n onPageChange?: (page: number) => void;\n slots?: {\n /** Slot for customizing the quote name cell content */\n QuoteName?: SlotProps<{ quote: NegotiableQuoteListEntry }>;\n /** Slot for customizing the created date cell content */\n Created?: SlotProps<{ quote: NegotiableQuoteListEntry }>;\n /** Slot for customizing the created by cell content */\n CreatedBy?: SlotProps<{ quote: NegotiableQuoteListEntry }>;\n /** Slot for customizing the status cell content */\n Status?: SlotProps<{ quote: NegotiableQuoteListEntry }>;\n /** Slot for customizing the last updated cell content */\n LastUpdated?: SlotProps<{ quote: NegotiableQuoteListEntry }>;\n /** Slot for customizing the quote template cell content */\n QuoteTemplate?: SlotProps<{ quote: NegotiableQuoteListEntry }>;\n /** Slot for customizing the quote total cell content */\n QuoteTotal?: SlotProps<{ quote: NegotiableQuoteListEntry }>;\n /** Slot for customizing the actions cell content */\n Actions?: SlotProps<{\n quote: NegotiableQuoteListEntry;\n onViewQuote?: (id: string, name: string, status: string) => void;\n }>;\n /** Slot for customizing the empty quotes message */\n EmptyQuotes?: SlotProps;\n /** Slot for customizing the item range display */\n ItemRange?: SlotProps<{\n startItem: number;\n endItem: number;\n totalCount: number;\n currentPage: number;\n pageSize: number;\n }>;\n /** Slot for customizing the page size picker */\n PageSizePicker?: SlotProps<{\n pageSize: number;\n pageSizeOptions: number[];\n onPageSizeChange?: (pageSize: number) => void;\n }>;\n /** Slot for customizing the pagination */\n Pagination?: SlotProps<{\n currentPage: number;\n totalPages: number;\n onChange?: (page: number) => void;\n }>;\n };\n}\n\nexport const QuotesListTable: Container<QuotesListTableProps> = ({\n pageSize,\n showItemRange = true,\n showPageSizePicker = true,\n showPagination = true,\n onViewQuote,\n onPageSizeChange,\n onPageChange,\n slots,\n ...props\n}) => {\n const [quotesData, setQuotesData] =\n useState<NegotiableQuotesListModel | null>(null);\n const [loading, setLoading] = useState(true);\n\n // Default to first page size option if no pageSize prop provided\n const defaultPageSize = getDefaultPageSizeOptions()[0];\n const [currentPageSize, setCurrentPageSize] = useState(\n pageSize || defaultPageSize\n );\n const [currentPage, setCurrentPage] = useState(1);\n\n // Fetch quotes data when authenticated\n useEffect(() => {\n const fetchQuotes = async () => {\n try {\n setLoading(true);\n const data = await negotiableQuotes({\n pageSize: currentPageSize,\n currentPage,\n });\n setQuotesData(data);\n } catch (error) {\n console.error('Failed to fetch quotes:', error);\n } finally {\n setLoading(false);\n }\n };\n\n // Listen for authentication events\n const unsubscribe = events.on(\n 'authenticated',\n (isAuthenticated) => {\n if (isAuthenticated) {\n fetchQuotes();\n } else {\n setQuotesData(null);\n setLoading(false);\n }\n },\n { eager: true }\n ); // eager: true means it fires immediately with current state\n\n return () => {\n unsubscribe?.off();\n };\n }, [currentPageSize, currentPage]);\n\n // Handle page size change\n const handlePageSizeChange = (newPageSize: number) => {\n setCurrentPageSize(newPageSize);\n setCurrentPage(1); // Reset to page 1 when page size changes\n onPageSizeChange?.(newPageSize); // Also call parent callback\n };\n\n // Handle page change\n const handlePageChange = (newPage: number) => {\n setCurrentPage(newPage);\n onPageChange?.(newPage); // Also call parent callback\n };\n\n // Handle page size picker selection\n const handlePageSizeSelect = (event: Event) => {\n const target = event.target as HTMLSelectElement;\n const value = target?.value;\n if (value) {\n handlePageSizeChange(Number(value));\n }\n };\n\n // Prepare transformed quote data for table component\n const prepareRowData = (\n quotes: NegotiableQuoteListEntry[],\n slots?: QuotesListTableProps['slots'],\n onViewQuote?: (quoteId: string, quoteName: string, status: string) => void\n ): QuoteRowData[] => {\n return quotes\n .filter((quote) => quote?.uid) // Filter out null quotes\n .map((quote) => {\n const createdByName = `${quote.buyer.firstname} ${quote.buyer.lastname}`;\n\n return {\n id: quote.uid,\n quoteName: (\n <Slot name=\"QuoteName\" slot={slots?.QuoteName} context={{ quote }}>\n <span>{quote.name}</span>\n </Slot>\n ),\n created: (\n <Slot name=\"Created\" slot={slots?.Created} context={{ quote }}>\n <span>\n {quote.createdAt\n ? new Date(quote.createdAt).toLocaleDateString()\n : 'N/A'}\n </span>\n </Slot>\n ),\n createdBy: (\n <Slot name=\"CreatedBy\" slot={slots?.CreatedBy} context={{ quote }}>\n <span>{createdByName}</span>\n </Slot>\n ),\n status: (\n <Slot name=\"Status\" slot={slots?.Status} context={{ quote }}>\n <span>{quote.status}</span>\n </Slot>\n ),\n lastUpdated: (\n <Slot\n name=\"LastUpdated\"\n slot={slots?.LastUpdated}\n context={{ quote }}\n >\n <span>\n {quote.updatedAt\n ? new Date(quote.updatedAt).toLocaleDateString()\n : 'N/A'}\n </span>\n </Slot>\n ),\n quoteTemplate: (\n <Slot\n name=\"QuoteTemplate\"\n slot={slots?.QuoteTemplate}\n context={{ quote }}\n >\n <span>{quote.templateName}</span>\n </Slot>\n ),\n quoteTotal: (\n <Slot\n name=\"QuoteTotal\"\n slot={slots?.QuoteTotal}\n context={{ quote }}\n >\n <Price\n amount={quote.prices?.grandTotal?.value}\n currency={quote.prices?.grandTotal?.currency}\n />\n </Slot>\n ),\n actions: (\n <Slot\n name=\"Actions\"\n slot={slots?.Actions}\n context={{ quote, onViewQuote }}\n >\n <Button\n variant=\"tertiary\"\n size=\"medium\"\n onClick={() =>\n onViewQuote?.(quote.uid, quote.name, quote.status)\n }\n >\n View\n </Button>\n </Slot>\n ),\n };\n });\n };\n\n // Prepare data for rendering\n const rowData = quotesData?.items\n ? prepareRowData(quotesData.items, slots, onViewQuote)\n : [];\n\n const paginationInfo = quotesData?.paginationInfo;\n const shouldShowPagination = !!paginationInfo;\n\n // Empty state message\n const emptyStateMessage = (\n <Slot name=\"EmptyQuotes\" slot={slots?.EmptyQuotes} context={{ quotesData }}>\n <IllustratedMessage heading=\"No Quotes Found\" />\n </Slot>\n );\n\n // Item range message\n const itemRangeMessage = paginationInfo ? (\n <Slot name=\"ItemRange\" slot={slots?.ItemRange} context={paginationInfo}>\n <span>\n Items {paginationInfo.startItem} to {paginationInfo.endItem} of{' '}\n {paginationInfo.totalCount} total\n </span>\n </Slot>\n ) : undefined;\n\n // Prepare page size picker message for component\n const pageSizePickerMessage =\n paginationInfo && paginationInfo.pageSizeOptions ? (\n <Slot\n name=\"PageSizePicker\"\n slot={slots?.PageSizePicker}\n context={{\n pageSize: paginationInfo.pageSize,\n pageSizeOptions: paginationInfo.pageSizeOptions,\n onPageSizeChange: handlePageSizeChange,\n }}\n >\n <span>Show </span>\n <Picker\n variant=\"primary\"\n size=\"medium\"\n value={String(paginationInfo.pageSize)}\n options={paginationInfo.pageSizeOptions.map(\n (size): PickerOption => ({\n value: String(size),\n text: String(size),\n })\n )}\n handleSelect={handlePageSizeSelect}\n />\n <span> per page</span>\n </Slot>\n ) : undefined;\n\n // Prepare pagination message for component\n const paginationMessage = paginationInfo ? (\n <Slot\n name=\"Pagination\"\n slot={slots?.Pagination}\n context={{\n currentPage: paginationInfo.currentPage,\n totalPages: paginationInfo.totalPages,\n onChange: handlePageChange,\n }}\n >\n <Pagination\n currentPage={paginationInfo.currentPage}\n totalPages={paginationInfo.totalPages}\n onChange={handlePageChange}\n />\n </Slot>\n ) : undefined;\n\n return (\n <QuotesListTableComponent\n rowData={rowData}\n loading={loading}\n className={props.className as string}\n emptyStateMessage={emptyStateMessage}\n showItemRange={showItemRange && shouldShowPagination}\n itemRangeMessage={itemRangeMessage}\n showPageSizePicker={showPageSizePicker && shouldShowPagination}\n pageSizePickerMessage={pageSizePickerMessage}\n showPagination={showPagination && shouldShowPagination}\n paginationMessage={paginationMessage}\n />\n );\n};\n"],"names":["QuotesListTable","rowData","loading","className","emptyStateMessage","showItemRange","itemRangeMessage","showPageSizePicker","pageSizePickerMessage","showPagination","paginationMessage","props","dictionary","useText","columns","shouldShowEmptyState","shouldShowItemRange","shouldShowPageSizePicker","shouldShowPagination","shouldShowFooter","jsxs","classes","jsx","Table","pageSize","onViewQuote","onPageSizeChange","onPageChange","slots","quotesData","setQuotesData","useState","setLoading","defaultPageSize","getDefaultPageSizeOptions","currentPageSize","setCurrentPageSize","currentPage","setCurrentPage","useEffect","fetchQuotes","data","negotiableQuotes","error","unsubscribe","events","isAuthenticated","handlePageSizeChange","newPageSize","handlePageChange","newPage","handlePageSizeSelect","event","target","value","prepareRowData","quotes","quote","createdByName","Slot","Price","_b","_a","_d","_c","Button","paginationInfo","IllustratedMessage","Picker","size","Pagination","QuotesListTableComponent"],"mappings":"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"}
|