@dropins/storefront-quote-management 0.0.1-alpha3 → 0.0.1-alpha31

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 (316) 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 +9 -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 +3 -0
  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 +22 -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 +56 -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/LineItemNoteModal.js +4 -0
  106. package/chunks/LineItemNoteModal.js.map +1 -0
  107. package/chunks/NegotiableQuoteFragment.js +391 -0
  108. package/chunks/NegotiableQuoteFragment.js.map +1 -0
  109. package/chunks/NegotiableQuoteTemplateFragment.js +338 -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/RenameQuoteModal.js +4 -0
  126. package/chunks/RenameQuoteModal.js.map +1 -0
  127. package/chunks/ShippingAddressDisplay.js +4 -0
  128. package/chunks/ShippingAddressDisplay.js.map +1 -0
  129. package/chunks/WarningFilled.js +4 -0
  130. package/chunks/WarningFilled.js.map +1 -0
  131. package/chunks/addQuoteTemplateLineItemNote.js +33 -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 +52 -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 +51 -0
  144. package/chunks/openQuoteTemplate.js.map +1 -0
  145. package/chunks/requestNegotiableQuote.js +6 -53
  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 +21 -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 +17 -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/ReferenceDocumentFormModal/ReferenceDocumentFormModal.d.ts +30 -0
  192. package/components/ReferenceDocumentFormModal/index.d.ts +11 -0
  193. package/components/ReferenceDocumentsList/ReferenceDocumentsList.d.ts +18 -0
  194. package/components/ReferenceDocumentsList/index.d.ts +11 -0
  195. package/components/RenameQuoteModal/RenameQuoteModal.d.ts +18 -0
  196. package/components/RenameQuoteModal/index.d.ts +11 -0
  197. package/components/RequestNegotiableQuoteForm/RequestNegotiableQuoteForm.d.ts +1 -0
  198. package/components/ShippingAddressDisplay/ShippingAddressDisplay.d.ts +12 -0
  199. package/components/ShippingAddressDisplay/index.d.ts +11 -0
  200. package/components/TabbedContent/TabbedContent.d.ts +10 -0
  201. package/components/TabbedContent/index.d.ts +11 -0
  202. package/components/index.d.ts +30 -0
  203. package/containers/ItemsQuoted/ItemsQuoted.d.ts +30 -0
  204. package/containers/ItemsQuoted/index.d.ts +11 -0
  205. package/containers/ItemsQuoted.d.ts +3 -0
  206. package/containers/ItemsQuoted.js +4 -0
  207. package/containers/ItemsQuoted.js.map +1 -0
  208. package/containers/ItemsQuotedTemplate/ItemsQuotedTemplate.d.ts +25 -0
  209. package/containers/ItemsQuotedTemplate/index.d.ts +11 -0
  210. package/containers/ItemsQuotedTemplate.d.ts +3 -0
  211. package/containers/ItemsQuotedTemplate.js +4 -0
  212. package/containers/ItemsQuotedTemplate.js.map +1 -0
  213. package/containers/ManageNegotiableQuote/ManageNegotiableQuote.d.ts +90 -0
  214. package/containers/ManageNegotiableQuote/index.d.ts +11 -0
  215. package/containers/ManageNegotiableQuote.d.ts +3 -0
  216. package/containers/ManageNegotiableQuote.js +4 -0
  217. package/containers/ManageNegotiableQuote.js.map +1 -0
  218. package/containers/ManageNegotiableQuoteTemplate/ManageNegotiableQuoteTemplate.d.ts +90 -0
  219. package/containers/ManageNegotiableQuoteTemplate/index.d.ts +11 -0
  220. package/containers/ManageNegotiableQuoteTemplate.d.ts +3 -0
  221. package/containers/ManageNegotiableQuoteTemplate.js +6 -0
  222. package/containers/ManageNegotiableQuoteTemplate.js.map +1 -0
  223. package/containers/OrderSummary/OrderSummary.d.ts +11 -0
  224. package/containers/OrderSummary/index.d.ts +11 -0
  225. package/containers/OrderSummary.d.ts +3 -0
  226. package/containers/OrderSummary.js +4 -0
  227. package/containers/OrderSummary.js.map +1 -0
  228. package/containers/OrderSummaryLine/OrderSummaryLine.d.ts +14 -0
  229. package/containers/OrderSummaryLine/index.d.ts +11 -0
  230. package/containers/OrderSummaryLine.d.ts +3 -0
  231. package/containers/OrderSummaryLine.js +4 -0
  232. package/containers/OrderSummaryLine.js.map +1 -0
  233. package/containers/QuoteCommentsList/QuoteCommentsList.d.ts +9 -0
  234. package/containers/QuoteCommentsList/index.d.ts +11 -0
  235. package/containers/QuoteCommentsList.d.ts +3 -0
  236. package/containers/QuoteCommentsList.js +4 -0
  237. package/containers/QuoteCommentsList.js.map +1 -0
  238. package/containers/QuoteHistoryLog/QuoteHistoryLog.d.ts +9 -0
  239. package/containers/QuoteHistoryLog/index.d.ts +11 -0
  240. package/containers/QuoteHistoryLog.d.ts +3 -0
  241. package/containers/QuoteHistoryLog.js +4 -0
  242. package/containers/QuoteHistoryLog.js.map +1 -0
  243. package/containers/QuoteSummaryList/QuoteSummaryList.d.ts +51 -0
  244. package/containers/QuoteSummaryList/index.d.ts +11 -0
  245. package/containers/QuoteSummaryList.d.ts +3 -0
  246. package/containers/QuoteSummaryList.js +4 -0
  247. package/containers/QuoteSummaryList.js.map +1 -0
  248. package/containers/QuoteTemplateCommentsList/QuoteTemplateCommentsList.d.ts +9 -0
  249. package/containers/QuoteTemplateCommentsList/index.d.ts +11 -0
  250. package/containers/QuoteTemplateCommentsList.d.ts +3 -0
  251. package/containers/QuoteTemplateCommentsList.js +4 -0
  252. package/containers/QuoteTemplateCommentsList.js.map +1 -0
  253. package/containers/QuoteTemplateHistoryLog/QuoteTemplateHistoryLog.d.ts +9 -0
  254. package/containers/QuoteTemplateHistoryLog/index.d.ts +11 -0
  255. package/containers/QuoteTemplateHistoryLog.d.ts +3 -0
  256. package/containers/QuoteTemplateHistoryLog.js +4 -0
  257. package/containers/QuoteTemplateHistoryLog.js.map +1 -0
  258. package/containers/QuoteTemplatesListTable/QuoteTemplatesListTable.d.ts +74 -0
  259. package/containers/QuoteTemplatesListTable/index.d.ts +11 -0
  260. package/containers/QuoteTemplatesListTable.d.ts +3 -0
  261. package/containers/QuoteTemplatesListTable.js +4 -0
  262. package/containers/QuoteTemplatesListTable.js.map +1 -0
  263. package/containers/QuotesListTable/QuotesListTable.d.ts +72 -0
  264. package/containers/QuotesListTable/index.d.ts +11 -0
  265. package/containers/QuotesListTable.d.ts +3 -0
  266. package/containers/QuotesListTable.js +4 -0
  267. package/containers/QuotesListTable.js.map +1 -0
  268. package/containers/RequestNegotiableQuoteForm/RequestNegotiableQuoteForm.d.ts +10 -0
  269. package/containers/RequestNegotiableQuoteForm.js +1 -1
  270. package/containers/RequestNegotiableQuoteForm.js.map +1 -1
  271. package/containers/ShippingAddressDisplay/ShippingAddressDisplay.d.ts +10 -0
  272. package/containers/ShippingAddressDisplay/index.d.ts +11 -0
  273. package/containers/ShippingAddressDisplay.d.ts +1 -0
  274. package/containers/ShippingAddressDisplay.js +4 -0
  275. package/containers/ShippingAddressDisplay.js.map +1 -0
  276. package/containers/index.d.ts +22 -0
  277. package/data/models/__fixtures__/negotiableQuoteModel.d.ts +8 -0
  278. package/data/models/__fixtures__/negotiableQuoteTemplateModel.d.ts +4 -0
  279. package/data/models/__fixtures__/negotiableQuoteTemplatesListModel.d.ts +5 -0
  280. package/data/models/__fixtures__/negotiableQuotesListModel.d.ts +5 -0
  281. package/data/models/__fixtures__/storeConfigModel.d.ts +5 -0
  282. package/data/models/index.d.ts +11 -1
  283. package/data/models/negotiable-quote-model.d.ts +266 -27
  284. package/data/models/negotiable-quote-template-model.d.ts +112 -0
  285. package/data/models/store-config-model.d.ts +27 -0
  286. package/data/transforms/__fixtures__/negotiableQuoteData.d.ts +670 -2
  287. package/data/transforms/__fixtures__/negotiableQuoteTemplateData.d.ts +2151 -0
  288. package/data/transforms/__fixtures__/storeConfigData.d.ts +31 -0
  289. package/data/transforms/index.d.ts +6 -13
  290. package/data/transforms/transform-history.d.ts +15 -0
  291. package/data/transforms/transform-quote-items.d.ts +15 -0
  292. package/data/transforms/transform-quote-template.d.ts +5 -0
  293. package/data/transforms/transform-quote.d.ts +13 -2
  294. package/data/transforms/transform-store-config.d.ts +4 -0
  295. package/hooks/useItemsQuotedTemplate.d.ts +15 -0
  296. package/hooks/useQuoteSummaryData.d.ts +10 -0
  297. package/hooks/useReferenceDocumentLinks.d.ts +34 -0
  298. package/hooks/useRemoveTemplateItems.d.ts +25 -0
  299. package/hooks/useRenameTemplate.d.ts +71 -0
  300. package/hooks/useUpdateTemplateQuantities.d.ts +27 -0
  301. package/i18n/en_US.json.d.ts +457 -1
  302. package/lib/configurationTransformers.d.ts +27 -0
  303. package/lib/itemFormatters.d.ts +47 -0
  304. package/lib/priceCalculators.d.ts +41 -0
  305. package/lib/state.d.ts +6 -0
  306. package/package.json +1 -1
  307. package/render.js +6 -2
  308. package/render.js.map +1 -1
  309. package/types/state.types.d.ts +13 -0
  310. package/utils/dateUtils.d.ts +26 -0
  311. package/utils/fileUtils.d.ts +46 -0
  312. package/utils/mapAuthPermissions.d.ts +39 -0
  313. package/api/getCustomerData/graphql/CustomerQuery.d.ts +0 -2
  314. package/api/graphql/CustomerFragment.d.ts +0 -2
  315. package/data/models/__fixtures__/customerModel.d.ts +0 -4
  316. package/data/transforms/transform-customer.d.ts +0 -15
