@vendure/admin-ui 1.7.4 → 1.8.1

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 (228) hide show
  1. package/bundles/vendure-admin-ui-catalog.umd.js +902 -74
  2. package/bundles/vendure-admin-ui-catalog.umd.js.map +1 -1
  3. package/bundles/vendure-admin-ui-core.umd.js +2392 -820
  4. package/bundles/vendure-admin-ui-core.umd.js.map +1 -1
  5. package/bundles/vendure-admin-ui-customer.umd.js +4 -3
  6. package/bundles/vendure-admin-ui-customer.umd.js.map +1 -1
  7. package/bundles/vendure-admin-ui-dashboard.umd.js +3 -1
  8. package/bundles/vendure-admin-ui-dashboard.umd.js.map +1 -1
  9. package/bundles/vendure-admin-ui-order.umd.js +781 -175
  10. package/bundles/vendure-admin-ui-order.umd.js.map +1 -1
  11. package/bundles/vendure-admin-ui-settings.umd.js +5 -4
  12. package/bundles/vendure-admin-ui-settings.umd.js.map +1 -1
  13. package/bundles/vendure-admin-ui-system.umd.js +1 -1
  14. package/catalog/catalog.module.d.ts +3 -0
  15. package/catalog/components/assign-to-channel-dialog/assign-to-channel-dialog.component.d.ts +17 -0
  16. package/catalog/components/bulk-add-facet-values-dialog/bulk-add-facet-values-dialog.component.d.ts +38 -0
  17. package/catalog/components/bulk-add-facet-values-dialog/bulk-add-facet-values-dialog.graphql.d.ts +4 -0
  18. package/catalog/components/collection-list/collection-list-bulk-actions.d.ts +6 -0
  19. package/catalog/components/collection-list/collection-list.component.d.ts +7 -5
  20. package/catalog/components/collection-tree/collection-tree-node.component.d.ts +8 -4
  21. package/catalog/components/collection-tree/collection-tree.component.d.ts +2 -1
  22. package/catalog/components/facet-list/facet-list-bulk-actions.d.ts +5 -0
  23. package/catalog/components/facet-list/facet-list.component.d.ts +2 -1
  24. package/catalog/components/product-list/product-list-bulk-actions.d.ts +6 -0
  25. package/catalog/components/product-list/product-list.component.d.ts +2 -1
  26. package/catalog/public_api.d.ts +6 -0
  27. package/catalog/vendure-admin-ui-catalog.metadata.json +1 -1
  28. package/core/common/component-registry-types.d.ts +1 -1
  29. package/core/common/generated-types.d.ts +609 -3
  30. package/core/common/utilities/bulk-action-utils.d.ts +19 -0
  31. package/core/common/utilities/selection-manager.d.ts +7 -0
  32. package/core/common/version.d.ts +1 -1
  33. package/core/data/definitions/collection-definitions.d.ts +3 -0
  34. package/core/data/definitions/facet-definitions.d.ts +3 -0
  35. package/core/data/definitions/order-definitions.d.ts +12 -0
  36. package/core/data/definitions/product-definitions.d.ts +1 -0
  37. package/core/data/providers/collection-data.service.d.ts +4 -1
  38. package/core/data/providers/facet-data.service.d.ts +4 -1
  39. package/core/data/providers/order-data.service.d.ts +18 -1
  40. package/core/data/providers/product-data.service.d.ts +1 -0
  41. package/core/providers/bulk-action-registry/bulk-action-registry.service.d.ts +6 -0
  42. package/core/providers/bulk-action-registry/bulk-action-types.d.ts +149 -0
  43. package/core/providers/bulk-action-registry/register-bulk-action.d.ts +53 -0
  44. package/core/providers/modal/modal.service.d.ts +2 -0
  45. package/core/providers/nav-builder/nav-builder-types.d.ts +1 -0
  46. package/core/public_api.d.ts +18 -1
  47. package/core/shared/components/asset-gallery/asset-gallery.component.d.ts +3 -3
  48. package/core/shared/components/bulk-action-menu/bulk-action-menu.component.d.ts +29 -0
  49. package/core/shared/components/data-table/data-table.component.d.ts +26 -7
  50. package/core/shared/components/dropdown/dropdown-menu.component.d.ts +1 -0
  51. package/core/shared/components/radio-card/radio-card-fieldset.component.d.ts +21 -0
  52. package/core/shared/components/radio-card/radio-card.component.d.ts +19 -0
  53. package/core/shared/components/rich-text-editor/prosemirror/context-menu/context-menu.component.d.ts +28 -0
  54. package/core/shared/components/rich-text-editor/prosemirror/context-menu/context-menu.service.d.ts +31 -0
  55. package/core/shared/components/rich-text-editor/prosemirror/custom-nodes.d.ts +4 -0
  56. package/core/shared/components/rich-text-editor/prosemirror/inputrules.d.ts +5 -5
  57. package/core/shared/components/rich-text-editor/prosemirror/menu/links.d.ts +1 -1
  58. package/core/shared/components/rich-text-editor/prosemirror/menu/menu-common.d.ts +12 -0
  59. package/core/shared/components/rich-text-editor/prosemirror/menu/menu-plugin.d.ts +9 -0
  60. package/core/shared/components/rich-text-editor/prosemirror/menu/sub-menu-with-icon.d.ts +14 -0
  61. package/core/shared/components/rich-text-editor/prosemirror/plugins/image-plugin.d.ts +7 -0
  62. package/core/shared/components/rich-text-editor/prosemirror/plugins/link-select-plugin.d.ts +1 -1
  63. package/core/shared/components/rich-text-editor/prosemirror/plugins/raw-editor-plugin.d.ts +7 -0
  64. package/core/shared/components/rich-text-editor/prosemirror/plugins/tables-plugin.d.ts +13 -0
  65. package/core/shared/components/rich-text-editor/prosemirror/prosemirror.service.d.ts +7 -3
  66. package/core/shared/components/rich-text-editor/prosemirror/types.d.ts +0 -2
  67. package/core/shared/components/rich-text-editor/raw-html-dialog/raw-html-dialog.component.d.ts +18 -0
  68. package/core/shared/components/rich-text-editor/rich-text-editor.component.d.ts +6 -2
  69. package/core/shared/dynamic-form-inputs/code-editor-form-input/base-code-editor-form-input.component.d.ts +27 -0
  70. package/core/shared/dynamic-form-inputs/code-editor-form-input/html-editor-form-input.component.d.ts +19 -0
  71. package/core/shared/dynamic-form-inputs/code-editor-form-input/json-editor-form-input.component.d.ts +5 -17
  72. package/core/shared/dynamic-form-inputs/register-dynamic-input-components.d.ts +2 -1
  73. package/core/vendure-admin-ui-core.metadata.json +1 -1
  74. package/customer/components/customer-group-member-list/customer-group-member-list.component.d.ts +11 -4
  75. package/customer/vendure-admin-ui-customer.metadata.json +1 -1
  76. package/esm2015/catalog/catalog.module.js +25 -2
  77. package/esm2015/catalog/components/assign-products-to-channel-dialog/assign-products-to-channel-dialog.component.js +4 -1
  78. package/esm2015/catalog/components/assign-to-channel-dialog/assign-to-channel-dialog.component.js +51 -0
  79. package/esm2015/catalog/components/bulk-add-facet-values-dialog/bulk-add-facet-values-dialog.component.js +89 -0
  80. package/esm2015/catalog/components/bulk-add-facet-values-dialog/bulk-add-facet-values-dialog.graphql.js +69 -0
  81. package/esm2015/catalog/components/collection-detail/collection-detail.component.js +3 -3
  82. package/esm2015/catalog/components/collection-list/collection-list-bulk-actions.js +147 -0
  83. package/esm2015/catalog/components/collection-list/collection-list.component.js +17 -8
  84. package/esm2015/catalog/components/collection-tree/collection-tree-node.component.js +16 -7
  85. package/esm2015/catalog/components/collection-tree/collection-tree.component.js +3 -2
  86. package/esm2015/catalog/components/facet-list/facet-list-bulk-actions.js +208 -0
  87. package/esm2015/catalog/components/facet-list/facet-list.component.js +13 -4
  88. package/esm2015/catalog/components/product-detail/product-detail.component.js +35 -23
  89. package/esm2015/catalog/components/product-list/product-list-bulk-actions.js +173 -0
  90. package/esm2015/catalog/components/product-list/product-list.component.js +10 -5
  91. package/esm2015/catalog/components/product-variants-list/product-variants-list.component.js +2 -2
  92. package/esm2015/catalog/providers/routing/collection-resolver.js +2 -1
  93. package/esm2015/catalog/public_api.js +7 -1
  94. package/esm2015/core/common/component-registry-types.js +1 -1
  95. package/esm2015/core/common/generated-types.js +5 -1
  96. package/esm2015/core/common/introspection-result.js +296 -191
  97. package/esm2015/core/common/utilities/bulk-action-utils.js +44 -0
  98. package/esm2015/core/common/utilities/selection-manager.js +33 -1
  99. package/esm2015/core/common/version.js +2 -2
  100. package/esm2015/core/components/breadcrumb/breadcrumb.component.js +1 -1
  101. package/esm2015/core/data/definitions/collection-definitions.js +30 -1
  102. package/esm2015/core/data/definitions/facet-definitions.js +31 -1
  103. package/esm2015/core/data/definitions/order-definitions.js +114 -1
  104. package/esm2015/core/data/definitions/product-definitions.js +15 -1
  105. package/esm2015/core/data/providers/collection-data.service.js +17 -2
  106. package/esm2015/core/data/providers/customer-data.service.js +8 -4
  107. package/esm2015/core/data/providers/facet-data.service.js +18 -2
  108. package/esm2015/core/data/providers/order-data.service.js +38 -2
  109. package/esm2015/core/data/providers/product-data.service.js +7 -2
  110. package/esm2015/core/data/utils/remove-readonly-custom-fields.js +5 -1
  111. package/esm2015/core/providers/bulk-action-registry/bulk-action-registry.service.js +27 -0
  112. package/esm2015/core/providers/bulk-action-registry/bulk-action-types.js +2 -0
  113. package/esm2015/core/providers/bulk-action-registry/register-bulk-action.js +63 -0
  114. package/esm2015/core/providers/dashboard-widget/dashboard-widget.service.js +1 -4
  115. package/esm2015/core/providers/modal/modal.service.js +2 -1
  116. package/esm2015/core/providers/nav-builder/nav-builder-types.js +1 -1
  117. package/esm2015/core/public_api.js +19 -2
  118. package/esm2015/core/shared/components/action-bar/action-bar.component.js +4 -8
  119. package/esm2015/core/shared/components/asset-gallery/asset-gallery.component.js +2 -2
  120. package/esm2015/core/shared/components/bulk-action-menu/bulk-action-menu.component.js +99 -0
  121. package/esm2015/core/shared/components/data-table/data-table.component.js +64 -15
  122. package/esm2015/core/shared/components/dropdown/dropdown-menu.component.js +4 -3
  123. package/esm2015/core/shared/components/facet-value-selector/facet-value-selector.component.js +2 -2
  124. package/esm2015/core/shared/components/language-selector/language-selector.component.js +2 -2
  125. package/esm2015/core/shared/components/order-state-label/order-state-label.component.js +2 -1
  126. package/esm2015/core/shared/components/product-search-input/product-search-input.component.js +1 -1
  127. package/esm2015/core/shared/components/product-selector/product-selector.component.js +1 -1
  128. package/esm2015/core/shared/components/radio-card/radio-card-fieldset.component.js +57 -0
  129. package/esm2015/core/shared/components/radio-card/radio-card.component.js +54 -0
  130. package/esm2015/core/shared/components/rich-text-editor/external-image-dialog/external-image-dialog.component.js +2 -2
  131. package/esm2015/core/shared/components/rich-text-editor/prosemirror/context-menu/context-menu.component.js +140 -0
  132. package/esm2015/core/shared/components/rich-text-editor/prosemirror/context-menu/context-menu.service.js +45 -0
  133. package/esm2015/core/shared/components/rich-text-editor/prosemirror/custom-nodes.js +60 -0
  134. package/esm2015/core/shared/components/rich-text-editor/prosemirror/menu/links.js +4 -4
  135. package/esm2015/core/shared/components/rich-text-editor/prosemirror/menu/menu-common.js +23 -1
  136. package/esm2015/core/shared/components/rich-text-editor/prosemirror/menu/menu-plugin.js +12 -0
  137. package/esm2015/core/shared/components/rich-text-editor/prosemirror/menu/menu.js +73 -18
  138. package/esm2015/core/shared/components/rich-text-editor/prosemirror/menu/sub-menu-with-icon.js +16 -0
  139. package/esm2015/core/shared/components/rich-text-editor/prosemirror/plugins/image-plugin.js +100 -0
  140. package/esm2015/core/shared/components/rich-text-editor/prosemirror/plugins/raw-editor-plugin.js +97 -0
  141. package/esm2015/core/shared/components/rich-text-editor/prosemirror/plugins/tables-plugin.js +166 -0
  142. package/esm2015/core/shared/components/rich-text-editor/prosemirror/prosemirror.service.js +47 -17
  143. package/esm2015/core/shared/components/rich-text-editor/prosemirror/types.js +1 -1
  144. package/esm2015/core/shared/components/rich-text-editor/raw-html-dialog/raw-html-dialog.component.js +57 -0
  145. package/esm2015/core/shared/components/rich-text-editor/rich-text-editor.component.js +20 -9
  146. package/esm2015/core/shared/components/simple-dialog/simple-dialog.component.js +2 -2
  147. package/esm2015/core/shared/dynamic-form-inputs/code-editor-form-input/base-code-editor-form-input.component.js +59 -0
  148. package/esm2015/core/shared/dynamic-form-inputs/code-editor-form-input/html-editor-form-input.component.js +66 -0
  149. package/esm2015/core/shared/dynamic-form-inputs/code-editor-form-input/json-editor-form-input.component.js +47 -84
  150. package/esm2015/core/shared/dynamic-form-inputs/dynamic-form-input/dynamic-form-input.component.js +3 -3
  151. package/esm2015/core/shared/dynamic-form-inputs/register-dynamic-input-components.js +3 -1
  152. package/esm2015/core/shared/pipes/state-i18n-token.pipe.js +2 -1
  153. package/esm2015/core/shared/shared.module.js +13 -1
  154. package/esm2015/customer/components/customer-group-list/customer-group-list.component.js +2 -2
  155. package/esm2015/customer/components/customer-group-member-list/customer-group-member-list.component.js +6 -6
  156. package/esm2015/customer/components/customer-list/customer-list.component.js +2 -2
  157. package/esm2015/dashboard/dashboard.module.js +6 -2
  158. package/esm2015/order/components/coupon-code-selector/coupon-code-selector.component.js +42 -0
  159. package/esm2015/order/components/draft-order-detail/draft-order-detail.component.js +195 -0
  160. package/esm2015/order/components/draft-order-variant-selector/draft-order-variant-selector.component.js +59 -0
  161. package/esm2015/order/components/order-detail/order-detail.component.js +2 -2
  162. package/esm2015/order/components/order-editor/order-editor.component.js +5 -11
  163. package/esm2015/order/components/order-list/order-list.component.js +20 -4
  164. package/esm2015/order/components/order-table/order-table.component.js +16 -5
  165. package/esm2015/order/components/select-address-dialog/select-address-dialog.component.js +91 -0
  166. package/esm2015/order/components/select-address-dialog/select-address-dialog.graphql.js +14 -0
  167. package/esm2015/order/components/select-customer-dialog/select-customer-dialog.component.js +59 -0
  168. package/esm2015/order/components/select-shipping-method-dialog/select-shipping-method-dialog.component.js +30 -0
  169. package/esm2015/order/order.module.js +13 -1
  170. package/esm2015/order/order.routes.js +26 -7
  171. package/esm2015/order/providers/routing/order-resolver.js +29 -12
  172. package/esm2015/order/providers/routing/order.guard.js +41 -0
  173. package/esm2015/order/public_api.js +9 -1
  174. package/esm2015/settings/components/country-list/country-list.component.js +2 -2
  175. package/esm2015/settings/components/profile/profile.component.js +2 -2
  176. package/esm2015/settings/components/zone-list/zone-list.component.js +2 -2
  177. package/esm2015/settings/components/zone-member-list/zone-member-list.component.js +2 -2
  178. package/esm2015/system/components/health-check/health-check.component.js +1 -1
  179. package/fesm2015/vendure-admin-ui-catalog.js +835 -61
  180. package/fesm2015/vendure-admin-ui-catalog.js.map +1 -1
  181. package/fesm2015/vendure-admin-ui-core.js +3122 -1514
  182. package/fesm2015/vendure-admin-ui-core.js.map +1 -1
  183. package/fesm2015/vendure-admin-ui-customer.js +7 -7
  184. package/fesm2015/vendure-admin-ui-customer.js.map +1 -1
  185. package/fesm2015/vendure-admin-ui-dashboard.js +5 -1
  186. package/fesm2015/vendure-admin-ui-dashboard.js.map +1 -1
  187. package/fesm2015/vendure-admin-ui-order.js +780 -232
  188. package/fesm2015/vendure-admin-ui-order.js.map +1 -1
  189. package/fesm2015/vendure-admin-ui-settings.js +4 -4
  190. package/fesm2015/vendure-admin-ui-settings.js.map +1 -1
  191. package/fesm2015/vendure-admin-ui-system.js +1 -1
  192. package/order/components/coupon-code-selector/coupon-code-selector.component.d.ts +18 -0
  193. package/order/components/draft-order-detail/draft-order-detail.component.d.ts +49 -0
  194. package/order/components/draft-order-variant-selector/draft-order-variant-selector.component.d.ts +21 -0
  195. package/order/components/order-editor/order-editor.component.d.ts +1 -6
  196. package/order/components/order-list/order-list.component.d.ts +1 -0
  197. package/order/components/order-table/order-table.component.d.ts +11 -2
  198. package/order/components/select-address-dialog/select-address-dialog.component.d.ts +24 -0
  199. package/order/components/select-address-dialog/select-address-dialog.graphql.d.ts +1 -0
  200. package/order/components/select-customer-dialog/select-customer-dialog.component.d.ts +22 -0
  201. package/order/components/select-shipping-method-dialog/select-shipping-method-dialog.component.d.ts +16 -0
  202. package/order/providers/routing/order-resolver.d.ts +8 -5
  203. package/order/providers/routing/order.guard.d.ts +9 -0
  204. package/order/public_api.d.ts +8 -0
  205. package/order/vendure-admin-ui-order.metadata.json +1 -1
  206. package/package.json +13 -12
  207. package/settings/components/zone-member-list/zone-member-list.component.d.ts +3 -1
  208. package/settings/vendure-admin-ui-settings.metadata.json +1 -1
  209. package/static/i18n-messages/cs.json +33 -0
  210. package/static/i18n-messages/de.json +33 -0
  211. package/static/i18n-messages/en.json +36 -4
  212. package/static/i18n-messages/es.json +33 -0
  213. package/static/i18n-messages/fr.json +33 -0
  214. package/static/i18n-messages/it.json +33 -0
  215. package/static/i18n-messages/pl.json +33 -0
  216. package/static/i18n-messages/pt_BR.json +33 -0
  217. package/static/i18n-messages/pt_PT.json +33 -0
  218. package/static/i18n-messages/ru.json +33 -0
  219. package/static/i18n-messages/uk.json +33 -0
  220. package/static/i18n-messages/zh_Hans.json +33 -0
  221. package/static/i18n-messages/zh_Hant.json +33 -0
  222. package/static/styles/global/_forms.scss +4 -2
  223. package/static/styles/global/_overrides.scss +1 -1
  224. package/static/styles/global/_utilities.scss +4 -0
  225. package/static/theme.min.css +1 -1
  226. package/system/vendure-admin-ui-system.metadata.json +1 -1
  227. package/core/shared/components/rich-text-editor/prosemirror/menu/images.d.ts +0 -4
  228. package/esm2015/core/shared/components/rich-text-editor/prosemirror/menu/images.js +0 -36
