@dropins/storefront-quote-management 0.0.1-alpha9 → 1.0.0-beta1

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 (305) hide show
  1. package/api/acceptQuoteTemplate/acceptQuoteTemplate.d.ts +13 -0
  2. package/api/{getCustomerData/getCustomerData.d.ts → acceptQuoteTemplate/graphql/acceptQuoteTemplate.d.ts} +2 -2
  3. package/{data/transforms/__fixtures__/customerData.d.ts → api/acceptQuoteTemplate/index.d.ts} +2 -2
  4. package/api/addQuoteTemplateLineItemNote/addQuoteTemplateLineItemNote.d.ts +15 -0
  5. package/api/addQuoteTemplateLineItemNote/graphql/setQuoteTemplateLineItemNote.d.ts +10 -0
  6. package/api/addQuoteTemplateLineItemNote/index.d.ts +10 -0
  7. package/api/addQuoteTemplateShippingAddress/addQuoteTemplateShippingAddress.d.ts +37 -0
  8. package/api/addQuoteTemplateShippingAddress/graphql/setNegotiableQuoteTemplateShippingAddress.d.ts +10 -0
  9. package/api/addQuoteTemplateShippingAddress/index.d.ts +10 -0
  10. package/api/cancelQuoteTemplate/cancelQuoteTemplate.d.ts +14 -0
  11. package/api/cancelQuoteTemplate/graphql/cancelQuoteTemplate.d.ts +10 -0
  12. package/api/cancelQuoteTemplate/index.d.ts +10 -0
  13. package/api/closeNegotiableQuote/closeNegotiableQuote.d.ts +31 -0
  14. package/api/closeNegotiableQuote/graphql/CloseNegotiableQuoteMutation.d.ts +2 -0
  15. package/api/closeNegotiableQuote/index.d.ts +10 -0
  16. package/api/createQuoteTemplate/createQuoteTemplate.d.ts +4 -0
  17. package/api/createQuoteTemplate/graphql/createQuoteTemplate.d.ts +10 -0
  18. package/api/createQuoteTemplate/index.d.ts +10 -0
  19. package/api/deleteQuote/deleteQuote.d.ts +28 -0
  20. package/api/deleteQuote/graphql/DeleteQuoteMutation.d.ts +10 -0
  21. package/api/{getCustomerData → deleteQuote}/index.d.ts +1 -1
  22. package/{data/models/customer-model.d.ts → api/deleteQuoteTemplate/deleteQuoteTemplate.d.ts} +6 -8
  23. package/api/deleteQuoteTemplate/graphql/deleteQuoteTemplate.d.ts +10 -0
  24. package/api/deleteQuoteTemplate/index.d.ts +10 -0
  25. package/api/duplicateNegotiableQuote/duplicateNegotiableQuote.d.ts +8 -0
  26. package/api/duplicateNegotiableQuote/graphql/duplicateNegotiableQuoteMutation.d.ts +10 -0
  27. package/api/duplicateNegotiableQuote/index.d.ts +10 -0
  28. package/api/generateQuoteFromTemplate/generateQuoteFromTemplate.d.ts +15 -0
  29. package/api/generateQuoteFromTemplate/graphql/generateNegotiableQuoteFromTemplate.d.ts +10 -0
  30. package/api/generateQuoteFromTemplate/index.d.ts +10 -0
  31. package/api/getQuoteData/getQuoteData.d.ts +10 -0
  32. package/api/getQuoteData/graphql/QuoteDataQuery.d.ts +2 -0
  33. package/api/getQuoteData/index.d.ts +10 -0
  34. package/api/getQuoteTemplateData/getQuoteTemplateData.d.ts +4 -0
  35. package/api/getQuoteTemplateData/graphql/getQuoteTemplateData.d.ts +10 -0
  36. package/api/getQuoteTemplateData/index.d.ts +10 -0
  37. package/api/getQuoteTemplates/getQuoteTemplates.d.ts +34 -0
  38. package/api/getQuoteTemplates/graphql/getQuoteTemplates.d.ts +10 -0
  39. package/api/getQuoteTemplates/index.d.ts +10 -0
  40. package/api/getStoreConfig/getStoreConfig.d.ts +4 -0
  41. package/api/getStoreConfig/graphql/StoreConfigQuery.d.ts +10 -0
  42. package/api/getStoreConfig/index.d.ts +10 -0
  43. package/api/graphql/NegotiableQuoteAddressFragment.d.ts +10 -0
  44. package/api/graphql/NegotiableQuoteFragment.d.ts +5 -13
  45. package/api/graphql/NegotiableQuoteListFragment.d.ts +10 -0
  46. package/api/graphql/NegotiableQuoteTemplateFragment.d.ts +10 -0
  47. package/api/graphql/SearchResultPageInfoFragment.d.ts +10 -0
  48. package/api/graphql/ShippingMethodFragment.d.ts +10 -0
  49. package/api/graphql/SortFieldsFragment.d.ts +10 -0
  50. package/api/index.d.ts +34 -1
  51. package/api/initialize/initialize.d.ts +2 -0
  52. package/api/negotiableQuotes/graphql/NegotiableQuotesQuery.d.ts +10 -0
  53. package/api/negotiableQuotes/index.d.ts +10 -0
  54. package/api/negotiableQuotes/negotiableQuotes.d.ts +39 -0
  55. package/api/openQuoteTemplate/graphql/openQuoteTemplate.d.ts +10 -0
  56. package/api/openQuoteTemplate/index.d.ts +10 -0
  57. package/api/openQuoteTemplate/openQuoteTemplate.d.ts +13 -0
  58. package/api/removeNegotiableQuoteItems/graphql/RemoveNegotiableQuoteItemsMutation.d.ts +10 -0
  59. package/api/removeNegotiableQuoteItems/index.d.ts +10 -0
  60. package/api/removeNegotiableQuoteItems/removeNegotiableQuoteItems.d.ts +8 -0
  61. package/api/removeQuoteTemplateItems/graphql/removeNegotiableQuoteTemplateItems.d.ts +10 -0
  62. package/api/removeQuoteTemplateItems/index.d.ts +10 -0
  63. package/api/removeQuoteTemplateItems/removeQuoteTemplateItems.d.ts +14 -0
  64. package/api/renameNegotiableQuote/graphql/RenameNegotiableQuoteMutation.d.ts +10 -0
  65. package/api/renameNegotiableQuote/index.d.ts +10 -0
  66. package/api/renameNegotiableQuote/renameNegotiableQuote.d.ts +9 -0
  67. package/api/requestNegotiableQuote/graphql/RequestNegotiableQuoteMutation.d.ts +4 -12
  68. package/api/requestNegotiableQuote/requestNegotiableQuote.d.ts +0 -3
  69. package/api/sendForReview/graphql/SendNegotiableQuoteForReviewMutation.d.ts +10 -0
  70. package/api/sendForReview/index.d.ts +10 -0
  71. package/api/sendForReview/sendForReview.d.ts +11 -0
  72. package/api/sendQuoteTemplateForReview/graphql/sendQuoteTemplateForReview.d.ts +10 -0
  73. package/api/sendQuoteTemplateForReview/index.d.ts +10 -0
  74. package/api/sendQuoteTemplateForReview/sendQuoteTemplateForReview.d.ts +15 -0
  75. package/api/setLineItemNote/graphql/SetLineItemNoteMutation.d.ts +10 -0
  76. package/api/setLineItemNote/index.d.ts +10 -0
  77. package/api/setLineItemNote/setLineItemNote.d.ts +10 -0
  78. package/api/setShippingAddress/graphql/SetNegotiableQuoteShippingAddressMutation.d.ts +10 -0
  79. package/api/setShippingAddress/index.d.ts +2 -0
  80. package/api/setShippingAddress/setShippingAddress.d.ts +110 -0
  81. package/api/updateQuantities/graphql/UpdateNegotiableQuoteQuantitiesMutation.d.ts +10 -0
  82. package/api/updateQuantities/index.d.ts +10 -0
  83. package/api/updateQuantities/updateQuantities.d.ts +36 -0
  84. package/api/updateQuoteTemplateItemQuantities/graphql/updateNegotiableQuoteTemplateQuantities.d.ts +10 -0
  85. package/api/updateQuoteTemplateItemQuantities/index.d.ts +10 -0
  86. package/api/updateQuoteTemplateItemQuantities/updateQuoteTemplateItemQuantities.d.ts +20 -0
  87. package/api/uploadFile/graphql/FinishUploadMutation.d.ts +10 -0
  88. package/api/uploadFile/graphql/InitiateUploadMutation.d.ts +10 -0
  89. package/api/uploadFile/index.d.ts +10 -0
  90. package/api/uploadFile/uploadFile.d.ts +12 -0
  91. package/api.js +95 -22
  92. package/api.js.map +1 -1
  93. package/chunks/AttachedFilesList.js +4 -0
  94. package/chunks/AttachedFilesList.js.map +1 -0
  95. package/chunks/CheckWithCircle.js +4 -0
  96. package/chunks/CheckWithCircle.js.map +1 -0
  97. package/chunks/ChevronDown.js +4 -0
  98. package/chunks/ChevronDown.js.map +1 -0
  99. package/chunks/ConfirmationModal.js +4 -0
  100. package/chunks/ConfirmationModal.js.map +1 -0
  101. package/chunks/ItemsQuoted.js +4 -0
  102. package/chunks/ItemsQuoted.js.map +1 -0
  103. package/chunks/ItemsQuotedTemplate.js +4 -0
  104. package/chunks/ItemsQuotedTemplate.js.map +1 -0
  105. package/chunks/LineItemNoteModal2.js +4 -0
  106. package/chunks/LineItemNoteModal2.js.map +1 -0
  107. package/chunks/NegotiableQuoteFragment.js +391 -0
  108. package/chunks/NegotiableQuoteFragment.js.map +1 -0
  109. package/chunks/NegotiableQuoteTemplateFragment.js +190 -0
  110. package/chunks/NegotiableQuoteTemplateFragment.js.map +1 -0
  111. package/chunks/OrderSummaryLine.js +4 -0
  112. package/chunks/OrderSummaryLine.js.map +1 -0
  113. package/chunks/QuoteCommentsList.js +4 -0
  114. package/chunks/QuoteCommentsList.js.map +1 -0
  115. package/chunks/QuoteCommentsList3.js +4 -0
  116. package/chunks/QuoteCommentsList3.js.map +1 -0
  117. package/chunks/QuoteHistoryLog.js +4 -0
  118. package/chunks/QuoteHistoryLog.js.map +1 -0
  119. package/chunks/QuoteHistoryLog3.js +4 -0
  120. package/chunks/QuoteHistoryLog3.js.map +1 -0
  121. package/chunks/QuoteTemplateCommentsList.js +4 -0
  122. package/chunks/QuoteTemplateCommentsList.js.map +1 -0
  123. package/chunks/QuoteTemplateHistoryLog.js +4 -0
  124. package/chunks/QuoteTemplateHistoryLog.js.map +1 -0
  125. package/chunks/ShippingAddressDisplay.js +4 -0
  126. package/chunks/ShippingAddressDisplay.js.map +1 -0
  127. package/chunks/TabbedContent.js +4 -0
  128. package/chunks/TabbedContent.js.map +1 -0
  129. package/chunks/WarningFilled.js +4 -0
  130. package/chunks/WarningFilled.js.map +1 -0
  131. package/chunks/addQuoteTemplateLineItemNote.js +13 -0
  132. package/chunks/addQuoteTemplateLineItemNote.js.map +1 -0
  133. package/chunks/dateUtils.js +4 -0
  134. package/chunks/dateUtils.js.map +1 -0
  135. package/chunks/duplicateNegotiableQuote.js +121 -0
  136. package/chunks/duplicateNegotiableQuote.js.map +1 -0
  137. package/chunks/generateQuoteFromTemplate.js +12 -0
  138. package/chunks/generateQuoteFromTemplate.js.map +1 -0
  139. package/chunks/getQuoteTemplates.js +50 -0
  140. package/chunks/getQuoteTemplates.js.map +1 -0
  141. package/chunks/negotiableQuotes.js +77 -0
  142. package/chunks/negotiableQuotes.js.map +1 -0
  143. package/chunks/openQuoteTemplate.js +31 -0
  144. package/chunks/openQuoteTemplate.js.map +1 -0
  145. package/chunks/requestNegotiableQuote.js +6 -81
  146. package/chunks/requestNegotiableQuote.js.map +1 -1
  147. package/chunks/setLineItemNote.js +47 -0
  148. package/chunks/setLineItemNote.js.map +1 -0
  149. package/chunks/state.js +4 -0
  150. package/chunks/state.js.map +1 -0
  151. package/chunks/transform-quote-template.js +4 -0
  152. package/chunks/transform-quote-template.js.map +1 -0
  153. package/chunks/transform-quote.js +4 -0
  154. package/chunks/transform-quote.js.map +1 -0
  155. package/chunks/uploadFile.js +20 -0
  156. package/chunks/uploadFile.js.map +1 -0
  157. package/components/ActionsBar/ActionsBar.d.ts +15 -0
  158. package/components/ActionsBar/index.d.ts +11 -0
  159. package/components/AttachedFilesList/AttachedFilesList.d.ts +16 -0
  160. package/components/AttachedFilesList/index.d.ts +11 -0
  161. package/components/ConfirmationModal/ConfirmationModal.d.ts +17 -0
  162. package/components/ConfirmationModal/index.d.ts +11 -0
  163. package/components/ItemsQuoted/ItemsQuoted.d.ts +11 -0
  164. package/components/ItemsQuoted/index.d.ts +11 -0
  165. package/components/LineItemNoteModal/LineItemNoteModal.d.ts +17 -0
  166. package/components/LineItemNoteModal/index.d.ts +11 -0
  167. package/components/ManageNegotiableQuote/ManageNegotiableQuote.d.ts +22 -0
  168. package/components/ManageNegotiableQuote/__fixtures__/ManageNegotiableQuoteProps.d.ts +4 -0
  169. package/components/ManageNegotiableQuote/index.d.ts +11 -0
  170. package/components/ManageNegotiableQuoteTemplate/ManageNegotiableQuoteTemplate.d.ts +20 -0
  171. package/components/ManageNegotiableQuoteTemplate/__fixtures__/ManageNegotiableQuoteTemplateProps.d.ts +4 -0
  172. package/components/ManageNegotiableQuoteTemplate/index.d.ts +11 -0
  173. package/components/OrderSummary/OrderSummary.d.ts +48 -0
  174. package/components/OrderSummary/index.d.ts +11 -0
  175. package/components/OrderSummaryLine/OrderSummaryLine.d.ts +13 -0
  176. package/components/OrderSummaryLine/index.d.ts +11 -0
  177. package/components/ProductListTable/ProductListTable.d.ts +61 -0
  178. package/components/ProductListTable/index.d.ts +11 -0
  179. package/components/QuoteCommentsList/QuoteCommentsList.d.ts +17 -0
  180. package/components/QuoteCommentsList/index.d.ts +11 -0
  181. package/components/QuoteHistoryLog/QuoteHistoryLog.d.ts +77 -0
  182. package/components/QuoteHistoryLog/index.d.ts +11 -0
  183. package/components/QuotePricesSummary/QuotePricesSummary.d.ts +16 -0
  184. package/components/QuotePricesSummary/index.d.ts +11 -0
  185. package/components/QuoteSummaryList/QuoteSummaryList.d.ts +13 -0
  186. package/components/QuoteSummaryList/index.d.ts +11 -0
  187. package/components/QuoteTemplatesListTable/QuoteTemplatesListTable.d.ts +29 -0
  188. package/components/QuoteTemplatesListTable/index.d.ts +10 -0
  189. package/components/QuotesListTable/QuotesListTable.d.ts +29 -0
  190. package/components/QuotesListTable/index.d.ts +11 -0
  191. package/components/RenameQuoteModal/RenameQuoteModal.d.ts +18 -0
  192. package/components/RenameQuoteModal/index.d.ts +11 -0
  193. package/components/RequestNegotiableQuoteForm/RequestNegotiableQuoteForm.d.ts +1 -0
  194. package/components/ShippingAddressDisplay/ShippingAddressDisplay.d.ts +12 -0
  195. package/components/ShippingAddressDisplay/index.d.ts +11 -0
  196. package/components/TabbedContent/TabbedContent.d.ts +10 -0
  197. package/components/TabbedContent/index.d.ts +11 -0
  198. package/components/index.d.ts +28 -0
  199. package/containers/ItemsQuoted/ItemsQuoted.d.ts +30 -0
  200. package/containers/ItemsQuoted/index.d.ts +11 -0
  201. package/containers/ItemsQuoted.d.ts +3 -0
  202. package/containers/ItemsQuoted.js +4 -0
  203. package/containers/ItemsQuoted.js.map +1 -0
  204. package/containers/ItemsQuotedTemplate/ItemsQuotedTemplate.d.ts +21 -0
  205. package/containers/ItemsQuotedTemplate/index.d.ts +11 -0
  206. package/containers/ItemsQuotedTemplate.d.ts +3 -0
  207. package/containers/ItemsQuotedTemplate.js +4 -0
  208. package/containers/ItemsQuotedTemplate.js.map +1 -0
  209. package/containers/ManageNegotiableQuote/ManageNegotiableQuote.d.ts +87 -0
  210. package/containers/ManageNegotiableQuote/index.d.ts +11 -0
  211. package/containers/ManageNegotiableQuote.d.ts +3 -0
  212. package/containers/ManageNegotiableQuote.js +4 -0
  213. package/containers/ManageNegotiableQuote.js.map +1 -0
  214. package/containers/ManageNegotiableQuoteTemplate/ManageNegotiableQuoteTemplate.d.ts +67 -0
  215. package/containers/ManageNegotiableQuoteTemplate/index.d.ts +11 -0
  216. package/containers/ManageNegotiableQuoteTemplate.d.ts +3 -0
  217. package/containers/ManageNegotiableQuoteTemplate.js +4 -0
  218. package/containers/ManageNegotiableQuoteTemplate.js.map +1 -0
  219. package/containers/OrderSummary/OrderSummary.d.ts +11 -0
  220. package/containers/OrderSummary/index.d.ts +11 -0
  221. package/containers/OrderSummary.d.ts +3 -0
  222. package/containers/OrderSummary.js +4 -0
  223. package/containers/OrderSummary.js.map +1 -0
  224. package/containers/OrderSummaryLine/OrderSummaryLine.d.ts +14 -0
  225. package/containers/OrderSummaryLine/index.d.ts +11 -0
  226. package/containers/OrderSummaryLine.d.ts +3 -0
  227. package/containers/OrderSummaryLine.js +4 -0
  228. package/containers/OrderSummaryLine.js.map +1 -0
  229. package/containers/QuoteCommentsList/QuoteCommentsList.d.ts +9 -0
  230. package/containers/QuoteCommentsList/index.d.ts +11 -0
  231. package/containers/QuoteCommentsList.d.ts +3 -0
  232. package/containers/QuoteCommentsList.js +4 -0
  233. package/containers/QuoteCommentsList.js.map +1 -0
  234. package/containers/QuoteHistoryLog/QuoteHistoryLog.d.ts +9 -0
  235. package/containers/QuoteHistoryLog/index.d.ts +11 -0
  236. package/containers/QuoteHistoryLog.d.ts +3 -0
  237. package/containers/QuoteHistoryLog.js +4 -0
  238. package/containers/QuoteHistoryLog.js.map +1 -0
  239. package/containers/QuoteSummaryList/QuoteSummaryList.d.ts +51 -0
  240. package/containers/QuoteSummaryList/index.d.ts +11 -0
  241. package/containers/QuoteSummaryList.d.ts +3 -0
  242. package/containers/QuoteSummaryList.js +4 -0
  243. package/containers/QuoteSummaryList.js.map +1 -0
  244. package/containers/QuoteTemplateCommentsList/QuoteTemplateCommentsList.d.ts +9 -0
  245. package/containers/QuoteTemplateCommentsList/index.d.ts +11 -0
  246. package/containers/QuoteTemplateCommentsList.d.ts +3 -0
  247. package/containers/QuoteTemplateCommentsList.js +4 -0
  248. package/containers/QuoteTemplateCommentsList.js.map +1 -0
  249. package/containers/QuoteTemplateHistoryLog/QuoteTemplateHistoryLog.d.ts +9 -0
  250. package/containers/QuoteTemplateHistoryLog/index.d.ts +11 -0
  251. package/containers/QuoteTemplateHistoryLog.d.ts +3 -0
  252. package/containers/QuoteTemplateHistoryLog.js +4 -0
  253. package/containers/QuoteTemplateHistoryLog.js.map +1 -0
  254. package/containers/QuoteTemplatesListTable/QuoteTemplatesListTable.d.ts +74 -0
  255. package/containers/QuoteTemplatesListTable/index.d.ts +11 -0
  256. package/containers/QuoteTemplatesListTable.d.ts +3 -0
  257. package/containers/QuoteTemplatesListTable.js +4 -0
  258. package/containers/QuoteTemplatesListTable.js.map +1 -0
  259. package/containers/QuotesListTable/QuotesListTable.d.ts +72 -0
  260. package/containers/QuotesListTable/index.d.ts +11 -0
  261. package/containers/QuotesListTable.d.ts +3 -0
  262. package/containers/QuotesListTable.js +4 -0
  263. package/containers/QuotesListTable.js.map +1 -0
  264. package/containers/RequestNegotiableQuoteForm/RequestNegotiableQuoteForm.d.ts +10 -1
  265. package/containers/RequestNegotiableQuoteForm.js +1 -1
  266. package/containers/RequestNegotiableQuoteForm.js.map +1 -1
  267. package/containers/ShippingAddressDisplay/ShippingAddressDisplay.d.ts +10 -0
  268. package/containers/ShippingAddressDisplay/index.d.ts +11 -0
  269. package/containers/ShippingAddressDisplay.d.ts +1 -0
  270. package/containers/ShippingAddressDisplay.js +4 -0
  271. package/containers/ShippingAddressDisplay.js.map +1 -0
  272. package/containers/index.d.ts +22 -0
  273. package/data/models/__fixtures__/negotiableQuoteModel.d.ts +8 -0
  274. package/data/models/__fixtures__/negotiableQuoteTemplateModel.d.ts +4 -0
  275. package/data/models/__fixtures__/negotiableQuoteTemplatesListModel.d.ts +5 -0
  276. package/data/models/__fixtures__/negotiableQuotesListModel.d.ts +5 -0
  277. package/data/models/__fixtures__/storeConfigModel.d.ts +5 -0
  278. package/data/models/index.d.ts +11 -1
  279. package/data/models/negotiable-quote-model.d.ts +262 -27
  280. package/data/models/negotiable-quote-template-model.d.ts +147 -0
  281. package/data/models/store-config-model.d.ts +27 -0
  282. package/data/transforms/__fixtures__/negotiableQuoteData.d.ts +665 -2
  283. package/data/transforms/__fixtures__/negotiableQuoteTemplateData.d.ts +1610 -0
  284. package/data/transforms/__fixtures__/storeConfigData.d.ts +31 -0
  285. package/data/transforms/index.d.ts +6 -13
  286. package/data/transforms/transform-quote-template.d.ts +5 -0
  287. package/data/transforms/transform-quote.d.ts +13 -2
  288. package/data/transforms/transform-store-config.d.ts +4 -0
  289. package/hooks/useQuoteSummaryData.d.ts +10 -0
  290. package/i18n/en_US.json.d.ts +360 -1
  291. package/lib/configurationTransformers.d.ts +27 -0
  292. package/lib/itemFormatters.d.ts +47 -0
  293. package/lib/priceCalculators.d.ts +41 -0
  294. package/lib/state.d.ts +6 -0
  295. package/package.json +1 -1
  296. package/render.js +6 -2
  297. package/render.js.map +1 -1
  298. package/types/state.types.d.ts +13 -0
  299. package/utils/dateUtils.d.ts +26 -0
  300. package/utils/fileUtils.d.ts +46 -0
  301. package/utils/mapAuthPermissions.d.ts +39 -0
  302. package/api/getCustomerData/graphql/CustomerQuery.d.ts +0 -2
  303. package/api/graphql/CustomerFragment.d.ts +0 -2
  304. package/data/models/__fixtures__/customerModel.d.ts +0 -4
  305. package/data/transforms/transform-customer.d.ts +0 -15