@@ -0,0 +1,4 @@
1
+ /*! Copyright 2025 Adobe
2
+ All Rights Reserved. */
3
+ import{jsxs as g,jsx as t}from"@dropins/tools/preact-jsx-runtime.js";import{useState as u,useRef as le,useEffect as j,createPortal as se}from"@dropins/tools/preact-compat.js";import{classes as ce,Slot as s}from"@dropins/tools/lib.js";import{Table as ue,IllustratedMessage as de,Picker as me,Pagination as ge,InLineAlert as pe,Button as F,Price as he}from"@dropins/tools/components.js";import{events as $}from"@dropins/tools/event-bus.js";/* empty css */import"@dropins/tools/preact.js";import"@dropins/tools/preact-hooks.js";import{f as D}from"../chunks/dateUtils.js";import{useText as W}from"@dropins/tools/i18n.js";import{C as fe}from"../chunks/ConfirmationModal.js";/* empty css *//* empty css */import{g as H}from"../chunks/transform-quote.js";import"../chunks/state.js";import{g as Qe}from"../chunks/getQuoteTemplates.js";import{g as Te}from"../chunks/generateQuoteFromTemplate.js";import"@dropins/tools/fetch-graphql.js";import"../chunks/transform-quote-template.js";const Me=({rowData:p=[],loading:h=!1,className:L,emptyStateMessage:M,showItemRange:N=!0,itemRangeMessage:d,showPageSizePicker:f=!0,pageSizePickerMessage:m,showPagination:l=!0,paginationMessage:Q,...c})=>{const o=W({name:"QuoteManagement.QuoteTemplatesListTable.name",state:"QuoteManagement.QuoteTemplatesListTable.state",status:"QuoteManagement.QuoteTemplatesListTable.status",validUntil:"QuoteManagement.QuoteTemplatesListTable.validUntil",minQuoteTotal:"QuoteManagement.QuoteTemplatesListTable.minQuoteTotal",ordersPlaced:"QuoteManagement.QuoteTemplatesListTable.ordersPlaced",lastOrdered:"QuoteManagement.QuoteTemplatesListTable.lastOrdered",actions:"QuoteManagement.QuoteTemplatesListTable.actions"}),b=[{key:"name",label:o.name},{key:"state",label:o.state},{key:"status",label:o.status},{key:"validUntil",label:o.validUntil},{key:"minQuoteTotal",label:o.minQuoteTotal},{key:"ordersPlaced",label:o.ordersPlaced},{key:"lastOrdered",label:o.lastOrdered},{key:"actions",label:o.actions}],S=h||p.length>0,T=!h&&p.length===0&&M,P=N&&d,v=f&&m,y=l&&Q,x=P||v||y;return g("div",{...c,className:ce(["quote-management-quote-templates-list-table",L]),children:[S&&t(ue,{columns:b,rowData:p,loading:h,mobileLayout:"none",className:"quote-management-quote-templates-list-table__table"}),T&&t("div",{className:"quote-templates-list-table__empty-state",children:M}),x&&g("div",{className:"quote-templates-list-table__footer",children:[t("div",{className:"quote-templates-list-table__item-range",children:P&&d}),t("div",{className:"quote-templates-list-table__pagination",children:y&&Q}),t("div",{className:"quote-templates-list-table__page-size-picker",children:v&&m})]})]})},Ge=({pageSize:p,showItemRange:h=!0,showPageSizePicker:L=!0,showPagination:M=!0,onViewQuoteTemplate:N,onGenerateQuoteFromTemplate:d,onPageSizeChange:f,onPageChange:m,slots:l,...Q})=>{const c=W({view:"QuoteManagement.QuoteTemplatesListTable.view",generateQuote:"NegotiableQuoteTemplate.Manage.actionButtons.generateQuote",generateQuoteModalMessage:"NegotiableQuoteTemplate.Manage.confirmationModal.generateQuote.message",generateQuoteModalCancel:"NegotiableQuoteTemplate.Manage.confirmationModal.cancel",generateQuoteModalConfirm:"NegotiableQuoteTemplate.Manage.confirmationModal.generateQuote.confirm",generateQuoteModalConfirmLoading:"NegotiableQuoteTemplate.Manage.confirmationModal.generateQuote.confirmLoading",noQuoteTemplatesAccessTitle:"QuoteManagement.permissions.noQuoteTemplatesAccessTitle",noQuoteTemplatesAccessMessage:"QuoteManagement.permissions.noQuoteTemplatesAccessMessage"}),[o,b]=u(null),[S,T]=u(!0),[P,v]=u(!0),[y,x]=u(!1),w=le(!0),[I,z]=u(!1),[O,C]=u(!1),[_,q]=u(null),J=H()[0],[A,K]=u(p||J),[R,U]=u(1);j(()=>{const n=async()=>{try{T(!0);const r=await Qe({pageSize:A,currentPage:R});b(r)}catch(r){console.error("Failed to fetch quote templates:",r)}finally{T(!1)}},e=$.on("authenticated",r=>{x(r),r&&w.current?n():(b(null),T(!1))},{eager:!0});return()=>{e==null||e.off()}},[A,R]),j(()=>{const n=$.on("quote-management/permissions",e=>{const r=e.viewQuoteTemplates||e.manageQuoteTemplates;w.current=r,v(r)},{eager:!0});return()=>{n==null||n.off()}},[]);const G=n=>{K(n),U(1),f==null||f(n)},B=n=>{U(n),m==null||m(n)},X=n=>{const e=n.target,r=e==null?void 0:e.value;r&&G(Number(r))},Y=(n,e)=>{q({id:n,name:e}),z(!0)},Z=async n=>{C(!0);try{const e=await Te({templateId:n.id});d==null||d(n.id,n.name,e.quoteId),z(!1),q(null)}catch(e){console.error("Failed to generate quote from template:",e)}finally{C(!1)}},V=()=>{z(!1),q(null)},ee=(n,e,r)=>n.filter(a=>a==null?void 0:a.uid).map(a=>{var E;return{id:a.id,name:t(s,{name:"Name",slot:e==null?void 0:e.Name,context:{template:a},children:t("span",{children:a.name})}),state:t(s,{name:"State",slot:e==null?void 0:e.State,context:{template:a},children:t("span",{style:{textTransform:"capitalize"},children:((E=a.state)==null?void 0:E.replace(/_/g," "))||"-"})}),status:t(s,{name:"Status",slot:e==null?void 0:e.Status,context:{template:a},children:t("span",{children:a.status})}),validUntil:t(s,{name:"ValidUntil",slot:e==null?void 0:e.ValidUntil,context:{template:a},children:t("span",{children:D(a.expirationDate,"short")})}),minQuoteTotal:t(s,{name:"MinQuoteTotal",slot:e==null?void 0:e.MinQuoteTotal,context:{template:a},children:t(he,{amount:a.prices.minNegotiatedGrandTotal.value,currency:a.prices.minNegotiatedGrandTotal.currency})}),ordersPlaced:t(s,{name:"OrdersPlaced",slot:e==null?void 0:e.OrdersPlaced,context:{template:a},children:t("span",{children:a.ordersPlaced})}),lastOrdered:t(s,{name:"LastOrdered",slot:e==null?void 0:e.LastOrdered,context:{template:a},children:t("span",{children:D(a.lastOrderedAt,"short")})}),actions:g(s,{name:"Actions",slot:e==null?void 0:e.Actions,context:{template:a,onViewQuoteTemplate:r},className:"quote-management-quote-templates-list-table__actions-cell",children:[t(F,{variant:"tertiary",size:"medium",onClick:()=>r==null?void 0:r(a.id,a.name,a.status),children:c.view}),a.canGenerateQuoteFromTemplate&&t(F,{variant:"primary",size:"medium",onClick:()=>Y(a.id,a.name),"data-testid":`generate-quote-button-${a.id}`,children:c.generateQuote})]})}}),te=o!=null&&o.items?ee(o.items,l,N):[],i=o!=null&&o.paginationInfo?{...o.paginationInfo,pageSizeOptions:H()}:void 0,k=!!i,ae=t(s,{name:"EmptyTemplates",slot:l==null?void 0:l.EmptyTemplates,context:{templatesData:o},children:t(de,{heading:"No Quote Templates Found"})}),ne=i?t(s,{name:"ItemRange",slot:l==null?void 0:l.ItemRange,context:i,children:g("span",{children:["Items ",i.startItem," to ",i.endItem," of"," ",i.totalCount," total"]})}):void 0,oe=i&&i.pageSizeOptions?g(s,{name:"PageSizePicker",slot:l==null?void 0:l.PageSizePicker,context:{pageSize:i.pageSize,pageSizeOptions:i.pageSizeOptions,onPageSizeChange:G},children:[t("span",{children:"Show "}),t(me,{variant:"primary",size:"medium",value:String(i.pageSize),options:i.pageSizeOptions.map(n=>({value:String(n),text:String(n)})),handleSelect:X}),t("span",{children:" per page"})]}):void 0,ie=i?t(s,{name:"Pagination",slot:l==null?void 0:l.Pagination,context:{currentPage:i.currentPage,totalPages:i.totalPages,onChange:B},children:t(ge,{currentPage:i.currentPage,totalPages:i.totalPages,onChange:B})}):void 0,re=y&&!P&&!S?t(pe,{type:"warning",variant:"primary",heading:c.noQuoteTemplatesAccessTitle,"data-testid":"quote-templates-permission-warning",children:c.noQuoteTemplatesAccessMessage}):null;return g("div",{...Q,className:Q.className,children:[re,t(Me,{rowData:te,loading:S,emptyStateMessage:ae,showItemRange:h&&k,itemRangeMessage:ne,showPageSizePicker:L&&k,pageSizePickerMessage:oe,showPagination:M&&k,paginationMessage:ie}),I&&se(t(fe,{open:I,title:c.generateQuote,message:c.generateQuoteModalMessage,cancelLabel:c.generateQuoteModalCancel,confirmLabel:O?c.generateQuoteModalConfirmLoading:c.generateQuoteModalConfirm,onCancel:V,onConfirm:O||!_?void 0:()=>Z(_),showCloseButton:!0,"data-testid":"generate-quote-confirmation-modal"}),document.body)]})};export{Ge as QuoteTemplatesListTable,Ge as default};
4
+ //# sourceMappingURL=QuoteTemplatesListTable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QuoteTemplatesListTable.js","sources":["/@dropins/storefront-quote-management/src/components/QuoteTemplatesListTable/QuoteTemplatesListTable.tsx","/@dropins/storefront-quote-management/src/containers/QuoteTemplatesListTable/QuoteTemplatesListTable.tsx"],"sourcesContent":["/********************************************************************\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this\n * file in accordance with the terms of the Adobe license agreement\n * accompanying it.\n *******************************************************************/\n\nimport { FunctionComponent, VNode } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\nimport { classes } from '@adobe-commerce/elsie/lib';\nimport { Table } from '@adobe-commerce/elsie/components';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport '@/quote-management/components/QuoteTemplatesListTable/QuoteTemplatesListTable.css';\n\ntype Column = {\n key: string;\n label: string;\n};\n\nexport interface QuoteTemplatesListTableProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'loading' | 'children'> {\n rowData: QuoteTemplateRowData[];\n loading?: boolean;\n className?: string;\n emptyStateMessage?: VNode;\n showItemRange?: boolean;\n itemRangeMessage?: VNode;\n showPageSizePicker?: boolean;\n pageSizePickerMessage?: VNode;\n showPagination?: boolean;\n paginationMessage?: VNode;\n}\n\nexport type QuoteTemplateRowData = {\n id: string;\n name: VNode;\n state: VNode;\n status: VNode;\n validUntil: VNode;\n minQuoteTotal: VNode;\n ordersPlaced: VNode;\n lastOrdered: VNode;\n actions: VNode;\n [key: string]: VNode | string | number | undefined;\n};\n\nexport const QuoteTemplatesListTable: FunctionComponent<\n QuoteTemplatesListTableProps\n> = ({\n rowData = [],\n loading = false,\n className,\n emptyStateMessage,\n showItemRange = true,\n itemRangeMessage,\n showPageSizePicker = true,\n pageSizePickerMessage,\n showPagination = true,\n paginationMessage,\n ...props\n}) => {\n const dictionary = useText({\n name: 'QuoteManagement.QuoteTemplatesListTable.name',\n state: 'QuoteManagement.QuoteTemplatesListTable.state',\n status: 'QuoteManagement.QuoteTemplatesListTable.status',\n validUntil: 'QuoteManagement.QuoteTemplatesListTable.validUntil',\n minQuoteTotal: 'QuoteManagement.QuoteTemplatesListTable.minQuoteTotal',\n ordersPlaced: 'QuoteManagement.QuoteTemplatesListTable.ordersPlaced',\n lastOrdered: 'QuoteManagement.QuoteTemplatesListTable.lastOrdered',\n actions: 'QuoteManagement.QuoteTemplatesListTable.actions',\n });\n\n const columns: Column[] = [\n { key: 'name', label: dictionary.name },\n { key: 'state', label: dictionary.state },\n { key: 'status', label: dictionary.status },\n { key: 'validUntil', label: dictionary.validUntil },\n { key: 'minQuoteTotal', label: dictionary.minQuoteTotal },\n { key: 'ordersPlaced', label: dictionary.ordersPlaced },\n { key: 'lastOrdered', label: dictionary.lastOrdered },\n { key: 'actions', label: dictionary.actions },\n ];\n\n // Check if should show the table when loading or there is data\n const shouldShowTable = loading || rowData.length > 0;\n\n // Check if we should show empty state\n const shouldShowEmptyState =\n !loading && rowData.length === 0 && emptyStateMessage;\n\n // Show item range if requested and message is provided\n const shouldShowItemRange = showItemRange && itemRangeMessage;\n\n // Show page size picker if requested and message is provided\n const shouldShowPageSizePicker = showPageSizePicker && pageSizePickerMessage;\n\n // Show pagination if requested and message is provided\n const shouldShowPagination = showPagination && paginationMessage;\n\n // Show footer if any pagination element should be shown\n const shouldShowFooter =\n shouldShowItemRange || shouldShowPageSizePicker || shouldShowPagination;\n\n return (\n <div\n {...props}\n className={classes([\n 'quote-management-quote-templates-list-table',\n className,\n ])}\n >\n {shouldShowTable && (\n <Table\n columns={columns}\n rowData={rowData}\n loading={loading}\n mobileLayout=\"none\"\n className=\"quote-management-quote-templates-list-table__table\"\n />\n )}\n {shouldShowEmptyState && (\n <div className=\"quote-templates-list-table__empty-state\">\n {emptyStateMessage}\n </div>\n )}\n {shouldShowFooter && (\n <div className=\"quote-templates-list-table__footer\">\n <div className=\"quote-templates-list-table__item-range\">\n {shouldShowItemRange && itemRangeMessage}\n </div>\n <div className=\"quote-templates-list-table__pagination\">\n {shouldShowPagination && paginationMessage}\n </div>\n <div className=\"quote-templates-list-table__page-size-picker\">\n {shouldShowPageSizePicker && pageSizePickerMessage}\n </div>\n </div>\n )}\n </div>\n );\n};\n","/********************************************************************\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this\n * file in accordance with the terms of the Adobe license agreement\n * accompanying it.\n *******************************************************************/\n\nimport { HTMLAttributes, useEffect, useState, createPortal, useRef } from 'preact/compat';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { Container, Slot, SlotProps } from '@adobe-commerce/elsie/lib';\nimport {\n Price,\n Button,\n IllustratedMessage,\n Picker,\n Pagination,\n InLineAlert,\n type PickerOption,\n} from '@adobe-commerce/elsie/components';\nimport { events } from '@adobe-commerce/event-bus';\nimport {\n QuoteTemplatesListTable as QuoteTemplatesListTableComponent,\n QuoteTemplateRowData,\n ConfirmationModal,\n} from '@/quote-management/components';\nimport { getQuoteTemplates, generateQuoteFromTemplate } from '@/quote-management/api';\nimport { getDefaultPageSizeOptions } from '@/quote-management/data/transforms';\nimport {\n NegotiableQuoteTemplatesListModel,\n NegotiableQuoteTemplateListEntry,\n} from '@/quote-management/data/models';\nimport { formattedDate } from '@/quote-management/utils/dateUtils';\nimport { state } from '@/quote-management/lib/state';\n\nexport interface QuoteTemplatesListTableProps\n extends HTMLAttributes<HTMLDivElement> {\n pageSize?: number;\n showItemRange?: boolean;\n showPageSizePicker?: boolean;\n showPagination?: boolean;\n onViewQuoteTemplate?: (templateId: string, templateName: string, status: string) => void;\n onGenerateQuoteFromTemplate?: (templateId: string, templateName: string, quoteId: string) => void;\n onPageSizeChange?: (pageSize: number) => void;\n onPageChange?: (page: number) => void;\n slots?: {\n /** Slot for customizing the template name cell content */\n Name?: SlotProps<{ template: NegotiableQuoteTemplateListEntry }>;\n /** Slot for customizing the state cell content */\n State?: SlotProps<{ template: NegotiableQuoteTemplateListEntry }>;\n /** Slot for customizing the status cell content */\n Status?: SlotProps<{ template: NegotiableQuoteTemplateListEntry }>;\n /** Slot for customizing the valid until cell content */\n ValidUntil?: SlotProps<{ template: NegotiableQuoteTemplateListEntry }>;\n /** Slot for customizing the min quote total cell content */\n MinQuoteTotal?: SlotProps<{ template: NegotiableQuoteTemplateListEntry }>;\n /** Slot for customizing the orders placed cell content */\n OrdersPlaced?: SlotProps<{ template: NegotiableQuoteTemplateListEntry }>;\n /** Slot for customizing the last ordered cell content */\n LastOrdered?: SlotProps<{ template: NegotiableQuoteTemplateListEntry }>;\n /** Slot for customizing the actions cell content */\n Actions?: SlotProps<{\n template: NegotiableQuoteTemplateListEntry;\n onViewQuoteTemplate?: (id: string, name: string, status: string) => void;\n onGenerateQuoteFromTemplate?: (id: string, name: string) => void;\n }>;\n /** Slot for customizing the empty templates message */\n EmptyTemplates?: SlotProps;\n /** Slot for customizing the item range display */\n ItemRange?: SlotProps<{\n startItem: number;\n endItem: number;\n totalCount: number;\n currentPage: number;\n pageSize: number;\n }>;\n /** Slot for customizing the page size picker */\n PageSizePicker?: SlotProps<{\n pageSize: number;\n pageSizeOptions: number[];\n onPageSizeChange?: (pageSize: number) => void;\n }>;\n /** Slot for customizing the pagination */\n Pagination?: SlotProps<{\n currentPage: number;\n totalPages: number;\n onChange?: (page: number) => void;\n }>;\n };\n}\n\nexport const QuoteTemplatesListTable: Container<\n QuoteTemplatesListTableProps\n> = ({\n pageSize,\n showItemRange = true,\n showPageSizePicker = true,\n showPagination = true,\n onViewQuoteTemplate,\n onGenerateQuoteFromTemplate,\n onPageSizeChange,\n onPageChange,\n slots,\n ...props\n}) => {\n const dictionary = useText({\n view: 'QuoteManagement.QuoteTemplatesListTable.view',\n generateQuote: 'NegotiableQuoteTemplate.Manage.actionButtons.generateQuote',\n generateQuoteModalMessage: 'NegotiableQuoteTemplate.Manage.confirmationModal.generateQuote.message',\n generateQuoteModalCancel: 'NegotiableQuoteTemplate.Manage.confirmationModal.cancel',\n generateQuoteModalConfirm: 'NegotiableQuoteTemplate.Manage.confirmationModal.generateQuote.confirm',\n generateQuoteModalConfirmLoading: 'NegotiableQuoteTemplate.Manage.confirmationModal.generateQuote.confirmLoading',\n noQuoteTemplatesAccessTitle: 'QuoteManagement.permissions.noQuoteTemplatesAccessTitle',\n noQuoteTemplatesAccessMessage: 'QuoteManagement.permissions.noQuoteTemplatesAccessMessage',\n });\n\n const [templatesData, setTemplatesData] =\n useState<NegotiableQuoteTemplatesListModel | null>(null);\n const [loading, setLoading] = useState(true);\n const [hasPermission, setHasPermission] = useState(true);\n const [isAuthenticated, setIsAuthenticated] = useState(false);\n const hasPermissionRef = useRef(true);\n const [showGenerateQuoteModal, setShowGenerateQuoteModal] = useState<boolean>(false);\n const [isGeneratingQuote, setIsGeneratingQuote] = useState<boolean>(false);\n const [selectedTemplate, setSelectedTemplate] = useState<{ id: string; name: string } | null>(null);\n\n // Default to first page size option if no pageSize prop provided\n const defaultPageSize = getDefaultPageSizeOptions()[0];\n const [currentPageSize, setCurrentPageSize] = useState(\n pageSize || defaultPageSize\n );\n const [currentPage, setCurrentPage] = useState(1);\n\n // Fetch quote templates data when authenticated\n useEffect(() => {\n const fetchTemplates = async () => {\n try {\n setLoading(true);\n const data = await getQuoteTemplates({\n pageSize: currentPageSize,\n currentPage,\n });\n setTemplatesData(data);\n } catch (error) {\n console.error('Failed to fetch quote templates:', error);\n } finally {\n setLoading(false);\n }\n };\n\n // Listen for authentication events\n const unsubscribe = events.on(\n 'authenticated',\n (authenticated) => {\n setIsAuthenticated(authenticated);\n if (authenticated && hasPermissionRef.current) {\n fetchTemplates();\n } else {\n setTemplatesData(null);\n setLoading(false);\n }\n },\n { eager: true }\n ); // eager: true means it fires immediately with current state\n\n return () => {\n unsubscribe?.off();\n };\n }, [currentPageSize, currentPage]);\n\n // Listen for permissions changes\n useEffect(() => {\n const unsubscribe = events.on(\n 'quote-management/permissions',\n (permissions: typeof state.permissions) => {\n const canViewTemplates = permissions.viewQuoteTemplates || permissions.manageQuoteTemplates;\n hasPermissionRef.current = canViewTemplates;\n setHasPermission(canViewTemplates);\n },\n { eager: true }\n );\n\n return () => {\n unsubscribe?.off();\n };\n }, []);\n\n // Handle page size change\n const handlePageSizeChange = (newPageSize: number) => {\n setCurrentPageSize(newPageSize);\n setCurrentPage(1); // Reset to page 1 when page size changes\n onPageSizeChange?.(newPageSize); // Also call parent callback\n };\n\n // Handle page change\n const handlePageChange = (newPage: number) => {\n setCurrentPage(newPage);\n onPageChange?.(newPage); // Also call parent callback\n };\n\n // Handle page size picker selection\n const handlePageSizeSelect = (event: Event) => {\n const target = event.target as HTMLSelectElement;\n const value = target?.value;\n if (value) {\n handlePageSizeChange(Number(value));\n }\n };\n\n // Handle generate quote button click\n const handleGenerateQuoteClick = (templateId: string, templateName: string) => {\n setSelectedTemplate({ id: templateId, name: templateName });\n setShowGenerateQuoteModal(true);\n };\n\n // Handle generate quote confirmation\n const handleGenerateQuote = async (template: { id: string; name: string }) => { \n setIsGeneratingQuote(true);\n \n try {\n const result = await generateQuoteFromTemplate({ templateId: template.id });\n \n // Call the callback AFTER successful generation\n onGenerateQuoteFromTemplate?.(template.id, template.name, result.quoteId);\n \n // Close modal on success\n setShowGenerateQuoteModal(false);\n setSelectedTemplate(null);\n } catch (error) {\n console.error('Failed to generate quote from template:', error);\n // Keep modal open on error so user can try again or cancel\n } finally {\n setIsGeneratingQuote(false);\n }\n };\n\n // Handle generate quote modal cancel\n const handleGenerateQuoteModalCancel = () => {\n setShowGenerateQuoteModal(false);\n setSelectedTemplate(null);\n };\n\n // Prepare transformed quote template data for table component\n const prepareRowData = (\n templates: NegotiableQuoteTemplateListEntry[],\n slots?: QuoteTemplatesListTableProps['slots'],\n onViewQuoteTemplate?: (templateId: string, templateName: string, status: string) => void\n ): QuoteTemplateRowData[] => {\n return templates\n .filter((template) => template?.uid) // Filter out null templates\n .map((template) => {\n return {\n id: template.id,\n name: (\n <Slot name=\"Name\" slot={slots?.Name} context={{ template }}>\n <span>{template.name}</span>\n </Slot>\n ),\n state: (\n <Slot name=\"State\" slot={slots?.State} context={{ template }}>\n <span style={{ textTransform: 'capitalize' }}>\n {template.state?.replace(/_/g, ' ') || '-'}\n </span>\n </Slot>\n ),\n status: (\n <Slot name=\"Status\" slot={slots?.Status} context={{ template }}>\n <span>{template.status}</span>\n </Slot>\n ),\n validUntil: (\n <Slot\n name=\"ValidUntil\"\n slot={slots?.ValidUntil}\n context={{ template }}\n >\n <span>{formattedDate(template.expirationDate, 'short')}</span>\n </Slot>\n ),\n minQuoteTotal: (\n <Slot\n name=\"MinQuoteTotal\"\n slot={slots?.MinQuoteTotal}\n context={{ template }}\n >\n <Price\n amount={template.prices.minNegotiatedGrandTotal.value}\n currency={template.prices.minNegotiatedGrandTotal.currency}\n />\n </Slot>\n ),\n ordersPlaced: (\n <Slot\n name=\"OrdersPlaced\"\n slot={slots?.OrdersPlaced}\n context={{ template }}\n >\n <span>{template.ordersPlaced}</span>\n </Slot>\n ),\n lastOrdered: (\n <Slot\n name=\"LastOrdered\"\n slot={slots?.LastOrdered}\n context={{ template }}\n >\n <span>{formattedDate(template.lastOrderedAt, 'short')}</span>\n </Slot>\n ),\n actions: (\n <Slot\n name=\"Actions\"\n slot={slots?.Actions}\n context={{ template, onViewQuoteTemplate }}\n className=\"quote-management-quote-templates-list-table__actions-cell\"\n >\n <Button\n variant=\"tertiary\"\n size=\"medium\"\n onClick={() => onViewQuoteTemplate?.(template.id, template.name, template.status)}\n >\n {dictionary.view}\n </Button>\n {template.canGenerateQuoteFromTemplate && (\n <Button\n variant=\"primary\"\n size=\"medium\"\n onClick={() => handleGenerateQuoteClick(template.id, template.name)}\n data-testid={`generate-quote-button-${template.id}`}\n >\n {dictionary.generateQuote}\n </Button>\n )}\n </Slot>\n ),\n };\n });\n };\n\n // Prepare data for rendering\n const rowData = templatesData?.items\n ? prepareRowData(templatesData.items, slots, onViewQuoteTemplate)\n : [];\n\n // Use pagination info directly from API response, merging in pageSizeOptions if needed\n const paginationInfo = templatesData?.paginationInfo\n ? {\n ...templatesData.paginationInfo,\n pageSizeOptions: getDefaultPageSizeOptions(),\n }\n : undefined;\n\n const shouldShowPagination = !!paginationInfo;\n\n // Empty state message\n const emptyStateMessage = (\n <Slot\n name=\"EmptyTemplates\"\n slot={slots?.EmptyTemplates}\n context={{ templatesData }}\n >\n <IllustratedMessage heading=\"No Quote Templates Found\" />\n </Slot>\n );\n\n // Item range message\n const itemRangeMessage = paginationInfo ? (\n <Slot name=\"ItemRange\" slot={slots?.ItemRange} context={paginationInfo}>\n <span>\n Items {paginationInfo.startItem} to {paginationInfo.endItem} of{' '}\n {paginationInfo.totalCount} total\n </span>\n </Slot>\n ) : undefined;\n\n // Prepare page size picker message for component\n const pageSizePickerMessage =\n paginationInfo && paginationInfo.pageSizeOptions ? (\n <Slot\n name=\"PageSizePicker\"\n slot={slots?.PageSizePicker}\n context={{\n pageSize: paginationInfo.pageSize,\n pageSizeOptions: paginationInfo.pageSizeOptions,\n onPageSizeChange: handlePageSizeChange,\n }}\n >\n <span>Show </span>\n <Picker\n variant=\"primary\"\n size=\"medium\"\n value={String(paginationInfo.pageSize)}\n options={paginationInfo.pageSizeOptions.map(\n (size): PickerOption => ({\n value: String(size),\n text: String(size),\n })\n )}\n handleSelect={handlePageSizeSelect}\n />\n <span> per page</span>\n </Slot>\n ) : undefined;\n\n // Prepare pagination message for component\n const paginationMessage = paginationInfo ? (\n <Slot\n name=\"Pagination\"\n slot={slots?.Pagination}\n context={{\n currentPage: paginationInfo.currentPage,\n totalPages: paginationInfo.totalPages,\n onChange: handlePageChange,\n }}\n >\n <Pagination\n currentPage={paginationInfo.currentPage}\n totalPages={paginationInfo.totalPages}\n onChange={handlePageChange}\n />\n </Slot>\n ) : undefined;\n\n // Permission warning banner shown above the table/empty state\n const permissionWarningBanner = isAuthenticated && !hasPermission && !loading ? (\n <InLineAlert\n type=\"warning\"\n variant=\"primary\"\n heading={dictionary.noQuoteTemplatesAccessTitle}\n data-testid=\"quote-templates-permission-warning\"\n >\n {dictionary.noQuoteTemplatesAccessMessage}\n </InLineAlert>\n ) : null;\n\n return (\n <div {...props} className={props.className as string}>\n {permissionWarningBanner}\n <QuoteTemplatesListTableComponent\n rowData={rowData}\n loading={loading}\n emptyStateMessage={emptyStateMessage}\n showItemRange={showItemRange && shouldShowPagination}\n itemRangeMessage={itemRangeMessage}\n showPageSizePicker={showPageSizePicker && shouldShowPagination}\n pageSizePickerMessage={pageSizePickerMessage}\n showPagination={showPagination && shouldShowPagination}\n paginationMessage={paginationMessage}\n />\n {showGenerateQuoteModal &&\n createPortal(\n <ConfirmationModal\n open={showGenerateQuoteModal}\n title={dictionary.generateQuote}\n message={dictionary.generateQuoteModalMessage}\n cancelLabel={dictionary.generateQuoteModalCancel}\n confirmLabel={\n isGeneratingQuote\n ? dictionary.generateQuoteModalConfirmLoading\n : dictionary.generateQuoteModalConfirm\n }\n onCancel={handleGenerateQuoteModalCancel}\n onConfirm={isGeneratingQuote || !selectedTemplate ? undefined : () => handleGenerateQuote(selectedTemplate)}\n showCloseButton={true}\n data-testid=\"generate-quote-confirmation-modal\"\n />,\n document.body\n )}\n </div>\n );\n};\n"],"names":["QuoteTemplatesListTable","rowData","loading","className","emptyStateMessage","showItemRange","itemRangeMessage","showPageSizePicker","pageSizePickerMessage","showPagination","paginationMessage","props","dictionary","useText","columns","shouldShowTable","shouldShowEmptyState","shouldShowItemRange","shouldShowPageSizePicker","shouldShowPagination","shouldShowFooter","jsxs","classes","jsx","Table","pageSize","onViewQuoteTemplate","onGenerateQuoteFromTemplate","onPageSizeChange","onPageChange","slots","templatesData","setTemplatesData","useState","setLoading","hasPermission","setHasPermission","isAuthenticated","setIsAuthenticated","hasPermissionRef","useRef","showGenerateQuoteModal","setShowGenerateQuoteModal","isGeneratingQuote","setIsGeneratingQuote","selectedTemplate","setSelectedTemplate","defaultPageSize","getDefaultPageSizeOptions","currentPageSize","setCurrentPageSize","currentPage","setCurrentPage","useEffect","fetchTemplates","data","getQuoteTemplates","error","unsubscribe","events","authenticated","permissions","canViewTemplates","handlePageSizeChange","newPageSize","handlePageChange","newPage","handlePageSizeSelect","event","target","value","handleGenerateQuoteClick","templateId","templateName","handleGenerateQuote","template","result","generateQuoteFromTemplate","handleGenerateQuoteModalCancel","prepareRowData","templates","Slot","_a","formattedDate","Price","Button","paginationInfo","IllustratedMessage","Picker","size","Pagination","permissionWarningBanner","InLineAlert","QuoteTemplatesListTableComponent","createPortal","ConfirmationModal"],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ import { HTMLAttributes } from 'preact/compat';
2
+ import { Container, SlotProps } from '@dropins/tools/types/elsie/src/lib';
3
+ import { NegotiableQuoteListEntry } from '../../data/models';
4
+
5
+ export interface QuotesListTableProps extends HTMLAttributes<HTMLDivElement> {
6
+ pageSize?: number;
7
+ showItemRange?: boolean;
8
+ showPageSizePicker?: boolean;
9
+ showPagination?: boolean;
10
+ onViewQuote?: (quoteId: string, quoteName: string, status: string) => void;
11
+ onPageSizeChange?: (pageSize: number) => void;
12
+ onPageChange?: (page: number) => void;
13
+ slots?: {
14
+ /** Slot for customizing the quote name cell content */
15
+ QuoteName?: SlotProps<{
16
+ quote: NegotiableQuoteListEntry;
17
+ }>;
18
+ /** Slot for customizing the created date cell content */
19
+ Created?: SlotProps<{
20
+ quote: NegotiableQuoteListEntry;
21
+ }>;
22
+ /** Slot for customizing the created by cell content */
23
+ CreatedBy?: SlotProps<{
24
+ quote: NegotiableQuoteListEntry;
25
+ }>;
26
+ /** Slot for customizing the status cell content */
27
+ Status?: SlotProps<{
28
+ quote: NegotiableQuoteListEntry;
29
+ }>;
30
+ /** Slot for customizing the last updated cell content */
31
+ LastUpdated?: SlotProps<{
32
+ quote: NegotiableQuoteListEntry;
33
+ }>;
34
+ /** Slot for customizing the quote template cell content */
35
+ QuoteTemplate?: SlotProps<{
36
+ quote: NegotiableQuoteListEntry;
37
+ }>;
38
+ /** Slot for customizing the quote total cell content */
39
+ QuoteTotal?: SlotProps<{
40
+ quote: NegotiableQuoteListEntry;
41
+ }>;
42
+ /** Slot for customizing the actions cell content */
43
+ Actions?: SlotProps<{
44
+ quote: NegotiableQuoteListEntry;
45
+ onViewQuote?: (id: string, name: string, status: string) => void;
46
+ }>;
47
+ /** Slot for customizing the empty quotes message */
48
+ EmptyQuotes?: SlotProps;
49
+ /** Slot for customizing the item range display */
50
+ ItemRange?: SlotProps<{
51
+ startItem: number;
52
+ endItem: number;
53
+ totalCount: number;
54
+ currentPage: number;
55
+ pageSize: number;
56
+ }>;
57
+ /** Slot for customizing the page size picker */
58
+ PageSizePicker?: SlotProps<{
59
+ pageSize: number;
60
+ pageSizeOptions: number[];
61
+ onPageSizeChange?: (pageSize: number) => void;
62
+ }>;
63
+ /** Slot for customizing the pagination */
64
+ Pagination?: SlotProps<{
65
+ currentPage: number;
66
+ totalPages: number;
67
+ onChange?: (page: number) => void;
68
+ }>;
69
+ };
70
+ }
71
+ export declare const QuotesListTable: Container<QuotesListTableProps>;
72
+ //# sourceMappingURL=QuotesListTable.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 './QuotesListTable';
10
+ export { QuotesListTable as default } from './QuotesListTable';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,3 @@
1
+ export * from './QuotesListTable/index'
2
+ import _default from './QuotesListTable/index'
3
+ export default _default
@@ -0,0 +1,4 @@
1
+ /*! Copyright 2025 Adobe
2
+ All Rights Reserved. */
3
+ import{jsxs as Q,jsx as t}from"@dropins/tools/preact-jsx-runtime.js";import{useState as u,useRef as ee,useEffect as I}from"@dropins/tools/preact-compat.js";import{classes as te,Slot as s}from"@dropins/tools/lib.js";import{Table as ae,IllustratedMessage as ne,Picker as re,Pagination as ie,InLineAlert as oe,Button as ce,Price as se}from"@dropins/tools/components.js";import{events as _}from"@dropins/tools/event-bus.js";/* empty css */import"@dropins/tools/preact.js";import"@dropins/tools/preact-hooks.js";import{f as F}from"../chunks/dateUtils.js";import{useText as j}from"@dropins/tools/i18n.js";/* empty css *//* empty css */import{g as me}from"../chunks/transform-quote.js";import"../chunks/state.js";import{n as $}from"../chunks/negotiableQuotes.js";import"@dropins/tools/fetch-graphql.js";const le=({rowData:d=[],loading:p=!1,className:A,emptyStateMessage:y,showItemRange:k=!0,itemRangeMessage:l,showPageSizePicker:g=!0,pageSizePickerMessage:o,showPagination:S=!0,paginationMessage:h,...m})=>{const c=j({quoteName:"QuoteManagement.QuotesListTable.quoteName",created:"QuoteManagement.QuotesListTable.created",createdBy:"QuoteManagement.QuotesListTable.createdBy",status:"QuoteManagement.QuotesListTable.status",lastUpdated:"QuoteManagement.QuotesListTable.lastUpdated",quoteTemplate:"QuoteManagement.QuotesListTable.quoteTemplate",quoteTotal:"QuoteManagement.QuotesListTable.quoteTotal",actions:"QuoteManagement.QuotesListTable.actions"}),T=[{key:"quoteName",label:c.quoteName},{key:"created",label:c.created},{key:"createdBy",label:c.createdBy},{key:"status",label:c.status},{key:"lastUpdated",label:c.lastUpdated},{key:"quoteTemplate",label:c.quoteTemplate},{key:"quoteTotal",label:c.quoteTotal},{key:"actions",label:c.actions}],f=p||d.length>0,L=!p&&d.length===0&&y,b=k&&l,P=g&&o,N=S&&h,v=b||P||N;return Q("div",{...m,className:te(["quote-management-quotes-list-table",A]),children:[f&&t(ae,{columns:T,rowData:d,loading:p,mobileLayout:"none",className:"quote-management-quotes-list-table__table"}),L&&t("div",{className:"quotes-list-table__empty-state",children:y}),v&&Q("div",{className:"quotes-list-table__footer",children:[t("div",{className:"quotes-list-table__item-range",children:b&&l}),t("div",{className:"quotes-list-table__pagination",children:N&&h}),t("div",{className:"quotes-list-table__page-size-picker",children:P&&o})]})]})},Ae=({pageSize:d,showItemRange:p=!0,showPageSizePicker:A=!0,showPagination:y=!0,onViewQuote:k,onPageSizeChange:l,onPageChange:g,slots:o,...S})=>{const h=j({noQuotesAccessTitle:"QuoteManagement.permissions.noQuotesAccessTitle",noQuotesAccessMessage:"QuoteManagement.permissions.noQuotesAccessMessage"}),[m,c]=u(null),[T,f]=u(!0),[L,b]=u(!0),[P,N]=u(!1),v=ee(!0),q=me()[0],[x,H]=u(d||q),[z,w]=u(1);I(()=>{const r=async()=>{try{f(!0);const n=await $({pageSize:x,currentPage:z});c(n)}catch(n){console.error("Failed to fetch quotes:",n)}finally{f(!1)}},e=_.on("authenticated",n=>{N(n),n&&v.current?r():(c(null),f(!1))},{eager:!0});return()=>{e==null||e.off()}},[x,z]),I(()=>{const r=_.on("quote-management/permissions",e=>{const n=e.editQuote||e.requestQuote;v.current=n,b(n)},{eager:!0});return()=>{r==null||r.off()}},[]),I(()=>{const r=async()=>{try{const n=await $({pageSize:x,currentPage:z});c(n)}catch(n){console.error("Failed to fetch quotes:",n)}},e=_.on("quote-management/quote-renamed",()=>{r()},{eager:!0});return()=>{e==null||e.off()}},[x,z]);const B=r=>{H(r),w(1),l==null||l(r)},R=r=>{w(r),g==null||g(r)},W=r=>{const e=r.target,n=e==null?void 0:e.value;n&&B(Number(n))},D=(r,e,n)=>r.filter(a=>a==null?void 0:a.uid).map(a=>{var U,C,O,E;const V=`${a.buyer.firstname} ${a.buyer.lastname}`;return{id:a.uid,quoteName:t(s,{name:"QuoteName",slot:e==null?void 0:e.QuoteName,context:{quote:a},children:t("span",{children:a.name})}),created:t(s,{name:"Created",slot:e==null?void 0:e.Created,context:{quote:a},children:t("span",{children:a.createdAt?F(a.createdAt,"short"):"N/A"})}),createdBy:t(s,{name:"CreatedBy",slot:e==null?void 0:e.CreatedBy,context:{quote:a},children:t("span",{children:V})}),status:t(s,{name:"Status",slot:e==null?void 0:e.Status,context:{quote:a},children:t("span",{children:a.status})}),lastUpdated:t(s,{name:"LastUpdated",slot:e==null?void 0:e.LastUpdated,context:{quote:a},children:t("span",{children:a.updatedAt?F(a.updatedAt,"short"):"N/A"})}),quoteTemplate:t(s,{name:"QuoteTemplate",slot:e==null?void 0:e.QuoteTemplate,context:{quote:a},children:t("span",{children:a.templateName})}),quoteTotal:t(s,{name:"QuoteTotal",slot:e==null?void 0:e.QuoteTotal,context:{quote:a},children:t(se,{amount:(C=(U=a.prices)==null?void 0:U.grandTotal)==null?void 0:C.value,currency:(E=(O=a.prices)==null?void 0:O.grandTotal)==null?void 0:E.currency})}),actions:t(s,{name:"Actions",slot:e==null?void 0:e.Actions,context:{quote:a,onViewQuote:n},children:t(ce,{variant:"tertiary",size:"medium",onClick:()=>n==null?void 0:n(a.uid,a.name,a.status),children:"View"})})}}),G=m!=null&&m.items?D(m.items,o,k):[],i=m==null?void 0:m.paginationInfo,M=!!i,J=t(s,{name:"EmptyQuotes",slot:o==null?void 0:o.EmptyQuotes,context:{quotesData:m},children:t(ne,{heading:"No Quotes Found"})}),K=i?t(s,{name:"ItemRange",slot:o==null?void 0:o.ItemRange,context:i,children:Q("span",{children:["Items ",i.startItem," to ",i.endItem," of"," ",i.totalCount," total"]})}):void 0,X=i&&i.pageSizeOptions?Q(s,{name:"PageSizePicker",slot:o==null?void 0:o.PageSizePicker,context:{pageSize:i.pageSize,pageSizeOptions:i.pageSizeOptions,onPageSizeChange:B},children:[t("span",{children:"Show "}),t(re,{variant:"primary",size:"medium",value:String(i.pageSize),options:i.pageSizeOptions.map(r=>({value:String(r),text:String(r)})),handleSelect:W}),t("span",{children:" per page"})]}):void 0,Y=i?t(s,{name:"Pagination",slot:o==null?void 0:o.Pagination,context:{currentPage:i.currentPage,totalPages:i.totalPages,onChange:R},children:t(ie,{currentPage:i.currentPage,totalPages:i.totalPages,onChange:R})}):void 0,Z=P&&!L&&!T?t(oe,{type:"warning",variant:"primary",heading:h.noQuotesAccessTitle,"data-testid":"quotes-permission-warning",children:h.noQuotesAccessMessage}):null;return Q("div",{...S,className:S.className,children:[Z,t(le,{rowData:G,loading:T,emptyStateMessage:J,showItemRange:p&&M,itemRangeMessage:K,showPageSizePicker:A&&M,pageSizePickerMessage:X,showPagination:y&&M,paginationMessage:Y})]})};export{Ae as QuotesListTable,Ae as default};
4
+ //# sourceMappingURL=QuotesListTable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QuotesListTable.js","sources":["/@dropins/storefront-quote-management/src/components/QuotesListTable/QuotesListTable.tsx","/@dropins/storefront-quote-management/src/containers/QuotesListTable/QuotesListTable.tsx"],"sourcesContent":["/********************************************************************\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this\n * file in accordance with the terms of the Adobe license agreement\n * accompanying it.\n *******************************************************************/\n\nimport { FunctionComponent, VNode } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\nimport { classes } from '@adobe-commerce/elsie/lib';\nimport { Table } from '@adobe-commerce/elsie/components';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport '@/quote-management/components/QuotesListTable/QuotesListTable.css';\n\ntype Column = {\n key: string;\n label: string;\n};\n\nexport interface QuotesListTableProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'loading' | 'children'> {\n rowData: QuoteRowData[];\n loading?: boolean;\n className?: string;\n emptyStateMessage?: VNode;\n showItemRange?: boolean;\n itemRangeMessage?: VNode;\n showPageSizePicker?: boolean;\n pageSizePickerMessage?: VNode;\n showPagination?: boolean;\n paginationMessage?: VNode;\n}\n\nexport type QuoteRowData = {\n id: string;\n quoteName: VNode;\n created: VNode;\n createdBy: VNode;\n status: VNode;\n lastUpdated: VNode;\n quoteTemplate: VNode;\n quoteTotal: VNode;\n actions: VNode;\n [key: string]: VNode | string | number | undefined;\n};\n\nexport const QuotesListTable: FunctionComponent<QuotesListTableProps> = ({\n rowData = [],\n loading = false,\n className,\n emptyStateMessage,\n showItemRange = true,\n itemRangeMessage,\n showPageSizePicker = true,\n pageSizePickerMessage,\n showPagination = true,\n paginationMessage,\n ...props\n}) => {\n const dictionary = useText({\n quoteName: 'QuoteManagement.QuotesListTable.quoteName',\n created: 'QuoteManagement.QuotesListTable.created',\n createdBy: 'QuoteManagement.QuotesListTable.createdBy',\n status: 'QuoteManagement.QuotesListTable.status',\n lastUpdated: 'QuoteManagement.QuotesListTable.lastUpdated',\n quoteTemplate: 'QuoteManagement.QuotesListTable.quoteTemplate',\n quoteTotal: 'QuoteManagement.QuotesListTable.quoteTotal',\n actions: 'QuoteManagement.QuotesListTable.actions',\n });\n\n const columns: Column[] = [\n { key: 'quoteName', label: dictionary.quoteName },\n { key: 'created', label: dictionary.created },\n { key: 'createdBy', label: dictionary.createdBy },\n { key: 'status', label: dictionary.status },\n { key: 'lastUpdated', label: dictionary.lastUpdated },\n { key: 'quoteTemplate', label: dictionary.quoteTemplate },\n { key: 'quoteTotal', label: dictionary.quoteTotal },\n { key: 'actions', label: dictionary.actions },\n ];\n\n // Check if should show the table when loading or there is data\n const shouldShowTable = loading || rowData.length > 0;\n\n // Check if we should show empty state\n const shouldShowEmptyState =\n !loading && rowData.length === 0 && emptyStateMessage;\n\n // Show item range if requested and message is provided\n const shouldShowItemRange = showItemRange && itemRangeMessage;\n\n // Show page size picker if requested and message is provided\n const shouldShowPageSizePicker = showPageSizePicker && pageSizePickerMessage;\n\n // Show pagination if requested and message is provided\n const shouldShowPagination = showPagination && paginationMessage;\n\n // Show footer if any pagination element should be shown\n const shouldShowFooter =\n shouldShowItemRange || shouldShowPageSizePicker || shouldShowPagination;\n\n return (\n <div\n {...props}\n className={classes(['quote-management-quotes-list-table', className])}\n >\n {shouldShowTable && (\n <Table\n columns={columns}\n rowData={rowData}\n loading={loading}\n mobileLayout=\"none\"\n className=\"quote-management-quotes-list-table__table\"\n />\n )}\n {shouldShowEmptyState && (\n <div className=\"quotes-list-table__empty-state\">\n {emptyStateMessage}\n </div>\n )}\n {shouldShowFooter && (\n <div className=\"quotes-list-table__footer\">\n <div className=\"quotes-list-table__item-range\">\n {shouldShowItemRange && itemRangeMessage}\n </div>\n <div className=\"quotes-list-table__pagination\">\n {shouldShowPagination && paginationMessage}\n </div>\n <div className=\"quotes-list-table__page-size-picker\">\n {shouldShowPageSizePicker && pageSizePickerMessage}\n </div>\n </div>\n )}\n </div>\n );\n};\n","/********************************************************************\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this\n * file in accordance with the terms of the Adobe license agreement\n * accompanying it.\n *******************************************************************/\n\nimport { HTMLAttributes, useEffect, useState, useRef } from 'preact/compat';\nimport { Container, Slot, SlotProps } from '@adobe-commerce/elsie/lib';\nimport {\n Price,\n Button,\n IllustratedMessage,\n Picker,\n Pagination,\n InLineAlert,\n type PickerOption,\n} from '@adobe-commerce/elsie/components';\nimport { events } from '@adobe-commerce/event-bus';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport {\n QuotesListTable as QuotesListTableComponent,\n QuoteRowData,\n} from '@/quote-management/components';\nimport { negotiableQuotes } from '@/quote-management/api';\nimport { getDefaultPageSizeOptions } from '@/quote-management/data/transforms';\nimport {\n NegotiableQuotesListModel,\n NegotiableQuoteListEntry,\n} from '@/quote-management/data/models';\nimport { formattedDate } from '@/quote-management/utils/dateUtils';\nimport { state } from '@/quote-management/lib/state';\n\nexport interface QuotesListTableProps extends HTMLAttributes<HTMLDivElement> {\n pageSize?: number;\n showItemRange?: boolean;\n showPageSizePicker?: boolean;\n showPagination?: boolean;\n onViewQuote?: (quoteId: string, quoteName: string, status: string) => void;\n onPageSizeChange?: (pageSize: number) => void;\n onPageChange?: (page: number) => void;\n slots?: {\n /** Slot for customizing the quote name cell content */\n QuoteName?: SlotProps<{ quote: NegotiableQuoteListEntry }>;\n /** Slot for customizing the created date cell content */\n Created?: SlotProps<{ quote: NegotiableQuoteListEntry }>;\n /** Slot for customizing the created by cell content */\n CreatedBy?: SlotProps<{ quote: NegotiableQuoteListEntry }>;\n /** Slot for customizing the status cell content */\n Status?: SlotProps<{ quote: NegotiableQuoteListEntry }>;\n /** Slot for customizing the last updated cell content */\n LastUpdated?: SlotProps<{ quote: NegotiableQuoteListEntry }>;\n /** Slot for customizing the quote template cell content */\n QuoteTemplate?: SlotProps<{ quote: NegotiableQuoteListEntry }>;\n /** Slot for customizing the quote total cell content */\n QuoteTotal?: SlotProps<{ quote: NegotiableQuoteListEntry }>;\n /** Slot for customizing the actions cell content */\n Actions?: SlotProps<{\n quote: NegotiableQuoteListEntry;\n onViewQuote?: (id: string, name: string, status: string) => void;\n }>;\n /** Slot for customizing the empty quotes message */\n EmptyQuotes?: SlotProps;\n /** Slot for customizing the item range display */\n ItemRange?: SlotProps<{\n startItem: number;\n endItem: number;\n totalCount: number;\n currentPage: number;\n pageSize: number;\n }>;\n /** Slot for customizing the page size picker */\n PageSizePicker?: SlotProps<{\n pageSize: number;\n pageSizeOptions: number[];\n onPageSizeChange?: (pageSize: number) => void;\n }>;\n /** Slot for customizing the pagination */\n Pagination?: SlotProps<{\n currentPage: number;\n totalPages: number;\n onChange?: (page: number) => void;\n }>;\n };\n}\n\nexport const QuotesListTable: Container<QuotesListTableProps> = ({\n pageSize,\n showItemRange = true,\n showPageSizePicker = true,\n showPagination = true,\n onViewQuote,\n onPageSizeChange,\n onPageChange,\n slots,\n ...props\n}) => {\n const dictionary = useText({\n noQuotesAccessTitle: 'QuoteManagement.permissions.noQuotesAccessTitle',\n noQuotesAccessMessage: 'QuoteManagement.permissions.noQuotesAccessMessage',\n });\n\n const [quotesData, setQuotesData] =\n useState<NegotiableQuotesListModel | null>(null);\n const [loading, setLoading] = useState(true);\n const [hasPermission, setHasPermission] = useState(true);\n const [isAuthenticated, setIsAuthenticated] = useState(false);\n const hasPermissionRef = useRef(true);\n\n // Default to first page size option if no pageSize prop provided\n const defaultPageSize = getDefaultPageSizeOptions()[0];\n const [currentPageSize, setCurrentPageSize] = useState(\n pageSize || defaultPageSize\n );\n const [currentPage, setCurrentPage] = useState(1);\n\n // Fetch quotes data when authenticated\n useEffect(() => {\n const fetchQuotes = async () => {\n try {\n setLoading(true);\n const data = await negotiableQuotes({\n pageSize: currentPageSize,\n currentPage,\n });\n setQuotesData(data);\n } catch (error) {\n console.error('Failed to fetch quotes:', error);\n } finally {\n setLoading(false);\n }\n };\n\n // Listen for authentication events\n const unsubscribe = events.on(\n 'authenticated',\n (authenticated) => {\n setIsAuthenticated(authenticated);\n if (authenticated && hasPermissionRef.current) {\n fetchQuotes();\n } else {\n setQuotesData(null);\n setLoading(false);\n }\n },\n { eager: true }\n ); // eager: true means it fires immediately with current state\n\n return () => {\n unsubscribe?.off();\n };\n }, [currentPageSize, currentPage]);\n\n // Listen for permissions changes\n useEffect(() => {\n const unsubscribe = events.on(\n 'quote-management/permissions',\n (permissions: typeof state.permissions) => {\n const canViewQuotes = permissions.editQuote || permissions.requestQuote;\n hasPermissionRef.current = canViewQuotes;\n setHasPermission(canViewQuotes);\n },\n { eager: true }\n );\n\n return () => {\n unsubscribe?.off();\n };\n }, []);\n\n // Listen for quote renamed event to refresh the list\n useEffect(() => {\n const fetchQuotes = async () => {\n try {\n const data = await negotiableQuotes({\n pageSize: currentPageSize,\n currentPage,\n });\n setQuotesData(data);\n } catch (error) {\n console.error('Failed to fetch quotes:', error);\n }\n };\n\n const unsubscribe = events.on(\n 'quote-management/quote-renamed',\n () => {\n // Refetch quotes list to show the updated name\n fetchQuotes();\n },\n { eager: true }\n );\n\n return () => {\n unsubscribe?.off();\n };\n }, [currentPageSize, currentPage]);\n\n // Handle page size change\n const handlePageSizeChange = (newPageSize: number) => {\n setCurrentPageSize(newPageSize);\n setCurrentPage(1); // Reset to page 1 when page size changes\n onPageSizeChange?.(newPageSize); // Also call parent callback\n };\n\n // Handle page change\n const handlePageChange = (newPage: number) => {\n setCurrentPage(newPage);\n onPageChange?.(newPage); // Also call parent callback\n };\n\n // Handle page size picker selection\n const handlePageSizeSelect = (event: Event) => {\n const target = event.target as HTMLSelectElement;\n const value = target?.value;\n if (value) {\n handlePageSizeChange(Number(value));\n }\n };\n\n // Prepare transformed quote data for table component\n const prepareRowData = (\n quotes: NegotiableQuoteListEntry[],\n slots?: QuotesListTableProps['slots'],\n onViewQuote?: (quoteId: string, quoteName: string, status: string) => void\n ): QuoteRowData[] => {\n return quotes\n .filter((quote) => quote?.uid) // Filter out null quotes\n .map((quote) => {\n const createdByName = `${quote.buyer.firstname} ${quote.buyer.lastname}`;\n\n return {\n id: quote.uid,\n quoteName: (\n <Slot name=\"QuoteName\" slot={slots?.QuoteName} context={{ quote }}>\n <span>{quote.name}</span>\n </Slot>\n ),\n created: (\n <Slot name=\"Created\" slot={slots?.Created} context={{ quote }}>\n <span>\n {quote.createdAt\n ? formattedDate(quote.createdAt, 'short')\n : 'N/A'}\n </span>\n </Slot>\n ),\n createdBy: (\n <Slot name=\"CreatedBy\" slot={slots?.CreatedBy} context={{ quote }}>\n <span>{createdByName}</span>\n </Slot>\n ),\n status: (\n <Slot name=\"Status\" slot={slots?.Status} context={{ quote }}>\n <span>{quote.status}</span>\n </Slot>\n ),\n lastUpdated: (\n <Slot\n name=\"LastUpdated\"\n slot={slots?.LastUpdated}\n context={{ quote }}\n >\n <span>\n {quote.updatedAt\n ? formattedDate(quote.updatedAt, 'short')\n : 'N/A'}\n </span>\n </Slot>\n ),\n quoteTemplate: (\n <Slot\n name=\"QuoteTemplate\"\n slot={slots?.QuoteTemplate}\n context={{ quote }}\n >\n <span>{quote.templateName}</span>\n </Slot>\n ),\n quoteTotal: (\n <Slot\n name=\"QuoteTotal\"\n slot={slots?.QuoteTotal}\n context={{ quote }}\n >\n <Price\n amount={quote.prices?.grandTotal?.value}\n currency={quote.prices?.grandTotal?.currency}\n />\n </Slot>\n ),\n actions: (\n <Slot\n name=\"Actions\"\n slot={slots?.Actions}\n context={{ quote, onViewQuote }}\n >\n <Button\n variant=\"tertiary\"\n size=\"medium\"\n onClick={() =>\n onViewQuote?.(quote.uid, quote.name, quote.status)\n }\n >\n View\n </Button>\n </Slot>\n ),\n };\n });\n };\n\n // Prepare data for rendering\n const rowData = quotesData?.items\n ? prepareRowData(quotesData.items, slots, onViewQuote)\n : [];\n\n const paginationInfo = quotesData?.paginationInfo;\n const shouldShowPagination = !!paginationInfo;\n\n // Empty state message\n const emptyStateMessage = (\n <Slot name=\"EmptyQuotes\" slot={slots?.EmptyQuotes} context={{ quotesData }}>\n <IllustratedMessage heading=\"No Quotes Found\" />\n </Slot>\n );\n\n // Item range message\n const itemRangeMessage = paginationInfo ? (\n <Slot name=\"ItemRange\" slot={slots?.ItemRange} context={paginationInfo}>\n <span>\n Items {paginationInfo.startItem} to {paginationInfo.endItem} of{' '}\n {paginationInfo.totalCount} total\n </span>\n </Slot>\n ) : undefined;\n\n // Prepare page size picker message for component\n const pageSizePickerMessage =\n paginationInfo && paginationInfo.pageSizeOptions ? (\n <Slot\n name=\"PageSizePicker\"\n slot={slots?.PageSizePicker}\n context={{\n pageSize: paginationInfo.pageSize,\n pageSizeOptions: paginationInfo.pageSizeOptions,\n onPageSizeChange: handlePageSizeChange,\n }}\n >\n <span>Show </span>\n <Picker\n variant=\"primary\"\n size=\"medium\"\n value={String(paginationInfo.pageSize)}\n options={paginationInfo.pageSizeOptions.map(\n (size): PickerOption => ({\n value: String(size),\n text: String(size),\n })\n )}\n handleSelect={handlePageSizeSelect}\n />\n <span> per page</span>\n </Slot>\n ) : undefined;\n\n // Prepare pagination message for component\n const paginationMessage = paginationInfo ? (\n <Slot\n name=\"Pagination\"\n slot={slots?.Pagination}\n context={{\n currentPage: paginationInfo.currentPage,\n totalPages: paginationInfo.totalPages,\n onChange: handlePageChange,\n }}\n >\n <Pagination\n currentPage={paginationInfo.currentPage}\n totalPages={paginationInfo.totalPages}\n onChange={handlePageChange}\n />\n </Slot>\n ) : undefined;\n\n // Permission warning banner shown above the table/empty state\n const permissionWarningBanner = isAuthenticated && !hasPermission && !loading ? (\n <InLineAlert\n type=\"warning\"\n variant=\"primary\"\n heading={dictionary.noQuotesAccessTitle}\n data-testid=\"quotes-permission-warning\"\n >\n {dictionary.noQuotesAccessMessage}\n </InLineAlert>\n ) : null;\n\n return (\n <div {...props} className={props.className as string}>\n {permissionWarningBanner}\n <QuotesListTableComponent\n rowData={rowData}\n loading={loading}\n emptyStateMessage={emptyStateMessage}\n showItemRange={showItemRange && shouldShowPagination}\n itemRangeMessage={itemRangeMessage}\n showPageSizePicker={showPageSizePicker && shouldShowPagination}\n pageSizePickerMessage={pageSizePickerMessage}\n showPagination={showPagination && shouldShowPagination}\n paginationMessage={paginationMessage}\n />\n </div>\n );\n};\n"],"names":["QuotesListTable","rowData","loading","className","emptyStateMessage","showItemRange","itemRangeMessage","showPageSizePicker","pageSizePickerMessage","showPagination","paginationMessage","props","dictionary","useText","columns","shouldShowTable","shouldShowEmptyState","shouldShowItemRange","shouldShowPageSizePicker","shouldShowPagination","shouldShowFooter","jsxs","classes","jsx","Table","pageSize","onViewQuote","onPageSizeChange","onPageChange","slots","quotesData","setQuotesData","useState","setLoading","hasPermission","setHasPermission","isAuthenticated","setIsAuthenticated","hasPermissionRef","useRef","defaultPageSize","getDefaultPageSizeOptions","currentPageSize","setCurrentPageSize","currentPage","setCurrentPage","useEffect","fetchQuotes","data","negotiableQuotes","error","unsubscribe","events","authenticated","permissions","canViewQuotes","handlePageSizeChange","newPageSize","handlePageChange","newPage","handlePageSizeSelect","event","target","value","prepareRowData","quotes","quote","createdByName","Slot","formattedDate","Price","_b","_a","_d","_c","Button","paginationInfo","IllustratedMessage","Picker","size","Pagination","permissionWarningBanner","InLineAlert","QuotesListTableComponent"],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import { HTMLAttributes } from 'preact/compat';
2
2
  import { Container, SlotProps } from '@dropins/tools/types/elsie/src/lib';
