@vendure/admin-ui 1.3.4 → 1.4.2

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 (252) hide show
  1. package/bundles/vendure-admin-ui-catalog.umd.js +87 -162
  2. package/bundles/vendure-admin-ui-catalog.umd.js.map +1 -1
  3. package/bundles/vendure-admin-ui-core.umd.js +2022 -404
  4. package/bundles/vendure-admin-ui-core.umd.js.map +1 -1
  5. package/bundles/vendure-admin-ui-customer.umd.js +79 -57
  6. package/bundles/vendure-admin-ui-customer.umd.js.map +1 -1
  7. package/bundles/vendure-admin-ui-marketing.umd.js +11 -1
  8. package/bundles/vendure-admin-ui-marketing.umd.js.map +1 -1
  9. package/bundles/vendure-admin-ui-order.umd.js +10 -2
  10. package/bundles/vendure-admin-ui-order.umd.js.map +1 -1
  11. package/bundles/vendure-admin-ui-settings.umd.js +156 -153
  12. package/bundles/vendure-admin-ui-settings.umd.js.map +1 -1
  13. package/catalog/components/collection-detail/collection-detail.component.d.ts +0 -1
  14. package/catalog/components/collection-list/collection-list.component.d.ts +3 -0
  15. package/catalog/components/facet-detail/facet-detail.component.d.ts +0 -1
  16. package/catalog/components/facet-list/facet-list.component.d.ts +3 -5
  17. package/catalog/components/product-detail/product-detail.component.d.ts +0 -1
  18. package/catalog/vendure-admin-ui-catalog.metadata.json +1 -1
  19. package/core/app.component.d.ts +1 -0
  20. package/core/common/base-detail.component.d.ts +42 -1
  21. package/core/common/base-entity-resolver.d.ts +28 -1
  22. package/core/common/base-list.component.d.ts +75 -1
  23. package/core/common/component-registry-types.d.ts +46 -0
  24. package/core/common/generated-types.d.ts +282 -23
  25. package/core/common/utilities/get-default-ui-language.d.ts +1 -0
  26. package/core/common/version.d.ts +1 -1
  27. package/core/components/app-shell/app-shell.component.d.ts +1 -1
  28. package/core/components/ui-language-switcher-dialog/ui-language-switcher-dialog.component.d.ts +17 -4
  29. package/core/components/user-menu/user-menu.component.d.ts +1 -1
  30. package/core/data/client-state/client-defaults.d.ts +1 -1
  31. package/core/data/definitions/client-definitions.d.ts +3 -1
  32. package/core/data/definitions/customer-definitions.d.ts +1 -0
  33. package/core/data/definitions/settings-definitions.d.ts +1 -0
  34. package/core/data/providers/client-data.service.d.ts +3 -1
  35. package/core/data/providers/data.service.d.ts +54 -12
  36. package/core/data/providers/settings-data.service.d.ts +3 -0
  37. package/core/data/query-result.d.ts +11 -2
  38. package/core/providers/custom-detail-component/custom-detail-component-types.d.ts +25 -0
  39. package/core/providers/custom-detail-component/custom-detail-component.service.d.ts +15 -0
  40. package/core/providers/custom-field-component/custom-field-component.service.d.ts +3 -3
  41. package/core/providers/local-storage/local-storage.service.d.ts +1 -0
  42. package/core/providers/modal/modal.service.d.ts +41 -12
  43. package/core/providers/nav-builder/nav-builder-types.d.ts +19 -1
  44. package/core/providers/nav-builder/nav-builder.service.d.ts +14 -10
  45. package/core/providers/notification/notification.service.d.ts +37 -0
  46. package/core/public_api.d.ts +8 -0
  47. package/core/shared/components/action-bar-items/action-bar-items.component.d.ts +2 -1
  48. package/core/shared/components/asset-picker-dialog/asset-picker-dialog.component.d.ts +18 -0
  49. package/core/shared/components/asset-preview/asset-preview.component.d.ts +0 -1
  50. package/core/shared/components/chip/chip.component.d.ts +20 -0
  51. package/core/shared/components/currency-input/currency-input.component.d.ts +11 -0
  52. package/core/shared/components/custom-detail-component-host/custom-detail-component-host.component.d.ts +17 -0
  53. package/core/shared/components/data-table/data-table.component.d.ts +59 -0
  54. package/core/shared/components/datetime-picker/datetime-picker.component.d.ts +17 -0
  55. package/core/shared/components/dropdown/dropdown.component.d.ts +25 -0
  56. package/core/shared/components/extension-host/extension-host.service.d.ts +3 -1
  57. package/core/shared/components/facet-value-selector/facet-value-selector.component.d.ts +22 -0
  58. package/core/shared/components/modal-dialog/modal-dialog.component.d.ts +1 -1
  59. package/core/shared/components/object-tree/object-tree.component.d.ts +8 -0
  60. package/core/shared/components/order-state-label/order-state-label.component.d.ts +10 -0
  61. package/core/shared/components/product-selector/product-selector.component.d.ts +12 -0
  62. package/core/shared/components/rich-text-editor/rich-text-editor.component.d.ts +12 -1
  63. package/core/shared/components/tabbed-custom-fields/tabbed-custom-fields.component.d.ts +21 -0
  64. package/core/shared/components/ui-extension-point/ui-extension-point.component.d.ts +15 -0
  65. package/core/shared/directives/if-multichannel.directive.d.ts +14 -0
  66. package/core/shared/directives/if-permissions.directive.d.ts +3 -0
  67. package/core/shared/dynamic-form-inputs/boolean-form-input/boolean-form-input.component.d.ts +7 -0
  68. package/core/shared/dynamic-form-inputs/code-editor-form-input/json-editor-form-input.component.d.ts +32 -0
  69. package/core/shared/dynamic-form-inputs/currency-form-input/currency-form-input.component.d.ts +7 -0
  70. package/core/shared/dynamic-form-inputs/customer-group-form-input/customer-group-form-input.component.d.ts +8 -0
  71. package/core/shared/dynamic-form-inputs/date-form-input/date-form-input.component.d.ts +10 -0
  72. package/core/shared/dynamic-form-inputs/facet-value-form-input/facet-value-form-input.component.d.ts +8 -0
  73. package/core/shared/dynamic-form-inputs/number-form-input/number-form-input.component.d.ts +12 -0
  74. package/core/shared/dynamic-form-inputs/password-form-input/password-form-input.component.d.ts +7 -0
  75. package/core/shared/dynamic-form-inputs/product-selector-form-input/product-selector-form-input.component.d.ts +8 -0
  76. package/core/shared/dynamic-form-inputs/register-dynamic-input-components.d.ts +40 -3
  77. package/core/shared/dynamic-form-inputs/relation-form-input/relation-form-input.component.d.ts +9 -0
  78. package/core/shared/dynamic-form-inputs/rich-text-form-input/rich-text-form-input.component.d.ts +16 -0
  79. package/core/shared/dynamic-form-inputs/select-form-input/select-form-input.component.d.ts +9 -0
  80. package/core/shared/dynamic-form-inputs/text-form-input/text-form-input.component.d.ts +12 -3
  81. package/core/shared/dynamic-form-inputs/textarea-form-input/textarea-form-input.component.d.ts +7 -0
  82. package/core/shared/pipes/asset-preview.pipe.d.ts +14 -0
  83. package/core/shared/pipes/duration.pipe.d.ts +8 -0
  84. package/core/shared/pipes/file-size.pipe.d.ts +8 -0
  85. package/core/shared/pipes/has-permission.pipe.d.ts +3 -1
  86. package/core/shared/pipes/locale-currency-name.pipe.d.ts +8 -0
  87. package/core/shared/pipes/locale-currency.pipe.d.ts +12 -0
  88. package/core/shared/pipes/locale-date.pipe.d.ts +7 -0
  89. package/core/shared/pipes/locale-language-name.pipe.d.ts +9 -1
  90. package/core/shared/pipes/locale-region-name.pipe.d.ts +18 -0
  91. package/core/shared/pipes/time-ago.pipe.d.ts +8 -0
  92. package/core/vendure-admin-ui-core.metadata.json +1 -1
  93. package/customer/components/customer-detail/customer-detail.component.d.ts +2 -3
  94. package/customer/components/customer-group-detail-dialog/customer-group-detail-dialog.component.d.ts +14 -3
  95. package/customer/vendure-admin-ui-customer.metadata.json +1 -1
  96. package/esm2015/catalog/catalog.module.js +29 -28
  97. package/esm2015/catalog/components/asset-detail/asset-detail.component.js +2 -10
  98. package/esm2015/catalog/components/collection-detail/collection-detail.component.js +3 -16
  99. package/esm2015/catalog/components/collection-list/collection-list.component.js +23 -5
  100. package/esm2015/catalog/components/facet-detail/facet-detail.component.js +3 -15
  101. package/esm2015/catalog/components/facet-list/facet-list.component.js +24 -9
  102. package/esm2015/catalog/components/product-assets/product-assets.component.js +2 -2
  103. package/esm2015/catalog/components/product-detail/product-detail.component.js +5 -27
  104. package/esm2015/catalog/components/product-variants-list/product-variants-list.component.js +3 -3
  105. package/esm2015/catalog/components/update-product-option-dialog/update-product-option-dialog.component.js +2 -2
  106. package/esm2015/catalog/components/variant-price-detail/variant-price-detail.component.js +2 -2
  107. package/esm2015/core/app.component.js +20 -2
  108. package/esm2015/core/common/base-detail.component.js +53 -1
  109. package/esm2015/core/common/base-entity-resolver.js +29 -2
  110. package/esm2015/core/common/base-list.component.js +76 -2
  111. package/esm2015/core/common/component-registry-types.js +1 -1
  112. package/esm2015/core/common/generated-types.js +1 -1
  113. package/esm2015/core/common/introspection-result.js +249 -183
  114. package/esm2015/core/common/utilities/get-default-ui-language.js +9 -1
  115. package/esm2015/core/common/version.js +2 -2
  116. package/esm2015/core/components/app-shell/app-shell.component.js +12 -7
  117. package/esm2015/core/components/main-nav/main-nav.component.js +2 -2
  118. package/esm2015/core/components/ui-language-switcher-dialog/ui-language-switcher-dialog.component.js +281 -5
  119. package/esm2015/core/components/user-menu/user-menu.component.js +3 -3
  120. package/esm2015/core/data/client-state/client-defaults.js +5 -2
  121. package/esm2015/core/data/client-state/client-resolvers.js +32 -33
  122. package/esm2015/core/data/definitions/client-definitions.js +18 -3
  123. package/esm2015/core/data/definitions/customer-definitions.js +21 -25
  124. package/esm2015/core/data/definitions/settings-definitions.js +50 -5
  125. package/esm2015/core/data/providers/client-data.service.js +15 -4
  126. package/esm2015/core/data/providers/data.service.js +44 -2
  127. package/esm2015/core/data/providers/settings-data.service.js +12 -4
  128. package/esm2015/core/data/query-result.js +14 -4
  129. package/esm2015/core/providers/custom-detail-component/custom-detail-component-types.js +2 -0
  130. package/esm2015/core/providers/custom-detail-component/custom-detail-component.service.js +44 -0
  131. package/esm2015/core/providers/custom-field-component/custom-field-component.service.js +6 -6
  132. package/esm2015/core/providers/local-storage/local-storage.service.js +1 -1
  133. package/esm2015/core/providers/modal/modal.service.js +20 -12
  134. package/esm2015/core/providers/nav-builder/nav-builder-types.js +1 -1
  135. package/esm2015/core/providers/nav-builder/nav-builder.service.js +15 -11
  136. package/esm2015/core/providers/notification/notification.service.js +24 -1
  137. package/esm2015/core/public_api.js +9 -1
  138. package/esm2015/core/shared/components/action-bar/action-bar.component.js +1 -1
  139. package/esm2015/core/shared/components/action-bar-items/action-bar-items.component.js +3 -3
  140. package/esm2015/core/shared/components/address-form/address-form.component.js +2 -2
  141. package/esm2015/core/shared/components/asset-picker-dialog/asset-picker-dialog.component.js +19 -1
  142. package/esm2015/core/shared/components/asset-preview/asset-preview.component.js +2 -6
  143. package/esm2015/core/shared/components/chip/chip.component.js +12 -1
  144. package/esm2015/core/shared/components/currency-input/currency-input.component.js +12 -1
  145. package/esm2015/core/shared/components/custom-detail-component-host/custom-detail-component-host.component.js +44 -0
  146. package/esm2015/core/shared/components/data-table/data-table.component.js +60 -1
  147. package/esm2015/core/shared/components/datetime-picker/datetime-picker.component.js +17 -1
  148. package/esm2015/core/shared/components/dropdown/dropdown.component.js +26 -1
  149. package/esm2015/core/shared/components/extension-host/extension-host.component.js +3 -3
  150. package/esm2015/core/shared/components/extension-host/extension-host.service.js +16 -2
  151. package/esm2015/core/shared/components/facet-value-selector/facet-value-selector.component.js +23 -1
  152. package/esm2015/core/shared/components/modal-dialog/modal-dialog.component.js +2 -2
  153. package/esm2015/core/shared/components/object-tree/object-tree.component.js +9 -1
  154. package/esm2015/core/shared/components/order-state-label/order-state-label.component.js +11 -1
  155. package/esm2015/core/shared/components/product-selector/product-selector.component.js +13 -1
  156. package/esm2015/core/shared/components/rich-text-editor/rich-text-editor.component.js +14 -3
  157. package/esm2015/core/shared/components/tabbed-custom-fields/tabbed-custom-fields.component.js +48 -0
  158. package/esm2015/core/shared/components/title-input/title-input.component.js +1 -1
  159. package/esm2015/core/shared/components/ui-extension-point/ui-extension-point.component.js +31 -0
  160. package/esm2015/core/shared/directives/if-multichannel.directive.js +15 -1
  161. package/esm2015/core/shared/directives/if-permissions.directive.js +4 -1
  162. package/esm2015/core/shared/dynamic-form-inputs/boolean-form-input/boolean-form-input.component.js +8 -1
  163. package/esm2015/core/shared/dynamic-form-inputs/code-editor-form-input/json-editor-form-input.component.js +125 -0
  164. package/esm2015/core/shared/dynamic-form-inputs/currency-form-input/currency-form-input.component.js +8 -1
  165. package/esm2015/core/shared/dynamic-form-inputs/customer-group-form-input/customer-group-form-input.component.js +9 -1
  166. package/esm2015/core/shared/dynamic-form-inputs/date-form-input/date-form-input.component.js +21 -2
  167. package/esm2015/core/shared/dynamic-form-inputs/dynamic-form-input/dynamic-form-input.component.js +4 -3
  168. package/esm2015/core/shared/dynamic-form-inputs/facet-value-form-input/facet-value-form-input.component.js +9 -1
  169. package/esm2015/core/shared/dynamic-form-inputs/number-form-input/number-form-input.component.js +29 -2
  170. package/esm2015/core/shared/dynamic-form-inputs/password-form-input/password-form-input.component.js +8 -1
  171. package/esm2015/core/shared/dynamic-form-inputs/product-selector-form-input/product-selector-form-input.component.js +9 -1
  172. package/esm2015/core/shared/dynamic-form-inputs/register-dynamic-input-components.js +42 -2
  173. package/esm2015/core/shared/dynamic-form-inputs/relation-form-input/relation-form-input.component.js +10 -1
  174. package/esm2015/core/shared/dynamic-form-inputs/rich-text-form-input/rich-text-form-input.component.js +20 -0
  175. package/esm2015/core/shared/dynamic-form-inputs/select-form-input/select-form-input.component.js +14 -2
  176. package/esm2015/core/shared/dynamic-form-inputs/text-form-input/text-form-input.component.js +17 -2
  177. package/esm2015/core/shared/dynamic-form-inputs/textarea-form-input/textarea-form-input.component.js +8 -1
  178. package/esm2015/core/shared/pipes/asset-preview.pipe.js +15 -1
  179. package/esm2015/core/shared/pipes/duration.pipe.js +9 -1
  180. package/esm2015/core/shared/pipes/file-size.pipe.js +9 -1
  181. package/esm2015/core/shared/pipes/has-permission.pipe.js +4 -2
  182. package/esm2015/core/shared/pipes/locale-base.pipe.js +7 -4
  183. package/esm2015/core/shared/pipes/locale-currency-name.pipe.js +9 -1
  184. package/esm2015/core/shared/pipes/locale-currency.pipe.js +13 -1
  185. package/esm2015/core/shared/pipes/locale-date.pipe.js +8 -1
  186. package/esm2015/core/shared/pipes/locale-language-name.pipe.js +10 -2
  187. package/esm2015/core/shared/pipes/locale-region-name.pipe.js +48 -0
  188. package/esm2015/core/shared/pipes/time-ago.pipe.js +9 -1
  189. package/esm2015/core/shared/shared.module.js +13 -1
  190. package/esm2015/customer/components/customer-detail/customer-detail.component.js +5 -16
  191. package/esm2015/customer/components/customer-group-detail-dialog/customer-group-detail-dialog.component.js +32 -3
  192. package/esm2015/customer/components/customer-group-list/customer-group-list.component.js +22 -18
  193. package/esm2015/marketing/components/promotion-detail/promotion-detail.component.js +9 -2
  194. package/esm2015/order/components/order-detail/order-detail.component.js +11 -3
  195. package/esm2015/settings/components/admin-detail/admin-detail.component.js +3 -14
  196. package/esm2015/settings/components/channel-detail/channel-detail.component.js +3 -14
  197. package/esm2015/settings/components/country-detail/country-detail.component.js +11 -3
  198. package/esm2015/settings/components/country-list/country-list.component.js +19 -7
  199. package/esm2015/settings/components/global-settings/global-settings.component.js +3 -14
  200. package/esm2015/settings/components/payment-method-detail/payment-method-detail.component.js +9 -2
  201. package/esm2015/settings/components/profile/profile.component.js +3 -14
  202. package/esm2015/settings/components/shipping-method-detail/shipping-method-detail.component.js +3 -16
  203. package/esm2015/settings/components/tax-category-detail/tax-category-detail.component.js +13 -3
  204. package/esm2015/settings/components/tax-rate-detail/tax-rate-detail.component.js +9 -2
  205. package/esm2015/settings/components/zone-detail-dialog/zone-detail-dialog.component.js +32 -3
  206. package/esm2015/settings/components/zone-list/zone-list.component.js +19 -8
  207. package/fesm2015/vendure-admin-ui-catalog.js +83 -102
  208. package/fesm2015/vendure-admin-ui-catalog.js.map +1 -1
  209. package/fesm2015/vendure-admin-ui-core.js +1865 -341
  210. package/fesm2015/vendure-admin-ui-core.js.map +1 -1
  211. package/fesm2015/vendure-admin-ui-customer.js +54 -34
  212. package/fesm2015/vendure-admin-ui-customer.js.map +1 -1
  213. package/fesm2015/vendure-admin-ui-marketing.js +8 -1
  214. package/fesm2015/vendure-admin-ui-marketing.js.map +1 -1
  215. package/fesm2015/vendure-admin-ui-order.js +10 -2
  216. package/fesm2015/vendure-admin-ui-order.js.map +1 -1
  217. package/fesm2015/vendure-admin-ui-settings.js +110 -85
  218. package/fesm2015/vendure-admin-ui-settings.js.map +1 -1
  219. package/marketing/components/promotion-detail/promotion-detail.component.d.ts +2 -1
  220. package/marketing/vendure-admin-ui-marketing.metadata.json +1 -1
  221. package/order/vendure-admin-ui-order.metadata.json +1 -1
  222. package/package.json +6 -5
  223. package/settings/components/admin-detail/admin-detail.component.d.ts +0 -1
  224. package/settings/components/channel-detail/channel-detail.component.d.ts +0 -1
  225. package/settings/components/country-detail/country-detail.component.d.ts +2 -1
  226. package/settings/components/country-list/country-list.component.d.ts +7 -2
  227. package/settings/components/global-settings/global-settings.component.d.ts +0 -1
  228. package/settings/components/payment-method-detail/payment-method-detail.component.d.ts +2 -1
  229. package/settings/components/profile/profile.component.d.ts +0 -1
  230. package/settings/components/shipping-method-detail/shipping-method-detail.component.d.ts +0 -1
  231. package/settings/components/tax-category-detail/tax-category-detail.component.d.ts +2 -1
  232. package/settings/components/tax-rate-detail/tax-rate-detail.component.d.ts +2 -1
  233. package/settings/components/zone-detail-dialog/zone-detail-dialog.component.d.ts +14 -3
  234. package/settings/components/zone-list/zone-list.component.d.ts +6 -2
  235. package/settings/vendure-admin-ui-settings.metadata.json +1 -1
  236. package/static/i18n-messages/cs.json +7 -0
  237. package/static/i18n-messages/de.json +7 -0
  238. package/static/i18n-messages/en.json +7 -0
  239. package/static/i18n-messages/es.json +8 -1
  240. package/static/i18n-messages/fr.json +7 -0
  241. package/static/i18n-messages/it.json +7 -0
  242. package/static/i18n-messages/pl.json +7 -0
  243. package/static/i18n-messages/pt_BR.json +7 -0
  244. package/static/i18n-messages/pt_PT.json +7 -0
  245. package/static/i18n-messages/ru.json +7 -0
  246. package/static/i18n-messages/uk.json +7 -0
  247. package/static/i18n-messages/zh_Hans.json +7 -0
  248. package/static/i18n-messages/zh_Hant.json +7 -0
  249. package/static/styles/global/_utilities.scss +3 -1
  250. package/static/styles/theme/dark.scss +9 -0
  251. package/static/styles/theme/default.scss +8 -0
  252. package/static/theme.min.css +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"vendure-admin-ui-marketing.js","sources":["../../src/lib/marketing/src/components/promotion-detail/promotion-detail.component.ts","../../src/lib/marketing/src/components/promotion-list/promotion-list.component.ts","../../src/lib/marketing/src/providers/routing/promotion-resolver.ts","../../src/lib/marketing/src/marketing.routes.ts","../../src/lib/marketing/src/marketing.module.ts","../../src/lib/marketing/src/public_api.ts","../../src/lib/marketing/src/vendure-admin-ui-marketing.ts"],"sourcesContent":["import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\nimport { FormArray, FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport {\n BaseDetailComponent,\n ConfigurableOperation,\n ConfigurableOperationDefinition,\n ConfigurableOperationInput,\n CreatePromotionInput,\n DataService,\n encodeConfigArgValue,\n getConfigArgValue,\n getDefaultConfigArgValue,\n LanguageCode,\n NotificationService,\n Promotion,\n ServerConfigService,\n UpdatePromotionInput,\n} from '@vendure/admin-ui/core';\nimport { Observable } from 'rxjs';\nimport { mergeMap, take } from 'rxjs/operators';\n\n@Component({\n selector: 'vdr-promotion-detail',\n templateUrl: './promotion-detail.component.html',\n styleUrls: ['./promotion-detail.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PromotionDetailComponent extends BaseDetailComponent<Promotion.Fragment>\n implements OnInit, OnDestroy {\n promotion$: Observable<Promotion.Fragment>;\n detailForm: FormGroup;\n conditions: ConfigurableOperation[] = [];\n actions: ConfigurableOperation[] = [];\n\n private allConditions: ConfigurableOperationDefinition[] = [];\n private allActions: ConfigurableOperationDefinition[] = [];\n\n constructor(\n router: Router,\n route: ActivatedRoute,\n serverConfigService: ServerConfigService,\n private changeDetector: ChangeDetectorRef,\n protected dataService: DataService,\n private formBuilder: FormBuilder,\n private notificationService: NotificationService,\n ) {\n super(route, router, serverConfigService, dataService);\n this.detailForm = this.formBuilder.group({\n name: ['', Validators.required],\n enabled: true,\n couponCode: null,\n perCustomerUsageLimit: null,\n startsAt: null,\n endsAt: null,\n conditions: this.formBuilder.array([]),\n actions: this.formBuilder.array([]),\n });\n }\n\n ngOnInit() {\n this.init();\n this.promotion$ = this.entity$;\n this.dataService.promotion.getPromotionActionsAndConditions().single$.subscribe(data => {\n this.allActions = data.promotionActions;\n this.allConditions = data.promotionConditions;\n this.changeDetector.markForCheck();\n });\n }\n\n ngOnDestroy() {\n this.destroy();\n }\n\n getAvailableConditions(): ConfigurableOperationDefinition[] {\n return this.allConditions.filter(o => !this.conditions.find(c => c.code === o.code));\n }\n\n getConditionDefinition(condition: ConfigurableOperation): ConfigurableOperationDefinition | undefined {\n return this.allConditions.find(c => c.code === condition.code);\n }\n\n getAvailableActions(): ConfigurableOperationDefinition[] {\n return this.allActions.filter(o => !this.actions.find(a => a.code === o.code));\n }\n\n getActionDefinition(action: ConfigurableOperation): ConfigurableOperationDefinition | undefined {\n return this.allActions.find(c => c.code === action.code);\n }\n\n saveButtonEnabled(): boolean {\n return (\n this.detailForm.dirty &&\n this.detailForm.valid &&\n (this.conditions.length !== 0 || this.detailForm.value.couponCode) &&\n this.actions.length !== 0\n );\n }\n\n addCondition(condition: ConfigurableOperation) {\n this.addOperation('conditions', condition);\n this.detailForm.markAsDirty();\n }\n\n addAction(action: ConfigurableOperation) {\n this.addOperation('actions', action);\n this.detailForm.markAsDirty();\n }\n\n removeCondition(condition: ConfigurableOperation) {\n this.removeOperation('conditions', condition);\n this.detailForm.markAsDirty();\n }\n\n removeAction(action: ConfigurableOperation) {\n this.removeOperation('actions', action);\n this.detailForm.markAsDirty();\n }\n\n formArrayOf(key: 'conditions' | 'actions'): FormArray {\n return this.detailForm.get(key) as FormArray;\n }\n\n create() {\n if (!this.detailForm.dirty) {\n return;\n }\n const formValue = this.detailForm.value;\n const input: CreatePromotionInput = {\n name: formValue.name,\n enabled: true,\n couponCode: formValue.couponCode,\n perCustomerUsageLimit: formValue.perCustomerUsageLimit,\n startsAt: formValue.startsAt,\n endsAt: formValue.endsAt,\n conditions: this.mapOperationsToInputs(this.conditions, formValue.conditions),\n actions: this.mapOperationsToInputs(this.actions, formValue.actions),\n };\n this.dataService.promotion.createPromotion(input).subscribe(\n ({ createPromotion }) => {\n switch (createPromotion.__typename) {\n case 'Promotion':\n this.notificationService.success(_('common.notify-create-success'), {\n entity: 'Promotion',\n });\n this.detailForm.markAsPristine();\n this.changeDetector.markForCheck();\n this.router.navigate(['../', createPromotion.id], { relativeTo: this.route });\n break;\n case 'MissingConditionsError':\n this.notificationService.error(createPromotion.message);\n break;\n }\n },\n err => {\n this.notificationService.error(_('common.notify-create-error'), {\n entity: 'Promotion',\n });\n },\n );\n }\n\n save() {\n if (!this.detailForm.dirty) {\n return;\n }\n const formValue = this.detailForm.value;\n this.promotion$\n .pipe(\n take(1),\n mergeMap(promotion => {\n const input: UpdatePromotionInput = {\n id: promotion.id,\n name: formValue.name,\n enabled: formValue.enabled,\n couponCode: formValue.couponCode,\n perCustomerUsageLimit: formValue.perCustomerUsageLimit,\n startsAt: formValue.startsAt,\n endsAt: formValue.endsAt,\n conditions: this.mapOperationsToInputs(this.conditions, formValue.conditions),\n actions: this.mapOperationsToInputs(this.actions, formValue.actions),\n };\n return this.dataService.promotion.updatePromotion(input);\n }),\n )\n .subscribe(\n data => {\n this.notificationService.success(_('common.notify-update-success'), {\n entity: 'Promotion',\n });\n this.detailForm.markAsPristine();\n this.changeDetector.markForCheck();\n },\n err => {\n this.notificationService.error(_('common.notify-update-error'), {\n entity: 'Promotion',\n });\n },\n );\n }\n\n /**\n * Update the form values when the entity changes.\n */\n protected setFormValues(entity: Promotion.Fragment, languageCode: LanguageCode): void {\n this.detailForm.patchValue({\n name: entity.name,\n enabled: entity.enabled,\n couponCode: entity.couponCode,\n perCustomerUsageLimit: entity.perCustomerUsageLimit,\n startsAt: entity.startsAt,\n endsAt: entity.endsAt,\n });\n entity.conditions.forEach(o => {\n this.addOperation('conditions', o);\n });\n entity.actions.forEach(o => this.addOperation('actions', o));\n }\n\n /**\n * Maps an array of conditions or actions to the input format expected by the GraphQL API.\n */\n private mapOperationsToInputs(\n operations: ConfigurableOperation[],\n formValueOperations: any,\n ): ConfigurableOperationInput[] {\n return operations.map((o, i) => {\n return {\n code: o.code,\n arguments: Object.values<any>(formValueOperations[i].args).map((value, j) => ({\n name: o.args[j].name,\n value: encodeConfigArgValue(value),\n })),\n };\n });\n }\n\n /**\n * Adds a new condition or action to the promotion.\n */\n private addOperation(key: 'conditions' | 'actions', operation: ConfigurableOperation) {\n const operationsArray = this.formArrayOf(key);\n const collection = key === 'conditions' ? this.conditions : this.actions;\n const index = operationsArray.value.findIndex(o => o.code === operation.code);\n if (index === -1) {\n const argsHash = operation.args.reduce(\n (output, arg) => ({\n ...output,\n [arg.name]:\n getConfigArgValue(arg.value) ?? this.getDefaultArgValue(key, operation, arg.name),\n }),\n {},\n );\n operationsArray.push(\n this.formBuilder.control({\n code: operation.code,\n args: argsHash,\n }),\n );\n collection.push({\n code: operation.code,\n args: operation.args.map(a => ({ name: a.name, value: getConfigArgValue(a.value) })),\n });\n }\n }\n\n private getDefaultArgValue(\n key: 'conditions' | 'actions',\n operation: ConfigurableOperation,\n argName: string,\n ) {\n const def =\n key === 'conditions'\n ? this.allConditions.find(c => c.code === operation.code)\n : this.allActions.find(a => a.code === operation.code);\n if (def) {\n const argDef = def.args.find(a => a.name === argName);\n if (argDef) {\n return getDefaultConfigArgValue(argDef);\n }\n }\n throw new Error(`Could not determine default value for \"argName\"`);\n }\n\n /**\n * Removes a condition or action from the promotion.\n */\n private removeOperation(key: 'conditions' | 'actions', operation: ConfigurableOperation) {\n const operationsArray = this.formArrayOf(key);\n const collection = key === 'conditions' ? this.conditions : this.actions;\n const index = operationsArray.value.findIndex(o => o.code === operation.code);\n if (index !== -1) {\n operationsArray.removeAt(index);\n collection.splice(index, 1);\n }\n }\n}\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\r\nimport { FormControl, FormGroup } from '@angular/forms';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport { BaseListComponent, PromotionFilterParameter, PromotionListOptions } from '@vendure/admin-ui/core';\r\nimport { GetPromotionList } from '@vendure/admin-ui/core';\r\nimport { NotificationService } from '@vendure/admin-ui/core';\r\nimport { DataService } from '@vendure/admin-ui/core';\r\nimport { ModalService } from '@vendure/admin-ui/core';\r\nimport { EMPTY, merge } from 'rxjs';\r\nimport { debounceTime, switchMap, takeUntil } from 'rxjs/operators';\r\n\r\nexport type PromotionSearchForm = {\r\n name: string;\r\n couponCode: string;\r\n};\r\n\r\n@Component({\r\n selector: 'vdr-promotion-list',\r\n templateUrl: './promotion-list.component.html',\r\n styleUrls: ['./promotion-list.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PromotionListComponent\r\n extends BaseListComponent<GetPromotionList.Query, GetPromotionList.Items>\r\n implements OnInit {\r\n searchForm = new FormGroup({\r\n name: new FormControl(''),\r\n couponCode: new FormControl(''),\r\n });\r\n\r\n constructor(\r\n private dataService: DataService,\r\n router: Router,\r\n route: ActivatedRoute,\r\n private notificationService: NotificationService,\r\n private modalService: ModalService,\r\n ) {\r\n super(router, route);\r\n super.setQueryFn(\r\n (...args: any[]) => this.dataService.promotion.getPromotions(...args).refetchOnChannelChange(),\r\n data => data.promotions,\r\n (skip, take) => this.createQueryOptions(skip, take, this.searchForm.value),\r\n );\r\n }\r\n\r\n ngOnInit(): void {\r\n super.ngOnInit();\r\n\r\n merge(this.searchForm.valueChanges.pipe(debounceTime(250)), this.route.queryParamMap)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe(val => {\r\n if (!val.params) {\r\n this.setPageNumber(1);\r\n }\r\n this.refresh();\r\n });\r\n }\r\n\r\n deletePromotion(promotionId: string) {\r\n this.modalService\r\n .dialog({\r\n title: _('catalog.confirm-delete-promotion'),\r\n buttons: [\r\n { type: 'secondary', label: _('common.cancel') },\r\n { type: 'danger', label: _('common.delete'), returnValue: true },\r\n ],\r\n })\r\n .pipe(\r\n switchMap(response =>\r\n response ? this.dataService.promotion.deletePromotion(promotionId) : EMPTY,\r\n ),\r\n )\r\n .subscribe(\r\n () => {\r\n this.notificationService.success(_('common.notify-delete-success'), {\r\n entity: 'Promotion',\r\n });\r\n this.refresh();\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-delete-error'), {\r\n entity: 'Promotion',\r\n });\r\n },\r\n );\r\n }\r\n\r\n private createQueryOptions(\r\n skip: number,\r\n take: number,\r\n searchForm: PromotionSearchForm,\r\n ): { options: PromotionListOptions } {\r\n const filter: PromotionFilterParameter = {};\r\n\r\n if (searchForm.couponCode) {\r\n filter.couponCode = { contains: searchForm.couponCode };\r\n }\r\n\r\n if (searchForm.name) {\r\n filter.name = { contains: searchForm.name };\r\n }\r\n\r\n return {\r\n options: {\r\n skip,\r\n take,\r\n filter,\r\n },\r\n };\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { BaseEntityResolver, DataService, Promotion } from '@vendure/admin-ui/core';\r\n\r\n/**\r\n * Resolves the id from the path into a Customer entity.\r\n */\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class PromotionResolver extends BaseEntityResolver<Promotion.Fragment> {\r\n constructor(router: Router, dataService: DataService) {\r\n super(\r\n router,\r\n {\r\n __typename: 'Promotion',\r\n id: '',\r\n createdAt: '',\r\n updatedAt: '',\r\n name: '',\r\n enabled: false,\r\n conditions: [],\r\n actions: [],\r\n },\r\n id => dataService.promotion.getPromotion(id).mapStream(data => data.promotion),\r\n );\r\n }\r\n}\r\n","import { Route } from '@angular/router';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport { CanDeactivateDetailGuard, createResolveData, detailBreadcrumb, Promotion } from '@vendure/admin-ui/core';\r\n\r\nimport { PromotionDetailComponent } from './components/promotion-detail/promotion-detail.component';\r\nimport { PromotionListComponent } from './components/promotion-list/promotion-list.component';\r\nimport { PromotionResolver } from './providers/routing/promotion-resolver';\r\n\r\nexport const marketingRoutes: Route[] = [\r\n {\r\n path: 'promotions',\r\n component: PromotionListComponent,\r\n data: {\r\n breadcrumb: _('breadcrumb.promotions'),\r\n },\r\n },\r\n {\r\n path: 'promotions/:id',\r\n component: PromotionDetailComponent,\r\n resolve: createResolveData(PromotionResolver),\r\n canDeactivate: [CanDeactivateDetailGuard],\r\n data: {\r\n breadcrumb: promotionBreadcrumb,\r\n },\r\n },\r\n];\r\n\r\nexport function promotionBreadcrumb(data: any, params: any) {\r\n return detailBreadcrumb<Promotion.Fragment>({\r\n entity: data.entity,\r\n id: params.id,\r\n breadcrumbKey: 'breadcrumb.promotions',\r\n getName: promotion => promotion.name,\r\n route: 'promotions',\r\n });\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { RouterModule } from '@angular/router';\r\nimport { SharedModule } from '@vendure/admin-ui/core';\r\n\r\nimport { PromotionDetailComponent } from './components/promotion-detail/promotion-detail.component';\r\nimport { PromotionListComponent } from './components/promotion-list/promotion-list.component';\r\nimport { marketingRoutes } from './marketing.routes';\r\n\r\n@NgModule({\r\n imports: [SharedModule, RouterModule.forChild(marketingRoutes)],\r\n declarations: [PromotionListComponent, PromotionDetailComponent],\r\n})\r\nexport class MarketingModule {}\r\n","// This file was generated by the build-public-api.ts script\nexport * from './components/promotion-detail/promotion-detail.component';\nexport * from './components/promotion-list/promotion-list.component';\nexport * from './marketing.module';\nexport * from './marketing.routes';\nexport * from './providers/routing/promotion-resolver';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["_"],"mappings":"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"}
1
+ {"version":3,"file":"vendure-admin-ui-marketing.js","sources":["../../src/lib/marketing/src/components/promotion-detail/promotion-detail.component.ts","../../src/lib/marketing/src/components/promotion-list/promotion-list.component.ts","../../src/lib/marketing/src/providers/routing/promotion-resolver.ts","../../src/lib/marketing/src/marketing.routes.ts","../../src/lib/marketing/src/marketing.module.ts","../../src/lib/marketing/src/public_api.ts","../../src/lib/marketing/src/vendure-admin-ui-marketing.ts"],"sourcesContent":["import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { FormArray, FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n BaseDetailComponent,\r\n ConfigurableOperation,\r\n ConfigurableOperationDefinition,\r\n ConfigurableOperationInput,\r\n CreatePromotionInput,\r\n CustomFieldConfig,\r\n DataService,\r\n encodeConfigArgValue,\r\n getConfigArgValue,\r\n getDefaultConfigArgValue,\r\n LanguageCode,\r\n NotificationService,\r\n Promotion,\r\n ServerConfigService,\r\n UpdatePromotionInput,\r\n} from '@vendure/admin-ui/core';\r\nimport { Observable } from 'rxjs';\r\nimport { mergeMap, take } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'vdr-promotion-detail',\r\n templateUrl: './promotion-detail.component.html',\r\n styleUrls: ['./promotion-detail.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PromotionDetailComponent\r\n extends BaseDetailComponent<Promotion.Fragment>\r\n implements OnInit, OnDestroy\r\n{\r\n promotion$: Observable<Promotion.Fragment>;\r\n detailForm: FormGroup;\r\n customFields: CustomFieldConfig[];\r\n conditions: ConfigurableOperation[] = [];\r\n actions: ConfigurableOperation[] = [];\r\n\r\n private allConditions: ConfigurableOperationDefinition[] = [];\r\n private allActions: ConfigurableOperationDefinition[] = [];\r\n\r\n constructor(\r\n router: Router,\r\n route: ActivatedRoute,\r\n serverConfigService: ServerConfigService,\r\n private changeDetector: ChangeDetectorRef,\r\n protected dataService: DataService,\r\n private formBuilder: FormBuilder,\r\n private notificationService: NotificationService,\r\n ) {\r\n super(route, router, serverConfigService, dataService);\r\n this.customFields = this.getCustomFieldConfig('Promotion');\r\n this.detailForm = this.formBuilder.group({\r\n name: ['', Validators.required],\r\n enabled: true,\r\n couponCode: null,\r\n perCustomerUsageLimit: null,\r\n startsAt: null,\r\n endsAt: null,\r\n conditions: this.formBuilder.array([]),\r\n actions: this.formBuilder.array([]),\r\n customFields: this.formBuilder.group(\r\n this.customFields.reduce((hash, field) => ({ ...hash, [field.name]: '' }), {}),\r\n ),\r\n });\r\n }\r\n\r\n ngOnInit() {\r\n this.init();\r\n this.promotion$ = this.entity$;\r\n this.dataService.promotion.getPromotionActionsAndConditions().single$.subscribe(data => {\r\n this.allActions = data.promotionActions;\r\n this.allConditions = data.promotionConditions;\r\n this.changeDetector.markForCheck();\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.destroy();\r\n }\r\n\r\n getAvailableConditions(): ConfigurableOperationDefinition[] {\r\n return this.allConditions.filter(o => !this.conditions.find(c => c.code === o.code));\r\n }\r\n\r\n getConditionDefinition(condition: ConfigurableOperation): ConfigurableOperationDefinition | undefined {\r\n return this.allConditions.find(c => c.code === condition.code);\r\n }\r\n\r\n getAvailableActions(): ConfigurableOperationDefinition[] {\r\n return this.allActions.filter(o => !this.actions.find(a => a.code === o.code));\r\n }\r\n\r\n getActionDefinition(action: ConfigurableOperation): ConfigurableOperationDefinition | undefined {\r\n return this.allActions.find(c => c.code === action.code);\r\n }\r\n\r\n saveButtonEnabled(): boolean {\r\n return (\r\n this.detailForm.dirty &&\r\n this.detailForm.valid &&\r\n (this.conditions.length !== 0 || this.detailForm.value.couponCode) &&\r\n this.actions.length !== 0\r\n );\r\n }\r\n\r\n addCondition(condition: ConfigurableOperation) {\r\n this.addOperation('conditions', condition);\r\n this.detailForm.markAsDirty();\r\n }\r\n\r\n addAction(action: ConfigurableOperation) {\r\n this.addOperation('actions', action);\r\n this.detailForm.markAsDirty();\r\n }\r\n\r\n removeCondition(condition: ConfigurableOperation) {\r\n this.removeOperation('conditions', condition);\r\n this.detailForm.markAsDirty();\r\n }\r\n\r\n removeAction(action: ConfigurableOperation) {\r\n this.removeOperation('actions', action);\r\n this.detailForm.markAsDirty();\r\n }\r\n\r\n formArrayOf(key: 'conditions' | 'actions'): FormArray {\r\n return this.detailForm.get(key) as FormArray;\r\n }\r\n\r\n create() {\r\n if (!this.detailForm.dirty) {\r\n return;\r\n }\r\n const formValue = this.detailForm.value;\r\n const input: CreatePromotionInput = {\r\n name: formValue.name,\r\n enabled: true,\r\n couponCode: formValue.couponCode,\r\n perCustomerUsageLimit: formValue.perCustomerUsageLimit,\r\n startsAt: formValue.startsAt,\r\n endsAt: formValue.endsAt,\r\n conditions: this.mapOperationsToInputs(this.conditions, formValue.conditions),\r\n actions: this.mapOperationsToInputs(this.actions, formValue.actions),\r\n customFields: formValue.customFields,\r\n };\r\n this.dataService.promotion.createPromotion(input).subscribe(\r\n ({ createPromotion }) => {\r\n switch (createPromotion.__typename) {\r\n case 'Promotion':\r\n this.notificationService.success(_('common.notify-create-success'), {\r\n entity: 'Promotion',\r\n });\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n this.router.navigate(['../', createPromotion.id], { relativeTo: this.route });\r\n break;\r\n case 'MissingConditionsError':\r\n this.notificationService.error(createPromotion.message);\r\n break;\r\n }\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-create-error'), {\r\n entity: 'Promotion',\r\n });\r\n },\r\n );\r\n }\r\n\r\n save() {\r\n if (!this.detailForm.dirty) {\r\n return;\r\n }\r\n const formValue = this.detailForm.value;\r\n this.promotion$\r\n .pipe(\r\n take(1),\r\n mergeMap(promotion => {\r\n const input: UpdatePromotionInput = {\r\n id: promotion.id,\r\n name: formValue.name,\r\n enabled: formValue.enabled,\r\n couponCode: formValue.couponCode,\r\n perCustomerUsageLimit: formValue.perCustomerUsageLimit,\r\n startsAt: formValue.startsAt,\r\n endsAt: formValue.endsAt,\r\n conditions: this.mapOperationsToInputs(this.conditions, formValue.conditions),\r\n actions: this.mapOperationsToInputs(this.actions, formValue.actions),\r\n customFields: formValue.customFields,\r\n };\r\n return this.dataService.promotion.updatePromotion(input);\r\n }),\r\n )\r\n .subscribe(\r\n data => {\r\n this.notificationService.success(_('common.notify-update-success'), {\r\n entity: 'Promotion',\r\n });\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-update-error'), {\r\n entity: 'Promotion',\r\n });\r\n },\r\n );\r\n }\r\n\r\n /**\r\n * Update the form values when the entity changes.\r\n */\r\n protected setFormValues(entity: Promotion.Fragment, languageCode: LanguageCode): void {\r\n this.detailForm.patchValue({\r\n name: entity.name,\r\n enabled: entity.enabled,\r\n couponCode: entity.couponCode,\r\n perCustomerUsageLimit: entity.perCustomerUsageLimit,\r\n startsAt: entity.startsAt,\r\n endsAt: entity.endsAt,\r\n });\r\n entity.conditions.forEach(o => {\r\n this.addOperation('conditions', o);\r\n });\r\n entity.actions.forEach(o => this.addOperation('actions', o));\r\n if (this.customFields.length) {\r\n this.setCustomFieldFormValues(this.customFields, this.detailForm.get('customFields'), entity);\r\n }\r\n }\r\n\r\n /**\r\n * Maps an array of conditions or actions to the input format expected by the GraphQL API.\r\n */\r\n private mapOperationsToInputs(\r\n operations: ConfigurableOperation[],\r\n formValueOperations: any,\r\n ): ConfigurableOperationInput[] {\r\n return operations.map((o, i) => {\r\n return {\r\n code: o.code,\r\n arguments: Object.values<any>(formValueOperations[i].args).map((value, j) => ({\r\n name: o.args[j].name,\r\n value: encodeConfigArgValue(value),\r\n })),\r\n };\r\n });\r\n }\r\n\r\n /**\r\n * Adds a new condition or action to the promotion.\r\n */\r\n private addOperation(key: 'conditions' | 'actions', operation: ConfigurableOperation) {\r\n const operationsArray = this.formArrayOf(key);\r\n const collection = key === 'conditions' ? this.conditions : this.actions;\r\n const index = operationsArray.value.findIndex(o => o.code === operation.code);\r\n if (index === -1) {\r\n const argsHash = operation.args.reduce(\r\n (output, arg) => ({\r\n ...output,\r\n [arg.name]:\r\n getConfigArgValue(arg.value) ?? this.getDefaultArgValue(key, operation, arg.name),\r\n }),\r\n {},\r\n );\r\n operationsArray.push(\r\n this.formBuilder.control({\r\n code: operation.code,\r\n args: argsHash,\r\n }),\r\n );\r\n collection.push({\r\n code: operation.code,\r\n args: operation.args.map(a => ({ name: a.name, value: getConfigArgValue(a.value) })),\r\n });\r\n }\r\n }\r\n\r\n private getDefaultArgValue(\r\n key: 'conditions' | 'actions',\r\n operation: ConfigurableOperation,\r\n argName: string,\r\n ) {\r\n const def =\r\n key === 'conditions'\r\n ? this.allConditions.find(c => c.code === operation.code)\r\n : this.allActions.find(a => a.code === operation.code);\r\n if (def) {\r\n const argDef = def.args.find(a => a.name === argName);\r\n if (argDef) {\r\n return getDefaultConfigArgValue(argDef);\r\n }\r\n }\r\n throw new Error(`Could not determine default value for \"argName\"`);\r\n }\r\n\r\n /**\r\n * Removes a condition or action from the promotion.\r\n */\r\n private removeOperation(key: 'conditions' | 'actions', operation: ConfigurableOperation) {\r\n const operationsArray = this.formArrayOf(key);\r\n const collection = key === 'conditions' ? this.conditions : this.actions;\r\n const index = operationsArray.value.findIndex(o => o.code === operation.code);\r\n if (index !== -1) {\r\n operationsArray.removeAt(index);\r\n collection.splice(index, 1);\r\n }\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\r\nimport { FormControl, FormGroup } from '@angular/forms';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport { BaseListComponent, PromotionFilterParameter, PromotionListOptions } from '@vendure/admin-ui/core';\r\nimport { GetPromotionList } from '@vendure/admin-ui/core';\r\nimport { NotificationService } from '@vendure/admin-ui/core';\r\nimport { DataService } from '@vendure/admin-ui/core';\r\nimport { ModalService } from '@vendure/admin-ui/core';\r\nimport { EMPTY, merge } from 'rxjs';\r\nimport { debounceTime, switchMap, takeUntil } from 'rxjs/operators';\r\n\r\nexport type PromotionSearchForm = {\r\n name: string;\r\n couponCode: string;\r\n};\r\n\r\n@Component({\r\n selector: 'vdr-promotion-list',\r\n templateUrl: './promotion-list.component.html',\r\n styleUrls: ['./promotion-list.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PromotionListComponent\r\n extends BaseListComponent<GetPromotionList.Query, GetPromotionList.Items>\r\n implements OnInit {\r\n searchForm = new FormGroup({\r\n name: new FormControl(''),\r\n couponCode: new FormControl(''),\r\n });\r\n\r\n constructor(\r\n private dataService: DataService,\r\n router: Router,\r\n route: ActivatedRoute,\r\n private notificationService: NotificationService,\r\n private modalService: ModalService,\r\n ) {\r\n super(router, route);\r\n super.setQueryFn(\r\n (...args: any[]) => this.dataService.promotion.getPromotions(...args).refetchOnChannelChange(),\r\n data => data.promotions,\r\n (skip, take) => this.createQueryOptions(skip, take, this.searchForm.value),\r\n );\r\n }\r\n\r\n ngOnInit(): void {\r\n super.ngOnInit();\r\n\r\n merge(this.searchForm.valueChanges.pipe(debounceTime(250)), this.route.queryParamMap)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe(val => {\r\n if (!val.params) {\r\n this.setPageNumber(1);\r\n }\r\n this.refresh();\r\n });\r\n }\r\n\r\n deletePromotion(promotionId: string) {\r\n this.modalService\r\n .dialog({\r\n title: _('catalog.confirm-delete-promotion'),\r\n buttons: [\r\n { type: 'secondary', label: _('common.cancel') },\r\n { type: 'danger', label: _('common.delete'), returnValue: true },\r\n ],\r\n })\r\n .pipe(\r\n switchMap(response =>\r\n response ? this.dataService.promotion.deletePromotion(promotionId) : EMPTY,\r\n ),\r\n )\r\n .subscribe(\r\n () => {\r\n this.notificationService.success(_('common.notify-delete-success'), {\r\n entity: 'Promotion',\r\n });\r\n this.refresh();\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-delete-error'), {\r\n entity: 'Promotion',\r\n });\r\n },\r\n );\r\n }\r\n\r\n private createQueryOptions(\r\n skip: number,\r\n take: number,\r\n searchForm: PromotionSearchForm,\r\n ): { options: PromotionListOptions } {\r\n const filter: PromotionFilterParameter = {};\r\n\r\n if (searchForm.couponCode) {\r\n filter.couponCode = { contains: searchForm.couponCode };\r\n }\r\n\r\n if (searchForm.name) {\r\n filter.name = { contains: searchForm.name };\r\n }\r\n\r\n return {\r\n options: {\r\n skip,\r\n take,\r\n filter,\r\n },\r\n };\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { BaseEntityResolver, DataService, Promotion } from '@vendure/admin-ui/core';\r\n\r\n/**\r\n * Resolves the id from the path into a Customer entity.\r\n */\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class PromotionResolver extends BaseEntityResolver<Promotion.Fragment> {\r\n constructor(router: Router, dataService: DataService) {\r\n super(\r\n router,\r\n {\r\n __typename: 'Promotion',\r\n id: '',\r\n createdAt: '',\r\n updatedAt: '',\r\n name: '',\r\n enabled: false,\r\n conditions: [],\r\n actions: [],\r\n },\r\n id => dataService.promotion.getPromotion(id).mapStream(data => data.promotion),\r\n );\r\n }\r\n}\r\n","import { Route } from '@angular/router';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport { CanDeactivateDetailGuard, createResolveData, detailBreadcrumb, Promotion } from '@vendure/admin-ui/core';\r\n\r\nimport { PromotionDetailComponent } from './components/promotion-detail/promotion-detail.component';\r\nimport { PromotionListComponent } from './components/promotion-list/promotion-list.component';\r\nimport { PromotionResolver } from './providers/routing/promotion-resolver';\r\n\r\nexport const marketingRoutes: Route[] = [\r\n {\r\n path: 'promotions',\r\n component: PromotionListComponent,\r\n data: {\r\n breadcrumb: _('breadcrumb.promotions'),\r\n },\r\n },\r\n {\r\n path: 'promotions/:id',\r\n component: PromotionDetailComponent,\r\n resolve: createResolveData(PromotionResolver),\r\n canDeactivate: [CanDeactivateDetailGuard],\r\n data: {\r\n breadcrumb: promotionBreadcrumb,\r\n },\r\n },\r\n];\r\n\r\nexport function promotionBreadcrumb(data: any, params: any) {\r\n return detailBreadcrumb<Promotion.Fragment>({\r\n entity: data.entity,\r\n id: params.id,\r\n breadcrumbKey: 'breadcrumb.promotions',\r\n getName: promotion => promotion.name,\r\n route: 'promotions',\r\n });\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { RouterModule } from '@angular/router';\r\nimport { SharedModule } from '@vendure/admin-ui/core';\r\n\r\nimport { PromotionDetailComponent } from './components/promotion-detail/promotion-detail.component';\r\nimport { PromotionListComponent } from './components/promotion-list/promotion-list.component';\r\nimport { marketingRoutes } from './marketing.routes';\r\n\r\n@NgModule({\r\n imports: [SharedModule, RouterModule.forChild(marketingRoutes)],\r\n declarations: [PromotionListComponent, PromotionDetailComponent],\r\n})\r\nexport class MarketingModule {}\r\n","// This file was generated by the build-public-api.ts script\nexport * from './components/promotion-detail/promotion-detail.component';\nexport * from './components/promotion-list/promotion-list.component';\nexport * from './marketing.module';\nexport * from './marketing.routes';\nexport * from './providers/routing/promotion-resolver';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["_"],"mappings":"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"}
@@ -975,6 +975,7 @@ class OrderDetailComponent extends BaseDetailComponent {
975
975
  return order.totalWithTax - amountCovered;
976
976
  }
977
977
  addManualPayment(order) {
978
+ const priorState = order.state;
978
979
  this.modalService
979
980
  .fromComponent(AddManualPaymentDialogComponent, {
980
981
  closable: true,
@@ -999,7 +1000,14 @@ class OrderDetailComponent extends BaseDetailComponent {
999
1000
  switch (addManualPaymentToOrder.__typename) {
1000
1001
  case 'Order':
1001
1002
  this.notificationService.success(marker('order.add-payment-to-order-success'));
1002
- return this.orderTransitionService.transitionToPreModifyingState(order.id, order.nextStates);
1003
+ if (priorState === 'ArrangingAdditionalPayment') {
1004
+ return this.orderTransitionService.transitionToPreModifyingState(order.id, order.nextStates);
1005
+ }
1006
+ else {
1007
+ return this.dataService.order
1008
+ .transitionToState(this.id, 'PaymentSettled')
1009
+ .pipe(mapTo('PaymentSettled'));
1010
+ }
1003
1011
  case 'ManualPaymentStateError':
1004
1012
  this.notificationService.error(addManualPaymentToOrder.message);
1005
1013
  return EMPTY;
@@ -1262,7 +1270,7 @@ class OrderDetailComponent extends BaseDetailComponent {
1262
1270
  OrderDetailComponent.decorators = [
1263
1271
  { type: Component, args: [{
1264
1272
  selector: 'vdr-order-detail',
1265
- 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\">\r\n <button\r\n class=\"icon-button\"\r\n (click)=\"openStateDiagram()\"\r\n [title]=\"'order.order-state-diagram' | translate\"\r\n >\r\n <clr-icon shape=\"list\"></clr-icon>\r\n </button>\r\n </vdr-order-state-label>\r\n </div>\r\n </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"order-detail\"></vdr-action-bar-items>\r\n <button\r\n class=\"btn btn-primary\"\r\n *ngIf=\"\r\n order.state === 'ArrangingAdditionalPayment' &&\r\n (hasUnsettledModifications(order) || 0 < outstandingPaymentAmount(order))\r\n \"\r\n (click)=\"addManualPayment(order)\"\r\n >\r\n {{ 'order.add-payment-to-order' | translate }}\r\n ({{ outstandingPaymentAmount(order) | localeCurrency: order.currencyCode }})\r\n </button>\r\n <button\r\n class=\"btn btn-primary\"\r\n *ngIf=\"order.state !== 'ArrangingAdditionalPayment' && 0 < outstandingPaymentAmount(order)\"\r\n (click)=\"transitionToState('ArrangingAdditionalPayment')\"\r\n >\r\n {{ 'order.arrange-additional-payment' | translate }}\r\n </button>\r\n <button class=\"btn btn-primary\" (click)=\"fulfillOrder()\" [disabled]=\"!canAddFulfillment(order)\">\r\n {{ 'order.fulfill-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 <ng-container *ngIf=\"order.nextStates.includes('Modifying')\">\r\n <button type=\"button\" class=\"btn\" vdrDropdownItem (click)=\"transitionToModifying()\">\r\n <clr-icon shape=\"pencil\"></clr-icon>\r\n {{ 'order.modify-order' | translate }}\r\n </button>\r\n <div class=\"dropdown-divider\"></div>\r\n </ng-container>\r\n <button\r\n type=\"button\"\r\n class=\"btn\"\r\n vdrDropdownItem\r\n *ngIf=\"order.nextStates.includes('Cancelled')\"\r\n (click)=\"cancelOrRefund(order)\"\r\n >\r\n <clr-icon shape=\"error-standard\" class=\"is-error\"></clr-icon>\r\n <ng-container *ngIf=\"orderHasSettledPayments(order); else cancelOnly\">\r\n {{ 'order.refund-and-cancel-order' | translate }}\r\n </ng-container>\r\n <ng-template #cancelOnly>\r\n {{ 'order.cancel-order' | translate }}\r\n </ng-template>\r\n </button>\r\n\r\n <ng-container *ngIf=\"(nextStates$ | async)?.length\">\r\n <div class=\"dropdown-divider\"></div>\r\n <button\r\n *ngFor=\"let nextState of nextStates$ | async\"\r\n type=\"button\"\r\n class=\"btn\"\r\n vdrDropdownItem\r\n (click)=\"transitionToState(nextState)\"\r\n >\r\n <clr-icon shape=\"step-forward-2\"></clr-icon>\r\n {{\r\n 'order.transition-to-state'\r\n | translate: { state: (nextState | stateI18nToken | translate) }\r\n }}\r\n </button>\r\n </ng-container>\r\n <div class=\"dropdown-divider\"></div>\r\n <button type=\"button\" class=\"btn\" vdrDropdownItem (click)=\"manuallyTransitionToState(order)\">\r\n <clr-icon shape=\"step-forward-2\" class=\"is-warning\"></clr-icon>\r\n {{ 'order.manually-transition-to-state' | 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-order-table\r\n [order]=\"order\"\r\n [orderLineCustomFields]=\"orderLineCustomFields\"\r\n ></vdr-order-table>\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\r\n <vdr-order-history\r\n [order]=\"order\"\r\n [history]=\"history$ | async\"\r\n (addNote)=\"addNote($event)\"\r\n (updateNote)=\"updateNote($event)\"\r\n (deleteNote)=\"deleteNote($event)\"\r\n ></vdr-order-history>\r\n </div>\r\n <div class=\"clr-col-lg-4 order-cards\">\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 class=\"card\">\r\n <div class=\"card-header\">\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 [customer]=\"order.customer\"></vdr-customer-label>\r\n <h6 *ngIf=\"getOrderAddressLines(order.shippingAddress).length\">\r\n {{ 'order.shipping-address' | translate }}\r\n </h6>\r\n <vdr-formatted-address [address]=\"order.shippingAddress\"></vdr-formatted-address>\r\n <h6 *ngIf=\"getOrderAddressLines(order.billingAddress).length\">\r\n {{ 'order.billing-address' | translate }}\r\n </h6>\r\n <vdr-formatted-address [address]=\"order.billingAddress\"></vdr-formatted-address>\r\n </div>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"order.payments && order.payments.length\">\r\n <vdr-order-payment-card\r\n *ngFor=\"let payment of order.payments\"\r\n [currencyCode]=\"order.currencyCode\"\r\n [payment]=\"payment\"\r\n (settlePayment)=\"settlePayment($event)\"\r\n (transitionPaymentState)=\"transitionPaymentState($event)\"\r\n (settleRefund)=\"settleRefund($event)\"\r\n ></vdr-order-payment-card>\r\n </ng-container>\r\n <ng-container *ngFor=\"let fulfillment of order.fulfillments\">\r\n <vdr-fulfillment-card\r\n [fulfillment]=\"fulfillment\"\r\n [order]=\"order\"\r\n (transitionState)=\"transitionFulfillment(fulfillment.id, $event)\"\r\n ></vdr-fulfillment-card>\r\n </ng-container>\r\n </div>\r\n </div>\r\n</div>\r\n",
1273
+ 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\">\r\n <button\r\n class=\"icon-button\"\r\n (click)=\"openStateDiagram()\"\r\n [title]=\"'order.order-state-diagram' | translate\"\r\n >\r\n <clr-icon shape=\"list\"></clr-icon>\r\n </button>\r\n </vdr-order-state-label>\r\n </div>\r\n </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"order-detail\"></vdr-action-bar-items>\r\n <button\r\n class=\"btn btn-primary\"\r\n *ngIf=\"\r\n (order.state === 'ArrangingPayment' || order.state === 'ArrangingAdditionalPayment') &&\r\n (hasUnsettledModifications(order) || 0 < outstandingPaymentAmount(order))\r\n \"\r\n (click)=\"addManualPayment(order)\"\r\n >\r\n {{ 'order.add-payment-to-order' | translate }}\r\n ({{ outstandingPaymentAmount(order) | localeCurrency: order.currencyCode }})\r\n </button>\r\n <button\r\n class=\"btn btn-primary\"\r\n *ngIf=\"\r\n order.active === false &&\r\n order.state !== 'ArrangingAdditionalPayment' &&\r\n 0 < outstandingPaymentAmount(order)\r\n \"\r\n (click)=\"transitionToState('ArrangingAdditionalPayment')\"\r\n >\r\n {{ 'order.arrange-additional-payment' | translate }}\r\n </button>\r\n <button class=\"btn btn-primary\" (click)=\"fulfillOrder()\" [disabled]=\"!canAddFulfillment(order)\">\r\n {{ 'order.fulfill-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 <ng-container *ngIf=\"order.nextStates.includes('Modifying')\">\r\n <button type=\"button\" class=\"btn\" vdrDropdownItem (click)=\"transitionToModifying()\">\r\n <clr-icon shape=\"pencil\"></clr-icon>\r\n {{ 'order.modify-order' | translate }}\r\n </button>\r\n <div class=\"dropdown-divider\"></div>\r\n </ng-container>\r\n <button\r\n type=\"button\"\r\n class=\"btn\"\r\n vdrDropdownItem\r\n *ngIf=\"order.nextStates.includes('Cancelled')\"\r\n (click)=\"cancelOrRefund(order)\"\r\n >\r\n <clr-icon shape=\"error-standard\" class=\"is-error\"></clr-icon>\r\n <ng-container *ngIf=\"orderHasSettledPayments(order); else cancelOnly\">\r\n {{ 'order.refund-and-cancel-order' | translate }}\r\n </ng-container>\r\n <ng-template #cancelOnly>\r\n {{ 'order.cancel-order' | translate }}\r\n </ng-template>\r\n </button>\r\n\r\n <ng-container *ngIf=\"(nextStates$ | async)?.length\">\r\n <div class=\"dropdown-divider\"></div>\r\n <button\r\n *ngFor=\"let nextState of nextStates$ | async\"\r\n type=\"button\"\r\n class=\"btn\"\r\n vdrDropdownItem\r\n (click)=\"transitionToState(nextState)\"\r\n >\r\n <clr-icon shape=\"step-forward-2\"></clr-icon>\r\n {{\r\n 'order.transition-to-state'\r\n | translate: { state: (nextState | stateI18nToken | translate) }\r\n }}\r\n </button>\r\n </ng-container>\r\n <div class=\"dropdown-divider\"></div>\r\n <button type=\"button\" class=\"btn\" vdrDropdownItem (click)=\"manuallyTransitionToState(order)\">\r\n <clr-icon shape=\"step-forward-2\" class=\"is-warning\"></clr-icon>\r\n {{ 'order.manually-transition-to-state' | 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-order-table\r\n [order]=\"order\"\r\n [orderLineCustomFields]=\"orderLineCustomFields\"\r\n ></vdr-order-table>\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\r\n <vdr-custom-detail-component-host\r\n locationId=\"order-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n\r\n <vdr-order-history\r\n [order]=\"order\"\r\n [history]=\"history$ | async\"\r\n (addNote)=\"addNote($event)\"\r\n (updateNote)=\"updateNote($event)\"\r\n (deleteNote)=\"deleteNote($event)\"\r\n ></vdr-order-history>\r\n </div>\r\n <div class=\"clr-col-lg-4 order-cards\">\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 class=\"card\">\r\n <div class=\"card-header\">\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 [customer]=\"order.customer\"></vdr-customer-label>\r\n <h6 *ngIf=\"getOrderAddressLines(order.shippingAddress).length\">\r\n {{ 'order.shipping-address' | translate }}\r\n </h6>\r\n <vdr-formatted-address [address]=\"order.shippingAddress\"></vdr-formatted-address>\r\n <h6 *ngIf=\"getOrderAddressLines(order.billingAddress).length\">\r\n {{ 'order.billing-address' | translate }}\r\n </h6>\r\n <vdr-formatted-address [address]=\"order.billingAddress\"></vdr-formatted-address>\r\n </div>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"order.payments && order.payments.length\">\r\n <vdr-order-payment-card\r\n *ngFor=\"let payment of order.payments\"\r\n [currencyCode]=\"order.currencyCode\"\r\n [payment]=\"payment\"\r\n (settlePayment)=\"settlePayment($event)\"\r\n (transitionPaymentState)=\"transitionPaymentState($event)\"\r\n (settleRefund)=\"settleRefund($event)\"\r\n ></vdr-order-payment-card>\r\n </ng-container>\r\n <ng-container *ngFor=\"let fulfillment of order.fulfillments\">\r\n <vdr-fulfillment-card\r\n [fulfillment]=\"fulfillment\"\r\n [order]=\"order\"\r\n (transitionState)=\"transitionFulfillment(fulfillment.id, $event)\"\r\n ></vdr-fulfillment-card>\r\n </ng-container>\r\n </div>\r\n </div>\r\n</div>\r\n",
1266
1274
  changeDetection: ChangeDetectionStrategy.OnPush,
1267
1275
  styles: [".shipping-address{list-style-type:none;line-height:1.3em}.order-cards h6{margin-top:6px;color:var(--color-text-200)}\n"]
1268
1276
  },] }