@@ -1,4 +1,4 @@
1
1
  /*! Copyright 2025 Adobe
2
2
  All Rights Reserved. */
3
- import{jsxs as P,jsx as a}from"@dropins/tools/preact-jsx-runtime.js";import*as c from"@dropins/tools/preact-compat.js";import{useState as g,useEffect as R,useCallback as oe}from"@dropins/tools/preact-compat.js";import{classes as u,VComponent as h,Slot as q,getFormErrors as j,getFormValues as ne}from"@dropins/tools/lib.js";import{TextArea as ie,Field as ce,Input as se,InputFile as ue,Button as z,InLineAlert as me}from"@dropins/tools/components.js";import{events as I}from"@dropins/tools/event-bus.js";import{u as de,r as w}from"../chunks/requestNegotiableQuote.js";import{useText as le}from"@dropins/tools/i18n.js";import"@dropins/tools/fetch-graphql.js";const fe=i=>c.createElement("svg",{id:"Icon_Add_Base","data-name":"Icon \\u2013 Add \\u2013 Base",xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",...i},c.createElement("g",{id:"Large"},c.createElement("rect",{id:"Placement_area","data-name":"Placement area",width:24,height:24,fill:"#fff",opacity:0}),c.createElement("g",{id:"Add_icon","data-name":"Add icon",transform:"translate(9.734 9.737)"},c.createElement("line",{vectorEffect:"non-scaling-stroke",id:"Line_579","data-name":"Line 579",y2:12.7,transform:"translate(2.216 -4.087)",fill:"none",stroke:"currentColor"}),c.createElement("line",{vectorEffect:"non-scaling-stroke",id:"Line_580","data-name":"Line 580",x2:12.7,transform:"translate(-4.079 2.263)",fill:"none",stroke:"currentColor"})))),ge=i=>c.createElement("svg",{width:24,height:24,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",...i},c.createElement("path",{vectorEffect:"non-scaling-stroke",d:"M0.75 12C0.75 5.78421 5.78421 0.75 12 0.75C18.2158 0.75 23.25 5.78421 23.25 12C23.25 18.2158 18.2158 23.25 12 23.25C5.78421 23.25 0.75 18.2158 0.75 12Z",stroke:"currentColor"}),c.createElement("path",{vectorEffect:"non-scaling-stroke",d:"M6.75 12.762L10.2385 15.75L17.25 9",stroke:"currentColor"})),he=i=>c.createElement("svg",{width:24,height:24,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",...i},c.createElement("path",{vectorEffect:"non-scaling-stroke",fillRule:"evenodd",clipRule:"evenodd",d:"M1 20.8953L12.1922 1.5L23.395 20.8953H1ZM13.0278 13.9638L13.25 10.0377V9H11.25V10.0377L11.4722 13.9638H13.0278ZM11.2994 16V17.7509H13.2253V16H11.2994Z",fill:"currentColor"})),qe=({className:i,title:C,banner:e,commentField:_,quoteNameField:F,attachFile:N,requestButton:s,saveButton:d,onSubmit:E,...x})=>P("form",{...x,className:u(["request-negotiable-quote-form",i]),onSubmit:E,children:[e&&a(h,{node:e,className:u(["request-negotiable-quote-form__banner"])}),C&&a(h,{node:C,className:u(["request-negotiable-quote-form__title"])}),_&&a(h,{node:_,className:u(["request-negotiable-quote-form__comment-field"])}),F&&a(h,{node:F,className:u(["request-negotiable-quote-form__quote-name-field"])}),N&&a(h,{node:N,className:u(["request-negotiable-quote-form__attach-file-field"])}),P("div",{className:u(["request-negotiable-quote-form__actions"]),children:[s&&a(h,{node:s,className:u(["request-negotiable-quote-form__request-button"])}),d&&a(h,{node:d,className:u(["request-negotiable-quote-form__save-button"])})]})]}),Qe=({cartId:i,enableFileUpload:C=!0,slots:e,onRequestNegotiableQuote:_,onSaveNegotiableQuote:F,onAttachFiles:N,onSubmitErrors:s,onError:d,className:E})=>{const[x,Z]=g(void 0),[A,T]=g(void 0),[K,O]=g([]),[b,v]=g(void 0),[m,l]=g({}),[y,W]=g(void 0),[n,f]=g(!1),o=le({title:"NegotiableQuote.Request.title",comment:"NegotiableQuote.Request.comment",commentError:"NegotiableQuote.Request.commentError",quoteName:"NegotiableQuote.Request.quoteName",quoteNameError:"NegotiableQuote.Request.quoteNameError",attachmentsError:"NegotiableQuote.Request.attachmentsError",requestCta:"NegotiableQuote.Request.requestCta",saveDraftCta:"NegotiableQuote.Request.saveDraftCta",errorHeader:"NegotiableQuote.Request.error.header",unauthenticated:"NegotiableQuote.Request.error.unauthenticated",unauthorized:"NegotiableQuote.Request.error.unauthorized",missingCart:"NegotiableQuote.Request.error.missingCart",successHeader:"NegotiableQuote.Request.success.header",submitSuccess:"NegotiableQuote.Request.success.submitted",draftSuccess:"NegotiableQuote.Request.success.draftSaved"});R(()=>{const t=I.on("quote-management/permissions",r=>{v(void 0),r.requestQuote||(v(o.unauthorized),f(!0))},{eager:!0});return()=>t==null?void 0:t.off()},[o.unauthorized]),R(()=>{const t=I.on("authenticated",r=>{v(void 0),r||(v(o.unauthenticated),f(!0))},{eager:!0});return()=>t==null?void 0:t.off()},[o.unauthenticated]),R(()=>{i||(v(o.missingCart),f(!0))},[i,o.missingCart]),R(()=>{b&&(d==null||d({error:b,isFormDisabled:n,setIsFormDisabled:f}))},[b,d,n]);const H=oe(async t=>{if(t!=null&&t.length){if(l(r=>({...r,attachments:""})),N){try{await N(t)}catch{l(r=>({...r,attachments:o.attachmentsError}))}return}try{const r=await Promise.all(t.map(de));O(r.map(({key:p})=>({key:p})))}catch{l(r=>({...r,attachments:o.attachmentsError}))}}},[N,o]),$=()=>{let t,r;if(y?(r={name:"SuccessBanner",slot:e==null?void 0:e.SuccessBanner,context:{message:y},"data-testid":"form-success-banner"},t={type:"success",variant:"primary",icon:a(ge,{}),heading:o.successHeader,description:y,className:"request-negotiable-quote-form__success-banner"}):b&&(r={name:"ErrorBanner",slot:e==null?void 0:e.ErrorBanner,context:{message:b},"data-testid":"form-error-banner"},t={type:"error",variant:"primary",icon:a(he,{}),heading:o.errorHeader,description:b,className:"request-negotiable-quote-form__error-banner"}),r&&t)return a(q,{...r,children:a(me,{...t})})},D=t=>{l({});const r=t.target.closest("form"),p=j(r);Object.keys(p).length>0&&(l(p),s==null||s(p))},G=t=>{var V;t.preventDefault(),f(!0);const r=t.target,M={...j(r),...m};if(Object.keys(M).length>0){s==null||s(M);return}const B=t.submitter,Q=ne(r);Z(Q.comment),T(Q.quoteName);const S=((V=B==null?void 0:B.dataset)==null?void 0:V.draft)==="true"||!1,ae={cartId:i,quoteName:Q.quoteName,comment:Q.comment,attachments:C?K:void 0,isDraft:S};let k,L;S?(k=F??w,L=o.draftSuccess):(k=_??w,L=o.submitSuccess),k(ae).then(()=>{W(L)}).catch(re=>{v(re.message)})},J=a(q,{name:"Title",slot:e==null?void 0:e.Title,context:{text:o.title},children:a("span",{"data-testid":"form-title",children:o.title})}),X=a(q,{name:"CommentField",slot:e==null?void 0:e.CommentField,context:{value:x,required:!0,errorMessage:m.comment,setFormErrors:l,isFormDisabled:n},children:a(ie,{name:"comment",value:x,label:o.comment,required:!0,autoComplete:"off","data-testid":"form-comment-field",errorMessage:m.comment,disabled:n})}),Y=a(q,{name:"QuoteNameField",slot:e==null?void 0:e.QuoteNameField,context:{value:A,required:!0,errorMessage:m.quoteName,setFormErrors:l,isFormDisabled:n},children:a(ce,{error:m.quoteName,disabled:n,children:a(se,{value:A,name:"quoteName",floatingLabel:o.quoteName,required:!0,autoComplete:"off","data-testid":"form-quote-name-field"})})}),U=C?a(q,{name:"AttachFileField",slot:e==null?void 0:e.AttachFileField,context:{onChange:H,formErrors:m,isFormDisabled:n},children:a(ue,{onChange:t=>{const r=Array.from(t.target.files);r.length>0&&H(r)},icon:a(fe,{}),disabled:n,"data-testid":"form-attach-file-field"})}):void 0,ee=a(q,{name:"RequestButton",slot:e==null?void 0:e.RequestButton,context:{requestNegotiableQuote:w,formErrors:m,isFormDisabled:n,setIsFormDisabled:f},children:a(z,{type:"submit","data-testid":"form-request-button",onClick:D,disabled:n,children:o.requestCta})}),te=a(q,{name:"SaveDraftButton",slot:e==null?void 0:e.SaveDraftButton,context:{requestNegotiableQuote:w,formErrors:m,isFormDisabled:n,setIsFormDisabled:f},children:a(z,{type:"submit","data-draft":"true",variant:"secondary","data-testid":"form-save-draft-button",onClick:D,disabled:n,children:o.saveDraftCta})});return a(qe,{title:J,banner:$(),commentField:X,quoteNameField:Y,attachFile:U,requestButton:ee,saveButton:te,onSubmit:G,className:E,disabled:n,"data-testid":"form-container"})};export{Qe as RequestNegotiableQuoteForm,Qe as default};
3
+ import{jsxs as K,jsx as a}from"@dropins/tools/preact-jsx-runtime.js";import{useState as x,useEffect as L,useCallback as G}from"@dropins/tools/preact-compat.js";import{classes as c,VComponent as N,Slot as b,getFormErrors as J,getFormValues as me}from"@dropins/tools/lib.js";import{TextArea as ce,Field as de,Input as le,InputFile as fe,Button as T,InLineAlert as qe}from"@dropins/tools/components.js";/* empty css */import{events as U}from"@dropins/tools/event-bus.js";import{r as H}from"../chunks/requestNegotiableQuote.js";import"../chunks/state.js";import{u as ge}from"../chunks/uploadFile.js";import{v as he,f as Ne,a as be,S as pe,A as ve}from"../chunks/AttachedFilesList.js";import"@dropins/tools/preact.js";import"@dropins/tools/preact-hooks.js";/* empty css *//* empty css */import{S as Fe}from"../chunks/CheckWithCircle.js";import{S as Qe}from"../chunks/WarningFilled.js";import{useText as Re}from"@dropins/tools/i18n.js";import"../chunks/NegotiableQuoteFragment.js";import"../chunks/transform-quote.js";import"@dropins/tools/fetch-graphql.js";const xe=({className:S,title:t,banner:B,commentField:D,quoteNameField:C,attachFile:d,attachedFilesList:p,requestButton:z,saveButton:v,onSubmit:_,...g})=>K("form",{...g,className:c(["request-negotiable-quote-form",S]),onSubmit:_,children:[B&&a(N,{node:B,className:c(["request-negotiable-quote-form__banner"])}),t&&a(N,{node:t,className:c(["request-negotiable-quote-form__title"])}),D&&a(N,{node:D,className:c(["request-negotiable-quote-form__comment-field"])}),C&&a(N,{node:C,className:c(["request-negotiable-quote-form__quote-name-field"])}),d&&a(N,{node:d,className:c(["request-negotiable-quote-form__attach-file-field"])}),p&&a(N,{node:p,className:c(["request-negotiable-quote-form__attached-files-list"])}),K("div",{className:c(["request-negotiable-quote-form__actions"]),children:[z&&a(N,{node:z,className:c(["request-negotiable-quote-form__request-button"])}),v&&a(N,{node:v,className:c(["request-negotiable-quote-form__save-button"])})]})]}),We=({cartId:S,slots:t,onRequestNegotiableQuote:B,onSaveNegotiableQuote:D,onAttachFiles:C,onSubmitErrors:d,onError:p,className:z,maxFiles:v,maxFileSize:_,acceptedFileTypes:g})=>{const[w,X]=x(void 0),[P,Y]=x(void 0),[F,E]=x([]),[y,k]=x(void 0),[h,u]=x({}),[j,Z]=x(void 0),[i,l]=x(!1),n=Re({title:"NegotiableQuote.Request.title",comment:"NegotiableQuote.Request.comment",commentError:"NegotiableQuote.Request.commentError",quoteName:"NegotiableQuote.Request.quoteName",quoteNameError:"NegotiableQuote.Request.quoteNameError",attachmentsError:"NegotiableQuote.Request.attachmentsError",maxFilesExceeded:"NegotiableQuote.Request.maxFilesExceeded",maxFileSizeExceeded:"NegotiableQuote.Request.maxFileSizeExceeded",invalidFileType:"NegotiableQuote.Request.invalidFileType",requestCta:"NegotiableQuote.Request.requestCta",saveDraftCta:"NegotiableQuote.Request.saveDraftCta",errorHeader:"NegotiableQuote.Request.error.header",unauthenticated:"NegotiableQuote.Request.error.unauthenticated",unauthorized:"NegotiableQuote.Request.error.unauthorized",missingCart:"NegotiableQuote.Request.error.missingCart",successHeader:"NegotiableQuote.Request.success.header",submitSuccess:"NegotiableQuote.Request.success.submitted",draftSuccess:"NegotiableQuote.Request.success.draftSaved"});L(()=>{const e=U.on("quote-management/permissions",o=>{k(void 0),o.requestQuote?l(!1):(k(n.unauthorized),l(!0))},{eager:!0});return()=>e==null?void 0:e.off()},[n.unauthorized]),L(()=>{const e=U.on("authenticated",o=>{k(void 0),o?l(!1):(k(n.unauthenticated),l(!0))},{eager:!0});return()=>e==null?void 0:e.off()},[n.unauthenticated]),L(()=>{S||(k(n.missingCart),l(!0))},[S,n.missingCart]),L(()=>{y&&(p==null||p({error:y,isFormDisabled:i,setIsFormDisabled:l}))},[y,p,i]);const V=G(async e=>{var s;if(!(e!=null&&e.length))return;if(v&&F.length+e.length>v){u(r=>({...r,attachments:n.maxFilesExceeded.replace("{maxFiles}",String(v))}));return}for(const r of e){if(_&&!he(r.size,_)){u(m=>({...m,attachments:n.maxFileSizeExceeded.replace("{maxSize}",Ne(_))}));return}if(g&&!be(r.type,g)){u(m=>({...m,attachments:n.invalidFileType}));return}}if(u(r=>{const{attachments:m,...f}=r;return f}),C){(s=C(e))==null||s.catch(()=>{u(r=>({...r,attachments:n.attachmentsError}))});return}const o=e.map(r=>({key:`temp-${Date.now()}-${Math.random()}-${r.name}`,name:r.name,size:r.size,status:"uploading"}));E(r=>[...r,...o]);for(let r=0;r<e.length;r++){const m=e[r],f=o[r].key;try{const Q=await ge(m);E(R=>R.map(q=>q.key===f?{...q,key:Q.key,status:"success"}:q))}catch(Q){u(R=>({...R,attachments:Q.message})),E(R=>R.map(q=>q.key===f?{...q,status:"error",error:Q.message}:q))}}},[C,n,v,_,g,F]),I=G(e=>{E(o=>o.filter(s=>s.key!==e))},[]),ee=()=>{let e,o;if(j?(o={name:"SuccessBanner",slot:t==null?void 0:t.SuccessBanner,context:{message:j},"data-testid":"form-success-banner"},e={type:"success",variant:"primary",icon:a(Fe,{}),heading:n.successHeader,description:j,className:"request-negotiable-quote-form__success-banner"}):y&&(o={name:"ErrorBanner",slot:t==null?void 0:t.ErrorBanner,context:{message:y},"data-testid":"form-error-banner"},e={type:"error",variant:"primary",icon:a(Qe,{}),heading:n.errorHeader,description:y,className:"request-negotiable-quote-form__error-banner"}),o&&e)return a(b,{...o,children:a(qe,{...e})})},O=e=>{u({});const o=e.target.closest("form"),s=J(o);Object.keys(s).length>0&&(u(s),d==null||d(s))},te=e=>{var W;e.preventDefault(),l(!0);const o=e.target,r={...J(o),...h};if(Object.keys(r).length>0){d==null||d(r);return}const m=e.submitter,f=me(o);X(f.comment),Y(f.quoteName);const Q=((W=m==null?void 0:m.dataset)==null?void 0:W.draft)==="true"||!1,R=F.filter(A=>A.status==="success").map(A=>({key:A.key})),q={cartId:S,quoteName:f.quoteName,comment:f.comment,attachments:R,isDraft:Q};let M,$;Q?(M=D??H,$=n.draftSuccess):(M=B??H,$=n.submitSuccess),M(q).then(()=>{Z($)}).catch(A=>{k(A.message)})},ae=a(b,{name:"Title",slot:t==null?void 0:t.Title,context:{text:n.title},children:a("span",{"data-testid":"form-title",children:n.title})}),re=a(b,{name:"CommentField",slot:t==null?void 0:t.CommentField,context:{value:w,required:!0,errorMessage:h.comment,setFormErrors:u,isFormDisabled:i},children:a(ce,{name:"comment",value:w,label:n.comment,required:!0,autoComplete:"off","data-testid":"form-comment-field",errorMessage:h.comment,disabled:i})}),oe=a(b,{name:"QuoteNameField",slot:t==null?void 0:t.QuoteNameField,context:{value:P,required:!0,errorMessage:h.quoteName,setFormErrors:u,isFormDisabled:i},children:a(de,{error:h.quoteName,disabled:i,children:a(le,{value:P,name:"quoteName",floatingLabel:n.quoteName,required:!0,autoComplete:"off","data-testid":"form-quote-name-field"})})}),ne=a(b,{name:"AttachFileField",slot:t==null?void 0:t.AttachFileField,context:{onChange:V,formErrors:h,isFormDisabled:i,attachedFiles:F},children:a(fe,{multiple:!0,onChange:e=>{const o=e.target,s=o==null?void 0:o.files,r=s?Array.from(s):[];r.length>0&&V(r)},icon:a(pe,{}),disabled:i,"data-testid":"form-attach-file-field",accept:g==null?void 0:g.join(",")})}),ie=F.length>0?a(b,{name:"AttachedFilesList",slot:t==null?void 0:t.AttachedFilesList,context:{files:F,onRemove:I,disabled:i},children:a(ve,{files:F,onRemove:I,disabled:i})}):void 0,se=a(b,{name:"RequestButton",slot:t==null?void 0:t.RequestButton,context:{requestNegotiableQuote:H,formErrors:h,isFormDisabled:i,setIsFormDisabled:l},children:a(T,{type:"submit","data-testid":"form-request-button",onClick:O,disabled:i,children:n.requestCta})}),ue=a(b,{name:"SaveDraftButton",slot:t==null?void 0:t.SaveDraftButton,context:{requestNegotiableQuote:H,formErrors:h,isFormDisabled:i,setIsFormDisabled:l},children:a(T,{type:"submit","data-draft":"true",variant:"secondary","data-testid":"form-save-draft-button",onClick:O,disabled:i,children:n.saveDraftCta})});return a(xe,{title:ae,banner:ee(),commentField:re,quoteNameField:oe,attachFile:ne,attachedFilesList:ie,requestButton:se,saveButton:ue,onSubmit:te,className:z,disabled:i,"data-testid":"form-container"})};export{We as RequestNegotiableQuoteForm,We as default};
4
4
  //# sourceMappingURL=RequestNegotiableQuoteForm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RequestNegotiableQuoteForm.js","sources":["../../node_modules/@adobe-commerce/elsie/src/icons/Add.svg","../../node_modules/@adobe-commerce/elsie/src/icons/CheckWithCircle.svg","../../node_modules/@adobe-commerce/elsie/src/icons/WarningFilled.svg","/@dropins/storefront-quote-management/src/components/RequestNegotiableQuoteForm/RequestNegotiableQuoteForm.tsx","/@dropins/storefront-quote-management/src/containers/RequestNegotiableQuoteForm/RequestNegotiableQuoteForm.tsx"],"sourcesContent":["import * as React from \"react\";\nconst SvgAdd = (props) => /* @__PURE__ */ React.createElement(\"svg\", { id: \"Icon_Add_Base\", \"data-name\": \"Icon \\\\u2013 Add \\\\u2013 Base\", xmlns: \"http://www.w3.org/2000/svg\", width: 24, height: 24, viewBox: \"0 0 24 24\", ...props }, /* @__PURE__ */ React.createElement(\"g\", { id: \"Large\" }, /* @__PURE__ */ React.createElement(\"rect\", { id: \"Placement_area\", \"data-name\": \"Placement area\", width: 24, height: 24, fill: \"#fff\", opacity: 0 }), /* @__PURE__ */ React.createElement(\"g\", { id: \"Add_icon\", \"data-name\": \"Add icon\", transform: \"translate(9.734 9.737)\" }, /* @__PURE__ */ React.createElement(\"line\", { vectorEffect: \"non-scaling-stroke\", id: \"Line_579\", \"data-name\": \"Line 579\", y2: 12.7, transform: \"translate(2.216 -4.087)\", fill: \"none\", stroke: \"currentColor\" }), /* @__PURE__ */ React.createElement(\"line\", { vectorEffect: \"non-scaling-stroke\", id: \"Line_580\", \"data-name\": \"Line 580\", x2: 12.7, transform: \"translate(-4.079 2.263)\", fill: \"none\", stroke: \"currentColor\" }))));\nexport default SvgAdd;\n","import * as React from \"react\";\nconst SvgCheckWithCircle = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M0.75 12C0.75 5.78421 5.78421 0.75 12 0.75C18.2158 0.75 23.25 5.78421 23.25 12C23.25 18.2158 18.2158 23.25 12 23.25C5.78421 23.25 0.75 18.2158 0.75 12Z\", stroke: \"currentColor\" }), /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M6.75 12.762L10.2385 15.75L17.25 9\", stroke: \"currentColor\" }));\nexport default SvgCheckWithCircle;\n","import * as React from \"react\";\nconst SvgWarningFilled = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", fillRule: \"evenodd\", clipRule: \"evenodd\", d: \"M1 20.8953L12.1922 1.5L23.395 20.8953H1ZM13.0278 13.9638L13.25 10.0377V9H11.25V10.0377L11.4722 13.9638H13.0278ZM11.2994 16V17.7509H13.2253V16H11.2994Z\", fill: \"currentColor\" }));\nexport default SvgWarningFilled;\n","/********************************************************************\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this \n * file in accordance with the terms of the Adobe license agreement \n * accompanying it. \n *******************************************************************/\n\nimport { FunctionComponent, VNode } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\nimport { classes, VComponent } from '@adobe-commerce/elsie/lib';\nimport '@/quote-management/components/RequestNegotiableQuoteForm/RequestNegotiableQuoteForm.css';\n\nexport interface RequestNegotiableQuoteFormProps extends Omit<HTMLAttributes<HTMLFormElement>, 'title'> {\n title: VNode;\n banner?: VNode;\n commentField?: VNode;\n quoteNameField?: VNode;\n attachFile?: VNode;\n requestButton?: VNode;\n saveButton?: VNode;\n onSubmit: (e: Event) => void;\n}\n\nexport const RequestNegotiableQuoteForm: FunctionComponent<RequestNegotiableQuoteFormProps> = ({\n className,\n title,\n banner,\n commentField,\n quoteNameField,\n attachFile,\n requestButton,\n saveButton,\n onSubmit,\n ...props\n}) => {\n return (\n <form {...props} className={classes(['request-negotiable-quote-form', className])} onSubmit={onSubmit}>\n {banner &&\n <VComponent\n node={banner}\n className={classes(['request-negotiable-quote-form__banner'])}\n />\n }\n {title &&\n <VComponent\n node={title}\n className={classes(['request-negotiable-quote-form__title'])}\n />\n }\n {commentField &&\n <VComponent\n node={commentField}\n className={classes(['request-negotiable-quote-form__comment-field'])}\n />\n }\n {quoteNameField &&\n <VComponent\n node={quoteNameField}\n className={classes(['request-negotiable-quote-form__quote-name-field'])}\n />\n }\n {attachFile &&\n <VComponent\n node={attachFile}\n className={classes(['request-negotiable-quote-form__attach-file-field'])}\n />\n }\n <div className={classes(['request-negotiable-quote-form__actions'])}>\n {requestButton &&\n <VComponent\n node={requestButton}\n className={classes(['request-negotiable-quote-form__request-button'])}\n />\n }\n {saveButton &&\n <VComponent\n node={saveButton}\n className={classes(['request-negotiable-quote-form__save-button'])}\n />\n }\n </div>\n </form>\n );\n};\n","/********************************************************************\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this \n * file in accordance with the terms of the Adobe license agreement \n * accompanying it. \n *******************************************************************/\n\nimport { HTMLAttributes, useCallback, useEffect, useState } from 'preact/compat';\nimport { Container, getFormErrors, getFormValues, Slot, SlotProps } from '@adobe-commerce/elsie/lib';\nimport { InLineAlert, Button, InputFile, TextArea, Input, Field, InLineAlertProps } from '@adobe-commerce/elsie/components';\nimport { WarningFilled, CheckWithCircle, Add } from '@adobe-commerce/elsie/icons';\nimport RequestNegotiableQuoteFormComponent from '@/quote-management/components/RequestNegotiableQuoteForm';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { events } from '@adobe-commerce/event-bus';\nimport { requestNegotiableQuote, RequestNegotiableQuoteInput, uploadFile } from '@/quote-management/api';\nimport { state } from '@/quote-management/lib/state';\n\nexport type RequestNegotiableQuoteHandlers = {\n onAttachFiles?: (files: File[]) => Promise<void>;\n onRequestNegotiableQuote?: typeof requestNegotiableQuote;\n onSaveNegotiableQuote?: typeof requestNegotiableQuote;\n onSubmitErrors?: (errors: Record<string, string>) => void;\n onError?: (props: {\n error: string,\n isFormDisabled: boolean,\n setIsFormDisabled: (isFormDisabled: boolean) => void,\n }) => void;\n};\n\nexport interface RequestNegotiableQuoteFormProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'onError'>,\n RequestNegotiableQuoteHandlers {\n cartId: string;\n enableFileUpload?: boolean;\n slots?: {\n ErrorBanner?: SlotProps<{\n message: string,\n }>;\n SuccessBanner?: SlotProps<{\n message: string,\n }>;\n Title?: SlotProps<{\n text: string,\n }>;\n CommentField?: SlotProps<{\n formErrors: Record<string, string>;\n isFormDisabled: boolean;\n setFormErrors: (errors: Record<string, string>) => void;\n }>;\n QuoteNameField?: SlotProps<{\n formErrors: Record<string, string>;\n isFormDisabled: boolean;\n setFormErrors: (errors: Record<string, string>) => void;\n }>;\n AttachFileField?: SlotProps<{\n onChange: (files: File[]) => void, formErrors: Record<string, string>,\n isFormDisabled: boolean\n }>;\n RequestButton?: SlotProps<{\n requestNegotiableQuote: typeof requestNegotiableQuote;\n formErrors: Record<string, string>;\n isFormDisabled: boolean;\n setIsFormDisabled: (isFormDisabled: boolean) => void;\n }>;\n SaveDraftButton?: SlotProps<{\n requestNegotiableQuote: typeof requestNegotiableQuote;\n formErrors: Record<string, string>;\n isFormDisabled: boolean;\n setIsFormDisabled: (isFormDisabled: boolean) => void;\n }>;\n };\n}\n\nexport const RequestNegotiableQuoteForm: Container<RequestNegotiableQuoteFormProps> = ({\n cartId,\n enableFileUpload = true,\n slots,\n onRequestNegotiableQuote,\n onSaveNegotiableQuote,\n onAttachFiles,\n onSubmitErrors,\n onError,\n className,\n}) => {\n const [comment, setComment] = useState<string | undefined>(undefined);\n const [quoteName, setQuoteName] = useState<string | undefined>(undefined);\n const [attachmentKeys, setAttachmentKeys] = useState<{ key: string }[]>([]);\n const [error, setError] = useState<string | undefined>(undefined);\n const [formErrors, setFormErrors] = useState<Record<string, string>>({});\n const [success, setSuccess] = useState<string | undefined>(undefined);\n const [isFormDisabled, setIsFormDisabled] = useState<boolean>(false);\n\n const dictionary = useText({\n title: 'NegotiableQuote.Request.title',\n comment: 'NegotiableQuote.Request.comment',\n commentError: 'NegotiableQuote.Request.commentError',\n quoteName: 'NegotiableQuote.Request.quoteName',\n quoteNameError: 'NegotiableQuote.Request.quoteNameError',\n attachmentsError: 'NegotiableQuote.Request.attachmentsError',\n requestCta: 'NegotiableQuote.Request.requestCta',\n saveDraftCta: 'NegotiableQuote.Request.saveDraftCta',\n errorHeader: 'NegotiableQuote.Request.error.header',\n unauthenticated: 'NegotiableQuote.Request.error.unauthenticated',\n unauthorized: 'NegotiableQuote.Request.error.unauthorized',\n missingCart: 'NegotiableQuote.Request.error.missingCart',\n successHeader: 'NegotiableQuote.Request.success.header',\n submitSuccess: 'NegotiableQuote.Request.success.submitted',\n draftSuccess: 'NegotiableQuote.Request.success.draftSaved',\n });\n\n useEffect(() => {\n const permissionsEvent = events.on(\n 'quote-management/permissions',\n (permissions: typeof state.permissions) => {\n setError(undefined);\n if (!permissions.requestQuote) {\n setError(dictionary.unauthorized);\n setIsFormDisabled(true);\n }\n },\n { eager: true }\n );\n return () => permissionsEvent?.off();\n }, [dictionary.unauthorized]);\n\n useEffect(() => {\n const authenticatedEvent = events.on(\n 'authenticated',\n (authenticated: boolean) => {\n setError(undefined);\n if (!authenticated) {\n setError(dictionary.unauthenticated);\n setIsFormDisabled(true);\n }\n },\n { eager: true }\n );\n return () => authenticatedEvent?.off();\n }, [dictionary.unauthenticated]);\n\n useEffect(() => {\n if (!cartId) {\n setError(dictionary.missingCart);\n setIsFormDisabled(true);\n }\n }, [cartId, dictionary.missingCart]);\n\n useEffect(() => {\n if (error) {\n onError?.({ error, isFormDisabled, setIsFormDisabled });\n }\n }, [error, onError, isFormDisabled]);\n\n const handleAttachFiles = useCallback(async (files: File[]) => {\n /* istanbul ignore next: defensive guard; */\n if (!files?.length) return;\n\n setFormErrors(prev => ({ ...prev, attachments: '' }));\n\n if (onAttachFiles) {\n try {\n await onAttachFiles(files);\n } catch {\n setFormErrors(prev => ({ ...prev, attachments: dictionary.attachmentsError }));\n }\n return;\n }\n\n try {\n const uploaded = await Promise.all(files.map(uploadFile));\n setAttachmentKeys(uploaded.map(({ key }) => ({ key })));\n } catch {\n setFormErrors(prev => ({ ...prev, attachments: dictionary.attachmentsError }));\n }\n }, [onAttachFiles, dictionary]);\n\n /*\n * This function is used to get the banner node.\n * It can be used to render a success or error banner depending on the success or error state.\n */\n const getBannerNode = () => {\n let inlineAlertProps: InLineAlertProps | undefined;\n let slotProps: any | undefined;\n\n if (success) {\n slotProps = {\n name: 'SuccessBanner',\n slot: slots?.SuccessBanner,\n context: {\n message: success,\n },\n 'data-testid': 'form-success-banner',\n };\n inlineAlertProps = {\n type: 'success',\n variant: 'primary',\n icon: <CheckWithCircle />,\n heading: dictionary.successHeader,\n description: success,\n className: 'request-negotiable-quote-form__success-banner',\n };\n }\n else if (error) {\n slotProps = {\n name: 'ErrorBanner',\n slot: slots?.ErrorBanner,\n context: {\n message: error,\n },\n 'data-testid': 'form-error-banner',\n };\n inlineAlertProps = {\n type: 'error',\n variant: 'primary',\n icon: <WarningFilled />,\n heading: dictionary.errorHeader,\n description: error,\n className: 'request-negotiable-quote-form__error-banner',\n };\n }\n\n if (slotProps && inlineAlertProps) {\n return <Slot {...slotProps}>\n <InLineAlert {...inlineAlertProps} />\n </Slot>;\n }\n\n return undefined;\n }\n\n /*\n * This function is used to validate the parent form of the button that was clicked.\n */\n const validateParentForm = (e: Event) => {\n setFormErrors({});\n const closestForm = (e.target as HTMLElement).closest('form') as HTMLFormElement;\n const formErrors = getFormErrors(closestForm);\n if (Object.keys(formErrors).length > 0) {\n setFormErrors(formErrors);\n onSubmitErrors?.(formErrors);\n }\n };\n\n const formSubmitHandler = (e: Event) => {\n e.preventDefault();\n setIsFormDisabled(true);\n\n const form = (e.target as HTMLFormElement);\n\n const currentFormErrors = getFormErrors(form);\n\n const mergedFormErrors = { ...currentFormErrors, ...formErrors };\n\n if (Object.keys(mergedFormErrors).length > 0) {\n onSubmitErrors?.(mergedFormErrors)\n return;\n }\n\n // Since we have multiple submit buttons, we need to determine which one was clicked.\n const buttonTarget = (e as SubmitEvent).submitter as HTMLButtonElement;\n\n const formValues = getFormValues(form);\n\n setComment(formValues.comment);\n setQuoteName(formValues.quoteName);\n\n const isDraft = buttonTarget?.dataset?.draft === 'true' || false;\n\n const contextData: RequestNegotiableQuoteInput = {\n cartId: cartId!,\n quoteName: formValues.quoteName,\n comment: formValues.comment,\n attachments: enableFileUpload ? attachmentKeys : undefined,\n isDraft,\n }\n\n let submitHandler;\n let successMessage;\n\n if (isDraft) {\n submitHandler = onSaveNegotiableQuote ?? requestNegotiableQuote;\n successMessage = dictionary.draftSuccess;\n } else {\n submitHandler = onRequestNegotiableQuote ?? requestNegotiableQuote;\n successMessage = dictionary.submitSuccess;\n }\n\n submitHandler(contextData).then(() => {\n setSuccess(successMessage);\n })\n .catch(error => {\n setError(error.message);\n })\n };\n\n const titleNode = (\n <Slot name=\"Title\" slot={slots?.Title} context={{ text: dictionary.title }}>\n <span data-testid=\"form-title\">{dictionary.title}</span>\n </Slot>\n );\n\n const commentFieldNode = (\n <Slot\n name=\"CommentField\"\n slot={slots?.CommentField}\n context={{\n value: comment,\n required: true,\n errorMessage: formErrors.comment,\n setFormErrors,\n isFormDisabled\n } as any}\n >\n <TextArea\n name=\"comment\"\n value={comment}\n label={dictionary.comment}\n required\n autoComplete=\"off\"\n data-testid=\"form-comment-field\"\n errorMessage={formErrors.comment}\n disabled={isFormDisabled}\n />\n </Slot>\n );\n\n const quoteNameFieldNode = (\n <Slot\n name=\"QuoteNameField\"\n slot={slots?.QuoteNameField}\n context={{\n value: quoteName,\n required: true,\n errorMessage: formErrors.quoteName,\n setFormErrors,\n isFormDisabled\n } as any}\n >\n <Field\n error={formErrors.quoteName}\n disabled={isFormDisabled}\n >\n <Input\n value={quoteName}\n name=\"quoteName\"\n floatingLabel={dictionary.quoteName}\n required\n autoComplete=\"off\"\n data-testid=\"form-quote-name-field\"\n />\n </Field>\n </Slot>\n );\n\n const attachFileNode = enableFileUpload ? (\n <Slot\n name=\"AttachFileField\"\n slot={slots?.AttachFileField}\n context={{ onChange: handleAttachFiles, formErrors, isFormDisabled }}\n >\n <InputFile\n onChange={(e: any) => {\n const files = Array.from(((e.target as HTMLInputElement).files!));\n\n if (files.length > 0) {\n handleAttachFiles(files)\n }\n }}\n icon={<Add />}\n disabled={isFormDisabled}\n data-testid=\"form-attach-file-field\"\n />\n </Slot>\n ) : undefined;\n\n const requestButtonNode = (\n <Slot\n name=\"RequestButton\"\n slot={slots?.RequestButton}\n context={\n {\n requestNegotiableQuote,\n formErrors,\n isFormDisabled,\n setIsFormDisabled\n }\n }\n >\n <Button\n type=\"submit\"\n data-testid=\"form-request-button\"\n onClick={validateParentForm}\n disabled={isFormDisabled}\n >\n {dictionary.requestCta}\n </Button>\n </Slot>\n );\n\n const saveButtonNode = (\n <Slot\n name=\"SaveDraftButton\"\n slot={slots?.SaveDraftButton}\n context={\n {\n requestNegotiableQuote,\n formErrors,\n isFormDisabled,\n setIsFormDisabled\n }\n }\n >\n <Button\n type=\"submit\"\n data-draft=\"true\"\n variant=\"secondary\"\n data-testid=\"form-save-draft-button\"\n onClick={validateParentForm}\n disabled={isFormDisabled}\n >\n {dictionary.saveDraftCta}\n </Button>\n </Slot>\n );\n\n return (\n <RequestNegotiableQuoteFormComponent\n title={titleNode}\n banner={getBannerNode()}\n commentField={commentFieldNode}\n quoteNameField={quoteNameFieldNode}\n attachFile={attachFileNode}\n requestButton={requestButtonNode}\n saveButton={saveButtonNode}\n onSubmit={formSubmitHandler}\n className={className}\n disabled={isFormDisabled}\n data-testid=\"form-container\"\n />\n );\n};"],"names":["SvgAdd","props","React","SvgCheckWithCircle","SvgWarningFilled","RequestNegotiableQuoteForm","className","title","banner","commentField","quoteNameField","attachFile","requestButton","saveButton","onSubmit","jsxs","classes","jsx","VComponent","cartId","enableFileUpload","slots","onRequestNegotiableQuote","onSaveNegotiableQuote","onAttachFiles","onSubmitErrors","onError","comment","setComment","useState","quoteName","setQuoteName","attachmentKeys","setAttachmentKeys","error","setError","formErrors","setFormErrors","success","setSuccess","isFormDisabled","setIsFormDisabled","dictionary","useText","useEffect","permissionsEvent","events","permissions","authenticatedEvent","authenticated","handleAttachFiles","useCallback","files","prev","uploaded","uploadFile","key","getBannerNode","inlineAlertProps","slotProps","CheckWithCircle","WarningFilled","Slot","InLineAlert","validateParentForm","e","closestForm","getFormErrors","formSubmitHandler","form","mergedFormErrors","buttonTarget","formValues","getFormValues","isDraft","_a","contextData","submitHandler","successMessage","requestNegotiableQuote","titleNode","commentFieldNode","TextArea","quoteNameFieldNode","Field","Input","attachFileNode","InputFile","Add","requestButtonNode","Button","saveButtonNode","RequestNegotiableQuoteFormComponent"],"mappings":"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","x_google_ignoreList":[0,1,2]}
1
+ {"version":3,"file":"RequestNegotiableQuoteForm.js","sources":["/@dropins/storefront-quote-management/src/components/RequestNegotiableQuoteForm/RequestNegotiableQuoteForm.tsx","/@dropins/storefront-quote-management/src/containers/RequestNegotiableQuoteForm/RequestNegotiableQuoteForm.tsx"],"sourcesContent":["/********************************************************************\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this \n * file in accordance with the terms of the Adobe license agreement \n * accompanying it. \n *******************************************************************/\n\nimport { FunctionComponent, VNode } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\nimport { classes, VComponent } from '@adobe-commerce/elsie/lib';\nimport '@/quote-management/components/RequestNegotiableQuoteForm/RequestNegotiableQuoteForm.css';\n\nexport interface RequestNegotiableQuoteFormProps extends Omit<HTMLAttributes<HTMLFormElement>, 'title'> {\n title: VNode;\n banner?: VNode;\n commentField?: VNode;\n quoteNameField?: VNode;\n attachFile?: VNode;\n attachedFilesList?: VNode;\n requestButton?: VNode;\n saveButton?: VNode;\n onSubmit: (e: Event) => void;\n}\n\nexport const RequestNegotiableQuoteForm: FunctionComponent<RequestNegotiableQuoteFormProps> = ({\n className,\n title,\n banner,\n commentField,\n quoteNameField,\n attachFile,\n attachedFilesList,\n requestButton,\n saveButton,\n onSubmit,\n ...props\n}) => {\n return (\n <form {...props} className={classes(['request-negotiable-quote-form', className])} onSubmit={onSubmit}>\n {banner &&\n <VComponent\n node={banner}\n className={classes(['request-negotiable-quote-form__banner'])}\n />\n }\n {title &&\n <VComponent\n node={title}\n className={classes(['request-negotiable-quote-form__title'])}\n />\n }\n {commentField &&\n <VComponent\n node={commentField}\n className={classes(['request-negotiable-quote-form__comment-field'])}\n />\n }\n {quoteNameField &&\n <VComponent\n node={quoteNameField}\n className={classes(['request-negotiable-quote-form__quote-name-field'])}\n />\n }\n {attachFile &&\n <VComponent\n node={attachFile}\n className={classes(['request-negotiable-quote-form__attach-file-field'])}\n />\n }\n {attachedFilesList &&\n <VComponent\n node={attachedFilesList}\n className={classes(['request-negotiable-quote-form__attached-files-list'])}\n />\n }\n <div className={classes(['request-negotiable-quote-form__actions'])}>\n {requestButton &&\n <VComponent\n node={requestButton}\n className={classes(['request-negotiable-quote-form__request-button'])}\n />\n }\n {saveButton &&\n <VComponent\n node={saveButton}\n className={classes(['request-negotiable-quote-form__save-button'])}\n />\n }\n </div>\n </form>\n );\n};\n","/********************************************************************\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this \n * file in accordance with the terms of the Adobe license agreement \n * accompanying it. \n *******************************************************************/\n\nimport { HTMLAttributes, useCallback, useEffect, useState } from 'preact/compat';\nimport { Container, getFormErrors, getFormValues, Slot, SlotProps } from '@adobe-commerce/elsie/lib';\nimport { InLineAlert, Button, InputFile, TextArea, Input, Field, InLineAlertProps } from '@adobe-commerce/elsie/components';\nimport { WarningFilled, CheckWithCircle, Add } from '@adobe-commerce/elsie/icons';\nimport RequestNegotiableQuoteFormComponent from '@/quote-management/components/RequestNegotiableQuoteForm';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { events } from '@adobe-commerce/event-bus';\nimport { requestNegotiableQuote, RequestNegotiableQuoteInput, uploadFile } from '@/quote-management/api';\nimport { state } from '@/quote-management/lib/state';\nimport { AttachedFilesList, AttachedFile } from '@/quote-management/components';\nimport { formatFileSize, validateFileType, validateFileSize } from '@/quote-management/utils/fileUtils';\n\nexport type RequestNegotiableQuoteHandlers = {\n onAttachFiles?: (files: File[]) => Promise<void>;\n onRequestNegotiableQuote?: typeof requestNegotiableQuote;\n onSaveNegotiableQuote?: typeof requestNegotiableQuote;\n onSubmitErrors?: (errors: Record<string, string>) => void;\n onError?: (props: {\n error: string,\n isFormDisabled: boolean,\n setIsFormDisabled: (isFormDisabled: boolean) => void,\n }) => void;\n};\n\nexport interface RequestNegotiableQuoteFormProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'onError'>,\n RequestNegotiableQuoteHandlers {\n cartId: string;\n maxFiles?: number;\n maxFileSize?: number;\n acceptedFileTypes?: string[];\n slots?: {\n ErrorBanner?: SlotProps<{\n message: string,\n }>;\n SuccessBanner?: SlotProps<{\n message: string,\n }>;\n Title?: SlotProps<{\n text: string,\n }>;\n CommentField?: SlotProps<{\n formErrors: Record<string, string>;\n isFormDisabled: boolean;\n setFormErrors: (errors: Record<string, string>) => void;\n }>;\n QuoteNameField?: SlotProps<{\n formErrors: Record<string, string>;\n isFormDisabled: boolean;\n setFormErrors: (errors: Record<string, string>) => void;\n }>;\n AttachFileField?: SlotProps<{\n onChange: (files: File[]) => void, formErrors: Record<string, string>,\n isFormDisabled: boolean,\n attachedFiles: AttachedFile[]\n }>;\n AttachedFilesList?: SlotProps<{\n files: AttachedFile[];\n onRemove: (key: string) => void;\n disabled?: boolean;\n }>;\n RequestButton?: SlotProps<{\n requestNegotiableQuote: typeof requestNegotiableQuote;\n formErrors: Record<string, string>;\n isFormDisabled: boolean;\n setIsFormDisabled: (isFormDisabled: boolean) => void;\n }>;\n SaveDraftButton?: SlotProps<{\n requestNegotiableQuote: typeof requestNegotiableQuote;\n formErrors: Record<string, string>;\n isFormDisabled: boolean;\n setIsFormDisabled: (isFormDisabled: boolean) => void;\n }>;\n };\n}\n\nexport const RequestNegotiableQuoteForm: Container<RequestNegotiableQuoteFormProps> = ({\n cartId,\n slots,\n onRequestNegotiableQuote,\n onSaveNegotiableQuote,\n onAttachFiles,\n onSubmitErrors,\n onError,\n className,\n maxFiles,\n maxFileSize,\n acceptedFileTypes,\n}) => {\n const [comment, setComment] = useState<string | undefined>(undefined);\n const [quoteName, setQuoteName] = useState<string | undefined>(undefined);\n const [attachedFiles, setAttachedFiles] = useState<AttachedFile[]>([]);\n const [error, setError] = useState<string | undefined>(undefined);\n const [formErrors, setFormErrors] = useState<Record<string, string>>({});\n const [success, setSuccess] = useState<string | undefined>(undefined);\n const [isFormDisabled, setIsFormDisabled] = useState<boolean>(false);\n\n const dictionary = useText({\n title: 'NegotiableQuote.Request.title',\n comment: 'NegotiableQuote.Request.comment',\n commentError: 'NegotiableQuote.Request.commentError',\n quoteName: 'NegotiableQuote.Request.quoteName',\n quoteNameError: 'NegotiableQuote.Request.quoteNameError',\n attachmentsError: 'NegotiableQuote.Request.attachmentsError',\n maxFilesExceeded: 'NegotiableQuote.Request.maxFilesExceeded',\n maxFileSizeExceeded: 'NegotiableQuote.Request.maxFileSizeExceeded',\n invalidFileType: 'NegotiableQuote.Request.invalidFileType',\n requestCta: 'NegotiableQuote.Request.requestCta',\n saveDraftCta: 'NegotiableQuote.Request.saveDraftCta',\n errorHeader: 'NegotiableQuote.Request.error.header',\n unauthenticated: 'NegotiableQuote.Request.error.unauthenticated',\n unauthorized: 'NegotiableQuote.Request.error.unauthorized',\n missingCart: 'NegotiableQuote.Request.error.missingCart',\n successHeader: 'NegotiableQuote.Request.success.header',\n submitSuccess: 'NegotiableQuote.Request.success.submitted',\n draftSuccess: 'NegotiableQuote.Request.success.draftSaved',\n });\n\n useEffect(() => {\n const permissionsEvent = events.on(\n 'quote-management/permissions',\n (permissions: typeof state.permissions) => {\n setError(undefined);\n if (!permissions.requestQuote) {\n setError(dictionary.unauthorized);\n setIsFormDisabled(true);\n }\n else {\n setIsFormDisabled(false);\n }\n },\n { eager: true }\n );\n return () => permissionsEvent?.off();\n }, [dictionary.unauthorized]);\n\n useEffect(() => {\n const authenticatedEvent = events.on(\n 'authenticated',\n (authenticated: boolean) => {\n setError(undefined);\n if (!authenticated) {\n setError(dictionary.unauthenticated);\n setIsFormDisabled(true);\n }\n else {\n setIsFormDisabled(false);\n }\n },\n { eager: true }\n );\n return () => authenticatedEvent?.off();\n }, [dictionary.unauthenticated]);\n\n useEffect(() => {\n if (!cartId) {\n setError(dictionary.missingCart);\n setIsFormDisabled(true);\n }\n }, [cartId, dictionary.missingCart]);\n\n useEffect(() => {\n if (error) {\n onError?.({ error, isFormDisabled, setIsFormDisabled });\n }\n }, [error, onError, isFormDisabled]);\n\n const handleAttachFiles = useCallback(async (files: File[]) => {\n /* istanbul ignore next: defensive guard; */\n if (!files?.length) return;\n\n // Check maxFiles limit\n if (maxFiles && attachedFiles.length + files.length > maxFiles) {\n setFormErrors(prev => ({\n ...prev,\n attachments: dictionary.maxFilesExceeded.replace('{maxFiles}', String(maxFiles))\n }));\n return;\n }\n\n // Validate file types and sizes before uploading\n for (const file of files) {\n if (maxFileSize && !validateFileSize(file.size, maxFileSize)) {\n setFormErrors(prev => ({\n ...prev,\n attachments: dictionary.maxFileSizeExceeded.replace('{maxSize}', formatFileSize(maxFileSize))\n }));\n return;\n }\n\n if (acceptedFileTypes && !validateFileType(file.type, acceptedFileTypes)) {\n setFormErrors(prev => ({ ...prev, attachments: dictionary.invalidFileType }));\n return;\n }\n }\n\n // Set form errors without attachments key\n setFormErrors(prev => { \n // Disable eslint rule for unused attachments key\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { attachments, ...rest } = prev;\n return rest;\n });\n\n\n if (onAttachFiles) {\n onAttachFiles(files)?.catch(() => {\n setFormErrors(prev => ({ ...prev, attachments: dictionary.attachmentsError }));\n });\n return;\n }\n\n // Add files with 'uploading' status\n const newFiles: AttachedFile[] = files.map(file => ({\n key: `temp-${Date.now()}-${Math.random()}-${file.name}`,\n name: file.name,\n size: file.size,\n status: 'uploading',\n }));\n\n setAttachedFiles(prev => [...prev, ...newFiles]);\n\n // Upload each file and update its status\n for (let i = 0; i < files.length; i++) {\n const file = files[i];\n const tempKey = newFiles[i].key;\n\n try {\n const result = await uploadFile(file);\n setAttachedFiles(prev => prev.map(f =>\n f.key === tempKey\n ? { ...f, key: result.key, status: 'success' }\n : f\n ));\n } catch (error) {\n setFormErrors(prev => ({ ...prev, attachments: (error as Error).message }));\n setAttachedFiles(prev => prev.map(f =>\n f.key === tempKey\n ? { ...f, status: 'error', error: (error as Error).message }\n : f\n ));\n }\n }\n }, [onAttachFiles, dictionary, maxFiles, maxFileSize, acceptedFileTypes, attachedFiles]);\n\n const handleRemoveFile = useCallback((key: string) => {\n setAttachedFiles(prev => prev.filter(f => f.key !== key));\n }, []);\n\n /*\n * This function is used to get the banner node.\n * It can be used to render a success or error banner depending on the success or error state.\n */\n const getBannerNode = () => {\n let inlineAlertProps: InLineAlertProps | undefined;\n let slotProps: any | undefined;\n\n if (success) {\n slotProps = {\n name: 'SuccessBanner',\n slot: slots?.SuccessBanner,\n context: {\n message: success,\n },\n 'data-testid': 'form-success-banner',\n };\n inlineAlertProps = {\n type: 'success',\n variant: 'primary',\n icon: <CheckWithCircle />,\n heading: dictionary.successHeader,\n description: success,\n className: 'request-negotiable-quote-form__success-banner',\n };\n }\n else if (error) {\n slotProps = {\n name: 'ErrorBanner',\n slot: slots?.ErrorBanner,\n context: {\n message: error,\n },\n 'data-testid': 'form-error-banner',\n };\n inlineAlertProps = {\n type: 'error',\n variant: 'primary',\n icon: <WarningFilled />,\n heading: dictionary.errorHeader,\n description: error,\n className: 'request-negotiable-quote-form__error-banner',\n };\n }\n\n if (slotProps && inlineAlertProps) {\n return <Slot {...slotProps}>\n <InLineAlert {...inlineAlertProps} />\n </Slot>;\n }\n\n return undefined;\n }\n\n /*\n * This function is used to validate the parent form of the button that was clicked.\n */\n const validateParentForm = (e: Event) => {\n setFormErrors({});\n const closestForm = (e.target as HTMLElement).closest('form') as HTMLFormElement;\n const formErrors = getFormErrors(closestForm);\n if (Object.keys(formErrors).length > 0) {\n setFormErrors(formErrors);\n onSubmitErrors?.(formErrors);\n }\n };\n\n const formSubmitHandler = (e: Event) => {\n e.preventDefault();\n setIsFormDisabled(true);\n\n const form = (e.target as HTMLFormElement);\n\n const currentFormErrors = getFormErrors(form);\n\n const mergedFormErrors = { ...currentFormErrors, ...formErrors };\n\n if (Object.keys(mergedFormErrors).length > 0) {\n onSubmitErrors?.(mergedFormErrors)\n return;\n }\n\n // Since we have multiple submit buttons, we need to determine which one was clicked.\n const buttonTarget = (e as SubmitEvent).submitter as HTMLButtonElement;\n\n const formValues = getFormValues(form);\n\n setComment(formValues.comment);\n setQuoteName(formValues.quoteName);\n\n const isDraft = buttonTarget?.dataset?.draft === 'true' || false;\n\n // Only include successfully uploaded files\n const successfulAttachments = attachedFiles\n .filter(f => f.status === 'success')\n .map(f => ({ key: f.key }));\n\n const contextData: RequestNegotiableQuoteInput = {\n cartId: cartId!,\n quoteName: formValues.quoteName,\n comment: formValues.comment,\n attachments: successfulAttachments,\n isDraft,\n }\n\n let submitHandler;\n let successMessage;\n\n if (isDraft) {\n submitHandler = onSaveNegotiableQuote ?? requestNegotiableQuote;\n successMessage = dictionary.draftSuccess;\n } else {\n submitHandler = onRequestNegotiableQuote ?? requestNegotiableQuote;\n successMessage = dictionary.submitSuccess;\n }\n\n submitHandler(contextData).then(() => {\n setSuccess(successMessage);\n })\n .catch(error => {\n setError(error.message);\n })\n };\n\n const titleNode = (\n <Slot name=\"Title\" slot={slots?.Title} context={{ text: dictionary.title }}>\n <span data-testid=\"form-title\">{dictionary.title}</span>\n </Slot>\n );\n\n const commentFieldNode = (\n <Slot\n name=\"CommentField\"\n slot={slots?.CommentField}\n context={{\n value: comment,\n required: true,\n errorMessage: formErrors.comment,\n setFormErrors,\n isFormDisabled\n } as any}\n >\n <TextArea\n name=\"comment\"\n value={comment}\n label={dictionary.comment}\n required\n autoComplete=\"off\"\n data-testid=\"form-comment-field\"\n errorMessage={formErrors.comment}\n disabled={isFormDisabled}\n />\n </Slot>\n );\n\n const quoteNameFieldNode = (\n <Slot\n name=\"QuoteNameField\"\n slot={slots?.QuoteNameField}\n context={{\n value: quoteName,\n required: true,\n errorMessage: formErrors.quoteName,\n setFormErrors,\n isFormDisabled\n } as any}\n >\n <Field\n error={formErrors.quoteName}\n disabled={isFormDisabled}\n >\n <Input\n value={quoteName}\n name=\"quoteName\"\n floatingLabel={dictionary.quoteName}\n required\n autoComplete=\"off\"\n data-testid=\"form-quote-name-field\"\n />\n </Field>\n </Slot>\n );\n\n const attachFileNode = (\n <Slot\n name=\"AttachFileField\"\n slot={slots?.AttachFileField}\n context={{ onChange: handleAttachFiles, formErrors, isFormDisabled, attachedFiles }}\n >\n <InputFile\n multiple\n onChange={(e: Event) => {\n const target = e.target as HTMLInputElement;\n const fileList = target?.files;\n const files = fileList ? Array.from(fileList) : [];\n\n if (files.length > 0) {\n void handleAttachFiles(files);\n }\n }}\n icon={<Add />}\n disabled={isFormDisabled}\n data-testid=\"form-attach-file-field\"\n accept={acceptedFileTypes?.join(',')}\n />\n </Slot>\n );\n\n const attachedFilesListNode = attachedFiles.length > 0 ? (\n <Slot\n name=\"AttachedFilesList\"\n slot={slots?.AttachedFilesList}\n context={{ files: attachedFiles, onRemove: handleRemoveFile, disabled: isFormDisabled }}\n >\n <AttachedFilesList\n files={attachedFiles}\n onRemove={handleRemoveFile}\n disabled={isFormDisabled}\n />\n </Slot>\n ) : undefined;\n\n const requestButtonNode = (\n <Slot\n name=\"RequestButton\"\n slot={slots?.RequestButton}\n context={\n {\n requestNegotiableQuote,\n formErrors,\n isFormDisabled,\n setIsFormDisabled\n }\n }\n >\n <Button\n type=\"submit\"\n data-testid=\"form-request-button\"\n onClick={validateParentForm}\n disabled={isFormDisabled}\n >\n {dictionary.requestCta}\n </Button>\n </Slot>\n );\n\n const saveButtonNode = (\n <Slot\n name=\"SaveDraftButton\"\n slot={slots?.SaveDraftButton}\n context={\n {\n requestNegotiableQuote,\n formErrors,\n isFormDisabled,\n setIsFormDisabled\n }\n }\n >\n <Button\n type=\"submit\"\n data-draft=\"true\"\n variant=\"secondary\"\n data-testid=\"form-save-draft-button\"\n onClick={validateParentForm}\n disabled={isFormDisabled}\n >\n {dictionary.saveDraftCta}\n </Button>\n </Slot>\n );\n\n return (\n <RequestNegotiableQuoteFormComponent\n title={titleNode}\n banner={getBannerNode()}\n commentField={commentFieldNode}\n quoteNameField={quoteNameFieldNode}\n attachFile={attachFileNode}\n attachedFilesList={attachedFilesListNode}\n requestButton={requestButtonNode}\n saveButton={saveButtonNode}\n onSubmit={formSubmitHandler}\n className={className}\n disabled={isFormDisabled}\n data-testid=\"form-container\"\n />\n );\n};\n"],"names":["RequestNegotiableQuoteForm","className","title","banner","commentField","quoteNameField","attachFile","attachedFilesList","requestButton","saveButton","onSubmit","props","jsxs","classes","jsx","VComponent","cartId","slots","onRequestNegotiableQuote","onSaveNegotiableQuote","onAttachFiles","onSubmitErrors","onError","maxFiles","maxFileSize","acceptedFileTypes","comment","setComment","useState","quoteName","setQuoteName","attachedFiles","setAttachedFiles","error","setError","formErrors","setFormErrors","success","setSuccess","isFormDisabled","setIsFormDisabled","dictionary","useText","useEffect","permissionsEvent","events","permissions","authenticatedEvent","authenticated","handleAttachFiles","useCallback","files","prev","file","validateFileSize","formatFileSize","validateFileType","attachments","rest","_a","newFiles","i","tempKey","result","uploadFile","f","handleRemoveFile","key","getBannerNode","inlineAlertProps","slotProps","CheckWithCircle","WarningFilled","Slot","InLineAlert","validateParentForm","closestForm","getFormErrors","formSubmitHandler","form","mergedFormErrors","buttonTarget","formValues","getFormValues","isDraft","successfulAttachments","contextData","submitHandler","successMessage","requestNegotiableQuote","titleNode","commentFieldNode","TextArea","quoteNameFieldNode","Field","Input","attachFileNode","InputFile","target","fileList","Add","attachedFilesListNode","AttachedFilesList","requestButtonNode","Button","saveButtonNode","RequestNegotiableQuoteFormComponent"],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { HTMLAttributes } from 'preact/compat';
2
+ import { Container } from '@dropins/tools/types/elsie/src/lib';
3
+ import { NegotiableQuoteModel } from '../../data/models/negotiable-quote-model';
4
+
5
+ export interface ShippingAddressDisplayProps extends Omit<HTMLAttributes<HTMLDivElement>, 'loading'> {
6
+ quoteData?: NegotiableQuoteModel;
7
+ loading?: boolean;
8
+ }
9
+ export declare const ShippingAddressDisplay: Container<ShippingAddressDisplayProps>;
10
+ //# sourceMappingURL=ShippingAddressDisplay.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 { ShippingAddressDisplay } from './ShippingAddressDisplay';
10
+ export type { ShippingAddressDisplayProps } from './ShippingAddressDisplay';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ export * from './ShippingAddressDisplay/index'
@@ -0,0 +1,4 @@
1
+ /*! Copyright 2025 Adobe
2
+ All Rights Reserved. */
3
+ import{S as d}from"../chunks/ShippingAddressDisplay.js";import"@dropins/tools/preact-jsx-runtime.js";import"@dropins/tools/preact-compat.js";import"@dropins/tools/lib.js";import"@dropins/tools/components.js";import"@dropins/tools/i18n.js";import"@dropins/tools/event-bus.js";export{d as ShippingAddressDisplay};
4
+ //# sourceMappingURL=ShippingAddressDisplay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShippingAddressDisplay.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1,2 +1,24 @@
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
+ *******************************************************************/
1
9
  export * from './RequestNegotiableQuoteForm';
10
+ export * from './ManageNegotiableQuote';
11
+ export * from './ItemsQuoted';
12
+ export * from './OrderSummary';
13
+ export * from './OrderSummaryLine';
14
+ export * from './QuoteCommentsList';
15
+ export * from './QuoteHistoryLog';
16
+ export * from './QuoteSummaryList';
17
+ export * from './QuotesListTable';
18
+ export * from './ShippingAddressDisplay';
19
+ export * from './ManageNegotiableQuoteTemplate';
20
+ export * from './ItemsQuotedTemplate';
21
+ export * from './QuoteTemplateCommentsList';
22
+ export * from './QuoteTemplateHistoryLog';
23
+ export * from './QuoteTemplatesListTable';
2
24
  //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,8 @@
1
+ import { NegotiableQuoteCartItem, NegotiableQuoteModel } from '../negotiable-quote-model';
2
+
3
+ export declare const baseCartItem: NegotiableQuoteCartItem;
4
+ export declare const configurableCartItem: NegotiableQuoteCartItem;
5
+ export declare const bundleCartItem: NegotiableQuoteCartItem;
6
+ export declare const downloadableCartItem: NegotiableQuoteCartItem;
7
+ export declare const base: NegotiableQuoteModel;
8
+ //# sourceMappingURL=negotiableQuoteModel.d.ts.map
@@ -0,0 +1,4 @@
1
+ import { NegotiableQuoteTemplateModel } from '../negotiable-quote-template-model';
2
+
3
+ export declare const base: NegotiableQuoteTemplateModel;
4
+ //# sourceMappingURL=negotiableQuoteTemplateModel.d.ts.map
@@ -0,0 +1,5 @@
1
+ import { NegotiableQuoteTemplatesListModel } from '../negotiable-quote-template-model';
2
+
3
+ export declare const quoteTemplatesListData: NegotiableQuoteTemplatesListModel;
4
+ export declare const emptyQuoteTemplatesListData: NegotiableQuoteTemplatesListModel;
5
+ //# sourceMappingURL=negotiableQuoteTemplatesListModel.d.ts.map
@@ -0,0 +1,5 @@
1
+ import { NegotiableQuotesListModel } from '../negotiable-quote-model';
2
+
3
+ export declare const quotesListData: NegotiableQuotesListModel;
4
+ export declare const emptyQuotesListData: NegotiableQuotesListModel;
5
+ //# sourceMappingURL=negotiableQuotesListModel.d.ts.map
@@ -0,0 +1,5 @@
1
+ import { StoreConfigModel } from '../store-config-model';
2
+
3
+ export declare const mockStoreConfigModel: StoreConfigModel;
4
+ export declare const mockStoreConfigModelWithDefaultValues: StoreConfigModel;
5
+ //# sourceMappingURL=storeConfigModel.d.ts.map
@@ -1,2 +1,12 @@
1
- export * from './customer-model';
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 './negotiable-quote-model';
10
+ export * from './negotiable-quote-template-model';
11
+ export * from './store-config-model';
2
12
  //# sourceMappingURL=index.d.ts.map
@@ -1,51 +1,286 @@
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 interface ShippingAddress {
10
+ /**
11
+ * The unique string identifier of the address
12
+ */
13
+ uid?: string;
14
+ firstname: string;
15
+ lastname: string;
16
+ company?: string;
17
+ street: string[];
18
+ city: string;
19
+ region?: {
20
+ code: string;
21
+ label: string;
22
+ regionId: number;
23
+ };
24
+ postcode: string;
25
+ country: {
26
+ code: string;
27
+ label: string;
28
+ };
29
+ telephone: string;
30
+ }
1
31
  export interface NegotiableQuoteModel {
2
32
  uid: string;
33
+ name: string;
3
34
  createdAt: string;
4
- status: string;
35
+ salesRepName: string;
36
+ expirationDate: string;
37
+ updatedAt: string;
38
+ status: NegotiableQuoteStatus;
39
+ isVirtual: boolean;
5
40
  buyer: {
6
41
  firstname: string;
7
42
  lastname: string;
8
43
  };
9
- comments: {
44
+ templateName?: string;
45
+ totalQuantity: number;
46
+ comments?: {
10
47
  uid: string;
11
48
  createdAt: string;
12
49
  author: {
13
50
  firstname: string;
14
51
  lastname: string;
15
52
  };
53
+ text: string;
16
54
  attachments?: {
17
55
  name: string;
18
56
  url: string;
19
57
  }[];
20
58
  }[];
21
- items: {
22
- product: {
23
- uid: string;
24
- sku: string;
25
- name: string;
26
- priceRange: {
27
- maximumPrice: {
28
- regularPrice: {
29
- value: number;
30
- };
31
- };
32
- };
33
- };
59
+ history?: NegotiableQuoteHistoryEntry[];
60
+ prices: {
61
+ appliedDiscounts?: Discount[];
62
+ appliedTaxes?: Tax[];
63
+ discount?: Currency;
64
+ grandTotal?: Currency;
65
+ grandTotalExcludingTax?: Currency;
66
+ shippingExcludingTax?: Currency;
67
+ shippingIncludingTax?: Currency;
68
+ subtotalExcludingTax?: Currency;
69
+ subtotalIncludingTax?: Currency;
70
+ subtotalWithDiscountExcludingTax?: Currency;
71
+ totalTax?: Currency;
72
+ };
73
+ items: NegotiableQuoteCartItem[];
74
+ shippingAddresses?: ShippingAddress[];
75
+ canCheckout: boolean;
76
+ canSendForReview: boolean;
77
+ lockedForEditing?: boolean;
78
+ canDelete: boolean;
79
+ canClose: boolean;
80
+ canUpdateQuote: boolean;
81
+ readOnly: boolean;
82
+ }
83
+ export interface ConfigurableOption {
84
+ optionLabel: string;
85
+ valueLabel: string;
86
+ }
87
+ export interface BundleOption {
88
+ label: string;
89
+ values: {
90
+ label: string;
34
91
  quantity: number;
35
- prices: {
36
- subtotalExcludingTax: {
37
- value: number;
38
- };
39
- subtotalIncludingTax: {
40
- value: number;
41
- };
42
- subtotalWithDiscountExcludingTax: {
43
- value: number;
44
- };
45
- grandTotal: {
46
- value: number;
92
+ originalPrice: Currency;
93
+ price: Currency;
94
+ }[];
95
+ }
96
+ export interface CustomizableOption {
97
+ type: string;
98
+ label: string;
99
+ values: {
100
+ label: string;
101
+ value: string;
102
+ }[];
103
+ }
104
+ export interface NegotiableQuoteCartItem {
105
+ itemType: string;
106
+ uid: string;
107
+ product: {
108
+ uid: string;
109
+ sku: string;
110
+ name: string;
111
+ templateId?: string;
112
+ templateName?: string;
113
+ priceRange: {
114
+ maximumPrice: {
115
+ regularPrice: Currency;
47
116
  };
48
117
  };
118
+ };
119
+ image: ItemImage;
120
+ links?: ItemLinks;
121
+ discounted: boolean;
122
+ discountedTotal: Currency;
123
+ catalogDiscount: {
124
+ amountOff: number;
125
+ percentOff: number;
126
+ };
127
+ discounts: {
128
+ label: string;
129
+ value: string;
130
+ amount: Currency;
49
131
  }[];
132
+ discountPercentage?: number;
133
+ insufficientQuantity?: boolean;
134
+ outOfStock?: boolean;
135
+ stockStatus: string;
136
+ quantity: number;
137
+ prices: {
138
+ regularPrice: Currency;
139
+ priceIncludingTax: Currency;
140
+ originalItemPrice: Currency;
141
+ originalRowTotal: Currency;
142
+ rowTotal: Currency;
143
+ rowTotalIncludingTax: Currency;
144
+ };
145
+ savingsAmount?: Currency;
146
+ configurableOptions?: ConfigurableOption[];
147
+ bundleOptions?: BundleOption[];
148
+ customizableOptions?: CustomizableOption[];
149
+ noteFromBuyer?: ItemNote[];
150
+ noteFromSeller?: ItemNote[];
151
+ }
152
+ interface ItemImage {
153
+ src: string;
154
+ alt: string;
155
+ }
156
+ interface ItemLinks {
157
+ count: number;
158
+ result: string;
159
+ }
160
+ export interface ItemNote {
161
+ createdAt: string;
162
+ creatorId: number;
163
+ creatorType: number;
164
+ negotiableQuoteItemUid: string;
165
+ note: string;
166
+ noteUid: string;
167
+ }
168
+ export interface Currency {
169
+ value: number;
170
+ currency: string;
171
+ }
172
+ export interface Tax {
173
+ amount: Currency;
174
+ label: string;
175
+ }
176
+ export interface Discount {
177
+ amount: Currency;
178
+ label: string;
179
+ coupon?: Coupon;
180
+ }
181
+ export interface Coupon {
182
+ code: string;
183
+ }
184
+ export interface NegotiableQuoteListEntry {
185
+ uid: string;
186
+ name: string;
187
+ createdAt: string;
188
+ updatedAt: string;
189
+ status: NegotiableQuoteStatus;
190
+ buyer: {
191
+ firstname: string;
192
+ lastname: string;
193
+ };
194
+ templateName: string;
195
+ prices: {
196
+ grandTotal: Currency;
197
+ };
198
+ }
199
+ export interface NegotiableQuotesListModel {
200
+ items: NegotiableQuoteListEntry[];
201
+ pageInfo: {
202
+ currentPage: number;
203
+ pageSize: number;
204
+ totalPages: number;
205
+ };
206
+ totalCount: number;
207
+ paginationInfo?: PaginationInfo;
208
+ sortFields?: {
209
+ default: string;
210
+ options: Array<{
211
+ label: string;
212
+ value: string;
213
+ }>;
214
+ };
215
+ }
216
+ export interface NegotiableQuoteHistoryEntry {
217
+ author: {
218
+ firstname: string;
219
+ lastname: string;
220
+ };
221
+ changeType: NegotiableQuoteHistoryEntryChangeType;
222
+ changes: {
223
+ commentAdded?: {
224
+ comment: string;
225
+ };
226
+ customChanges?: {
227
+ new_value: string;
228
+ old_value: string;
229
+ title: string;
230
+ };
231
+ expiration?: {
232
+ newExpiration: string;
233
+ oldExpiration: string;
234
+ };
235
+ productsRemoved?: {
236
+ productsRemovedFromCatalog: string[];
237
+ productsRemovedFromQuote?: {
238
+ uid: string;
239
+ name: string;
240
+ sku: string;
241
+ quantity: number;
242
+ }[];
243
+ };
244
+ statuses?: {
245
+ changes: {
246
+ newStatus: string;
247
+ oldStatus: string;
248
+ }[];
249
+ };
250
+ total?: {
251
+ newPrice: Currency;
252
+ oldPrice: Currency;
253
+ };
254
+ };
255
+ createdAt: string;
256
+ uid: string;
257
+ }
258
+ export declare enum NegotiableQuoteHistoryEntryChangeType {
259
+ CREATED = "CREATED",
260
+ UPDATED = "UPDATED",
261
+ CLOSED = "CLOSED",
262
+ UPDATED_BY_SYSTEM = "UPDATED_BY_SYSTEM"
263
+ }
264
+ export declare enum NegotiableQuoteStatus {
265
+ NEW = "NEW",
266
+ SUBMITTED = "SUBMITTED",
267
+ PENDING = "PENDING",
268
+ UPDATED = "UPDATED",
269
+ OPEN = "OPEN",
270
+ ORDERED = "ORDERED",
271
+ CLOSED = "CLOSED",
272
+ DECLINED = "DECLINED",
273
+ EXPIRED = "EXPIRED",
274
+ DRAFT = "DRAFT"
275
+ }
276
+ export interface PaginationInfo {
277
+ currentPage: number;
278
+ totalCount: number;
279
+ pageSize: number;
280
+ startItem: number;
281
+ endItem: number;
282
+ totalPages: number;
283
+ pageSizeOptions?: number[];
50
284
  }
285
+ export {};
51
286
  //# sourceMappingURL=negotiable-quote-model.d.ts.map