3
3
  import { requestNegotiableQuote } from '../../api';
4
+ import { AttachedFile } from '../../components';
4
5
 
5
6
  export type RequestNegotiableQuoteHandlers = {
6
7
  onAttachFiles?: (files: File[]) => Promise<void>;
@@ -15,6 +16,9 @@ export type RequestNegotiableQuoteHandlers = {
15
16
  };
16
17
  export interface RequestNegotiableQuoteFormProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onError'>, RequestNegotiableQuoteHandlers {
17
18
  cartId: string;
19
+ maxFiles?: number;
20
+ maxFileSize?: number;
21
+ acceptedFileTypes?: string[];
18
22
  slots?: {
19
23
  ErrorBanner?: SlotProps<{
20
24
  message: string;
@@ -39,6 +43,12 @@ export interface RequestNegotiableQuoteFormProps extends Omit<HTMLAttributes<HTM
39
43
  onChange: (files: File[]) => void;
40
44
  formErrors: Record<string, string>;
41
45
  isFormDisabled: boolean;
46
+ attachedFiles: AttachedFile[];
47
+ }>;
48
+ AttachedFilesList?: SlotProps<{
49
+ files: AttachedFile[];
50
+ onRemove: (key: string) => void;
51
+ disabled?: boolean;
42
52
  }>;
43
53
  RequestButton?: SlotProps<{
44
54
  requestNegotiableQuote: typeof requestNegotiableQuote;
@@ -1,4 +1,4 @@
1
1
  /*! Copyright 2025 Adobe
2
2
  All Rights Reserved. */
3
- import{jsxs as P,jsx as t}from"@dropins/tools/preact-jsx-runtime.js";import*as s from"@dropins/tools/preact-compat.js";import{useState as q,useEffect as R,useCallback as ae}from"@dropins/tools/preact-compat.js";import{classes as u,VComponent as h,Slot as N,getFormErrors as j,getFormValues as re}from"@dropins/tools/lib.js";import{TextArea as oe,Field as ne,Input as ie,InputFile as se,Button as z,InLineAlert as ce}from"@dropins/tools/components.js";import{events as I}from"@dropins/tools/event-bus.js";import{r as w}from"../chunks/requestNegotiableQuote.js";import{useText as ue}from"@dropins/tools/i18n.js";import"@dropins/tools/fetch-graphql.js";const me=i=>s.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},s.createElement("g",{id:"Large"},s.createElement("rect",{id:"Placement_area","data-name":"Placement area",width:24,height:24,fill:"#fff",opacity:0}),s.createElement("g",{id:"Add_icon","data-name":"Add icon",transform:"translate(9.734 9.737)"},s.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"}),s.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"})))),de=i=>s.createElement("svg",{width:24,height:24,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",...i},s.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"}),s.createElement("path",{vectorEffect:"non-scaling-stroke",d:"M6.75 12.762L10.2385 15.75L17.25 9",stroke:"currentColor"})),le=i=>s.createElement("svg",{width:24,height:24,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",...i},s.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"})),fe=({className:i,title:e,banner:C,commentField:_,quoteNameField:l,attachFile:c,requestButton:f,saveButton:x,onSubmit:F,...E})=>P("form",{...E,className:u(["request-negotiable-quote-form",i]),onSubmit:F,children:[C&&t(h,{node:C,className:u(["request-negotiable-quote-form__banner"])}),e&&t(h,{node:e,className:u(["request-negotiable-quote-form__title"])}),_&&t(h,{node:_,className:u(["request-negotiable-quote-form__comment-field"])}),l&&t(h,{node:l,className:u(["request-negotiable-quote-form__quote-name-field"])}),c&&t(h,{node:c,className:u(["request-negotiable-quote-form__attach-file-field"])}),P("div",{className:u(["request-negotiable-quote-form__actions"]),children:[f&&t(h,{node:f,className:u(["request-negotiable-quote-form__request-button"])}),x&&t(h,{node:x,className:u(["request-negotiable-quote-form__save-button"])})]})]}),_e=({cartId:i,slots:e,onRequestNegotiableQuote:C,onSaveNegotiableQuote:_,onAttachFiles:l,onSubmitErrors:c,onError:f,className:x})=>{const[F,E]=q(void 0),[H,Z]=q(void 0),[,T]=q([]),[b,v]=q(void 0),[m,p]=q({}),[B,O]=q(void 0),[n,g]=q(!1),o=ue({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 a=I.on("quote-management/permissions",r=>{v(void 0),r.requestQuote||(v(o.unauthorized),g(!0))},{eager:!0});return()=>a==null?void 0:a.off()},[o.unauthorized]),R(()=>{const a=I.on("authenticated",r=>{v(void 0),r||(v(o.unauthenticated),g(!0))},{eager:!0});return()=>a==null?void 0:a.off()},[o.unauthenticated]),R(()=>{i||(v(o.missingCart),g(!0))},[i,o.missingCart]),R(()=>{b&&(f==null||f({error:b,isFormDisabled:n,setIsFormDisabled:g}))},[b,f,n]);const D=ae(async a=>{var r;p(d=>({...d,attachments:""})),T(a),(r=l==null?void 0:l(a))==null||r.catch(()=>{p(d=>({...d,attachments:o.attachmentsError}))})},[l,o]),W=()=>{let a,r;if(B?(r={name:"SuccessBanner",slot:e==null?void 0:e.SuccessBanner,context:{message:B},"data-testid":"form-success-banner"},a={type:"success",variant:"primary",icon:t(de,{}),heading:o.successHeader,description:B,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"},a={type:"error",variant:"primary",icon:t(le,{}),heading:o.errorHeader,description:b,className:"request-negotiable-quote-form__error-banner"}),r&&a)return t(N,{...r,children:t(ce,{...a})})},M=a=>{p({});const r=a.target.closest("form"),d=j(r);Object.keys(d).length>0&&(p(d),c==null||c(d))},$=a=>{var V;a.preventDefault(),g(!0);const r=a.target,A={...j(r),...m};if(Object.keys(A).length>0){c==null||c(A);return}const k=a.submitter,Q=re(r);E(Q.comment),Z(Q.quoteName);const S=((V=k==null?void 0:k.dataset)==null?void 0:V.draft)==="true"||!1,ee={cartId:i,quoteName:Q.quoteName,comment:Q.comment,isDraft:S};let y,L;S?(y=_??w,L=o.draftSuccess):(y=C??w,L=o.submitSuccess),y(ee).then(()=>{O(L)}).catch(te=>{v(te.message)})},G=t(N,{name:"Title",slot:e==null?void 0:e.Title,context:{text:o.title},children:t("span",{"data-testid":"form-title",children:o.title})}),J=t(N,{name:"CommentField",slot:e==null?void 0:e.CommentField,context:{value:F,required:!0,errorMessage:m.comment,setFormErrors:p,isFormDisabled:n},children:t(oe,{name:"comment",value:F,label:o.comment,required:!0,autoComplete:"off","data-testid":"form-comment-field",errorMessage:m.comment,disabled:n})}),K=t(N,{name:"QuoteNameField",slot:e==null?void 0:e.QuoteNameField,context:{value:H,required:!0,errorMessage:m.quoteName,setFormErrors:p,isFormDisabled:n},children:t(ne,{error:m.quoteName,disabled:n,children:t(ie,{value:H,name:"quoteName",floatingLabel:o.quoteName,required:!0,autoComplete:"off","data-testid":"form-quote-name-field"})})}),U=t(N,{name:"AttachFileField",slot:e==null?void 0:e.AttachFileField,context:{onChange:D,formErrors:m,isFormDisabled:n},children:t(se,{onChange:a=>{const r=Array.from(a.target.files);r.length>0&&D(r)},icon:t(me,{}),disabled:n,"data-testid":"form-attach-file-field"})}),X=t(N,{name:"RequestButton",slot:e==null?void 0:e.RequestButton,context:{requestNegotiableQuote:w,formErrors:m,isFormDisabled:n,setIsFormDisabled:g},children:t(z,{type:"submit","data-testid":"form-request-button",onClick:M,disabled:n,children:o.requestCta})}),Y=t(N,{name:"SaveDraftButton",slot:e==null?void 0:e.SaveDraftButton,context:{requestNegotiableQuote:w,formErrors:m,isFormDisabled:n,setIsFormDisabled:g},children:t(z,{type:"submit","data-draft":"true",variant:"secondary","data-testid":"form-save-draft-button",onClick:M,disabled:n,children:o.saveDraftCta})});return t(fe,{title:G,banner:W(),commentField:J,quoteNameField:K,attachFile:U,requestButton:X,saveButton:Y,onSubmit:$,className:x,disabled:n,"data-testid":"form-container"})};export{_e as RequestNegotiableQuoteForm,_e 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 } 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 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 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 [, setAttachments] = useState<File[]>([]);\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 setFormErrors(prev => ({ ...prev, attachments: '' }));\n setAttachments(files);\n onAttachFiles?.(files)?.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 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 }}\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 );\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","slots","onRequestNegotiableQuote","onSaveNegotiableQuote","onAttachFiles","onSubmitErrors","onError","comment","setComment","useState","quoteName","setQuoteName","setAttachments","error","setError","formErrors","setFormErrors","success","setSuccess","isFormDisabled","setIsFormDisabled","dictionary","useText","useEffect","permissionsEvent","events","permissions","authenticatedEvent","authenticated","handleAttachFiles","useCallback","files","prev","_a","getBannerNode","inlineAlertProps","slotProps","CheckWithCircle","WarningFilled","Slot","InLineAlert","validateParentForm","e","closestForm","getFormErrors","formSubmitHandler","form","mergedFormErrors","buttonTarget","formValues","getFormValues","isDraft","contextData","submitHandler","successMessage","requestNegotiableQuote","titleNode","commentFieldNode","TextArea","quoteNameFieldNode","Field","Input","attachFileNode","InputFile","Add","requestButtonNode","Button","saveButtonNode","RequestNegotiableQuoteFormComponent"],"mappings":"0oBACA,MAAMA,GAAUC,GAA0BC,EAAM,cAAc,MAAO,CAAE,GAAI,gBAAiB,YAAa,gCAAiC,MAAO,6BAA8B,MAAO,GAAI,OAAQ,GAAI,QAAS,YAAa,GAAGD,GAAyBC,EAAM,cAAc,IAAK,CAAE,GAAI,OAAO,EAAoBA,EAAM,cAAc,OAAQ,CAAE,GAAI,iBAAkB,YAAa,iBAAkB,MAAO,GAAI,OAAQ,GAAI,KAAM,OAAQ,QAAS,CAAC,CAAE,EAAmBA,EAAM,cAAc,IAAK,CAAE,GAAI,WAAY,YAAa,WAAY,UAAW,wBAAwB,EAAoBA,EAAM,cAAc,OAAQ,CAAE,aAAc,qBAAsB,GAAI,WAAY,YAAa,WAAY,GAAI,KAAM,UAAW,0BAA2B,KAAM,OAAQ,OAAQ,cAAc,CAAE,EAAmBA,EAAM,cAAc,OAAQ,CAAE,aAAc,qBAAsB,GAAI,WAAY,YAAa,WAAY,GAAI,KAAM,UAAW,0BAA2B,KAAM,OAAQ,OAAQ,eAAgB,CAAC,CAAC,CAAC,ECAt9BC,GAAsBF,GAA0BC,EAAM,cAAc,MAAO,CAAE,MAAO,GAAI,OAAQ,GAAI,QAAS,YAAa,KAAM,OAAQ,MAAO,6BAA8B,GAAGD,CAAK,EAAoBC,EAAM,cAAc,OAAQ,CAAE,aAAc,qBAAsB,EAAG,0JAA2J,OAAQ,cAAc,CAAE,EAAmBA,EAAM,cAAc,OAAQ,CAAE,aAAc,qBAAsB,EAAG,qCAAsC,OAAQ,cAAc,CAAE,CAAC,ECAxlBE,GAAoBH,GAA0BC,EAAM,cAAc,MAAO,CAAE,MAAO,GAAI,OAAQ,GAAI,QAAS,YAAa,KAAM,OAAQ,MAAO,6BAA8B,GAAGD,CAAK,EAAoBC,EAAM,cAAc,OAAQ,CAAE,aAAc,qBAAsB,SAAU,UAAW,SAAU,UAAW,EAAG,yJAA0J,KAAM,cAAc,CAAE,CAAC,ECwBheG,GAAiF,CAAC,CAC7F,UAAAC,EACA,MAAAC,EACA,OAAAC,EACA,aAAAC,EACA,eAAAC,EACA,WAAAC,EACA,cAAAC,EACA,WAAAC,EACA,SAAAC,EACA,GAAGb,CACL,IAEIc,EAAC,OAAA,CAAM,GAAGd,EAAO,UAAWe,EAAQ,CAAC,gCAAiCV,CAAS,CAAC,EAAG,SAAAQ,EAChF,SAAA,CAAAN,GACCS,EAACC,EAAA,CACC,KAAMV,EACN,UAAWQ,EAAQ,CAAC,uCAAuC,CAAC,CAAA,CAAA,EAG/DT,GACCU,EAACC,EAAA,CACC,KAAMX,EACN,UAAWS,EAAQ,CAAC,sCAAsC,CAAC,CAAA,CAAA,EAG9DP,GACCQ,EAACC,EAAA,CACC,KAAMT,EACN,UAAWO,EAAQ,CAAC,8CAA8C,CAAC,CAAA,CAAA,EAGtEN,GACCO,EAACC,EAAA,CACC,KAAMR,EACN,UAAWM,EAAQ,CAAC,iDAAiD,CAAC,CAAA,CAAA,EAGzEL,GACCM,EAACC,EAAA,CACC,KAAMP,EACN,UAAWK,EAAQ,CAAC,kDAAkD,CAAC,CAAA,CAAA,IAG1E,MAAA,CAAI,UAAWA,EAAQ,CAAC,wCAAwC,CAAC,EAC/D,SAAA,CAAAJ,GACCK,EAACC,EAAA,CACC,KAAMN,EACN,UAAWI,EAAQ,CAAC,+CAA+C,CAAC,CAAA,CAAA,EAGvEH,GACCI,EAACC,EAAA,CACC,KAAML,EACN,UAAWG,EAAQ,CAAC,4CAA4C,CAAC,CAAA,CAAA,CACnE,CAAA,CAEJ,CAAA,EACF,ECTSX,GAAyE,CAAC,CACrF,OAAAc,EACA,MAAAC,EACA,yBAAAC,EACA,sBAAAC,EACA,cAAAC,EACA,eAAAC,EACA,QAAAC,EACA,UAAAnB,CACF,IAAM,CACJ,KAAM,CAACoB,EAASC,CAAU,EAAIC,EAA6B,MAAS,EAC9D,CAACC,EAAWC,CAAY,EAAIF,EAA6B,MAAS,EAClE,EAAGG,CAAc,EAAIH,EAAiB,EAAE,EACxC,CAACI,EAAOC,CAAQ,EAAIL,EAA6B,MAAS,EAC1D,CAACM,EAAYC,CAAa,EAAIP,EAAiC,CAAA,CAAE,EACjE,CAACQ,EAASC,CAAU,EAAIT,EAA6B,MAAS,EAC9D,CAACU,EAAgBC,CAAiB,EAAIX,EAAkB,EAAK,EAE7DY,EAAaC,GAAQ,CACzB,MAAO,gCACP,QAAS,kCACT,aAAc,uCACd,UAAW,oCACX,eAAgB,yCAChB,iBAAkB,2CAClB,WAAY,qCACZ,aAAc,uCACd,YAAa,uCACb,gBAAiB,gDACjB,aAAc,6CACd,YAAa,4CACb,cAAe,yCACf,cAAe,4CACf,aAAc,4CAAA,CACf,EAEDC,EAAU,IAAM,CACd,MAAMC,EAAmBC,EAAO,GAC9B,+BACCC,GAA0C,CACzCZ,EAAS,MAAS,EACbY,EAAY,eACfZ,EAASO,EAAW,YAAY,EAChCD,EAAkB,EAAI,EAE1B,EACA,CAAE,MAAO,EAAA,CAAK,EAEhB,MAAO,IAAMI,GAAA,YAAAA,EAAkB,KACjC,EAAG,CAACH,EAAW,YAAY,CAAC,EAE5BE,EAAU,IAAM,CACd,MAAMI,EAAqBF,EAAO,GAChC,gBACCG,GAA2B,CAC1Bd,EAAS,MAAS,EACbc,IACHd,EAASO,EAAW,eAAe,EACnCD,EAAkB,EAAI,EAE1B,EACA,CAAE,MAAO,EAAA,CAAK,EAEhB,MAAO,IAAMO,GAAA,YAAAA,EAAoB,KACnC,EAAG,CAACN,EAAW,eAAe,CAAC,EAE/BE,EAAU,IAAM,CACTvB,IACHc,EAASO,EAAW,WAAW,EAC/BD,EAAkB,EAAI,EAE1B,EAAG,CAACpB,EAAQqB,EAAW,WAAW,CAAC,EAEnCE,EAAU,IAAM,CACVV,IACFP,GAAA,MAAAA,EAAU,CAAE,MAAAO,EAAO,eAAAM,EAAgB,kBAAAC,CAAA,GAEvC,EAAG,CAACP,EAAOP,EAASa,CAAc,CAAC,EAEnC,MAAMU,EAAoBC,GAAY,MAAOC,GAAkB,OAC7Df,MAAuB,CAAE,GAAGgB,EAAM,YAAa,IAAK,EACpDpB,EAAemB,CAAK,GACpBE,EAAA7B,GAAA,YAAAA,EAAgB2B,KAAhB,MAAAE,EAAwB,MAAM,IAAM,CAClCjB,MAAuB,CAAE,GAAGgB,EAAM,YAAaX,EAAW,kBAAmB,CAC/E,EACF,EAAG,CAACjB,EAAeiB,CAAU,CAAC,EAMxBa,EAAgB,IAAM,CAC1B,IAAIC,EACAC,EAuCJ,GArCInB,GACFmB,EAAY,CACV,KAAM,gBACN,KAAMnC,GAAA,YAAAA,EAAO,cACb,QAAS,CACP,QAASgB,CAAA,EAEX,cAAe,qBAAA,EAEjBkB,EAAmB,CACjB,KAAM,UACN,QAAS,UACT,OAAOE,GAAA,EAAgB,EACvB,QAAShB,EAAW,cACpB,YAAaJ,EACb,UAAW,+CAAA,GAGNJ,IACPuB,EAAY,CACV,KAAM,cACN,KAAMnC,GAAA,YAAAA,EAAO,YACb,QAAS,CACP,QAASY,CAAA,EAEX,cAAe,mBAAA,EAEjBsB,EAAmB,CACjB,KAAM,QACN,QAAS,UACT,OAAOG,GAAA,EAAc,EACrB,QAASjB,EAAW,YACpB,YAAaR,EACb,UAAW,6CAAA,GAIXuB,GAAaD,EACf,OAAOrC,EAACyC,GAAM,GAAGH,EACf,WAACI,GAAA,CAAa,GAAGL,EAAkB,CAAA,CACrC,CAIJ,EAKMM,EAAsBC,GAAa,CACvC1B,EAAc,CAAA,CAAE,EAChB,MAAM2B,EAAeD,EAAE,OAAuB,QAAQ,MAAM,EACtD3B,EAAa6B,EAAcD,CAAW,EACxC,OAAO,KAAK5B,CAAU,EAAE,OAAS,IACnCC,EAAcD,CAAU,EACxBV,GAAA,MAAAA,EAAiBU,GAErB,EAEM8B,EAAqBH,GAAa,OACtCA,EAAE,eAAA,EACFtB,EAAkB,EAAI,EAEtB,MAAM0B,EAAQJ,EAAE,OAIVK,EAAmB,CAAE,GAFDH,EAAcE,CAAI,EAEK,GAAG/B,CAAA,EAEpD,GAAI,OAAO,KAAKgC,CAAgB,EAAE,OAAS,EAAG,CAC5C1C,GAAA,MAAAA,EAAiB0C,GACjB,MACF,CAGA,MAAMC,EAAgBN,EAAkB,UAElCO,EAAaC,GAAcJ,CAAI,EAErCtC,EAAWyC,EAAW,OAAO,EAC7BtC,EAAasC,EAAW,SAAS,EAEjC,MAAME,IAAUlB,EAAAe,GAAA,YAAAA,EAAc,UAAd,YAAAf,EAAuB,SAAU,QAAU,GAErDmB,GAA2C,CAC/C,OAAApD,EACA,UAAWiD,EAAW,UACtB,QAASA,EAAW,QACpB,QAAAE,CAAA,EAGF,IAAIE,EACAC,EAEAH,GACFE,EAAgBlD,GAAyBoD,EACzCD,EAAiBjC,EAAW,eAE5BgC,EAAgBnD,GAA4BqD,EAC5CD,EAAiBjC,EAAW,eAG9BgC,EAAcD,EAAW,EAAE,KAAK,IAAM,CACpClC,EAAWoC,CAAc,CAC3B,CAAC,EACE,MAAMzC,IAAS,CACdC,EAASD,GAAM,OAAO,CACxB,CAAC,CACL,EAEM2C,IACHjB,EAAA,CAAK,KAAK,QAAQ,KAAMtC,GAAA,YAAAA,EAAO,MAAO,QAAS,CAAE,KAAMoB,EAAW,OACjE,SAAAvB,EAAC,OAAA,CAAK,cAAY,aAAc,SAAAuB,EAAW,MAAM,CAAA,CACnD,EAGIoC,EACJ3D,EAACyC,EAAA,CACC,KAAK,eACL,KAAMtC,GAAA,YAAAA,EAAO,aACb,QAAS,CACP,MAAOM,EACP,SAAU,GACV,aAAcQ,EAAW,QACzB,cAAAC,EACA,eAAAG,CAAA,EAGF,SAAArB,EAAC4D,GAAA,CACC,KAAK,UACL,MAAOnD,EACP,MAAOc,EAAW,QAClB,SAAQ,GACR,aAAa,MACb,cAAY,qBACZ,aAAcN,EAAW,QACzB,SAAUI,CAAA,CAAA,CACZ,CAAA,EAIEwC,EACJ7D,EAACyC,EAAA,CACC,KAAK,iBACL,KAAMtC,GAAA,YAAAA,EAAO,eACb,QAAS,CACP,MAAOS,EACP,SAAU,GACV,aAAcK,EAAW,UACzB,cAAAC,EACA,eAAAG,CAAA,EAGF,SAAArB,EAAC8D,GAAA,CACC,MAAO7C,EAAW,UAClB,SAAUI,EAEV,SAAArB,EAAC+D,GAAA,CACC,MAAOnD,EACP,KAAK,YACL,cAAeW,EAAW,UAC1B,SAAQ,GACR,aAAa,MACb,cAAY,uBAAA,CAAA,CACd,CAAA,CACF,CAAA,EAIEyC,EACJhE,EAACyC,EAAA,CACC,KAAK,kBACL,KAAMtC,GAAA,YAAAA,EAAO,gBACb,QAAS,CAAE,SAAU4B,EAAmB,WAAAd,EAAY,eAAAI,CAAA,EAEpD,SAAArB,EAACiE,GAAA,CACC,SAAWrB,GAAW,CACpB,MAAMX,EAAQ,MAAM,KAAOW,EAAE,OAA4B,KAAO,EAE5DX,EAAM,OAAS,GACjBF,EAAkBE,CAAK,CAE3B,EACA,OAAOiC,GAAA,EAAI,EACX,SAAU7C,EACV,cAAY,wBAAA,CAAA,CACd,CAAA,EAIE8C,EACJnE,EAACyC,EAAA,CACC,KAAK,gBACL,KAAMtC,GAAA,YAAAA,EAAO,cACb,QACE,CACE,uBAAAsD,EACA,WAAAxC,EACA,eAAAI,EACA,kBAAAC,CAAA,EAIJ,SAAAtB,EAACoE,EAAA,CACC,KAAK,SACL,cAAY,sBACZ,QAASzB,EACT,SAAUtB,EAET,SAAAE,EAAW,UAAA,CAAA,CACd,CAAA,EAIE8C,EACJrE,EAACyC,EAAA,CACC,KAAK,kBACL,KAAMtC,GAAA,YAAAA,EAAO,gBACb,QACE,CACE,uBAAAsD,EACA,WAAAxC,EACA,eAAAI,EACA,kBAAAC,CAAA,EAIJ,SAAAtB,EAACoE,EAAA,CACC,KAAK,SACL,aAAW,OACX,QAAQ,YACR,cAAY,yBACZ,QAASzB,EACT,SAAUtB,EAET,SAAAE,EAAW,YAAA,CAAA,CACd,CAAA,EAIJ,OACEvB,EAACsE,GAAA,CACC,MAAOZ,EACP,OAAQtB,EAAA,EACR,aAAcuB,EACd,eAAgBE,EAChB,WAAYG,EACZ,cAAeG,EACf,WAAYE,EACZ,SAAUtB,EACV,UAAA1D,EACA,SAAUgC,EACV,cAAY,gBAAA,CAAA,CAGlB","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 { ShippingAddress } from '../../data/models/negotiable-quote-model';
4
+
5
+ export interface ShippingAddressDisplayProps extends Omit<HTMLAttributes<HTMLDivElement>, 'loading'> {
6
+ shippingAddress?: ShippingAddress;
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 e}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"../chunks/WarningFilled.js";import"@dropins/tools/i18n.js";import"@dropins/tools/event-bus.js";export{e 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