@@ -0,0 +1,195 @@
1
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component } from '@angular/core';
2
+ import { FormGroup } from '@angular/forms';
3
+ import { ActivatedRoute, Router } from '@angular/router';
4
+ import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
5
+ import { BaseDetailComponent, DataService, DeletionResult, ModalService, NotificationService, ServerConfigService, } from '@vendure/admin-ui/core';
6
+ import { combineLatest, Subject } from 'rxjs';
7
+ import { switchMap, take } from 'rxjs/operators';
8
+ import { OrderTransitionService } from '../../providers/order-transition.service';
9
+ import { SelectAddressDialogComponent } from '../select-address-dialog/select-address-dialog.component';
10
+ import { SelectCustomerDialogComponent } from '../select-customer-dialog/select-customer-dialog.component';
11
+ import { SelectShippingMethodDialogComponent } from '../select-shipping-method-dialog/select-shipping-method-dialog.component';
12
+ export class DraftOrderDetailComponent extends BaseDetailComponent {
13
+ constructor(router, route, serverConfigService, changeDetector, dataService, notificationService, modalService, orderTransitionService) {
14
+ super(route, router, serverConfigService, dataService);
15
+ this.changeDetector = changeDetector;
16
+ this.dataService = dataService;
17
+ this.notificationService = notificationService;
18
+ this.modalService = modalService;
19
+ this.orderTransitionService = orderTransitionService;
20
+ this.detailForm = new FormGroup({});
21
+ this.fetchHistory = new Subject();
22
+ this.displayCouponCodeInput = false;
23
+ }
24
+ ngOnInit() {
25
+ this.init();
26
+ this.orderLineCustomFields = this.getCustomFieldConfig('OrderLine');
27
+ this.eligibleShippingMethods$ = this.entity$.pipe(switchMap(order => this.dataService.order
28
+ .getDraftOrderEligibleShippingMethods(order.id)
29
+ .mapSingle(({ eligibleShippingMethodsForDraftOrder }) => eligibleShippingMethodsForDraftOrder)));
30
+ this.customFields = this.getCustomFieldConfig('Order');
31
+ this.orderLineCustomFields = this.getCustomFieldConfig('OrderLine');
32
+ }
33
+ ngOnDestroy() {
34
+ this.destroy();
35
+ }
36
+ addItemToOrder(event) {
37
+ this.dataService.order.addItemToDraftOrder(this.id, event).subscribe(result => {
38
+ if (result.addItemToDraftOrder.__typename !== 'Order') {
39
+ this.notificationService.error(result.addItemToDraftOrder.message);
40
+ }
41
+ });
42
+ }
43
+ adjustOrderLine(event) {
44
+ this.dataService.order
45
+ .adjustDraftOrderLine(this.id, { orderLineId: event.lineId, quantity: event.quantity })
46
+ .subscribe(result => {
47
+ if (result.adjustDraftOrderLine.__typename !== 'Order') {
48
+ this.notificationService.error(result.adjustDraftOrderLine.message);
49
+ }
50
+ });
51
+ }
52
+ removeOrderLine(event) {
53
+ this.dataService.order.removeDraftOrderLine(this.id, event.lineId).subscribe(result => {
54
+ if (result.removeDraftOrderLine.__typename !== 'Order') {
55
+ this.notificationService.error(result.removeDraftOrderLine.message);
56
+ }
57
+ });
58
+ }
59
+ getOrderAddressLines(orderAddress) {
60
+ if (!orderAddress) {
61
+ return [];
62
+ }
63
+ return Object.values(orderAddress)
64
+ .filter(val => val !== 'OrderAddress')
65
+ .filter(line => !!line);
66
+ }
67
+ setCustomer() {
68
+ this.modalService.fromComponent(SelectCustomerDialogComponent).subscribe(result => {
69
+ if (this.hasId(result)) {
70
+ this.dataService.order
71
+ .setCustomerForDraftOrder(this.id, { customerId: result.id })
72
+ .subscribe();
73
+ }
74
+ else if (result) {
75
+ this.dataService.order.setCustomerForDraftOrder(this.id, { input: result }).subscribe();
76
+ }
77
+ });
78
+ }
79
+ setShippingAddress() {
80
+ this.entity$
81
+ .pipe(take(1), switchMap(order => {
82
+ var _a, _b;
83
+ return this.modalService.fromComponent(SelectAddressDialogComponent, {
84
+ locals: {
85
+ customerId: (_a = order.customer) === null || _a === void 0 ? void 0 : _a.id,
86
+ currentAddress: (_b = order.shippingAddress) !== null && _b !== void 0 ? _b : undefined,
87
+ },
88
+ });
89
+ }))
90
+ .subscribe(result => {
91
+ if (result) {
92
+ this.dataService.order.setDraftOrderShippingAddress(this.id, result).subscribe();
93
+ }
94
+ });
95
+ }
96
+ setBillingAddress() {
97
+ this.entity$
98
+ .pipe(take(1), switchMap(order => {
99
+ var _a, _b;
100
+ return this.modalService.fromComponent(SelectAddressDialogComponent, {
101
+ locals: {
102
+ customerId: (_a = order.customer) === null || _a === void 0 ? void 0 : _a.id,
103
+ currentAddress: (_b = order.billingAddress) !== null && _b !== void 0 ? _b : undefined,
104
+ },
105
+ });
106
+ }))
107
+ .subscribe(result => {
108
+ if (result) {
109
+ this.dataService.order.setDraftOrderBillingAddress(this.id, result).subscribe();
110
+ }
111
+ });
112
+ }
113
+ applyCouponCode(couponCode) {
114
+ this.dataService.order.applyCouponCodeToDraftOrder(this.id, couponCode).subscribe();
115
+ }
116
+ removeCouponCode(couponCode) {
117
+ this.dataService.order.removeCouponCodeFromDraftOrder(this.id, couponCode).subscribe();
118
+ }
119
+ setShippingMethod() {
120
+ combineLatest(this.entity$, this.eligibleShippingMethods$)
121
+ .pipe(take(1), switchMap(([order, methods]) => {
122
+ var _a, _b;
123
+ return this.modalService.fromComponent(SelectShippingMethodDialogComponent, {
124
+ locals: {
125
+ eligibleShippingMethods: methods,
126
+ currencyCode: order.currencyCode,
127
+ currentSelectionId: (_b = (_a = order.shippingLines) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.shippingMethod.id,
128
+ },
129
+ });
130
+ }))
131
+ .subscribe(result => {
132
+ if (result) {
133
+ this.dataService.order.setDraftOrderShippingMethod(this.id, result).subscribe();
134
+ }
135
+ });
136
+ }
137
+ updateCustomFields(customFieldsValue) {
138
+ this.dataService.order
139
+ .updateOrderCustomFields({
140
+ id: this.id,
141
+ customFields: customFieldsValue,
142
+ })
143
+ .subscribe();
144
+ }
145
+ deleteOrder() {
146
+ this.dataService.order.deleteDraftOrder(this.id).subscribe(({ deleteDraftOrder }) => {
147
+ if (deleteDraftOrder.result === DeletionResult.DELETED) {
148
+ this.notificationService.success(_('common.notify-delete-success'), {
149
+ entity: 'Order',
150
+ });
151
+ this.router.navigate(['/orders']);
152
+ }
153
+ else if (deleteDraftOrder.message) {
154
+ this.notificationService.error(deleteDraftOrder.message);
155
+ }
156
+ });
157
+ }
158
+ completeOrder() {
159
+ this.dataService.order
160
+ .transitionToState(this.id, 'ArrangingPayment')
161
+ .subscribe(({ transitionOrderToState }) => {
162
+ if ((transitionOrderToState === null || transitionOrderToState === void 0 ? void 0 : transitionOrderToState.__typename) === 'Order') {
163
+ this.router.navigate(['/orders', this.id]);
164
+ }
165
+ else if ((transitionOrderToState === null || transitionOrderToState === void 0 ? void 0 : transitionOrderToState.__typename) === 'OrderStateTransitionError') {
166
+ this.notificationService.error(transitionOrderToState.transitionError);
167
+ }
168
+ });
169
+ }
170
+ hasId(input) {
171
+ return typeof input === 'object' && !!input.id;
172
+ }
173
+ setFormValues(entity) {
174
+ // empty
175
+ }
176
+ }
177
+ DraftOrderDetailComponent.decorators = [
178
+ { type: Component, args: [{
179
+ selector: 'vdr-draft-order-detail',
180
+ template: "<vdr-action-bar *ngIf=\"entity$ | async as order\">\r\n <vdr-ab-left>\r\n <div class=\"flex clr-align-items-center\">\r\n <vdr-entity-info [entity]=\"entity$ | async\"></vdr-entity-info>\r\n <vdr-order-state-label [state]=\"order.state\"></vdr-order-state-label>\r\n </div>\r\n </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <button\r\n class=\"btn btn-primary\"\r\n (click)=\"completeOrder()\"\r\n [disabled]=\"!order.customer || !order.lines.length || !order.shippingLines.length\"\r\n >\r\n <clr-icon shape=\"check\"></clr-icon>\r\n {{ 'order.complete-draft-order' | translate }}\r\n </button>\r\n <vdr-dropdown>\r\n <button class=\"icon-button\" vdrDropdownTrigger>\r\n <clr-icon shape=\"ellipsis-vertical\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button type=\"button\" class=\"btn\" vdrDropdownItem (click)=\"deleteOrder()\">\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'order.delete-draft-order' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<div *ngIf=\"entity$ | async as order\">\r\n <div class=\"clr-row\">\r\n <div class=\"clr-col-lg-8\">\r\n <vdr-draft-order-variant-selector\r\n [orderLineCustomFields]=\"orderLineCustomFields\"\r\n [currencyCode]=\"order.currencyCode\"\r\n (addItem)=\"addItemToOrder($event)\"\r\n ></vdr-draft-order-variant-selector>\r\n <vdr-order-table\r\n [order]=\"order\"\r\n [orderLineCustomFields]=\"orderLineCustomFields\"\r\n [isDraft]=\"true\"\r\n (adjust)=\"adjustOrderLine($event)\"\r\n (remove)=\"removeOrderLine($event)\"\r\n ></vdr-order-table>\r\n <div class=\"flex\">\r\n <button\r\n *ngIf=\"order.couponCodes.length === 0 && !displayCouponCodeInput\"\r\n class=\"btn btn-link btn-sm mr2\"\r\n (click)=\"displayCouponCodeInput = !displayCouponCodeInput\"\r\n >\r\n {{ 'order.set-coupon-codes' | translate }}\r\n </button>\r\n <div *ngIf=\"order.couponCodes.length || displayCouponCodeInput\">\r\n <label>{{ 'order.set-coupon-codes' | translate }}</label>\r\n <vdr-coupon-code-selector\r\n [couponCodes]=\"order.couponCodes\"\r\n (addCouponCode)=\"applyCouponCode($event)\"\r\n (removeCouponCode)=\"removeCouponCode($event)\"\r\n ></vdr-coupon-code-selector>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"order.taxSummary.length\">\r\n <h4>{{ 'order.tax-summary' | translate }}</h4>\r\n <table class=\"table\">\r\n <thead>\r\n <tr>\r\n <th>{{ 'common.description' | translate }}</th>\r\n <th>{{ 'order.tax-rate' | translate }}</th>\r\n <th>{{ 'order.tax-base' | translate }}</th>\r\n <th>{{ 'order.tax-total' | translate }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of order.taxSummary\">\r\n <td>{{ row.description }}</td>\r\n <td>{{ row.taxRate / 100 | percent }}</td>\r\n <td>{{ row.taxBase | localeCurrency: order.currencyCode }}</td>\r\n <td>{{ row.taxTotal | localeCurrency: order.currencyCode }}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </ng-container>\r\n </div>\r\n <div class=\"clr-col-lg-4 order-cards\">\r\n <div class=\"card\">\r\n <div class=\"card-header\">\r\n <clr-icon *ngIf=\"!order.customer\" shape=\"unknown-status\" class=\"is-warning\"></clr-icon>\r\n <clr-icon *ngIf=\"order.customer\" shape=\"check\" class=\"is-success\"></clr-icon>\r\n {{ 'order.customer' | translate }}\r\n </div>\r\n <div class=\"card-block\">\r\n <div class=\"card-text\">\r\n <vdr-customer-label\r\n class=\"block mb2\"\r\n *ngIf=\"order.customer\"\r\n [customer]=\"order.customer\"\r\n ></vdr-customer-label>\r\n <button class=\"btn btn-link btn-sm\" (click)=\"setCustomer()\">\r\n {{ 'order.set-customer-for-order' | translate }}\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"card-block\">\r\n <h4 class=\"card-title\">\r\n <clr-icon\r\n *ngIf=\"!order.billingAddress.streetLine1\"\r\n shape=\"unknown-status\"\r\n class=\"is-warning\"\r\n ></clr-icon>\r\n <clr-icon\r\n *ngIf=\"order.billingAddress.streetLine1\"\r\n shape=\"check\"\r\n class=\"is-success\"\r\n ></clr-icon>\r\n {{ 'order.billing-address' | translate }}\r\n </h4>\r\n <div class=\"card-text\">\r\n <vdr-formatted-address\r\n class=\"block mb2\"\r\n *ngIf=\"order.billingAddress\"\r\n [address]=\"order.billingAddress\"\r\n ></vdr-formatted-address>\r\n <button class=\"btn btn-link btn-sm\" (click)=\"setBillingAddress()\">\r\n {{ 'order.set-billing-address' | translate }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card\">\r\n <div class=\"card-header\">\r\n <clr-icon\r\n *ngIf=\"!order.shippingAddress.streetLine1 || !order.shippingLines.length\"\r\n shape=\"unknown-status\"\r\n class=\"is-warning\"\r\n ></clr-icon>\r\n <clr-icon\r\n *ngIf=\"order.shippingAddress.streetLine1 && order.shippingLines.length\"\r\n shape=\"check\"\r\n class=\"is-success\"\r\n ></clr-icon>\r\n {{ 'order.shipping' | translate }}\r\n </div>\r\n <div class=\"card-block\">\r\n <div class=\"card-text\">\r\n <vdr-formatted-address\r\n class=\"block mb2\"\r\n *ngIf=\"order.shippingAddress\"\r\n [address]=\"order.shippingAddress\"\r\n ></vdr-formatted-address>\r\n <button class=\"btn btn-link btn-sm\" (click)=\"setShippingAddress()\">\r\n {{ 'order.set-shipping-address' | translate }}\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"card-block\">\r\n <div class=\"card-text\">\r\n <div *ngFor=\"let shippingLine of order.shippingLines\">\r\n {{ shippingLine.shippingMethod.name }}\r\n </div>\r\n <button class=\"btn btn-link btn-sm\" (click)=\"setShippingMethod()\">\r\n {{ 'order.set-shipping-method' | translate }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <vdr-order-custom-fields-card\r\n [customFieldsConfig]=\"customFields\"\r\n [customFieldValues]=\"order.customFields\"\r\n (updateClick)=\"updateCustomFields($event)\"\r\n ></vdr-order-custom-fields-card>\r\n </div>\r\n </div>\r\n</div>\r\n",
181
+ changeDetection: ChangeDetectionStrategy.OnPush,
182
+ styles: [""]
183
+ },] }
184
+ ];
185
+ DraftOrderDetailComponent.ctorParameters = () => [
186
+ { type: Router },
187
+ { type: ActivatedRoute },
188
+ { type: ServerConfigService },
189
+ { type: ChangeDetectorRef },
190
+ { type: DataService },
191
+ { type: NotificationService },
192
+ { type: ModalService },
193
+ { type: OrderTransitionService }
194
+ ];
195
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZnQtb3JkZXItZGV0YWlsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvb3JkZXIvc3JjL2NvbXBvbmVudHMvZHJhZnQtb3JkZXItZGV0YWlsL2RyYWZ0LW9yZGVyLWRldGFpbC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDekcsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUN0RSxPQUFPLEVBQ0gsbUJBQW1CLEVBRW5CLFdBQVcsRUFDWCxjQUFjLEVBRWQsWUFBWSxFQUNaLG1CQUFtQixFQUduQixtQkFBbUIsR0FDdEIsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQUUsYUFBYSxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxRCxPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBQ3hHLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLDREQUE0RCxDQUFDO0FBQzNHLE9BQU8sRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLDBFQUEwRSxDQUFDO0FBUS9ILE1BQU0sT0FBTyx5QkFDVCxTQUFRLG1CQUF5QztJQWFqRCxZQUNJLE1BQWMsRUFDZCxLQUFxQixFQUNyQixtQkFBd0MsRUFDaEMsY0FBaUMsRUFDL0IsV0FBd0Is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QUMzRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLHNCQUFzQixDQUFDLGVBQWUsQ0FBQyxDQUFDO2FBQzFFO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRU8sS0FBSyxDQUEyQixLQUFjO1FBQ2xELE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO0lBQ25ELENBQUM7SUFFUyxhQUFhLENBQUMsTUFBc0I7UUFDMUMsUUFBUTtJQUNaLENBQUM7OztZQWpOSixTQUFTLFNBQUM7Z0JBQ1AsUUFBUSxFQUFFLHdCQUF3QjtnQkFDbEMsZ29SQUFrRDtnQkFFbEQsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07O2FBQ2xEOzs7WUEzQndCLE1BQU07WUFBdEIsY0FBYztZQVluQixtQkFBbUI7WUFkVyxpQkFBaUI7WUFPL0MsV0FBVztZQUlYLG1CQUFtQjtZQURuQixZQUFZO1lBU1Asc0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IG1hcmtlciBhcyBfIH0gZnJvbSAnQGJpZXNiamVyZy9uZ3gtdHJhbnNsYXRlLWV4dHJhY3QtbWFya2VyJztcclxuaW1wb3J0IHtcclxuICAgIEJhc2VEZXRhaWxDb21wb25lbnQsXHJcbiAgICBDdXN0b21GaWVsZENvbmZpZyxcclxuICAgIERhdGFTZXJ2aWNlLFxyXG4gICAgRGVsZXRpb25SZXN1bHQsXHJcbiAgICBEcmFmdE9yZGVyRWxpZ2libGVTaGlwcGluZ01ldGhvZHNRdWVyeSxcclxuICAgIE1vZGFsU2VydmljZSxcclxuICAgIE5vdGlmaWNhdGlvblNlcnZpY2UsXHJcbiAgICBPcmRlcixcclxuICAgIE9yZGVyRGV0YWlsLFxyXG4gICAgU2VydmVyQ29uZmlnU2VydmljZSxcclxufSBmcm9tICdAdmVuZHVyZS9hZG1pbi11aS9jb3JlJztcclxuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBzd2l0Y2hNYXAsIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5pbXBvcnQgeyBPcmRlclRyYW5zaXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL29yZGVyLXRyYW5zaXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IFNlbGVjdEFkZHJlc3NEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi9zZWxlY3QtYWRkcmVzcy1kaWFsb2cvc2VsZWN0LWFkZHJlc3MtZGlhbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFNlbGVjdEN1c3RvbWVyRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vc2VsZWN0LWN1c3RvbWVyLWRpYWxvZy9zZWxlY3QtY3VzdG9tZXItZGlhbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFNlbGVjdFNoaXBwaW5nTWV0aG9kRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vc2VsZWN0LXNoaXBwaW5nLW1ldGhvZC1kaWFsb2cvc2VsZWN0LXNoaXBwaW5nLW1ldGhvZC1kaWFsb2cuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICd2ZHItZHJhZnQtb3JkZXItZGV0YWlsJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9kcmFmdC1vcmRlci1kZXRhaWwuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vZHJhZnQtb3JkZXItZGV0YWlsLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxufSlcclxuZXhwb3J0IGNsYXNzIERyYWZ0T3JkZXJEZXRhaWxDb21wb25lbnRcclxuICAgIGV4dGVuZHMgQmFzZURldGFpbENvbXBvbmVudDxPcmRlckRldGFpbC5GcmFnbWVudD5cclxuICAgIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3lcclxue1xyXG4gICAgZGV0YWlsRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gICAgZWxpZ2libGVTaGlwcGluZ01ldGhvZHMkOiBPYnNlcnZhYmxlPFxyXG4gICAgICAgIERyYWZ0T3JkZXJFbGlnaWJsZVNoaXBwaW5nTWV0aG9kc1F1ZXJ5WydlbGlnaWJsZVNoaXBwaW5nTWV0aG9kc0ZvckRyYWZ0T3JkZXInXVxyXG4gICAgPjtcclxuICAgIG5leHRTdGF0ZXMkOiBPYnNlcnZhYmxlPHN0cmluZ1tdPjtcclxuICAgIGZldGNoSGlzdG9yeSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgICBjdXN0b21GaWVsZHM6IEN1c3RvbUZpZWxkQ29uZmlnW107XHJcbiAgICBvcmRlckxpbmVDdXN0b21GaWVsZHM6IEN1c3RvbUZpZWxkQ29uZmlnW107XHJcbiAgICBkaXNwbGF5Q291cG9uQ29kZUlucHV0ID0gZmFsc2U7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICAgICAgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgICAgIHNlcnZlckNvbmZpZ1NlcnZpY2U6IFNlcnZlckNvbmZpZ1NlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICAgICAgcHJvdGVjdGVkIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIG5vdGlmaWNhdGlvblNlcnZpY2U6IE5vdGlmaWNhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIG9yZGVyVHJhbnNpdGlvblNlcnZpY2U6IE9yZGVyVHJhbnNpdGlvblNlcnZpY2UsXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcihyb3V0ZSwgcm91dGVyLCBzZXJ2ZXJDb25maWdTZXJ2aWNlLCBkYXRhU2VydmljZSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICAgICAgdGhpcy5vcmRlckxpbmVDdXN0b21GaWVsZHMgPSB0aGlzLmdldEN1c3RvbUZpZWxkQ29uZmlnKCdPcmRlckxpbmUnKTtcclxuICAgICAgICB0aGlzLmVsaWdpYmxlU2hpcHBpbmdNZXRob2RzJCA9IHRoaXMuZW50aXR5JC5waXBlKFxyXG4gICAgICAgICAgICBzd2l0Y2hNYXAob3JkZXIgPT5cclxuICAgICAgICAgICAgICAgIHRoaXMuZGF0YVNlcnZpY2Uub3JkZXJcclxuICAgICAgICAgICAgICAgICAgICAuZ2V0RHJhZnRPcmRlckVsaWdpYmxlU2hpcHBpbmdNZXRob2RzKG9yZGVyLmlkKVxyXG4gICAgICAgICAgICAgICAgICAgIC5tYXBTaW5nbGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICh7IGVsaWdpYmxlU2hpcHBpbmdNZXRob2RzRm9yRHJhZnRPcmRlciB9KSA9PiBlbGlnaWJsZVNoaXBwaW5nTWV0aG9kc0ZvckRyYWZ0T3JkZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuY3VzdG9tRmllbGRzID0gdGhpcy5nZXRDdXN0b21GaWVsZENvbmZpZygnT3JkZXInKTtcclxuICAgICAgICB0aGlzLm9yZGVyTGluZUN1c3RvbUZpZWxkcyA9IHRoaXMuZ2V0Q3VzdG9tRmllbGRDb25maWcoJ09yZGVyTGluZScpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIHRoaXMuZGVzdHJveSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZEl0ZW1Ub09yZGVyKGV2ZW50OiB7IHByb2R1Y3RWYXJpYW50SWQ6IHN0cmluZzsgcXVhbnRpdHk6IG51bWJlcjsgY3VzdG9tRmllbGRzOiBhbnkgfSkge1xyXG4gICAgICAgIHRoaXMuZGF0YVNlcnZpY2Uub3JkZXIuYWRkSXRlbVRvRHJhZnRPcmRlcih0aGlzLmlkLCBldmVudCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQuYWRkSXRlbVRvRHJhZnRPcmRlci5fX3R5cGVuYW1lICE9PSAnT3JkZXInKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IoKHJlc3VsdC5hZGRJdGVtVG9EcmFmdE9yZGVyIGFzIGFueSkubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhZGp1c3RPcmRlckxpbmUoZXZlbnQ6IHsgbGluZUlkOiBzdHJpbmc7IHF1YW50aXR5OiBudW1iZXIgfSkge1xyXG4gICAgICAgIHRoaXMuZGF0YVNlcnZpY2Uub3JkZXJcclxuICAgICAgICAgICAgLmFkanVzdERyYWZ0T3JkZXJMaW5lKHRoaXMuaWQsIHsgb3JkZXJMaW5lSWQ6IGV2ZW50LmxpbmVJZCwgcXVhbnRpdHk6IGV2ZW50LnF1YW50aXR5IH0pXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuYWRqdXN0RHJhZnRPcmRlckxpbmUuX190eXBlbmFtZSAhPT0gJ09yZGVyJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcigocmVzdWx0LmFkanVzdERyYWZ0T3JkZXJMaW5lIGFzIGFueSkubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZU9yZGVyTGluZShldmVudDogeyBsaW5lSWQ6IHN0cmluZyB9KSB7XHJcbiAgICAgICAgdGhpcy5kYXRhU2VydmljZS5vcmRlci5yZW1vdmVEcmFmdE9yZGVyTGluZSh0aGlzLmlkLCBldmVudC5saW5lSWQpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0LnJlbW92ZURyYWZ0T3JkZXJMaW5lLl9fdHlwZW5hbWUgIT09ICdPcmRlcicpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcigocmVzdWx0LnJlbW92ZURyYWZ0T3JkZXJMaW5lIGFzIGFueSkubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRPcmRlckFkZHJlc3NMaW5lcyhvcmRlckFkZHJlc3M/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9KTogc3RyaW5nW10ge1xyXG4gICAgICAgIGlmICghb3JkZXJBZGRyZXNzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMob3JkZXJBZGRyZXNzKVxyXG4gICAgICAgICAgICAuZmlsdGVyKHZhbCA9PiB2YWwgIT09ICdPcmRlckFkZHJlc3MnKVxyXG4gICAgICAgICAgICAuZmlsdGVyKGxpbmUgPT4gISFsaW5lKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRDdXN0b21lcigpIHtcclxuICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5mcm9tQ29tcG9uZW50KFNlbGVjdEN1c3RvbWVyRGlhbG9nQ29tcG9uZW50KS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaGFzSWQocmVzdWx0KSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhU2VydmljZS5vcmRlclxyXG4gICAgICAgICAgICAgICAgICAgIC5zZXRDdXN0b21lckZvckRyYWZ0T3JkZXIodGhpcy5pZCwgeyBjdXN0b21lcklkOiByZXN1bHQuaWQgfSlcclxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLm9yZGVyLnNldEN1c3RvbWVyRm9yRHJhZnRPcmRlcih0aGlzLmlkLCB7IGlucHV0OiByZXN1bHQgfSkuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRTaGlwcGluZ0FkZHJlc3MoKSB7XHJcbiAgICAgICAgdGhpcy5lbnRpdHkkXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcChvcmRlciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubW9kYWxTZXJ2aWNlLmZyb21Db21wb25lbnQoU2VsZWN0QWRkcmVzc0RpYWxvZ0NvbXBvbmVudCwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbHM6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbWVySWQ6IG9yZGVyLmN1c3RvbWVyPy5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRBZGRyZXNzOiBvcmRlci5zaGlwcGluZ0FkZHJlc3MgPz8gdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVNlcnZpY2Uub3JkZXIuc2V0RHJhZnRPcmRlclNoaXBwaW5nQWRkcmVzcyh0aGlzLmlkLCByZXN1bHQpLnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRCaWxsaW5nQWRkcmVzcygpIHtcclxuICAgICAgICB0aGlzLmVudGl0eSRcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKG9yZGVyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tb2RhbFNlcnZpY2UuZnJvbUNvbXBvbmVudChTZWxlY3RBZGRyZXNzRGlhbG9nQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2Fsczoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VzdG9tZXJJZDogb3JkZXIuY3VzdG9tZXI/LmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEFkZHJlc3M6IG9yZGVyLmJpbGxpbmdBZGRyZXNzID8/IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLm9yZGVyLnNldERyYWZ0T3JkZXJCaWxsaW5nQWRkcmVzcyh0aGlzLmlkLCByZXN1bHQpLnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhcHBseUNvdXBvbkNvZGUoY291cG9uQ29kZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5kYXRhU2VydmljZS5vcmRlci5hcHBseUNvdXBvbkNvZGVUb0RyYWZ0T3JkZXIodGhpcy5pZCwgY291cG9uQ29kZSkuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlQ291cG9uQ29kZShjb3Vwb25Db2RlOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLm9yZGVyLnJlbW92ZUNvdXBvbkNvZGVGcm9tRHJhZnRPcmRlcih0aGlzLmlkLCBjb3Vwb25Db2RlKS5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRTaGlwcGluZ01ldGhvZCgpIHtcclxuICAgICAgICBjb21iaW5lTGF0ZXN0KHRoaXMuZW50aXR5JCwgdGhpcy5lbGlnaWJsZVNoaXBwaW5nTWV0aG9kcyQpXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoW29yZGVyLCBtZXRob2RzXSkgPT5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5mcm9tQ29tcG9uZW50KFNlbGVjdFNoaXBwaW5nTWV0aG9kRGlhbG9nQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2Fsczoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxpZ2libGVTaGlwcGluZ01ldGhvZHM6IG1ldGhvZHMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW5jeUNvZGU6IG9yZGVyLmN1cnJlbmN5Q29kZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTZWxlY3Rpb25JZDogb3JkZXIuc2hpcHBpbmdMaW5lcz8uWzBdPy5zaGlwcGluZ01ldGhvZC5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVNlcnZpY2Uub3JkZXIuc2V0RHJhZnRPcmRlclNoaXBwaW5nTWV0aG9kKHRoaXMuaWQsIHJlc3VsdCkuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZUN1c3RvbUZpZWxkcyhjdXN0b21GaWVsZHNWYWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5kYXRhU2VydmljZS5vcmRlclxyXG4gICAgICAgICAgICAudXBkYXRlT3JkZXJDdXN0b21GaWVsZHMoe1xyXG4gICAgICAgICAgICAgICAgaWQ6IHRoaXMuaWQsXHJcbiAgICAgICAgICAgICAgICBjdXN0b21GaWVsZHM6IGN1c3RvbUZpZWxkc1ZhbHVlLFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVsZXRlT3JkZXIoKSB7XHJcbiAgICAgICAgdGhpcy5kYXRhU2VydmljZS5vcmRlci5kZWxldGVEcmFmdE9yZGVyKHRoaXMuaWQpLnN1YnNjcmliZSgoeyBkZWxldGVEcmFmdE9yZGVyIH0pID0+IHtcclxuICAgICAgICAgICAgaWYgKGRlbGV0ZURyYWZ0T3JkZXIucmVzdWx0ID09PSBEZWxldGlvblJlc3VsdC5ERUxFVEVEKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhfKCdjb21tb24ubm90aWZ5LWRlbGV0ZS1zdWNjZXNzJyksIHtcclxuICAgICAgICAgICAgICAgICAgICBlbnRpdHk6ICdPcmRlcicsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL29yZGVycyddKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChkZWxldGVEcmFmdE9yZGVyLm1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcihkZWxldGVEcmFmdE9yZGVyLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29tcGxldGVPcmRlcigpIHtcclxuICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLm9yZGVyXHJcbiAgICAgICAgICAgIC50cmFuc2l0aW9uVG9TdGF0ZSh0aGlzLmlkLCAnQXJyYW5naW5nUGF5bWVudCcpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHsgdHJhbnNpdGlvbk9yZGVyVG9TdGF0ZSB9KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodHJhbnNpdGlvbk9yZGVyVG9TdGF0ZT8uX190eXBlbmFtZSA9PT0gJ09yZGVyJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL29yZGVycycsIHRoaXMuaWRdKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHJhbnNpdGlvbk9yZGVyVG9TdGF0ZT8uX190eXBlbmFtZSA9PT0gJ09yZGVyU3RhdGVUcmFuc2l0aW9uRXJyb3InKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKHRyYW5zaXRpb25PcmRlclRvU3RhdGUudHJhbnNpdGlvbkVycm9yKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBoYXNJZDxUIGV4dGVuZHMgeyBpZDogc3RyaW5nIH0+KGlucHV0OiBUIHwgYW55KTogaW5wdXQgaXMgeyBpZDogc3RyaW5nIH0ge1xyXG4gICAgICAgIHJldHVybiB0eXBlb2YgaW5wdXQgPT09ICdvYmplY3QnICYmICEhaW5wdXQuaWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHNldEZvcm1WYWx1ZXMoZW50aXR5OiBPcmRlci5GcmFnbWVudCk6IHZvaWQge1xyXG4gICAgICAgIC8vIGVtcHR5XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -0,0 +1,59 @@
1
+ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';
2
+ import { FormControl, FormGroup } from '@angular/forms';
3
+ import { DataService, } from '@vendure/admin-ui/core';
4
+ import { Subject } from 'rxjs';
5
+ import { switchMap } from 'rxjs/operators';
6
+ export class DraftOrderVariantSelectorComponent {
7
+ constructor(dataService) {
8
+ this.dataService = dataService;
9
+ this.addItem = new EventEmitter();
10
+ this.customFieldsFormGroup = new FormGroup({});
11
+ this.selectedVariantId$ = new Subject();
12
+ this.quantity = 1;
13
+ }
14
+ ngOnInit() {
15
+ this.selectedVariant$ = this.selectedVariantId$.pipe(switchMap(id => {
16
+ if (id) {
17
+ return this.dataService.product
18
+ .getProductVariant(id)
19
+ .mapSingle(({ productVariant }) => productVariant);
20
+ }
21
+ else {
22
+ return [undefined];
23
+ }
24
+ }));
25
+ for (const customField of this.orderLineCustomFields) {
26
+ this.customFieldsFormGroup.addControl(customField.name, new FormControl(''));
27
+ }
28
+ }
29
+ addItemClick(selectedVariant) {
30
+ if (selectedVariant) {
31
+ this.addItem.emit({
32
+ productVariantId: selectedVariant.id,
33
+ quantity: this.quantity,
34
+ customFields: this.orderLineCustomFields.length
35
+ ? this.customFieldsFormGroup.value
36
+ : undefined,
37
+ });
38
+ this.selectedVariantId$.next(undefined);
39
+ this.customFieldsFormGroup.reset();
40
+ }
41
+ }
42
+ }
43
+ DraftOrderVariantSelectorComponent.decorators = [
44
+ { type: Component, args: [{
45
+ selector: 'vdr-draft-order-variant-selector',
46
+ template: "<div class=\"card\">\r\n <div class=\"card-block\">\r\n <h4 class=\"card-title\">{{ 'order.add-item-to-order' | translate }}</h4>\r\n <vdr-product-selector\r\n (productSelected)=\"selectedVariantId$.next($event.productVariantId)\"\r\n ></vdr-product-selector>\r\n </div>\r\n <div class=\"card-block\" *ngIf=\"selectedVariant$ | async as selectedVariant\">\r\n <div class=\"variant-details\">\r\n <img class=\"mr2\" [src]=\"selectedVariant.featuredAsset || selectedVariant.product.featuredAsset | assetPreview: 32\">\r\n <div class=\"details\">\r\n <div>{{ selectedVariant?.name }}</div>\r\n <div class=\"small\">{{ selectedVariant?.sku }}</div>\r\n </div>\r\n <div class=\"details ml4\">\r\n <div class=\"small\">\r\n {{ 'catalog.stock-on-hand' | translate }}: {{ selectedVariant.stockOnHand }}\r\n </div>\r\n <div class=\"small\">\r\n {{ 'catalog.stock-allocated' | translate }}: {{ selectedVariant.stockAllocated }}\r\n </div>\r\n </div>\r\n <div class=\"flex-spacer\"></div>\r\n <div class=\"details\">\r\n <div>{{ selectedVariant?.priceWithTax | localeCurrency: currencyCode }}</div>\r\n <div class=\"small\" [title]=\"'order.net-price' | translate\">\r\n {{ selectedVariant?.price | localeCurrency: currencyCode }}\r\n </div>\r\n </div>\r\n <div>\r\n <input [disabled]=\"!selectedVariant\" type=\"number\" min=\"0\" [(ngModel)]=\"quantity\" />\r\n </div>\r\n <button\r\n [disabled]=\"!selectedVariant\"\r\n class=\"btn btn-small btn-primary\"\r\n (click)=\"addItemClick(selectedVariant)\"\r\n >\r\n {{ 'order.add-item-to-order' | translate }}\r\n </button>\r\n </div>\r\n <ng-container *ngIf=\"orderLineCustomFields.length\">\r\n <div class=\"custom-field\" *ngFor=\"let field of orderLineCustomFields\">\r\n <vdr-custom-field-control\r\n [compact]=\"true\"\r\n [readonly]=\"false\"\r\n [customField]=\"field\"\r\n [customFieldsFormGroup]=\"customFieldsFormGroup\"\r\n ></vdr-custom-field-control>\r\n </div>\r\n </ng-container>\r\n </div>\r\n</div>\r\n",
47
+ changeDetection: ChangeDetectionStrategy.OnPush,
48
+ styles: [".variant-details{display:flex;align-items:center}.variant-details img{border-radius:var(--border-radius-img);width:32px;height:32px}.variant-details .details{font-size:.65rem;line-height:.7rem}.variant-details input{width:48px;margin:0 6px}.variant-details .small{font-size:11px;color:var(--color-text-300)}\n"]
49
+ },] }
50
+ ];
51
+ DraftOrderVariantSelectorComponent.ctorParameters = () => [
52
+ { type: DataService }
53
+ ];
54
+ DraftOrderVariantSelectorComponent.propDecorators = {
55
+ currencyCode: [{ type: Input }],
56
+ orderLineCustomFields: [{ type: Input }],
57
+ addItem: [{ type: Output }]
58
+ };
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZnQtb3JkZXItdmFyaWFudC1zZWxlY3Rvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL29yZGVyL3NyYy9jb21wb25lbnRzL2RyYWZ0LW9yZGVyLXZhcmlhbnQtc2VsZWN0b3IvZHJhZnQtb3JkZXItdmFyaWFudC1zZWxlY3Rvci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RyxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hELE9BQU8sRUFHSCxXQUFXLEdBSWQsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVEzQyxNQUFNLE9BQU8sa0NBQWtDO0lBUTNDLFlBQW9CLFdBQXdCO1FBQXhCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBTGxDLFlBQU8sR0FBRyxJQUFJLFlBQVksRUFBcUUsQ0FBQztRQUMxRywwQkFBcUIsR0FBRyxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUUxQyx1QkFBa0IsR0FBRyxJQUFJLE9BQU8sRUFBVSxDQUFDO1FBQzNDLGFBQVEsR0FBRyxDQUFDLENBQUM7SUFDa0MsQ0FBQztJQUVoRCxRQUFRO1FBQ0osSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQ2hELFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUNYLElBQUksRUFBRSxFQUFFO2dCQUNKLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPO3FCQUMxQixpQkFBaUIsQ0FBQyxFQUFFLENBQUM7cUJBQ3JCLFNBQVMsQ0FBQyxDQUFDLEVBQUUsY0FBYyxFQUFFLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2FBQzFEO2lCQUFNO2dCQUNILE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUN0QjtRQUNMLENBQUMsQ0FBQyxDQUNMLENBQUM7UUFDRixLQUFLLE1BQU0sV0FBVyxJQUFJLElBQUksQ0FBQyxxQkFBcUIsRUFBRTtZQUNsRCxJQUFJLENBQUMscUJBQXFCLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNoRjtJQUNMLENBQUM7SUFFRCxZQUFZLENBQUMsZUFBeUQ7UUFDbEUsSUFBSSxlQUFlLEVBQUU7WUFDakIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7Z0JBQ2QsZ0JBQWdCLEVBQUUsZUFBZSxDQUFDLEVBQUU7Z0JBQ3BDLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtnQkFDdkIsWUFBWSxFQUFFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNO29CQUMzQyxDQUFDLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUs7b0JBQ2xDLENBQUMsQ0FBQyxTQUFTO2FBQ2xCLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDeEMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ3RDO0lBQ0wsQ0FBQzs7O1lBN0NKLFNBQVMsU0FBQztnQkFDUCxRQUFRLEVBQUUsa0NBQWtDO2dCQUM1QyxvaEZBQTREO2dCQUU1RCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTs7YUFDbEQ7OztZQWJHLFdBQVc7OzsyQkFlVixLQUFLO29DQUNMLEtBQUs7c0JBQ0wsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7XHJcbiAgICBDdXJyZW5jeUNvZGUsXHJcbiAgICBDdXN0b21GaWVsZENvbmZpZyxcclxuICAgIERhdGFTZXJ2aWNlLFxyXG4gICAgR2V0UHJvZHVjdFZhcmlhbnQsXHJcbiAgICBHZXRQcm9kdWN0VmFyaWFudFF1ZXJ5LFxyXG4gICAgUHJvZHVjdFNlbGVjdG9yU2VhcmNoUXVlcnksXHJcbn0gZnJvbSAnQHZlbmR1cmUvYWRtaW4tdWkvY29yZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3Zkci1kcmFmdC1vcmRlci12YXJpYW50LXNlbGVjdG9yJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9kcmFmdC1vcmRlci12YXJpYW50LXNlbGVjdG9yLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2RyYWZ0LW9yZGVyLXZhcmlhbnQtc2VsZWN0b3IuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRHJhZnRPcmRlclZhcmlhbnRTZWxlY3RvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICBASW5wdXQoKSBjdXJyZW5jeUNvZGU6IEN1cnJlbmN5Q29kZTtcclxuICAgIEBJbnB1dCgpIG9yZGVyTGluZUN1c3RvbUZpZWxkczogQ3VzdG9tRmllbGRDb25maWdbXTtcclxuICAgIEBPdXRwdXQoKSBhZGRJdGVtID0gbmV3IEV2ZW50RW1pdHRlcjx7IHByb2R1Y3RWYXJpYW50SWQ6IHN0cmluZzsgcXVhbnRpdHk6IG51bWJlcjsgY3VzdG9tRmllbGRzOiBhbnkgfT4oKTtcclxuICAgIGN1c3RvbUZpZWxkc0Zvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gICAgc2VsZWN0ZWRWYXJpYW50JDogT2JzZXJ2YWJsZTxHZXRQcm9kdWN0VmFyaWFudFF1ZXJ5Wydwcm9kdWN0VmFyaWFudCddPjtcclxuICAgIHNlbGVjdGVkVmFyaWFudElkJCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcclxuICAgIHF1YW50aXR5ID0gMTtcclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlKSB7fVxyXG5cclxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYXJpYW50JCA9IHRoaXMuc2VsZWN0ZWRWYXJpYW50SWQkLnBpcGUoXHJcbiAgICAgICAgICAgIHN3aXRjaE1hcChpZCA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhU2VydmljZS5wcm9kdWN0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRQcm9kdWN0VmFyaWFudChpZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgLm1hcFNpbmdsZSgoeyBwcm9kdWN0VmFyaWFudCB9KSA9PiBwcm9kdWN0VmFyaWFudCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbdW5kZWZpbmVkXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuICAgICAgICBmb3IgKGNvbnN0IGN1c3RvbUZpZWxkIG9mIHRoaXMub3JkZXJMaW5lQ3VzdG9tRmllbGRzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tRmllbGRzRm9ybUdyb3VwLmFkZENvbnRyb2woY3VzdG9tRmllbGQubmFtZSwgbmV3IEZvcm1Db250cm9sKCcnKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFkZEl0ZW1DbGljayhzZWxlY3RlZFZhcmlhbnQ6IEdldFByb2R1Y3RWYXJpYW50UXVlcnlbJ3Byb2R1Y3RWYXJpYW50J10pIHtcclxuICAgICAgICBpZiAoc2VsZWN0ZWRWYXJpYW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWRkSXRlbS5lbWl0KHtcclxuICAgICAgICAgICAgICAgIHByb2R1Y3RWYXJpYW50SWQ6IHNlbGVjdGVkVmFyaWFudC5pZCxcclxuICAgICAgICAgICAgICAgIHF1YW50aXR5OiB0aGlzLnF1YW50aXR5LFxyXG4gICAgICAgICAgICAgICAgY3VzdG9tRmllbGRzOiB0aGlzLm9yZGVyTGluZUN1c3RvbUZpZWxkcy5sZW5ndGhcclxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMuY3VzdG9tRmllbGRzRm9ybUdyb3VwLnZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFyaWFudElkJC5uZXh0KHVuZGVmaW5lZCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tRmllbGRzRm9ybUdyb3VwLnJlc2V0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiJdfQ==