@dropins/storefront-quote-management 1.0.0-beta1 → 1.0.0-beta3

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 (81) hide show
  1. package/api/duplicateNegotiableQuote/duplicateNegotiableQuote.d.ts +1 -0
  2. package/api/graphql/NegotiableQuoteTemplateFragment.d.ts +1 -1
  3. package/api/sendForReview/index.d.ts +1 -1
  4. package/api/sendQuoteTemplateForReview/sendQuoteTemplateForReview.d.ts +7 -0
  5. package/api.js +8 -47
  6. package/api.js.map +1 -1
  7. package/chunks/AttachedFilesList.js +1 -1
  8. package/chunks/AttachedFilesList.js.map +1 -1
  9. package/chunks/ConfirmationModal.js +1 -1
  10. package/chunks/ConfirmationModal.js.map +1 -1
  11. package/chunks/ItemsQuoted.js +1 -1
  12. package/chunks/ItemsQuoted.js.map +1 -1
  13. package/chunks/ItemsQuotedTemplate.js +1 -1
  14. package/chunks/ItemsQuotedTemplate.js.map +1 -1
  15. package/chunks/LineItemNoteModal.js +4 -0
  16. package/chunks/LineItemNoteModal.js.map +1 -0
  17. package/chunks/NegotiableQuoteTemplateFragment.js +6 -0
  18. package/chunks/NegotiableQuoteTemplateFragment.js.map +1 -1
  19. package/chunks/OrderSummaryLine.js +1 -1
  20. package/chunks/OrderSummaryLine.js.map +1 -1
  21. package/chunks/RenameQuoteModal.js +4 -0
  22. package/chunks/RenameQuoteModal.js.map +1 -0
  23. package/chunks/ShippingAddressDisplay.js +1 -1
  24. package/chunks/ShippingAddressDisplay.js.map +1 -1
  25. package/chunks/WarningFilled.js +1 -1
  26. package/chunks/WarningFilled.js.map +1 -1
  27. package/chunks/addQuoteTemplateLineItemNote.js +23 -3
  28. package/chunks/addQuoteTemplateLineItemNote.js.map +1 -1
  29. package/chunks/duplicateNegotiableQuote.js +5 -5
  30. package/chunks/duplicateNegotiableQuote.js.map +1 -1
  31. package/chunks/openQuoteTemplate.js +28 -8
  32. package/chunks/openQuoteTemplate.js.map +1 -1
  33. package/chunks/transform-quote-template.js +1 -1
  34. package/chunks/transform-quote-template.js.map +1 -1
  35. package/chunks/transform-quote.js +1 -1
  36. package/chunks/transform-quote.js.map +1 -1
  37. package/components/ManageNegotiableQuoteTemplate/ManageNegotiableQuoteTemplate.d.ts +3 -2
  38. package/components/ReferenceDocumentFormModal/ReferenceDocumentFormModal.d.ts +30 -0
  39. package/components/ReferenceDocumentFormModal/index.d.ts +11 -0
  40. package/components/ReferenceDocumentsList/ReferenceDocumentsList.d.ts +18 -0
  41. package/components/ReferenceDocumentsList/index.d.ts +11 -0
  42. package/components/index.d.ts +2 -0
  43. package/containers/ItemsQuoted.js +1 -1
  44. package/containers/ItemsQuotedTemplate/ItemsQuotedTemplate.d.ts +5 -1
  45. package/containers/ItemsQuotedTemplate.js +1 -1
  46. package/containers/ManageNegotiableQuote/ManageNegotiableQuote.d.ts +3 -0
  47. package/containers/ManageNegotiableQuote.js +1 -1
  48. package/containers/ManageNegotiableQuote.js.map +1 -1
  49. package/containers/ManageNegotiableQuoteTemplate/ManageNegotiableQuoteTemplate.d.ts +28 -5
  50. package/containers/ManageNegotiableQuoteTemplate.js +3 -1
  51. package/containers/ManageNegotiableQuoteTemplate.js.map +1 -1
  52. package/containers/OrderSummary.js +1 -1
  53. package/containers/OrderSummary.js.map +1 -1
  54. package/containers/OrderSummaryLine.js +1 -1
  55. package/containers/QuoteSummaryList.js +1 -1
  56. package/containers/QuoteSummaryList.js.map +1 -1
  57. package/containers/QuoteTemplatesListTable.js +1 -1
  58. package/containers/QuoteTemplatesListTable.js.map +1 -1
  59. package/containers/QuotesListTable.js +1 -1
  60. package/containers/QuotesListTable.js.map +1 -1
  61. package/containers/RequestNegotiableQuoteForm.js +1 -1
  62. package/containers/RequestNegotiableQuoteForm.js.map +1 -1
  63. package/containers/ShippingAddressDisplay/ShippingAddressDisplay.d.ts +2 -2
  64. package/data/models/negotiable-quote-template-model.d.ts +1 -0
  65. package/data/transforms/__fixtures__/negotiableQuoteData.d.ts +5 -0
  66. package/data/transforms/__fixtures__/negotiableQuoteTemplateData.d.ts +55 -0
  67. package/hooks/useItemsQuotedTemplate.d.ts +16 -0
  68. package/hooks/useReferenceDocumentLinks.d.ts +34 -0
  69. package/hooks/useRemoveTemplateItems.d.ts +25 -0
  70. package/hooks/useRenameTemplate.d.ts +71 -0
  71. package/hooks/useUpdateTemplateQuantities.d.ts +27 -0
  72. package/i18n/en_US.json.d.ts +85 -3
  73. package/package.json +1 -1
  74. package/render.js +3 -3
  75. package/render.js.map +1 -1
  76. package/chunks/CheckWithCircle.js +0 -4
  77. package/chunks/CheckWithCircle.js.map +0 -1
  78. package/chunks/LineItemNoteModal2.js +0 -4
  79. package/chunks/LineItemNoteModal2.js.map +0 -1
  80. package/chunks/TabbedContent.js +0 -4
  81. package/chunks/TabbedContent.js.map +0 -1
