@dropins/storefront-quote-management 0.0.1-alpha17 → 0.0.1-alpha19
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/getStoreConfig/getStoreConfig.d.ts +4 -0
- package/api/getStoreConfig/graphql/StoreConfigQuery.d.ts +10 -0
- package/api/getStoreConfig/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 +11 -0
- package/api/renameNegotiableQuote/graphql/RenameNegotiableQuoteMutation.d.ts +10 -0
- package/api/renameNegotiableQuote/index.d.ts +10 -0
- package/api/renameNegotiableQuote/renameNegotiableQuote.d.ts +9 -0
- package/api.js +22 -8
- package/api.js.map +1 -1
- package/chunks/ChevronDown.js +4 -0
- package/chunks/ChevronDown.js.map +1 -0
- package/chunks/NegotiableQuoteFragment.js +204 -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/negotiableQuotes.js +2 -2
- package/chunks/negotiableQuotes.js.map +1 -1
- package/chunks/renameNegotiableQuote.js +62 -0
- package/chunks/renameNegotiableQuote.js.map +1 -0
- package/chunks/state.js +4 -0
- package/chunks/state.js.map +1 -0
- package/chunks/transform-quote.js +4 -0
- package/chunks/transform-quote.js.map +1 -0
- package/chunks/uploadFile.js +3 -3
- 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/RenameQuoteModal/RenameQuoteModal.d.ts +18 -0
- package/components/RenameQuoteModal/index.d.ts +11 -0
- package/components/index.d.ts +2 -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/QuoteSummaryList/QuoteSummaryList.d.ts +51 -0
- package/containers/QuoteSummaryList/index.d.ts +11 -0
- package/containers/QuoteSummaryList.d.ts +3 -0
- package/containers/QuoteSummaryList.js +4 -0
- package/containers/QuoteSummaryList.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 +15 -4
- package/data/models/__fixtures__/negotiableQuoteModel.d.ts +1 -0
- package/data/models/__fixtures__/storeConfigModel.d.ts +5 -0
- package/data/models/index.d.ts +9 -0
- package/data/models/negotiable-quote-model.d.ts +66 -10
- package/data/models/store-config-model.d.ts +27 -0
- package/data/transforms/__fixtures__/negotiableQuoteData.d.ts +274 -0
- package/data/transforms/__fixtures__/storeConfigData.d.ts +31 -0
- package/data/transforms/index.d.ts +1 -0
- package/data/transforms/transform-quote.d.ts +8 -0
- package/data/transforms/transform-store-config.d.ts +4 -0
- package/i18n/en_US.json.d.ts +51 -0
- package/lib/state.d.ts +2 -0
- package/package.json +1 -1
- package/render.js +3 -3
- package/render.js.map +1 -1
- package/types/state.types.d.ts +3 -0
- package/chunks/fetch-graphql.js +0 -4
- package/chunks/fetch-graphql.js.map +0 -1
- package/chunks/sendForReview.js +0 -21
- package/chunks/sendForReview.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transform-quote.js","sources":["/@dropins/storefront-quote-management/src/data/models/negotiable-quote-model.ts","/@dropins/storefront-quote-management/src/api/fetch-graphql/fetch-graphql.ts","/@dropins/storefront-quote-management/src/data/transforms/transform-quote.ts"],"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\nexport interface ShippingAddress {\n /**\n * The unique string identifier of the address\n */\n uid?: string;\n firstname: string;\n lastname: string;\n company?: string;\n street: string[];\n city: string;\n region?: {\n code: string;\n label: string;\n regionId: number;\n };\n postcode: string;\n country: {\n code: string;\n label: string;\n };\n telephone: string;\n}\n\nexport interface NegotiableQuoteModel {\n uid: string;\n name: string;\n createdAt: string;\n salesRepName: string;\n expirationDate: string;\n updatedAt: string;\n status: NegotiableQuoteStatus;\n isVirtual: boolean;\n buyer: {\n firstname: string;\n lastname: string;\n };\n templateName?: string;\n totalQuantity: number;\n comments?: {\n uid: string;\n createdAt: string;\n author: {\n firstname: string;\n lastname: string;\n };\n text: string;\n attachments?: {\n name: string;\n url: string;\n }[];\n }[];\n history?: NegotiableQuoteHistoryEntry[];\n prices: {\n appliedDiscounts?: Discount[];\n appliedTaxes?: Tax[];\n discount?: Currency;\n grandTotal?: Currency;\n grandTotalExcludingTax?: Currency;\n shippingExcludingTax?: Currency;\n shippingIncludingTax?: Currency;\n subtotalExcludingTax?: Currency;\n subtotalIncludingTax?: Currency;\n subtotalWithDiscountExcludingTax?: Currency;\n totalTax?: Currency;\n };\n items: NegotiableQuoteCartItem[];\n shippingAddresses?: ShippingAddress[];\n canCheckout: boolean;\n canSendForReview: boolean;\n lockedForEditing?: boolean;\n canDelete: boolean;\n}\n\nexport interface NegotiableQuoteCartItem {\n itemType: string;\n uid: string;\n product: {\n uid: string;\n sku: string;\n name: string;\n templateId?: string;\n templateName?: string;\n priceRange: {\n maximumPrice: {\n regularPrice: Currency;\n };\n };\n };\n image: ItemImage;\n links?: ItemLinks;\n discounted: boolean;\n discountedTotal: Currency;\n catalogDiscount: {\n amountOff: number;\n percentOff: number;\n };\n discounts: {\n label: string;\n value: string;\n amount: Currency;\n }[];\n discountPercentage?: number;\n insufficientQuantity?: boolean;\n outOfStock?: boolean;\n stockStatus: string;\n quantity: number;\n prices: {\n regularPrice: Currency;\n priceIncludingTax: Currency;\n originalItemPrice: Currency;\n originalRowTotal: Currency;\n rowTotal: Currency;\n rowTotalIncludingTax: Currency;\n };\n savingsAmount?: Currency;\n noteFromBuyer?: ItemNote[];\n noteFromSeller?: ItemNote[];\n configurableOptions?: {\n optionLabel: string;\n valueLabel: string;\n }[];\n bundleOptions?: {\n label: string;\n values: {\n label: string;\n quantity: number;\n originalPrice: Currency;\n price: Currency;\n }[];\n }[];\n customizableOptions?: {\n type: string;\n label: string;\n values: {\n label: string;\n value: string;\n }[];\n }[];\n}\n\ninterface ItemImage {\n src: string;\n alt: string;\n}\n\ninterface ItemLinks {\n count: number;\n result: string;\n}\n\nexport interface ItemNote {\n createdAt: string;\n creatorId: number;\n creatorType: number;\n negotiableQuoteItemUid: string;\n note: string;\n noteUid: string;\n}\n\nexport interface Currency {\n value: number;\n currency: string;\n}\n\nexport interface Tax {\n amount: Currency;\n label: string;\n}\n\nexport interface Discount {\n amount: Currency;\n label: string;\n coupon?: Coupon;\n}\n\nexport interface Coupon {\n code: string;\n}\n\nexport interface NegotiableQuoteListEntry {\n uid: string;\n name: string;\n createdAt: string;\n updatedAt: string;\n status: NegotiableQuoteStatus;\n buyer: {\n firstname: string;\n lastname: string;\n };\n templateName: string;\n prices: {\n grandTotal: Currency;\n };\n}\nexport interface NegotiableQuotesListModel {\n items: NegotiableQuoteListEntry[];\n pageInfo: {\n currentPage: number;\n pageSize: number;\n totalPages: number;\n };\n totalCount: number;\n paginationInfo?: PaginationInfo;\n sortFields?: {\n default: string;\n options: Array<{\n label: string;\n value: string;\n }>;\n };\n}\n\nexport interface NegotiableQuoteHistoryEntry {\n author: {\n firstname: string;\n lastname: string;\n };\n changeType: NegotiableQuoteHistoryEntryChangeType;\n changes: {\n commentAdded?: {\n comment: string;\n };\n customChanges?: {\n new_value: string;\n old_value: string;\n title: string;\n };\n expiration?: {\n newExpiration: string;\n oldExpiration: string;\n };\n productsRemoved?: {\n productsRemovedFromCatalog: string[];\n productsRemovedFromQuote?: {\n uid: string;\n name: string;\n sku: string;\n quantity: number;\n }[];\n };\n statuses?: {\n changes: {\n newStatus: string;\n oldStatus: string;\n }[];\n };\n total?: {\n newPrice: Currency;\n oldPrice: Currency;\n };\n };\n createdAt: string;\n uid: string;\n}\n\nexport enum NegotiableQuoteHistoryEntryChangeType {\n CREATED = 'CREATED',\n UPDATED = 'UPDATED',\n CLOSED = 'CLOSED',\n UPDATED_BY_SYSTEM = 'UPDATED_BY_SYSTEM',\n}\n\n// See: https://experienceleague.adobe.com/en/docs/commerce-admin/b2b/quotes/quotes#quote-status\nexport enum NegotiableQuoteStatus {\n NEW = 'NEW', // Currently not returned by the API, but is used to indicate a new quote\n SUBMITTED = 'SUBMITTED',\n PENDING = 'PENDING',\n UPDATED = 'UPDATED',\n OPEN = 'OPEN',\n ORDERED = 'ORDERED',\n CLOSED = 'CLOSED',\n DECLINED = 'DECLINED',\n EXPIRED = 'EXPIRED',\n DRAFT = 'DRAFT',\n}\n\nexport interface PaginationInfo {\n currentPage: number;\n totalCount: number;\n pageSize: number;\n startItem: number;\n endItem: number;\n totalPages: number;\n pageSizeOptions?: number[];\n}\n","import { FetchGraphQL } from '@adobe-commerce/fetch-graphql';\n\nexport const {\n setEndpoint,\n setFetchGraphQlHeader,\n removeFetchGraphQlHeader,\n setFetchGraphQlHeaders,\n fetchGraphQl,\n getConfig,\n} = new FetchGraphQL().getMethods();\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\nimport {\n NegotiableQuoteListEntry,\n NegotiableQuoteModel,\n NegotiableQuotesListModel,\n NegotiableQuoteStatus,\n PaginationInfo,\n ShippingAddress,\n} from '@/quote-management/data/models/negotiable-quote-model';\nimport { state } from '@/quote-management/lib/state';\n\n// Helper function to get the total quantity of a quote (number of quote line items or total quantity)\nfunction getTotalQuantity(quote: any) {\n if (!quote.items) return 0;\n\n const config = state.config;\n\n if (config?.quoteSummaryDisplayTotal === 0) return quote.items.length;\n if (config?.quoteSummaryDisplayTotal === 1) return quote.total_quantity;\n // Default to items count if unexpected config value or error returned\n return quote.items.length;\n}\n\n// Helper function to get the image for a cart item component\nfunction getImage(item: any) {\n const config = state.config;\n\n return {\n // Use parent thumbnail if configured, otherwise use own variant. Use the parent thumbnail as a fallback\n src: config?.useConfigurableParentThumbnail\n ? item.product.thumbnail.url\n : item.configured_variant?.thumbnail?.url || item.product.thumbnail.url,\n alt: config?.useConfigurableParentThumbnail\n ? item.product.thumbnail.label\n : item.configured_variant?.thumbnail?.label ||\n item.product.thumbnail.label,\n };\n}\n\n// Helper function to get downloadable links for a cart item component\nfunction getLinks(item: any) {\n return item.links?.length > 0\n ? {\n count: item.links.length,\n result: item.links.map((link: any) => link.title).join(', '),\n }\n : null;\n}\n\n/**\n * Finds the most applicable price tier for a given quantity\n * @param priceTiers - Array of price tier objects\n * @param quantity - Current item quantity\n * @returns The applicable tier or null if none found\n */\nfunction findApplicablePriceTier(priceTiers: any[], quantity: number) {\n if (!priceTiers?.length) return null;\n\n // Sort price tiers by quantity in descending order to find the highest applicable tier\n const sortedTiers = [...priceTiers].sort(\n (a: any, b: any) => b.quantity - a.quantity\n );\n\n // Find the highest tier where the current quantity meets or exceeds the tier's minimum quantity\n return sortedTiers.find((tier: any) => quantity >= tier.quantity) || null;\n}\n\n// Helper function to check if an item is discounted\nfunction getDiscounted(item: any) {\n const quantity = item.quantity;\n const isConfigurable = item.__typename === 'ConfigurableCartItem';\n\n // Get price tiers and price range based on item type\n const priceTiers = isConfigurable\n ? item.configured_variant?.price_tiers\n : item.product.price_tiers;\n const priceRange = isConfigurable\n ? item.configured_variant?.price_range\n : item.product.price_range;\n\n // Check price tiers first for discount eligibility\n const applicableTier = findApplicablePriceTier(priceTiers, quantity);\n if (applicableTier) {\n return applicableTier.discount.amount_off > 0;\n }\n\n // Fallback to regular price range discount\n return priceRange?.maximum_price.discount.amount_off > 0;\n}\n\n// Helper function to get the discount percentage of an item\nfunction getDiscountPercentage(item: any) {\n const quantity = item.quantity;\n\n // Check price tiers first for discount percentage\n const applicableTier = findApplicablePriceTier(\n item.product.price_tiers,\n quantity\n );\n\n if (applicableTier) {\n return Math.round(applicableTier.discount.percent_off);\n }\n\n // Fallback to product-specific discount percentage\n let percent_off;\n\n if (item.__typename === 'ConfigurableCartItem') {\n percent_off =\n item?.configured_variant?.price_range?.maximum_price?.discount\n ?.percent_off;\n } else if (item.__typename === 'BundleCartItem') {\n return undefined;\n } else {\n percent_off =\n item?.product?.price_range?.maximum_price?.discount?.percent_off;\n }\n\n if (percent_off === 0) {\n return undefined;\n }\n\n return Math.round(percent_off);\n}\n\n// Helper function to get the regular price of an item\nfunction getRegularPrice(item: any) {\n if (item.__typename === 'ConfigurableCartItem') {\n return {\n value:\n item.configured_variant?.price_range?.maximum_price.regular_price.value,\n currency:\n item.configured_variant?.price_range?.maximum_price.regular_price\n .currency,\n };\n }\n /* Out of scope by now:\n if (item.__typename === 'GiftCardCartItem') {\n return {\n value: item.prices.price.value,\n currency: item.prices.price.currency,\n };\n }*/\n return {\n value: item.prices.original_item_price.value,\n currency: item.prices.original_item_price.currency,\n };\n}\n\n// Helper function to get the savings amount of an item\nfunction getSavingsAmount(item: any) {\n let amount_off;\n let currency;\n\n amount_off =\n item?.prices?.original_row_total?.value - item?.prices?.row_total?.value;\n currency = item?.prices?.row_total?.currency;\n\n if (amount_off === 0) {\n return undefined;\n }\n return {\n value: amount_off,\n currency,\n };\n}\n\n// Base helper that transforms a single quote object directly\nfunction transformSingleQuote(quote: any): NegotiableQuoteModel {\n const isQuoteNew = isNewQuote(quote);\n return {\n uid: quote.uid,\n name: quote.name,\n createdAt: quote.created_at,\n updatedAt: quote.updated_at,\n expirationDate: quote.expiration_date,\n status: isQuoteNew ? NegotiableQuoteStatus.NEW : quote.status,\n isVirtual: Boolean(quote.is_virtual),\n salesRepName: quote.sales_rep_name,\n buyer: {\n firstname: quote.buyer.firstname,\n lastname: quote.buyer.lastname,\n },\n templateName: quote.template_name,\n totalQuantity: getTotalQuantity(quote),\n comments: quote.comments?.map((comment: any) => {\n const baseComment: any = {\n uid: comment.uid,\n createdAt: comment.created_at,\n author: {\n firstname: comment.author.firstname,\n lastname: comment.author.lastname,\n },\n text: comment.text,\n };\n\n if (\n Array.isArray(comment.attachments) &&\n comment.attachments.length > 0\n ) {\n baseComment.attachments = comment.attachments.map((a: any) => ({\n name: a.name,\n url: a.url,\n }));\n }\n\n return baseComment;\n }),\n prices: quote.prices && {\n appliedDiscounts: quote.prices.discounts?.map((discount: any) => ({\n amount: {\n value: discount.amount.value,\n currency: discount.amount.currency,\n },\n label: discount.label,\n coupon: discount.coupon,\n })),\n appliedTaxes: quote.prices.applied_taxes?.map((tax: any) => ({\n amount: { value: tax.amount.value, currency: tax.amount.currency },\n label: tax.label,\n })),\n discount:\n quote.prices.discounts &&\n quote.prices.grand_total &&\n calculateTotal(\n quote.prices.discounts,\n quote.prices.grand_total.currency\n ),\n grandTotal: quote.prices.grand_total && {\n value: quote.prices.grand_total.value,\n currency: quote.prices.grand_total.currency,\n },\n grandTotalExcludingTax: quote.prices.grand_total_excluding_tax && {\n value: quote.prices.grand_total_excluding_tax.value,\n currency: quote.prices.grand_total_excluding_tax.currency,\n },\n subtotalExcludingTax: quote.prices.subtotal_excluding_tax && {\n value: quote.prices.subtotal_excluding_tax.value,\n currency: quote.prices.subtotal_excluding_tax.currency,\n },\n subtotalIncludingTax: quote.prices.subtotal_including_tax && {\n value: quote.prices.subtotal_including_tax.value,\n currency: quote.prices.subtotal_including_tax.currency,\n },\n subtotalWithDiscountExcludingTax: quote.prices\n .subtotal_with_discount_excluding_tax && {\n value: quote.prices.subtotal_with_discount_excluding_tax.value,\n currency: quote.prices.subtotal_with_discount_excluding_tax.currency,\n },\n ...transformShippingPrices(quote),\n totalTax:\n quote.prices.applied_taxes &&\n quote.prices.grand_total &&\n calculateTotal(\n quote.prices.applied_taxes,\n quote.prices.grand_total.currency\n ),\n },\n history: quote.history?.map((history: any) => ({\n uid: history.uid,\n createdAt: history.created_at,\n author: {\n firstname: history.author.firstname,\n lastname: history.author.lastname,\n },\n changeType: history.change_type,\n changes: {\n commentAdded: history.changes?.comment_added && {\n comment: history.changes.comment_added.comment,\n },\n customChanges: history.changes?.custom_changes && {\n new_value: history.changes.custom_changes.new_value,\n old_value: history.changes.custom_changes.old_value,\n title: history.changes.custom_changes.title,\n },\n expiration: history.changes?.expiration && {\n newExpiration: history.changes.expiration.new_expiration,\n oldExpiration: history.changes.expiration.old_expiration,\n },\n productsRemoved: history.changes?.products_removed && {\n productsRemovedFromCatalog:\n history.changes.products_removed.products_removed_from_catalog ||\n [],\n productsRemovedFromQuote:\n history.changes.products_removed.products_removed_from_quote || [],\n },\n statuses: history.changes?.statuses && {\n changes:\n history.changes.statuses.changes?.map((change: any) => ({\n newStatus: change.new_status,\n oldStatus: change.old_status,\n })) || [],\n },\n total: history.changes?.total &&\n history.changes.total.new_price &&\n history.changes.total.old_price && {\n newPrice: {\n value: history.changes.total.new_price.value,\n currency: history.changes.total.new_price.currency,\n },\n oldPrice: {\n value: history.changes.total.old_price.value,\n currency: history.changes.total.old_price.currency,\n },\n },\n },\n })),\n items:\n quote.items?.map((item: any) => ({\n itemType: item.__typename,\n uid: item.uid,\n product: {\n uid: item.product.uid,\n sku: item.product.sku,\n name: item.product.name,\n priceRange: {\n maximumPrice: {\n regularPrice: {\n value:\n item.product.price_range.maximum_price.regular_price.value,\n currency:\n item.product.price_range.maximum_price.regular_price.currency,\n },\n },\n },\n },\n image: getImage(item),\n links: getLinks(item),\n discounted: getDiscounted(item),\n discountedTotal: {\n value: item.prices.row_total.value,\n currency: item.prices.row_total.currency,\n },\n catalogDiscount: {\n amountOff: item.prices.catalog_discount.amount_off,\n percentOff: item.prices.catalog_discount.percent_off,\n },\n discounts:\n item.prices?.discounts?.map((discount: any) => ({\n label: discount.label,\n value: discount.value,\n amount: {\n value: discount.amount.value,\n currency: discount.amount.currency,\n },\n })) ?? [],\n discountPercentage: getDiscountPercentage(item),\n insufficientQuantity:\n (item.__typename === 'ConfigurableCartItem'\n ? item.configured_variant\n : item.product\n ).stock_status === 'IN_STOCK' && !item.is_available,\n outOfStock: item.product.stock_status === 'OUT_OF_STOCK',\n stockStatus: item.product.stock_status,\n quantity: item.quantity,\n prices: {\n regularPrice: getRegularPrice(item),\n priceIncludingTax: {\n value: item.prices.price_including_tax.value,\n currency: item.prices.price_including_tax.currency,\n },\n originalItemPrice: {\n value: item.prices.original_item_price.value,\n currency: item.prices.original_item_price.currency,\n },\n originalRowTotal: {\n value: item.prices.original_row_total.value,\n currency: item.prices.original_row_total.currency,\n },\n rowTotal: {\n value: item.prices.row_total.value,\n currency: item.prices.row_total.currency,\n },\n rowTotalIncludingTax: {\n value: item.prices.row_total_including_tax.value,\n currency: item.prices.row_total_including_tax.currency,\n },\n },\n savingsAmount: getSavingsAmount(item),\n noteFromBuyer: item.note_from_buyer?.map((note: any) => ({\n createdAt: note.created_at,\n creatorId: note.creator_id,\n creatorType: note.creator_type,\n negotiableQuoteItemUid: note.negotiable_quote_item_uid,\n note: note.note,\n noteUid: note.note_uid,\n })),\n noteFromSeller: item.note_from_seller?.map((note: any) => ({\n createdAt: note.created_at,\n creatorId: note.creator_id,\n creatorType: note.creator_type,\n negotiableQuoteItemUid: note.negotiable_quote_item_uid,\n note: note.note,\n noteUid: note.note_uid,\n })),\n configurableOptions: item.configurable_options?.map((option: any) => ({\n optionLabel: option.option_label,\n valueLabel: option.value_label,\n })),\n bundleOptions: item.bundle_options?.map((option: any) => ({\n label: option.label,\n values: option.values.map((value: any) => ({\n label: value.label,\n quantity: value.quantity,\n originalPrice: {\n value: value.original_price.value,\n currency: value.original_price.currency,\n },\n price: {\n value: value.priceV2.value,\n currency: value.priceV2.currency,\n },\n })),\n })),\n customizableOptions: item.customizable_options?.map((option: any) => ({\n type: option.type,\n label: option.label,\n values: option.values.map((value: any) => ({\n label: value.label,\n value: value.value,\n })),\n })),\n })) || [],\n shippingAddresses: quote.shipping_addresses?.map((address: any) => {\n const shippingAddress: ShippingAddress = {\n uid: address.uid,\n firstname: address.firstname,\n lastname: address.lastname,\n company: address.company,\n street: address.street,\n city: address.city,\n postcode: address.postcode,\n country: {\n code: address.country.code,\n label: address.country.label,\n },\n telephone: address.telephone,\n };\n\n if (address.region) {\n shippingAddress.region = {\n code: address.region.code,\n label: address.region.label,\n regionId: address.region.region_id,\n };\n }\n\n return shippingAddress;\n }),\n canCheckout:\n ['UPDATED', 'DECLINED'].includes(quote.status) &&\n state.permissions.checkoutQuote &&\n quote.shipping_addresses?.length > 0,\n canSendForReview:\n (isQuoteNew ||\n ['DRAFT', 'UPDATED', 'DECLINED', 'EXPIRED', 'NEW'].includes(\n quote.status\n )) &&\n state.permissions.editQuote,\n canDelete:\n !['PENDING', 'SUBMITTED', 'ORDERED'].includes(quote.status) &&\n state.permissions.deleteQuote,\n };\n}\n\nexport function transformQuote(quoteData: any): NegotiableQuoteModel | null {\n if (!quoteData) {\n return null;\n }\n\n return transformSingleQuote(quoteData);\n}\n\n// quote is new if it has a status of SUBMITTED and there is no history entry that\n// has a change_type of UPDATED with a non-empty array of status changes\nfunction isNewQuote(quote: any): boolean {\n return (\n quote.status === 'SUBMITTED' &&\n !(quote.history ?? []).some(\n (history: any) =>\n history.change_type === 'UPDATED' &&\n (history.changes?.statuses?.changes ?? []).length > 0\n )\n );\n}\n\nfunction transformNegotiableQuoteListEntry(\n quote: any\n): NegotiableQuoteListEntry {\n const isQuoteNew = isNewQuote(quote);\n return {\n uid: quote.uid,\n name: quote.name,\n createdAt: quote.created_at,\n updatedAt: quote.updated_at,\n status: isQuoteNew ? NegotiableQuoteStatus.NEW : quote.status,\n buyer: {\n firstname: quote.buyer.firstname,\n lastname: quote.buyer.lastname,\n },\n templateName: quote.template_name,\n prices: {\n grandTotal: {\n value: quote.prices.grand_total.value,\n currency: quote.prices.grand_total.currency,\n },\n },\n };\n}\n\nexport function transformNegotiableQuotesList(\n quotesData: any\n): NegotiableQuotesListModel | null {\n if (!quotesData) {\n return null;\n }\n\n const transformedModel = {\n items:\n quotesData.items\n ?.filter((quote: any) => quote?.uid)\n .map(transformNegotiableQuoteListEntry) || [],\n pageInfo: {\n currentPage: quotesData.page_info.current_page,\n pageSize: quotesData.page_info.page_size,\n totalPages: quotesData.page_info.total_pages,\n },\n totalCount: quotesData.total_count,\n sortFields: quotesData.sort_fields\n ? {\n default: quotesData.sort_fields.default,\n options: quotesData.sort_fields.options,\n }\n : undefined,\n };\n\n // Calculate pagination info\n const paginationInfo = transformPaginationInfo(transformedModel);\n\n return {\n ...transformedModel,\n paginationInfo: paginationInfo || undefined,\n };\n}\n\nexport function transformPaginationInfo(\n quotesData: NegotiableQuotesListModel | null\n): PaginationInfo | null {\n if (!quotesData?.pageInfo || !quotesData.totalCount) {\n return null;\n }\n\n const { currentPage, pageSize, totalPages } = quotesData.pageInfo;\n const { totalCount } = quotesData;\n\n const startItem = totalCount > 0 ? (currentPage - 1) * pageSize + 1 : 0;\n const endItem = Math.min(currentPage * pageSize, totalCount);\n\n const pageSizeOptions = [20, 30, 50, 100, 200]; // Default page size options\n\n return {\n currentPage,\n totalCount,\n pageSize,\n startItem,\n endItem,\n totalPages,\n pageSizeOptions,\n };\n}\n\n// TODO: Check if admin has this configuration\nexport const getDefaultPageSizeOptions = () => [20, 30, 50, 100, 200];\n\nexport function calculateTotal(data: any[], currency: string) {\n if (!data?.length)\n return {\n value: 0,\n currency,\n };\n\n return data.reduce(\n (acc: any, item: any) => {\n return {\n value: acc.value + item.amount.value,\n currency: item.amount.currency,\n };\n },\n { value: 0, currency }\n );\n}\n\nexport function transformShippingPrices(quote: any) {\n if (!quote || !quote.shipping_addresses?.length) {\n return {};\n }\n\n const shippingAddress = quote.shipping_addresses[0];\n const selectedShippingMethod = shippingAddress.selected_shipping_method;\n\n if (!selectedShippingMethod) {\n return {};\n }\n\n return {\n shippingIncludingTax: selectedShippingMethod.price_incl_tax && {\n value: selectedShippingMethod.price_incl_tax.value,\n currency: selectedShippingMethod.price_incl_tax.currency,\n },\n shippingExcludingTax: selectedShippingMethod.price_excl_tax && {\n value: selectedShippingMethod.price_excl_tax.value,\n currency: selectedShippingMethod.price_excl_tax.currency,\n },\n };\n}\n"],"names":["NegotiableQuoteStatus","setEndpoint","setFetchGraphQlHeader","removeFetchGraphQlHeader","setFetchGraphQlHeaders","fetchGraphQl","getConfig","FetchGraphQL","getTotalQuantity","quote","config","state","getImage","item","_b","_a","_d","_c","getLinks","link","findApplicablePriceTier","priceTiers","quantity","a","b","tier","getDiscounted","isConfigurable","priceRange","applicableTier","getDiscountPercentage","percent_off","_h","_g","_f","_e","getRegularPrice","getSavingsAmount","amount_off","currency","transformSingleQuote","isQuoteNew","isNewQuote","comment","baseComment","discount","tax","calculateTotal","transformShippingPrices","history","change","note","option","value","address","shippingAddress","transformQuote","quoteData","transformNegotiableQuoteListEntry","transformNegotiableQuotesList","quotesData","transformedModel","paginationInfo","transformPaginationInfo","currentPage","pageSize","totalPages","totalCount","startItem","endItem","getDefaultPageSizeOptions","data","acc","selectedShippingMethod"],"mappings":"8FAgRO,IAAKA,GAAAA,IACVA,EAAA,IAAM,MACNA,EAAA,UAAY,YACZA,EAAA,QAAU,UACVA,EAAA,QAAU,UACVA,EAAA,KAAO,OACPA,EAAA,QAAU,UACVA,EAAA,OAAS,SACTA,EAAA,SAAW,WACXA,EAAA,QAAU,UACVA,EAAA,MAAQ,QAVEA,IAAAA,GAAA,CAAA,CAAA,EC9QL,KAAM,CACX,YAAAC,EACA,sBAAAC,EACA,yBAAAC,EACA,uBAAAC,EACA,aAAAC,EACA,UAAAC,CACF,EAAI,IAAIC,EAAA,EAAe,WAAA,ECkBvB,SAASC,EAAiBC,EAAY,CACpC,GAAI,CAACA,EAAM,MAAO,MAAO,GAEzB,MAAMC,EAASC,EAAM,OAErB,OAAID,GAAA,YAAAA,EAAQ,4BAA6B,EAAUD,EAAM,MAAM,QAC3DC,GAAA,YAAAA,EAAQ,4BAA6B,EAAUD,EAAM,eAElDA,EAAM,MAAM,MACrB,CAGA,SAASG,EAASC,EAAW,aAC3B,MAAMH,EAASC,EAAM,OAErB,MAAO,CAEL,IAAKD,GAAA,MAAAA,EAAQ,+BACTG,EAAK,QAAQ,UAAU,MACvBC,GAAAC,EAAAF,EAAK,qBAAL,YAAAE,EAAyB,YAAzB,YAAAD,EAAoC,MAAOD,EAAK,QAAQ,UAAU,IACtE,IAAKH,GAAA,MAAAA,EAAQ,+BACTG,EAAK,QAAQ,UAAU,QACvBG,GAAAC,EAAAJ,EAAK,qBAAL,YAAAI,EAAyB,YAAzB,YAAAD,EAAoC,QACpCH,EAAK,QAAQ,UAAU,KAAA,CAE/B,CAGA,SAASK,EAASL,EAAW,OAC3B,QAAOE,EAAAF,EAAK,QAAL,YAAAE,EAAY,QAAS,EACxB,CACE,MAAOF,EAAK,MAAM,OAClB,OAAQA,EAAK,MAAM,IAAKM,GAAcA,EAAK,KAAK,EAAE,KAAK,IAAI,CAAA,EAE7D,IACN,CAQA,SAASC,EAAwBC,EAAmBC,EAAkB,CACpE,OAAKD,GAAA,MAAAA,EAAY,QAGG,CAAC,GAAGA,CAAU,EAAE,KAClC,CAACE,EAAQC,IAAWA,EAAE,SAAWD,EAAE,QAAA,EAIlB,KAAME,GAAcH,GAAYG,EAAK,QAAQ,GAAK,IACvE,CAGA,SAASC,EAAcb,EAAW,SAChC,MAAMS,EAAWT,EAAK,SAChBc,EAAiBd,EAAK,aAAe,uBAGrCQ,EAAaM,GACfZ,EAAAF,EAAK,qBAAL,YAAAE,EAAyB,YACzBF,EAAK,QAAQ,YACXe,EAAaD,GACfb,EAAAD,EAAK,qBAAL,YAAAC,EAAyB,YACzBD,EAAK,QAAQ,YAGXgB,EAAiBT,EAAwBC,EAAYC,CAAQ,EACnE,OAAIO,EACKA,EAAe,SAAS,WAAa,GAIvCD,GAAA,YAAAA,EAAY,cAAc,SAAS,YAAa,CACzD,CAGA,SAASE,EAAsBjB,EAAW,qBACxC,MAAMS,EAAWT,EAAK,SAGhBgB,EAAiBT,EACrBP,EAAK,QAAQ,YACbS,CAAA,EAGF,GAAIO,EACF,OAAO,KAAK,MAAMA,EAAe,SAAS,WAAW,EAIvD,IAAIE,EAEJ,GAAIlB,EAAK,aAAe,uBACtBkB,GACEf,GAAAC,GAAAH,GAAAC,EAAAF,GAAA,YAAAA,EAAM,qBAAN,YAAAE,EAA0B,cAA1B,YAAAD,EAAuC,gBAAvC,YAAAG,EAAsD,WAAtD,YAAAD,EACI,gBACR,IAAWH,EAAK,aAAe,iBAC7B,OAEAkB,GACEC,GAAAC,GAAAC,GAAAC,EAAAtB,GAAA,YAAAA,EAAM,UAAN,YAAAsB,EAAe,cAAf,YAAAD,EAA4B,gBAA5B,YAAAD,EAA2C,WAA3C,YAAAD,EAAqD,YAGzD,GAAID,IAAgB,EAIpB,OAAO,KAAK,MAAMA,CAAW,CAC/B,CAGA,SAASK,EAAgBvB,EAAW,aAClC,OAAIA,EAAK,aAAe,uBACf,CACL,OACEC,GAAAC,EAAAF,EAAK,qBAAL,YAAAE,EAAyB,cAAzB,YAAAD,EAAsC,cAAc,cAAc,MACpE,UACEE,GAAAC,EAAAJ,EAAK,qBAAL,YAAAI,EAAyB,cAAzB,YAAAD,EAAsC,cAAc,cACjD,QAAA,EAUF,CACL,MAAOH,EAAK,OAAO,oBAAoB,MACvC,SAAUA,EAAK,OAAO,oBAAoB,QAAA,CAE9C,CAGA,SAASwB,EAAiBxB,EAAW,iBACnC,IAAIyB,EACAC,EAMJ,GAJAD,IACExB,GAAAC,EAAAF,GAAA,YAAAA,EAAM,SAAN,YAAAE,EAAc,qBAAd,YAAAD,EAAkC,SAAQE,GAAAC,EAAAJ,GAAA,YAAAA,EAAM,SAAN,YAAAI,EAAc,YAAd,YAAAD,EAAyB,OACrEuB,GAAWL,GAAAC,EAAAtB,GAAA,YAAAA,EAAM,SAAN,YAAAsB,EAAc,YAAd,YAAAD,EAAyB,SAEhCI,IAAe,EAGnB,MAAO,CACL,MAAOA,EACP,SAAAC,CAAA,CAEJ,CAGA,SAASC,EAAqB/B,EAAkC,mBAC9D,MAAMgC,EAAaC,EAAWjC,CAAK,EACnC,MAAO,CACL,IAAKA,EAAM,IACX,KAAMA,EAAM,KACZ,UAAWA,EAAM,WACjB,UAAWA,EAAM,WACjB,eAAgBA,EAAM,gBACtB,OAAQgC,EAAazC,EAAsB,IAAMS,EAAM,OACvD,UAAW,EAAQA,EAAM,WACzB,aAAcA,EAAM,eACpB,MAAO,CACL,UAAWA,EAAM,MAAM,UACvB,SAAUA,EAAM,MAAM,QAAA,EAExB,aAAcA,EAAM,cACpB,cAAeD,EAAiBC,CAAK,EACrC,UAAUM,EAAAN,EAAM,WAAN,YAAAM,EAAgB,IAAK4B,GAAiB,CAC9C,MAAMC,EAAmB,CACvB,IAAKD,EAAQ,IACb,UAAWA,EAAQ,WACnB,OAAQ,CACN,UAAWA,EAAQ,OAAO,UAC1B,SAAUA,EAAQ,OAAO,QAAA,EAE3B,KAAMA,EAAQ,IAAA,EAGhB,OACE,MAAM,QAAQA,EAAQ,WAAW,GACjCA,EAAQ,YAAY,OAAS,IAE7BC,EAAY,YAAcD,EAAQ,YAAY,IAAKpB,IAAY,CAC7D,KAAMA,EAAE,KACR,IAAKA,EAAE,GAAA,EACP,GAGGqB,CACT,GACA,OAAQnC,EAAM,QAAU,CACtB,kBAAkBK,EAAAL,EAAM,OAAO,YAAb,YAAAK,EAAwB,IAAK+B,IAAmB,CAChE,OAAQ,CACN,MAAOA,EAAS,OAAO,MACvB,SAAUA,EAAS,OAAO,QAAA,EAE5B,MAAOA,EAAS,MAChB,OAAQA,EAAS,MAAA,IAEnB,cAAc5B,EAAAR,EAAM,OAAO,gBAAb,YAAAQ,EAA4B,IAAK6B,IAAc,CAC3D,OAAQ,CAAE,MAAOA,EAAI,OAAO,MAAO,SAAUA,EAAI,OAAO,QAAA,EACxD,MAAOA,EAAI,KAAA,IAEb,SACErC,EAAM,OAAO,WACbA,EAAM,OAAO,aACbsC,EACEtC,EAAM,OAAO,UACbA,EAAM,OAAO,YAAY,QAAA,EAE7B,WAAYA,EAAM,OAAO,aAAe,CACtC,MAAOA,EAAM,OAAO,YAAY,MAChC,SAAUA,EAAM,OAAO,YAAY,QAAA,EAErC,uBAAwBA,EAAM,OAAO,2BAA6B,CAChE,MAAOA,EAAM,OAAO,0BAA0B,MAC9C,SAAUA,EAAM,OAAO,0BAA0B,QAAA,EAEnD,qBAAsBA,EAAM,OAAO,wBAA0B,CAC3D,MAAOA,EAAM,OAAO,uBAAuB,MAC3C,SAAUA,EAAM,OAAO,uBAAuB,QAAA,EAEhD,qBAAsBA,EAAM,OAAO,wBAA0B,CAC3D,MAAOA,EAAM,OAAO,uBAAuB,MAC3C,SAAUA,EAAM,OAAO,uBAAuB,QAAA,EAEhD,iCAAkCA,EAAM,OACrC,sCAAwC,CACzC,MAAOA,EAAM,OAAO,qCAAqC,MACzD,SAAUA,EAAM,OAAO,qCAAqC,QAAA,EAE9D,GAAGuC,EAAwBvC,CAAK,EAChC,SACEA,EAAM,OAAO,eACbA,EAAM,OAAO,aACbsC,EACEtC,EAAM,OAAO,cACbA,EAAM,OAAO,YAAY,QAAA,CAC3B,EAEJ,SAASO,EAAAP,EAAM,UAAN,YAAAO,EAAe,IAAKiC,GAAA,mBAAkB,OAC7C,IAAKA,EAAQ,IACb,UAAWA,EAAQ,WACnB,OAAQ,CACN,UAAWA,EAAQ,OAAO,UAC1B,SAAUA,EAAQ,OAAO,QAAA,EAE3B,WAAYA,EAAQ,YACpB,QAAS,CACP,eAAclC,EAAAkC,EAAQ,UAAR,YAAAlC,EAAiB,gBAAiB,CAC9C,QAASkC,EAAQ,QAAQ,cAAc,OAAA,EAEzC,gBAAenC,EAAAmC,EAAQ,UAAR,YAAAnC,EAAiB,iBAAkB,CAChD,UAAWmC,EAAQ,QAAQ,eAAe,UAC1C,UAAWA,EAAQ,QAAQ,eAAe,UAC1C,MAAOA,EAAQ,QAAQ,eAAe,KAAA,EAExC,aAAYhC,EAAAgC,EAAQ,UAAR,YAAAhC,EAAiB,aAAc,CACzC,cAAegC,EAAQ,QAAQ,WAAW,eAC1C,cAAeA,EAAQ,QAAQ,WAAW,cAAA,EAE5C,kBAAiBjC,EAAAiC,EAAQ,UAAR,YAAAjC,EAAiB,mBAAoB,CACpD,2BACEiC,EAAQ,QAAQ,iBAAiB,+BACjC,CAAA,EACF,yBACEA,EAAQ,QAAQ,iBAAiB,6BAA+B,CAAA,CAAC,EAErE,WAAUd,EAAAc,EAAQ,UAAR,YAAAd,EAAiB,WAAY,CACrC,UACED,EAAAe,EAAQ,QAAQ,SAAS,UAAzB,YAAAf,EAAkC,IAAKgB,IAAiB,CACtD,UAAWA,EAAO,WAClB,UAAWA,EAAO,UAAA,MACb,CAAA,CAAC,EAEZ,QAAOjB,EAAAgB,EAAQ,UAAR,YAAAhB,EAAiB,QACtBgB,EAAQ,QAAQ,MAAM,WACtBA,EAAQ,QAAQ,MAAM,WAAa,CACjC,SAAU,CACR,MAAOA,EAAQ,QAAQ,MAAM,UAAU,MACvC,SAAUA,EAAQ,QAAQ,MAAM,UAAU,QAAA,EAE5C,SAAU,CACR,MAAOA,EAAQ,QAAQ,MAAM,UAAU,MACvC,SAAUA,EAAQ,QAAQ,MAAM,UAAU,QAAA,CAC5C,CACF,CACJ,IAEF,QACEd,EAAA1B,EAAM,QAAN,YAAA0B,EAAa,IAAKtB,GAAA,mBAAe,OAC/B,SAAUA,EAAK,WACf,IAAKA,EAAK,IACV,QAAS,CACP,IAAKA,EAAK,QAAQ,IAClB,IAAKA,EAAK,QAAQ,IAClB,KAAMA,EAAK,QAAQ,KACnB,WAAY,CACV,aAAc,CACZ,aAAc,CACZ,MACEA,EAAK,QAAQ,YAAY,cAAc,cAAc,MACvD,SACEA,EAAK,QAAQ,YAAY,cAAc,cAAc,QAAA,CACzD,CACF,CACF,EAEF,MAAOD,EAASC,CAAI,EACpB,MAAOK,EAASL,CAAI,EACpB,WAAYa,EAAcb,CAAI,EAC9B,gBAAiB,CACf,MAAOA,EAAK,OAAO,UAAU,MAC7B,SAAUA,EAAK,OAAO,UAAU,QAAA,EAElC,gBAAiB,CACf,UAAWA,EAAK,OAAO,iBAAiB,WACxC,WAAYA,EAAK,OAAO,iBAAiB,WAAA,EAE3C,YACEC,GAAAC,EAAAF,EAAK,SAAL,YAAAE,EAAa,YAAb,YAAAD,EAAwB,IAAK+B,IAAmB,CAC9C,MAAOA,EAAS,MAChB,MAAOA,EAAS,MAChB,OAAQ,CACN,MAAOA,EAAS,OAAO,MACvB,SAAUA,EAAS,OAAO,QAAA,CAC5B,MACK,CAAA,EACT,mBAAoBf,EAAsBjB,CAAI,EAC9C,sBACGA,EAAK,aAAe,uBACjBA,EAAK,mBACLA,EAAK,SACP,eAAiB,YAAc,CAACA,EAAK,aACzC,WAAYA,EAAK,QAAQ,eAAiB,eAC1C,YAAaA,EAAK,QAAQ,aAC1B,SAAUA,EAAK,SACf,OAAQ,CACN,aAAcuB,EAAgBvB,CAAI,EAClC,kBAAmB,CACjB,MAAOA,EAAK,OAAO,oBAAoB,MACvC,SAAUA,EAAK,OAAO,oBAAoB,QAAA,EAE5C,kBAAmB,CACjB,MAAOA,EAAK,OAAO,oBAAoB,MACvC,SAAUA,EAAK,OAAO,oBAAoB,QAAA,EAE5C,iBAAkB,CAChB,MAAOA,EAAK,OAAO,mBAAmB,MACtC,SAAUA,EAAK,OAAO,mBAAmB,QAAA,EAE3C,SAAU,CACR,MAAOA,EAAK,OAAO,UAAU,MAC7B,SAAUA,EAAK,OAAO,UAAU,QAAA,EAElC,qBAAsB,CACpB,MAAOA,EAAK,OAAO,wBAAwB,MAC3C,SAAUA,EAAK,OAAO,wBAAwB,QAAA,CAChD,EAEF,cAAewB,EAAiBxB,CAAI,EACpC,eAAeI,EAAAJ,EAAK,kBAAL,YAAAI,EAAsB,IAAKkC,IAAe,CACvD,UAAWA,EAAK,WAChB,UAAWA,EAAK,WAChB,YAAaA,EAAK,aAClB,uBAAwBA,EAAK,0BAC7B,KAAMA,EAAK,KACX,QAASA,EAAK,QAAA,IAEhB,gBAAgBnC,EAAAH,EAAK,mBAAL,YAAAG,EAAuB,IAAKmC,IAAe,CACzD,UAAWA,EAAK,WAChB,UAAWA,EAAK,WAChB,YAAaA,EAAK,aAClB,uBAAwBA,EAAK,0BAC7B,KAAMA,EAAK,KACX,QAASA,EAAK,QAAA,IAEhB,qBAAqBhB,EAAAtB,EAAK,uBAAL,YAAAsB,EAA2B,IAAKiB,IAAiB,CACpE,YAAaA,EAAO,aACpB,WAAYA,EAAO,WAAA,IAErB,eAAelB,EAAArB,EAAK,iBAAL,YAAAqB,EAAqB,IAAKkB,IAAiB,CACxD,MAAOA,EAAO,MACd,OAAQA,EAAO,OAAO,IAAKC,IAAgB,CACzC,MAAOA,EAAM,MACb,SAAUA,EAAM,SAChB,cAAe,CACb,MAAOA,EAAM,eAAe,MAC5B,SAAUA,EAAM,eAAe,QAAA,EAEjC,MAAO,CACL,MAAOA,EAAM,QAAQ,MACrB,SAAUA,EAAM,QAAQ,QAAA,CAC1B,EACA,CAAA,IAEJ,qBAAqBpB,EAAApB,EAAK,uBAAL,YAAAoB,EAA2B,IAAKmB,IAAiB,CACpE,KAAMA,EAAO,KACb,MAAOA,EAAO,MACd,OAAQA,EAAO,OAAO,IAAKC,IAAgB,CACzC,MAAOA,EAAM,MACb,MAAOA,EAAM,KAAA,EACb,CAAA,GACF,MACG,CAAA,EACT,mBAAmBnB,EAAAzB,EAAM,qBAAN,YAAAyB,EAA0B,IAAKoB,GAAiB,CACjE,MAAMC,EAAmC,CACvC,IAAKD,EAAQ,IACb,UAAWA,EAAQ,UACnB,SAAUA,EAAQ,SAClB,QAASA,EAAQ,QACjB,OAAQA,EAAQ,OAChB,KAAMA,EAAQ,KACd,SAAUA,EAAQ,SAClB,QAAS,CACP,KAAMA,EAAQ,QAAQ,KACtB,MAAOA,EAAQ,QAAQ,KAAA,EAEzB,UAAWA,EAAQ,SAAA,EAGrB,OAAIA,EAAQ,SACVC,EAAgB,OAAS,CACvB,KAAMD,EAAQ,OAAO,KACrB,MAAOA,EAAQ,OAAO,MACtB,SAAUA,EAAQ,OAAO,SAAA,GAItBC,CACT,GACA,YACE,CAAC,UAAW,UAAU,EAAE,SAAS9C,EAAM,MAAM,GAC7CE,EAAM,YAAY,iBAClBsB,EAAAxB,EAAM,qBAAN,YAAAwB,EAA0B,QAAS,EACrC,kBACGQ,GACC,CAAC,QAAS,UAAW,WAAY,UAAW,KAAK,EAAE,SACjDhC,EAAM,MAAA,IAEVE,EAAM,YAAY,UACpB,UACE,CAAC,CAAC,UAAW,YAAa,SAAS,EAAE,SAASF,EAAM,MAAM,GAC1DE,EAAM,YAAY,WAAA,CAExB,CAEO,SAAS6C,EAAeC,EAA6C,CAC1E,OAAKA,EAIEjB,EAAqBiB,CAAS,EAH5B,IAIX,CAIA,SAASf,EAAWjC,EAAqB,CACvC,OACEA,EAAM,SAAW,aACjB,EAAEA,EAAM,SAAW,CAAA,GAAI,KACpBwC,GAAA,SACC,OAAAA,EAAQ,cAAgB,cACvBnC,GAAAC,EAAAkC,EAAQ,UAAR,YAAAlC,EAAiB,WAAjB,YAAAD,EAA2B,UAAW,CAAA,GAAI,OAAS,EAAA,CAG5D,CAEA,SAAS4C,EACPjD,EAC0B,CAC1B,MAAMgC,EAAaC,EAAWjC,CAAK,EACnC,MAAO,CACL,IAAKA,EAAM,IACX,KAAMA,EAAM,KACZ,UAAWA,EAAM,WACjB,UAAWA,EAAM,WACjB,OAAQgC,EAAazC,EAAsB,IAAMS,EAAM,OACvD,MAAO,CACL,UAAWA,EAAM,MAAM,UACvB,SAAUA,EAAM,MAAM,QAAA,EAExB,aAAcA,EAAM,cACpB,OAAQ,CACN,WAAY,CACV,MAAOA,EAAM,OAAO,YAAY,MAChC,SAAUA,EAAM,OAAO,YAAY,QAAA,CACrC,CACF,CAEJ,CAEO,SAASkD,EACdC,EACkC,OAClC,GAAI,CAACA,EACH,OAAO,KAGT,MAAMC,EAAmB,CACvB,QACE9C,EAAA6C,EAAW,QAAX,YAAA7C,EACI,OAAQN,GAAeA,GAAA,YAAAA,EAAO,KAC/B,IAAIiD,KAAsC,CAAA,EAC/C,SAAU,CACR,YAAaE,EAAW,UAAU,aAClC,SAAUA,EAAW,UAAU,UAC/B,WAAYA,EAAW,UAAU,WAAA,EAEnC,WAAYA,EAAW,YACvB,WAAYA,EAAW,YACnB,CACE,QAASA,EAAW,YAAY,QAChC,QAASA,EAAW,YAAY,OAAA,EAElC,MAAA,EAIAE,EAAiBC,EAAwBF,CAAgB,EAE/D,MAAO,CACL,GAAGA,EACH,eAAgBC,GAAkB,MAAA,CAEtC,CAEO,SAASC,EACdH,EACuB,CACvB,GAAI,EAACA,GAAA,MAAAA,EAAY,WAAY,CAACA,EAAW,WACvC,OAAO,KAGT,KAAM,CAAE,YAAAI,EAAa,SAAAC,EAAU,WAAAC,CAAA,EAAeN,EAAW,SACnD,CAAE,WAAAO,GAAeP,EAEjBQ,EAAYD,EAAa,GAAKH,EAAc,GAAKC,EAAW,EAAI,EAChEI,EAAU,KAAK,IAAIL,EAAcC,EAAUE,CAAU,EAI3D,MAAO,CACL,YAAAH,EACA,WAAAG,EACA,SAAAF,EACA,UAAAG,EACA,QAAAC,EACA,WAAAH,EACA,gBATsB,CAAC,GAAI,GAAI,GAAI,IAAK,GAAG,CAS3C,CAEJ,CAGO,MAAMI,EAA4B,IAAM,CAAC,GAAI,GAAI,GAAI,IAAK,GAAG,EAE7D,SAASvB,EAAewB,EAAahC,EAAkB,CAC5D,OAAKgC,GAAA,MAAAA,EAAM,OAMJA,EAAK,OACV,CAACC,EAAU3D,KACF,CACL,MAAO2D,EAAI,MAAQ3D,EAAK,OAAO,MAC/B,SAAUA,EAAK,OAAO,QAAA,GAG1B,CAAE,MAAO,EAAG,SAAA0B,CAAA,CAAS,EAZd,CACL,MAAO,EACP,SAAAA,CAAA,CAYN,CAEO,SAASS,EAAwBvC,EAAY,OAClD,GAAI,CAACA,GAAS,GAACM,EAAAN,EAAM,qBAAN,MAAAM,EAA0B,QACvC,MAAO,CAAA,EAIT,MAAM0D,EADkBhE,EAAM,mBAAmB,CAAC,EACH,yBAE/C,OAAKgE,EAIE,CACL,qBAAsBA,EAAuB,gBAAkB,CAC7D,MAAOA,EAAuB,eAAe,MAC7C,SAAUA,EAAuB,eAAe,QAAA,EAElD,qBAAsBA,EAAuB,gBAAkB,CAC7D,MAAOA,EAAuB,eAAe,MAC7C,SAAUA,EAAuB,eAAe,QAAA,CAClD,EAXO,CAAA,CAaX"}
|
package/chunks/uploadFile.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*! Copyright 2025 Adobe
|
|
2
2
|
All Rights Reserved. */
|
|
3
|
-
import{f as l,t as w}from"./
|
|
3
|
+
import{f as l,t as w}from"./transform-quote.js";import"./state.js";import{events as E}from"@dropins/tools/event-bus.js";import{N as f}from"./NegotiableQuoteFragment.js";const N=`
|
|
4
4
|
mutation REQUEST_NEGOTIABLE_QUOTE_MUTATION(
|
|
5
5
|
$cartId: ID!
|
|
6
6
|
$quoteName: String!
|
|
@@ -21,7 +21,7 @@ import{f as l,t as w}from"./fetch-graphql.js";import{events as E}from"@dropins/t
|
|
|
21
21
|
}
|
|
22
22
|
}
|
|
23
23
|
${f}
|
|
24
|
-
|
|
24
|
+
`,$=async t=>{const{cartId:n,quoteName:e,comment:o,attachments:r,isDraft:i}=t;if(!n)throw new Error("Cart ID is required");if(!e)throw new Error("Quote name is required");if(!o)throw new Error("Comment is required");return l(N,{variables:{cartId:n,quoteName:e,comment:r!=null&&r.length?{comment:o,attachments:r}:{comment:o},isDraft:i}}).then(m=>{var s,u;const{errors:d}=m;if(d){const c=d.map(p=>p.message).join("; ");throw new Error(`Failed to request negotiable quote: ${c}`)}const a=w((u=(s=m.data)==null?void 0:s.requestNegotiableQuote)==null?void 0:u.quote);if(!a)throw new Error("Failed to transform quote data: Invalid response structure");return E.emit("quote-management/negotiable-quote-requested",{quote:a,input:{cartId:n,quoteName:e,comment:o,attachments:r,isDraft:i}}),a})},h=`
|
|
25
25
|
mutation INITIATE_UPLOAD_MUTATION($input: initiateUploadInput!) {
|
|
26
26
|
initiateUpload(input: $input) {
|
|
27
27
|
upload_url
|
|
@@ -37,5 +37,5 @@ import{f as l,t as w}from"./fetch-graphql.js";import{events as E}from"@dropins/t
|
|
|
37
37
|
message
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
|
-
|
|
40
|
+
`,Q=async t=>{const n="NEGOTIABLE_QUOTE_ATTACHMENT";try{const e=t==null?void 0:t.name;if(!t||!e)throw new Error("Invalid file");const o=I=>I.map(_=>_.message).join("; "),{data:r,errors:i}=await l(h,{variables:{input:{key:e,media_resource_type:n}}});if(i&&i.length)throw new Error(o(i));const{upload_url:m,key:d}=(r==null?void 0:r.initiateUpload)||{};if(!m||!d)throw new Error("Failed to initiate upload");const a=await fetch(m,{method:"PUT",body:t});if(!a.ok)throw new Error(`Upload failed: ${a.status} ${a.statusText}`);const{data:s,errors:u}=await l(U,{variables:{input:{key:d,media_resource_type:n}}});if(u&&u.length)throw new Error(o(u));const{success:c,key:p,message:T}=(s==null?void 0:s.finishUpload)||{};if(!c||!p)throw new Error(T||"Failed to finish upload");return{key:p}}catch(e){throw E.emit("quote-management/file-upload-error",{error:(e==null?void 0:e.message)||"File upload failed",fileName:t==null?void 0:t.name}),e instanceof Error?e:new Error("File upload failed")}};export{$ as r,Q as u};
|
|
41
41
|
//# sourceMappingURL=uploadFile.js.map
|
package/chunks/uploadFile.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uploadFile.js","sources":["/@dropins/storefront-quote-management/src/api/requestNegotiableQuote/graphql/RequestNegotiableQuoteMutation.ts","/@dropins/storefront-quote-management/src/api/requestNegotiableQuote/requestNegotiableQuote.ts","/@dropins/storefront-quote-management/src/api/uploadFile/graphql/InitiateUploadMutation.ts","/@dropins/storefront-quote-management/src/api/uploadFile/graphql/FinishUploadMutation.ts","/@dropins/storefront-quote-management/src/api/uploadFile/uploadFile.ts"],"sourcesContent":["/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { NEGOTIABLE_QUOTE_FRAGMENT } from '@/quote-management/api/graphql/NegotiableQuoteFragment';\n\nexport const REQUEST_NEGOTIABLE_QUOTE_MUTATION = `\n mutation REQUEST_NEGOTIABLE_QUOTE_MUTATION(\n $cartId: ID!\n $quoteName: String!\n $comment: NegotiableQuoteCommentInput!\n $isDraft: Boolean\n ) {\n requestNegotiableQuote(\n input: {\n cart_id: $cartId\n quote_name: $quoteName\n comment: $comment\n is_draft: $isDraft\n }\n ) {\n quote {\n ...NegotiableQuoteFragment\n }\n }\n }\n ${NEGOTIABLE_QUOTE_FRAGMENT}\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 { fetchGraphQl } from '@/quote-management/api';\nimport { events } from '@adobe-commerce/event-bus';\nimport { REQUEST_NEGOTIABLE_QUOTE_MUTATION } from './graphql/RequestNegotiableQuoteMutation';\nimport { NegotiableQuoteModel } from '@/quote-management/data/models/negotiable-quote-model';\nimport { transformQuote } from '@/quote-management/data/transforms';\n\nexport interface RequestNegotiableQuoteInput {\n cartId: string;\n quoteName: string;\n comment: string;\n isDraft?: boolean;\n attachments?: { key: string }[];\n}\n\nexport const requestNegotiableQuote = async (\n input: RequestNegotiableQuoteInput\n): Promise<NegotiableQuoteModel | null> => {\n const { cartId, quoteName, comment, attachments, isDraft } = input;\n\n if (!cartId) {\n throw new Error('Cart ID is required');\n }\n\n if (!quoteName) {\n throw new Error('Quote name is required');\n }\n\n if (!comment) {\n throw new Error('Comment is required');\n }\n\n return fetchGraphQl(REQUEST_NEGOTIABLE_QUOTE_MUTATION, {\n variables: {\n cartId,\n quoteName,\n comment: attachments?.length ? { comment, attachments } : { comment },\n isDraft,\n },\n }).then((response) => {\n const { errors } = response;\n\n if (errors) {\n // Provide more detailed error information\n const errorMessages = errors.map((error) => error.message).join('; ');\n throw new Error(`Failed to request negotiable quote: ${errorMessages}`);\n }\n\n // Transform the quote data\n const quoteData = transformQuote(response.data?.requestNegotiableQuote?.quote);\n\n if (!quoteData) {\n throw new Error(\n 'Failed to transform quote data: Invalid response structure'\n );\n }\n\n // Emit event with transformed quote data on success\n events.emit('quote-management/negotiable-quote-requested', {\n quote: quoteData,\n input: { cartId, quoteName, comment, attachments, isDraft },\n });\n\n return quoteData;\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\nexport const INITIATE_UPLOAD_MUTATION = `\n mutation INITIATE_UPLOAD_MUTATION($input: initiateUploadInput!) {\n initiateUpload(input: $input) {\n upload_url\n key\n expires_at\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\nexport const FINISH_UPLOAD_MUTATION = `\n mutation FINISH_UPLOAD_MUTATION($input: finishUploadInput!) {\n finishUpload(input: $input) {\n success\n key\n message\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 { fetchGraphQl } from '@/quote-management/api';\nimport { events } from '@adobe-commerce/event-bus';\nimport { INITIATE_UPLOAD_MUTATION } from '@/quote-management/api/uploadFile/graphql/InitiateUploadMutation';\nimport { FINISH_UPLOAD_MUTATION } from '@/quote-management/api/uploadFile/graphql/FinishUploadMutation';\n\ntype GraphQLError = { message: string };\ntype InitiateUploadData = {\n initiateUpload?: {\n upload_url: string;\n key: string;\n expires_at: string;\n };\n};\ntype FinishUploadData = {\n finishUpload?: {\n success: boolean;\n key: string;\n message?: string;\n };\n};\ntype GraphQLResponse<T> = {\n data?: T;\n errors?: GraphQLError[];\n};\n\nexport const uploadFile = async (file: File): Promise<{ key: string }> => {\n const mediaResourceType = 'NEGOTIABLE_QUOTE_ATTACHMENT';\n\n try {\n const filename = file?.name;\n if (!file || !filename) throw new Error('Invalid file');\n\n const formatGraphQLErrors = (errors: GraphQLError[]): string =>\n errors.map((e) => e.message).join('; ');\n\n const { data: initialData, errors: initialErrors } = (await fetchGraphQl(\n INITIATE_UPLOAD_MUTATION,\n { \n variables: { input: { key: filename, media_resource_type: mediaResourceType } } \n }\n )) as GraphQLResponse<InitiateUploadData>;\n if (initialErrors && initialErrors.length) throw new Error(formatGraphQLErrors(initialErrors));\n\n const { upload_url, key } = initialData?.initiateUpload || {};\n if (!upload_url || !key) throw new Error('Failed to initiate upload');\n\n const put = await fetch(upload_url, { method: 'PUT', body: file });\n if (!put.ok) throw new Error(`Upload failed: ${put.status} ${put.statusText}`);\n\n const { data: finishData, errors: finishErrors } = (await fetchGraphQl(\n FINISH_UPLOAD_MUTATION,\n { \n variables: { input: { key, media_resource_type: mediaResourceType } } \n }\n )) as GraphQLResponse<FinishUploadData>;\n if (finishErrors && finishErrors.length) throw new Error(formatGraphQLErrors(finishErrors));\n\n const { success, key: finalizedKey, message } = finishData?.finishUpload || {};\n if (!success || !finalizedKey) throw new Error(message || 'Failed to finish upload');\n\n return { key: finalizedKey };\n \n } catch (err: any) {\n events.emit('quote-management/file-upload-error', {\n error: err?.message || 'File upload failed',\n fileName: file?.name,\n });\n throw err instanceof Error ? err : new Error('File upload failed');\n }\n};\n"],"names":["REQUEST_NEGOTIABLE_QUOTE_MUTATION","NEGOTIABLE_QUOTE_FRAGMENT","requestNegotiableQuote","input","cartId","quoteName","comment","attachments","isDraft","fetchGraphQl","response","errors","errorMessages","error","quoteData","transformQuote","_b","_a","events","INITIATE_UPLOAD_MUTATION","FINISH_UPLOAD_MUTATION","uploadFile","file","mediaResourceType","filename","formatGraphQLErrors","e","initialData","initialErrors","upload_url","key","put","finishData","finishErrors","success","finalizedKey","message","err"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"uploadFile.js","sources":["/@dropins/storefront-quote-management/src/api/requestNegotiableQuote/graphql/RequestNegotiableQuoteMutation.ts","/@dropins/storefront-quote-management/src/api/requestNegotiableQuote/requestNegotiableQuote.ts","/@dropins/storefront-quote-management/src/api/uploadFile/graphql/InitiateUploadMutation.ts","/@dropins/storefront-quote-management/src/api/uploadFile/graphql/FinishUploadMutation.ts","/@dropins/storefront-quote-management/src/api/uploadFile/uploadFile.ts"],"sourcesContent":["/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { NEGOTIABLE_QUOTE_FRAGMENT } from '@/quote-management/api/graphql/NegotiableQuoteFragment';\n\nexport const REQUEST_NEGOTIABLE_QUOTE_MUTATION = `\n mutation REQUEST_NEGOTIABLE_QUOTE_MUTATION(\n $cartId: ID!\n $quoteName: String!\n $comment: NegotiableQuoteCommentInput!\n $isDraft: Boolean\n ) {\n requestNegotiableQuote(\n input: {\n cart_id: $cartId\n quote_name: $quoteName\n comment: $comment\n is_draft: $isDraft\n }\n ) {\n quote {\n ...NegotiableQuoteFragment\n }\n }\n }\n ${NEGOTIABLE_QUOTE_FRAGMENT}\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 { fetchGraphQl } from '@/quote-management/api';\nimport { events } from '@adobe-commerce/event-bus';\nimport { REQUEST_NEGOTIABLE_QUOTE_MUTATION } from './graphql/RequestNegotiableQuoteMutation';\nimport { NegotiableQuoteModel } from '@/quote-management/data/models/negotiable-quote-model';\nimport { transformQuote } from '@/quote-management/data/transforms';\n\nexport interface RequestNegotiableQuoteInput {\n cartId: string;\n quoteName: string;\n comment: string;\n isDraft?: boolean;\n attachments?: { key: string }[];\n}\n\nexport const requestNegotiableQuote = async (\n input: RequestNegotiableQuoteInput\n): Promise<NegotiableQuoteModel | null> => {\n const { cartId, quoteName, comment, attachments, isDraft } = input;\n\n if (!cartId) {\n throw new Error('Cart ID is required');\n }\n\n if (!quoteName) {\n throw new Error('Quote name is required');\n }\n\n if (!comment) {\n throw new Error('Comment is required');\n }\n\n return fetchGraphQl(REQUEST_NEGOTIABLE_QUOTE_MUTATION, {\n variables: {\n cartId,\n quoteName,\n comment: attachments?.length ? { comment, attachments } : { comment },\n isDraft,\n },\n }).then((response) => {\n const { errors } = response;\n\n if (errors) {\n // Provide more detailed error information\n const errorMessages = errors.map((error) => error.message).join('; ');\n throw new Error(`Failed to request negotiable quote: ${errorMessages}`);\n }\n\n // Transform the quote data\n const quoteData = transformQuote(response.data?.requestNegotiableQuote?.quote);\n\n if (!quoteData) {\n throw new Error(\n 'Failed to transform quote data: Invalid response structure'\n );\n }\n\n // Emit event with transformed quote data on success\n events.emit('quote-management/negotiable-quote-requested', {\n quote: quoteData,\n input: { cartId, quoteName, comment, attachments, isDraft },\n });\n\n return quoteData;\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\nexport const INITIATE_UPLOAD_MUTATION = `\n mutation INITIATE_UPLOAD_MUTATION($input: initiateUploadInput!) {\n initiateUpload(input: $input) {\n upload_url\n key\n expires_at\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\nexport const FINISH_UPLOAD_MUTATION = `\n mutation FINISH_UPLOAD_MUTATION($input: finishUploadInput!) {\n finishUpload(input: $input) {\n success\n key\n message\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 { fetchGraphQl } from '@/quote-management/api';\nimport { events } from '@adobe-commerce/event-bus';\nimport { INITIATE_UPLOAD_MUTATION } from '@/quote-management/api/uploadFile/graphql/InitiateUploadMutation';\nimport { FINISH_UPLOAD_MUTATION } from '@/quote-management/api/uploadFile/graphql/FinishUploadMutation';\n\ntype GraphQLError = { message: string };\ntype InitiateUploadData = {\n initiateUpload?: {\n upload_url: string;\n key: string;\n expires_at: string;\n };\n};\ntype FinishUploadData = {\n finishUpload?: {\n success: boolean;\n key: string;\n message?: string;\n };\n};\ntype GraphQLResponse<T> = {\n data?: T;\n errors?: GraphQLError[];\n};\n\nexport const uploadFile = async (file: File): Promise<{ key: string }> => {\n const mediaResourceType = 'NEGOTIABLE_QUOTE_ATTACHMENT';\n\n try {\n const filename = file?.name;\n if (!file || !filename) throw new Error('Invalid file');\n\n const formatGraphQLErrors = (errors: GraphQLError[]): string =>\n errors.map((e) => e.message).join('; ');\n\n const { data: initialData, errors: initialErrors } = (await fetchGraphQl(\n INITIATE_UPLOAD_MUTATION,\n { \n variables: { input: { key: filename, media_resource_type: mediaResourceType } } \n }\n )) as GraphQLResponse<InitiateUploadData>;\n if (initialErrors && initialErrors.length) throw new Error(formatGraphQLErrors(initialErrors));\n\n const { upload_url, key } = initialData?.initiateUpload || {};\n if (!upload_url || !key) throw new Error('Failed to initiate upload');\n\n const put = await fetch(upload_url, { method: 'PUT', body: file });\n if (!put.ok) throw new Error(`Upload failed: ${put.status} ${put.statusText}`);\n\n const { data: finishData, errors: finishErrors } = (await fetchGraphQl(\n FINISH_UPLOAD_MUTATION,\n { \n variables: { input: { key, media_resource_type: mediaResourceType } } \n }\n )) as GraphQLResponse<FinishUploadData>;\n if (finishErrors && finishErrors.length) throw new Error(formatGraphQLErrors(finishErrors));\n\n const { success, key: finalizedKey, message } = finishData?.finishUpload || {};\n if (!success || !finalizedKey) throw new Error(message || 'Failed to finish upload');\n\n return { key: finalizedKey };\n \n } catch (err: any) {\n events.emit('quote-management/file-upload-error', {\n error: err?.message || 'File upload failed',\n fileName: file?.name,\n });\n throw err instanceof Error ? err : new Error('File upload failed');\n }\n};\n"],"names":["REQUEST_NEGOTIABLE_QUOTE_MUTATION","NEGOTIABLE_QUOTE_FRAGMENT","requestNegotiableQuote","input","cartId","quoteName","comment","attachments","isDraft","fetchGraphQl","response","errors","errorMessages","error","quoteData","transformQuote","_b","_a","events","INITIATE_UPLOAD_MUTATION","FINISH_UPLOAD_MUTATION","uploadFile","file","mediaResourceType","filename","formatGraphQLErrors","e","initialData","initialErrors","upload_url","key","put","finishData","finishErrors","success","finalizedKey","message","err"],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { FunctionComponent, VNode } from 'preact';
|
|
2
|
+
import { HTMLAttributes } from 'preact/compat';
|
|
3
|
+
|
|
4
|
+
export interface ConfirmationModalProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {
|
|
5
|
+
open?: boolean;
|
|
6
|
+
title?: VNode | string;
|
|
7
|
+
message?: VNode | string;
|
|
8
|
+
cancelLabel?: VNode | string;
|
|
9
|
+
confirmLabel?: VNode | string;
|
|
10
|
+
onCancel?: () => void;
|
|
11
|
+
onConfirm?: () => void;
|
|
12
|
+
showCloseButton?: boolean;
|
|
13
|
+
confirmationBanner?: VNode | null;
|
|
14
|
+
}
|
|
15
|
+
export declare const ConfirmationModal: FunctionComponent<ConfirmationModalProps>;
|
|
16
|
+
//# sourceMappingURL=ConfirmationModal.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 './ConfirmationModal';
|
|
10
|
+
export { ConfirmationModal as default } from './ConfirmationModal';
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -9,18 +9,21 @@ export interface OrderSummaryLineItem {
|
|
|
9
9
|
sortOrder: number;
|
|
10
10
|
content: string | JSXInternal.Element | VNode<HTMLAttributes<HTMLDivElement>> | OrderSummaryLineItem[] | undefined;
|
|
11
11
|
}
|
|
12
|
-
export interface OrderSummaryProps extends
|
|
12
|
+
export interface OrderSummaryProps extends HTMLAttributes<HTMLDivElement> {
|
|
13
13
|
variant?: 'primary' | 'secondary';
|
|
14
14
|
heading?: VNode<HTMLAttributes<HTMLDivElement>>;
|
|
15
|
-
loading?: boolean;
|
|
16
15
|
subTotal?: {
|
|
17
16
|
price: VNode<HTMLAttributes<HTMLSpanElement>>;
|
|
18
17
|
priceExcludingTax?: VNode<HTMLAttributes<HTMLSpanElement>>;
|
|
19
18
|
taxIncluded?: boolean;
|
|
20
19
|
taxExcluded?: boolean;
|
|
21
|
-
zeroTaxSubtotal?: boolean;
|
|
22
20
|
};
|
|
23
|
-
shipping?:
|
|
21
|
+
shipping?: {
|
|
22
|
+
price: VNode<HTMLAttributes<HTMLSpanElement>>;
|
|
23
|
+
priceExcludingTax?: VNode<HTMLAttributes<HTMLSpanElement>>;
|
|
24
|
+
taxIncluded?: boolean;
|
|
25
|
+
taxExcluded?: boolean;
|
|
26
|
+
};
|
|
24
27
|
discounts?: {
|
|
25
28
|
label: string;
|
|
26
29
|
price: VNode<HTMLAttributes<HTMLSpanElement>>;
|
|
@@ -38,28 +41,6 @@ export interface OrderSummaryProps extends Omit<HTMLAttributes<HTMLDivElement>,
|
|
|
38
41
|
price: VNode<HTMLAttributes<HTMLSpanElement>>;
|
|
39
42
|
priceWithoutTax?: VNode<HTMLAttributes<HTMLSpanElement>>;
|
|
40
43
|
};
|
|
41
|
-
printedCard?: {
|
|
42
|
-
renderContent: boolean;
|
|
43
|
-
taxIncluded: boolean;
|
|
44
|
-
taxInclAndExcl: boolean;
|
|
45
|
-
priceExclTax: VNode<HTMLAttributes<HTMLSpanElement>>;
|
|
46
|
-
priceInclTax: VNode<HTMLAttributes<HTMLSpanElement>>;
|
|
47
|
-
};
|
|
48
|
-
itemsGiftWrapping?: {
|
|
49
|
-
renderContent: boolean;
|
|
50
|
-
taxIncluded: boolean;
|
|
51
|
-
taxInclAndExcl: boolean;
|
|
52
|
-
priceExclTax: VNode<HTMLAttributes<HTMLSpanElement>>;
|
|
53
|
-
priceInclTax: VNode<HTMLAttributes<HTMLSpanElement>>;
|
|
54
|
-
};
|
|
55
|
-
orderGiftWrapping?: {
|
|
56
|
-
renderContent: boolean;
|
|
57
|
-
taxIncluded: boolean;
|
|
58
|
-
taxInclAndExcl: boolean;
|
|
59
|
-
priceExclTax: VNode<HTMLAttributes<HTMLSpanElement>>;
|
|
60
|
-
priceInclTax: VNode<HTMLAttributes<HTMLSpanElement>>;
|
|
61
|
-
};
|
|
62
|
-
primaryAction?: VNode<HTMLAttributes<HTMLButtonElement>>;
|
|
63
44
|
totalSaved?: VNode<HTMLAttributes<HTMLSpanElement>>;
|
|
64
45
|
updateLineItems?: (lineItems: Array<OrderSummaryLineItem>) => Array<OrderSummaryLineItem>;
|
|
65
46
|
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { FunctionComponent, VNode } from 'preact';
|
|
2
|
+
import { HTMLAttributes } from 'preact/compat';
|
|
3
|
+
|
|
4
|
+
export interface RenameQuoteModalProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {
|
|
5
|
+
open: boolean;
|
|
6
|
+
quoteName: string;
|
|
7
|
+
renameReason: string;
|
|
8
|
+
quoteNameError?: string;
|
|
9
|
+
errorBanner?: VNode;
|
|
10
|
+
successBanner?: VNode;
|
|
11
|
+
showCloseButton?: boolean;
|
|
12
|
+
onQuoteNameChange: (value: string) => void;
|
|
13
|
+
onRenameReasonChange: (value: string) => void;
|
|
14
|
+
onSave: () => void;
|
|
15
|
+
onClose?: () => void;
|
|
16
|
+
}
|
|
17
|
+
export declare const RenameQuoteModal: FunctionComponent<RenameQuoteModalProps>;
|
|
18
|
+
//# sourceMappingURL=RenameQuoteModal.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 './RenameQuoteModal';
|
|
10
|
+
export { RenameQuoteModal as default } from './RenameQuoteModal';
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
package/components/index.d.ts
CHANGED
|
@@ -15,9 +15,11 @@ export * from './ProductListTable';
|
|
|
15
15
|
export * from './QuotePricesSummary';
|
|
16
16
|
export * from './QuoteSummaryList';
|
|
17
17
|
export * from './QuotesListTable';
|
|
18
|
+
export * from './ConfirmationModal';
|
|
18
19
|
export * from './QuoteHistoryLog';
|
|
19
20
|
export * from './ShippingAddressDisplay';
|
|
20
21
|
export * from './RequestNegotiableQuoteForm';
|
|
21
22
|
export * from './TabbedContent';
|
|
22
23
|
export * from './QuoteCommentsList';
|
|
24
|
+
export * from './RenameQuoteModal';
|
|
23
25
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
/*! Copyright 2025 Adobe
|
|
2
2
|
All Rights Reserved. */
|
|
3
|
-
import{jsx as t,jsxs as p}from"@dropins/tools/preact-jsx-runtime.js";import{useState as x,useMemo as b,useEffect as M,useCallback as F}from"@dropins/tools/preact-compat.js";import{classes as d,VComponent as c,Slot as u,getGlobalLocale as D}from"@dropins/tools/lib.js";/* empty css */import{Picker as J,Skeleton as K,SkeletonRow as Q,InLineAlert as Y,Button as C,TextArea as Z}from"@dropins/tools/components.js";import{events as y}from"@dropins/tools/event-bus.js";/* empty css */import"@dropins/tools/preact.js";/* empty css *//* empty css *//* empty css */import{S as O}from"../chunks/ShippingAddressDisplay.js";import{Q as k}from"../chunks/QuoteHistoryLog.js";import"../chunks/fetch-graphql.js";import{s as B}from"../chunks/sendForReview.js";import{I as A}from"../chunks/ItemsQuoted.js";import{Q as ee}from"../chunks/QuoteCommentsList.js";import{S as ae}from"../chunks/WarningFilled.js";import{useText as te}from"@dropins/tools/i18n.js";import"@dropins/tools/fetch-graphql.js";import"../chunks/NegotiableQuoteFragment.js";const ne=({className:q,dropdownPlaceholder:e,dropdownOptions:n,handleDropdownChange:s,buttons:g,...a})=>{const f=n&&n.length>0,h=g&&g.length>0,l=(n==null?void 0:n.map(m=>({text:m.label,value:m.value})))||[];return l.unshift({text:e||"",value:""}),t("div",{className:"quote-management-actions-bar__container","data-testid":"actions-bar-container",children:p("div",{className:d(["quote-management-actions-bar",q]),"data-testid":"actions-bar",...a,children:[f&&t(J,{name:"dropdown",id:"dropdown",onInput:s,className:"quote-management-actions-bar__dropdown","data-testid":"dropdown",options:l}),h&&t("div",{className:"quote-management-actions-bar__buttons","data-testid":"buttons-container",children:g==null?void 0:g.map((m,_)=>t(c,{node:m,className:d(["quote-management-actions-bar__button"])},_))})]})})},re=({className:q,loading:e,quoteName:n,quoteStatus:s,banner:g,details:a,actionBar:f,quoteContent:h,shippingInformationTitle:l,shippingInformation:m,quoteCommentsTitle:_,quoteComments:v,footer:T,...r})=>e?t(ie,{}):p("div",{...r,className:d(["quote-management-manage-negotiable-quote",q]),children:[p("div",{className:d(["quote-management-manage-negotiable-quote__header"]),children:[n&&t(c,{node:n,className:d(["quote-management-manage-negotiable-quote__quote-name"])}),s&&t(c,{node:s,className:d(["quote-management-manage-negotiable-quote__quote-status"])})]}),g&&t(c,{node:g,className:d(["quote-management-manage-negotiable-quote__banner"])}),a&&t(c,{node:a,className:d(["quote-management-manage-negotiable-quote__details"])}),f&&t(c,{node:f,className:d(["quote-management-manage-negotiable-quote__action-bar"])}),h&&t(c,{node:h,className:d(["quote-management-manage-negotiable-quote__quote-content"])}),p("div",{"data-testid":"quote-shipping-information-container",className:d(["quote-management-manage-negotiable-quote__shipping-information-container"]),children:[l&&t(c,{node:l,className:d(["quote-management-manage-negotiable-quote__shipping-information-title"])}),m&&t(c,{node:m,className:d(["quote-management-manage-negotiable-quote__shipping-information"])})]}),p("div",{"data-testid":"quote-comments-container",className:d(["quote-management-manage-negotiable-quote__quote-comments-container"]),children:[_&&t(c,{node:_,className:d(["quote-management-manage-negotiable-quote__quote-comments-title"])}),v&&t(c,{node:v,className:d(["quote-management-manage-negotiable-quote__quote-comments"])})]}),t(c,{node:T,className:d(["quote-management-manage-negotiable-quote__footer"])})]}),ie=()=>p(K,{"data-testid":"manage-negotiable-quote-skeleton",children:[t(Q,{variant:"heading",fullWidth:!0,size:"large"}),t(Q,{variant:"row",fullWidth:!1,size:"small"}),t(Q,{variant:"row",fullWidth:!1,size:"small"}),t(Q,{variant:"row",fullWidth:!0}),t(Q,{variant:"row",fullWidth:!0,size:"xlarge",lines:2}),t(Q,{variant:"row",fullWidth:!1,size:"small"})]}),me=({className:q,tabs:e,tabsContent:n,defaultActiveTab:s,...g})=>{const[a,f]=x(s||Array.from(e.keys())[0]),h=m=>{f(m)},l=b(()=>n.get(a),[a,n]);return p("div",{...g,className:d(["quote-management-tabbed-content",q]),children:[e&&t("div",{"data-testid":"tabbed-content-tabs",className:d(["quote-management-tabbed-content__tabs"]),children:Array.from(e.entries()).map(([m,_])=>t("button",{className:d(["quote-management-tabbed-content__tab",["quote-management-tabbed-content__tab--active",m===a]]),onClick:()=>h(m),children:_},m))}),l&&t("div",{className:d(["quote-management-tabbed-content__active-tab-content"]),children:t(c,{node:l})})]})},we=({onActionsDropdownChange:q,slots:e,onActionsButtonClick:n,onSendForReview:s,...g})=>{const[a,f]=x(void 0),[h,l]=x(!0),[m,_]=x(""),[v,T]=x(!1),r=te({createdLabel:"NegotiableQuote.Manage.createdLabel",salesRepLabel:"NegotiableQuote.Manage.salesRepLabel",expiresLabel:"NegotiableQuote.Manage.expiresLabel",actionsLabel:"NegotiableQuote.Manage.actionsLabel",remove:"NegotiableQuote.Manage.actions.remove",close:"NegotiableQuote.Manage.actionButtons.close",delete:"NegotiableQuote.Manage.actionButtons.delete",print:"NegotiableQuote.Manage.actionButtons.print",createTemplate:"NegotiableQuote.Manage.actionButtons.createTemplate",createCopy:"NegotiableQuote.Manage.actionButtons.createCopy",shippingInformationTitle:"NegotiableQuote.Manage.shippingInformation.title",quoteCommentsTitle:"NegotiableQuote.Manage.quoteComments.title",quoteCommentsPlaceholder:"NegotiableQuote.Manage.quoteComments.placeholder",sendForReview:"NegotiableQuote.Manage.actionButtons.sendForReview",bannerTitle:"NegotiableQuote.Manage.bannerTitle",statusSubmitted:"NegotiableQuote.Manage.bannerStatusMessages.submitted",statusPending:"NegotiableQuote.Manage.bannerStatusMessages.pending",statusExpired:"NegotiableQuote.Manage.bannerStatusMessages.expired"});M(()=>{const o=y.on("quote-management/quote-data",N=>{const{quote:i}=N;i&&(f(i),l(!1))},{eager:!0});return()=>o==null?void 0:o.off()},[]),M(()=>{const o=y.on("quote-management/shipping-address-set",N=>{const{quote:i}=N;i&&f(i)},{eager:!0});return()=>o==null?void 0:o.off()},[]),M(()=>{const o=y.on("quote-management/quote-sent-for-review",N=>{const{quote:i}=N;f(i),_(""),T(!1)},{eager:!0});return()=>o==null?void 0:o.off()},[]);const P=b(()=>t(u,{name:"QuoteName",slot:e==null?void 0:e.QuoteName,context:{quoteName:a==null?void 0:a.name,quoteData:a},children:t("h1",{"data-testid":"quote-name",children:a==null?void 0:a.name})}),[e==null?void 0:e.QuoteName,a]),R=b(()=>t(u,{name:"QuoteStatus",slot:e==null?void 0:e.QuoteStatus,context:{quoteStatus:a==null?void 0:a.status,quoteData:a},children:t("div",{"data-testid":"quote-status",children:a==null?void 0:a.status})}),[e==null?void 0:e.QuoteStatus,a]),S=F(o=>{switch(o){case"SUBMITTED":return r.statusSubmitted;case"PENDING":return r.statusPending;case"EXPIRED":return r.statusExpired;default:return null}},[r])(a==null?void 0:a.status),I=S&&t(Y,{type:"warning",variant:"secondary",icon:t(ae,{}),heading:r.bannerTitle,description:S}),W=I&&t(u,{name:"Banner","data-testid":"banner",slot:e==null?void 0:e.Banner,context:{quoteData:a},children:I}),z=b(()=>{if(!a)return null;const o=D()||"en-US",N=new Intl.DateTimeFormat(o,{year:"numeric",month:"long",day:"numeric"});let i;try{i=N.format(new Date(a.expirationDate))}catch{i=a.expirationDate}return p(u,{name:"Details",slot:e==null?void 0:e.Details,context:{quoteData:a},children:[p("div",{className:"quote-management-manage-negotiable-quote__detail",children:[t("span",{className:"quote-management-manage-negotiable-quote__detail-title","data-testid":"created-label",children:r.createdLabel}),p("span",{className:"quote-management-manage-negotiable-quote__detail-content","data-testid":"created-value",children:[N.format(new Date(a.createdAt))," (",a.buyer.firstname," ",a.buyer.lastname,")"]})]}),p("div",{className:"quote-management-manage-negotiable-quote__detail",children:[t("span",{className:"quote-management-manage-negotiable-quote__detail-title","data-testid":"sales-rep-label",children:r.salesRepLabel}),t("span",{className:"quote-management-manage-negotiable-quote__detail-content","data-testid":"sales-rep-value",children:a.salesRepName})]}),p("div",{className:"quote-management-manage-negotiable-quote__detail",children:[t("span",{className:"quote-management-manage-negotiable-quote__detail-title","data-testid":"expires-label",children:r.expiresLabel}),t("span",{className:"quote-management-manage-negotiable-quote__detail-content","data-testid":"expires-value",children:i})]})]})},[e==null?void 0:e.Details,r,a]),L=b(()=>[{label:r.close,value:"close"},{label:r.delete,value:"delete"},{label:r.print,value:"print"},{label:r.createTemplate,value:"createTemplate"},{label:r.createCopy,value:"createCopy"}],[r]),H=b(()=>{const o=i=>{q==null||q(i)},N=i=>{switch(i){case"close":n==null||n(i);break;case"delete":n==null||n(i);break;case"print":n==null||n(i);break;case"createTemplate":n==null||n(i);break;case"createCopy":n==null||n(i);break}};return t(u,{name:"ActionBar",slot:e==null?void 0:e.ActionBar,context:{quoteData:a},children:t(ne,{dropdownPlaceholder:r.actionsLabel,dropdownOptions:[{label:r.remove,value:"remove"}],handleDropdownChange:o,buttons:L.map(i=>t(C,{variant:"tertiary",onClick:()=>N(i.value),"data-testid":`actions-bar-${i.value}-button`,"data-action":i.value,disabled:i.disabled,children:i.label},i.value))})})},[L,r,e==null?void 0:e.ActionBar,a,q,n]),E=b(()=>t(u,{name:"QuoteContent",slot:e==null?void 0:e.QuoteContent,context:{quoteData:a},children:t(me,{tabs:new Map([["items-quoted","Items Quoted"],["comments","Comments"],["history-log","History Log"]]),tabsContent:new Map([["items-quoted",t(u,{name:"ItemsQuotedTab",slot:e==null?void 0:e.ItemsQuotedTab,context:{quoteData:a},children:t(A,{quoteData:a})},"items-quoted")],["comments",t(u,{name:"CommentsTab",slot:e==null?void 0:e.CommentsTab,context:{quoteData:a},children:t(ee,{quoteData:a})},"comments")],["history-log",t(u,{name:"HistoryLogTab",slot:e==null?void 0:e.HistoryLogTab,context:{quoteData:a},children:t(k,{quoteData:a})},"history-log")]])})}),[e==null?void 0:e.QuoteContent,e==null?void 0:e.HistoryLogTab,e==null?void 0:e.CommentsTab,e==null?void 0:e.ItemsQuotedTab,a]),U=b(()=>t(u,{name:"ShippingInformationTitle",slot:e==null?void 0:e.ShippingInformationTitle,context:{quoteData:a},children:t("h2",{children:r.shippingInformationTitle})}),[e==null?void 0:e.ShippingInformationTitle,a,r]),j=b(()=>t(u,{name:"ShippingInformation",slot:e==null?void 0:e.ShippingInformation,context:{quoteData:a,loading:h,setLoading:l},children:t(O,{quoteData:a,loading:h,"data-testid":"manage-quote-shipping-address"})}),[e==null?void 0:e.ShippingInformation,a,h,l]),G=b(()=>t(u,{name:"QuoteCommentsTitle",slot:e==null?void 0:e.QuoteCommentsTitle,context:{quoteData:a},children:t("h2",{children:r.quoteCommentsTitle})}),[e==null?void 0:e.QuoteCommentsTitle,r,a]),$=b(()=>t(u,{name:"QuoteComments",slot:e==null?void 0:e.QuoteComments,context:{quoteData:a},children:t(Z,{name:"quoteComments",placeholder:r.quoteCommentsPlaceholder,rows:3,value:m,onInput:o=>{_(o.target.value)},disabled:v})}),[e==null?void 0:e.QuoteComments,r,a,m,v]),w=F(async()=>{if(s){s({quoteData:a,comment:m.trim()||void 0});return}T(!0);try{await B({quoteUid:a.uid,comment:m.trim()||void 0})}catch(o){console.error("Failed to send quote for review:",o),T(!1)}},[a,s,m]),V=b(()=>t(u,{name:"Footer",slot:e==null?void 0:e.Footer,context:{quoteData:a,comment:m,isSubmitting:v},children:t(C,{variant:"primary",onClick:w,"data-testid":"send-for-review-button",disabled:!(a!=null&&a.canSendForReview)||v||!a,children:r.sendForReview})}),[e==null?void 0:e.Footer,r,a,m,v,w]),X={...g,loading:h,quoteName:P,quoteStatus:R,banner:W||void 0,details:z,actionBar:H,quoteContent:E,shippingInformationTitle:U,shippingInformation:j,quoteCommentsTitle:G,quoteComments:$,footer:V};return t(re,{...X})};export{we as ManageNegotiableQuote,we as default};
|
|
3
|
+
import{jsx as t,jsxs as l,Fragment as re}from"@dropins/tools/preact-jsx-runtime.js";import*as te from"@dropins/tools/preact-compat.js";import{useState as _,useMemo as v,useEffect as P,useCallback as Q,createPortal as ne}from"@dropins/tools/preact-compat.js";import{classes as m,VComponent as M,Slot as q,getGlobalLocale as Ee}from"@dropins/tools/lib.js";/* empty css */import{Picker as Re,Skeleton as we,SkeletonRow as x,Modal as ie,Button as C,Input as Ie,TextArea as me,InLineAlert as R}from"@dropins/tools/components.js";import{events as z}from"@dropins/tools/event-bus.js";/* empty css */import"@dropins/tools/preact.js";import{useText as V}from"@dropins/tools/i18n.js";/* empty css *//* empty css *//* empty css */import{S as Fe}from"../chunks/ShippingAddressDisplay.js";import{Q as He}from"../chunks/QuoteHistoryLog.js";import{I as ke}from"../chunks/ItemsQuoted.js";import"../chunks/state.js";import{r as Pe,s as ze,d as We}from"../chunks/renameNegotiableQuote.js";import{Q as Be}from"../chunks/QuoteCommentsList.js";import{a as $,S as oe}from"../chunks/WarningFilled.js";import"../chunks/transform-quote.js";import"@dropins/tools/fetch-graphql.js";import"../chunks/NegotiableQuoteFragment.js";const Ue=g=>te.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",className:"feather feather-edit-2",...g},te.createElement("path",{d:"M17 3a2.828 2.828 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5L17 3z"})),je=({className:g,dropdownPlaceholder:a,dropdownOptions:r,handleDropdownChange:h,buttons:d,...e})=>{const b=r&&r.length>0,f=d&&d.length>0,u=(r==null?void 0:r.map(c=>({text:c.label,value:c.value})))||[];return u.unshift({text:a||"",value:""}),t("div",{className:"quote-management-actions-bar__container","data-testid":"actions-bar-container",children:l("div",{className:m(["quote-management-actions-bar",g]),"data-testid":"actions-bar",...e,children:[b&&t(Re,{name:"dropdown",id:"dropdown",onInput:h,className:"quote-management-actions-bar__dropdown","data-testid":"dropdown",options:u}),f&&t("div",{className:"quote-management-actions-bar__buttons","data-testid":"buttons-container",children:d==null?void 0:d.map((c,N)=>t(M,{node:c,className:m(["quote-management-actions-bar__button"])},N))})]})})},Ge=({className:g,loading:a,quoteName:r,quoteStatus:h,banner:d,details:e,actionBar:b,quoteContent:f,shippingInformationTitle:u,shippingInformation:c,quoteCommentsTitle:N,quoteComments:y,footer:p,...S})=>a?t(Oe,{}):l("div",{...S,className:m(["quote-management-manage-negotiable-quote",g]),children:[l("div",{className:m(["quote-management-manage-negotiable-quote__header"]),children:[r&&t(M,{node:r,className:m(["quote-management-manage-negotiable-quote__quote-name"])}),h&&t(M,{node:h,className:m(["quote-management-manage-negotiable-quote__quote-status"])})]}),d&&t(M,{node:d,className:m(["quote-management-manage-negotiable-quote__banner"])}),e&&t(M,{node:e,className:m(["quote-management-manage-negotiable-quote__details"])}),b&&t(M,{node:b,className:m(["quote-management-manage-negotiable-quote__action-bar"])}),f&&t(M,{node:f,className:m(["quote-management-manage-negotiable-quote__quote-content"])}),l("div",{"data-testid":"quote-shipping-information-container",className:m(["quote-management-manage-negotiable-quote__shipping-information-container"]),children:[u&&t(M,{node:u,className:m(["quote-management-manage-negotiable-quote__shipping-information-title"])}),c&&t(M,{node:c,className:m(["quote-management-manage-negotiable-quote__shipping-information"])})]}),l("div",{"data-testid":"quote-comments-container",className:m(["quote-management-manage-negotiable-quote__quote-comments-container"]),children:[N&&t(M,{node:N,className:m(["quote-management-manage-negotiable-quote__quote-comments-title"])}),y&&t(M,{node:y,className:m(["quote-management-manage-negotiable-quote__quote-comments"])})]}),t(M,{node:p,className:m(["quote-management-manage-negotiable-quote__footer"])})]}),Oe=()=>l(we,{"data-testid":"manage-negotiable-quote-skeleton",children:[t(x,{variant:"heading",fullWidth:!0,size:"large"}),t(x,{variant:"row",fullWidth:!1,size:"small"}),t(x,{variant:"row",fullWidth:!1,size:"small"}),t(x,{variant:"row",fullWidth:!0}),t(x,{variant:"row",fullWidth:!0,size:"xlarge",lines:2}),t(x,{variant:"row",fullWidth:!1,size:"small"})]}),$e=({open:g=!1,title:a,message:r,cancelLabel:h,confirmLabel:d,onCancel:e,onConfirm:b,showCloseButton:f,confirmationBanner:u,...c})=>{const N=V({cancel:"ConfirmationModal.cancel",confirm:"ConfirmationModal.confirm"});if(!g)return null;const{className:y,...p}=c;return t(ie,{...p,size:"medium",onClose:e,clickToDismiss:!0,escapeToDismiss:!0,showCloseButton:f,"data-testid":"confirmation-modal",className:y,children:l("div",{className:"confirmation-modal__content",children:[u&&t("div",{className:"confirmation-modal__banner","data-testid":"confirmation-modal-banner",children:u}),a&&t("div",{className:"confirmation-modal__title","data-testid":"confirmation-modal-title",children:a}),r&&t("div",{className:"confirmation-modal__message","data-testid":"confirmation-modal-message",children:r}),l("div",{className:"confirmation-modal__actions","data-testid":"confirmation-modal-actions",children:[t(C,{variant:"secondary",onClick:e,"data-testid":"confirmation-modal-cancel",children:h??N.cancel}),t(C,{variant:"primary",onClick:b,"data-testid":"confirmation-modal-confirm",children:d??N.confirm})]})]})})},Ve=({className:g,tabs:a,tabsContent:r,defaultActiveTab:h,...d})=>{const[e,b]=_(h||Array.from(a.keys())[0]),f=c=>{b(c)},u=v(()=>r.get(e),[e,r]);return l("div",{...d,className:m(["quote-management-tabbed-content",g]),children:[a&&t("div",{"data-testid":"tabbed-content-tabs",className:m(["quote-management-tabbed-content__tabs"]),children:Array.from(a.entries()).map(([c,N])=>t("button",{className:m(["quote-management-tabbed-content__tab",["quote-management-tabbed-content__tab--active",c===e]]),onClick:()=>f(c),children:N},c))}),u&&t("div",{className:m(["quote-management-tabbed-content__active-tab-content"]),children:t(M,{node:u})})]})},Xe=({className:g,open:a,quoteName:r,renameReason:h,quoteNameError:d,errorBanner:e,successBanner:b,showCloseButton:f=!0,onQuoteNameChange:u,onRenameReasonChange:c,onSave:N,onClose:y})=>{const p=V({title:"NegotiableQuote.Manage.rename.title",quoteNameLabel:"NegotiableQuote.Manage.rename.quoteNameLabel",reasonLabel:"NegotiableQuote.Manage.rename.reasonLabel",renameButton:"NegotiableQuote.Manage.rename.renameButton",cancelButton:"NegotiableQuote.Manage.rename.cancelButton"});return a?l(ie,{open:a,size:"medium",title:t(re,{children:p.title}),onClose:y,clickToDismiss:!0,escapeToDismiss:!0,showCloseButton:f,className:m(["quote-management-rename-quote-modal",g]),"data-testid":"rename-quote-modal",children:[e&&t("div",{className:m(["quote-management-rename-quote-modal__error-banner"]),"data-testid":"rename-quote-modal-error-banner",children:e}),b&&t("div",{className:m(["quote-management-rename-quote-modal__success-banner"]),"data-testid":"rename-quote-modal-success-banner",children:b}),l("div",{className:m(["quote-management-rename-quote-modal__content"]),children:[l("div",{children:[t(Ie,{name:"quoteName",type:"text",value:r,onInput:S=>u(S.target.value),floatingLabel:p.quoteNameLabel,required:!0,error:!!d}),d&&t("span",{className:m(["quote-management-rename-quote-modal__error-text"]),children:d})]}),t(me,{name:"quoteComment",value:h,onInput:S=>c(S.target.value),label:p.reasonLabel,rows:3})]}),l("div",{className:m(["quote-management-rename-quote-modal__actions"]),children:[t(C,{variant:"secondary",size:"medium",onClick:y,className:m(["quote-management-rename-quote-modal__cancel-button"]),children:p.cancelButton}),t(C,{variant:"primary",size:"medium",onClick:N,className:m(["quote-management-rename-quote-modal__save-button"]),children:p.renameButton})]})]}):null},_a=({onActionsDropdownChange:g,slots:a,onActionsButtonClick:r,onSendForReview:h,...d})=>{const[e,b]=_(void 0),[f,u]=_(!0),[c,N]=_(!1),[y,p]=_(null),[S,w]=_(!1),[T,X]=_(""),[L,W]=_(!1),[J,B]=_(!1),[I,F]=_(""),[U,H]=_(""),[j,E]=_(""),[ce,D]=_(""),[G,k]=_(""),n=V({createdLabel:"NegotiableQuote.Manage.createdLabel",salesRepLabel:"NegotiableQuote.Manage.salesRepLabel",expiresLabel:"NegotiableQuote.Manage.expiresLabel",actionsLabel:"NegotiableQuote.Manage.actionsLabel",remove:"NegotiableQuote.Manage.actions.remove",close:"NegotiableQuote.Manage.actionButtons.close",delete:"NegotiableQuote.Manage.actionButtons.delete",print:"NegotiableQuote.Manage.actionButtons.print",createTemplate:"NegotiableQuote.Manage.actionButtons.createTemplate",createCopy:"NegotiableQuote.Manage.actionButtons.createCopy",shippingInformationTitle:"NegotiableQuote.Manage.shippingInformation.title",quoteCommentsTitle:"NegotiableQuote.Manage.quoteComments.title",quoteCommentsPlaceholder:"NegotiableQuote.Manage.quoteComments.placeholder",sendForReview:"NegotiableQuote.Manage.actionButtons.sendForReview",bannerTitle:"NegotiableQuote.Manage.bannerTitle",statusSubmitted:"NegotiableQuote.Manage.bannerStatusMessages.submitted",statusPending:"NegotiableQuote.Manage.bannerStatusMessages.pending",statusExpired:"NegotiableQuote.Manage.bannerStatusMessages.expired",renameErrorHeading:"NegotiableQuote.Manage.rename.errorHeading",renameQuoteNameRequired:"NegotiableQuote.Manage.rename.quoteNameRequired",renameErrorDefault:"NegotiableQuote.Manage.rename.errorDefault",renameSuccessHeading:"NegotiableQuote.Manage.rename.successHeading",renameSuccessMessage:"NegotiableQuote.Manage.rename.successMessage",confirmationModalCancel:"NegotiableQuote.Manage.confirmationModal.cancel",confirmationModalDeleteTitle:"NegotiableQuote.Manage.confirmationModal.delete.title",confirmationModalDeleteMessage:"NegotiableQuote.Manage.confirmationModal.delete.message",confirmationModalDeleteConfirm:"NegotiableQuote.Manage.confirmationModal.delete.confirm",confirmationModalDeleteErrorHeading:"NegotiableQuote.Manage.confirmationModal.delete.errorHeading",confirmationModalDeleteErrorFallback:"NegotiableQuote.Manage.confirmationModal.delete.errorFallback",confirmationModalDeleteSuccessHeading:"NegotiableQuote.Manage.confirmationModal.delete.successHeading",confirmationModalDeleteSuccessDescription:"NegotiableQuote.Manage.confirmationModal.delete.successDescription"});P(()=>{const o=z.on("quote-management/quote-data",s=>{const{quote:i}=s;i&&(b(i),u(!1))},{eager:!0});return()=>o==null?void 0:o.off()},[]),P(()=>{const o=z.on("quote-management/shipping-address-set",s=>{const{quote:i}=s;i&&b(i)},{eager:!0});return()=>o==null?void 0:o.off()},[]),P(()=>{const o=z.on("quote-management/quote-sent-for-review",s=>{const{quote:i}=s;b(i),X(""),W(!1)},{eager:!0});return()=>o==null?void 0:o.off()},[]),P(()=>{const o=z.on("quote-management/quote-renamed",s=>{const{quote:i}=s;b(i),E(""),D(""),k(n.renameSuccessMessage),setTimeout(()=>{B(!1),F(""),H(""),k("")},2e3)},{eager:!0});return()=>o==null?void 0:o.off()},[n.renameSuccessMessage]);const K=Q(()=>{F((e==null?void 0:e.name)||""),H(""),E(""),D(""),k(""),B(!0)},[e]),le=Q(()=>{B(!1),F(""),H(""),E(""),D(""),k("")},[]),de=Q(o=>{F(o),o.trim()&&D("")},[]),ue=Q(async()=>{if(!I.trim()){D(n.renameQuoteNameRequired);return}try{E(""),D(""),await Pe({quoteUid:e.uid,quoteName:I,quoteComment:U.trim()||void 0})}catch(o){E(o.message||n.renameErrorDefault)}},[e,I,U,n.renameQuoteNameRequired,n.renameErrorDefault]),se=v(()=>{const o=e&&(e.lockedForEditing===!0||e.lockedForEditing===void 0&&(e.status==="SUBMITTED"||e.status==="PENDING"||e.status==="ORDERED"||e.status==="CLOSED"));return t(q,{name:"QuoteName",slot:a==null?void 0:a.QuoteName,context:{quoteName:e==null?void 0:e.name,quoteData:e},children:l("div",{className:"quote-management-manage-negotiable-quote__quote-name-wrapper",children:[t("h1",{"data-testid":"quote-name",className:"quote-management-manage-negotiable-quote__quote-name-title",children:e==null?void 0:e.name}),t("button",{onClick:K,disabled:o,"data-testid":"rename-quote-button",className:"quote-management-manage-negotiable-quote__rename-button","aria-label":"Rename quote",children:t(Ue,{})})]})})},[a==null?void 0:a.QuoteName,e,K]),ge=v(()=>t(q,{name:"QuoteStatus",slot:a==null?void 0:a.QuoteStatus,context:{quoteStatus:e==null?void 0:e.status,quoteData:e},children:t("div",{"data-testid":"quote-status",children:e==null?void 0:e.status})}),[a==null?void 0:a.QuoteStatus,e]),Y=Q(o=>{switch(o){case"SUBMITTED":return n.statusSubmitted;case"PENDING":return n.statusPending;case"EXPIRED":return n.statusExpired;default:return null}},[n])(e==null?void 0:e.status),Z=Y&&t(R,{type:"warning",variant:"secondary",icon:t($,{}),heading:n.bannerTitle,description:Y}),be=Z&&t(q,{name:"Banner","data-testid":"banner",slot:a==null?void 0:a.Banner,context:{quoteData:e},children:Z}),fe=v(()=>{if(!e)return null;const o=Ee()||"en-US",s=new Intl.DateTimeFormat(o,{year:"numeric",month:"long",day:"numeric"});let i;try{i=s.format(new Date(e.expirationDate))}catch{i=e.expirationDate}return l(q,{name:"Details",slot:a==null?void 0:a.Details,context:{quoteData:e},children:[l("div",{className:"quote-management-manage-negotiable-quote__detail",children:[t("span",{className:"quote-management-manage-negotiable-quote__detail-title","data-testid":"created-label",children:n.createdLabel}),l("span",{className:"quote-management-manage-negotiable-quote__detail-content","data-testid":"created-value",children:[s.format(new Date(e.createdAt))," (",e.buyer.firstname," ",e.buyer.lastname,")"]})]}),l("div",{className:"quote-management-manage-negotiable-quote__detail",children:[t("span",{className:"quote-management-manage-negotiable-quote__detail-title","data-testid":"sales-rep-label",children:n.salesRepLabel}),t("span",{className:"quote-management-manage-negotiable-quote__detail-content","data-testid":"sales-rep-value",children:e.salesRepName})]}),l("div",{className:"quote-management-manage-negotiable-quote__detail",children:[t("span",{className:"quote-management-manage-negotiable-quote__detail-title","data-testid":"expires-label",children:n.expiresLabel}),t("span",{className:"quote-management-manage-negotiable-quote__detail-content","data-testid":"expires-value",children:i})]})]})},[a==null?void 0:a.Details,n,e]),A=v(()=>[{label:n.close,value:"close"},{label:n.delete,value:"delete",disabled:!(e!=null&&e.canDelete)},{label:n.print,value:"print"},{label:n.createTemplate,value:"createTemplate"},{label:n.createCopy,value:"createCopy"}],[n,e==null?void 0:e.canDelete]),pe=v(()=>{const o=i=>{g==null||g(i)},s=i=>{switch(i){case"close":r==null||r(i);break;case"delete":N(!0),r==null||r(i);break;case"print":r==null||r(i);break;case"createTemplate":r==null||r(i);break;case"createCopy":r==null||r(i);break}};return t(q,{name:"ActionBar",slot:a==null?void 0:a.ActionBar,context:{quoteData:e},children:t(je,{dropdownPlaceholder:n.actionsLabel,dropdownOptions:[{label:n.remove,value:"remove"}],handleDropdownChange:o,buttons:A.map(i=>t(C,{variant:"tertiary",onClick:()=>s(i.value),"data-testid":`actions-bar-${i.value}-button`,"data-action":i.value,disabled:i.disabled,children:i.label},i.value))})})},[A,n,a==null?void 0:a.ActionBar,e,g,r]),he=v(()=>t(q,{name:"QuoteContent",slot:a==null?void 0:a.QuoteContent,context:{quoteData:e},children:t(Ve,{tabs:new Map([["items-quoted","Items Quoted"],["comments","Comments"],["history-log","History Log"]]),tabsContent:new Map([["items-quoted",t(q,{name:"ItemsQuotedTab",slot:a==null?void 0:a.ItemsQuotedTab,context:{quoteData:e},children:t(ke,{quoteData:e})},"items-quoted")],["comments",t(q,{name:"CommentsTab",slot:a==null?void 0:a.CommentsTab,context:{quoteData:e},children:t(Be,{quoteData:e})},"comments")],["history-log",t(q,{name:"HistoryLogTab",slot:a==null?void 0:a.HistoryLogTab,context:{quoteData:e},children:t(He,{quoteData:e})},"history-log")]])})}),[a==null?void 0:a.QuoteContent,a==null?void 0:a.HistoryLogTab,a==null?void 0:a.CommentsTab,a==null?void 0:a.ItemsQuotedTab,e]),Ne=v(()=>t(q,{name:"ShippingInformationTitle",slot:a==null?void 0:a.ShippingInformationTitle,context:{quoteData:e},children:t("h2",{children:n.shippingInformationTitle})}),[a==null?void 0:a.ShippingInformationTitle,e,n]),qe=v(()=>t(q,{name:"ShippingInformation",slot:a==null?void 0:a.ShippingInformation,context:{quoteData:e,loading:f,setLoading:u},children:t(Fe,{quoteData:e,loading:f,"data-testid":"manage-quote-shipping-address"})}),[a==null?void 0:a.ShippingInformation,e,f,u]),_e=v(()=>t(q,{name:"QuoteCommentsTitle",slot:a==null?void 0:a.QuoteCommentsTitle,context:{quoteData:e},children:t("h2",{children:n.quoteCommentsTitle})}),[a==null?void 0:a.QuoteCommentsTitle,n,e]),ve=v(()=>t(q,{name:"QuoteComments",slot:a==null?void 0:a.QuoteComments,context:{quoteData:e},children:t(me,{name:"quoteComments",placeholder:n.quoteCommentsPlaceholder,rows:3,value:T,onInput:o=>{X(o.target.value)},disabled:L})}),[a==null?void 0:a.QuoteComments,n,e,T,L]),ee=Q(async()=>{if(h){h({quoteData:e,comment:T.trim()||void 0});return}W(!0);try{await ze({quoteUid:e.uid,comment:T.trim()||void 0})}catch(o){console.error("Failed to send quote for review:",o),W(!1)}},[e,h,T]),Me=v(()=>t(q,{name:"Footer",slot:a==null?void 0:a.Footer,context:{quoteData:e,comment:T,isSubmitting:L},children:t(C,{variant:"primary",onClick:ee,"data-testid":"send-for-review-button",disabled:!(e!=null&&e.canSendForReview)||L||!e,children:n.sendForReview})}),[a==null?void 0:a.Footer,n,e,T,L,ee]),Qe=v(()=>j?t(R,{type:"error",variant:"primary",icon:t($,{color:"var(--color-error)"}),heading:n.renameErrorHeading,description:j}):void 0,[j,n.renameErrorHeading]),ye=v(()=>G?t(R,{type:"success",variant:"primary",icon:t(oe,{}),heading:n.renameSuccessHeading,description:G}):void 0,[G,n.renameSuccessHeading]),O=Q(o=>o.errors&&Array.isArray(o.errors)&&o.errors.length>0?o.errors[0].message||n.confirmationModalDeleteErrorFallback:(o==null?void 0:o.message)||n.confirmationModalDeleteErrorFallback,[n.confirmationModalDeleteErrorFallback]),Se=Q(()=>{N(!1),p(null),w(!1)},[]),Te=Q(async()=>{if(e!=null&&e.uid){p(null),w(!1);try{const{operationResults:o}=await We(e.uid),s=o.find(i=>i.__typename==="DeleteNegotiableQuoteOperationFailure");if(s){const i=O(s);p(i);return}w(!0)}catch(o){const s=O(o);p(s)}}},[e,O]),De=Q(()=>{p(null)},[]),xe=Q(()=>{w(!1)},[]),Ce=y?t(R,{type:"error",variant:"primary",icon:t($,{}),heading:n.confirmationModalDeleteErrorHeading,description:y,onDismiss:De,"data-testid":"confirmation-modal-error-banner"}):null,ae=(S?t(R,{type:"success",variant:"primary",icon:t(oe,{}),heading:n.confirmationModalDeleteSuccessHeading,description:n.confirmationModalDeleteSuccessDescription,onDismiss:xe,"data-testid":"confirmation-modal-success-banner"}):null)||Ce,Le={...d,loading:f,quoteName:se,quoteStatus:ge,banner:be||void 0,details:fe,actionBar:pe,quoteContent:he,shippingInformationTitle:Ne,shippingInformation:qe,quoteCommentsTitle:_e,quoteComments:ve,footer:Me};return l(re,{children:[t(Ge,{...Le}),J&&ne(t(Xe,{open:J,quoteName:I,renameReason:U,quoteNameError:ce,errorBanner:Qe,successBanner:ye,onQuoteNameChange:de,onRenameReasonChange:H,onSave:ue,onClose:le}),document.body),c&&ne(t($e,{open:c,title:n.confirmationModalDeleteTitle,message:n.confirmationModalDeleteMessage,cancelLabel:n.confirmationModalCancel,confirmLabel:n.confirmationModalDeleteConfirm,onCancel:Se,onConfirm:Te,showCloseButton:!ae,confirmationBanner:ae}),document.body)]})};export{_a as ManageNegotiableQuote,_a as default};
|
|
4
4
|
//# sourceMappingURL=ManageNegotiableQuote.js.map
|