@dropins/storefront-quote-management 0.0.1-alpha23 → 0.0.1-alpha24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/api/index.d.ts +1 -0
  2. package/api/initialize/initialize.d.ts +1 -0
  3. package/api/removeNegotiableQuoteItems/graphql/RemoveNegotiableQuoteItemsMutation.d.ts +10 -0
  4. package/api/removeNegotiableQuoteItems/index.d.ts +10 -0
  5. package/api/removeNegotiableQuoteItems/removeNegotiableQuoteItems.d.ts +8 -0
  6. package/api.js +15 -15
  7. package/api.js.map +1 -1
  8. package/chunks/ItemsQuoted.js +1 -1
  9. package/chunks/ItemsQuoted.js.map +1 -1
  10. package/chunks/ItemsQuotedTemplate.js +4 -0
  11. package/chunks/ItemsQuotedTemplate.js.map +1 -0
  12. package/chunks/OrderSummaryLine.js +1 -1
  13. package/chunks/OrderSummaryLine.js.map +1 -1
  14. package/chunks/QuoteCommentsList.js +1 -1
  15. package/chunks/QuoteCommentsList.js.map +1 -1
  16. package/chunks/QuoteCommentsList3.js +4 -0
  17. package/chunks/QuoteCommentsList3.js.map +1 -0
  18. package/chunks/QuoteHistoryLog.js +1 -1
  19. package/chunks/QuoteHistoryLog.js.map +1 -1
  20. package/chunks/QuoteHistoryLog3.js +4 -0
  21. package/chunks/QuoteHistoryLog3.js.map +1 -0
  22. package/chunks/QuotePricesSummary.js +4 -0
  23. package/chunks/QuotePricesSummary.js.map +1 -0
  24. package/chunks/QuoteTemplateCommentsList.js +4 -0
  25. package/chunks/QuoteTemplateCommentsList.js.map +1 -0
  26. package/chunks/QuoteTemplateHistoryLog.js +4 -0
  27. package/chunks/QuoteTemplateHistoryLog.js.map +1 -0
  28. package/chunks/TabbedContent.js +4 -0
  29. package/chunks/TabbedContent.js.map +1 -0
  30. package/chunks/dateUtils.js +1 -1
  31. package/chunks/getQuoteTemplates.js +2 -2
  32. package/chunks/getQuoteTemplates.js.map +1 -1
  33. package/chunks/negotiableQuotes.js +1 -1
  34. package/chunks/negotiableQuotes.js.map +1 -1
  35. package/chunks/removeNegotiableQuoteItems.js +38 -0
  36. package/chunks/removeNegotiableQuoteItems.js.map +1 -0
  37. package/chunks/renameNegotiableQuote.js +1 -1
  38. package/chunks/renameNegotiableQuote.js.map +1 -1
  39. package/chunks/state.js +1 -1
  40. package/chunks/transform-quote.js +4 -0
  41. package/chunks/transform-quote.js.map +1 -0
  42. package/chunks/uploadFile.js +1 -1
  43. package/chunks/uploadFile.js.map +1 -1
  44. package/components/ActionsBar/ActionsBar.d.ts +1 -0
  45. package/components/ConfirmationModal/ConfirmationModal.d.ts +1 -0
  46. package/components/ManageNegotiableQuoteTemplate/ManageNegotiableQuoteTemplate.d.ts +22 -0
  47. package/components/ManageNegotiableQuoteTemplate/__fixtures__/ManageNegotiableQuoteTemplateProps.d.ts +4 -0
  48. package/components/ManageNegotiableQuoteTemplate/index.d.ts +11 -0
  49. package/components/ProductListTable/ProductListTable.d.ts +43 -5
  50. package/components/QuoteHistoryLog/QuoteHistoryLog.d.ts +70 -2
  51. package/components/index.d.ts +1 -0
  52. package/containers/ItemsQuoted/ItemsQuoted.d.ts +5 -0
  53. package/containers/ItemsQuoted.js +1 -1
  54. package/containers/ItemsQuotedTemplate/ItemsQuotedTemplate.d.ts +19 -0
  55. package/containers/ItemsQuotedTemplate/index.d.ts +11 -0
  56. package/containers/ItemsQuotedTemplate.d.ts +3 -0
  57. package/containers/ItemsQuotedTemplate.js +4 -0
  58. package/containers/ItemsQuotedTemplate.js.map +1 -0
  59. package/containers/ManageNegotiableQuote/ManageNegotiableQuote.d.ts +1 -0
  60. package/containers/ManageNegotiableQuote.js +1 -1
  61. package/containers/ManageNegotiableQuote.js.map +1 -1
  62. package/containers/ManageNegotiableQuoteTemplate/ManageNegotiableQuoteTemplate.d.ts +54 -0
  63. package/containers/ManageNegotiableQuoteTemplate/index.d.ts +11 -0
  64. package/containers/ManageNegotiableQuoteTemplate.d.ts +3 -0
  65. package/containers/ManageNegotiableQuoteTemplate.js +4 -0
  66. package/containers/ManageNegotiableQuoteTemplate.js.map +1 -0
  67. package/containers/OrderSummary.js +1 -1
  68. package/containers/OrderSummary.js.map +1 -1
  69. package/containers/OrderSummaryLine.js +1 -1
  70. package/containers/QuoteCommentsList.js +1 -1
  71. package/containers/QuoteHistoryLog.js +1 -1
  72. package/containers/QuoteSummaryList.js +1 -1
  73. package/containers/QuoteSummaryList.js.map +1 -1
  74. package/containers/QuoteTemplateCommentsList/QuoteTemplateCommentsList.d.ts +9 -0
  75. package/containers/QuoteTemplateCommentsList/index.d.ts +11 -0
  76. package/containers/QuoteTemplateCommentsList.d.ts +3 -0
  77. package/containers/QuoteTemplateCommentsList.js +4 -0
  78. package/containers/QuoteTemplateCommentsList.js.map +1 -0
  79. package/containers/QuoteTemplateHistoryLog/QuoteTemplateHistoryLog.d.ts +9 -0
  80. package/containers/QuoteTemplateHistoryLog/index.d.ts +11 -0
  81. package/containers/QuoteTemplateHistoryLog.d.ts +3 -0
  82. package/containers/QuoteTemplateHistoryLog.js +4 -0
  83. package/containers/QuoteTemplateHistoryLog.js.map +1 -0
  84. package/containers/QuoteTemplatesListTable/QuoteTemplatesListTable.d.ts +2 -0
  85. package/containers/QuoteTemplatesListTable.js +1 -1
  86. package/containers/QuoteTemplatesListTable.js.map +1 -1
  87. package/containers/QuotesListTable.js +1 -1
  88. package/containers/QuotesListTable.js.map +1 -1
  89. package/containers/RequestNegotiableQuoteForm.js +1 -1
  90. package/containers/RequestNegotiableQuoteForm.js.map +1 -1
  91. package/containers/index.d.ts +4 -0
  92. package/data/models/__fixtures__/negotiableQuoteTemplateModel.d.ts +4 -0
  93. package/data/models/negotiable-quote-model.d.ts +1 -0
  94. package/data/models/negotiable-quote-template-model.d.ts +1 -1
  95. package/i18n/en_US.json.d.ts +48 -1
  96. package/package.json +1 -1
  97. package/render.js +2 -3
  98. package/render.js.map +1 -1
  99. package/chunks/fetch-graphql.js +0 -4
  100. package/chunks/fetch-graphql.js.map +0 -1
  101. package/chunks/updateQuantities.js +0 -21
  102. package/chunks/updateQuantities.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 canClose: boolean;\n canUpdateQuote: boolean;\n readOnly: boolean;\n}\n\nexport interface ConfigurableOption {\n optionLabel: string;\n valueLabel: string;\n}\n\nexport interface BundleOption {\n label: string;\n values: {\n label: string;\n quantity: number;\n originalPrice: Currency;\n price: Currency;\n }[];\n}\n\nexport interface CustomizableOption {\n type: string;\n label: string;\n values: {\n label: string;\n value: string;\n }[];\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 configurableOptions?: ConfigurableOption[];\n bundleOptions?: BundleOption[];\n customizableOptions?: CustomizableOption[];\n noteFromBuyer?: ItemNote[];\n noteFromSeller?: ItemNote[];\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 * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this\n * file in accordance with the terms of the Adobe license agreement\n * accompanying it.\n *******************************************************************/\n\nimport {\n 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// Quote statuses that allow editing/sending for review\nconst EDITABLE_QUOTE_STATUSES = [\n 'DRAFT',\n 'UPDATED',\n 'DECLINED',\n 'EXPIRED',\n 'NEW',\n 'OPEN',\n] as const;\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 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', 'OPEN'].includes(quote.status) &&\n state.permissions.checkoutQuote &&\n quote.shipping_addresses?.length > 0,\n canSendForReview:\n (isQuoteNew || EDITABLE_QUOTE_STATUSES.includes(quote.status)) &&\n state.permissions.editQuote,\n canUpdateQuote:\n (isQuoteNew || EDITABLE_QUOTE_STATUSES.includes(quote.status)) &&\n state.permissions.editQuote,\n canDelete:\n !['PENDING', 'SUBMITTED', 'ORDERED'].includes(quote.status) &&\n state.permissions.deleteQuote,\n canClose: quote.status\n ? !['DRAFT', 'CLOSED', 'ORDERED', 'OPEN'].includes(quote.status)\n : false,\n readOnly:\n ['ORDERED', 'SUBMITTED', 'CLOSED', 'PENDING'].includes(quote.status) ||\n !state.permissions.editQuote,\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","EDITABLE_QUOTE_STATUSES","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":"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"}
@@ -1,6 +1,6 @@
1
1
  /*! Copyright 2025 Adobe
2
2
  All Rights Reserved. */
3
- import{events as E}from"@dropins/tools/event-bus.js";import{N as w}from"./NegotiableQuoteFragment.js";import{f as l,t as f}from"./fetch-graphql.js";import"./state.js";const N=`
3
+ import{events as E}from"@dropins/tools/event-bus.js";import{N as w}from"./NegotiableQuoteFragment.js";import{f as l,a as f}from"./transform-quote.js";import"./state.js";const N=`
4
4
  mutation REQUEST_NEGOTIABLE_QUOTE_MUTATION(
5
5
  $cartId: ID!
6
6
  $quoteName: String!
@@ -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 * 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 { 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 * 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 { 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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"}
@@ -7,6 +7,7 @@ export interface ActionsBarProps extends HTMLAttributes<HTMLDivElement> {
7
7
  label: string;
8
8
  value: string;
9
9
  }[];
10
+ dropdownValue?: string;
10
11
  handleDropdownChange?: (event: Event) => void;
11
12
  buttons?: VNode[];
12
13
  }
@@ -9,6 +9,7 @@ export interface ConfirmationModalProps extends Omit<HTMLAttributes<HTMLDivEleme
9
9
  confirmLabel?: VNode | string;
10
10
  onCancel?: () => void;
11
11
  onConfirm?: () => void;
12
+ onClose?: () => void;
12
13
  showCloseButton?: boolean;
13
14
  confirmationBanner?: VNode | null;
14
15
  }
@@ -0,0 +1,22 @@
1
+ import { FunctionComponent, VNode } from 'preact';
2
+ import { HTMLAttributes } from 'preact/compat';
3
+
4
+ export interface ManageNegotiableQuoteTemplateProps extends Omit<HTMLAttributes<HTMLDivElement>, 'loading'> {
5
+ loading?: boolean;
6
+ templateName: VNode;
7
+ templateId: VNode;
8
+ banner?: VNode;
9
+ details: VNode;
10
+ actionBar?: VNode;
11
+ referenceDocuments?: VNode;
12
+ referenceDocumentsTitle?: VNode;
13
+ itemsTable: VNode;
14
+ commentsTitle: VNode;
15
+ comments: VNode;
16
+ historyLogTitle: VNode;
17
+ historyLog: VNode;
18
+ footer?: VNode;
19
+ }
20
+ export declare const ManageNegotiableQuoteTemplate: FunctionComponent<ManageNegotiableQuoteTemplateProps>;
21
+ export declare const ManageNegotiableQuoteTemplateSkeleton: FunctionComponent;
22
+ //# sourceMappingURL=ManageNegotiableQuoteTemplate.d.ts.map
@@ -0,0 +1,4 @@
1
+ import { ManageNegotiableQuoteTemplateProps } from '../ManageNegotiableQuoteTemplate';
2
+
3
+ export declare const baseProps: ManageNegotiableQuoteTemplateProps;
4
+ //# sourceMappingURL=ManageNegotiableQuoteTemplateProps.d.ts.map
@@ -0,0 +1,11 @@
1
+ /********************************************************************
2
+ * Copyright 2025 Adobe
3
+ * All Rights Reserved.
4
+ *
5
+ * NOTICE: Adobe permits you to use, modify, and distribute this
6
+ * file in accordance with the terms of the Adobe license agreement
7
+ * accompanying it.
8
+ *******************************************************************/
9
+ export * from './ManageNegotiableQuoteTemplate';
10
+ export { ManageNegotiableQuoteTemplate as default } from './ManageNegotiableQuoteTemplate';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -1,14 +1,52 @@
1
1
  import { FunctionComponent } from 'preact';
2
2
  import { HTMLAttributes } from 'preact/compat';
3
- import { NegotiableQuoteCartItem } from '../../data/models/negotiable-quote-model';
4
3
 
4
+ export interface ProductListTableItem {
5
+ uid: string;
6
+ product: {
7
+ name: string;
8
+ sku: string;
9
+ };
10
+ prices: {
11
+ originalItemPrice: {
12
+ value: number;
13
+ currency: string;
14
+ };
15
+ rowTotal: {
16
+ value: number;
17
+ currency: string;
18
+ };
19
+ };
20
+ quantity: number;
21
+ catalogDiscount?: {
22
+ amountOff: number;
23
+ percentOff: number;
24
+ };
25
+ configurableOptions?: Array<{
26
+ optionLabel: string;
27
+ valueLabel: string;
28
+ }>;
29
+ bundleOptions?: Array<{
30
+ label: string;
31
+ values: Array<{
32
+ label: string;
33
+ quantity: number;
34
+ originalPrice: {
35
+ value: number;
36
+ currency: string;
37
+ };
38
+ }>;
39
+ }>;
40
+ }
5
41
  export interface ProductListTableProps extends HTMLAttributes<HTMLDivElement | HTMLFormElement> {
6
- items: NegotiableQuoteCartItem[];
42
+ items: ProductListTableItem[];
7
43
  canEdit: boolean;
8
- onItemCheckboxChange?: (item: NegotiableQuoteCartItem, isSelected: boolean) => void;
9
- onItemDropdownChange?: (item: NegotiableQuoteCartItem, action: string) => void;
10
- onQuantityChange?: (item: NegotiableQuoteCartItem, newQuantity: number) => void;
44
+ readOnly?: boolean;
45
+ onItemCheckboxChange?: (item: ProductListTableItem, isSelected: boolean) => void;
46
+ onItemDropdownChange?: (item: ProductListTableItem, action: string) => void;
47
+ onQuantityChange?: (item: ProductListTableItem, newQuantity: number) => void;
11
48
  onUpdate?: (e: SubmitEvent) => void;
49
+ dropdownSelections?: Record<string, string | undefined>;
12
50
  }
13
51
  export declare const ProductListTable: FunctionComponent<ProductListTableProps>;
14
52
  //# sourceMappingURL=ProductListTable.d.ts.map
@@ -1,9 +1,77 @@
1
1
  import { FunctionComponent } from 'preact';
2
2
  import { HTMLAttributes } from 'preact/compat';
3
- import { NegotiableQuoteModel } from '../../data/models/negotiable-quote-model';
4
3
 
4
+ export interface HistoryEntry {
5
+ uid: string;
6
+ createdAt: string;
7
+ author: {
8
+ firstname: string;
9
+ lastname: string;
10
+ };
11
+ changeType: string;
12
+ changes: {
13
+ commentAdded?: {
14
+ comment: string;
15
+ };
16
+ statuses?: {
17
+ changes: Array<{
18
+ oldStatus?: string;
19
+ newStatus?: string;
20
+ }>;
21
+ };
22
+ expiration?: {
23
+ oldExpiration?: string;
24
+ newExpiration?: string;
25
+ };
26
+ total?: {
27
+ oldPrice?: {
28
+ value: number;
29
+ currency: string;
30
+ };
31
+ newPrice?: {
32
+ value: number;
33
+ currency: string;
34
+ };
35
+ };
36
+ customChanges?: {
37
+ title: string;
38
+ old_value: string;
39
+ new_value: string;
40
+ };
41
+ productsRemoved?: {
42
+ productsRemovedFromCatalog?: string[];
43
+ productsRemovedFromQuote?: Array<{
44
+ name?: string;
45
+ sku?: string;
46
+ uid: string;
47
+ }>;
48
+ };
49
+ };
50
+ }
51
+ export interface ItemNote {
52
+ createdAt: string;
53
+ creatorId: number;
54
+ creatorType: number;
55
+ negotiableQuoteItemUid: string;
56
+ note: string;
57
+ noteUid: string;
58
+ }
59
+ export interface QuoteItem {
60
+ product: {
61
+ name: string;
62
+ sku: string;
63
+ };
64
+ noteFromBuyer?: ItemNote[];
65
+ noteFromSeller?: ItemNote[];
66
+ }
5
67
  export interface QuoteHistoryLogProps extends HTMLAttributes<HTMLDivElement> {
6
- quoteData?: NegotiableQuoteModel;
68
+ history?: HistoryEntry[];
69
+ items?: QuoteItem[];
70
+ buyer: {
71
+ firstname: string;
72
+ lastname: string;
73
+ };
74
+ salesRepName: string;
7
75
  }
8
76
  export declare const QuoteHistoryLog: FunctionComponent<QuoteHistoryLogProps>;
9
77
  //# sourceMappingURL=QuoteHistoryLog.d.ts.map
@@ -24,4 +24,5 @@ export * from './TabbedContent';
24
24
  export * from './QuoteCommentsList';
25
25
  export * from './ConfirmationModal';
26
26
  export * from './RenameQuoteModal';
27
+ export * from './ManageNegotiableQuoteTemplate';
27
28
  //# sourceMappingURL=index.d.ts.map
@@ -6,14 +6,19 @@ export interface ItemsQuotedProps extends HTMLAttributes<HTMLDivElement> {
6
6
  quoteData?: NegotiableQuoteModel;
7
7
  onItemCheckboxChange?: (item: NegotiableQuoteCartItem, isSelected: boolean) => void;
8
8
  onItemDropdownChange?: (item: NegotiableQuoteCartItem, action: string) => void;
9
+ onUpdate?: (e: SubmitEvent) => void;
10
+ onRemoveItemsRef?: (handler: (items: NegotiableQuoteCartItem[]) => void) => void;
11
+ onRemoveModalStateChange?: (isOpen: boolean) => void;
9
12
  slots?: {
10
13
  ProductListTable?: SlotProps<{
11
14
  items: NegotiableQuoteModel['items'];
12
15
  canEdit: boolean;
16
+ readOnly?: boolean;
13
17
  onItemCheckboxChange?: (item: NegotiableQuoteCartItem, isSelected: boolean) => void;
14
18
  onItemDropdownChange?: (item: NegotiableQuoteCartItem, action: string) => void;
15
19
  onQuantityChange?: (item: NegotiableQuoteCartItem, newQuantity: number) => void;
16
20
  onUpdate?: (e: SubmitEvent) => void;
21
+ dropdownSelections?: Record<string, string>;
17
22
  }>;
18
23
  QuotePricesSummary?: SlotProps<{
19
24
  items: NegotiableQuoteModel['items'];
@@ -1,4 +1,4 @@
1
1
  /*! Copyright 2025 Adobe
2
2
  All Rights Reserved. */
3
- import{I as c,I as g}from"../chunks/ItemsQuoted.js";import"@dropins/tools/preact-jsx-runtime.js";import"@dropins/tools/preact-compat.js";import"@dropins/tools/lib.js";import"@dropins/tools/preact.js";import"@dropins/tools/preact-hooks.js";import"@dropins/tools/components.js";/* empty css */import"@dropins/tools/i18n.js";import"@dropins/tools/event-bus.js";import"../chunks/updateQuantities.js";import"../chunks/fetch-graphql.js";import"../chunks/state.js";import"@dropins/tools/fetch-graphql.js";import"../chunks/NegotiableQuoteFragment.js";import"../chunks/WarningFilled.js";export{c as ItemsQuoted,g as default};
3
+ import{I as k,I as n}from"../chunks/ItemsQuoted.js";import"@dropins/tools/preact-jsx-runtime.js";import"@dropins/tools/preact-compat.js";import"@dropins/tools/lib.js";import"@dropins/tools/event-bus.js";import"@dropins/tools/components.js";/* empty css */import"../chunks/QuotePricesSummary.js";import"@dropins/tools/preact.js";import"@dropins/tools/preact-hooks.js";import"@dropins/tools/i18n.js";/* empty css *//* empty css *//* empty css */import"../chunks/removeNegotiableQuoteItems.js";import"../chunks/transform-quote.js";import"@dropins/tools/fetch-graphql.js";import"../chunks/state.js";import"../chunks/NegotiableQuoteFragment.js";import"../chunks/WarningFilled.js";export{k as ItemsQuoted,n as default};
4
4
  //# sourceMappingURL=ItemsQuoted.js.map
@@ -0,0 +1,19 @@
1
+ import { HTMLAttributes } from 'preact/compat';
2
+ import { Container, SlotProps } from '@dropins/tools/types/elsie/src/lib';
3
+ import { NegotiableQuoteTemplateModel } from '../../data/models/negotiable-quote-template-model';
4
+
5
+ export interface ItemsQuotedTemplateProps extends HTMLAttributes<HTMLDivElement> {
6
+ templateData?: NegotiableQuoteTemplateModel;
7
+ slots?: {
8
+ ProductListTable?: SlotProps<{
9
+ items: NegotiableQuoteTemplateModel['items'];
10
+ canEdit: boolean;
11
+ }>;
12
+ QuotePricesSummary?: SlotProps<{
13
+ items: NegotiableQuoteTemplateModel['items'];
14
+ prices: NegotiableQuoteTemplateModel['prices'];
15
+ }>;
16
+ };
17
+ }
18
+ export declare const ItemsQuotedTemplate: Container<ItemsQuotedTemplateProps>;
19
+ //# sourceMappingURL=ItemsQuotedTemplate.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 './ItemsQuotedTemplate';
10
+ export { ItemsQuotedTemplate as default } from './ItemsQuotedTemplate';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,3 @@
1
+ export * from './ItemsQuotedTemplate/index'
2
+ import _default from './ItemsQuotedTemplate/index'
3
+ export default _default
@@ -0,0 +1,4 @@
1
+ /*! Copyright 2025 Adobe
2
+ All Rights Reserved. */
3
+ import{I as Q,I as T}from"../chunks/ItemsQuotedTemplate.js";import"@dropins/tools/preact-jsx-runtime.js";import"@dropins/tools/preact-compat.js";import"@dropins/tools/lib.js";import"@dropins/tools/event-bus.js";import"@dropins/tools/components.js";/* empty css */import"../chunks/QuotePricesSummary.js";import"@dropins/tools/preact.js";import"@dropins/tools/preact-hooks.js";import"@dropins/tools/i18n.js";/* empty css *//* empty css *//* empty css */export{Q as ItemsQuotedTemplate,T as default};
4
+ //# sourceMappingURL=ItemsQuotedTemplate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ItemsQuotedTemplate.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -26,6 +26,7 @@ export interface ManageNegotiableQuoteProps extends HTMLAttributes<HTMLDivElemen
26
26
  }>;
27
27
  ActionBar?: SlotProps<{
28
28
  quoteData?: NegotiableQuoteModel;
29
+ actionsBarDropdownValue?: string;
29
30
  }>;
30
31
  QuoteContent?: SlotProps<{
31
32
  quoteData?: NegotiableQuoteModel;
@@ -1,4 +1,4 @@
1
1
  /*! Copyright 2025 Adobe
2
2
  All Rights Reserved. */
3
- import{jsx as t,jsxs as d,Fragment as pe}from"@dropins/tools/preact-jsx-runtime.js";import*as be from"@dropins/tools/preact-compat.js";import{useState as s,useMemo as h,useEffect as w,useCallback as q,createPortal as ee}from"@dropins/tools/preact-compat.js";import{classes as m,VComponent as v,Slot as p,getGlobalLocale as Ge}from"@dropins/tools/lib.js";/* empty css */import{Picker as Oe,Skeleton as $e,SkeletonRow as E,Modal as Ve,Input as Xe,TextArea as he,Button as U,InLineAlert as T}from"@dropins/tools/components.js";import{events as R}from"@dropins/tools/event-bus.js";/* empty css */import"@dropins/tools/preact.js";import"@dropins/tools/preact-hooks.js";import{I as Je,C as fe}from"../chunks/ItemsQuoted.js";/* empty css *//* empty css *//* empty css */import{useText as Me}from"@dropins/tools/i18n.js";import{S as Ke}from"../chunks/ShippingAddressDisplay.js";import{Q as Ye}from"../chunks/QuoteHistoryLog.js";import{g as Ze,r as Ae,c as ea,s as aa,d as ta}from"../chunks/renameNegotiableQuote.js";import"../chunks/state.js";import{Q as na}from"../chunks/QuoteCommentsList.js";import{a as W,S as ae}from"../chunks/WarningFilled.js";import"../chunks/updateQuantities.js";import"../chunks/fetch-graphql.js";import"@dropins/tools/fetch-graphql.js";import"../chunks/NegotiableQuoteFragment.js";import"../chunks/dateUtils.js";const oa=b=>be.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",...b},be.createElement("path",{d:"M17 3a2.828 2.828 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5L17 3z"})),ra=({className:b,dropdownPlaceholder:a,dropdownOptions:i,handleDropdownChange:_,buttons:u,...e})=>{const g=i&&i.length>0,M=u&&u.length>0,f=(i==null?void 0:i.map(c=>({text:c.label,value:c.value})))||[];return f.unshift({text:a||"",value:""}),t("div",{className:"quote-management-actions-bar__container","data-testid":"actions-bar-container",children:d("div",{className:m(["quote-management-actions-bar",b]),"data-testid":"actions-bar",...e,children:[g&&t(Oe,{name:"dropdown",id:"dropdown",onInput:_,className:"quote-management-actions-bar__dropdown","data-testid":"dropdown",options:f}),M&&t("div",{className:"quote-management-actions-bar__buttons","data-testid":"buttons-container",children:u==null?void 0:u.map((c,Q)=>t(v,{node:c,className:m(["quote-management-actions-bar__button"])},Q))})]})})},ia=({className:b,loading:a,quoteName:i,quoteStatus:_,banner:u,details:e,actionBar:g,quoteContent:M,shippingInformationTitle:f,shippingInformation:c,quoteCommentsTitle:Q,quoteComments:S,footer:N,...y})=>a?t(ma,{}):d("div",{...y,className:m(["quote-management-manage-negotiable-quote",b]),children:[d("div",{className:m(["quote-management-manage-negotiable-quote__header"]),children:[i&&t(v,{node:i,className:m(["quote-management-manage-negotiable-quote__quote-name"])}),_&&t(v,{node:_,className:m(["quote-management-manage-negotiable-quote__quote-status"])})]}),u&&t(v,{node:u,className:m(["quote-management-manage-negotiable-quote__banner"])}),e&&t(v,{node:e,className:m(["quote-management-manage-negotiable-quote__details"])}),g&&t(v,{node:g,className:m(["quote-management-manage-negotiable-quote__action-bar"])}),M&&t(v,{node:M,className:m(["quote-management-manage-negotiable-quote__quote-content"])}),d("div",{"data-testid":"quote-shipping-information-container",className:m(["quote-management-manage-negotiable-quote__shipping-information-container"]),children:[f&&t(v,{node:f,className:m(["quote-management-manage-negotiable-quote__shipping-information-title"])}),c&&t(v,{node:c,className:m(["quote-management-manage-negotiable-quote__shipping-information"])})]}),d("div",{"data-testid":"quote-comments-container",className:m(["quote-management-manage-negotiable-quote__quote-comments-container"]),children:[Q&&t(v,{node:Q,className:m(["quote-management-manage-negotiable-quote__quote-comments-title"])}),S&&t(v,{node:S,className:m(["quote-management-manage-negotiable-quote__quote-comments"])})]}),t(v,{node:N,className:m(["quote-management-manage-negotiable-quote__footer"])})]}),ma=()=>d($e,{"data-testid":"manage-negotiable-quote-skeleton",children:[t(E,{variant:"heading",fullWidth:!0,size:"large"}),t(E,{variant:"row",fullWidth:!1,size:"small"}),t(E,{variant:"row",fullWidth:!1,size:"small"}),t(E,{variant:"row",fullWidth:!0}),t(E,{variant:"row",fullWidth:!0,size:"xlarge",lines:2}),t(E,{variant:"row",fullWidth:!1,size:"small"})]}),la=({className:b,tabs:a,tabsContent:i,defaultActiveTab:_,...u})=>{const[e,g]=s(_||Array.from(a.keys())[0]),M=c=>{g(c)},f=h(()=>i.get(e),[e,i]);return d("div",{...u,className:m(["quote-management-tabbed-content",b]),children:[a&&t("div",{"data-testid":"tabbed-content-tabs",className:m(["quote-management-tabbed-content__tabs"]),children:Array.from(a.entries()).map(([c,Q])=>t("button",{className:m(["quote-management-tabbed-content__tab",["quote-management-tabbed-content__tab--active",c===e]]),onClick:()=>M(c),children:Q},c))}),f&&t("div",{className:m(["quote-management-tabbed-content__active-tab-content"]),children:t(v,{node:f})})]})},ca=({className:b,open:a,quoteName:i,renameReason:_,quoteNameError:u,errorBanner:e,successBanner:g,showCloseButton:M=!0,onQuoteNameChange:f,onRenameReasonChange:c,onSave:Q,onClose:S})=>{const N=Me({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?d(Ve,{open:a,size:"medium",title:t(pe,{children:N.title}),onClose:S,clickToDismiss:!0,escapeToDismiss:!0,showCloseButton:M,className:m(["quote-management-rename-quote-modal",b]),"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}),g&&t("div",{className:m(["quote-management-rename-quote-modal__success-banner"]),"data-testid":"rename-quote-modal-success-banner",children:g}),d("div",{className:m(["quote-management-rename-quote-modal__content"]),children:[d("div",{children:[t(Xe,{name:"quoteName",type:"text",value:i,onInput:y=>f(y.target.value),floatingLabel:N.quoteNameLabel,required:!0,error:!!u}),u&&t("span",{className:m(["quote-management-rename-quote-modal__error-text"]),children:u})]}),t(he,{name:"quoteComment",value:_,onInput:y=>c(y.target.value),label:N.reasonLabel,rows:3})]}),d("div",{className:m(["quote-management-rename-quote-modal__actions"]),children:[t(U,{variant:"secondary",size:"medium",onClick:S,className:m(["quote-management-rename-quote-modal__cancel-button"]),children:N.cancelButton}),t(U,{variant:"primary",size:"medium",onClick:Q,className:m(["quote-management-rename-quote-modal__save-button"]),children:N.renameButton})]})]}):null},ka=({onActionsDropdownChange:b,slots:a,onActionsButtonClick:i,onSendForReview:_,...u})=>{const[e,g]=s(void 0),[M,f]=s(!0),[c,Q]=s(!1),[S,N]=s(null),[y,H]=s(!1),[C,te]=s(""),[I,j]=s(!1),[ne,G]=s(!1),[oe,O]=s(!1),[re,L]=s(""),[ie,D]=s(""),[me,$]=s(!1),[k,B]=s(""),[V,P]=s(""),[X,F]=s(""),[Ne,x]=s(""),[J,z]=s(""),n=Me({createdLabel:"NegotiableQuote.Manage.createdLabel",salesRepLabel:"NegotiableQuote.Manage.salesRepLabel",expiresLabel:"NegotiableQuote.Manage.expiresLabel",actionsLabel:"NegotiableQuote.Manage.actionsLabel",remove:"NegotiableQuote.Manage.actions.remove",close:"NegotiableQuote.Manage.actionButtons.close",delete:"NegotiableQuote.Manage.actionButtons.delete",print:"NegotiableQuote.Manage.actionButtons.print",createTemplate:"NegotiableQuote.Manage.actionButtons.createTemplate",createCopy:"NegotiableQuote.Manage.actionButtons.createCopy",shippingInformationTitle:"NegotiableQuote.Manage.shippingInformation.title",quoteCommentsTitle:"NegotiableQuote.Manage.quoteComments.title",quoteCommentsPlaceholder:"NegotiableQuote.Manage.quoteComments.placeholder",sendForReview:"NegotiableQuote.Manage.actionButtons.sendForReview",bannerTitle:"NegotiableQuote.Manage.bannerTitle",statusSubmitted:"NegotiableQuote.Manage.bannerStatusMessages.submitted",statusPending:"NegotiableQuote.Manage.bannerStatusMessages.pending",statusExpired:"NegotiableQuote.Manage.bannerStatusMessages.expired",errorFallback:"NegotiableQuote.Manage.confirmationModal.delete.errorFallback",closeSuccessMessage:"NegotiableQuote.Manage.confirmationModal.close.successDescription",closeModalTitle:"NegotiableQuote.Manage.actionButtons.close",closeModalMessage:"NegotiableQuote.Manage.confirmationModal.close.message",closeModalCancel:"NegotiableQuote.Manage.confirmationModal.cancel",closeModalConfirm:"NegotiableQuote.Manage.confirmationModal.close.confirm",closeModalConfirmLoading:"NegotiableQuote.Manage.confirmationModal.close.confirmLoading",closeModalSuccessHeading:"NegotiableQuote.Manage.confirmationModal.close.successHeading",renameErrorHeading:"NegotiableQuote.Manage.rename.errorHeading",renameQuoteNameRequired:"NegotiableQuote.Manage.rename.quoteNameRequired",renameErrorDefault:"NegotiableQuote.Manage.rename.errorDefault",renameSuccessHeading:"NegotiableQuote.Manage.rename.successHeading",renameSuccessMessage:"NegotiableQuote.Manage.rename.successMessage",confirmationModalCancel:"NegotiableQuote.Manage.confirmationModal.cancel",confirmationModalDeleteTitle:"NegotiableQuote.Manage.confirmationModal.delete.title",confirmationModalDeleteMessage:"NegotiableQuote.Manage.confirmationModal.delete.message",confirmationModalDeleteConfirm:"NegotiableQuote.Manage.confirmationModal.delete.confirm",confirmationModalDeleteErrorHeading:"NegotiableQuote.Manage.confirmationModal.delete.errorHeading",confirmationModalDeleteErrorFallback:"NegotiableQuote.Manage.confirmationModal.delete.errorFallback",confirmationModalDeleteSuccessHeading:"NegotiableQuote.Manage.confirmationModal.delete.successHeading",confirmationModalDeleteSuccessDescription:"NegotiableQuote.Manage.confirmationModal.delete.successDescription"});w(()=>{const o=R.on("quote-management/quote-data",l=>{const{quote:r}=l;r&&(g(r),f(!1))},{eager:!0});return()=>o==null?void 0:o.off()},[]),w(()=>{const o=R.on("quote-management/shipping-address-set",l=>{const{quote:r}=l;r&&g(r)},{eager:!0});return()=>o==null?void 0:o.off()},[]),w(()=>{const o=R.on("quote-management/quote-sent-for-review",l=>{const{quote:r}=l;g(r),te(""),j(!1)},{eager:!0});return()=>o==null?void 0:o.off()},[]),w(()=>{const o=R.on("quote-management/negotiable-quote-closed",async l=>{O(!1),D(""),L(n.closeSuccessMessage),g(r=>{var Z;return r!=null&&r.uid&&((Z=l.closedQuoteUids)!=null&&Z.includes(r.uid))&&Ze(r.uid).then(A=>{g(A)}).catch(A=>{console.warn("Failed to refresh quote data after closure:",A)}),r}),setTimeout(()=>{G(!1),L("")},2e3)},{eager:!0});return()=>o==null?void 0:o.off()},[n.closeSuccessMessage]),w(()=>{const o=R.on("quote-management/negotiable-quote-close-error",l=>{console.log("Close error event received:",l),O(!1),L("");const r=l.error.message||n.errorFallback;D(r)},{eager:!0});return()=>o==null?void 0:o.off()},[n.errorFallback]),w(()=>{const o=R.on("quote-management/quote-renamed",l=>{const{quote:r}=l;g(r),F(""),x(""),z(n.renameSuccessMessage),setTimeout(()=>{$(!1),B(""),P(""),z("")},2e3)},{eager:!0});return()=>o==null?void 0:o.off()},[n.renameSuccessMessage]);const le=q(()=>{B((e==null?void 0:e.name)||""),P(""),F(""),x(""),z(""),$(!0)},[e]),qe=q(()=>{$(!1),B(""),P(""),F(""),x(""),z("")},[]),ve=q(o=>{B(o),o.trim()&&x("")},[]),_e=q(async()=>{if(!k.trim()){x(n.renameQuoteNameRequired);return}try{F(""),x(""),await Ae({quoteUid:e.uid,quoteName:k,quoteComment:V.trim()||void 0})}catch(o){F(o.message||n.renameErrorDefault)}},[e,k,V,n.renameQuoteNameRequired,n.renameErrorDefault]),Qe=h(()=>{const o=e&&(e.lockedForEditing===!0||e.lockedForEditing===void 0&&(e.status==="SUBMITTED"||e.status==="PENDING"||e.status==="ORDERED"||e.status==="CLOSED"));return t(p,{name:"QuoteName",slot:a==null?void 0:a.QuoteName,context:{quoteName:e==null?void 0:e.name,quoteData:e},children:d("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:le,disabled:o,"data-testid":"rename-quote-button",className:"quote-management-manage-negotiable-quote__rename-button","aria-label":"Rename quote",children:t(oa,{})})]})})},[a==null?void 0:a.QuoteName,e,le]),Se=h(()=>t(p,{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]),ce=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),se=ce&&t(T,{type:"warning",variant:"secondary",icon:t(W,{}),heading:n.bannerTitle,description:ce}),ye=se&&t(p,{name:"Banner","data-testid":"banner",slot:a==null?void 0:a.Banner,context:{quoteData:e},children:se}),Ce=h(()=>{if(!e)return null;const o=Ge()||"en-US",l=new Intl.DateTimeFormat(o,{year:"numeric",month:"long",day:"numeric"});let r;try{r=l.format(new Date(e.expirationDate))}catch{r=e.expirationDate}return d(p,{name:"Details",slot:a==null?void 0:a.Details,context:{quoteData:e},children:[d("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}),d("span",{className:"quote-management-manage-negotiable-quote__detail-content","data-testid":"created-value",children:[l.format(new Date(e.createdAt))," (",e.buyer.firstname," ",e.buyer.lastname,")"]})]}),d("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})]}),d("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:r})]})]})},[a==null?void 0:a.Details,n,e]),de=h(()=>[{label:n.close,value:"close",disabled:!(e!=null&&e.canClose)},{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,e==null?void 0:e.canClose]),Te=h(()=>{const o=r=>{b==null||b(r)},l=r=>{switch(r){case"close":G(!0),D(""),L(""),i==null||i(r);break;case"delete":Q(!0),i==null||i(r);break;case"print":i==null||i(r);break;case"createTemplate":i==null||i(r);break;case"createCopy":i==null||i(r);break}};return t(p,{name:"ActionBar",slot:a==null?void 0:a.ActionBar,context:{quoteData:e},children:t(ra,{dropdownPlaceholder:n.actionsLabel,dropdownOptions:[{label:n.remove,value:"remove"}],handleDropdownChange:o,buttons:de.map(r=>t(U,{variant:"tertiary",onClick:()=>l(r.value),"data-testid":`actions-bar-${r.value}-button`,"data-action":r.value,disabled:r.disabled,children:r.label},r.value))})})},[de,n,a==null?void 0:a.ActionBar,e,b,i]),Le=h(()=>t(p,{name:"QuoteContent",slot:a==null?void 0:a.QuoteContent,context:{quoteData:e},children:t(la,{tabs:new Map([["items-quoted","Items Quoted"],["comments","Comments"],["history-log","History Log"]]),tabsContent:new Map([["items-quoted",t(p,{name:"ItemsQuotedTab",slot:a==null?void 0:a.ItemsQuotedTab,context:{quoteData:e},children:t(Je,{quoteData:e})},"items-quoted")],["comments",t(p,{name:"CommentsTab",slot:a==null?void 0:a.CommentsTab,context:{quoteData:e},children:t(na,{quoteData:e})},"comments")],["history-log",t(p,{name:"HistoryLogTab",slot:a==null?void 0:a.HistoryLogTab,context:{quoteData:e},children:t(Ye,{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]),xe=h(()=>t(p,{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]),we=h(()=>t(p,{name:"ShippingInformation",slot:a==null?void 0:a.ShippingInformation,context:{quoteData:e,loading:M,setLoading:f},children:t(Ke,{quoteData:e,loading:M,"data-testid":"manage-quote-shipping-address"})}),[a==null?void 0:a.ShippingInformation,e,M,f]),Ee=h(()=>t(p,{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]),Re=h(()=>t(p,{name:"QuoteComments",slot:a==null?void 0:a.QuoteComments,context:{quoteData:e},children:t(he,{name:"quoteComments",placeholder:n.quoteCommentsPlaceholder,rows:3,value:C,onInput:o=>{te(o.target.value)},disabled:I})}),[a==null?void 0:a.QuoteComments,n,e,C,I]),Ie=q(async()=>{if(e!=null&&e.uid){O(!0),D(""),L("");try{await ea({quoteUids:[e.uid]})}catch(o){console.error("Failed to close quote:",o)}}},[e]),De=q(()=>{G(!1),D(""),L("")},[]),ue=q(async()=>{if(_){_({quoteData:e,comment:C.trim()||void 0});return}j(!0);try{await aa({quoteUid:e.uid,comment:C.trim()||void 0})}catch(o){console.error("Failed to send quote for review:",o),j(!1)}},[e,_,C]),Fe=h(()=>t(p,{name:"Footer",slot:a==null?void 0:a.Footer,context:{quoteData:e,comment:C,isSubmitting:I},children:t(U,{variant:"primary",onClick:ue,"data-testid":"send-for-review-button",disabled:!(e!=null&&e.canSendForReview)||I||!e,children:n.sendForReview})}),[a==null?void 0:a.Footer,n,e,C,I,ue]),He=h(()=>X?t(T,{type:"error",variant:"primary",icon:t(W,{color:"var(--color-error)"}),heading:n.renameErrorHeading,description:X}):void 0,[X,n.renameErrorHeading]),ke=h(()=>J?t(T,{type:"success",variant:"primary",icon:t(ae,{}),heading:n.renameSuccessHeading,description:J}):void 0,[J,n.renameSuccessHeading]),K=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]),Be=q(()=>{Q(!1),N(null),H(!1)},[]),Pe=q(async()=>{if(e!=null&&e.uid){N(null),H(!1);try{const{operationResults:o}=await ta(e.uid),l=o.find(r=>r.__typename==="DeleteNegotiableQuoteOperationFailure");if(l){const r=K(l);N(r);return}H(!0)}catch(o){const l=K(o);N(l)}}},[e,K]),ze=q(()=>{N(null)},[]),We=q(()=>{H(!1)},[]),Ue=S?t(T,{type:"error",variant:"primary",icon:t(W,{}),heading:n.confirmationModalDeleteErrorHeading,description:S,onDismiss:ze,"data-testid":"confirmation-modal-error-banner"}):null,ge=(y?t(T,{type:"success",variant:"primary",icon:t(ae,{}),heading:n.confirmationModalDeleteSuccessHeading,description:n.confirmationModalDeleteSuccessDescription,onDismiss:We,"data-testid":"confirmation-modal-success-banner"}):null)||Ue,je={...u,loading:M,quoteName:Qe,quoteStatus:Se,banner:ye||void 0,details:Ce,actionBar:Te,quoteContent:Le,shippingInformationTitle:xe,shippingInformation:we,quoteCommentsTitle:Ee,quoteComments:Re,footer:Fe};let Y=null;return re?Y=t(T,{type:"success",variant:"primary",icon:t(ae,{}),heading:n.closeModalSuccessHeading,description:re,"data-testid":"close-quote-success-banner"}):ie&&(Y=t(T,{type:"error",variant:"primary",icon:t(W,{}),heading:n.confirmationModalDeleteErrorHeading,description:ie,"data-testid":"close-quote-error-banner"})),d(pe,{children:[t(ia,{...je}),me&&ee(t(ca,{open:me,quoteName:k,renameReason:V,quoteNameError:Ne,errorBanner:He,successBanner:ke,onQuoteNameChange:ve,onRenameReasonChange:P,onSave:_e,onClose:qe}),document.body),c&&ee(t(fe,{open:c,title:n.confirmationModalDeleteTitle,message:n.confirmationModalDeleteMessage,cancelLabel:n.confirmationModalCancel,confirmLabel:n.confirmationModalDeleteConfirm,onCancel:Be,onConfirm:Pe,showCloseButton:!ge,confirmationBanner:ge}),document.body),ne&&ee(t(fe,{open:ne,title:n.closeModalTitle,message:n.closeModalMessage,cancelLabel:n.closeModalCancel,confirmLabel:oe?n.closeModalConfirmLoading:n.closeModalConfirm,onCancel:De,onConfirm:oe?void 0:Ie,showCloseButton:!0,confirmationBanner:Y,"data-testid":"close-quote-confirmation-modal"}),document.body)]})};export{ka as ManageNegotiableQuote,ka as default};
3
+ import{jsx as t,jsxs as s,Fragment as Le}from"@dropins/tools/preact-jsx-runtime.js";import*as we from"@dropins/tools/preact-compat.js";import{useState as c,useRef as ie,useEffect as y,useCallback as d,useMemo as f,createPortal as j}from"@dropins/tools/preact-compat.js";import{classes as l,VComponent as N,Slot as g,getGlobalLocale as ra}from"@dropins/tools/lib.js";/* empty css */import{Picker as ia,Skeleton as ma,SkeletonRow as F,Modal as la,Input as ca,TextArea as xe,Button as $,InLineAlert as L}from"@dropins/tools/components.js";import{events as x}from"@dropins/tools/event-bus.js";import"@dropins/tools/preact.js";import"@dropins/tools/preact-hooks.js";import{I as sa,C as me}from"../chunks/ItemsQuoted.js";/* empty css *//* empty css */import{T as da}from"../chunks/TabbedContent.js";/* empty css */import{useText as Re}from"@dropins/tools/i18n.js";import{S as ua}from"../chunks/ShippingAddressDisplay.js";import{Q as ga}from"../chunks/QuoteHistoryLog3.js";import{g as ba,r as fa,c as pa,s as Ma,d as ha}from"../chunks/renameNegotiableQuote.js";import"../chunks/state.js";import{Q as Na}from"../chunks/QuoteCommentsList3.js";import{a as G,S as le}from"../chunks/WarningFilled.js";import"../chunks/QuotePricesSummary.js";import"../chunks/removeNegotiableQuoteItems.js";import"../chunks/transform-quote.js";import"@dropins/tools/fetch-graphql.js";import"../chunks/NegotiableQuoteFragment.js";import"../chunks/QuoteHistoryLog.js";import"../chunks/dateUtils.js";import"../chunks/QuoteCommentsList.js";const qa=p=>we.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",className:"feather feather-edit-2",...p},we.createElement("path",{d:"M17 3a2.828 2.828 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5L17 3z"})),va=({className:p,dropdownPlaceholder:a,dropdownOptions:m,dropdownValue:q,handleDropdownChange:Q,buttons:e,...u})=>{const v=m&&m.length>0,S=e&&e.length>0,_=(m==null?void 0:m.map(M=>({text:M.label,value:M.value})))||[];return _.unshift({text:a||"",value:""}),t("div",{className:"quote-management-actions-bar__container","data-testid":"actions-bar-container",children:s("div",{className:l(["quote-management-actions-bar",p]),"data-testid":"actions-bar",...u,children:[v&&t(ia,{name:"dropdown",id:"dropdown",handleSelect:Q,className:"quote-management-actions-bar__dropdown","data-testid":"dropdown",options:_,value:q||""},`actions-bar-picker-${q||"empty"}`),S&&t("div",{className:"quote-management-actions-bar__buttons","data-testid":"buttons-container",children:e==null?void 0:e.map((M,C)=>t(N,{node:M,className:l(["quote-management-actions-bar__button"])},C))})]})})},Qa=({className:p,loading:a,quoteName:m,quoteStatus:q,banner:Q,details:e,actionBar:u,quoteContent:v,shippingInformationTitle:S,shippingInformation:_,quoteCommentsTitle:M,quoteComments:C,footer:b,...I})=>a?t(Sa,{}):s("div",{...I,className:l(["quote-management-manage-negotiable-quote",p]),children:[s("div",{className:l(["quote-management-manage-negotiable-quote__header"]),children:[m&&t(N,{node:m,className:l(["quote-management-manage-negotiable-quote__quote-name"])}),q&&t(N,{node:q,className:l(["quote-management-manage-negotiable-quote__quote-status"])})]}),Q&&t(N,{node:Q,className:l(["quote-management-manage-negotiable-quote__banner"])}),e&&t(N,{node:e,className:l(["quote-management-manage-negotiable-quote__details"])}),u&&t(N,{node:u,className:l(["quote-management-manage-negotiable-quote__action-bar"])}),v&&t(N,{node:v,className:l(["quote-management-manage-negotiable-quote__quote-content"])}),s("div",{"data-testid":"quote-shipping-information-container",className:l(["quote-management-manage-negotiable-quote__shipping-information-container"]),children:[S&&t(N,{node:S,className:l(["quote-management-manage-negotiable-quote__shipping-information-title"])}),_&&t(N,{node:_,className:l(["quote-management-manage-negotiable-quote__shipping-information"])})]}),s("div",{"data-testid":"quote-comments-container",className:l(["quote-management-manage-negotiable-quote__quote-comments-container"]),children:[M&&t(N,{node:M,className:l(["quote-management-manage-negotiable-quote__quote-comments-title"])}),C&&t(N,{node:C,className:l(["quote-management-manage-negotiable-quote__quote-comments"])})]}),t(N,{node:b,className:l(["quote-management-manage-negotiable-quote__footer"])})]}),Sa=()=>s(ma,{"data-testid":"manage-negotiable-quote-skeleton",children:[t(F,{variant:"heading",fullWidth:!0,size:"large"}),t(F,{variant:"row",fullWidth:!1,size:"small"}),t(F,{variant:"row",fullWidth:!1,size:"small"}),t(F,{variant:"row",fullWidth:!0}),t(F,{variant:"row",fullWidth:!0,size:"xlarge",lines:2}),t(F,{variant:"row",fullWidth:!1,size:"small"})]}),_a=({className:p,open:a,quoteName:m,renameReason:q,quoteNameError:Q,errorBanner:e,successBanner:u,showCloseButton:v=!0,onQuoteNameChange:S,onRenameReasonChange:_,onSave:M,onClose:C})=>{const b=Re({title:"NegotiableQuote.Manage.rename.title",quoteNameLabel:"NegotiableQuote.Manage.rename.quoteNameLabel",reasonLabel:"NegotiableQuote.Manage.rename.reasonLabel",renameButton:"NegotiableQuote.Manage.rename.renameButton",cancelButton:"NegotiableQuote.Manage.rename.cancelButton"});return a?s(la,{open:a,size:"medium",title:t(Le,{children:b.title}),onClose:C,clickToDismiss:!0,escapeToDismiss:!0,showCloseButton:v,className:l(["quote-management-rename-quote-modal",p]),"data-testid":"rename-quote-modal",children:[e&&t("div",{className:l(["quote-management-rename-quote-modal__error-banner"]),"data-testid":"rename-quote-modal-error-banner",children:e}),u&&t("div",{className:l(["quote-management-rename-quote-modal__success-banner"]),"data-testid":"rename-quote-modal-success-banner",children:u}),s("div",{className:l(["quote-management-rename-quote-modal__content"]),children:[s("div",{children:[t(ca,{name:"quoteName",type:"text",value:m,onInput:I=>S(I.target.value),floatingLabel:b.quoteNameLabel,required:!0,error:!!Q}),Q&&t("span",{className:l(["quote-management-rename-quote-modal__error-text"]),children:Q})]}),t(xe,{name:"quoteComment",value:q,onInput:I=>_(I.target.value),label:b.reasonLabel,rows:3})]}),s("div",{className:l(["quote-management-rename-quote-modal__actions"]),children:[t($,{variant:"secondary",size:"medium",onClick:C,className:l(["quote-management-rename-quote-modal__cancel-button"]),children:b.cancelButton}),t($,{variant:"primary",size:"medium",onClick:M,className:l(["quote-management-rename-quote-modal__save-button"]),children:b.renameButton})]})]}):null},at=({onActionsDropdownChange:p,slots:a,onActionsButtonClick:m,onSendForReview:q,...Q})=>{const[e,u]=c(void 0),[v,S]=c(!0),[_,M]=c(!1),[C,b]=c(null),[I,U]=c(!1),[T,ce]=c(""),[H,X]=c(!1),[se,J]=c(!1),[de,K]=c(!1),[ue,R]=c(""),[ge,B]=c(""),[be,Y]=c(!1),[P,z]=c(""),[Z,W]=c(""),[A,k]=c(""),[Ee,E]=c(""),[ee,O]=c(""),[ae,fe]=c(new Set),pe=ie(ae),te=ie(null),[D,ne]=c(""),V=ie(D),[Me,he]=c(!1);y(()=>{pe.current=ae},[ae]),y(()=>{V.current=D},[D]);const o=Re({createdLabel:"NegotiableQuote.Manage.createdLabel",salesRepLabel:"NegotiableQuote.Manage.salesRepLabel",expiresLabel:"NegotiableQuote.Manage.expiresLabel",actionsLabel:"NegotiableQuote.Manage.actionsLabel",remove:"NegotiableQuote.Manage.actions.remove",close:"NegotiableQuote.Manage.actionButtons.close",delete:"NegotiableQuote.Manage.actionButtons.delete",print:"NegotiableQuote.Manage.actionButtons.print",createTemplate:"NegotiableQuote.Manage.actionButtons.createTemplate",createCopy:"NegotiableQuote.Manage.actionButtons.createCopy",shippingInformationTitle:"NegotiableQuote.Manage.shippingInformation.title",quoteCommentsTitle:"NegotiableQuote.Manage.quoteComments.title",quoteCommentsPlaceholder:"NegotiableQuote.Manage.quoteComments.placeholder",sendForReview:"NegotiableQuote.Manage.actionButtons.sendForReview",bannerTitle:"NegotiableQuote.Manage.bannerTitle",statusSubmitted:"NegotiableQuote.Manage.bannerStatusMessages.submitted",statusPending:"NegotiableQuote.Manage.bannerStatusMessages.pending",statusExpired:"NegotiableQuote.Manage.bannerStatusMessages.expired",errorFallback:"NegotiableQuote.Manage.confirmationModal.delete.errorFallback",closeSuccessMessage:"NegotiableQuote.Manage.confirmationModal.close.successDescription",closeModalTitle:"NegotiableQuote.Manage.actionButtons.close",closeModalMessage:"NegotiableQuote.Manage.confirmationModal.close.message",closeModalCancel:"NegotiableQuote.Manage.confirmationModal.cancel",closeModalConfirm:"NegotiableQuote.Manage.confirmationModal.close.confirm",closeModalConfirmLoading:"NegotiableQuote.Manage.confirmationModal.close.confirmLoading",closeModalSuccessHeading:"NegotiableQuote.Manage.confirmationModal.close.successHeading",renameErrorHeading:"NegotiableQuote.Manage.rename.errorHeading",renameQuoteNameRequired:"NegotiableQuote.Manage.rename.quoteNameRequired",renameErrorDefault:"NegotiableQuote.Manage.rename.errorDefault",renameSuccessHeading:"NegotiableQuote.Manage.rename.successHeading",renameSuccessMessage:"NegotiableQuote.Manage.rename.successMessage",confirmationModalCancel:"NegotiableQuote.Manage.confirmationModal.cancel",confirmationModalDeleteTitle:"NegotiableQuote.Manage.confirmationModal.delete.title",confirmationModalDeleteMessage:"NegotiableQuote.Manage.confirmationModal.delete.message",confirmationModalDeleteConfirm:"NegotiableQuote.Manage.confirmationModal.delete.confirm",confirmationModalDeleteErrorHeading:"NegotiableQuote.Manage.confirmationModal.delete.errorHeading",confirmationModalDeleteErrorFallback:"NegotiableQuote.Manage.confirmationModal.delete.errorFallback",noItemsSelectedModalTitle:"NegotiableQuote.Manage.confirmationModal.noItemsSelected.title",noItemsSelectedModalMessage:"NegotiableQuote.Manage.confirmationModal.noItemsSelected.message",noItemsSelectedModalConfirm:"NegotiableQuote.Manage.confirmationModal.noItemsSelected.confirm",confirmationModalDeleteSuccessHeading:"NegotiableQuote.Manage.confirmationModal.delete.successHeading",confirmationModalDeleteSuccessDescription:"NegotiableQuote.Manage.confirmationModal.delete.successDescription"});y(()=>{const n=x.on("quote-management/quote-data",r=>{const{quote:i}=r;i&&(u(i),S(!1))},{eager:!0});return()=>n==null?void 0:n.off()},[]),y(()=>{const n=x.on("quote-management/shipping-address-set",r=>{const{quote:i}=r;i&&u(i)},{eager:!0});return()=>n==null?void 0:n.off()},[]),y(()=>{const n=x.on("quote-management/quote-sent-for-review",r=>{const{quote:i}=r;u(i),ce(""),X(!1)},{eager:!0});return()=>n==null?void 0:n.off()},[]),y(()=>{const n=x.on("quote-management/quote-items-removed",r=>{const{quote:i,removedItemUids:h}=r;i&&u(i),h&&fe(w=>{const Te=new Set(w);return h.forEach(oa=>Te.delete(oa)),Te})},{eager:!0});return()=>n==null?void 0:n.off()},[]);const Ne=d((n,r)=>{fe(i=>{const h=new Set(i);return r?h.add(n.uid):h.delete(n.uid),h})},[]),qe=d(n=>{const r=n.target.value,i=pe.current;if(r==="remove"){if(ne(r),V.current=r,i.size===0)he(!0);else if(e&&te.current){const h=e.items.filter(w=>i.has(w.uid));te.current(h)}}p==null||p(n)},[p,e]),ve=d(()=>{he(!1),ne(""),V.current=""},[]);y(()=>{const n=x.on("quote-management/negotiable-quote-closed",async r=>{K(!1),B(""),R(o.closeSuccessMessage),u(i=>{var h;return i!=null&&i.uid&&((h=r.closedQuoteUids)!=null&&h.includes(i.uid))&&ba(i.uid).then(w=>{u(w)}).catch(w=>{console.warn("Failed to refresh quote data after closure:",w)}),i}),setTimeout(()=>{J(!1),R("")},2e3)},{eager:!0});return()=>n==null?void 0:n.off()},[o.closeSuccessMessage]),y(()=>{const n=x.on("quote-management/negotiable-quote-close-error",r=>{console.log("Close error event received:",r),K(!1),R("");const i=r.error.message||o.errorFallback;B(i)},{eager:!0});return()=>n==null?void 0:n.off()},[o.errorFallback]),y(()=>{const n=x.on("quote-management/quote-renamed",r=>{const{quote:i}=r;u(i),k(""),E(""),O(o.renameSuccessMessage),setTimeout(()=>{Y(!1),z(""),W(""),O("")},2e3)},{eager:!0});return()=>n==null?void 0:n.off()},[o.renameSuccessMessage]);const Qe=d(()=>{z((e==null?void 0:e.name)||""),W(""),k(""),E(""),O(""),Y(!0)},[e]),De=d(()=>{Y(!1),z(""),W(""),k(""),E(""),O("")},[]),Fe=d(n=>{z(n),n.trim()&&E("")},[]),He=d(async()=>{if(!P.trim()){E(o.renameQuoteNameRequired);return}try{k(""),E(""),await fa({quoteUid:e.uid,quoteName:P,quoteComment:Z.trim()||void 0})}catch(n){k(n.message||o.renameErrorDefault)}},[e,P,Z,o.renameQuoteNameRequired,o.renameErrorDefault]),Be=f(()=>{const n=e&&(e.lockedForEditing===!0||e.lockedForEditing===void 0&&(e.status==="SUBMITTED"||e.status==="PENDING"||e.status==="ORDERED"||e.status==="CLOSED"));return t(g,{name:"QuoteName",slot:a==null?void 0:a.QuoteName,context:{quoteName:e==null?void 0:e.name,quoteData:e},children:s("div",{className:"quote-management-manage-negotiable-quote__quote-name-wrapper",children:[t("h1",{"data-testid":"quote-name",className:"quote-management-manage-negotiable-quote__quote-name-title",children:e==null?void 0:e.name}),t("button",{onClick:Qe,disabled:n,"data-testid":"rename-quote-button",className:"quote-management-manage-negotiable-quote__rename-button","aria-label":"Rename quote",children:t(qa,{})})]})})},[a==null?void 0:a.QuoteName,e,Qe]),ke=f(()=>t(g,{name:"QuoteStatus",slot:a==null?void 0:a.QuoteStatus,context:{quoteStatus:e==null?void 0:e.status,quoteData:e},children:t("div",{"data-testid":"quote-status",children:e==null?void 0:e.status})}),[a==null?void 0:a.QuoteStatus,e]),Se=d(n=>{switch(n){case"SUBMITTED":return o.statusSubmitted;case"PENDING":return o.statusPending;case"EXPIRED":return o.statusExpired;default:return null}},[o])(e==null?void 0:e.status),_e=Se&&t(L,{type:"warning",variant:"secondary",icon:t(G,{}),heading:o.bannerTitle,description:Se}),Ue=_e&&t(g,{name:"Banner","data-testid":"banner",slot:a==null?void 0:a.Banner,context:{quoteData:e},children:_e}),Pe=f(()=>{if(!e)return null;const n=ra()||"en-US",r=new Intl.DateTimeFormat(n,{year:"numeric",month:"long",day:"numeric"});let i;try{i=r.format(new Date(e.expirationDate))}catch{i=e.expirationDate}return s(g,{name:"Details",slot:a==null?void 0:a.Details,context:{quoteData:e},children:[s("div",{className:"quote-management-manage-negotiable-quote__detail",children:[t("span",{className:"quote-management-manage-negotiable-quote__detail-title","data-testid":"created-label",children:o.createdLabel}),s("span",{className:"quote-management-manage-negotiable-quote__detail-content","data-testid":"created-value",children:[r.format(new Date(e.createdAt))," (",e.buyer.firstname," ",e.buyer.lastname,")"]})]}),s("div",{className:"quote-management-manage-negotiable-quote__detail",children:[t("span",{className:"quote-management-manage-negotiable-quote__detail-title","data-testid":"sales-rep-label",children:o.salesRepLabel}),t("span",{className:"quote-management-manage-negotiable-quote__detail-content","data-testid":"sales-rep-value",children:e.salesRepName})]}),s("div",{className:"quote-management-manage-negotiable-quote__detail",children:[t("span",{className:"quote-management-manage-negotiable-quote__detail-title","data-testid":"expires-label",children:o.expiresLabel}),t("span",{className:"quote-management-manage-negotiable-quote__detail-content","data-testid":"expires-value",children:i})]})]})},[a==null?void 0:a.Details,o,e]),Ce=f(()=>[{label:o.close,value:"close",disabled:!(e!=null&&e.canClose)},{label:o.delete,value:"delete",disabled:!(e!=null&&e.canDelete)},{label:o.print,value:"print"},{label:o.createTemplate,value:"createTemplate"},{label:o.createCopy,value:"createCopy"}],[o,e==null?void 0:e.canDelete,e==null?void 0:e.canClose]),ze=f(()=>{const n=r=>{switch(r){case"close":J(!0),B(""),R(""),m==null||m(r);break;case"delete":M(!0),m==null||m(r);break;case"print":m==null||m(r);break;case"createTemplate":m==null||m(r);break;case"createCopy":m==null||m(r);break}};return t(g,{name:"ActionBar",slot:a==null?void 0:a.ActionBar,context:{quoteData:e,actionsBarDropdownValue:D},children:t(va,{dropdownPlaceholder:o.actionsLabel,dropdownOptions:[{label:o.remove,value:"remove"}],dropdownValue:D,handleDropdownChange:qe,buttons:Ce.map(r=>t($,{variant:"tertiary",onClick:()=>n(r.value),"data-testid":`actions-bar-${r.value}-button`,"data-action":r.value,disabled:r.disabled,children:r.label},r.value))})})},[Ce,o,a==null?void 0:a.ActionBar,e,qe,m,D]),We=f(()=>t(g,{name:"QuoteContent",slot:a==null?void 0:a.QuoteContent,context:{quoteData:e},children:t(da,{tabs:new Map([["items-quoted","Items Quoted"],["comments","Comments"],["history-log","History Log"]]),tabsContent:new Map([["items-quoted",t(g,{name:"ItemsQuotedTab",slot:a==null?void 0:a.ItemsQuotedTab,context:{quoteData:e},children:t(sa,{quoteData:e,onItemCheckboxChange:Ne,onRemoveItemsRef:n=>{te.current=n},onRemoveModalStateChange:n=>{!n&&V.current==="remove"&&ne("")}})},"items-quoted")],["comments",t(g,{name:"CommentsTab",slot:a==null?void 0:a.CommentsTab,context:{quoteData:e},children:t(Na,{quoteData:e})},"comments")],["history-log",t(g,{name:"HistoryLogTab",slot:a==null?void 0:a.HistoryLogTab,context:{quoteData:e},children:t(ga,{quoteData:e})},"history-log")]])})}),[a==null?void 0:a.QuoteContent,a==null?void 0:a.HistoryLogTab,a==null?void 0:a.CommentsTab,a==null?void 0:a.ItemsQuotedTab,e,Ne]),Oe=f(()=>t(g,{name:"ShippingInformationTitle",slot:a==null?void 0:a.ShippingInformationTitle,context:{quoteData:e},children:t("h2",{children:o.shippingInformationTitle})}),[a==null?void 0:a.ShippingInformationTitle,e,o]),Ve=f(()=>t(g,{name:"ShippingInformation",slot:a==null?void 0:a.ShippingInformation,context:{quoteData:e,loading:v,setLoading:S},children:t(ua,{quoteData:e,loading:v,"data-testid":"manage-quote-shipping-address"})}),[a==null?void 0:a.ShippingInformation,e,v,S]),je=f(()=>t(g,{name:"QuoteCommentsTitle",slot:a==null?void 0:a.QuoteCommentsTitle,context:{quoteData:e},children:t("h2",{children:o.quoteCommentsTitle})}),[a==null?void 0:a.QuoteCommentsTitle,o,e]),Ge=f(()=>t(g,{name:"QuoteComments",slot:a==null?void 0:a.QuoteComments,context:{quoteData:e},children:t(xe,{name:"quoteComments",placeholder:o.quoteCommentsPlaceholder,rows:3,value:T,onInput:n=>{ce(n.target.value)},disabled:H})}),[a==null?void 0:a.QuoteComments,o,e,T,H]),$e=d(async()=>{if(e!=null&&e.uid){K(!0),B(""),R("");try{await pa({quoteUids:[e.uid]})}catch(n){console.error("Failed to close quote:",n)}}},[e]),Xe=d(()=>{J(!1),B(""),R("")},[]),ye=d(async()=>{if(q){q({quoteData:e,comment:T.trim()||void 0});return}X(!0);try{await Ma({quoteUid:e.uid,comment:T.trim()||void 0})}catch(n){console.error("Failed to send quote for review:",n),X(!1)}},[e,q,T]),Je=f(()=>t(g,{name:"Footer",slot:a==null?void 0:a.Footer,context:{quoteData:e,comment:T,isSubmitting:H},children:t($,{variant:"primary",onClick:ye,"data-testid":"send-for-review-button",disabled:!(e!=null&&e.canSendForReview)||H||!e,children:o.sendForReview})}),[a==null?void 0:a.Footer,o,e,T,H,ye]),Ke=f(()=>A?t(L,{type:"error",variant:"primary",icon:t(G,{color:"var(--color-error)"}),heading:o.renameErrorHeading,description:A}):void 0,[A,o.renameErrorHeading]),Ye=f(()=>ee?t(L,{type:"success",variant:"primary",icon:t(le,{}),heading:o.renameSuccessHeading,description:ee}):void 0,[ee,o.renameSuccessHeading]),oe=d(n=>n.errors&&Array.isArray(n.errors)&&n.errors.length>0?n.errors[0].message||o.confirmationModalDeleteErrorFallback:(n==null?void 0:n.message)||o.confirmationModalDeleteErrorFallback,[o.confirmationModalDeleteErrorFallback]),Ze=d(()=>{M(!1),b(null),U(!1)},[]),Ae=d(async()=>{if(e!=null&&e.uid){b(null),U(!1);try{const{operationResults:n}=await ha(e.uid),r=n.find(i=>i.__typename==="DeleteNegotiableQuoteOperationFailure");if(r){const i=oe(r);b(i);return}U(!0)}catch(n){const r=oe(n);b(r)}}},[e,oe]),ea=d(()=>{b(null)},[]),aa=d(()=>{U(!1)},[]),ta=C?t(L,{type:"error",variant:"primary",icon:t(G,{}),heading:o.confirmationModalDeleteErrorHeading,description:C,onDismiss:ea,"data-testid":"confirmation-modal-error-banner"}):null,Ie=(I?t(L,{type:"success",variant:"primary",icon:t(le,{}),heading:o.confirmationModalDeleteSuccessHeading,description:o.confirmationModalDeleteSuccessDescription,onDismiss:aa,"data-testid":"confirmation-modal-success-banner"}):null)||ta,na={...Q,loading:v,quoteName:Be,quoteStatus:ke,banner:Ue||void 0,details:Pe,actionBar:ze,quoteContent:We,shippingInformationTitle:Oe,shippingInformation:Ve,quoteCommentsTitle:je,quoteComments:Ge,footer:Je};let re=null;return ue?re=t(L,{type:"success",variant:"primary",icon:t(le,{}),heading:o.closeModalSuccessHeading,description:ue,"data-testid":"close-quote-success-banner"}):ge&&(re=t(L,{type:"error",variant:"primary",icon:t(G,{}),heading:o.confirmationModalDeleteErrorHeading,description:ge,"data-testid":"close-quote-error-banner"})),s(Le,{children:[t(Qa,{...na}),be&&j(t(_a,{open:be,quoteName:P,renameReason:Z,quoteNameError:Ee,errorBanner:Ke,successBanner:Ye,onQuoteNameChange:Fe,onRenameReasonChange:W,onSave:He,onClose:De}),document.body),_&&j(t(me,{open:_,title:o.confirmationModalDeleteTitle,message:o.confirmationModalDeleteMessage,cancelLabel:o.confirmationModalCancel,confirmLabel:o.confirmationModalDeleteConfirm,onCancel:Ze,onConfirm:Ae,showCloseButton:!Ie,confirmationBanner:Ie}),document.body),se&&j(t(me,{open:se,title:o.closeModalTitle,message:o.closeModalMessage,cancelLabel:o.closeModalCancel,confirmLabel:de?o.closeModalConfirmLoading:o.closeModalConfirm,onCancel:Xe,onConfirm:de?void 0:$e,showCloseButton:!0,confirmationBanner:re,"data-testid":"close-quote-confirmation-modal"}),document.body),Me&&j(t(me,{open:Me,title:o.noItemsSelectedModalTitle,message:o.noItemsSelectedModalMessage,confirmLabel:o.noItemsSelectedModalConfirm,onConfirm:ve,onClose:ve,showCloseButton:!0,"data-testid":"no-items-selected-modal"}),document.body)]})};export{at as ManageNegotiableQuote,at as default};
4
4
  //# sourceMappingURL=ManageNegotiableQuote.js.map