@@ -198,6 +198,7 @@ export declare const mockQuoteData: {
198
198
  }[];
199
199
  };
200
200
  quantity: number;
201
+ is_available: boolean;
201
202
  note_from_buyer: {
202
203
  created_at: string;
203
204
  creator_id: number;
@@ -282,6 +283,7 @@ export declare const mockQuoteData: {
282
283
  discounts: never[];
283
284
  };
284
285
  quantity: number;
286
+ is_available: boolean;
285
287
  configurable_options: {
286
288
  option_label: string;
287
289
  value_label: string;
@@ -296,6 +298,7 @@ export declare const mockQuoteData: {
296
298
  }[];
297
299
  note_from_seller: never[];
298
300
  configured_variant: {
301
+ stock_status: string;
299
302
  thumbnail: {
300
303
  label: string;
301
304
  url: string;
@@ -400,6 +403,7 @@ export declare const mockQuoteData: {
400
403
  }[];
401
404
  };
402
405
  quantity: number;
406
+ is_available: boolean;
403
407
  bundle_options: {
404
408
  label: string;
405
409
  values: {
@@ -511,6 +515,7 @@ export declare const mockQuoteData: {
511
515
  }[];
512
516
  };
513
517
  quantity: number;
518
+ is_available: boolean;
514
519
  links: {
515
520
  sort_order: number;
516
521
  title: string;
@@ -314,6 +314,17 @@ export declare const mockQuoteTemplateData: {
314
314
  };
315
315
  telephone: string;
316
316
  }[];
317
+ reference_document_links: ({
318
+ link_id: string;
319
+ document_name: string;
320
+ document_identifier: string;
321
+ reference_document_url: string;
322
+ } | {
323
+ link_id: string;
324
+ document_name: string;
325
+ reference_document_url: string;
326
+ document_identifier?: undefined;
327
+ })[];
317
328
  };
318
329
  export declare const mockMinimalQuoteTemplateData: {
319
330
  template_id: string;
@@ -636,6 +647,17 @@ export declare const mockSubmittedQuoteTemplateData: {
636
647
  };
637
648
  telephone: string;
638
649
  }[];
650
+ reference_document_links: ({
651
+ link_id: string;
652
+ document_name: string;
653
+ document_identifier: string;
654
+ reference_document_url: string;
655
+ } | {
656
+ link_id: string;
657
+ document_name: string;
658
+ reference_document_url: string;
659
+ document_identifier?: undefined;
660
+ })[];
639
661
  };
640
662
  export declare const mockInReviewQuoteTemplateData: {
641
663
  template_id: string;
@@ -945,6 +967,17 @@ export declare const mockInReviewQuoteTemplateData: {
945
967
  };
946
968
  telephone: string;
947
969
  }[];
970
+ reference_document_links: ({
971
+ link_id: string;
972
+ document_name: string;
973
+ document_identifier: string;
974
+ reference_document_url: string;
975
+ } | {
976
+ link_id: string;
977
+ document_name: string;
978
+ reference_document_url: string;
979
+ document_identifier?: undefined;
980
+ })[];
948
981
  };
949
982
  export declare const mockClosedQuoteTemplateData: {
950
983
  template_id: string;
@@ -1254,6 +1287,17 @@ export declare const mockClosedQuoteTemplateData: {
1254
1287
  };
1255
1288
  telephone: string;
1256
1289
  }[];
1290
+ reference_document_links: ({
1291
+ link_id: string;
1292
+ document_name: string;
1293
+ document_identifier: string;
1294
+ reference_document_url: string;
1295
+ } | {
1296
+ link_id: string;
1297
+ document_name: string;
1298
+ reference_document_url: string;
1299
+ document_identifier?: undefined;
1300
+ })[];
1257
1301
  };
1258
1302
  export declare const mockInactiveQuoteTemplateData: {
1259
1303
  template_id: string;
@@ -1563,6 +1607,17 @@ export declare const mockInactiveQuoteTemplateData: {
1563
1607
  };
1564
1608
  telephone: string;
1565
1609
  }[];
1610
+ reference_document_links: ({
1611
+ link_id: string;
1612
+ document_name: string;
1613
+ document_identifier: string;
1614
+ reference_document_url: string;
1615
+ } | {
1616
+ link_id: string;
1617
+ document_name: string;
1618
+ reference_document_url: string;
1619
+ document_identifier?: undefined;
1620
+ })[];
1566
1621
  };
1567
1622
  export declare const mockQuoteTemplateListData: {
1568
1623
  items: {
@@ -0,0 +1,16 @@
1
+ import { ProductListTableItem } from '../components';
2
+ import { QuoteTemplateCartItem } from '../data/models/negotiable-quote-template-model';
3
+
4
+ export interface UseItemsQuotedTemplateReturn {
5
+ dropdownSelections: Record<string, string | undefined>;
6
+ handleItemDropdownChange: (item: ProductListTableItem, action: string) => void;
7
+ handleDismissRemoveBanner: () => void;
8
+ }
9
+ export interface UseItemsQuotedTemplateParams {
10
+ handleRemoveItems: (items: QuoteTemplateCartItem[]) => void;
11
+ }
12
+ /**
13
+ * Custom hook to manage dropdown selections and item actions for quote template items
14
+ */
15
+ export declare const useItemsQuotedTemplate: (params: UseItemsQuotedTemplateParams) => UseItemsQuotedTemplateReturn;
16
+ //# sourceMappingURL=useItemsQuotedTemplate.d.ts.map
@@ -0,0 +1,34 @@
1
+ import { ReferenceDocument } from '../components';
2
+ import { ReferenceDocumentLinkInput } from '../api/sendQuoteTemplateForReview/sendQuoteTemplateForReview';
3
+
4
+ export interface UseReferenceDocumentLinksParams {
5
+ templateReferenceDocuments?: ReferenceDocument[];
6
+ localReferenceDocuments: ReferenceDocument[];
7
+ }
8
+ export interface UseReferenceDocumentLinksReturn {
9
+ /**
10
+ * Checks if a document exists in the template reference documents.
11
+ * Matches by uid if both documents have it, otherwise matches by url.
12
+ */
13
+ isDocumentInTemplateData: (document: ReferenceDocument) => boolean;
14
+ /**
15
+ * Returns documents from localReferenceDocuments that are not in templateReferenceDocuments.
16
+ */
17
+ getNewDocuments: () => ReferenceDocument[];
18
+ /**
19
+ * Transforms all reference documents to API format.
20
+ */
21
+ getReferenceDocumentLinks: () => ReferenceDocumentLinkInput[];
22
+ /**
23
+ * Indicates if there are unsaved changes (new documents, removed documents, or modified documents).
24
+ */
25
+ hasUnsavedChanges: boolean;
26
+ }
27
+ /**
28
+ * Custom hook to manage reference document links logic.
29
+ * Handles document matching, filtering new documents, transformation to API format,
30
+ * and detection of unsaved changes (new, removed, or modified documents).
31
+ * Note: getReferenceDocumentLinks() returns all local reference documents, not just new ones.
32
+ */
33
+ export declare const useReferenceDocumentLinks: (params: UseReferenceDocumentLinksParams) => UseReferenceDocumentLinksReturn;
34
+ //# sourceMappingURL=useReferenceDocumentLinks.d.ts.map
@@ -0,0 +1,25 @@
1
+ import { QuoteTemplateCartItem } from '../data/models/negotiable-quote-template-model';
2
+
3
+ export interface UseRemoveTemplateItemsReturn {
4
+ handleRemoveItems: (items: QuoteTemplateCartItem[]) => void;
5
+ handleConfirmRemove: () => Promise<void>;
6
+ handleCancelRemove: () => void;
7
+ isRemoveModalOpen: boolean;
8
+ itemsToRemove: QuoteTemplateCartItem[];
9
+ isRemoving: boolean;
10
+ removeNotificationState: {
11
+ type: 'success' | 'error' | null;
12
+ message: string;
13
+ };
14
+ }
15
+ export interface UseRemoveTemplateItemsParams {
16
+ templateId?: string;
17
+ onRemoveModalStateChange?: (isOpen: boolean) => void;
18
+ removeSuccessMessage: string;
19
+ removeErrorMessage: string;
20
+ }
21
+ /**
22
+ * Custom hook to manage removing items from a quote template
23
+ */
24
+ export declare const useRemoveTemplateItems: (params: UseRemoveTemplateItemsParams) => UseRemoveTemplateItemsReturn;
25
+ //# sourceMappingURL=useRemoveTemplateItems.d.ts.map
@@ -0,0 +1,71 @@
1
+ /********************************************************************
2
+ * Copyright 2025 Adobe
3
+ * All Rights Reserved.
4
+ *
5
+ * NOTICE: Adobe permits you to use, modify, and distribute this
6
+ * file in accordance with the terms of the Adobe license agreement
7
+ * accompanying it.
8
+ *******************************************************************/
9
+ export interface UseRenameTemplateParams {
10
+ initialTemplateName?: string;
11
+ templateNameRequiredErrorMessage?: string;
12
+ }
13
+ export interface UseRenameTemplateReturn {
14
+ /**
15
+ * Whether the rename modal is currently open.
16
+ */
17
+ isRenameModalOpen: boolean;
18
+ /**
19
+ * The new template name entered by the user.
20
+ */
21
+ renameTemplateName: string;
22
+ /**
23
+ * The reason for renaming the template.
24
+ */
25
+ renameReason: string;
26
+ /**
27
+ * Error message for rename operation.
28
+ */
29
+ renameError: string;
30
+ /**
31
+ * Error message for template name validation.
32
+ */
33
+ renameTemplateNameError: string;
34
+ /**
35
+ * Success message for rename operation.
36
+ */
37
+ renameSuccess: string;
38
+ /**
39
+ * Opens the rename modal and initializes state with the current template name.
40
+ */
41
+ handleRenameClick: (currentTemplateName?: string) => void;
42
+ /**
43
+ * Closes the rename modal and resets all state.
44
+ */
45
+ handleRenameClose: () => void;
46
+ /**
47
+ * Updates the template name and clears any name-related errors.
48
+ */
49
+ handleRenameTemplateNameChange: (value: string) => void;
50
+ /**
51
+ * Updates the rename reason.
52
+ */
53
+ handleRenameReasonChange: (value: string) => void;
54
+ /**
55
+ * Validates and saves the rename. Closes the modal if validation passes.
56
+ * Does not make an API call - rename is tracked locally and included when submitting for review.
57
+ */
58
+ handleRenameSave: () => boolean;
59
+ /**
60
+ * Resets rename state (useful after successful submission).
61
+ */
62
+ resetRenameState: () => void;
63
+ }
64
+ /**
65
+ * Custom hook to manage quote template rename functionality.
66
+ * Handles state management for the rename modal, validation, and tracking rename changes.
67
+ * Note: This hook does not make API calls. The rename is tracked locally and should be
68
+ * included when calling sendQuoteTemplateForReview.
69
+ */
70
+ export declare const useRenameTemplate: (params?: UseRenameTemplateParams) => UseRenameTemplateReturn;
71
+ //# sourceMappingURL=useRenameTemplate.d.ts.map
@@ -0,0 +1,27 @@
1
+ import { ProductListTableItem } from '../components';
2
+
3
+ export interface UseUpdateTemplateQuantitiesReturn {
4
+ quantityChanges: Record<string, number>;
5
+ handleQuantityChange: (item: ProductListTableItem, newQuantity: number) => void;
6
+ handleUpdate: (e: SubmitEvent) => void;
7
+ handleConfirmUpdate: () => Promise<void>;
8
+ handleCancelUpdate: () => void;
9
+ handleDismissBanner: () => void;
10
+ isUpdateModalOpen: boolean;
11
+ isUpdating: boolean;
12
+ updateNotificationState: {
13
+ type: 'success' | 'error' | null;
14
+ message: string;
15
+ };
16
+ }
17
+ export interface UseUpdateTemplateQuantitiesParams {
18
+ templateId?: string;
19
+ onUpdateModalStateChange?: (isOpen: boolean) => void;
20
+ updateSuccessMessage: string;
21
+ updateErrorMessage: string;
22
+ }
23
+ /**
24
+ * Custom hook to manage updating quantities of items in a quote template
25
+ */
26
+ export declare const useUpdateTemplateQuantities: (params: UseUpdateTemplateQuantitiesParams) => UseUpdateTemplateQuantitiesReturn;
27
+ //# sourceMappingURL=useUpdateTemplateQuantities.d.ts.map
@@ -82,7 +82,9 @@ declare const _default: {
82
82
  "errorHeading": "Error",
83
83
  "errorFallback": "Failed to duplicate quote",
84
84
  "successHeading": "Success",
85
- "successDescription": "Quote has been successfully duplicated. You will be redirected to the new quote shortly."
85
+ "successDescription": "Quote has been successfully duplicated. You will be redirected to the new quote shortly.",
86
+ "outOfStockWarningHeading": "Alert",
87
+ "outOfStockWarningMessage": "Some items were skipped during duplication due to errors."
86
88
  },
87
89
  "close": {
88
90
  "message": "Are you sure you want to close this quote?",
@@ -267,8 +269,31 @@ declare const _default: {
267
269
  "createdLabel": "Created:",
268
270
  "salesRepLabel": "Sales Rep:",
269
271
  "expiresLabel": "Expires:",
272
+ "templateIdLabel": "Template ID:",
270
273
  "referenceDocuments": {
271
- "title": "Reference Documents"
274
+ "title": "Reference Documents",
275
+ "add": "Add",
276
+ "edit": "Edit",
277
+ "remove": "Remove",
278
+ "noReferenceDocuments": "No reference documents",
279
+ "form": {
280
+ "title": "Document Information",
281
+ "documentNameLabel": "Document name",
282
+ "documentIdentifierLabel": "Document identifier",
283
+ "referenceUrlLabel": "Reference URL",
284
+ "addButton": "Add to Quote Template",
285
+ "updateButton": "Update Document",
286
+ "cancelButton": "Cancel",
287
+ "documentNameRequired": "Document name is required",
288
+ "documentIdentifierRequired": "Document identifier is required",
289
+ "referenceUrlRequired": "Reference URL is required",
290
+ "invalidUrl": "Please enter a valid URL",
291
+ "errorHeading": "Error",
292
+ "duplicateUidError": "A document with this identifier already exists in the template. Please use a different identifier."
293
+ }
294
+ },
295
+ "shippingInformation": {
296
+ "title": "Shipping Information"
272
297
  },
273
298
  "comments": {
274
299
  "title": "Comments"
@@ -288,11 +313,52 @@ declare const _default: {
288
313
  "actionsLabel": "Actions",
289
314
  "actionButtons": {
290
315
  "sendForReview": "Send for review",
316
+ "delete": "Delete template",
317
+ "cancel": "Cancel template",
291
318
  "accept": "Accept",
292
319
  "generateQuote": "Generate quote"
293
320
  },
321
+ "removeItemsModal": {
322
+ "title": "Change Quote Template Items",
323
+ "description": "Making changes to any quote template item changes the terms of the template. After you update the template, return it to the seller for review and approval.",
324
+ "cancelButton": "Cancel",
325
+ "confirmButton": "Remove",
326
+ "confirmButtonRemoving": "Removing...",
327
+ "successHeading": "Success",
328
+ "successMessage": "Quote template items have been successfully removed.",
329
+ "errorHeading": "Error",
330
+ "errorMessage": "Failed to remove quote template items. Please try again."
331
+ },
332
+ "updateQuantitiesModal": {
333
+ "title": "Change Quote Template Items",
334
+ "description": "Making changes to any quote template item changes the terms of the template. After you update the template, return it to the seller for review and approval.",
335
+ "cancelButton": "Cancel",
336
+ "updateButton": "Apply Changes",
337
+ "successHeading": "Success",
338
+ "successMessage": "Quote template quantities have been successfully updated.",
339
+ "errorHeading": "Error",
340
+ "errorMessage": "Failed to update quote template quantities. Please try again."
341
+ },
294
342
  "confirmationModal": {
295
343
  "cancel": "Cancel",
344
+ "delete": {
345
+ "title": "Delete Quote Template",
346
+ "message": "Are you sure you want to delete this quote template?",
347
+ "confirm": "Delete",
348
+ "errorHeading": "Error",
349
+ "errorFallback": "Failed to delete quote template",
350
+ "successHeading": "Success",
351
+ "successDescription": "Quote template has been successfully deleted"
352
+ },
353
+ "cancelTemplate": {
354
+ "title": "Cancel Quote Template",
355
+ "message": "Are you sure you want to cancel this quote template?",
356
+ "confirm": "Cancel Template",
357
+ "errorHeading": "Error",
358
+ "errorFallback": "Failed to cancel quote template",
359
+ "successHeading": "Success",
360
+ "successDescription": "Quote template has been successfully cancelled"
361
+ },
296
362
  "accept": {
297
363
  "title": "Accept Quote Template",
298
364
  "message": "Are you sure you want to accept this quote template?",
@@ -324,7 +390,23 @@ declare const _default: {
324
390
  },
325
391
  "lineItemNoteModal": {
326
392
  "errorHeading": "Error"
327
- }
393
+ },
394
+ "rename": {
395
+ "title": "Rename Quote Template",
396
+ "templateNameLabel": "Template name",
397
+ "reasonLabel": "Reason for change",
398
+ "renameButton": "Rename",
399
+ "cancelButton": "Cancel",
400
+ "errorHeading": "Error",
401
+ "templateNameRequired": "Template name is required",
402
+ "errorDefault": "Failed to rename quote template. Please try again.",
403
+ "successHeading": "Success",
404
+ "successMessage": "Quote template renamed successfully!"
405
+ },
406
+ "unsavedChangesWarningHeading": "Unsaved Changes",
407
+ "unsavedChangesWarningMessage": "The quote template must be submitted for review to save the changes.",
408
+ "shippingAddressWarningHeading": "No Shipping Address",
409
+ "shippingAddressWarningMessage": "No shipping address has been set for this quote template."
328
410
  }
329
411
  },
330
412
  "historyLog": {
package/package.json CHANGED
@@ -1 +1 @@
1
- {"name": "@dropins/storefront-quote-management", "version": "1.0.0-beta1", "@dropins/tools": "1.6.0-beta3", "license": "SEE LICENSE IN LICENSE.md"}
1
+ {"name": "@dropins/storefront-quote-management", "version": "1.0.0-beta3", "@dropins/tools": "1.6.0-beta3", "license": "SEE LICENSE IN LICENSE.md"}