@vendure/admin-ui 2.0.0-next.2 → 2.0.0-next.21

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 (341) hide show
  1. package/catalog/catalog.module.d.ts +15 -11
  2. package/catalog/components/assign-to-channel-dialog/assign-to-channel-dialog.component.d.ts +22 -0
  3. package/catalog/components/bulk-add-facet-values-dialog/bulk-add-facet-values-dialog.component.d.ts +41 -0
  4. package/catalog/components/bulk-add-facet-values-dialog/bulk-add-facet-values-dialog.graphql.d.ts +4 -0
  5. package/catalog/components/collection-contents/collection-contents.component.d.ts +10 -2
  6. package/catalog/components/collection-detail/collection-detail.component.d.ts +13 -4
  7. package/catalog/components/collection-list/collection-list-bulk-actions.d.ts +6 -0
  8. package/catalog/components/collection-list/collection-list.component.d.ts +9 -5
  9. package/catalog/components/collection-tree/array-to-tree.d.ts +1 -1
  10. package/catalog/components/collection-tree/collection-tree-node.component.d.ts +14 -6
  11. package/catalog/components/collection-tree/collection-tree.component.d.ts +4 -1
  12. package/catalog/components/facet-list/facet-list-bulk-actions.d.ts +5 -0
  13. package/catalog/components/facet-list/facet-list.component.d.ts +2 -1
  14. package/catalog/components/generate-product-variants/generate-product-variants.component.d.ts +3 -3
  15. package/catalog/components/option-value-input/option-value-input.component.d.ts +21 -9
  16. package/catalog/components/product-detail/product-detail.component.d.ts +1 -1
  17. package/catalog/components/product-list/product-list-bulk-actions.d.ts +6 -0
  18. package/catalog/components/product-list/product-list.component.d.ts +4 -2
  19. package/catalog/components/product-variants-editor/product-variants-editor.component.d.ts +22 -12
  20. package/catalog/components/product-variants-list/product-variants-list.component.d.ts +1 -0
  21. package/catalog/public_api.d.ts +6 -1
  22. package/core/common/component-registry-types.d.ts +1 -1
  23. package/core/common/generated-types.d.ts +3184 -195
  24. package/core/common/utilities/bulk-action-utils.d.ts +19 -0
  25. package/core/common/utilities/configurable-operation-utils.d.ts +7 -2
  26. package/core/common/utilities/selection-manager.d.ts +30 -0
  27. package/core/common/version.d.ts +1 -1
  28. package/core/components/app-shell/app-shell.component.d.ts +1 -0
  29. package/core/data/definitions/collection-definitions.d.ts +4 -0
  30. package/core/data/definitions/facet-definitions.d.ts +3 -0
  31. package/core/data/definitions/order-definitions.d.ts +14 -0
  32. package/core/data/definitions/product-definitions.d.ts +2 -0
  33. package/core/data/providers/collection-data.service.d.ts +7 -0
  34. package/core/data/providers/facet-data.service.d.ts +3 -0
  35. package/core/data/providers/order-data.service.d.ts +18 -0
  36. package/core/data/providers/product-data.service.d.ts +2 -0
  37. package/core/providers/bulk-action-registry/bulk-action-registry.service.d.ts +9 -0
  38. package/core/providers/bulk-action-registry/bulk-action-types.d.ts +149 -0
  39. package/core/providers/bulk-action-registry/register-bulk-action.d.ts +53 -0
  40. package/core/providers/local-storage/local-storage.service.d.ts +1 -0
  41. package/core/providers/modal/modal.types.d.ts +2 -0
  42. package/core/providers/nav-builder/nav-builder-types.d.ts +1 -0
  43. package/core/public_api.d.ts +24 -1
  44. package/core/shared/components/asset-gallery/asset-gallery.component.d.ts +27 -3
  45. package/core/shared/components/bulk-action-menu/bulk-action-menu.component.d.ts +32 -0
  46. package/core/shared/components/configurable-input/configurable-input.component.d.ts +8 -3
  47. package/core/shared/components/custom-field-control/custom-field-control.component.d.ts +6 -2
  48. package/core/shared/components/data-table/data-table.component.d.ts +29 -7
  49. package/core/shared/components/dropdown/dropdown-menu.component.d.ts +2 -1
  50. package/core/shared/components/facet-value-selector/facet-value-selector.component.d.ts +3 -2
  51. package/core/shared/components/product-multi-selector-dialog/product-multi-selector-dialog.component.d.ts +38 -0
  52. package/{catalog → core/shared}/components/product-search-input/product-search-input.component.d.ts +1 -1
  53. package/core/shared/components/radio-card/radio-card-fieldset.component.d.ts +24 -0
  54. package/core/shared/components/radio-card/radio-card.component.d.ts +22 -0
  55. package/core/shared/components/rich-text-editor/prosemirror/context-menu/context-menu.component.d.ts +31 -0
  56. package/core/shared/components/rich-text-editor/prosemirror/context-menu/context-menu.service.d.ts +34 -0
  57. package/core/shared/components/rich-text-editor/prosemirror/custom-nodes.d.ts +4 -0
  58. package/core/shared/components/rich-text-editor/prosemirror/inputrules.d.ts +5 -5
  59. package/core/shared/components/rich-text-editor/prosemirror/menu/links.d.ts +1 -1
  60. package/core/shared/components/rich-text-editor/prosemirror/menu/menu-common.d.ts +12 -0
  61. package/core/shared/components/rich-text-editor/prosemirror/menu/menu-plugin.d.ts +9 -0
  62. package/core/shared/components/rich-text-editor/prosemirror/menu/sub-menu-with-icon.d.ts +14 -0
  63. package/core/shared/components/rich-text-editor/prosemirror/plugins/image-plugin.d.ts +7 -0
  64. package/core/shared/components/rich-text-editor/prosemirror/plugins/link-select-plugin.d.ts +1 -1
  65. package/core/shared/components/rich-text-editor/prosemirror/plugins/raw-editor-plugin.d.ts +7 -0
  66. package/core/shared/components/rich-text-editor/prosemirror/plugins/tables-plugin.d.ts +13 -0
  67. package/core/shared/components/rich-text-editor/prosemirror/prosemirror.service.d.ts +7 -3
  68. package/core/shared/components/rich-text-editor/prosemirror/types.d.ts +0 -2
  69. package/core/shared/components/rich-text-editor/raw-html-dialog/raw-html-dialog.component.d.ts +21 -0
  70. package/core/shared/components/rich-text-editor/rich-text-editor.component.d.ts +6 -2
  71. package/core/shared/components/select-toggle/select-toggle.component.d.ts +2 -1
  72. package/core/shared/dynamic-form-inputs/code-editor-form-input/base-code-editor-form-input.component.d.ts +30 -0
  73. package/core/shared/dynamic-form-inputs/code-editor-form-input/html-editor-form-input.component.d.ts +22 -0
  74. package/core/shared/dynamic-form-inputs/code-editor-form-input/json-editor-form-input.component.d.ts +5 -17
  75. package/core/shared/dynamic-form-inputs/combination-mode-form-input/combination-mode-form-input.component.d.ts +28 -0
  76. package/core/shared/dynamic-form-inputs/facet-value-form-input/facet-value-form-input.component.d.ts +2 -0
  77. package/core/shared/dynamic-form-inputs/product-multi-selector-form-input/product-multi-selector-form-input.component.d.ts +23 -0
  78. package/core/shared/dynamic-form-inputs/register-dynamic-input-components.d.ts +5 -1
  79. package/core/shared/dynamic-form-inputs/relation-form-input/asset/relation-asset-input.component.d.ts +6 -3
  80. package/core/shared/dynamic-form-inputs/select-form-input/select-form-input.component.d.ts +10 -2
  81. package/core/shared/pipes/custom-field-description.pipe.d.ts +11 -0
  82. package/core/shared/pipes/custom-field-label.pipe.d.ts +4 -10
  83. package/core/shared/shared.module.d.ts +68 -57
  84. package/customer/components/customer-group-list/customer-group-list.component.d.ts +6 -4
  85. package/customer/components/customer-group-member-list/customer-group-member-list.component.d.ts +11 -4
  86. package/esm2020/catalog/catalog.module.mjs +31 -10
  87. package/esm2020/catalog/components/apply-facet-dialog/apply-facet-dialog.component.mjs +1 -1
  88. package/esm2020/catalog/components/assets/assets.component.mjs +2 -2
  89. package/esm2020/catalog/components/assign-products-to-channel-dialog/assign-products-to-channel-dialog.component.mjs +4 -1
  90. package/esm2020/catalog/components/assign-to-channel-dialog/assign-to-channel-dialog.component.mjs +50 -0
  91. package/esm2020/catalog/components/bulk-add-facet-values-dialog/bulk-add-facet-values-dialog.component.mjs +84 -0
  92. package/esm2020/catalog/components/bulk-add-facet-values-dialog/bulk-add-facet-values-dialog.graphql.mjs +69 -0
  93. package/esm2020/catalog/components/collection-contents/collection-contents.component.mjs +61 -13
  94. package/esm2020/catalog/components/collection-detail/collection-detail.component.mjs +70 -32
  95. package/esm2020/catalog/components/collection-list/collection-list-bulk-actions.mjs +143 -0
  96. package/esm2020/catalog/components/collection-list/collection-list.component.mjs +46 -12
  97. package/esm2020/catalog/components/collection-tree/array-to-tree.mjs +3 -3
  98. package/esm2020/catalog/components/collection-tree/collection-tree-node.component.mjs +36 -10
  99. package/esm2020/catalog/components/collection-tree/collection-tree.component.mjs +9 -4
  100. package/esm2020/catalog/components/facet-detail/facet-detail.component.mjs +3 -3
  101. package/esm2020/catalog/components/facet-list/facet-list-bulk-actions.mjs +202 -0
  102. package/esm2020/catalog/components/facet-list/facet-list.component.mjs +14 -5
  103. package/esm2020/catalog/components/generate-product-variants/generate-product-variants.component.mjs +12 -4
  104. package/esm2020/catalog/components/option-value-input/option-value-input.component.mjs +70 -11
  105. package/esm2020/catalog/components/product-detail/product-detail.component.mjs +36 -24
  106. package/esm2020/catalog/components/product-list/product-list-bulk-actions.mjs +168 -0
  107. package/esm2020/catalog/components/product-list/product-list.component.mjs +13 -9
  108. package/esm2020/catalog/components/product-variants-editor/product-variants-editor.component.mjs +130 -19
  109. package/esm2020/catalog/components/product-variants-list/product-variants-list.component.mjs +9 -3
  110. package/esm2020/catalog/providers/routing/collection-resolver.mjs +2 -1
  111. package/esm2020/catalog/public_api.mjs +7 -2
  112. package/esm2020/core/app.component.module.mjs +1 -1
  113. package/esm2020/core/common/base-detail.component.mjs +1 -1
  114. package/esm2020/core/common/component-registry-types.mjs +1 -1
  115. package/esm2020/core/common/deactivate-aware.mjs +1 -1
  116. package/esm2020/core/common/generated-types.mjs +31 -1
  117. package/esm2020/core/common/introspection-result.mjs +296 -189
  118. package/esm2020/core/common/utilities/bulk-action-utils.mjs +35 -0
  119. package/esm2020/core/common/utilities/configurable-operation-utils.mjs +37 -10
  120. package/esm2020/core/common/utilities/selection-manager.mjs +96 -0
  121. package/esm2020/core/common/version.mjs +2 -2
  122. package/esm2020/core/components/app-shell/app-shell.component.mjs +6 -5
  123. package/esm2020/core/components/breadcrumb/breadcrumb.component.mjs +2 -2
  124. package/esm2020/core/components/channel-switcher/channel-switcher.component.mjs +1 -1
  125. package/esm2020/core/components/main-nav/main-nav.component.mjs +3 -3
  126. package/esm2020/core/components/user-menu/user-menu.component.mjs +1 -1
  127. package/esm2020/core/core.module.mjs +1 -1
  128. package/esm2020/core/data/definitions/collection-definitions.mjs +47 -1
  129. package/esm2020/core/data/definitions/facet-definitions.mjs +31 -1
  130. package/esm2020/core/data/definitions/order-definitions.mjs +583 -455
  131. package/esm2020/core/data/definitions/product-definitions.mjs +23 -1
  132. package/esm2020/core/data/definitions/shared-definitions.mjs +29 -28
  133. package/esm2020/core/data/providers/collection-data.service.mjs +20 -2
  134. package/esm2020/core/data/providers/customer-data.service.mjs +6 -1
  135. package/esm2020/core/data/providers/facet-data.service.mjs +18 -2
  136. package/esm2020/core/data/providers/order-data.service.mjs +43 -2
  137. package/esm2020/core/data/providers/product-data.service.mjs +10 -2
  138. package/esm2020/core/data/providers/promotion-data.service.mjs +1 -1
  139. package/esm2020/core/data/utils/remove-readonly-custom-fields.mjs +8 -1
  140. package/esm2020/core/providers/bulk-action-registry/bulk-action-registry.service.mjs +28 -0
  141. package/esm2020/core/providers/bulk-action-registry/bulk-action-types.mjs +2 -0
  142. package/esm2020/core/providers/bulk-action-registry/register-bulk-action.mjs +63 -0
  143. package/esm2020/core/providers/dashboard-widget/dashboard-widget.service.mjs +1 -4
  144. package/esm2020/core/providers/local-storage/local-storage.service.mjs +1 -1
  145. package/esm2020/core/providers/modal/modal.service.mjs +2 -1
  146. package/esm2020/core/providers/modal/modal.types.mjs +1 -1
  147. package/esm2020/core/providers/nav-builder/nav-builder-types.mjs +1 -1
  148. package/esm2020/core/public_api.mjs +25 -2
  149. package/esm2020/core/shared/components/action-bar/action-bar.component.mjs +7 -15
  150. package/esm2020/core/shared/components/address-form/address-form.component.mjs +3 -3
  151. package/esm2020/core/shared/components/asset-gallery/asset-gallery.component.mjs +34 -51
  152. package/esm2020/core/shared/components/asset-preview/asset-preview.component.mjs +4 -4
  153. package/esm2020/core/shared/components/asset-preview-links/asset-preview-links.component.mjs +1 -1
  154. package/esm2020/core/shared/components/bulk-action-menu/bulk-action-menu.component.mjs +97 -0
  155. package/esm2020/core/shared/components/configurable-input/configurable-input.component.mjs +22 -10
  156. package/esm2020/core/shared/components/custom-field-control/custom-field-control.component.mjs +18 -10
  157. package/esm2020/core/shared/components/data-table/data-table.component.mjs +64 -14
  158. package/esm2020/core/shared/components/datetime-picker/datetime-picker.component.mjs +1 -1
  159. package/esm2020/core/shared/components/dropdown/dropdown-menu.component.mjs +26 -23
  160. package/esm2020/core/shared/components/dropdown/dropdown-trigger.directive.mjs +1 -1
  161. package/esm2020/core/shared/components/entity-info/entity-info.component.mjs +1 -1
  162. package/esm2020/core/shared/components/facet-value-selector/facet-value-selector.component.mjs +13 -6
  163. package/esm2020/core/shared/components/formatted-address/formatted-address.component.mjs +3 -3
  164. package/esm2020/core/shared/components/help-tooltip/help-tooltip.component.mjs +2 -2
  165. package/esm2020/core/shared/components/history-entry-detail/history-entry-detail.component.mjs +1 -1
  166. package/esm2020/core/shared/components/language-selector/language-selector.component.mjs +3 -3
  167. package/esm2020/core/shared/components/object-tree/object-tree.component.mjs +1 -1
  168. package/esm2020/core/shared/components/order-state-label/order-state-label.component.mjs +2 -1
  169. package/esm2020/core/shared/components/product-multi-selector-dialog/product-multi-selector-dialog.component.mjs +135 -0
  170. package/esm2020/core/shared/components/product-search-input/product-search-input.component.mjs +108 -0
  171. package/esm2020/core/shared/components/product-variant-selector/product-variant-selector.component.mjs +2 -2
  172. package/esm2020/core/shared/components/radio-card/radio-card-fieldset.component.mjs +54 -0
  173. package/esm2020/core/shared/components/radio-card/radio-card.component.mjs +53 -0
  174. package/esm2020/core/shared/components/rich-text-editor/external-image-dialog/external-image-dialog.component.mjs +3 -3
  175. package/esm2020/core/shared/components/rich-text-editor/prosemirror/context-menu/context-menu.component.mjs +136 -0
  176. package/esm2020/core/shared/components/rich-text-editor/prosemirror/context-menu/context-menu.service.mjs +46 -0
  177. package/esm2020/core/shared/components/rich-text-editor/prosemirror/custom-nodes.mjs +57 -0
  178. package/esm2020/core/shared/components/rich-text-editor/prosemirror/menu/links.mjs +4 -4
  179. package/esm2020/core/shared/components/rich-text-editor/prosemirror/menu/menu-common.mjs +22 -1
  180. package/esm2020/core/shared/components/rich-text-editor/prosemirror/menu/menu-plugin.mjs +12 -0
  181. package/esm2020/core/shared/components/rich-text-editor/prosemirror/menu/menu.mjs +73 -18
  182. package/esm2020/core/shared/components/rich-text-editor/prosemirror/menu/sub-menu-with-icon.mjs +16 -0
  183. package/esm2020/core/shared/components/rich-text-editor/prosemirror/plugins/image-plugin.mjs +100 -0
  184. package/esm2020/core/shared/components/rich-text-editor/prosemirror/plugins/raw-editor-plugin.mjs +96 -0
  185. package/esm2020/core/shared/components/rich-text-editor/prosemirror/plugins/tables-plugin.mjs +166 -0
  186. package/esm2020/core/shared/components/rich-text-editor/prosemirror/prosemirror.service.mjs +47 -18
  187. package/esm2020/core/shared/components/rich-text-editor/prosemirror/types.mjs +1 -1
  188. package/esm2020/core/shared/components/rich-text-editor/raw-html-dialog/raw-html-dialog.component.mjs +59 -0
  189. package/esm2020/core/shared/components/rich-text-editor/rich-text-editor.component.mjs +22 -10
  190. package/esm2020/core/shared/components/select-toggle/select-toggle.component.mjs +6 -3
  191. package/esm2020/core/shared/components/simple-dialog/simple-dialog.component.mjs +3 -3
  192. package/esm2020/core/shared/components/ui-extension-point/ui-extension-point.component.mjs +1 -1
  193. package/esm2020/core/shared/dynamic-form-inputs/code-editor-form-input/base-code-editor-form-input.component.mjs +57 -0
  194. package/esm2020/core/shared/dynamic-form-inputs/code-editor-form-input/html-editor-form-input.component.mjs +63 -0
  195. package/esm2020/core/shared/dynamic-form-inputs/code-editor-form-input/json-editor-form-input.component.mjs +48 -83
  196. package/esm2020/core/shared/dynamic-form-inputs/combination-mode-form-input/combination-mode-form-input.component.mjs +45 -0
  197. package/esm2020/core/shared/dynamic-form-inputs/dynamic-form-input/dynamic-form-input.component.mjs +3 -3
  198. package/esm2020/core/shared/dynamic-form-inputs/facet-value-form-input/facet-value-form-input.component.mjs +12 -3
  199. package/esm2020/core/shared/dynamic-form-inputs/product-multi-selector-form-input/product-multi-selector-form-input.component.mjs +48 -0
  200. package/esm2020/core/shared/dynamic-form-inputs/register-dynamic-input-components.mjs +7 -1
  201. package/esm2020/core/shared/dynamic-form-inputs/relation-form-input/asset/relation-asset-input.component.mjs +11 -9
  202. package/esm2020/core/shared/dynamic-form-inputs/relation-form-input/generic/relation-generic-input.component.mjs +1 -1
  203. package/esm2020/core/shared/dynamic-form-inputs/select-form-input/select-form-input.component.mjs +21 -11
  204. package/esm2020/core/shared/pipes/custom-field-description.pipe.mjs +30 -0
  205. package/esm2020/core/shared/pipes/custom-field-label.pipe.mjs +7 -19
  206. package/esm2020/core/shared/pipes/locale-currency.pipe.mjs +10 -2
  207. package/esm2020/core/shared/pipes/state-i18n-token.pipe.mjs +2 -1
  208. package/esm2020/core/shared/shared.module.mjs +49 -5
  209. package/esm2020/customer/components/address-card/address-card.component.mjs +1 -1
  210. package/esm2020/customer/components/customer-detail/customer-detail.component.mjs +1 -1
  211. package/esm2020/customer/components/customer-group-list/customer-group-list.component.mjs +33 -18
  212. package/esm2020/customer/components/customer-group-member-list/customer-group-member-list.component.mjs +3 -3
  213. package/esm2020/customer/components/customer-history/customer-history.component.mjs +1 -1
  214. package/esm2020/customer/components/customer-list/customer-list.component.mjs +3 -3
  215. package/esm2020/dashboard/components/dashboard/dashboard.component.mjs +2 -2
  216. package/esm2020/dashboard/components/dashboard-widget/dashboard-widget.component.mjs +2 -2
  217. package/esm2020/dashboard/dashboard.module.mjs +6 -2
  218. package/esm2020/dashboard/widgets/latest-orders-widget/latest-orders-widget.component.mjs +1 -1
  219. package/esm2020/dashboard/widgets/order-summary-widget/order-summary-widget.component.mjs +2 -2
  220. package/esm2020/login/components/login/login.component.mjs +3 -3
  221. package/esm2020/marketing/components/promotion-detail/promotion-detail.component.mjs +3 -3
  222. package/esm2020/marketing/components/promotion-list/promotion-list.component.mjs +1 -1
  223. package/esm2020/order/components/cancel-order-dialog/cancel-order-dialog.component.mjs +1 -1
  224. package/esm2020/order/components/coupon-code-selector/coupon-code-selector.component.mjs +42 -0
  225. package/esm2020/order/components/draft-order-detail/draft-order-detail.component.mjs +187 -0
  226. package/esm2020/order/components/draft-order-variant-selector/draft-order-variant-selector.component.mjs +59 -0
  227. package/esm2020/order/components/fulfill-order-dialog/fulfill-order-dialog.component.mjs +7 -3
  228. package/esm2020/order/components/fulfillment-card/fulfillment-card.component.mjs +1 -1
  229. package/esm2020/order/components/fulfillment-detail/fulfillment-detail.component.mjs +8 -17
  230. package/esm2020/order/components/line-fulfillment/line-fulfillment.component.mjs +8 -22
  231. package/esm2020/order/components/order-custom-fields-card/order-custom-fields-card.component.mjs +30 -6
  232. package/esm2020/order/components/order-detail/order-detail.component.mjs +80 -40
  233. package/esm2020/order/components/order-editor/order-editor.component.mjs +15 -14
  234. package/esm2020/order/components/order-edits-preview-dialog/order-edits-preview-dialog.component.mjs +1 -1
  235. package/esm2020/order/components/order-history/order-history.component.mjs +1 -1
  236. package/esm2020/order/components/order-list/order-list.component.mjs +40 -17
  237. package/esm2020/order/components/order-payment-card/order-payment-card.component.mjs +3 -3
  238. package/esm2020/order/components/order-table/order-table.component.mjs +29 -6
  239. package/esm2020/order/components/refund-order-dialog/refund-order-dialog.component.mjs +2 -2
  240. package/esm2020/order/components/select-address-dialog/select-address-dialog.component.mjs +89 -0
  241. package/esm2020/order/components/select-address-dialog/select-address-dialog.graphql.mjs +14 -0
  242. package/esm2020/order/components/select-customer-dialog/select-customer-dialog.component.mjs +59 -0
  243. package/esm2020/order/components/select-shipping-method-dialog/select-shipping-method-dialog.component.mjs +31 -0
  244. package/esm2020/order/order.module.mjs +20 -2
  245. package/esm2020/order/order.routes.mjs +23 -4
  246. package/esm2020/order/providers/routing/order-resolver.mjs +29 -11
  247. package/esm2020/order/providers/routing/order.guard.mjs +37 -0
  248. package/esm2020/order/public_api.mjs +9 -1
  249. package/esm2020/settings/components/administrator-list/administrator-list.component.mjs +1 -1
  250. package/esm2020/settings/components/channel-list/channel-list.component.mjs +1 -1
  251. package/esm2020/settings/components/country-list/country-list.component.mjs +3 -3
  252. package/esm2020/settings/components/payment-method-detail/payment-method-detail.component.mjs +1 -1
  253. package/esm2020/settings/components/payment-method-list/payment-method-list.component.mjs +1 -1
  254. package/esm2020/settings/components/permission-grid/permission-grid.component.mjs +1 -1
  255. package/esm2020/settings/components/profile/profile.component.mjs +3 -3
  256. package/esm2020/settings/components/role-list/role-list.component.mjs +1 -1
  257. package/esm2020/settings/components/shipping-method-detail/shipping-method-detail.component.mjs +4 -2
  258. package/esm2020/settings/components/shipping-method-list/shipping-method-list.component.mjs +1 -1
  259. package/esm2020/settings/components/tax-category-list/tax-category-list.component.mjs +1 -1
  260. package/esm2020/settings/components/tax-rate-list/tax-rate-list.component.mjs +1 -1
  261. package/esm2020/settings/components/zone-detail-dialog/zone-detail-dialog.component.mjs +2 -2
  262. package/esm2020/settings/components/zone-list/zone-list.component.mjs +3 -3
  263. package/esm2020/settings/components/zone-member-list/zone-member-list.component.mjs +3 -3
  264. package/esm2020/system/components/health-check/health-check.component.mjs +2 -2
  265. package/esm2020/system/components/job-list/job-list.component.mjs +1 -1
  266. package/fesm2015/vendure-admin-ui-catalog.mjs +1206 -228
  267. package/fesm2015/vendure-admin-ui-catalog.mjs.map +1 -1
  268. package/fesm2015/vendure-admin-ui-core.mjs +9451 -7332
  269. package/fesm2015/vendure-admin-ui-core.mjs.map +1 -1
  270. package/fesm2015/vendure-admin-ui-customer.mjs +36 -23
  271. package/fesm2015/vendure-admin-ui-customer.mjs.map +1 -1
  272. package/fesm2015/vendure-admin-ui-dashboard.mjs +11 -7
  273. package/fesm2015/vendure-admin-ui-dashboard.mjs.map +1 -1
  274. package/fesm2015/vendure-admin-ui-login.mjs +2 -2
  275. package/fesm2015/vendure-admin-ui-login.mjs.map +1 -1
  276. package/fesm2015/vendure-admin-ui-marketing.mjs +3 -3
  277. package/fesm2015/vendure-admin-ui-marketing.mjs.map +1 -1
  278. package/fesm2015/vendure-admin-ui-order.mjs +1184 -599
  279. package/fesm2015/vendure-admin-ui-order.mjs.map +1 -1
  280. package/fesm2015/vendure-admin-ui-settings.mjs +21 -19
  281. package/fesm2015/vendure-admin-ui-settings.mjs.map +1 -1
  282. package/fesm2015/vendure-admin-ui-system.mjs +3 -3
  283. package/fesm2020/vendure-admin-ui-catalog.mjs +1190 -230
  284. package/fesm2020/vendure-admin-ui-catalog.mjs.map +1 -1
  285. package/fesm2020/vendure-admin-ui-core.mjs +9539 -7437
  286. package/fesm2020/vendure-admin-ui-core.mjs.map +1 -1
  287. package/fesm2020/vendure-admin-ui-customer.mjs +36 -23
  288. package/fesm2020/vendure-admin-ui-customer.mjs.map +1 -1
  289. package/fesm2020/vendure-admin-ui-dashboard.mjs +11 -7
  290. package/fesm2020/vendure-admin-ui-dashboard.mjs.map +1 -1
  291. package/fesm2020/vendure-admin-ui-login.mjs +2 -2
  292. package/fesm2020/vendure-admin-ui-login.mjs.map +1 -1
  293. package/fesm2020/vendure-admin-ui-marketing.mjs +3 -3
  294. package/fesm2020/vendure-admin-ui-marketing.mjs.map +1 -1
  295. package/fesm2020/vendure-admin-ui-order.mjs +1194 -614
  296. package/fesm2020/vendure-admin-ui-order.mjs.map +1 -1
  297. package/fesm2020/vendure-admin-ui-settings.mjs +21 -19
  298. package/fesm2020/vendure-admin-ui-settings.mjs.map +1 -1
  299. package/fesm2020/vendure-admin-ui-system.mjs +3 -3
  300. package/order/components/coupon-code-selector/coupon-code-selector.component.d.ts +21 -0
  301. package/order/components/draft-order-detail/draft-order-detail.component.d.ts +52 -0
  302. package/order/components/draft-order-variant-selector/draft-order-variant-selector.component.d.ts +24 -0
  303. package/order/components/order-custom-fields-card/order-custom-fields-card.component.d.ts +4 -2
  304. package/order/components/order-editor/order-editor.component.d.ts +1 -6
  305. package/order/components/order-list/order-list.component.d.ts +2 -0
  306. package/order/components/order-table/order-table.component.d.ts +12 -2
  307. package/order/components/select-address-dialog/select-address-dialog.component.d.ts +27 -0
  308. package/order/components/select-address-dialog/select-address-dialog.graphql.d.ts +1 -0
  309. package/order/components/select-customer-dialog/select-customer-dialog.component.d.ts +25 -0
  310. package/order/components/select-shipping-method-dialog/select-shipping-method-dialog.component.d.ts +19 -0
  311. package/order/order.module.d.ts +9 -3
  312. package/order/providers/routing/order-resolver.d.ts +8 -3
  313. package/order/providers/routing/order.guard.d.ts +12 -0
  314. package/order/public_api.d.ts +8 -0
  315. package/package.json +13 -12
  316. package/settings/components/zone-member-list/zone-member-list.component.d.ts +3 -1
  317. package/static/i18n-messages/cs.json +50 -3
  318. package/static/i18n-messages/de.json +53 -3
  319. package/static/i18n-messages/en.json +55 -8
  320. package/static/i18n-messages/es.json +50 -3
  321. package/static/i18n-messages/fr.json +50 -3
  322. package/static/i18n-messages/it.json +50 -3
  323. package/static/i18n-messages/pl.json +50 -3
  324. package/static/i18n-messages/pt_BR.json +50 -3
  325. package/static/i18n-messages/pt_PT.json +50 -3
  326. package/static/i18n-messages/ru.json +50 -3
  327. package/static/i18n-messages/uk.json +50 -3
  328. package/static/i18n-messages/zh_Hans.json +50 -3
  329. package/static/i18n-messages/zh_Hant.json +50 -3
  330. package/static/styles/_variables.scss +4 -0
  331. package/static/styles/global/_forms.scss +8 -7
  332. package/static/styles/global/_overrides.scss +11 -1
  333. package/static/styles/global/_sass-overrides.scss +3 -0
  334. package/static/styles/global/_utilities.scss +14 -0
  335. package/static/styles/styles.scss +1 -0
  336. package/static/styles/theme/default.scss +13 -1
  337. package/static/styles/ui-extension-theme.scss +1 -0
  338. package/static/theme.min.css +1 -1
  339. package/core/shared/components/rich-text-editor/prosemirror/menu/images.d.ts +0 -4
  340. package/esm2020/catalog/components/product-search-input/product-search-input.component.mjs +0 -107
  341. package/esm2020/core/shared/components/rich-text-editor/prosemirror/menu/images.mjs +0 -36
@@ -1 +1 @@
1
- {"version":3,"file":"vendure-admin-ui-settings.mjs","sources":["../../src/lib/settings/src/components/zone-member-list/zone-member-controls.directive.ts","../../src/lib/settings/src/components/zone-member-list/zone-member-list-header.directive.ts","../../src/lib/settings/src/components/zone-member-list/zone-member-list.component.ts","../../src/lib/settings/src/components/zone-member-list/zone-member-list.component.html","../../src/lib/settings/src/components/add-country-to-zone-dialog/add-country-to-zone-dialog.component.ts","../../src/lib/settings/src/components/add-country-to-zone-dialog/add-country-to-zone-dialog.component.html","../../src/lib/settings/src/components/permission-grid/permission-grid.component.ts","../../src/lib/settings/src/components/permission-grid/permission-grid.component.html","../../src/lib/settings/src/components/admin-detail/admin-detail.component.ts","../../src/lib/settings/src/components/admin-detail/admin-detail.component.html","../../src/lib/settings/src/components/administrator-list/administrator-list.component.ts","../../src/lib/settings/src/components/administrator-list/administrator-list.component.html","../../src/lib/settings/src/components/channel-detail/channel-detail.component.ts","../../src/lib/settings/src/components/channel-detail/channel-detail.component.html","../../src/lib/settings/src/components/channel-list/channel-list.component.ts","../../src/lib/settings/src/components/channel-list/channel-list.component.html","../../src/lib/settings/src/components/country-detail/country-detail.component.ts","../../src/lib/settings/src/components/country-detail/country-detail.component.html","../../src/lib/settings/src/components/country-list/country-list.component.ts","../../src/lib/settings/src/components/country-list/country-list.component.html","../../src/lib/settings/src/components/global-settings/global-settings.component.ts","../../src/lib/settings/src/components/global-settings/global-settings.component.html","../../src/lib/settings/src/components/payment-method-detail/payment-method-detail.component.ts","../../src/lib/settings/src/components/payment-method-detail/payment-method-detail.component.html","../../src/lib/settings/src/components/payment-method-list/payment-method-list.component.ts","../../src/lib/settings/src/components/payment-method-list/payment-method-list.component.html","../../src/lib/settings/src/components/profile/profile.component.ts","../../src/lib/settings/src/components/profile/profile.component.html","../../src/lib/settings/src/components/role-detail/role-detail.component.ts","../../src/lib/settings/src/components/role-detail/role-detail.component.html","../../src/lib/settings/src/components/role-list/role-list.component.ts","../../src/lib/settings/src/components/role-list/role-list.component.html","../../src/lib/settings/src/components/shipping-eligibility-test-result/shipping-eligibility-test-result.component.ts","../../src/lib/settings/src/components/shipping-eligibility-test-result/shipping-eligibility-test-result.component.html","../../src/lib/settings/src/components/test-order-builder/test-order-builder.component.ts","../../src/lib/settings/src/components/test-order-builder/test-order-builder.component.html","../../src/lib/settings/src/components/test-address-form/test-address-form.component.ts","../../src/lib/settings/src/components/test-address-form/test-address-form.component.html","../../src/lib/settings/src/components/shipping-method-test-result/shipping-method-test-result.component.ts","../../src/lib/settings/src/components/shipping-method-test-result/shipping-method-test-result.component.html","../../src/lib/settings/src/components/shipping-method-detail/shipping-method-detail.component.ts","../../src/lib/settings/src/components/shipping-method-detail/shipping-method-detail.component.html","../../src/lib/settings/src/components/shipping-method-list/shipping-method-list.component.ts","../../src/lib/settings/src/components/shipping-method-list/shipping-method-list.component.html","../../src/lib/settings/src/components/tax-category-detail/tax-category-detail.component.ts","../../src/lib/settings/src/components/tax-category-detail/tax-category-detail.component.html","../../src/lib/settings/src/components/tax-category-list/tax-category-list.component.ts","../../src/lib/settings/src/components/tax-category-list/tax-category-list.component.html","../../src/lib/settings/src/components/tax-rate-detail/tax-rate-detail.component.ts","../../src/lib/settings/src/components/tax-rate-detail/tax-rate-detail.component.html","../../src/lib/settings/src/components/tax-rate-list/tax-rate-list.component.ts","../../src/lib/settings/src/components/tax-rate-list/tax-rate-list.component.html","../../src/lib/settings/src/components/zone-detail-dialog/zone-detail-dialog.component.ts","../../src/lib/settings/src/components/zone-detail-dialog/zone-detail-dialog.component.html","../../src/lib/settings/src/components/zone-list/zone-list.component.ts","../../src/lib/settings/src/components/zone-list/zone-list.component.html","../../src/lib/settings/src/providers/routing/administrator-resolver.ts","../../src/lib/settings/src/providers/routing/channel-resolver.ts","../../src/lib/settings/src/providers/routing/country-resolver.ts","../../src/lib/settings/src/providers/routing/global-settings-resolver.ts","../../src/lib/settings/src/providers/routing/payment-method-resolver.ts","../../src/lib/settings/src/providers/routing/profile-resolver.ts","../../src/lib/settings/src/providers/routing/role-resolver.ts","../../src/lib/settings/src/providers/routing/shipping-method-resolver.ts","../../src/lib/settings/src/providers/routing/tax-category-resolver.ts","../../src/lib/settings/src/providers/routing/tax-rate-resolver.ts","../../src/lib/settings/src/settings.routes.ts","../../src/lib/settings/src/settings.module.ts","../../src/lib/settings/src/public_api.ts","../../src/lib/settings/src/vendure-admin-ui-settings.ts"],"sourcesContent":["import { Directive, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[vdrZoneMemberControls]',\r\n})\r\nexport class ZoneMemberControlsDirective {\r\n constructor(public templateRef: TemplateRef<any>) {}\r\n}\r\n","import { Directive, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[vdrZoneMemberListHeader]',\r\n})\r\nexport class ZoneMemberListHeaderDirective {\r\n constructor(public templateRef: TemplateRef<any>) {}\r\n}\r\n","import { ChangeDetectionStrategy, Component, ContentChild, EventEmitter, Input, Output } from '@angular/core';\r\n\r\nimport { ZoneMemberControlsDirective } from './zone-member-controls.directive';\r\nimport { ZoneMemberListHeaderDirective } from './zone-member-list-header.directive';\r\n\r\nexport type ZoneMember = { id: string; name: string; code: string };\r\n\r\n@Component({\r\n selector: 'vdr-zone-member-list',\r\n templateUrl: './zone-member-list.component.html',\r\n styleUrls: ['./zone-member-list.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ZoneMemberListComponent {\r\n @Input() members: ZoneMember[] = [];\r\n @Input() selectedMemberIds: string[] = [];\r\n @Output() selectionChange = new EventEmitter<string[]>();\r\n @ContentChild(ZoneMemberListHeaderDirective) headerTemplate: ZoneMemberListHeaderDirective;\r\n @ContentChild(ZoneMemberControlsDirective) controlsTemplate: ZoneMemberControlsDirective;\r\n filterTerm = '';\r\n\r\n filteredMembers(): ZoneMember[] {\r\n if (this.filterTerm !== '') {\r\n const term = this.filterTerm.toLocaleLowerCase();\r\n return this.members.filter(\r\n m => m.name.toLocaleLowerCase().includes(term) || m.code.toLocaleLowerCase().includes(term),\r\n );\r\n } else {\r\n return this.members;\r\n }\r\n }\r\n\r\n areAllSelected(): boolean {\r\n if (this.members) {\r\n return this.selectedMemberIds.length === this.members.length;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n toggleSelectAll() {\r\n if (this.areAllSelected()) {\r\n this.selectionChange.emit([]);\r\n } else {\r\n this.selectionChange.emit(this.members.map(v => v.id));\r\n }\r\n }\r\n\r\n toggleSelectMember(member: ZoneMember) {\r\n if (this.selectedMemberIds.includes(member.id)) {\r\n this.selectionChange.emit(this.selectedMemberIds.filter(id => id !== member.id));\r\n } else {\r\n this.selectionChange.emit([...this.selectedMemberIds, member.id]);\r\n }\r\n }\r\n\r\n isMemberSelected = (member: ZoneMember): boolean => {\r\n return -1 < this.selectedMemberIds.indexOf(member.id);\r\n };\r\n}\r\n","<div class=\"members-header\">\r\n <ng-container *ngIf=\"headerTemplate\">\r\n <ng-container *ngTemplateOutlet=\"headerTemplate.templateRef\"></ng-container>\r\n </ng-container>\r\n <input\r\n type=\"text\"\r\n [placeholder]=\"'settings.filter-by-member-name' | translate\"\r\n [(ngModel)]=\"filterTerm\"\r\n />\r\n</div>\r\n<vdr-data-table\r\n [items]=\"filteredMembers()\"\r\n [allSelected]=\"areAllSelected()\"\r\n [isRowSelectedFn]=\"(['UpdateSettings', 'UpdateZone'] | hasPermission) && isMemberSelected\"\r\n (rowSelectChange)=\"toggleSelectMember($event)\"\r\n (allSelectChange)=\"toggleSelectAll()\"\r\n>\r\n <vdr-dt-column>{{ 'common.code' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'common.name' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'common.enabled' | translate }}</vdr-dt-column>\r\n <vdr-dt-column></vdr-dt-column>\r\n <ng-template let-member=\"item\">\r\n <td class=\"left align-middle\">{{ member.code }}</td>\r\n <td class=\"left align-middle\">{{ member.name }}</td>\r\n <td class=\"left align-middle\">\r\n <clr-icon\r\n [class.is-success]=\"member.enabled\"\r\n [attr.shape]=\"member.enabled ? 'check' : 'times'\"\r\n ></clr-icon>\r\n </td>\r\n <td class=\"right align-middle\">\r\n <ng-container *ngIf=\"controlsTemplate\">\r\n <ng-container\r\n *ngTemplateOutlet=\"controlsTemplate.templateRef; context: { member: member }\"\r\n ></ng-container>\r\n </ng-container>\r\n </td>\r\n </ng-template>\r\n</vdr-data-table>\r\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\r\nimport { DataService, Dialog, GetCountryListQuery, GetZonesQuery, ItemOf } from '@vendure/admin-ui/core';\r\nimport { Observable } from 'rxjs';\r\nimport { filter, map } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'vdr-add-country-to-zone-dialog',\r\n templateUrl: './add-country-to-zone-dialog.component.html',\r\n styleUrls: ['./add-country-to-zone-dialog.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class AddCountryToZoneDialogComponent implements Dialog<string[]>, OnInit {\r\n resolveWith: (result?: string[]) => void;\r\n zoneName: string;\r\n currentMembers: GetZonesQuery['zones'][number]['members'] = [];\r\n availableCountries$: Observable<Array<ItemOf<GetCountryListQuery, 'countries'>>>;\r\n selectedMemberIds: string[] = [];\r\n\r\n constructor(private dataService: DataService) {}\r\n\r\n ngOnInit(): void {\r\n const currentMemberIds = this.currentMembers.map(m => m.id);\r\n this.availableCountries$ = this.dataService.settings\r\n .getCountries(999)\r\n .mapStream(data => data.countries.items)\r\n .pipe(map(countries => countries.filter(c => !currentMemberIds.includes(c.id))));\r\n }\r\n\r\n cancel() {\r\n this.resolveWith();\r\n }\r\n\r\n add() {\r\n this.resolveWith(this.selectedMemberIds);\r\n }\r\n}\r\n","<ng-template vdrDialogTitle>{{ 'settings.add-countries-to-zone' | translate: { zoneName: zoneName } }}</ng-template>\r\n\r\n<vdr-zone-member-list\r\n [members]=\"availableCountries$ | async\"\r\n [selectedMemberIds]=\"selectedMemberIds\"\r\n (selectionChange)=\"selectedMemberIds = $event\"\r\n>\r\n</vdr-zone-member-list>\r\n\r\n<ng-template vdrDialogButtons>\r\n <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\r\n <button type=\"submit\" (click)=\"add()\" [disabled]=\"!selectedMemberIds.length\" class=\"btn btn-primary\">\r\n {{ 'settings.add-countries-to-zone' | translate: { zoneName: zoneName } }}\r\n </button>\r\n</ng-template>\r\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport { PermissionDefinition } from '@vendure/admin-ui/core';\n\nexport interface PermissionGridRow {\n label: string;\n description: string;\n permissions: PermissionDefinition[];\n}\n\n/**\n * A table showing and allowing the setting of all possible CRUD permissions.\n */\n@Component({\n selector: 'vdr-permission-grid',\n templateUrl: './permission-grid.component.html',\n styleUrls: ['./permission-grid.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PermissionGridComponent implements OnInit {\n @Input() permissionDefinitions: PermissionDefinition[];\n @Input() activePermissions: string[];\n @Input() readonly = false;\n @Output() permissionChange = new EventEmitter<{ permission: string; value: boolean }>();\n gridData: PermissionGridRow[];\n\n ngOnInit() {\n this.buildGrid();\n }\n\n setPermission(permission: string, value: boolean) {\n if (!this.readonly) {\n this.permissionChange.emit({ permission, value });\n }\n }\n\n toggleAll(defs: PermissionDefinition[]) {\n const value = defs.some(d => !this.activePermissions.includes(d.name));\n for (const def of defs) {\n this.permissionChange.emit({ permission: def.name, value });\n }\n }\n\n private buildGrid() {\n const crudGroups = new Map<string, PermissionDefinition[]>();\n const nonCrud: PermissionDefinition[] = [];\n const crudRe = /^(Create|Read|Update|Delete)([a-zA-Z]+)$/;\n for (const def of this.permissionDefinitions) {\n const isCrud = crudRe.test(def.name);\n if (isCrud) {\n const groupName = def.name.match(crudRe)?.[2];\n if (groupName) {\n const existing = crudGroups.get(groupName);\n if (existing) {\n existing.push(def);\n } else {\n crudGroups.set(groupName, [def]);\n }\n }\n } else if (def.assignable) {\n nonCrud.push(def);\n }\n }\n this.gridData = [\n ...nonCrud.map(d => ({\n label: d.name,\n description: d.description,\n permissions: [d],\n })),\n ...Array.from(crudGroups.entries()).map(([label, defs]) => {\n return {\n label,\n description: this.extractCrudDescription(defs[0]),\n permissions: defs,\n };\n }),\n ];\n }\n\n private extractCrudDescription(def: PermissionDefinition): string {\n return def.description.replace(/Grants permission to [\\w]+/, 'Grants permissions on');\n }\n}\n","<table class=\"table\">\r\n <tbody>\r\n <tr *ngFor=\"let section of gridData\">\r\n <td class=\"permission-group left\">\r\n <div><strong>{{ section.label | translate }}</strong></div>\r\n <small>{{ section.description | translate }}</small><br>\r\n <button *ngIf=\"1 < section.permissions.length && !readonly\" class=\"btn btn-sm btn-link\" (click)=\"toggleAll(section.permissions)\">\r\n {{ 'common.toggle-all' | translate }}\r\n </button>\r\n </td>\r\n <td *ngFor=\"let permission of section.permissions\" [attr.colspan]=\"section.permissions.length === 1 ? 4 : 1\">\r\n <vdr-select-toggle\r\n size=\"small\"\r\n [title]=\"permission.description\"\r\n [label]=\"permission.name\"\r\n [disabled]=\"readonly\"\r\n [selected]=\"activePermissions?.includes(permission.name)\"\r\n (selectedChange)=\"setPermission(permission.name, $event)\"\r\n ></vdr-select-toggle>\r\n </td>\r\n </tr>\r\n </tbody>\r\n</table>\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { 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 Administrator,\r\n AdministratorFragment,\r\n BaseDetailComponent,\r\n CreateAdministratorInput,\r\n CustomFieldConfig,\r\n DataService,\r\n LanguageCode,\r\n NotificationService,\r\n Permission,\r\n PermissionDefinition,\r\n RoleFragment,\r\n ServerConfigService,\r\n UpdateAdministratorInput,\r\n} from '@vendure/admin-ui/core';\r\nimport { CUSTOMER_ROLE_CODE } from '@vendure/common/lib/shared-constants';\r\nimport { Observable } from 'rxjs';\r\nimport { mergeMap, take } from 'rxjs/operators';\r\n\r\nexport interface PermissionsByChannel {\r\n channelId: string;\r\n channelCode: string;\r\n permissions: { [K in Permission]: boolean };\r\n}\r\n\r\n@Component({\r\n selector: 'vdr-admin-detail',\r\n templateUrl: './admin-detail.component.html',\r\n styleUrls: ['./admin-detail.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class AdminDetailComponent\r\n extends BaseDetailComponent<AdministratorFragment>\r\n implements OnInit, OnDestroy\r\n{\r\n customFields: CustomFieldConfig[];\r\n administrator$: Observable<AdministratorFragment>;\r\n permissionDefinitions: PermissionDefinition[];\r\n allRoles$: Observable<RoleFragment[]>;\r\n selectedRoles: RoleFragment[] = [];\r\n detailForm: FormGroup;\r\n selectedRolePermissions: { [channelId: string]: PermissionsByChannel } = {} as any;\r\n selectedChannelId: string | null = null;\r\n\r\n getAvailableChannels(): PermissionsByChannel[] {\r\n return Object.values(this.selectedRolePermissions);\r\n }\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('Administrator');\r\n this.detailForm = this.formBuilder.group({\r\n emailAddress: ['', Validators.required],\r\n firstName: ['', Validators.required],\r\n lastName: ['', Validators.required],\r\n password: [''],\r\n roles: [[]],\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.administrator$ = this.entity$;\r\n this.allRoles$ = this.dataService.administrator\r\n .getRoles(999)\r\n .mapStream(item => item.roles.items.filter(i => i.code !== CUSTOMER_ROLE_CODE));\r\n this.dataService.client.userStatus().single$.subscribe(({ userStatus }) => {\r\n if (!userStatus.permissions.includes(Permission.UpdateAdministrator)) {\r\n const rolesSelect = this.detailForm.get('roles');\r\n if (rolesSelect) {\r\n rolesSelect.disable();\r\n }\r\n }\r\n });\r\n this.permissionDefinitions = this.serverConfigService.getPermissionDefinitions();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy();\r\n }\r\n\r\n rolesChanged(roles: RoleFragment[]) {\r\n this.buildPermissionsMap();\r\n }\r\n\r\n getPermissionsForSelectedChannel(): string[] {\r\n function getActivePermissions(input: PermissionsByChannel['permissions']): string[] {\r\n return Object.entries(input)\r\n .filter(([permission, active]) => active)\r\n .map(([permission, active]) => permission);\r\n }\r\n if (this.selectedChannelId) {\r\n const selectedChannel = this.selectedRolePermissions[this.selectedChannelId];\r\n if (selectedChannel) {\r\n const permissionMap = this.selectedRolePermissions[this.selectedChannelId].permissions;\r\n return getActivePermissions(permissionMap);\r\n }\r\n }\r\n const channels = Object.values(this.selectedRolePermissions);\r\n if (0 < channels.length) {\r\n this.selectedChannelId = channels[0].channelId;\r\n return getActivePermissions(channels[0].permissions);\r\n }\r\n return [];\r\n }\r\n\r\n create() {\r\n const formValue = this.detailForm.value;\r\n const administrator: CreateAdministratorInput = {\r\n emailAddress: formValue.emailAddress,\r\n firstName: formValue.firstName,\r\n lastName: formValue.lastName,\r\n password: formValue.password,\r\n customFields: formValue.customFields,\r\n roleIds: formValue.roles.map(role => role.id),\r\n };\r\n this.dataService.administrator.createAdministrator(administrator).subscribe(\r\n data => {\r\n this.notificationService.success(_('common.notify-create-success'), {\r\n entity: 'Administrator',\r\n });\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n this.router.navigate(['../', data.createAdministrator.id], { relativeTo: this.route });\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-create-error'), {\r\n entity: 'Administrator',\r\n });\r\n },\r\n );\r\n }\r\n\r\n save() {\r\n this.administrator$\r\n .pipe(\r\n take(1),\r\n mergeMap(({ id }) => {\r\n const formValue = this.detailForm.value;\r\n const administrator: UpdateAdministratorInput = {\r\n id,\r\n emailAddress: formValue.emailAddress,\r\n firstName: formValue.firstName,\r\n lastName: formValue.lastName,\r\n password: formValue.password,\r\n customFields: formValue.customFields,\r\n roleIds: formValue.roles.map(role => role.id),\r\n };\r\n return this.dataService.administrator.updateAdministrator(administrator);\r\n }),\r\n )\r\n .subscribe(\r\n data => {\r\n this.notificationService.success(_('common.notify-update-success'), {\r\n entity: 'Administrator',\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: 'Administrator',\r\n });\r\n },\r\n );\r\n }\r\n\r\n protected setFormValues(administrator: Administrator, languageCode: LanguageCode): void {\r\n this.detailForm.patchValue({\r\n emailAddress: administrator.emailAddress,\r\n firstName: administrator.firstName,\r\n lastName: administrator.lastName,\r\n roles: administrator.user.roles,\r\n });\r\n if (this.customFields.length) {\r\n this.setCustomFieldFormValues(\r\n this.customFields,\r\n this.detailForm.get(['customFields']),\r\n administrator,\r\n );\r\n }\r\n const passwordControl = this.detailForm.get('password');\r\n if (passwordControl) {\r\n if (!administrator.id) {\r\n passwordControl.setValidators([Validators.required]);\r\n } else {\r\n passwordControl.setValidators([]);\r\n }\r\n }\r\n this.buildPermissionsMap();\r\n }\r\n\r\n private buildPermissionsMap() {\r\n const permissionsControl = this.detailForm.get('roles');\r\n if (permissionsControl) {\r\n const roles: RoleFragment[] = permissionsControl.value;\r\n const channelIdPermissionsMap = new Map<string, Set<Permission>>();\r\n const channelIdCodeMap = new Map<string, string>();\r\n\r\n for (const role of roles) {\r\n for (const channel of role.channels) {\r\n const channelPermissions = channelIdPermissionsMap.get(channel.id);\r\n const permissionSet = channelPermissions || new Set<Permission>();\r\n\r\n role.permissions.forEach(p => permissionSet.add(p));\r\n channelIdPermissionsMap.set(channel.id, permissionSet);\r\n channelIdCodeMap.set(channel.id, channel.code);\r\n }\r\n }\r\n\r\n this.selectedRolePermissions = {} as any;\r\n for (const channelId of Array.from(channelIdPermissionsMap.keys())) {\r\n // tslint:disable-next-line:no-non-null-assertion\r\n const permissionSet = channelIdPermissionsMap.get(channelId)!;\r\n const permissionsHash: { [K in Permission]: boolean } = {} as any;\r\n for (const def of this.serverConfigService.getPermissionDefinitions()) {\r\n permissionsHash[def.name] = permissionSet.has(def.name as Permission);\r\n }\r\n this.selectedRolePermissions[channelId] = {\r\n // tslint:disable:no-non-null-assertion\r\n channelId,\r\n channelCode: channelIdCodeMap.get(channelId)!,\r\n permissions: permissionsHash,\r\n // tslint:enable:no-non-null-assertion\r\n };\r\n }\r\n }\r\n }\r\n}\r\n","<vdr-action-bar>\r\n <vdr-ab-left>\r\n <vdr-entity-info [entity]=\"entity$ | async\"></vdr-entity-info>\r\n </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"administrator-detail\"></vdr-action-bar-items>\r\n <button\r\n class=\"btn btn-primary\"\r\n *ngIf=\"isNew$ | async; else updateButton\"\r\n (click)=\"create()\"\r\n [disabled]=\"detailForm.invalid || detailForm.pristine\"\r\n >\r\n {{ 'common.create' | translate }}\r\n </button>\r\n <ng-template #updateButton>\r\n <button\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n *vdrIfPermissions=\"'UpdateAdministrator'\"\r\n [disabled]=\"detailForm.invalid || detailForm.pristine\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </ng-template>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<form class=\"form\" [formGroup]=\"detailForm\">\r\n <vdr-form-field [label]=\"'settings.email-address' | translate\" for=\"emailAddress\">\r\n <input\r\n id=\"emailAddress\"\r\n type=\"text\"\r\n formControlName=\"emailAddress\"\r\n [readonly]=\"!('UpdateAdministrator' | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'settings.first-name' | translate\" for=\"firstName\">\r\n <input\r\n id=\"firstName\"\r\n type=\"text\"\r\n formControlName=\"firstName\"\r\n [readonly]=\"!('UpdateAdministrator' | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'settings.last-name' | translate\" for=\"lastName\">\r\n <input\r\n id=\"lastName\"\r\n type=\"text\"\r\n formControlName=\"lastName\"\r\n [readonly]=\"!('UpdateAdministrator' | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field *ngIf=\"isNew$ | async\" [label]=\"'settings.password' | translate\" for=\"password\">\r\n <input id=\"password\" type=\"password\" formControlName=\"password\" />\r\n </vdr-form-field>\r\n <vdr-form-field\r\n *ngIf=\"!(isNew$ | async) && ('UpdateAdministrator' | hasPermission)\"\r\n [label]=\"'settings.password' | translate\"\r\n for=\"password\"\r\n [readOnlyToggle]=\"true\"\r\n >\r\n <input id=\"password\" type=\"password\" formControlName=\"password\" />\r\n </vdr-form-field>\r\n <section formGroupName=\"customFields\" *ngIf=\"customFields.length\">\r\n <label>{{ 'common.custom-fields' | translate }}</label>\r\n <vdr-tabbed-custom-fields\r\n entityName=\"Administrator\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\r\n [readonly]=\"!('UpdateAdministrator' | hasPermission)\"\r\n ></vdr-tabbed-custom-fields>\r\n </section>\r\n <vdr-custom-detail-component-host\r\n locationId=\"administrator-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n <label class=\"clr-control-label\">{{ 'settings.roles' | translate }}</label>\r\n <ng-select\r\n [items]=\"allRoles$ | async\"\r\n [multiple]=\"true\"\r\n [hideSelected]=\"true\"\r\n formControlName=\"roles\"\r\n (change)=\"rolesChanged($event)\"\r\n bindLabel=\"description\"\r\n ></ng-select>\r\n\r\n <ul class=\"nav\" role=\"tablist\">\r\n <li role=\"presentation\" class=\"nav-item\" *ngFor=\"let channel of getAvailableChannels()\">\r\n <button\r\n [id]=\"channel.channelId\"\r\n (click)=\"selectedChannelId = channel.channelId\"\r\n class=\"btn btn-link nav-link\"\r\n [class.active]=\"selectedChannelId === channel.channelId\"\r\n [attr.aria-selected]=\"selectedChannelId === channel.channelId\"\r\n type=\"button\"\r\n >\r\n {{ channel.channelCode | channelCodeToLabel | translate }}\r\n </button>\r\n </li>\r\n </ul>\r\n <vdr-permission-grid\r\n [activePermissions]=\"getPermissionsForSelectedChannel()\"\r\n [permissionDefinitions]=\"permissionDefinitions\"\r\n [readonly]=\"true\"\r\n ></vdr-permission-grid>\r\n</form>\r\n","import { Component } from '@angular/core';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n BaseListComponent,\r\n DataService,\r\n GetAdministratorsQuery,\r\n ItemOf,\r\n ModalService,\r\n NotificationService,\r\n} from '@vendure/admin-ui/core';\r\nimport { EMPTY } from 'rxjs';\r\nimport { switchMap } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'vdr-administrator-list',\r\n templateUrl: './administrator-list.component.html',\r\n styleUrls: ['./administrator-list.component.scss'],\r\n})\r\nexport class AdministratorListComponent extends BaseListComponent<\r\n GetAdministratorsQuery,\r\n ItemOf<GetAdministratorsQuery, 'administrators'>\r\n> {\r\n constructor(\r\n private dataService: DataService,\r\n router: Router,\r\n route: ActivatedRoute,\r\n private modalService: ModalService,\r\n private notificationService: NotificationService,\r\n ) {\r\n super(router, route);\r\n super.setQueryFn(\r\n (...args: any[]) => this.dataService.administrator.getAdministrators(...args),\r\n data => data.administrators,\r\n );\r\n }\r\n\r\n deleteAdministrator(administrator: ItemOf<GetAdministratorsQuery, 'administrators'>) {\r\n return this.modalService\r\n .dialog({\r\n title: _('catalog.confirm-delete-administrator'),\r\n body: `${administrator.firstName} ${administrator.lastName}`,\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(res =>\r\n res ? this.dataService.administrator.deleteAdministrator(administrator.id) : EMPTY,\r\n ),\r\n )\r\n .subscribe(\r\n () => {\r\n this.notificationService.success(_('common.notify-delete-success'), {\r\n entity: 'Administrator',\r\n });\r\n this.refresh();\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-delete-error'), {\r\n entity: 'Administrator',\r\n });\r\n },\r\n );\r\n }\r\n}\r\n","<vdr-action-bar>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"administrator-list\"></vdr-action-bar-items>\r\n <a class=\"btn btn-primary\" [routerLink]=\"['./create']\" *vdrIfPermissions=\"'CreateAdministrator'\">\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'admin.create-new-administrator' | translate }}\r\n </a>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<vdr-data-table\r\n [items]=\"items$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n>\r\n <vdr-dt-column>{{ 'settings.first-name' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'settings.last-name' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'settings.email-address' | translate }}</vdr-dt-column>\r\n <vdr-dt-column></vdr-dt-column>\r\n <vdr-dt-column></vdr-dt-column>\r\n <ng-template let-administrator=\"item\">\r\n <td class=\"left align-middle\">{{ administrator.firstName }}</td>\r\n <td class=\"left align-middle\">{{ administrator.lastName }}</td>\r\n <td class=\"left align-middle\">{{ administrator.emailAddress }}</td>\r\n <td class=\"right align-middle\">\r\n <vdr-table-row-action\r\n iconShape=\"edit\"\r\n [label]=\"'common.edit' | translate\"\r\n [linkTo]=\"['./', administrator.id]\"\r\n ></vdr-table-row-action>\r\n </td>\r\n <td>\r\n <vdr-dropdown>\r\n <button type=\"button\" class=\"btn btn-link btn-sm\" vdrDropdownTrigger>\r\n {{ 'common.actions' | translate }}\r\n <clr-icon shape=\"caret down\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button\r\n type=\"button\"\r\n class=\"delete-button\"\r\n (click)=\"deleteAdministrator(administrator)\"\r\n [disabled]=\"!('DeleteAdministrator' | hasPermission)\"\r\n vdrDropdownItem\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'common.delete' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </td>\r\n </ng-template>\r\n</vdr-data-table>\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { 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 ChannelFragment,\r\n CreateChannelInput,\r\n CurrencyCode,\r\n CustomFieldConfig,\r\n DataService,\r\n GetZonesQuery,\r\n LanguageCode,\r\n NotificationService,\r\n Permission,\r\n ServerConfigService,\r\n UpdateChannelInput,\r\n} from '@vendure/admin-ui/core';\r\nimport { DEFAULT_CHANNEL_CODE } from '@vendure/common/lib/shared-constants';\r\nimport { Observable } from 'rxjs';\r\nimport { map, mergeMap, take } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'vdr-channel-detail',\r\n templateUrl: './channel-detail.component.html',\r\n styleUrls: ['./channel-detail.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ChannelDetailComponent\r\n extends BaseDetailComponent<ChannelFragment>\r\n implements OnInit, OnDestroy\r\n{\r\n customFields: CustomFieldConfig[];\r\n zones$: Observable<GetZonesQuery['zones']>;\r\n detailForm: FormGroup;\r\n currencyCodes = Object.values(CurrencyCode);\r\n availableLanguageCodes$: Observable<LanguageCode[]>;\r\n readonly updatePermission = [Permission.SuperAdmin, Permission.UpdateChannel, Permission.CreateChannel];\r\n\r\n constructor(\r\n router: Router,\r\n route: ActivatedRoute,\r\n protected 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('Channel');\r\n this.detailForm = this.formBuilder.group({\r\n code: ['', Validators.required],\r\n token: ['', Validators.required],\r\n pricesIncludeTax: [false],\r\n currencyCode: [''],\r\n defaultShippingZoneId: ['', Validators.required],\r\n defaultLanguageCode: [],\r\n defaultTaxZoneId: ['', Validators.required],\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.zones$ = this.dataService.settings.getZones().mapSingle(data => data.zones);\r\n this.availableLanguageCodes$ = this.serverConfigService.getAvailableLanguages();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.destroy();\r\n }\r\n\r\n saveButtonEnabled(): boolean {\r\n return this.detailForm.dirty && this.detailForm.valid;\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: CreateChannelInput = {\r\n code: formValue.code,\r\n token: formValue.token,\r\n defaultLanguageCode: formValue.defaultLanguageCode,\r\n pricesIncludeTax: formValue.pricesIncludeTax,\r\n currencyCode: formValue.currencyCode,\r\n defaultShippingZoneId: formValue.defaultShippingZoneId,\r\n defaultTaxZoneId: formValue.defaultTaxZoneId,\r\n customFields: formValue.customFields,\r\n };\r\n this.dataService.settings\r\n .createChannel(input)\r\n .pipe(\r\n mergeMap(({ createChannel }) =>\r\n this.dataService.auth.currentUser().single$.pipe(\r\n map(({ me }) => ({\r\n me,\r\n createChannel,\r\n })),\r\n ),\r\n ),\r\n mergeMap(({ me, createChannel }) =>\r\n // tslint:disable-next-line:no-non-null-assertion\r\n this.dataService.client.updateUserChannels(me!.channels).pipe(map(() => createChannel)),\r\n ),\r\n )\r\n .subscribe(data => {\r\n switch (data.__typename) {\r\n case 'Channel':\r\n this.notificationService.success(_('common.notify-create-success'), {\r\n entity: 'Channel',\r\n });\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n this.router.navigate(['../', data.id], { relativeTo: this.route });\r\n break;\r\n case 'LanguageNotAvailableError':\r\n this.notificationService.error(data.message);\r\n break;\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.entity$\r\n .pipe(\r\n take(1),\r\n mergeMap(channel => {\r\n const input = {\r\n id: channel.id,\r\n code: formValue.code,\r\n token: formValue.token,\r\n pricesIncludeTax: formValue.pricesIncludeTax,\r\n currencyCode: formValue.currencyCode,\r\n defaultShippingZoneId: formValue.defaultShippingZoneId,\r\n defaultLanguageCode: formValue.defaultLanguageCode,\r\n defaultTaxZoneId: formValue.defaultTaxZoneId,\r\n customFields: formValue.customFields,\r\n } as UpdateChannelInput;\r\n return this.dataService.settings.updateChannel(input);\r\n }),\r\n )\r\n .subscribe(({ updateChannel }) => {\r\n switch (updateChannel.__typename) {\r\n case 'Channel':\r\n this.notificationService.success(_('common.notify-update-success'), {\r\n entity: 'Channel',\r\n });\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n break;\r\n case 'LanguageNotAvailableError':\r\n this.notificationService.error(updateChannel.message);\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: ChannelFragment, languageCode: LanguageCode): void {\r\n this.detailForm.patchValue({\r\n code: entity.code,\r\n token: entity.token || this.generateToken(),\r\n pricesIncludeTax: entity.pricesIncludeTax,\r\n currencyCode: entity.currencyCode,\r\n defaultShippingZoneId: entity.defaultShippingZone ? entity.defaultShippingZone.id : '',\r\n defaultLanguageCode: entity.defaultLanguageCode,\r\n defaultTaxZoneId: entity.defaultTaxZone ? entity.defaultTaxZone.id : '',\r\n });\r\n if (this.customFields.length) {\r\n this.setCustomFieldFormValues(this.customFields, this.detailForm.get(['customFields']), entity);\r\n }\r\n if (entity.code === DEFAULT_CHANNEL_CODE) {\r\n const codeControl = this.detailForm.get('code');\r\n if (codeControl) {\r\n codeControl.disable();\r\n }\r\n }\r\n }\r\n\r\n private generateToken(): string {\r\n const randomString = () => Math.random().toString(36).substr(3, 10);\r\n return `${randomString()}${randomString()}`;\r\n }\r\n}\r\n","<vdr-action-bar>\r\n <vdr-ab-left>\r\n <vdr-entity-info [entity]=\"entity$ | async\"></vdr-entity-info>\r\n </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"channel-detail\"></vdr-action-bar-items>\r\n <button\r\n class=\"btn btn-primary\"\r\n *ngIf=\"isNew$ | async; else updateButton\"\r\n (click)=\"create()\"\r\n [disabled]=\"!saveButtonEnabled()\"\r\n >\r\n {{ 'common.create' | translate }}\r\n </button>\r\n <ng-template #updateButton>\r\n <button\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n *vdrIfPermissions=\"['SuperAdmin', 'UpdateChannel']\"\r\n [disabled]=\"!saveButtonEnabled()\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </ng-template>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<form class=\"form\" [formGroup]=\"detailForm\">\r\n <vdr-form-field [label]=\"'common.code' | translate\" for=\"code\">\r\n <input\r\n id=\"code\"\r\n type=\"text\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n formControlName=\"code\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'settings.channel-token' | translate\" for=\"token\">\r\n <input\r\n id=\"token\"\r\n type=\"text\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n formControlName=\"token\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'settings.currency' | translate\" for=\"defaultTaxZoneId\">\r\n <select\r\n clrSelect\r\n name=\"currencyCode\"\r\n formControlName=\"currencyCode\"\r\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\r\n >\r\n <option *ngFor=\"let code of currencyCodes\" [value]=\"code\">{{ code | localeCurrencyName }}</option>\r\n </select>\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'common.default-language' | translate\" for=\"defaultLanguage\">\r\n <select\r\n clrSelect\r\n name=\"defaultLanguageCode\"\r\n formControlName=\"defaultLanguageCode\"\r\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\r\n >\r\n <option *ngFor=\"let languageCode of availableLanguageCodes$ | async\" [value]=\"languageCode\">\r\n {{ languageCode | localeLanguageName }} ({{ languageCode | uppercase }})\r\n </option>\r\n </select>\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'settings.prices-include-tax' | translate\" for=\"pricesIncludeTax\">\r\n <clr-toggle-wrapper>\r\n <input\r\n type=\"checkbox\"\r\n clrToggle\r\n id=\"pricesIncludeTax\"\r\n formControlName=\"pricesIncludeTax\"\r\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </clr-toggle-wrapper>\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'settings.default-tax-zone' | translate\" for=\"defaultTaxZoneId\">\r\n <select\r\n clrSelect\r\n name=\"defaultTaxZoneId\"\r\n formControlName=\"defaultTaxZoneId\"\r\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\r\n >\r\n <option selected value style=\"display: none\"></option>\r\n <option *ngFor=\"let zone of zones$ | async\" [value]=\"zone.id\">{{ zone.name }}</option>\r\n </select>\r\n </vdr-form-field>\r\n <clr-alert\r\n *ngIf=\"detailForm.value.code && !detailForm.value.defaultTaxZoneId\"\r\n clrAlertType=\"danger\"\r\n [clrAlertClosable]=\"false\"\r\n >\r\n <clr-alert-item>\r\n <span class=\"alert-text\">\r\n {{ 'error.no-default-tax-zone-set' | translate }}\r\n </span>\r\n </clr-alert-item>\r\n </clr-alert>\r\n\r\n <vdr-form-field [label]=\"'settings.default-shipping-zone' | translate\" for=\"defaultShippingZoneId\">\r\n <select\r\n clrSelect\r\n name=\"defaultShippingZoneId\"\r\n formControlName=\"defaultShippingZoneId\"\r\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\r\n >\r\n <option selected value style=\"display: none\"></option>\r\n <option *ngFor=\"let zone of zones$ | async\" [value]=\"zone.id\">{{ zone.name }}</option>\r\n </select>\r\n </vdr-form-field>\r\n <clr-alert\r\n *ngIf=\"detailForm.value.code && !detailForm.value.defaultShippingZoneId\"\r\n clrAlertType=\"warning\"\r\n [clrAlertClosable]=\"false\"\r\n >\r\n <clr-alert-item>\r\n <span class=\"alert-text\">\r\n {{ 'error.no-default-shipping-zone-set' | translate }}\r\n </span>\r\n </clr-alert-item>\r\n </clr-alert>\r\n\r\n <section formGroupName=\"customFields\" *ngIf=\"customFields.length\">\r\n <label>{{ 'common.custom-fields' | translate }}</label>\r\n <vdr-tabbed-custom-fields\r\n entityName=\"Channel\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n ></vdr-tabbed-custom-fields>\r\n </section>\r\n <vdr-custom-detail-component-host\r\n locationId=\"channel-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n</form>\r\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport { ChannelFragment, DataService, ModalService, NotificationService } from '@vendure/admin-ui/core';\r\nimport { DEFAULT_CHANNEL_CODE } from '@vendure/common/lib/shared-constants';\r\nimport { EMPTY, Observable, Subject } from 'rxjs';\r\nimport { mergeMap, startWith, switchMap } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'vdr-channel-list',\r\n templateUrl: './channel-list.component.html',\r\n styleUrls: ['./channel-list.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ChannelListComponent {\r\n channels$: Observable<ChannelFragment[]>;\r\n private refresh$ = new Subject();\r\n\r\n constructor(\r\n private dataService: DataService,\r\n private modalService: ModalService,\r\n private notificationService: NotificationService,\r\n ) {\r\n this.channels$ = this.refresh$.pipe(\r\n startWith(1),\r\n switchMap(() => this.dataService.settings.getChannels().mapStream(data => data.channels)),\r\n );\r\n }\r\n\r\n isDefaultChannel(channelCode: string): boolean {\r\n return channelCode === DEFAULT_CHANNEL_CODE;\r\n }\r\n\r\n deleteChannel(id: string) {\r\n this.modalService\r\n .dialog({\r\n title: _('catalog.confirm-delete-channel'),\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 => (response ? this.dataService.settings.deleteChannel(id) : EMPTY)),\r\n mergeMap(() => this.dataService.auth.currentUser().single$),\r\n // tslint:disable-next-line:no-non-null-assertion\r\n mergeMap(data => this.dataService.client.updateUserChannels(data.me!.channels)),\r\n )\r\n .subscribe(\r\n () => {\r\n this.notificationService.success(_('common.notify-delete-success'), {\r\n entity: 'Channel',\r\n });\r\n this.refresh$.next(1);\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-delete-error'), {\r\n entity: 'Channel',\r\n });\r\n },\r\n );\r\n }\r\n}\r\n","<vdr-action-bar>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"channel-list\"></vdr-action-bar-items>\r\n <a class=\"btn btn-primary\" [routerLink]=\"['./create']\" *vdrIfPermissions=\"['SuperAdmin', 'CreateChannel']\">\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'settings.create-new-channel' | translate }}\r\n </a>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<vdr-data-table [items]=\"channels$ | async\">\r\n <vdr-dt-column>{{ 'common.code' | translate }}</vdr-dt-column>\r\n <vdr-dt-column></vdr-dt-column>\r\n <vdr-dt-column></vdr-dt-column>\r\n <ng-template let-channel=\"item\">\r\n <td class=\"left align-middle\">\r\n <vdr-channel-badge [channelCode]=\"channel.code\"></vdr-channel-badge>\r\n {{ channel.code | channelCodeToLabel | translate }}\r\n </td>\r\n <td class=\"right align-middle\">\r\n <vdr-table-row-action\r\n iconShape=\"edit\"\r\n [label]=\"'common.edit' | translate\"\r\n [linkTo]=\"['./', channel.id]\"\r\n ></vdr-table-row-action>\r\n </td>\r\n <td class=\"right align-middle\">\r\n <vdr-dropdown>\r\n <button type=\"button\" class=\"btn btn-link btn-sm\" vdrDropdownTrigger [disabled]=\"isDefaultChannel(channel.code)\">\r\n {{ 'common.actions' | translate }}\r\n <clr-icon shape=\"caret down\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button\r\n type=\"button\"\r\n class=\"delete-button\"\r\n (click)=\"deleteChannel(channel.id)\"\r\n [disabled]=\"!(['SuperAdmin', 'DeleteChannel'] | hasPermission)\"\r\n vdrDropdownItem\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'common.delete' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </td>\r\n </ng-template>\r\n</vdr-data-table>\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { 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 CountryFragment,\r\n CreateCountryInput,\r\n createUpdatedTranslatable,\r\n CustomFieldConfig,\r\n DataService,\r\n findTranslation,\r\n LanguageCode,\r\n NotificationService,\r\n Permission,\r\n ServerConfigService,\r\n UpdateCountryInput,\r\n} from '@vendure/admin-ui/core';\r\nimport { combineLatest, Observable } from 'rxjs';\r\nimport { mergeMap, take } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'vdr-country-detail',\r\n templateUrl: './country-detail.component.html',\r\n styleUrls: ['./country-detail.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class CountryDetailComponent\r\n extends BaseDetailComponent<CountryFragment>\r\n implements OnInit, OnDestroy\r\n{\r\n country$: Observable<CountryFragment>;\r\n detailForm: FormGroup;\r\n customFields: CustomFieldConfig[];\r\n readonly updatePermission = [Permission.UpdateSettings, Permission.UpdateCountry];\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('Country');\r\n this.detailForm = this.formBuilder.group({\r\n code: ['', Validators.required],\r\n name: ['', Validators.required],\r\n enabled: [true],\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.country$ = this.entity$;\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy();\r\n }\r\n\r\n create() {\r\n if (!this.detailForm.dirty) {\r\n return;\r\n }\r\n combineLatest(this.country$, this.languageCode$)\r\n .pipe(\r\n take(1),\r\n mergeMap(([country, languageCode]) => {\r\n const formValue = this.detailForm.value;\r\n const input: CreateCountryInput = createUpdatedTranslatable({\r\n translatable: country,\r\n updatedFields: formValue,\r\n customFieldConfig: this.customFields,\r\n languageCode,\r\n defaultTranslation: {\r\n name: formValue.name,\r\n languageCode,\r\n },\r\n });\r\n return this.dataService.settings.createCountry(input);\r\n }),\r\n )\r\n .subscribe(\r\n data => {\r\n this.notificationService.success(_('common.notify-create-success'), {\r\n entity: 'Country',\r\n });\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n this.router.navigate(['../', data.createCountry.id], { relativeTo: this.route });\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-create-error'), {\r\n entity: 'Country',\r\n });\r\n },\r\n );\r\n }\r\n\r\n save() {\r\n combineLatest(this.country$, this.languageCode$)\r\n .pipe(\r\n take(1),\r\n mergeMap(([country, languageCode]) => {\r\n const formValue = this.detailForm.value;\r\n const input: UpdateCountryInput = createUpdatedTranslatable({\r\n translatable: country,\r\n updatedFields: formValue,\r\n customFieldConfig: this.customFields,\r\n languageCode,\r\n defaultTranslation: {\r\n name: formValue.name,\r\n languageCode,\r\n },\r\n });\r\n return this.dataService.settings.updateCountry(input);\r\n }),\r\n )\r\n .subscribe(\r\n data => {\r\n this.notificationService.success(_('common.notify-update-success'), {\r\n entity: 'Country',\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: 'Country',\r\n });\r\n },\r\n );\r\n }\r\n\r\n protected setFormValues(country: CountryFragment, languageCode: LanguageCode): void {\r\n const currentTranslation = findTranslation(country, languageCode);\r\n\r\n this.detailForm.patchValue({\r\n code: country.code,\r\n name: currentTranslation ? currentTranslation.name : '',\r\n enabled: country.enabled,\r\n });\r\n\r\n if (this.customFields.length) {\r\n this.setCustomFieldFormValues(\r\n this.customFields,\r\n this.detailForm.get(['customFields']),\r\n country,\r\n currentTranslation,\r\n );\r\n }\r\n }\r\n}\r\n","<vdr-action-bar>\r\n <vdr-ab-left>\r\n <vdr-entity-info [entity]=\"entity$ | async\"></vdr-entity-info>\r\n <vdr-language-selector\r\n [disabled]=\"isNew$ | async\"\r\n [availableLanguageCodes]=\"availableLanguages$ | async\"\r\n [currentLanguageCode]=\"languageCode$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"country-detail\"></vdr-action-bar-items>\r\n <button\r\n class=\"btn btn-primary\"\r\n *ngIf=\"isNew$ | async; else updateButton\"\r\n (click)=\"create()\"\r\n [disabled]=\"detailForm.invalid || detailForm.pristine\"\r\n >\r\n {{ 'common.create' | translate }}\r\n </button>\r\n <ng-template #updateButton>\r\n <button\r\n class=\"btn btn-primary\"\r\n *vdrIfPermissions=\"updatePermission\"\r\n (click)=\"save()\"\r\n [disabled]=\"detailForm.invalid || detailForm.pristine\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </ng-template>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<form class=\"form\" [formGroup]=\"detailForm\">\r\n <vdr-form-field [label]=\"'common.code' | translate\" for=\"code\">\r\n <input\r\n id=\"code\"\r\n type=\"text\"\r\n formControlName=\"code\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\r\n <input\r\n id=\"name\"\r\n type=\"text\"\r\n formControlName=\"name\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'common.enabled' | translate\" for=\"enabled\">\r\n <clr-toggle-wrapper>\r\n <input\r\n type=\"checkbox\"\r\n clrToggle\r\n id=\"enabled\"\r\n formControlName=\"enabled\"\r\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </clr-toggle-wrapper>\r\n </vdr-form-field>\r\n <section formGroupName=\"customFields\" *ngIf=\"customFields.length\">\r\n <label>{{ 'common.custom-fields' | translate }}</label>\r\n <vdr-tabbed-custom-fields\r\n entityName=\"Country\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n ></vdr-tabbed-custom-fields>\r\n </section>\r\n <vdr-custom-detail-component-host\r\n locationId=\"country-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n</form>\r\n","import { ChangeDetectionStrategy, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { FormControl } from '@angular/forms';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n DataService,\r\n DeletionResult,\r\n GetCountryListQuery,\r\n GetZonesQuery,\r\n ItemOf,\r\n LanguageCode,\r\n ModalService,\r\n NotificationService,\r\n ServerConfigService,\r\n ZoneFragment,\r\n} from '@vendure/admin-ui/core';\r\nimport { combineLatest, EMPTY, Observable, Subject } from 'rxjs';\r\nimport { map, startWith, switchMap, tap } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'vdr-country-list',\r\n templateUrl: './country-list.component.html',\r\n styleUrls: ['./country-list.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class CountryListComponent implements OnInit, OnDestroy {\r\n searchTerm = new FormControl('');\r\n countriesWithZones$: Observable<\r\n Array<ItemOf<GetCountryListQuery, 'countries'> & { zones: GetZonesQuery['zones'] }>\r\n >;\r\n zones$: Observable<GetZonesQuery['zones']>;\r\n availableLanguages$: Observable<LanguageCode[]>;\r\n contentLanguage$: Observable<LanguageCode>;\r\n\r\n private countries: GetCountryListQuery['countries']['items'] = [];\r\n private destroy$ = new Subject<void>();\r\n private refresh$ = new Subject<void>();\r\n\r\n constructor(\r\n private dataService: DataService,\r\n private notificationService: NotificationService,\r\n private modalService: ModalService,\r\n private serverConfigService: ServerConfigService,\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.contentLanguage$ = this.dataService.client\r\n .uiState()\r\n .mapStream(({ uiState }) => uiState.contentLanguage);\r\n\r\n const countries$ = combineLatest(\r\n this.contentLanguage$,\r\n this.searchTerm.valueChanges.pipe(startWith(null)),\r\n ).pipe(\r\n map(([__, term]) => term),\r\n switchMap(term => this.dataService.settings.getCountries(999, 0, term).single$),\r\n tap(data => {\r\n this.countries = data.countries.items;\r\n }),\r\n map(data => data.countries.items),\r\n );\r\n\r\n this.zones$ = this.dataService.settings.getZones().mapStream(data => data.zones);\r\n\r\n this.countriesWithZones$ = combineLatest(countries$, this.zones$).pipe(\r\n map(([countries, zones]) => {\r\n return countries.map(country => ({\r\n ...country,\r\n zones: zones.filter(z => !!z.members.find(c => c.id === country.id)),\r\n }));\r\n }),\r\n );\r\n\r\n this.availableLanguages$ = this.serverConfigService.getAvailableLanguages();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.destroy$.next(undefined);\r\n this.destroy$.complete();\r\n }\r\n\r\n setLanguage(code: LanguageCode) {\r\n this.dataService.client.setContentLanguage(code).subscribe();\r\n }\r\n\r\n deleteCountry(countryId: string) {\r\n this.modalService\r\n .dialog({\r\n title: _('catalog.confirm-delete-country'),\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.settings.deleteCountry(countryId) : EMPTY,\r\n ),\r\n )\r\n .subscribe(\r\n response => {\r\n if (response.deleteCountry.result === DeletionResult.DELETED) {\r\n this.notificationService.success(_('common.notify-delete-success'), {\r\n entity: 'Country',\r\n });\r\n this.dataService.settings.getCountries(999, 0).single$.subscribe();\r\n } else {\r\n this.notificationService.error(response.deleteCountry.message || '');\r\n }\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-delete-error'), {\r\n entity: 'Country',\r\n });\r\n },\r\n );\r\n }\r\n\r\n private isZone(input: ZoneFragment | { name: string } | string): input is ZoneFragment {\r\n return input.hasOwnProperty('id');\r\n }\r\n}\r\n","<vdr-action-bar>\r\n <vdr-ab-left>\r\n <input\r\n type=\"text\"\r\n name=\"searchTerm\"\r\n [formControl]=\"searchTerm\"\r\n [placeholder]=\"'settings.search-country-by-name' | translate\"\r\n class=\"search-input\"\r\n />\r\n <vdr-language-selector\r\n [availableLanguageCodes]=\"availableLanguages$ | async\"\r\n [currentLanguageCode]=\"contentLanguage$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"country-list\"></vdr-action-bar-items>\r\n <a class=\"btn btn-primary\" [routerLink]=\"['./create']\" *vdrIfPermissions=\"['CreateSettings', 'CreateCountry']\">\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'settings.create-new-country' | translate }}\r\n </a>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<vdr-data-table\r\n [items]=\"countriesWithZones$ | async\"\r\n>\r\n <vdr-dt-column>{{ 'common.code' | translate }}</vdr-dt-column>\r\n <vdr-dt-column [expand]=\"true\">{{ 'common.name' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'settings.zone' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'common.enabled' | translate }}</vdr-dt-column>\r\n <vdr-dt-column></vdr-dt-column>\r\n <vdr-dt-column></vdr-dt-column>\r\n <ng-template let-country=\"item\">\r\n <td class=\"left align-middle\">{{ country.code }}</td>\r\n <td class=\"left align-middle\">{{ country.name }}</td>\r\n <td class=\"left align-middle\">\r\n <a [routerLink]=\"['/settings', 'zones', { contents: zone.id }]\" *ngFor=\"let zone of country.zones\">\r\n <vdr-chip [colorFrom]=\"zone.name\">{{ zone.name }}</vdr-chip>\r\n </a>\r\n </td>\r\n <td class=\"left align-middle\">\r\n <clr-icon\r\n [class.is-success]=\"country.enabled\"\r\n [attr.shape]=\"country.enabled ? 'check' : 'times'\"\r\n ></clr-icon>\r\n </td>\r\n <td class=\"right align-middle\">\r\n <vdr-table-row-action\r\n iconShape=\"edit\"\r\n [label]=\"'common.edit' | translate\"\r\n [linkTo]=\"['./', country.id]\"\r\n ></vdr-table-row-action>\r\n </td>\r\n <td class=\"right align-middle\">\r\n <vdr-dropdown>\r\n <button type=\"button\" class=\"btn btn-link btn-sm\" vdrDropdownTrigger>\r\n {{ 'common.actions' | translate }}\r\n <clr-icon shape=\"caret down\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button\r\n type=\"button\"\r\n class=\"delete-button\"\r\n (click)=\"deleteCountry(country.id)\"\r\n vdrDropdownItem\r\n [disabled]=\"!(['DeleteSettings', 'DeleteCountry'] | hasPermission)\"\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'common.delete' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </td>\r\n </ng-template>\r\n</vdr-data-table>\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit } from '@angular/core';\r\nimport { 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 CustomFieldConfig,\r\n DataService,\r\n GlobalSettings,\r\n LanguageCode,\r\n NotificationService,\r\n Permission,\r\n ServerConfigService,\r\n} from '@vendure/admin-ui/core';\r\nimport { switchMap, tap, withLatestFrom } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'vdr-global-settings',\r\n templateUrl: './global-settings.component.html',\r\n styleUrls: ['./global-settings.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class GlobalSettingsComponent extends BaseDetailComponent<GlobalSettings> implements OnInit {\r\n detailForm: FormGroup;\r\n customFields: CustomFieldConfig[];\r\n languageCodes = Object.values(LanguageCode);\r\n readonly updatePermission = [Permission.UpdateSettings, Permission.UpdateGlobalSettings];\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('GlobalSettings');\r\n this.detailForm = this.formBuilder.group({\r\n availableLanguages: [''],\r\n trackInventory: false,\r\n outOfStockThreshold: [0, Validators.required],\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(): void {\r\n this.init();\r\n this.dataService.client.userStatus().single$.subscribe(({ userStatus }) => {\r\n if (!userStatus.permissions.includes(Permission.UpdateSettings)) {\r\n const languagesSelect = this.detailForm.get('availableLanguages');\r\n if (languagesSelect) {\r\n languagesSelect.disable();\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\r\n this.dataService.settings\r\n .updateGlobalSettings(this.detailForm.value)\r\n .pipe(\r\n tap(({ updateGlobalSettings }) => {\r\n switch (updateGlobalSettings.__typename) {\r\n case 'GlobalSettings':\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n this.notificationService.success(_('common.notify-update-success'), {\r\n entity: 'Settings',\r\n });\r\n break;\r\n case 'ChannelDefaultLanguageError':\r\n this.notificationService.error(updateGlobalSettings.message);\r\n }\r\n }),\r\n switchMap(() => this.serverConfigService.refreshGlobalSettings()),\r\n withLatestFrom(this.dataService.client.uiState().single$),\r\n )\r\n .subscribe(([{ globalSettings }, { uiState }]) => {\r\n const availableLangs = globalSettings.availableLanguages;\r\n if (availableLangs.length && !availableLangs.includes(uiState.contentLanguage)) {\r\n this.dataService.client.setContentLanguage(availableLangs[0]).subscribe();\r\n }\r\n });\r\n }\r\n\r\n protected setFormValues(entity: GlobalSettings, languageCode: LanguageCode): void {\r\n this.detailForm.patchValue({\r\n availableLanguages: entity.availableLanguages,\r\n trackInventory: entity.trackInventory,\r\n outOfStockThreshold: entity.outOfStockThreshold,\r\n });\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","<vdr-action-bar>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"global-settings-detail\"></vdr-action-bar-items>\r\n <button\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n *vdrIfPermissions=\"updatePermission\"\r\n [disabled]=\"detailForm.invalid || detailForm.pristine\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<form class=\"form\" [formGroup]=\"detailForm\">\r\n <vdr-form-field [label]=\"'common.available-languages' | translate\" for=\"availableLanguages\">\r\n <ng-select\r\n [items]=\"languageCodes\"\r\n [addTag]=\"false\"\r\n [hideSelected]=\"true\"\r\n multiple=\"true\"\r\n appendTo=\"body\"\r\n formControlName=\"availableLanguages\"\r\n >\r\n <ng-template ng-label-tmp let-item=\"item\" let-clear=\"clear\">\r\n <span class=\"ng-value-icon left\" (click)=\"clear.call(null, item)\" aria-hidden=\"true\">\r\n ×\r\n </span>\r\n <span class=\"ng-value-label\">{{ item | localeLanguageName }} ({{ item }})</span>\r\n </ng-template>\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n {{ item | localeLanguageName }} ({{ item }})\r\n </ng-template>\r\n </ng-select>\r\n </vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"'settings.global-out-of-stock-threshold' | translate\"\r\n for=\"outOfStockThreshold\"\r\n [tooltip]=\"'settings.global-out-of-stock-threshold-tooltip' | translate\"\r\n >\r\n <input\r\n id=\"outOfStockThreshold\"\r\n type=\"number\"\r\n formControlName=\"outOfStockThreshold\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"'settings.track-inventory-default' | translate\"\r\n for=\"enabled\"\r\n [tooltip]=\"'catalog.track-inventory-tooltip' | translate\"\r\n >\r\n <clr-toggle-wrapper>\r\n <input\r\n type=\"checkbox\"\r\n clrToggle\r\n name=\"enabled\"\r\n formControlName=\"trackInventory\"\r\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </clr-toggle-wrapper>\r\n </vdr-form-field>\r\n <section formGroupName=\"customFields\" *ngIf=\"customFields.length\">\r\n <label>{{ 'common.custom-fields' | translate }}</label>\r\n <vdr-tabbed-custom-fields\r\n entityName=\"GlobalSettings\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n ></vdr-tabbed-custom-fields>\r\n </section>\r\n <vdr-custom-detail-component-host\r\n locationId=\"global-settings-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n</form>\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { 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 configurableDefinitionToInstance,\r\n ConfigurableOperation,\r\n ConfigurableOperationDefinition,\r\n CreatePaymentMethodInput,\r\n CustomFieldConfig,\r\n DataService,\r\n getConfigArgValue,\r\n NotificationService,\r\n PaymentMethodFragment,\r\n Permission,\r\n ServerConfigService,\r\n toConfigurableOperationInput,\r\n UpdatePaymentMethodInput,\r\n} from '@vendure/admin-ui/core';\r\nimport { normalizeString } from '@vendure/common/lib/normalize-string';\r\nimport { combineLatest } from 'rxjs';\r\nimport { mergeMap, take } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'vdr-payment-method-detail',\r\n templateUrl: './payment-method-detail.component.html',\r\n styleUrls: ['./payment-method-detail.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PaymentMethodDetailComponent\r\n extends BaseDetailComponent<PaymentMethodFragment>\r\n implements OnInit, OnDestroy\r\n{\r\n detailForm: FormGroup;\r\n customFields: CustomFieldConfig[];\r\n checkers: ConfigurableOperationDefinition[] = [];\r\n handlers: ConfigurableOperationDefinition[] = [];\r\n selectedChecker?: ConfigurableOperation | null;\r\n selectedCheckerDefinition?: ConfigurableOperationDefinition;\r\n selectedHandler?: ConfigurableOperation | null;\r\n selectedHandlerDefinition?: ConfigurableOperationDefinition;\r\n readonly updatePermission = [Permission.UpdateSettings, Permission.UpdatePaymentMethod];\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('PaymentMethod');\r\n this.detailForm = this.formBuilder.group({\r\n code: ['', Validators.required],\r\n name: ['', Validators.required],\r\n description: '',\r\n enabled: [true, Validators.required],\r\n checker: {},\r\n handler: {},\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 combineLatest([\r\n this.dataService.settings.getPaymentMethodOperations().single$,\r\n this.entity$.pipe(take(1)),\r\n ]).subscribe(([data, entity]) => {\r\n this.checkers = data.paymentMethodEligibilityCheckers;\r\n this.handlers = data.paymentMethodHandlers;\r\n this.changeDetector.markForCheck();\r\n this.selectedCheckerDefinition = data.paymentMethodEligibilityCheckers.find(\r\n c => c.code === (entity.checker && entity.checker.code),\r\n );\r\n this.selectedHandlerDefinition = data.paymentMethodHandlers.find(\r\n c => c.code === (entity.handler && entity.handler.code),\r\n );\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy();\r\n }\r\n\r\n updateCode(currentCode: string, nameValue: string) {\r\n if (!currentCode) {\r\n const codeControl = this.detailForm.get(['code']);\r\n if (codeControl && codeControl.pristine) {\r\n codeControl.setValue(normalizeString(nameValue, '-'));\r\n }\r\n }\r\n }\r\n\r\n configArgsIsPopulated(): boolean {\r\n const configArgsGroup = this.detailForm.get('configArgs') as FormGroup | undefined;\r\n if (!configArgsGroup) {\r\n return false;\r\n }\r\n return 0 < Object.keys(configArgsGroup.controls).length;\r\n }\r\n\r\n selectChecker(checker: ConfigurableOperationDefinition) {\r\n this.selectedCheckerDefinition = checker;\r\n this.selectedChecker = configurableDefinitionToInstance(checker);\r\n const formControl = this.detailForm.get('checker');\r\n if (formControl) {\r\n formControl.clearValidators();\r\n formControl.updateValueAndValidity({ onlySelf: true });\r\n formControl.patchValue(this.selectedChecker);\r\n }\r\n this.detailForm.markAsDirty();\r\n }\r\n\r\n selectHandler(handler: ConfigurableOperationDefinition) {\r\n this.selectedHandlerDefinition = handler;\r\n this.selectedHandler = configurableDefinitionToInstance(handler);\r\n const formControl = this.detailForm.get('handler');\r\n if (formControl) {\r\n formControl.clearValidators();\r\n formControl.updateValueAndValidity({ onlySelf: true });\r\n formControl.patchValue(this.selectedHandler);\r\n }\r\n this.detailForm.markAsDirty();\r\n }\r\n\r\n removeChecker() {\r\n this.selectedChecker = null;\r\n this.detailForm.markAsDirty();\r\n }\r\n\r\n removeHandler() {\r\n this.selectedHandler = null;\r\n this.detailForm.markAsDirty();\r\n }\r\n\r\n create() {\r\n const selectedChecker = this.selectedChecker;\r\n const selectedHandler = this.selectedHandler;\r\n if (!selectedHandler) {\r\n return;\r\n }\r\n this.entity$\r\n .pipe(\r\n take(1),\r\n mergeMap(({ id }) => {\r\n const formValue = this.detailForm.value;\r\n const input: CreatePaymentMethodInput = {\r\n name: formValue.name,\r\n code: formValue.code,\r\n description: formValue.description,\r\n enabled: formValue.enabled,\r\n checker: selectedChecker\r\n ? toConfigurableOperationInput(selectedChecker, formValue.checker)\r\n : null,\r\n handler: toConfigurableOperationInput(selectedHandler, formValue.handler),\r\n customFields: formValue.customFields,\r\n };\r\n return this.dataService.settings.createPaymentMethod(input);\r\n }),\r\n )\r\n .subscribe(\r\n data => {\r\n this.notificationService.success(_('common.notify-create-success'), {\r\n entity: 'PaymentMethod',\r\n });\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n this.router.navigate(['../', data.createPaymentMethod.id], { relativeTo: this.route });\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-create-error'), {\r\n entity: 'PaymentMethod',\r\n });\r\n },\r\n );\r\n }\r\n\r\n save() {\r\n const selectedChecker = this.selectedChecker;\r\n const selectedHandler = this.selectedHandler;\r\n if (!selectedHandler) {\r\n return;\r\n }\r\n this.entity$\r\n .pipe(\r\n take(1),\r\n mergeMap(({ id }) => {\r\n const formValue = this.detailForm.value;\r\n const input: UpdatePaymentMethodInput = {\r\n id,\r\n name: formValue.name,\r\n code: formValue.code,\r\n description: formValue.description,\r\n enabled: formValue.enabled,\r\n checker: selectedChecker\r\n ? toConfigurableOperationInput(selectedChecker, formValue.checker)\r\n : null,\r\n handler: toConfigurableOperationInput(selectedHandler, formValue.handler),\r\n customFields: formValue.customFields,\r\n };\r\n return this.dataService.settings.updatePaymentMethod(input);\r\n }),\r\n )\r\n .subscribe(\r\n data => {\r\n this.notificationService.success(_('common.notify-update-success'), {\r\n entity: 'PaymentMethod',\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: 'PaymentMethod',\r\n });\r\n },\r\n );\r\n }\r\n\r\n protected setFormValues(paymentMethod: PaymentMethodFragment): void {\r\n this.detailForm.patchValue({\r\n name: paymentMethod.name,\r\n code: paymentMethod.code,\r\n description: paymentMethod.description,\r\n enabled: paymentMethod.enabled,\r\n checker: paymentMethod.checker || {},\r\n handler: paymentMethod.handler || {},\r\n });\r\n if (!this.selectedChecker) {\r\n this.selectedChecker = paymentMethod.checker && {\r\n code: paymentMethod.checker.code,\r\n args: paymentMethod.checker.args.map(a => ({ ...a, value: getConfigArgValue(a.value) })),\r\n };\r\n }\r\n if (!this.selectedHandler) {\r\n this.selectedHandler = paymentMethod.handler && {\r\n code: paymentMethod.handler.code,\r\n args: paymentMethod.handler.args.map(a => ({ ...a, value: getConfigArgValue(a.value) })),\r\n };\r\n }\r\n if (this.customFields.length) {\r\n this.setCustomFieldFormValues(\r\n this.customFields,\r\n this.detailForm.get('customFields'),\r\n paymentMethod,\r\n );\r\n }\r\n }\r\n}\r\n","<vdr-action-bar>\r\n <vdr-ab-left>\r\n <vdr-entity-info [entity]=\"entity$ | async\"></vdr-entity-info>\r\n </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"payment-method-detail\"></vdr-action-bar-items>\r\n <button\r\n class=\"btn btn-primary\"\r\n *ngIf=\"isNew$ | async; else updateButton\"\r\n [disabled]=\"detailForm.pristine || detailForm.invalid\"\r\n (click)=\"create()\"\r\n >\r\n {{ 'common.create' | translate }}\r\n </button>\r\n <ng-template #updateButton>\r\n <button\r\n *vdrIfPermissions=\"updatePermission\"\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n [disabled]=\"detailForm.pristine || detailForm.invalid || !selectedHandler\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </ng-template>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<form class=\"form\" [formGroup]=\"detailForm\" *ngIf=\"entity$ | async as paymentMethod\">\r\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\r\n <input\r\n id=\"name\"\r\n type=\"text\"\r\n formControlName=\"name\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n (input)=\"updateCode(paymentMethod.code, $event.target.value)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"'common.code' | translate\"\r\n for=\"code\"\r\n [readOnlyToggle]=\"updatePermission | hasPermission\"\r\n >\r\n <input\r\n id=\"code\"\r\n type=\"text\"\r\n formControlName=\"code\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-rich-text-editor\r\n formControlName=\"description\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n [label]=\"'common.description' | translate\"\r\n ></vdr-rich-text-editor>\r\n <vdr-form-field [label]=\"'common.enabled' | translate\" for=\"description\">\r\n <clr-toggle-wrapper>\r\n <input\r\n type=\"checkbox\"\r\n clrToggle\r\n id=\"enabled\"\r\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\r\n formControlName=\"enabled\"\r\n />\r\n </clr-toggle-wrapper>\r\n </vdr-form-field>\r\n <section formGroupName=\"customFields\" *ngIf=\"customFields.length\">\r\n <label>{{ 'common.custom-fields' | translate }}</label>\r\n <vdr-tabbed-custom-fields\r\n entityName=\"PaymentMethod\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n ></vdr-tabbed-custom-fields>\r\n </section>\r\n\r\n <vdr-custom-detail-component-host\r\n locationId=\"payment-method-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n\r\n <div class=\"clr-row mt4\">\r\n <div class=\"clr-col\">\r\n <label class=\"clr-control-label\">{{ 'settings.payment-eligibility-checker' | translate }}</label>\r\n <vdr-configurable-input\r\n *ngIf=\"selectedChecker && selectedCheckerDefinition\"\r\n [operation]=\"selectedChecker\"\r\n [operationDefinition]=\"selectedCheckerDefinition\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n (remove)=\"removeChecker()\"\r\n formControlName=\"checker\"\r\n ></vdr-configurable-input>\r\n <div *ngIf=\"!selectedChecker || !selectedCheckerDefinition\">\r\n <vdr-dropdown>\r\n <button class=\"btn btn-outline\" vdrDropdownTrigger>\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'common.select' | translate }}\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-left\">\r\n <button\r\n *ngFor=\"let checker of checkers\"\r\n type=\"button\"\r\n vdrDropdownItem\r\n (click)=\"selectChecker(checker)\"\r\n >\r\n {{ checker.description }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n </div>\r\n <div class=\"clr-col\">\r\n <label class=\"clr-control-label\">{{ 'settings.payment-handler' | translate }}</label>\r\n <vdr-configurable-input\r\n *ngIf=\"selectedHandler && selectedHandlerDefinition\"\r\n [operation]=\"selectedHandler\"\r\n [operationDefinition]=\"selectedHandlerDefinition\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n (remove)=\"removeHandler()\"\r\n formControlName=\"handler\"\r\n ></vdr-configurable-input>\r\n <div *ngIf=\"!selectedHandler || !selectedHandlerDefinition\">\r\n <vdr-dropdown>\r\n <button class=\"btn btn-outline\" vdrDropdownTrigger>\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'common.select' | translate }}\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-left\">\r\n <button\r\n *ngFor=\"let handler of handlers\"\r\n type=\"button\"\r\n vdrDropdownItem\r\n (click)=\"selectHandler(handler)\"\r\n >\r\n {{ handler.description }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n </div>\r\n </div>\r\n</form>\r\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n BaseListComponent,\r\n DataService,\r\n DeletionResult,\r\n GetPaymentMethodListQuery,\r\n ItemOf,\r\n ModalService,\r\n NotificationService,\r\n} from '@vendure/admin-ui/core';\r\nimport { EMPTY } from 'rxjs';\r\nimport { map, switchMap } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'vdr-payment-method-list',\r\n templateUrl: './payment-method-list.component.html',\r\n styleUrls: ['./payment-method-list.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PaymentMethodListComponent extends BaseListComponent<\r\n GetPaymentMethodListQuery,\r\n ItemOf<GetPaymentMethodListQuery, 'paymentMethods'>\r\n> {\r\n constructor(\r\n private dataService: DataService,\r\n router: Router,\r\n route: ActivatedRoute,\r\n private modalService: ModalService,\r\n private notificationService: NotificationService,\r\n ) {\r\n super(router, route);\r\n super.setQueryFn(\r\n (...args: any[]) => this.dataService.settings.getPaymentMethods(...args).refetchOnChannelChange(),\r\n data => data.paymentMethods,\r\n );\r\n }\r\n\r\n deletePaymentMethod(paymentMethodId: string) {\r\n this.showModalAndDelete(paymentMethodId)\r\n .pipe(\r\n switchMap(response => {\r\n if (response.result === DeletionResult.DELETED) {\r\n return [true];\r\n } else {\r\n return this.showModalAndDelete(paymentMethodId, response.message || '').pipe(\r\n map(r => r.result === DeletionResult.DELETED),\r\n );\r\n }\r\n }),\r\n // Refresh the cached facets to reflect the changes\r\n switchMap(() => this.dataService.settings.getPaymentMethods(100).single$),\r\n )\r\n .subscribe(\r\n () => {\r\n this.notificationService.success(_('common.notify-delete-success'), {\r\n entity: 'PaymentMethod',\r\n });\r\n this.refresh();\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-delete-error'), {\r\n entity: 'PaymentMethod',\r\n });\r\n },\r\n );\r\n }\r\n\r\n private showModalAndDelete(paymentMethodId: string, message?: string) {\r\n return this.modalService\r\n .dialog({\r\n title: _('settings.confirm-delete-payment-method'),\r\n body: message,\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(res =>\r\n res ? this.dataService.settings.deletePaymentMethod(paymentMethodId, !!message) : EMPTY,\r\n ),\r\n map(res => res.deletePaymentMethod),\r\n );\r\n }\r\n}\r\n","<vdr-action-bar>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"payment-method-list\"></vdr-action-bar-items>\r\n <a class=\"btn btn-primary\" [routerLink]=\"['./create']\" *vdrIfPermissions=\"['CreateSettings', 'CreatePaymentMethod']\">\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'settings.create-new-payment-method' | translate }}\r\n </a>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<vdr-data-table\r\n [items]=\"items$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n>\r\n <vdr-dt-column>{{ 'common.code' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'common.enabled' | translate }}</vdr-dt-column>\r\n <vdr-dt-column></vdr-dt-column>\r\n <vdr-dt-column></vdr-dt-column>\r\n <ng-template let-paymentMethod=\"item\">\r\n <td class=\"left align-middle\">{{ paymentMethod.code }}</td>\r\n <td class=\"left align-middle\">{{ paymentMethod.enabled }}</td>\r\n <td class=\"right align-middle\">\r\n <vdr-table-row-action\r\n iconShape=\"edit\"\r\n [label]=\"'common.edit' | translate\"\r\n [linkTo]=\"['./', paymentMethod.id]\"\r\n ></vdr-table-row-action>\r\n </td>\r\n <td class=\"right align-middle\">\r\n <vdr-dropdown>\r\n <button type=\"button\" class=\"btn btn-link btn-sm\" vdrDropdownTrigger>\r\n {{ 'common.actions' | translate }}\r\n <clr-icon shape=\"caret down\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button\r\n type=\"button\"\r\n class=\"delete-button\"\r\n (click)=\"deletePaymentMethod(paymentMethod.id)\"\r\n [disabled]=\"!(['DeleteSettings', 'DeletePaymentMethod'] | hasPermission)\"\r\n vdrDropdownItem\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'common.delete' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </td>\r\n </ng-template>\r\n</vdr-data-table>\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { 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 Administrator,\r\n BaseDetailComponent,\r\n CustomFieldConfig,\r\n DataService,\r\n GetActiveAdministratorQuery,\r\n LanguageCode,\r\n NotificationService,\r\n ServerConfigService,\r\n UpdateActiveAdministratorInput,\r\n} from '@vendure/admin-ui/core';\r\nimport { mergeMap, take } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'vdr-profile',\r\n templateUrl: './profile.component.html',\r\n styleUrls: ['./profile.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ProfileComponent\r\n extends BaseDetailComponent<NonNullable<GetActiveAdministratorQuery['activeAdministrator']>>\r\n implements OnInit, OnDestroy\r\n{\r\n customFields: CustomFieldConfig[];\r\n detailForm: FormGroup;\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('Administrator');\r\n this.detailForm = this.formBuilder.group({\r\n emailAddress: ['', Validators.required],\r\n firstName: ['', Validators.required],\r\n lastName: ['', Validators.required],\r\n password: [''],\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 }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy();\r\n }\r\n\r\n save() {\r\n this.entity$\r\n .pipe(\r\n take(1),\r\n mergeMap(({ id }) => {\r\n const formValue = this.detailForm.value;\r\n const administrator: UpdateActiveAdministratorInput = {\r\n emailAddress: formValue.emailAddress,\r\n firstName: formValue.firstName,\r\n lastName: formValue.lastName,\r\n password: formValue.password,\r\n customFields: formValue.customFields,\r\n };\r\n return this.dataService.administrator.updateActiveAdministrator(administrator);\r\n }),\r\n )\r\n .subscribe(\r\n data => {\r\n this.notificationService.success(_('common.notify-update-success'), {\r\n entity: 'Administrator',\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: 'Administrator',\r\n });\r\n },\r\n );\r\n }\r\n\r\n protected setFormValues(administrator: Administrator, languageCode: LanguageCode): void {\r\n this.detailForm.patchValue({\r\n emailAddress: administrator.emailAddress,\r\n firstName: administrator.firstName,\r\n lastName: administrator.lastName,\r\n });\r\n if (this.customFields.length) {\r\n this.setCustomFieldFormValues(\r\n this.customFields,\r\n this.detailForm.get('customFields'),\r\n administrator,\r\n );\r\n }\r\n }\r\n}\r\n","<vdr-action-bar>\r\n <vdr-ab-left>\r\n <vdr-entity-info [entity]=\"entity$ | async\"></vdr-entity-info>\r\n </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"administrator-detail\"></vdr-action-bar-items>\r\n <button\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n [disabled]=\"detailForm.invalid || detailForm.pristine\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<form class=\"form\" [formGroup]=\"detailForm\">\r\n <vdr-form-field [label]=\"'settings.email-address' | translate\" for=\"emailAddress\">\r\n <input id=\"emailAddress\" type=\"text\" formControlName=\"emailAddress\" />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'settings.first-name' | translate\" for=\"firstName\">\r\n <input id=\"firstName\" type=\"text\" formControlName=\"firstName\" />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'settings.last-name' | translate\" for=\"lastName\">\r\n <input id=\"lastName\" type=\"text\" formControlName=\"lastName\" />\r\n </vdr-form-field>\r\n <vdr-form-field *ngIf=\"isNew$ | async\" [label]=\"'settings.password' | translate\" for=\"password\">\r\n <input id=\"password\" type=\"password\" formControlName=\"password\" />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'settings.password' | translate\" for=\"password\" [readOnlyToggle]=\"true\">\r\n <input id=\"password\" type=\"password\" formControlName=\"password\" />\r\n </vdr-form-field>\r\n <section formGroupName=\"customFields\" *ngIf=\"customFields.length\">\r\n <label>{{ 'common.custom-fields' | translate }}</label>\r\n <vdr-tabbed-custom-fields\r\n entityName=\"Administrator\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\r\n ></vdr-tabbed-custom-fields>\r\n </section>\r\n</form>\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\nimport { 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 CreateRoleInput,\n DataService,\n LanguageCode,\n NotificationService,\n Permission,\n PermissionDefinition,\n Role,\n ServerConfigService,\n UpdateRoleInput,\n} from '@vendure/admin-ui/core';\nimport { normalizeString } from '@vendure/common/lib/normalize-string';\nimport { unique } from '@vendure/common/lib/unique';\nimport { Observable } from 'rxjs';\nimport { mergeMap, take } from 'rxjs/operators';\n\n@Component({\n selector: 'vdr-role-detail',\n templateUrl: './role-detail.component.html',\n styleUrls: ['./role-detail.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class RoleDetailComponent extends BaseDetailComponent<Role> implements OnInit, OnDestroy {\n role$: Observable<Role>;\n detailForm: FormGroup;\n permissionDefinitions: PermissionDefinition[];\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 code: ['', Validators.required],\n description: ['', Validators.required],\n channelIds: [],\n permissions: [],\n });\n }\n\n ngOnInit() {\n this.init();\n this.role$ = this.entity$;\n this.permissionDefinitions = this.serverConfigService.getPermissionDefinitions();\n }\n\n ngOnDestroy(): void {\n this.destroy();\n }\n\n updateCode(nameValue: string) {\n const codeControl = this.detailForm.get(['code']);\n if (codeControl && codeControl.pristine) {\n codeControl.setValue(normalizeString(nameValue, '-'));\n }\n }\n\n setPermission(change: { permission: string; value: boolean }) {\n const permissionsControl = this.detailForm.get('permissions');\n if (permissionsControl) {\n const currentPermissions = permissionsControl.value as string[];\n const newValue =\n change.value === true\n ? unique([...currentPermissions, change.permission])\n : currentPermissions.filter(p => p !== change.permission);\n permissionsControl.setValue(newValue);\n permissionsControl.markAsDirty();\n }\n }\n\n create() {\n const formValue = this.detailForm.value;\n const role: CreateRoleInput = formValue;\n this.dataService.administrator.createRole(role).subscribe(\n data => {\n this.notificationService.success(_('common.notify-create-success'), { entity: 'Role' });\n this.detailForm.markAsPristine();\n this.changeDetector.markForCheck();\n this.router.navigate(['../', data.createRole.id], { relativeTo: this.route });\n },\n err => {\n this.notificationService.error(_('common.notify-create-error'), {\n entity: 'Role',\n });\n },\n );\n }\n\n save() {\n this.role$\n .pipe(\n take(1),\n mergeMap(({ id }) => {\n const formValue = this.detailForm.value;\n const role: UpdateRoleInput = { id, ...formValue };\n return this.dataService.administrator.updateRole(role);\n }),\n )\n .subscribe(\n data => {\n this.notificationService.success(_('common.notify-update-success'), { entity: 'Role' });\n this.detailForm.markAsPristine();\n this.changeDetector.markForCheck();\n },\n err => {\n this.notificationService.error(_('common.notify-update-error'), {\n entity: 'Role',\n });\n },\n );\n }\n\n protected setFormValues(role: Role, languageCode: LanguageCode): void {\n this.detailForm.patchValue({\n description: role.description,\n code: role.code,\n channelIds: role.channels.map(c => c.id),\n permissions: role.permissions,\n });\n // This was required to get the channel selector component to\n // correctly display its contents. A while spent debugging the root\n // cause did not yield a solution, therefore this next line.\n this.changeDetector.detectChanges();\n }\n}\n","<vdr-action-bar>\r\n <vdr-ab-left>\r\n <vdr-entity-info [entity]=\"entity$ | async\"></vdr-entity-info>\r\n </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"role-detail\"></vdr-action-bar-items>\r\n <button\r\n class=\"btn btn-primary\"\r\n *ngIf=\"isNew$ | async; else updateButton\"\r\n (click)=\"create()\"\r\n [disabled]=\"detailForm.invalid || detailForm.pristine\"\r\n >\r\n {{ 'common.create' | translate }}\r\n </button>\r\n <ng-template #updateButton>\r\n <button\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n *vdrIfPermissions=\"'UpdateAdministrator'\"\r\n [disabled]=\"detailForm.invalid || detailForm.pristine\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </ng-template>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<form class=\"form\" [formGroup]=\"detailForm\">\r\n <vdr-form-field [label]=\"'common.description' | translate\" for=\"description\">\r\n <input\r\n id=\"description\"\r\n type=\"text\"\r\n formControlName=\"description\"\r\n [readonly]=\"!('UpdateAdministrator' | hasPermission)\"\r\n (input)=\"updateCode($event.target.value)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"'common.code' | translate\"\r\n for=\"code\"\r\n [readOnlyToggle]=\"'UpdateAdministrator' | hasPermission\"\r\n >\r\n <input\r\n id=\"code\"\r\n type=\"text\"\r\n formControlName=\"code\"\r\n [readonly]=\"!('UpdateAdministrator' | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'settings.channel' | translate\">\r\n <vdr-channel-assignment-control\r\n formControlName=\"channelIds\"\r\n [vdrDisabled]=\"!('UpdateAdministrator' | hasPermission)\"\r\n ></vdr-channel-assignment-control>\r\n </vdr-form-field>\r\n <label>{{ 'settings.permissions' | translate }}</label>\r\n <vdr-permission-grid\r\n [permissionDefinitions]=\"permissionDefinitions\"\r\n [activePermissions]=\"detailForm.get('permissions')?.value\"\r\n (permissionChange)=\"setPermission($event)\"\r\n [readonly]=\"!('UpdateAdministrator' | hasPermission)\"\r\n ></vdr-permission-grid>\r\n</form>\r\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport { BaseListComponent, GetRolesQuery, ItemOf } from '@vendure/admin-ui/core';\r\nimport { Role } 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 { CUSTOMER_ROLE_CODE, SUPER_ADMIN_ROLE_CODE } from '@vendure/common/lib/shared-constants';\r\nimport { EMPTY, Observable } from 'rxjs';\r\nimport { map, switchMap } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'vdr-role-list',\r\n templateUrl: './role-list.component.html',\r\n styleUrls: ['./role-list.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class RoleListComponent\r\n extends BaseListComponent<GetRolesQuery, ItemOf<GetRolesQuery, 'roles'>>\r\n implements OnInit\r\n{\r\n readonly initialLimit = 3;\r\n displayLimit: { [id: string]: number } = {};\r\n visibleRoles$: Observable<Array<ItemOf<GetRolesQuery, 'roles'>>>;\r\n\r\n constructor(\r\n private modalService: ModalService,\r\n private notificationService: NotificationService,\r\n private dataService: DataService,\r\n router: Router,\r\n route: ActivatedRoute,\r\n ) {\r\n super(router, route);\r\n super.setQueryFn(\r\n (...args: any[]) => this.dataService.administrator.getRoles(...args),\r\n data => data.roles,\r\n );\r\n }\r\n\r\n ngOnInit() {\r\n super.ngOnInit();\r\n this.visibleRoles$ = this.items$.pipe(\r\n map(roles => roles.filter(role => role.code !== CUSTOMER_ROLE_CODE)),\r\n );\r\n }\r\n\r\n toggleDisplayLimit(role: ItemOf<GetRolesQuery, 'roles'>) {\r\n if (this.displayLimit[role.id] === role.permissions.length) {\r\n this.displayLimit[role.id] = this.initialLimit;\r\n } else {\r\n this.displayLimit[role.id] = role.permissions.length;\r\n }\r\n }\r\n\r\n isDefaultRole(role: Role): boolean {\r\n return role.code === SUPER_ADMIN_ROLE_CODE || role.code === CUSTOMER_ROLE_CODE;\r\n }\r\n\r\n deleteRole(id: string) {\r\n this.modalService\r\n .dialog({\r\n title: _('settings.confirm-delete-role'),\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(switchMap(response => (response ? this.dataService.administrator.deleteRole(id) : EMPTY)))\r\n .subscribe(\r\n () => {\r\n this.notificationService.success(_('common.notify-delete-success'), {\r\n entity: 'Role',\r\n });\r\n this.refresh();\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-delete-error'), {\r\n entity: 'Role',\r\n });\r\n },\r\n );\r\n }\r\n}\r\n","<vdr-action-bar>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"role-list\"></vdr-action-bar-items>\r\n <a class=\"btn btn-primary\" [routerLink]=\"['./create']\" *vdrIfPermissions=\"'CreateAdministrator'\">\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'settings.create-new-role' | translate }}\r\n </a>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<vdr-data-table\r\n [items]=\"visibleRoles$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n>\r\n <vdr-dt-column>{{ 'common.description' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'common.code' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'settings.channel' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'settings.permissions' | translate }}</vdr-dt-column>\r\n <vdr-dt-column></vdr-dt-column>\r\n <vdr-dt-column></vdr-dt-column>\r\n <ng-template let-role=\"item\">\r\n <td class=\"left align-middle\">{{ role.description }}</td>\r\n <td class=\"left align-middle\"><span *ngIf=\"!isDefaultRole(role)\">{{ role.code }}</span></td>\r\n <td class=\"left align-middle\">\r\n <ng-container *ngIf=\"!isDefaultRole(role)\">\r\n <vdr-chip *ngFor=\"let channel of role.channels\">\r\n <vdr-channel-badge [channelCode]=\"channel.code\"></vdr-channel-badge>\r\n {{ channel.code | channelCodeToLabel | translate }}\r\n </vdr-chip>\r\n </ng-container>\r\n </td>\r\n <td class=\"left align-middle\">\r\n <ng-container *ngIf=\"!isDefaultRole(role); else defaultRole\">\r\n <vdr-chip *ngFor=\"let permission of role.permissions | slice: 0:displayLimit[role.id] || 3\">{{ permission }}</vdr-chip>\r\n <button\r\n class=\"btn btn-sm btn-secondary btn-icon\"\r\n *ngIf=\"role.permissions.length > initialLimit\"\r\n (click)=\"toggleDisplayLimit(role)\"\r\n >\r\n <ng-container *ngIf=\"(displayLimit[role.id] || 0) < role.permissions.length; else collapse\">\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ role.permissions.length - initialLimit }}\r\n </ng-container>\r\n <ng-template #collapse>\r\n <clr-icon shape=\"minus\"></clr-icon>\r\n </ng-template>\r\n </button>\r\n </ng-container>\r\n <ng-template #defaultRole>\r\n <span class=\"default-role-label\">{{ 'settings.default-role-label' | translate }}</span>\r\n </ng-template>\r\n </td>\r\n <td class=\"right align-middle\">\r\n <vdr-table-row-action\r\n *ngIf=\"!isDefaultRole(role)\"\r\n iconShape=\"edit\"\r\n [label]=\"'common.edit' | translate\"\r\n [linkTo]=\"['./', role.id]\"\r\n ></vdr-table-row-action>\r\n </td>\r\n <td class=\"right align-middle\">\r\n <vdr-dropdown>\r\n <button type=\"button\" class=\"btn btn-link btn-sm\" vdrDropdownTrigger [disabled]=\"isDefaultRole(role)\">\r\n {{ 'common.actions' | translate }}\r\n <clr-icon shape=\"caret down\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button\r\n type=\"button\"\r\n class=\"delete-button\"\r\n (click)=\"deleteRole(role.id)\"\r\n [disabled]=\"!('SuperAdmin' | hasPermission)\"\r\n vdrDropdownItem\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'common.delete' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </td>\r\n </ng-template>\r\n</vdr-data-table>\r\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\r\n\r\nimport { CurrencyCode, ShippingMethodQuote } from '@vendure/admin-ui/core';\r\n\r\n@Component({\r\n selector: 'vdr-shipping-eligibility-test-result',\r\n templateUrl: './shipping-eligibility-test-result.component.html',\r\n styleUrls: ['./shipping-eligibility-test-result.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ShippingEligibilityTestResultComponent {\r\n @Input() testResult: ShippingMethodQuote[];\r\n @Input() okToRun = false;\r\n @Input() testDataUpdated = false;\r\n @Input() currencyCode: CurrencyCode;\r\n @Output() runTest = new EventEmitter<void>();\r\n}\r\n","<div class=\"test-result card\">\r\n <div class=\"card-header\">\r\n {{ 'settings.test-result' | translate }}\r\n </div>\r\n <div class=\"card-block\" *ngFor=\"let quote of testResult\">\r\n <div class=\"result-details\" [class.stale]=\"testDataUpdated\">\r\n <vdr-labeled-data [label]=\"'settings.shipping-method' | translate\">\r\n {{ quote.name }}\r\n </vdr-labeled-data>\r\n <div class=\"price-row\">\r\n <vdr-labeled-data [label]=\"'common.price' | translate\">\r\n {{ quote.price | localeCurrency: currencyCode }}\r\n </vdr-labeled-data>\r\n <vdr-labeled-data [label]=\"'common.price-with-tax' | translate\">\r\n {{ quote.priceWithTax | localeCurrency: currencyCode }}\r\n </vdr-labeled-data>\r\n </div>\r\n <vdr-object-tree *ngIf=\"quote.metadata\" [value]=\"quote.metadata\"></vdr-object-tree>\r\n </div>\r\n </div>\r\n <div class=\"card-block\" *ngIf=\"testResult?.length === 0\">\r\n <clr-icon shape=\"ban\" class=\"is-solid error\"></clr-icon>\r\n {{ 'settings.no-eligible-shipping-methods' | translate }}\r\n </div>\r\n <div class=\"card-footer\">\r\n <button class=\"btn btn-secondary\" (click)=\"runTest.emit()\" [disabled]=\"!okToRun\">\r\n {{ 'settings.test-shipping-methods' | translate }}\r\n </button>\r\n </div>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, EventEmitter, OnInit, Output } from '@angular/core';\r\nimport {\r\n CurrencyCode,\r\n DataService,\r\n LocalStorageService,\r\n ProductSelectorSearchQuery,\r\n} from '@vendure/admin-ui/core';\r\n\r\ntype SearchItem = ProductSelectorSearchQuery['search']['items'][number];\r\n\r\nexport interface TestOrderLine {\r\n id: string;\r\n name: string;\r\n preview: string;\r\n sku: string;\r\n unitPriceWithTax: number;\r\n quantity: number;\r\n}\r\n\r\n@Component({\r\n selector: 'vdr-test-order-builder',\r\n templateUrl: './test-order-builder.component.html',\r\n styleUrls: ['./test-order-builder.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class TestOrderBuilderComponent implements OnInit {\r\n @Output() orderLinesChange = new EventEmitter<TestOrderLine[]>();\r\n lines: TestOrderLine[] = [];\r\n currencyCode: CurrencyCode;\r\n get subTotal(): number {\r\n return this.lines.reduce((sum, l) => sum + l.unitPriceWithTax * l.quantity, 0);\r\n }\r\n\r\n constructor(private dataService: DataService, private localStorageService: LocalStorageService) {}\r\n\r\n ngOnInit() {\r\n this.lines = this.loadFromLocalStorage();\r\n if (this.lines) {\r\n this.orderLinesChange.emit(this.lines);\r\n }\r\n this.dataService.settings.getActiveChannel('cache-first').single$.subscribe(result => {\r\n this.currencyCode = result.activeChannel.currencyCode;\r\n });\r\n }\r\n\r\n selectResult(result: SearchItem) {\r\n if (result) {\r\n this.addToLines(result);\r\n }\r\n }\r\n\r\n private addToLines(result: SearchItem) {\r\n if (!this.lines.find(l => l.id === result.productVariantId)) {\r\n this.lines.push({\r\n id: result.productVariantId,\r\n name: result.productVariantName,\r\n preview: result.productAsset?.preview ?? '',\r\n quantity: 1,\r\n sku: result.sku,\r\n unitPriceWithTax:\r\n (result.priceWithTax.__typename === 'SinglePrice' && result.priceWithTax.value) || 0,\r\n });\r\n this.persistToLocalStorage();\r\n this.orderLinesChange.emit(this.lines);\r\n }\r\n }\r\n\r\n updateQuantity() {\r\n this.persistToLocalStorage();\r\n this.orderLinesChange.emit(this.lines);\r\n }\r\n\r\n removeLine(line: TestOrderLine) {\r\n this.lines = this.lines.filter(l => l.id !== line.id);\r\n this.persistToLocalStorage();\r\n this.orderLinesChange.emit(this.lines);\r\n }\r\n\r\n private persistToLocalStorage() {\r\n this.localStorageService.setForCurrentLocation('shippingTestOrder', this.lines);\r\n }\r\n\r\n private loadFromLocalStorage(): TestOrderLine[] {\r\n return this.localStorageService.getForCurrentLocation('shippingTestOrder') || [];\r\n }\r\n}\r\n","<div class=\"card\">\r\n <div class=\"card-header\">\r\n {{ 'settings.test-order' | translate }}\r\n </div>\r\n <table class=\"order-table table\" *ngIf=\"lines.length; else emptyPlaceholder\">\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>{{ 'order.product-name' | translate }}</th>\r\n <th>{{ 'order.product-sku' | translate }}</th>\r\n <th>{{ 'order.unit-price' | translate }}</th>\r\n <th>{{ 'order.quantity' | translate }}</th>\r\n <th>{{ 'order.total' | translate }}</th>\r\n </tr>\r\n </thead>\r\n <tr *ngFor=\"let line of lines\" class=\"order-line\">\r\n <td class=\"align-middle thumb\">\r\n <img [src]=\"line.preview + '?preset=tiny'\" />\r\n </td>\r\n <td class=\"align-middle name\">{{ line.name }}</td>\r\n <td class=\"align-middle sku\">{{ line.sku }}</td>\r\n <td class=\"align-middle unit-price\">\r\n {{ line.unitPriceWithTax | localeCurrency: currencyCode }}\r\n </td>\r\n <td class=\"align-middle quantity\">\r\n <input\r\n [(ngModel)]=\"line.quantity\"\r\n (change)=\"updateQuantity()\"\r\n type=\"number\"\r\n max=\"9999\"\r\n min=\"1\"\r\n />\r\n <button class=\"icon-button\" (click)=\"removeLine(line)\">\r\n <clr-icon shape=\"trash\"></clr-icon>\r\n </button>\r\n </td>\r\n <td class=\"align-middle total\">\r\n {{ (line.unitPriceWithTax * line.quantity) | localeCurrency: currencyCode }}\r\n </td>\r\n </tr>\r\n <tr class=\"sub-total\">\r\n <td class=\"left\">{{ 'order.sub-total' | translate }}</td>\r\n <td></td>\r\n <td></td>\r\n <td></td>\r\n <td></td>\r\n <td>{{ subTotal | localeCurrency: currencyCode }}</td>\r\n </tr>\r\n </table>\r\n\r\n <ng-template #emptyPlaceholder>\r\n <div class=\"card-block empty-placeholder\">\r\n <div class=\"empty-text\">{{ 'settings.add-products-to-test-order' | translate }}</div>\r\n <clr-icon shape=\"arrow\" dir=\"down\" size=\"96\"></clr-icon>\r\n </div>\r\n </ng-template>\r\n <div class=\"card-block\">\r\n <vdr-product-variant-selector (productSelected)=\"selectResult($event)\"> </vdr-product-variant-selector>\r\n </div>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, EventEmitter, OnDestroy, OnInit, Output } from '@angular/core';\r\nimport { FormBuilder, FormGroup } from '@angular/forms';\r\nimport { DataService, GetAvailableCountriesQuery, ItemOf, LocalStorageService } from '@vendure/admin-ui/core';\r\nimport { Observable, Subscription } from 'rxjs';\r\n\r\nexport interface TestAddress {\r\n city: string;\r\n province: string;\r\n postalCode: string;\r\n countryCode: string;\r\n}\r\n\r\n@Component({\r\n selector: 'vdr-test-address-form',\r\n templateUrl: './test-address-form.component.html',\r\n styleUrls: ['./test-address-form.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class TestAddressFormComponent implements OnInit, OnDestroy {\r\n @Output() addressChange = new EventEmitter<TestAddress>();\r\n availableCountries$: Observable<Array<ItemOf<GetAvailableCountriesQuery, 'countries'>>>;\r\n form: FormGroup;\r\n private subscription: Subscription;\r\n\r\n constructor(\r\n private formBuilder: FormBuilder,\r\n private dataService: DataService,\r\n private localStorageService: LocalStorageService,\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.availableCountries$ = this.dataService.settings\r\n .getAvailableCountries()\r\n .mapSingle(result => result.countries.items);\r\n const storedValue = this.localStorageService.getForCurrentLocation('shippingTestAddress');\r\n const initialValue: TestAddress = storedValue\r\n ? storedValue\r\n : {\r\n city: '',\r\n countryCode: '',\r\n postalCode: '',\r\n province: '',\r\n };\r\n this.addressChange.emit(initialValue);\r\n\r\n this.form = this.formBuilder.group(initialValue);\r\n this.subscription = this.form.valueChanges.subscribe(value => {\r\n this.localStorageService.setForCurrentLocation('shippingTestAddress', value);\r\n this.addressChange.emit(value);\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.subscription) {\r\n this.subscription.unsubscribe();\r\n }\r\n }\r\n}\r\n","<div class=\"card\">\r\n <div class=\"card-header\">\r\n {{ 'settings.test-address' | translate }}\r\n </div>\r\n <div class=\"card-block\">\r\n <form [formGroup]=\"form\">\r\n <clr-input-container>\r\n <label>{{ 'customer.city' | translate }}</label>\r\n <input formControlName=\"city\" type=\"text\" clrInput />\r\n </clr-input-container>\r\n <clr-input-container>\r\n <label>{{ 'customer.province' | translate }}</label>\r\n <input formControlName=\"province\" type=\"text\" clrInput />\r\n </clr-input-container>\r\n <clr-input-container>\r\n <label>{{ 'customer.postal-code' | translate }}</label>\r\n <input formControlName=\"postalCode\" type=\"text\" clrInput />\r\n </clr-input-container>\r\n <clr-input-container>\r\n <label>{{ 'customer.country' | translate }}</label>\r\n <select name=\"countryCode\" formControlName=\"countryCode\" clrInput clrSelect>\r\n <option *ngFor=\"let country of availableCountries$ | async\" [value]=\"country.code\">\r\n {{ country.name }}\r\n </option>\r\n </select>\r\n </clr-input-container>\r\n </form>\r\n </div>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\r\n\r\nimport { CurrencyCode, TestShippingMethodResult } from '@vendure/admin-ui/core';\r\n\r\n@Component({\r\n selector: 'vdr-shipping-method-test-result',\r\n templateUrl: './shipping-method-test-result.component.html',\r\n styleUrls: ['./shipping-method-test-result.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ShippingMethodTestResultComponent {\r\n @Input() testResult: TestShippingMethodResult;\r\n @Input() okToRun = false;\r\n @Input() testDataUpdated = false;\r\n @Input() currencyCode: CurrencyCode;\r\n @Output() runTest = new EventEmitter<void>();\r\n}\r\n","<div\r\n class=\"test-result card\"\r\n [ngClass]=\"{\r\n success: testResult?.eligible === true,\r\n error: testResult?.eligible === false,\r\n unknown: !testResult\r\n }\"\r\n>\r\n <div class=\"card-header\">\r\n {{ 'settings.test-result' | translate }}\r\n </div>\r\n <div class=\"card-block\">\r\n <div class=\"result-details\" [class.stale]=\"testDataUpdated\">\r\n <vdr-labeled-data [label]=\"'settings.eligible' | translate\">\r\n <div class=\"eligible-icon\">\r\n <clr-icon\r\n shape=\"success-standard\"\r\n class=\"is-solid success\"\r\n *ngIf=\"testResult?.eligible\"\r\n ></clr-icon>\r\n <clr-icon\r\n shape=\"ban\"\r\n class=\"is-solid error\"\r\n *ngIf=\"testResult?.eligible === false\"\r\n ></clr-icon>\r\n <clr-icon shape=\"unknown-status\" *ngIf=\"!testResult\"></clr-icon>\r\n </div>\r\n {{ testResult?.eligible }}\r\n </vdr-labeled-data>\r\n <div class=\"price-row\">\r\n <vdr-labeled-data\r\n [label]=\"'common.price' | translate\"\r\n *ngIf=\"testResult?.quote?.price != null\"\r\n >\r\n {{ testResult.quote?.price | localeCurrency: currencyCode }}\r\n </vdr-labeled-data>\r\n <vdr-labeled-data\r\n [label]=\"'common.price-with-tax' | translate\"\r\n *ngIf=\"testResult?.quote?.priceWithTax != null\"\r\n >\r\n {{ testResult.quote?.priceWithTax | localeCurrency: currencyCode }}\r\n </vdr-labeled-data>\r\n </div>\r\n <vdr-object-tree\r\n *ngIf=\"testResult?.quote?.metadata\"\r\n [value]=\"testResult?.quote?.metadata\"\r\n ></vdr-object-tree>\r\n </div>\r\n </div>\r\n <div class=\"card-footer\">\r\n <button class=\"btn btn-secondary\" (click)=\"runTest.emit()\" [disabled]=\"!okToRun\">\r\n {{ 'settings.test-shipping-method' | translate }}\r\n </button>\r\n </div>\r\n</div>\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { 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 configurableDefinitionToInstance,\r\n ConfigurableOperation,\r\n ConfigurableOperationDefinition,\r\n CreateShippingMethodInput,\r\n createUpdatedTranslatable,\r\n CustomFieldConfig,\r\n DataService,\r\n findTranslation,\r\n GetActiveChannelQuery,\r\n getConfigArgValue,\r\n LanguageCode,\r\n NotificationService,\r\n Permission,\r\n ServerConfigService,\r\n ShippingMethod,\r\n ShippingMethodFragment,\r\n TestShippingMethodInput,\r\n TestShippingMethodResult,\r\n toConfigurableOperationInput,\r\n UpdateShippingMethodInput,\r\n} from '@vendure/admin-ui/core';\r\nimport { normalizeString } from '@vendure/common/lib/normalize-string';\r\nimport { combineLatest, merge, Observable, of, Subject } from 'rxjs';\r\nimport { mergeMap, switchMap, take, takeUntil } from 'rxjs/operators';\r\n\r\nimport { TestAddress } from '../test-address-form/test-address-form.component';\r\nimport { TestOrderLine } from '../test-order-builder/test-order-builder.component';\r\n\r\n@Component({\r\n selector: 'vdr-shipping-method-detail',\r\n templateUrl: './shipping-method-detail.component.html',\r\n styleUrls: ['./shipping-method-detail.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ShippingMethodDetailComponent\r\n extends BaseDetailComponent<ShippingMethodFragment>\r\n implements OnInit, OnDestroy\r\n{\r\n detailForm: FormGroup;\r\n checkers: ConfigurableOperationDefinition[] = [];\r\n calculators: ConfigurableOperationDefinition[] = [];\r\n fulfillmentHandlers: ConfigurableOperationDefinition[] = [];\r\n selectedChecker?: ConfigurableOperation | null;\r\n selectedCheckerDefinition?: ConfigurableOperationDefinition;\r\n selectedCalculator?: ConfigurableOperation | null;\r\n selectedCalculatorDefinition?: ConfigurableOperationDefinition;\r\n activeChannel$: Observable<GetActiveChannelQuery['activeChannel']>;\r\n testAddress: TestAddress;\r\n testOrderLines: TestOrderLine[];\r\n testDataUpdated = false;\r\n testResult$: Observable<TestShippingMethodResult | undefined>;\r\n customFields: CustomFieldConfig[];\r\n readonly updatePermission = [Permission.UpdateSettings, Permission.UpdateShippingMethod];\r\n private fetchTestResult$ = new Subject<[TestAddress, TestOrderLine[]]>();\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('ShippingMethod');\r\n this.detailForm = this.formBuilder.group({\r\n code: ['', Validators.required],\r\n name: ['', Validators.required],\r\n description: '',\r\n fulfillmentHandler: ['', Validators.required],\r\n checker: {},\r\n calculator: {},\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 combineLatest([\r\n this.dataService.shippingMethod.getShippingMethodOperations().single$,\r\n this.entity$.pipe(take(1)),\r\n ]).subscribe(([data, entity]) => {\r\n this.checkers = data.shippingEligibilityCheckers;\r\n this.calculators = data.shippingCalculators;\r\n this.fulfillmentHandlers = data.fulfillmentHandlers;\r\n this.changeDetector.markForCheck();\r\n this.selectedCheckerDefinition = data.shippingEligibilityCheckers.find(\r\n c => c.code === (entity.checker && entity.checker.code),\r\n );\r\n this.selectedCalculatorDefinition = data.shippingCalculators.find(\r\n c => c.code === (entity.calculator && entity.calculator.code),\r\n );\r\n });\r\n\r\n this.activeChannel$ = this.dataService.settings\r\n .getActiveChannel()\r\n .mapStream(data => data.activeChannel);\r\n\r\n this.testResult$ = this.fetchTestResult$.pipe(\r\n switchMap(([address, lines]) => {\r\n if (!this.selectedChecker || !this.selectedCalculator) {\r\n return of(undefined);\r\n }\r\n const formValue = this.detailForm.value;\r\n const input: TestShippingMethodInput = {\r\n shippingAddress: { ...address, streetLine1: 'test' },\r\n lines: lines.map(l => ({ productVariantId: l.id, quantity: l.quantity })),\r\n checker: toConfigurableOperationInput(this.selectedChecker, formValue.checker),\r\n calculator: toConfigurableOperationInput(this.selectedCalculator, formValue.calculator),\r\n };\r\n return this.dataService.shippingMethod\r\n .testShippingMethod(input)\r\n .mapSingle(result => result.testShippingMethod);\r\n }),\r\n );\r\n\r\n // tslint:disable:no-non-null-assertion\r\n merge(\r\n this.detailForm.get(['checker'])!.valueChanges,\r\n this.detailForm.get(['calculator'])!.valueChanges,\r\n )\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe(() => (this.testDataUpdated = true));\r\n // tslint:enable:no-non-null-assertion\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy();\r\n }\r\n\r\n updateCode(currentCode: string, nameValue: string) {\r\n if (!currentCode) {\r\n const codeControl = this.detailForm.get(['code']);\r\n if (codeControl && codeControl.pristine) {\r\n codeControl.setValue(normalizeString(nameValue, '-'));\r\n }\r\n }\r\n }\r\n\r\n selectChecker(checker: ConfigurableOperationDefinition) {\r\n this.selectedCheckerDefinition = checker;\r\n this.selectedChecker = configurableDefinitionToInstance(checker);\r\n const formControl = this.detailForm.get('checker');\r\n if (formControl) {\r\n formControl.clearValidators();\r\n formControl.updateValueAndValidity({ onlySelf: true });\r\n formControl.patchValue(this.selectedChecker);\r\n }\r\n this.detailForm.markAsDirty();\r\n }\r\n\r\n selectCalculator(calculator: ConfigurableOperationDefinition) {\r\n this.selectedCalculatorDefinition = calculator;\r\n this.selectedCalculator = configurableDefinitionToInstance(calculator);\r\n const formControl = this.detailForm.get('calculator');\r\n if (formControl) {\r\n formControl.clearValidators();\r\n formControl.updateValueAndValidity({ onlySelf: true });\r\n formControl.patchValue(this.selectedCalculator);\r\n }\r\n this.detailForm.markAsDirty();\r\n }\r\n\r\n create() {\r\n const selectedChecker = this.selectedChecker;\r\n const selectedCalculator = this.selectedCalculator;\r\n if (!selectedChecker || !selectedCalculator) {\r\n return;\r\n }\r\n combineLatest([this.entity$, this.languageCode$])\r\n .pipe(\r\n take(1),\r\n mergeMap(([shippingMethod, languageCode]) => {\r\n const formValue = this.detailForm.value;\r\n const input = {\r\n ...(this.getUpdatedShippingMethod(\r\n shippingMethod,\r\n this.detailForm,\r\n languageCode,\r\n ) as CreateShippingMethodInput),\r\n checker: toConfigurableOperationInput(selectedChecker, formValue.checker),\r\n calculator: toConfigurableOperationInput(selectedCalculator, formValue.calculator),\r\n };\r\n return this.dataService.shippingMethod.createShippingMethod(input);\r\n }),\r\n )\r\n .subscribe(\r\n data => {\r\n this.notificationService.success(_('common.notify-create-success'), {\r\n entity: 'ShippingMethod',\r\n });\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n this.router.navigate(['../', data.createShippingMethod.id], { relativeTo: this.route });\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-create-error'), {\r\n entity: 'ShippingMethod',\r\n });\r\n },\r\n );\r\n }\r\n\r\n save() {\r\n const selectedChecker = this.selectedChecker;\r\n const selectedCalculator = this.selectedCalculator;\r\n if (!selectedChecker || !selectedCalculator) {\r\n return;\r\n }\r\n combineLatest([this.entity$, this.languageCode$])\r\n .pipe(\r\n take(1),\r\n mergeMap(([shippingMethod, languageCode]) => {\r\n const formValue = this.detailForm.value;\r\n const input = {\r\n ...(this.getUpdatedShippingMethod(\r\n shippingMethod,\r\n this.detailForm,\r\n languageCode,\r\n ) as UpdateShippingMethodInput),\r\n checker: toConfigurableOperationInput(selectedChecker, formValue.checker),\r\n calculator: toConfigurableOperationInput(selectedCalculator, formValue.calculator),\r\n };\r\n return this.dataService.shippingMethod.updateShippingMethod(input);\r\n }),\r\n )\r\n .subscribe(\r\n data => {\r\n this.notificationService.success(_('common.notify-update-success'), {\r\n entity: 'ShippingMethod',\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: 'ShippingMethod',\r\n });\r\n },\r\n );\r\n }\r\n\r\n setTestOrderLines(event: TestOrderLine[]) {\r\n this.testOrderLines = event;\r\n this.testDataUpdated = true;\r\n }\r\n\r\n setTestAddress(event: TestAddress) {\r\n this.testAddress = event;\r\n this.testDataUpdated = true;\r\n }\r\n\r\n allTestDataPresent(): boolean {\r\n return !!(\r\n this.testAddress &&\r\n this.testOrderLines &&\r\n this.testOrderLines.length &&\r\n this.selectedChecker &&\r\n this.selectedCalculator\r\n );\r\n }\r\n\r\n runTest() {\r\n this.fetchTestResult$.next([this.testAddress, this.testOrderLines]);\r\n this.testDataUpdated = false;\r\n }\r\n\r\n /**\r\n * Given a ShippingMethod and the value of the detailForm, this method creates an updated copy which\r\n * can then be persisted to the API.\r\n */\r\n private getUpdatedShippingMethod(\r\n shippingMethod: ShippingMethodFragment,\r\n formGroup: FormGroup,\r\n languageCode: LanguageCode,\r\n ): Omit<CreateShippingMethodInput | UpdateShippingMethodInput, 'checker' | 'calculator'> {\r\n const formValue = formGroup.value;\r\n const input = createUpdatedTranslatable({\r\n translatable: shippingMethod,\r\n updatedFields: formValue,\r\n customFieldConfig: this.customFields,\r\n languageCode,\r\n defaultTranslation: {\r\n languageCode,\r\n name: shippingMethod.name || '',\r\n description: shippingMethod.description || '',\r\n },\r\n });\r\n return { ...input, fulfillmentHandler: formValue.fulfillmentHandler };\r\n }\r\n\r\n protected setFormValues(shippingMethod: ShippingMethodFragment, languageCode: LanguageCode): void {\r\n const currentTranslation = findTranslation(shippingMethod, languageCode);\r\n this.detailForm.patchValue({\r\n name: currentTranslation?.name ?? '',\r\n description: currentTranslation?.description ?? '',\r\n code: shippingMethod.code,\r\n fulfillmentHandler: shippingMethod.fulfillmentHandlerCode,\r\n checker: shippingMethod.checker || {},\r\n calculator: shippingMethod.calculator || {},\r\n });\r\n if (!this.selectedChecker) {\r\n this.selectedChecker = shippingMethod.checker && {\r\n code: shippingMethod.checker.code,\r\n args: shippingMethod.checker.args.map(a => ({ ...a, value: getConfigArgValue(a.value) })),\r\n };\r\n }\r\n if (!this.selectedCalculator) {\r\n this.selectedCalculator = shippingMethod.calculator && {\r\n code: shippingMethod.calculator?.code,\r\n args: shippingMethod.calculator?.args.map(a => ({ ...a, value: getConfigArgValue(a.value) })),\r\n };\r\n }\r\n if (this.customFields.length) {\r\n this.setCustomFieldFormValues(\r\n this.customFields,\r\n this.detailForm.get(['customFields']),\r\n shippingMethod,\r\n currentTranslation,\r\n );\r\n }\r\n }\r\n}\r\n","<vdr-action-bar>\r\n <vdr-ab-left>\r\n <vdr-entity-info [entity]=\"entity$ | async\"></vdr-entity-info>\r\n <vdr-language-selector\r\n [disabled]=\"isNew$ | async\"\r\n [availableLanguageCodes]=\"availableLanguages$ | async\"\r\n [currentLanguageCode]=\"languageCode$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"shipping-method-detail\"></vdr-action-bar-items>\r\n <button\r\n class=\"btn btn-primary\"\r\n *ngIf=\"isNew$ | async; else updateButton\"\r\n (click)=\"create()\"\r\n [disabled]=\"detailForm.pristine || detailForm.invalid || !selectedChecker || !selectedCalculator\"\r\n >\r\n {{ 'common.create' | translate }}\r\n </button>\r\n <ng-template #updateButton>\r\n <button\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n *vdrIfPermissions=\"updatePermission\"\r\n [disabled]=\"\r\n detailForm.pristine || detailForm.invalid || !selectedChecker || !selectedCalculator\r\n \"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </ng-template>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<form class=\"form\" [formGroup]=\"detailForm\" *ngIf=\"entity$ | async as shippingMethod\">\r\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\r\n <input\r\n id=\"name\"\r\n type=\"text\"\r\n formControlName=\"name\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n (input)=\"updateCode(shippingMethod.code, $event.target.value)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"'common.code' | translate\"\r\n for=\"code\"\r\n [readOnlyToggle]=\"updatePermission | hasPermission\"\r\n >\r\n <input\r\n id=\"code\"\r\n type=\"text\"\r\n formControlName=\"code\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-rich-text-editor\r\n formControlName=\"description\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n [label]=\"'common.description' | translate\"\r\n ></vdr-rich-text-editor>\r\n <vdr-form-field [label]=\"'settings.fulfillment-handler' | translate\" for=\"fulfillmentHandler\" class=\"mb2\">\r\n <select\r\n name=\"fulfillmentHandler\"\r\n formControlName=\"fulfillmentHandler\"\r\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\r\n >\r\n <option *ngFor=\"let handler of fulfillmentHandlers\" [value]=\"handler.code\">\r\n {{ handler.code }}: {{ handler.description }}\r\n </option>\r\n </select>\r\n </vdr-form-field>\r\n\r\n <section formGroupName=\"customFields\" *ngIf=\"customFields.length\">\r\n <label>{{ 'common.custom-fields' | translate }}</label>\r\n <vdr-tabbed-custom-fields\r\n entityName=\"ShippingMethod\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n ></vdr-tabbed-custom-fields>\r\n </section>\r\n\r\n <vdr-custom-detail-component-host\r\n locationId=\"shipping-method-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n\r\n <div class=\"clr-row mt4\">\r\n <div class=\"clr-col\">\r\n <label class=\"clr-control-label\">{{ 'settings.shipping-eligibility-checker' | translate }}</label>\r\n <vdr-configurable-input\r\n *ngIf=\"selectedChecker && selectedCheckerDefinition\"\r\n [operation]=\"selectedChecker\"\r\n [operationDefinition]=\"selectedCheckerDefinition\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n (remove)=\"selectedChecker = null\"\r\n formControlName=\"checker\"\r\n ></vdr-configurable-input>\r\n <div *ngIf=\"!selectedChecker || !selectedCheckerDefinition\">\r\n <vdr-dropdown>\r\n <button class=\"btn btn-outline\" vdrDropdownTrigger>\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'common.select' | translate }}\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-left\">\r\n <button\r\n *ngFor=\"let checker of checkers\"\r\n type=\"button\"\r\n vdrDropdownItem\r\n (click)=\"selectChecker(checker)\"\r\n >\r\n {{ checker.description }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n </div>\r\n <div class=\"clr-col\">\r\n <label class=\"clr-control-label\">{{ 'settings.shipping-calculator' | translate }}</label>\r\n <vdr-configurable-input\r\n *ngIf=\"selectedCalculator && selectedCalculatorDefinition\"\r\n [operation]=\"selectedCalculator\"\r\n [operationDefinition]=\"selectedCalculatorDefinition\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n (remove)=\"selectedCalculator = null\"\r\n formControlName=\"calculator\"\r\n ></vdr-configurable-input>\r\n <div *ngIf=\"!selectedCalculator || !selectedCalculatorDefinition\">\r\n <vdr-dropdown>\r\n <button class=\"btn btn-outline\" vdrDropdownTrigger>\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'common.select' | translate }}\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-left\">\r\n <button\r\n *ngFor=\"let calculator of calculators\"\r\n type=\"button\"\r\n vdrDropdownItem\r\n (click)=\"selectCalculator(calculator)\"\r\n >\r\n {{ calculator.description }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n </div>\r\n </div>\r\n</form>\r\n<div class=\"testing-tool\">\r\n <clr-accordion>\r\n <clr-accordion-panel>\r\n <clr-accordion-title>{{ 'settings.test-shipping-method' | translate }}</clr-accordion-title>\r\n <clr-accordion-content *clrIfExpanded>\r\n <div class=\"clr-row\">\r\n <div class=\"clr-col\">\r\n <vdr-test-order-builder\r\n (orderLinesChange)=\"setTestOrderLines($event)\"\r\n ></vdr-test-order-builder>\r\n </div>\r\n <div class=\"clr-col\">\r\n <vdr-test-address-form\r\n (addressChange)=\"setTestAddress($event)\"\r\n ></vdr-test-address-form>\r\n <vdr-shipping-method-test-result\r\n [currencyCode]=\"(activeChannel$ | async)?.currencyCode\"\r\n [okToRun]=\"allTestDataPresent() && testDataUpdated && detailForm.valid\"\r\n [testDataUpdated]=\"testDataUpdated\"\r\n [testResult]=\"testResult$ | async\"\r\n (runTest)=\"runTest()\"\r\n ></vdr-shipping-method-test-result>\r\n </div>\r\n </div>\r\n </clr-accordion-content>\r\n </clr-accordion-panel>\r\n </clr-accordion>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n BaseListComponent,\r\n DataService,\r\n GetActiveChannelQuery,\r\n GetShippingMethodListQuery,\r\n ItemOf,\r\n LanguageCode,\r\n ModalService,\r\n NotificationService,\r\n ServerConfigService,\r\n ShippingMethodQuote,\r\n TestEligibleShippingMethodsInput,\r\n} from '@vendure/admin-ui/core';\r\nimport { EMPTY, Observable, Subject } from 'rxjs';\r\nimport { switchMap, tap } from 'rxjs/operators';\r\n\r\nimport { TestAddress } from '../test-address-form/test-address-form.component';\r\nimport { TestOrderLine } from '../test-order-builder/test-order-builder.component';\r\n\r\n@Component({\r\n selector: 'vdr-shipping-method-list',\r\n templateUrl: './shipping-method-list.component.html',\r\n styleUrls: ['./shipping-method-list.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ShippingMethodListComponent\r\n extends BaseListComponent<\r\n GetShippingMethodListQuery,\r\n ItemOf<GetShippingMethodListQuery, 'shippingMethods'>\r\n >\r\n implements OnInit\r\n{\r\n activeChannel$: Observable<GetActiveChannelQuery['activeChannel']>;\r\n testAddress: TestAddress;\r\n testOrderLines: TestOrderLine[];\r\n testDataUpdated = false;\r\n testResult$: Observable<ShippingMethodQuote[] | undefined>;\r\n availableLanguages$: Observable<LanguageCode[]>;\r\n contentLanguage$: Observable<LanguageCode>;\r\n private fetchTestResult$ = new Subject<[TestAddress, TestOrderLine[]]>();\r\n\r\n constructor(\r\n private modalService: ModalService,\r\n private notificationService: NotificationService,\r\n private dataService: DataService,\r\n private serverConfigService: ServerConfigService,\r\n router: Router,\r\n route: ActivatedRoute,\r\n ) {\r\n super(router, route);\r\n super.setQueryFn(\r\n (...args: any[]) =>\r\n this.dataService.shippingMethod.getShippingMethods(...args).refetchOnChannelChange(),\r\n data => data.shippingMethods,\r\n );\r\n }\r\n\r\n ngOnInit() {\r\n super.ngOnInit();\r\n this.testResult$ = this.fetchTestResult$.pipe(\r\n switchMap(([address, lines]) => {\r\n const input: TestEligibleShippingMethodsInput = {\r\n shippingAddress: { ...address, streetLine1: 'test' },\r\n lines: lines.map(l => ({ productVariantId: l.id, quantity: l.quantity })),\r\n };\r\n return this.dataService.shippingMethod\r\n .testEligibleShippingMethods(input)\r\n .mapSingle(result => result.testEligibleShippingMethods);\r\n }),\r\n );\r\n this.activeChannel$ = this.dataService.settings\r\n .getActiveChannel()\r\n .mapStream(data => data.activeChannel);\r\n this.availableLanguages$ = this.serverConfigService.getAvailableLanguages();\r\n this.contentLanguage$ = this.dataService.client\r\n .uiState()\r\n .mapStream(({ uiState }) => uiState.contentLanguage)\r\n .pipe(tap(() => this.refresh()));\r\n }\r\n\r\n deleteShippingMethod(id: string) {\r\n this.modalService\r\n .dialog({\r\n title: _('catalog.confirm-delete-shipping-method'),\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.shippingMethod.deleteShippingMethod(id) : EMPTY,\r\n ),\r\n )\r\n .subscribe(\r\n () => {\r\n this.notificationService.success(_('common.notify-delete-success'), {\r\n entity: 'ShippingMethod',\r\n });\r\n this.refresh();\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-delete-error'), {\r\n entity: 'ShippingMethod',\r\n });\r\n },\r\n );\r\n }\r\n\r\n setTestOrderLines(event: TestOrderLine[]) {\r\n this.testOrderLines = event;\r\n this.testDataUpdated = true;\r\n }\r\n\r\n setTestAddress(event: TestAddress) {\r\n this.testAddress = event;\r\n this.testDataUpdated = true;\r\n }\r\n\r\n allTestDataPresent(): boolean {\r\n return !!(this.testAddress && this.testOrderLines && this.testOrderLines.length);\r\n }\r\n\r\n runTest() {\r\n this.fetchTestResult$.next([this.testAddress, this.testOrderLines]);\r\n this.testDataUpdated = false;\r\n }\r\n\r\n setLanguage(code: LanguageCode) {\r\n this.dataService.client.setContentLanguage(code).subscribe();\r\n }\r\n}\r\n","<vdr-action-bar>\r\n <vdr-ab-left>\r\n <vdr-language-selector\r\n [availableLanguageCodes]=\"availableLanguages$ | async\"\r\n [currentLanguageCode]=\"contentLanguage$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"shipping-method-list\"></vdr-action-bar-items>\r\n <a\r\n class=\"btn btn-primary\"\r\n [routerLink]=\"['./create']\"\r\n *vdrIfPermissions=\"['CreateSettings', 'CreateShippingMethod']\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'settings.create-new-shipping-method' | translate }}\r\n </a>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<vdr-data-table\r\n [items]=\"items$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n>\r\n <vdr-dt-column>{{ 'common.code' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'common.name' | translate }}</vdr-dt-column>\r\n <vdr-dt-column></vdr-dt-column>\r\n <vdr-dt-column></vdr-dt-column>\r\n <ng-template let-shippingMethod=\"item\">\r\n <td class=\"left align-middle\">{{ shippingMethod.code }}</td>\r\n <td class=\"left align-middle\">{{ shippingMethod.name }}</td>\r\n <td class=\"right align-middle\">\r\n <vdr-table-row-action\r\n iconShape=\"edit\"\r\n [label]=\"'common.edit' | translate\"\r\n [linkTo]=\"['./', shippingMethod.id]\"\r\n ></vdr-table-row-action>\r\n </td>\r\n <td class=\"right align-middle\">\r\n <vdr-dropdown>\r\n <button type=\"button\" class=\"btn btn-link btn-sm\" vdrDropdownTrigger>\r\n {{ 'common.actions' | translate }}\r\n <clr-icon shape=\"caret down\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button\r\n type=\"button\"\r\n class=\"delete-button\"\r\n (click)=\"deleteShippingMethod(shippingMethod.id)\"\r\n [disabled]=\"!(['DeleteSettings', 'DeleteShippingMethod'] | hasPermission)\"\r\n vdrDropdownItem\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'common.delete' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </td>\r\n </ng-template>\r\n</vdr-data-table>\r\n\r\n<div class=\"testing-tool\">\r\n <clr-accordion>\r\n <clr-accordion-panel>\r\n <clr-accordion-title>{{ 'settings.test-shipping-methods' | translate }}</clr-accordion-title>\r\n <clr-accordion-content *clrIfExpanded>\r\n <div class=\"clr-row\">\r\n <div class=\"clr-col\">\r\n <vdr-test-order-builder\r\n (orderLinesChange)=\"setTestOrderLines($event)\"\r\n ></vdr-test-order-builder>\r\n </div>\r\n <div class=\"clr-col\">\r\n <vdr-test-address-form\r\n (addressChange)=\"setTestAddress($event)\"\r\n ></vdr-test-address-form>\r\n <vdr-shipping-eligibility-test-result\r\n [currencyCode]=\"(activeChannel$ | async)?.currencyCode\"\r\n [okToRun]=\"allTestDataPresent()\"\r\n [testDataUpdated]=\"testDataUpdated\"\r\n [testResult]=\"testResult$ | async\"\r\n (runTest)=\"runTest()\"\r\n ></vdr-shipping-eligibility-test-result>\r\n </div>\r\n </div>\r\n </clr-accordion-content>\r\n </clr-accordion-panel>\r\n </clr-accordion>\r\n</div>\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { 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 CreateTaxCategoryInput,\r\n CustomFieldConfig,\r\n DataService,\r\n LanguageCode,\r\n NotificationService,\r\n Permission,\r\n ServerConfigService,\r\n TaxCategoryFragment,\r\n UpdateTaxCategoryInput,\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-tax-detail',\r\n templateUrl: './tax-category-detail.component.html',\r\n styleUrls: ['./tax-category-detail.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class TaxCategoryDetailComponent\r\n extends BaseDetailComponent<TaxCategoryFragment>\r\n implements OnInit, OnDestroy\r\n{\r\n taxCategory$: Observable<TaxCategoryFragment>;\r\n detailForm: FormGroup;\r\n customFields: CustomFieldConfig[];\r\n readonly updatePermission = [Permission.UpdateSettings, Permission.UpdateTaxCategory];\r\n\r\n private taxCondition: ConfigurableOperation;\r\n private taxAction: ConfigurableOperation;\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('TaxCategory');\r\n this.detailForm = this.formBuilder.group({\r\n name: ['', Validators.required],\r\n isDefault: false,\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.taxCategory$ = this.entity$;\r\n }\r\n\r\n ngOnDestroy() {\r\n this.destroy();\r\n }\r\n\r\n saveButtonEnabled(): boolean {\r\n return this.detailForm.dirty && this.detailForm.valid;\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 = {\r\n name: formValue.name,\r\n isDefault: formValue.isDefault,\r\n customFields: formValue.customFields,\r\n } as CreateTaxCategoryInput;\r\n this.dataService.settings.createTaxCategory(input).subscribe(\r\n data => {\r\n this.notificationService.success(_('common.notify-create-success'), {\r\n entity: 'TaxCategory',\r\n });\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n this.router.navigate(['../', data.createTaxCategory.id], { relativeTo: this.route });\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-create-error'), {\r\n entity: 'TaxCategory',\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.taxCategory$\r\n .pipe(\r\n take(1),\r\n mergeMap(taxCategory => {\r\n const input = {\r\n id: taxCategory.id,\r\n name: formValue.name,\r\n isDefault: formValue.isDefault,\r\n customFields: formValue.customFields,\r\n } as UpdateTaxCategoryInput;\r\n return this.dataService.settings.updateTaxCategory(input);\r\n }),\r\n )\r\n .subscribe(\r\n data => {\r\n this.notificationService.success(_('common.notify-update-success'), {\r\n entity: 'TaxCategory',\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: 'TaxCategory',\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: TaxCategoryFragment, languageCode: LanguageCode): void {\r\n this.detailForm.patchValue({\r\n name: entity.name,\r\n isDefault: entity.isDefault,\r\n });\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","<vdr-action-bar>\r\n <vdr-ab-left>\r\n <vdr-entity-info [entity]=\"entity$ | async\"></vdr-entity-info>\r\n </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"tax-category-detail\"></vdr-action-bar-items>\r\n <button\r\n class=\"btn btn-primary\"\r\n *ngIf=\"isNew$ | async; else updateButton\"\r\n (click)=\"create()\"\r\n [disabled]=\"!saveButtonEnabled()\"\r\n >\r\n {{ 'common.create' | translate }}\r\n </button>\r\n <ng-template #updateButton>\r\n <button\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n [disabled]=\"!saveButtonEnabled()\"\r\n *vdrIfPermissions=\"updatePermission\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </ng-template>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<form class=\"form\" [formGroup]=\"detailForm\">\r\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\r\n <input\r\n id=\"name\"\r\n type=\"text\"\r\n formControlName=\"name\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'common.default-tax-category' | translate\" for=\"isDefault\">\r\n <clr-toggle-wrapper>\r\n <input\r\n type=\"checkbox\"\r\n clrToggle\r\n id=\"isDefault\"\r\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\r\n formControlName=\"isDefault\"\r\n />\r\n </clr-toggle-wrapper>\r\n </vdr-form-field>\r\n <section formGroupName=\"customFields\" *ngIf=\"customFields.length\">\r\n <label>{{ 'common.custom-fields' | translate }}</label>\r\n <vdr-tabbed-custom-fields\r\n entityName=\"TaxCategory\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n ></vdr-tabbed-custom-fields>\r\n </section>\r\n <vdr-custom-detail-component-host\r\n locationId=\"tax-category-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n</form>\r\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n DataService,\r\n DeletionResult,\r\n GetTaxCategoriesQuery,\r\n ModalService,\r\n NotificationService,\r\n QueryResult,\r\n TaxCategoryFragment,\r\n} from '@vendure/admin-ui/core';\r\nimport { EMPTY, Observable } from 'rxjs';\r\nimport { map, switchMap } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'vdr-tax-list',\r\n templateUrl: './tax-category-list.component.html',\r\n styleUrls: ['./tax-category-list.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class TaxCategoryListComponent {\r\n taxCategories$: Observable<TaxCategoryFragment[]>;\r\n private queryResult: QueryResult<GetTaxCategoriesQuery>;\r\n\r\n constructor(\r\n private dataService: DataService,\r\n private notificationService: NotificationService,\r\n private modalService: ModalService,\r\n ) {\r\n this.queryResult = this.dataService.settings.getTaxCategories();\r\n this.taxCategories$ = this.queryResult.mapStream(data => data.taxCategories);\r\n }\r\n\r\n deleteTaxCategory(taxCategory: TaxCategoryFragment) {\r\n return this.modalService\r\n .dialog({\r\n title: _('settings.confirm-delete-tax-category'),\r\n body: taxCategory.name,\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(res => (res ? this.dataService.settings.deleteTaxCategory(taxCategory.id) : EMPTY)),\r\n map(res => res.deleteTaxCategory),\r\n )\r\n .subscribe(\r\n res => {\r\n if (res.result === DeletionResult.DELETED) {\r\n this.notificationService.success(_('common.notify-delete-success'), {\r\n entity: 'TaxRate',\r\n });\r\n this.queryResult.ref.refetch();\r\n } else {\r\n this.notificationService.error(res.message || _('common.notify-delete-error'), {\r\n entity: 'TaxRate',\r\n });\r\n }\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-delete-error'), {\r\n entity: 'TaxRate',\r\n });\r\n },\r\n );\r\n }\r\n}\r\n","<vdr-action-bar>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"tax-category-list\"></vdr-action-bar-items>\r\n <a class=\"btn btn-primary\" [routerLink]=\"['./create']\" *vdrIfPermissions=\"['CreateSettings', 'CreateTaxCategory']\">\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'settings.create-new-tax-category' | translate }}\r\n </a>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<vdr-data-table [items]=\"taxCategories$ | async\">\r\n <vdr-dt-column>{{ 'common.name' | translate }}</vdr-dt-column>\r\n <vdr-dt-column></vdr-dt-column>\r\n <vdr-dt-column></vdr-dt-column>\r\n <vdr-dt-column></vdr-dt-column>\r\n <ng-template let-taxCategory=\"item\">\r\n <td class=\"left align-middle\">{{ taxCategory.name }}</td>\r\n <td class=\"left align-middle\">\r\n <vdr-chip *ngIf=\"taxCategory.isDefault\">{{ 'common.default-tax-category' | translate }}</vdr-chip>\r\n </td>\r\n <td class=\"right align-middle\">\r\n <vdr-table-row-action\r\n iconShape=\"edit\"\r\n [label]=\"'common.edit' | translate\"\r\n [linkTo]=\"['./', taxCategory.id]\"\r\n ></vdr-table-row-action>\r\n </td>\r\n <td class=\"right align-middle\">\r\n <vdr-dropdown>\r\n <button type=\"button\" class=\"btn btn-link btn-sm\" vdrDropdownTrigger>\r\n {{ 'common.actions' | translate }}\r\n <clr-icon shape=\"caret down\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button\r\n type=\"button\"\r\n class=\"delete-button\"\r\n (click)=\"deleteTaxCategory(taxCategory)\"\r\n [disabled]=\"!(['DeleteSettings', 'DeleteTaxCategory'] | hasPermission)\"\r\n vdrDropdownItem\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'common.delete' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </td>\r\n </ng-template>\r\n</vdr-data-table>\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { 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 CreateTaxRateInput,\r\n CustomerGroup,\r\n CustomFieldConfig,\r\n DataService,\r\n GetZonesQuery,\r\n LanguageCode,\r\n NotificationService,\r\n Permission,\r\n ServerConfigService,\r\n TaxCategoryFragment,\r\n TaxRate,\r\n TaxRateFragment,\r\n UpdateTaxRateInput,\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-tax-rate-detail',\r\n templateUrl: './tax-rate-detail.component.html',\r\n styleUrls: ['./tax-rate-detail.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class TaxRateDetailComponent\r\n extends BaseDetailComponent<TaxRateFragment>\r\n implements OnInit, OnDestroy\r\n{\r\n taxCategories$: Observable<TaxCategoryFragment[]>;\r\n zones$: Observable<GetZonesQuery['zones']>;\r\n groups$: Observable<CustomerGroup[]>;\r\n detailForm: FormGroup;\r\n customFields: CustomFieldConfig[];\r\n readonly updatePermission = [Permission.UpdateSettings, Permission.UpdateTaxRate];\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('TaxRate');\r\n this.detailForm = this.formBuilder.group({\r\n name: ['', Validators.required],\r\n enabled: [true],\r\n value: [0, Validators.required],\r\n taxCategoryId: [''],\r\n zoneId: [''],\r\n customerGroupId: [''],\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.taxCategories$ = this.dataService.settings\r\n .getTaxCategories()\r\n .mapSingle(data => data.taxCategories);\r\n this.zones$ = this.dataService.settings.getZones().mapSingle(data => data.zones);\r\n }\r\n\r\n ngOnDestroy() {\r\n this.destroy();\r\n }\r\n\r\n saveButtonEnabled(): boolean {\r\n return this.detailForm.dirty && this.detailForm.valid;\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 = {\r\n name: formValue.name,\r\n enabled: formValue.enabled,\r\n value: formValue.value,\r\n categoryId: formValue.taxCategoryId,\r\n zoneId: formValue.zoneId,\r\n customerGroupId: formValue.customerGroupId,\r\n customFields: formValue.customFields,\r\n } as CreateTaxRateInput;\r\n this.dataService.settings.createTaxRate(input).subscribe(\r\n data => {\r\n this.notificationService.success(_('common.notify-create-success'), {\r\n entity: 'TaxRate',\r\n });\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n this.router.navigate(['../', data.createTaxRate.id], { relativeTo: this.route });\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-create-error'), {\r\n entity: 'TaxRate',\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.entity$\r\n .pipe(\r\n take(1),\r\n mergeMap(taxRate => {\r\n const input = {\r\n id: taxRate.id,\r\n name: formValue.name,\r\n enabled: formValue.enabled,\r\n value: formValue.value,\r\n categoryId: formValue.taxCategoryId,\r\n zoneId: formValue.zoneId,\r\n customerGroupId: formValue.customerGroupId,\r\n customFields: formValue.customFields,\r\n } as UpdateTaxRateInput;\r\n return this.dataService.settings.updateTaxRate(input);\r\n }),\r\n )\r\n .subscribe(\r\n data => {\r\n this.notificationService.success(_('common.notify-update-success'), {\r\n entity: 'TaxRate',\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: 'TaxRate',\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: TaxRateFragment, languageCode: LanguageCode): void {\r\n this.detailForm.patchValue({\r\n name: entity.name,\r\n enabled: entity.enabled,\r\n value: entity.value,\r\n taxCategoryId: entity.category ? entity.category.id : '',\r\n zoneId: entity.zone ? entity.zone.id : '',\r\n customerGroupId: entity.customerGroup ? entity.customerGroup.id : '',\r\n });\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","<vdr-action-bar>\r\n <vdr-ab-left>\r\n <vdr-entity-info [entity]=\"entity$ | async\"></vdr-entity-info>\r\n </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"tax-rate-detail\"></vdr-action-bar-items>\r\n <button\r\n class=\"btn btn-primary\"\r\n *ngIf=\"isNew$ | async; else updateButton\"\r\n (click)=\"create()\"\r\n [disabled]=\"!saveButtonEnabled()\"\r\n >\r\n {{ 'common.create' | translate }}\r\n </button>\r\n <ng-template #updateButton>\r\n <button\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n [disabled]=\"!saveButtonEnabled()\"\r\n *vdrIfPermissions=\"updatePermission\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </ng-template>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<form class=\"form\" [formGroup]=\"detailForm\">\r\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\r\n <input\r\n id=\"name\"\r\n type=\"text\"\r\n formControlName=\"name\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'common.enabled' | translate\" for=\"enabled\">\r\n <clr-toggle-wrapper>\r\n <input\r\n type=\"checkbox\"\r\n clrToggle\r\n id=\"enabled\"\r\n formControlName=\"enabled\"\r\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </clr-toggle-wrapper>\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'settings.rate' | translate\" for=\"value\">\r\n <vdr-affixed-input suffix=\"%\">\r\n <input\r\n id=\"value\"\r\n type=\"number\"\r\n step=\"0.1\"\r\n formControlName=\"value\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </vdr-affixed-input>\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'settings.tax-category' | translate\" for=\"taxCategoryId\">\r\n <select\r\n clrSelect\r\n name=\"taxCategoryId\"\r\n formControlName=\"taxCategoryId\"\r\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\r\n >\r\n <option *ngFor=\"let taxCategory of taxCategories$ | async\" [value]=\"taxCategory.id\">\r\n {{ taxCategory.name }}\r\n </option>\r\n </select>\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'settings.zone' | translate\" for=\"zoneId\">\r\n <select\r\n clrSelect\r\n name=\"zoneId\"\r\n formControlName=\"zoneId\"\r\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\r\n >\r\n <option *ngFor=\"let zone of zones$ | async\" [value]=\"zone.id\">{{ zone.name }}</option>\r\n </select>\r\n </vdr-form-field>\r\n <section formGroupName=\"customFields\" *ngIf=\"customFields.length\">\r\n <label>{{ 'common.custom-fields' | translate }}</label>\r\n <vdr-tabbed-custom-fields\r\n entityName=\"TaxRate\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n ></vdr-tabbed-custom-fields>\r\n </section>\r\n <vdr-custom-detail-component-host\r\n locationId=\"tax-rate-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n</form>\r\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n BaseListComponent,\r\n DataService,\r\n DeletionResult,\r\n GetTaxRateListQuery,\r\n ItemOf,\r\n ModalService,\r\n NotificationService,\r\n} from '@vendure/admin-ui/core';\r\nimport { EMPTY } from 'rxjs';\r\nimport { map, switchMap } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'vdr-tax-rate-list',\r\n templateUrl: './tax-rate-list.component.html',\r\n styleUrls: ['./tax-rate-list.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class TaxRateListComponent extends BaseListComponent<\r\n GetTaxRateListQuery,\r\n ItemOf<GetTaxRateListQuery, 'taxRates'>\r\n> {\r\n constructor(\r\n private modalService: ModalService,\r\n private notificationService: NotificationService,\r\n private dataService: DataService,\r\n router: Router,\r\n route: ActivatedRoute,\r\n ) {\r\n super(router, route);\r\n super.setQueryFn(\r\n (...args: any[]) => this.dataService.settings.getTaxRates(...args),\r\n data => data.taxRates,\r\n );\r\n }\r\n\r\n deleteTaxRate(taxRate: ItemOf<GetTaxRateListQuery, 'taxRates'>) {\r\n return this.modalService\r\n .dialog({\r\n title: _('settings.confirm-delete-tax-rate'),\r\n body: taxRate.name,\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(res => (res ? this.dataService.settings.deleteTaxRate(taxRate.id) : EMPTY)),\r\n map(res => res.deleteTaxRate),\r\n )\r\n .subscribe(\r\n res => {\r\n if (res.result === DeletionResult.DELETED) {\r\n this.notificationService.success(_('common.notify-delete-success'), {\r\n entity: 'TaxRate',\r\n });\r\n this.refresh();\r\n } else {\r\n this.notificationService.error(res.message || _('common.notify-delete-error'), {\r\n entity: 'TaxRate',\r\n });\r\n }\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-delete-error'), {\r\n entity: 'TaxRate',\r\n });\r\n },\r\n );\r\n }\r\n}\r\n","<vdr-action-bar>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"tax-rate-list\"></vdr-action-bar-items>\r\n <a class=\"btn btn-primary\" [routerLink]=\"['./create']\" *vdrIfPermissions=\"['CreateSettings', 'CreateTaxRate']\">\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'settings.create-new-tax-rate' | translate }}\r\n </a>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<vdr-data-table\r\n [items]=\"items$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n>\r\n <vdr-dt-column>{{ 'common.name' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'settings.tax-category' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'settings.zone' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'settings.tax-rate' | translate }}</vdr-dt-column>\r\n <vdr-dt-column></vdr-dt-column>\r\n <vdr-dt-column></vdr-dt-column>\r\n <ng-template let-taxRate=\"item\">\r\n <td class=\"left align-middle\">{{ taxRate.name }}</td>\r\n <td class=\"left align-middle\">{{ taxRate.category.name }}</td>\r\n <td class=\"left align-middle\">{{ taxRate.zone.name }}</td>\r\n <td class=\"left align-middle\">{{ taxRate.value }}%</td>\r\n <td class=\"right align-middle\">\r\n <vdr-table-row-action\r\n iconShape=\"edit\"\r\n [label]=\"'common.edit' | translate\"\r\n [linkTo]=\"['./', taxRate.id]\"\r\n ></vdr-table-row-action>\r\n </td>\r\n <td class=\"right align-middle\">\r\n <vdr-dropdown>\r\n <button type=\"button\" class=\"btn btn-link btn-sm\" vdrDropdownTrigger>\r\n {{ 'common.actions' | translate }}\r\n <clr-icon shape=\"caret down\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button\r\n type=\"button\"\r\n class=\"delete-button\"\r\n (click)=\"deleteTaxRate(taxRate)\"\r\n [disabled]=\"!(['DeleteSettings', 'DeleteTaxRate'] | hasPermission)\"\r\n vdrDropdownItem\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'common.delete' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </td>\r\n </ng-template>\r\n</vdr-data-table>\r\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { CreateZoneInput, CustomFieldConfig, Dialog, ServerConfigService } from '@vendure/admin-ui/core';\r\n\r\n@Component({\r\n selector: 'vdr-zone-detail-dialog',\r\n templateUrl: './zone-detail-dialog.component.html',\r\n styleUrls: ['./zone-detail-dialog.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ZoneDetailDialogComponent implements Dialog<CreateZoneInput>, OnInit {\r\n zone: { id?: string; name: string; customFields?: { [name: string]: any } };\r\n resolveWith: (result?: CreateZoneInput) => void;\r\n\r\n customFields: CustomFieldConfig[];\r\n form: FormGroup;\r\n\r\n constructor(private serverConfigService: ServerConfigService, private formBuilder: FormBuilder) {\r\n this.customFields = this.serverConfigService.getCustomFieldsFor('CustomerGroup');\r\n }\r\n\r\n ngOnInit() {\r\n this.form = this.formBuilder.group({\r\n name: [this.zone.name, Validators.required],\r\n customFields: this.formBuilder.group(\r\n this.customFields.reduce((hash, field) => ({ ...hash, [field.name]: '' }), {}),\r\n ),\r\n });\r\n if (this.customFields.length) {\r\n const customFieldsGroup = this.form.get('customFields') as FormGroup;\r\n\r\n for (const fieldDef of this.customFields) {\r\n const key = fieldDef.name;\r\n const value = this.zone.customFields?.[key];\r\n const control = customFieldsGroup.get(key);\r\n if (control) {\r\n control.patchValue(value);\r\n }\r\n }\r\n }\r\n }\r\n\r\n cancel() {\r\n this.resolveWith();\r\n }\r\n\r\n save() {\r\n this.resolveWith(this.form.value);\r\n }\r\n}\r\n","<ng-template vdrDialogTitle>\r\n <span *ngIf=\"zone.id\">{{ 'settings.update-zone' | translate }}</span>\r\n <span *ngIf=\"!zone.id\">{{ 'settings.create-zone' | translate }}</span>\r\n</ng-template>\r\n<form [formGroup]=\"form\">\r\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\r\n <input\r\n id=\"name\"\r\n type=\"text\"\r\n formControlName=\"name\"\r\n [readonly]=\"!(['UpdateSettings', 'UpdateZone'] | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-tabbed-custom-fields\r\n entityName=\"Zone\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"form.get('customFields')\"\r\n [readonly]=\"!(['UpdateSettings', 'UpdateZone'] | hasPermission)\"\r\n ></vdr-tabbed-custom-fields>\r\n</form>\r\n\r\n<ng-template vdrDialogButtons>\r\n <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\r\n <button type=\"submit\" (click)=\"save()\" [disabled]=\"form.invalid\" class=\"btn btn-primary\">\r\n <span *ngIf=\"zone.id\">{{ 'settings.update-zone' | translate }}</span>\r\n <span *ngIf=\"!zone.id\">{{ 'settings.create-zone' | translate }}</span>\r\n </button>\r\n</ng-template>\r\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n DataService,\r\n DeletionResult,\r\n GetZonesQuery,\r\n LanguageCode,\r\n ModalService,\r\n NotificationService,\r\n ServerConfigService,\r\n} from '@vendure/admin-ui/core';\r\nimport { combineLatest, EMPTY, Observable, of } from 'rxjs';\r\nimport { distinctUntilChanged, map, mapTo, switchMap, tap } from 'rxjs/operators';\r\n\r\nimport { AddCountryToZoneDialogComponent } from '../add-country-to-zone-dialog/add-country-to-zone-dialog.component';\r\nimport { ZoneDetailDialogComponent } from '../zone-detail-dialog/zone-detail-dialog.component';\r\n\r\n@Component({\r\n selector: 'vdr-zone-list',\r\n templateUrl: './zone-list.component.html',\r\n styleUrls: ['./zone-list.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ZoneListComponent implements OnInit {\r\n activeZone$: Observable<GetZonesQuery['zones'][number] | undefined>;\r\n zones$: Observable<GetZonesQuery['zones']>;\r\n members$: Observable<GetZonesQuery['zones'][number]['members']>;\r\n availableLanguages$: Observable<LanguageCode[]>;\r\n contentLanguage$: Observable<LanguageCode>;\r\n selectedMemberIds: string[] = [];\r\n\r\n constructor(\r\n private dataService: DataService,\r\n private notificationService: NotificationService,\r\n private modalService: ModalService,\r\n private route: ActivatedRoute,\r\n private router: Router,\r\n private serverConfigService: ServerConfigService,\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n const zonesQueryRef = this.dataService.settings.getZones().ref;\r\n this.zones$ = zonesQueryRef.valueChanges.pipe(map(data => data.data.zones));\r\n const activeZoneId$ = this.route.paramMap.pipe(\r\n map(pm => pm.get('contents')),\r\n distinctUntilChanged(),\r\n tap(() => (this.selectedMemberIds = [])),\r\n );\r\n this.activeZone$ = combineLatest(this.zones$, activeZoneId$).pipe(\r\n map(([zones, activeZoneId]) => {\r\n if (activeZoneId) {\r\n return zones.find(z => z.id === activeZoneId);\r\n }\r\n }),\r\n );\r\n this.availableLanguages$ = this.serverConfigService.getAvailableLanguages();\r\n this.contentLanguage$ = this.dataService.client\r\n .uiState()\r\n .mapStream(({ uiState }) => uiState.contentLanguage)\r\n .pipe(tap(() => zonesQueryRef.refetch()));\r\n }\r\n\r\n setLanguage(code: LanguageCode) {\r\n this.dataService.client.setContentLanguage(code).subscribe();\r\n }\r\n\r\n create() {\r\n this.modalService\r\n .fromComponent(ZoneDetailDialogComponent, { locals: { zone: { name: '' } } })\r\n .pipe(\r\n switchMap(result =>\r\n result ? this.dataService.settings.createZone({ ...result, memberIds: [] }) : EMPTY,\r\n ),\r\n // refresh list\r\n switchMap(() => this.dataService.settings.getZones().single$),\r\n )\r\n .subscribe(\r\n () => {\r\n this.notificationService.success(_('common.notify-create-success'), {\r\n entity: 'Zone',\r\n });\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-create-error'), {\r\n entity: 'Zone',\r\n });\r\n },\r\n );\r\n }\r\n\r\n delete(zoneId: string) {\r\n this.modalService\r\n .dialog({\r\n title: _('catalog.confirm-delete-zone'),\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 => (response ? this.dataService.settings.deleteZone(zoneId) : EMPTY)),\r\n\r\n switchMap(result => {\r\n if (result.deleteZone.result === DeletionResult.DELETED) {\r\n // refresh list\r\n return this.dataService.settings\r\n .getZones()\r\n .mapSingle(() => ({ errorMessage: false }));\r\n } else {\r\n return of({ errorMessage: result.deleteZone.message });\r\n }\r\n }),\r\n )\r\n .subscribe(\r\n result => {\r\n if (typeof result.errorMessage === 'string') {\r\n this.notificationService.error(result.errorMessage);\r\n } else {\r\n this.notificationService.success(_('common.notify-delete-success'), {\r\n entity: 'Zone',\r\n });\r\n }\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-delete-error'), {\r\n entity: 'Zone',\r\n });\r\n },\r\n );\r\n }\r\n\r\n update(zone: GetZonesQuery['zones'][number]) {\r\n this.modalService\r\n .fromComponent(ZoneDetailDialogComponent, { locals: { zone } })\r\n .pipe(\r\n switchMap(result =>\r\n result ? this.dataService.settings.updateZone({ id: zone.id, ...result }) : EMPTY,\r\n ),\r\n )\r\n .subscribe(\r\n () => {\r\n this.notificationService.success(_('common.notify-update-success'), {\r\n entity: 'Zone',\r\n });\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-update-error'), {\r\n entity: 'Zone',\r\n });\r\n },\r\n );\r\n }\r\n\r\n closeMembers() {\r\n const params = { ...this.route.snapshot.params };\r\n delete params.contents;\r\n this.router.navigate(['./', params], { relativeTo: this.route, queryParamsHandling: 'preserve' });\r\n }\r\n\r\n addToZone(zone: GetZonesQuery['zones'][number]) {\r\n this.modalService\r\n .fromComponent(AddCountryToZoneDialogComponent, {\r\n locals: {\r\n zoneName: zone.name,\r\n currentMembers: zone.members,\r\n },\r\n size: 'md',\r\n })\r\n .pipe(\r\n switchMap(memberIds =>\r\n memberIds\r\n ? this.dataService.settings\r\n .addMembersToZone(zone.id, memberIds)\r\n .pipe(mapTo(memberIds))\r\n : EMPTY,\r\n ),\r\n )\r\n .subscribe({\r\n next: result => {\r\n this.notificationService.success(_(`settings.add-countries-to-zone-success`), {\r\n countryCount: result.length,\r\n zoneName: zone.name,\r\n });\r\n },\r\n error: err => {\r\n this.notificationService.error(err);\r\n },\r\n });\r\n }\r\n\r\n removeFromZone(zone: GetZonesQuery['zones'][number], memberIds: string[]) {\r\n this.dataService.settings.removeMembersFromZone(zone.id, memberIds).subscribe({\r\n complete: () => {\r\n this.notificationService.success(_(`settings.remove-countries-from-zone-success`), {\r\n countryCount: memberIds.length,\r\n zoneName: zone.name,\r\n });\r\n },\r\n });\r\n }\r\n}\r\n","<vdr-action-bar>\r\n <vdr-ab-left>\r\n <vdr-language-selector\r\n [availableLanguageCodes]=\"availableLanguages$ | async\"\r\n [currentLanguageCode]=\"contentLanguage$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"zone-list\"></vdr-action-bar-items>\r\n <button\r\n class=\"btn btn-primary\"\r\n *vdrIfPermissions=\"['CreateSettings', 'CreateZone']\"\r\n (click)=\"create()\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'settings.create-new-zone' | translate }}\r\n </button>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n<div class=\"zone-wrapper\">\r\n <div class=\"zone-list\">\r\n <table class=\"table mt0\">\r\n <tbody>\r\n <tr\r\n *ngFor=\"let zone of zones$ | async\"\r\n [class.active]=\"zone.id === (activeZone$ | async)?.id\"\r\n >\r\n <td class=\"left align-middle\"><vdr-entity-info [entity]=\"zone\"></vdr-entity-info></td>\r\n <td class=\"left align-middle\">\r\n <vdr-chip [colorFrom]=\"zone.name\">{{ zone.name }}</vdr-chip>\r\n </td>\r\n <td class=\"text-right align-middle\">\r\n <a\r\n class=\"btn btn-link btn-sm\"\r\n [routerLink]=\"['./', { contents: zone.id }]\"\r\n queryParamsHandling=\"preserve\"\r\n >\r\n <clr-icon shape=\"view-list\"></clr-icon>\r\n {{ 'settings.view-zone-members' | translate }}\r\n </a>\r\n </td>\r\n <td class=\"align-middle\">\r\n <button class=\"btn btn-link btn-sm\" (click)=\"update(zone)\">\r\n <clr-icon shape=\"edit\"></clr-icon>\r\n {{ 'common.edit' | translate }}\r\n </button>\r\n </td>\r\n <td class=\"align-middle\">\r\n <vdr-dropdown>\r\n <button type=\"button\" class=\"btn btn-link btn-sm\" vdrDropdownTrigger>\r\n {{ 'common.actions' | translate }}\r\n <clr-icon shape=\"caret down\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button\r\n class=\"button\"\r\n vdrDropdownItem\r\n (click)=\"delete(zone.id)\"\r\n [disabled]=\"!(['DeleteSettings', 'DeleteZone'] | hasPermission)\"\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'common.delete' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"zone-members\" [class.expanded]=\"activeZone$ | async\">\r\n <ng-container *ngIf=\"activeZone$ | async as activeZone\">\r\n <vdr-zone-member-list\r\n [members]=\"activeZone.members\"\r\n [selectedMemberIds]=\"selectedMemberIds\"\r\n (selectionChange)=\"selectedMemberIds = $event\"\r\n >\r\n <div *vdrZoneMemberListHeader>\r\n <div class=\"flex\">\r\n <div class=\"header-title-row\">\r\n {{ activeZone.name }} ({{ activeZone.members.length }})\r\n </div>\r\n <div class=\"flex-spacer\"></div>\r\n <button type=\"button\" class=\"close-button\" (click)=\"closeMembers()\">\r\n <clr-icon shape=\"close\"></clr-icon>\r\n </button>\r\n </div>\r\n <div class=\"controls\">\r\n <vdr-dropdown>\r\n <button\r\n type=\"button\"\r\n class=\"btn btn-secondary btn-sm\"\r\n vdrDropdownTrigger\r\n [disabled]=\"selectedMemberIds.length === 0\"\r\n >\r\n {{ 'common.with-selected' | translate }}\r\n <clr-icon shape=\"caret down\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button\r\n type=\"button\"\r\n class=\"delete-button\"\r\n (click)=\"removeFromZone(activeZone, selectedMemberIds)\"\r\n vdrDropdownItem\r\n [disabled]=\"!(['UpdateSettings', 'UpdateZone'] | hasPermission)\"\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'settings.remove-from-zone' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n <button class=\"btn btn-secondary btn-sm\" (click)=\"addToZone(activeZone)\">\r\n {{ 'settings.add-countries-to-zone' | translate: { zoneName: activeZone.name } }}\r\n </button>\r\n </div>\r\n </div>\r\n <div *vdrZoneMemberControls=\"let member = member\">\r\n <vdr-dropdown>\r\n <button type=\"button\" class=\"btn btn-link btn-sm\" vdrDropdownTrigger>\r\n {{ 'common.actions' | translate }}\r\n <clr-icon shape=\"caret down\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <a\r\n type=\"button\"\r\n [routerLink]=\"['/settings', 'countries', member.id]\"\r\n vdrDropdownItem\r\n >\r\n <clr-icon shape=\"edit\"></clr-icon>\r\n {{ 'common.edit' | translate }}\r\n </a>\r\n <button\r\n type=\"button\"\r\n class=\"delete-button\"\r\n (click)=\"removeFromZone(activeZone, [member.id])\"\r\n vdrDropdownItem\r\n [disabled]=\"!(['UpdateSettings', 'UpdateZone'] | hasPermission)\"\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'settings.remove-from-zone' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n </vdr-zone-member-list>\r\n </ng-container>\r\n </div>\r\n</div>\r\n","import { Injectable } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { AdministratorFragment, BaseEntityResolver, DataService } from '@vendure/admin-ui/core';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class AdministratorResolver extends BaseEntityResolver<AdministratorFragment> {\r\n constructor(router: Router, dataService: DataService) {\r\n super(\r\n router,\r\n {\r\n __typename: 'Administrator' as 'Administrator',\r\n id: '',\r\n createdAt: '',\r\n updatedAt: '',\r\n emailAddress: '',\r\n firstName: '',\r\n lastName: '',\r\n user: { roles: [] } as any,\r\n },\r\n id => dataService.administrator.getAdministrator(id).mapStream(data => data.administrator),\r\n );\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport {\r\n BaseEntityResolver,\r\n ChannelFragment,\r\n CurrencyCode,\r\n DataService,\r\n getDefaultUiLanguage,\r\n} 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 ChannelResolver extends BaseEntityResolver<ChannelFragment> {\r\n constructor(router: Router, dataService: DataService) {\r\n super(\r\n router,\r\n {\r\n __typename: 'Channel',\r\n id: '',\r\n createdAt: '',\r\n updatedAt: '',\r\n code: '',\r\n token: '',\r\n pricesIncludeTax: false,\r\n currencyCode: CurrencyCode.USD,\r\n defaultLanguageCode: getDefaultUiLanguage(),\r\n defaultShippingZone: {} as any,\r\n defaultTaxZone: {} as any,\r\n },\r\n id => dataService.settings.getChannel(id).mapStream(data => data.channel),\r\n );\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { BaseEntityResolver, CountryFragment, DataService } 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 CountryResolver extends BaseEntityResolver<CountryFragment> {\r\n constructor(router: Router, dataService: DataService) {\r\n super(\r\n router,\r\n {\r\n __typename: 'Country',\r\n id: '',\r\n createdAt: '',\r\n updatedAt: '',\r\n code: '',\r\n name: '',\r\n enabled: false,\r\n translations: [],\r\n },\r\n id => dataService.settings.getCountry(id).mapStream(data => data.country),\r\n );\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { BaseEntityResolver, DataService, GetGlobalSettingsQuery } from '@vendure/admin-ui/core';\r\n\r\n/**\r\n * Resolves the global settings.\r\n */\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class GlobalSettingsResolver extends BaseEntityResolver<GetGlobalSettingsQuery['globalSettings']> {\r\n constructor(router: Router, dataService: DataService) {\r\n super(\r\n router,\r\n // we will never be creating a new GlobalSettings entity, so this part is not used.\r\n {} as any,\r\n () => dataService.settings.getGlobalSettings().mapStream(data => data.globalSettings),\r\n );\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { BaseEntityResolver, DataService, PaymentMethodFragment } 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 PaymentMethodResolver extends BaseEntityResolver<PaymentMethodFragment> {\r\n constructor(router: Router, dataService: DataService) {\r\n super(\r\n router,\r\n {\r\n __typename: 'PaymentMethod',\r\n id: '',\r\n createdAt: '',\r\n updatedAt: '',\r\n name: '',\r\n code: '',\r\n description: '',\r\n enabled: true,\r\n checker: undefined as any,\r\n handler: undefined as any,\r\n },\r\n id => dataService.settings.getPaymentMethod(id).mapStream(data => data.paymentMethod),\r\n );\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { AdministratorFragment, BaseEntityResolver, DataService } from '@vendure/admin-ui/core';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ProfileResolver extends BaseEntityResolver<AdministratorFragment> {\r\n constructor(router: Router, dataService: DataService) {\r\n super(\r\n router,\r\n {\r\n __typename: 'Administrator' as 'Administrator',\r\n id: '',\r\n createdAt: '',\r\n updatedAt: '',\r\n emailAddress: '',\r\n firstName: '',\r\n lastName: '',\r\n user: { roles: [] } as any,\r\n },\r\n id =>\r\n dataService.administrator\r\n .getActiveAdministrator()\r\n .mapStream(data => data.activeAdministrator),\r\n );\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { BaseEntityResolver, DataService, RoleFragment } from '@vendure/admin-ui/core';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class RoleResolver extends BaseEntityResolver<RoleFragment> {\r\n constructor(router: Router, dataService: DataService) {\r\n super(\r\n router,\r\n {\r\n __typename: 'Role' as 'Role',\r\n id: '',\r\n createdAt: '',\r\n updatedAt: '',\r\n code: '',\r\n description: '',\r\n permissions: [],\r\n channels: [],\r\n },\r\n id => dataService.administrator.getRole(id).mapStream(data => data.role),\r\n );\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { BaseEntityResolver, DataService, ShippingMethodFragment } 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 ShippingMethodResolver extends BaseEntityResolver<ShippingMethodFragment> {\r\n constructor(router: Router, dataService: DataService) {\r\n super(\r\n router,\r\n {\r\n __typename: 'ShippingMethod',\r\n createdAt: '',\r\n updatedAt: '',\r\n id: '',\r\n code: '',\r\n name: '',\r\n description: '',\r\n fulfillmentHandlerCode: undefined as any,\r\n checker: undefined as any,\r\n calculator: undefined as any,\r\n translations: [],\r\n },\r\n id => dataService.shippingMethod.getShippingMethod(id).mapStream(data => data.shippingMethod),\r\n );\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { BaseEntityResolver, DataService, TaxCategoryFragment } 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 TaxCategoryResolver extends BaseEntityResolver<TaxCategoryFragment> {\r\n constructor(router: Router, dataService: DataService) {\r\n super(\r\n router,\r\n {\r\n __typename: 'TaxCategory',\r\n id: '',\r\n createdAt: '',\r\n updatedAt: '',\r\n name: '',\r\n isDefault: false,\r\n },\r\n id => dataService.settings.getTaxCategory(id).mapStream(data => data.taxCategory),\r\n );\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { BaseEntityResolver, DataService, TaxRateFragment } 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 TaxRateResolver extends BaseEntityResolver<TaxRateFragment> {\r\n constructor(router: Router, dataService: DataService) {\r\n super(\r\n router,\r\n {\r\n __typename: 'TaxRate',\r\n id: '',\r\n createdAt: '',\r\n updatedAt: '',\r\n name: '',\r\n value: 0,\r\n enabled: true,\r\n category: {} as any,\r\n zone: {} as any,\r\n customerGroup: null,\r\n },\r\n id => dataService.settings.getTaxRate(id).mapStream(data => data.taxRate),\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 {\r\n Administrator,\r\n CanDeactivateDetailGuard,\r\n Channel,\r\n CountryFragment,\r\n createResolveData,\r\n detailBreadcrumb,\r\n PaymentMethodFragment,\r\n Role,\r\n ShippingMethodFragment,\r\n TaxCategoryFragment,\r\n TaxRateFragment,\r\n} from '@vendure/admin-ui/core';\r\n\r\nimport { AdminDetailComponent } from './components/admin-detail/admin-detail.component';\r\nimport { AdministratorListComponent } from './components/administrator-list/administrator-list.component';\r\nimport { ChannelDetailComponent } from './components/channel-detail/channel-detail.component';\r\nimport { ChannelListComponent } from './components/channel-list/channel-list.component';\r\nimport { CountryDetailComponent } from './components/country-detail/country-detail.component';\r\nimport { CountryListComponent } from './components/country-list/country-list.component';\r\nimport { GlobalSettingsComponent } from './components/global-settings/global-settings.component';\r\nimport { PaymentMethodDetailComponent } from './components/payment-method-detail/payment-method-detail.component';\r\nimport { PaymentMethodListComponent } from './components/payment-method-list/payment-method-list.component';\r\nimport { ProfileComponent } from './components/profile/profile.component';\r\nimport { RoleDetailComponent } from './components/role-detail/role-detail.component';\r\nimport { RoleListComponent } from './components/role-list/role-list.component';\r\nimport { ShippingMethodDetailComponent } from './components/shipping-method-detail/shipping-method-detail.component';\r\nimport { ShippingMethodListComponent } from './components/shipping-method-list/shipping-method-list.component';\r\nimport { TaxCategoryDetailComponent } from './components/tax-category-detail/tax-category-detail.component';\r\nimport { TaxCategoryListComponent } from './components/tax-category-list/tax-category-list.component';\r\nimport { TaxRateDetailComponent } from './components/tax-rate-detail/tax-rate-detail.component';\r\nimport { TaxRateListComponent } from './components/tax-rate-list/tax-rate-list.component';\r\nimport { ZoneListComponent } from './components/zone-list/zone-list.component';\r\nimport { AdministratorResolver } from './providers/routing/administrator-resolver';\r\nimport { ChannelResolver } from './providers/routing/channel-resolver';\r\nimport { CountryResolver } from './providers/routing/country-resolver';\r\nimport { GlobalSettingsResolver } from './providers/routing/global-settings-resolver';\r\nimport { PaymentMethodResolver } from './providers/routing/payment-method-resolver';\r\nimport { ProfileResolver } from './providers/routing/profile-resolver';\r\nimport { RoleResolver } from './providers/routing/role-resolver';\r\nimport { ShippingMethodResolver } from './providers/routing/shipping-method-resolver';\r\nimport { TaxCategoryResolver } from './providers/routing/tax-category-resolver';\r\nimport { TaxRateResolver } from './providers/routing/tax-rate-resolver';\r\n\r\nexport const settingsRoutes: Route[] = [\r\n {\r\n path: 'profile',\r\n component: ProfileComponent,\r\n resolve: createResolveData(ProfileResolver),\r\n canDeactivate: [CanDeactivateDetailGuard],\r\n data: {\r\n breadcrumb: _('breadcrumb.profile'),\r\n },\r\n },\r\n {\r\n path: 'administrators',\r\n component: AdministratorListComponent,\r\n data: {\r\n breadcrumb: _('breadcrumb.administrators'),\r\n },\r\n },\r\n {\r\n path: 'administrators/:id',\r\n component: AdminDetailComponent,\r\n resolve: createResolveData(AdministratorResolver),\r\n canDeactivate: [CanDeactivateDetailGuard],\r\n data: { breadcrumb: administratorBreadcrumb },\r\n },\r\n {\r\n path: 'channels',\r\n component: ChannelListComponent,\r\n data: {\r\n breadcrumb: _('breadcrumb.channels'),\r\n },\r\n },\r\n {\r\n path: 'channels/:id',\r\n component: ChannelDetailComponent,\r\n resolve: createResolveData(ChannelResolver),\r\n canDeactivate: [CanDeactivateDetailGuard],\r\n data: { breadcrumb: channelBreadcrumb },\r\n },\r\n {\r\n path: 'roles',\r\n component: RoleListComponent,\r\n data: {\r\n breadcrumb: _('breadcrumb.roles'),\r\n },\r\n },\r\n {\r\n path: 'roles/:id',\r\n component: RoleDetailComponent,\r\n resolve: createResolveData(RoleResolver),\r\n canDeactivate: [CanDeactivateDetailGuard],\r\n data: { breadcrumb: roleBreadcrumb },\r\n },\r\n {\r\n path: 'tax-categories',\r\n component: TaxCategoryListComponent,\r\n data: {\r\n breadcrumb: _('breadcrumb.tax-categories'),\r\n },\r\n },\r\n {\r\n path: 'tax-categories/:id',\r\n component: TaxCategoryDetailComponent,\r\n resolve: createResolveData(TaxCategoryResolver),\r\n canDeactivate: [CanDeactivateDetailGuard],\r\n data: {\r\n breadcrumb: taxCategoryBreadcrumb,\r\n },\r\n },\r\n {\r\n path: 'tax-rates',\r\n component: TaxRateListComponent,\r\n data: {\r\n breadcrumb: _('breadcrumb.tax-rates'),\r\n },\r\n },\r\n {\r\n path: 'tax-rates/:id',\r\n component: TaxRateDetailComponent,\r\n resolve: createResolveData(TaxRateResolver),\r\n canDeactivate: [CanDeactivateDetailGuard],\r\n data: {\r\n breadcrumb: taxRateBreadcrumb,\r\n },\r\n },\r\n {\r\n path: 'countries',\r\n component: CountryListComponent,\r\n data: {\r\n breadcrumb: _('breadcrumb.countries'),\r\n },\r\n },\r\n {\r\n path: 'countries/:id',\r\n component: CountryDetailComponent,\r\n resolve: createResolveData(CountryResolver),\r\n canDeactivate: [CanDeactivateDetailGuard],\r\n data: {\r\n breadcrumb: countryBreadcrumb,\r\n },\r\n },\r\n {\r\n path: 'zones',\r\n component: ZoneListComponent,\r\n data: {\r\n breadcrumb: _('breadcrumb.zones'),\r\n },\r\n },\r\n {\r\n path: 'shipping-methods',\r\n component: ShippingMethodListComponent,\r\n data: {\r\n breadcrumb: _('breadcrumb.shipping-methods'),\r\n },\r\n },\r\n {\r\n path: 'shipping-methods/:id',\r\n component: ShippingMethodDetailComponent,\r\n resolve: createResolveData(ShippingMethodResolver),\r\n canDeactivate: [CanDeactivateDetailGuard],\r\n data: {\r\n breadcrumb: shippingMethodBreadcrumb,\r\n },\r\n },\r\n {\r\n path: 'payment-methods',\r\n component: PaymentMethodListComponent,\r\n data: {\r\n breadcrumb: _('breadcrumb.payment-methods'),\r\n },\r\n },\r\n {\r\n path: 'payment-methods/:id',\r\n component: PaymentMethodDetailComponent,\r\n resolve: createResolveData(PaymentMethodResolver),\r\n canDeactivate: [CanDeactivateDetailGuard],\r\n data: {\r\n breadcrumb: paymentMethodBreadcrumb,\r\n },\r\n },\r\n {\r\n path: 'global-settings',\r\n component: GlobalSettingsComponent,\r\n resolve: createResolveData(GlobalSettingsResolver),\r\n canDeactivate: [CanDeactivateDetailGuard],\r\n data: {\r\n breadcrumb: _('breadcrumb.global-settings'),\r\n },\r\n },\r\n];\r\n\r\nexport function administratorBreadcrumb(data: any, params: any) {\r\n return detailBreadcrumb<Administrator>({\r\n entity: data.entity,\r\n id: params.id,\r\n breadcrumbKey: 'breadcrumb.administrators',\r\n getName: admin => `${admin.firstName} ${admin.lastName}`,\r\n route: 'administrators',\r\n });\r\n}\r\n\r\nexport function channelBreadcrumb(data: any, params: any) {\r\n return detailBreadcrumb<Channel>({\r\n entity: data.entity,\r\n id: params.id,\r\n breadcrumbKey: 'breadcrumb.channels',\r\n getName: channel => channel.code,\r\n route: 'channels',\r\n });\r\n}\r\n\r\nexport function roleBreadcrumb(data: any, params: any) {\r\n return detailBreadcrumb<Role>({\r\n entity: data.entity,\r\n id: params.id,\r\n breadcrumbKey: 'breadcrumb.roles',\r\n getName: role => role.description,\r\n route: 'roles',\r\n });\r\n}\r\n\r\nexport function taxCategoryBreadcrumb(data: any, params: any) {\r\n return detailBreadcrumb<TaxCategoryFragment>({\r\n entity: data.entity,\r\n id: params.id,\r\n breadcrumbKey: 'breadcrumb.tax-categories',\r\n getName: category => category.name,\r\n route: 'tax-categories',\r\n });\r\n}\r\n\r\nexport function taxRateBreadcrumb(data: any, params: any) {\r\n return detailBreadcrumb<TaxRateFragment>({\r\n entity: data.entity,\r\n id: params.id,\r\n breadcrumbKey: 'breadcrumb.tax-rates',\r\n getName: category => category.name,\r\n route: 'tax-rates',\r\n });\r\n}\r\n\r\nexport function countryBreadcrumb(data: any, params: any) {\r\n return detailBreadcrumb<CountryFragment>({\r\n entity: data.entity,\r\n id: params.id,\r\n breadcrumbKey: 'breadcrumb.countries',\r\n getName: promotion => promotion.name,\r\n route: 'countries',\r\n });\r\n}\r\n\r\nexport function shippingMethodBreadcrumb(data: any, params: any) {\r\n return detailBreadcrumb<ShippingMethodFragment>({\r\n entity: data.entity,\r\n id: params.id,\r\n breadcrumbKey: 'breadcrumb.shipping-methods',\r\n getName: method => method.name,\r\n route: 'shipping-methods',\r\n });\r\n}\r\n\r\nexport function paymentMethodBreadcrumb(data: any, params: any) {\r\n return detailBreadcrumb<PaymentMethodFragment>({\r\n entity: data.entity,\r\n id: params.id,\r\n breadcrumbKey: 'breadcrumb.payment-methods',\r\n getName: method => method.code,\r\n route: 'payment-methods',\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 { AddCountryToZoneDialogComponent } from './components/add-country-to-zone-dialog/add-country-to-zone-dialog.component';\r\nimport { AdminDetailComponent } from './components/admin-detail/admin-detail.component';\r\nimport { AdministratorListComponent } from './components/administrator-list/administrator-list.component';\r\nimport { ChannelDetailComponent } from './components/channel-detail/channel-detail.component';\r\nimport { ChannelListComponent } from './components/channel-list/channel-list.component';\r\nimport { CountryDetailComponent } from './components/country-detail/country-detail.component';\r\nimport { CountryListComponent } from './components/country-list/country-list.component';\r\nimport { GlobalSettingsComponent } from './components/global-settings/global-settings.component';\r\nimport { PaymentMethodDetailComponent } from './components/payment-method-detail/payment-method-detail.component';\r\nimport { PaymentMethodListComponent } from './components/payment-method-list/payment-method-list.component';\r\nimport { PermissionGridComponent } from './components/permission-grid/permission-grid.component';\r\nimport { ProfileComponent } from './components/profile/profile.component';\r\nimport { RoleDetailComponent } from './components/role-detail/role-detail.component';\r\nimport { RoleListComponent } from './components/role-list/role-list.component';\r\nimport { ShippingEligibilityTestResultComponent } from './components/shipping-eligibility-test-result/shipping-eligibility-test-result.component';\r\nimport { ShippingMethodDetailComponent } from './components/shipping-method-detail/shipping-method-detail.component';\r\nimport { ShippingMethodListComponent } from './components/shipping-method-list/shipping-method-list.component';\r\nimport { ShippingMethodTestResultComponent } from './components/shipping-method-test-result/shipping-method-test-result.component';\r\nimport { TaxCategoryDetailComponent } from './components/tax-category-detail/tax-category-detail.component';\r\nimport { TaxCategoryListComponent } from './components/tax-category-list/tax-category-list.component';\r\nimport { TaxRateDetailComponent } from './components/tax-rate-detail/tax-rate-detail.component';\r\nimport { TaxRateListComponent } from './components/tax-rate-list/tax-rate-list.component';\r\nimport { TestAddressFormComponent } from './components/test-address-form/test-address-form.component';\r\nimport { TestOrderBuilderComponent } from './components/test-order-builder/test-order-builder.component';\r\nimport { ZoneDetailDialogComponent } from './components/zone-detail-dialog/zone-detail-dialog.component';\r\nimport { ZoneListComponent } from './components/zone-list/zone-list.component';\r\nimport { ZoneMemberControlsDirective } from './components/zone-member-list/zone-member-controls.directive';\r\nimport { ZoneMemberListHeaderDirective } from './components/zone-member-list/zone-member-list-header.directive';\r\nimport { ZoneMemberListComponent } from './components/zone-member-list/zone-member-list.component';\r\nimport { settingsRoutes } from './settings.routes';\r\n\r\n@NgModule({\r\n imports: [SharedModule, RouterModule.forChild(settingsRoutes)],\r\n declarations: [\r\n TaxCategoryListComponent,\r\n TaxCategoryDetailComponent,\r\n AdministratorListComponent,\r\n RoleListComponent,\r\n RoleDetailComponent,\r\n AdminDetailComponent,\r\n PermissionGridComponent,\r\n CountryListComponent,\r\n CountryDetailComponent,\r\n TaxRateListComponent,\r\n TaxRateDetailComponent,\r\n ChannelListComponent,\r\n ChannelDetailComponent,\r\n ShippingMethodListComponent,\r\n ShippingMethodDetailComponent,\r\n PaymentMethodListComponent,\r\n PaymentMethodDetailComponent,\r\n GlobalSettingsComponent,\r\n TestOrderBuilderComponent,\r\n TestAddressFormComponent,\r\n ShippingMethodTestResultComponent,\r\n ShippingEligibilityTestResultComponent,\r\n ZoneListComponent,\r\n AddCountryToZoneDialogComponent,\r\n ZoneMemberListComponent,\r\n ZoneMemberListHeaderDirective,\r\n ZoneMemberControlsDirective,\r\n ZoneDetailDialogComponent,\r\n ProfileComponent,\r\n ],\r\n})\r\nexport class SettingsModule {}\r\n","// This file was generated by the build-public-api.ts script\nexport * from './components/add-country-to-zone-dialog/add-country-to-zone-dialog.component';\nexport * from './components/admin-detail/admin-detail.component';\nexport * from './components/administrator-list/administrator-list.component';\nexport * from './components/channel-detail/channel-detail.component';\nexport * from './components/channel-list/channel-list.component';\nexport * from './components/country-detail/country-detail.component';\nexport * from './components/country-list/country-list.component';\nexport * from './components/global-settings/global-settings.component';\nexport * from './components/payment-method-detail/payment-method-detail.component';\nexport * from './components/payment-method-list/payment-method-list.component';\nexport * from './components/permission-grid/permission-grid.component';\nexport * from './components/profile/profile.component';\nexport * from './components/role-detail/role-detail.component';\nexport * from './components/role-list/role-list.component';\nexport * from './components/shipping-eligibility-test-result/shipping-eligibility-test-result.component';\nexport * from './components/shipping-method-detail/shipping-method-detail.component';\nexport * from './components/shipping-method-list/shipping-method-list.component';\nexport * from './components/shipping-method-test-result/shipping-method-test-result.component';\nexport * from './components/tax-category-detail/tax-category-detail.component';\nexport * from './components/tax-category-list/tax-category-list.component';\nexport * from './components/tax-rate-detail/tax-rate-detail.component';\nexport * from './components/tax-rate-list/tax-rate-list.component';\nexport * from './components/test-address-form/test-address-form.component';\nexport * from './components/test-order-builder/test-order-builder.component';\nexport * from './components/zone-detail-dialog/zone-detail-dialog.component';\nexport * from './components/zone-list/zone-list.component';\nexport * from './components/zone-member-list/zone-member-controls.directive';\nexport * from './components/zone-member-list/zone-member-list-header.directive';\nexport * from './components/zone-member-list/zone-member-list.component';\nexport * from './providers/routing/administrator-resolver';\nexport * from './providers/routing/channel-resolver';\nexport * from './providers/routing/country-resolver';\nexport * from './providers/routing/global-settings-resolver';\nexport * from './providers/routing/payment-method-resolver';\nexport * from './providers/routing/profile-resolver';\nexport * from './providers/routing/role-resolver';\nexport * from './providers/routing/shipping-method-resolver';\nexport * from './providers/routing/tax-category-resolver';\nexport * from './providers/routing/tax-rate-resolver';\nexport * from './settings.module';\nexport * from './settings.routes';\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-settings.mjs","sources":["../../src/lib/settings/src/components/zone-member-list/zone-member-controls.directive.ts","../../src/lib/settings/src/components/zone-member-list/zone-member-list-header.directive.ts","../../src/lib/settings/src/components/zone-member-list/zone-member-list.component.ts","../../src/lib/settings/src/components/zone-member-list/zone-member-list.component.html","../../src/lib/settings/src/components/add-country-to-zone-dialog/add-country-to-zone-dialog.component.ts","../../src/lib/settings/src/components/add-country-to-zone-dialog/add-country-to-zone-dialog.component.html","../../src/lib/settings/src/components/permission-grid/permission-grid.component.ts","../../src/lib/settings/src/components/permission-grid/permission-grid.component.html","../../src/lib/settings/src/components/admin-detail/admin-detail.component.ts","../../src/lib/settings/src/components/admin-detail/admin-detail.component.html","../../src/lib/settings/src/components/administrator-list/administrator-list.component.ts","../../src/lib/settings/src/components/administrator-list/administrator-list.component.html","../../src/lib/settings/src/components/channel-detail/channel-detail.component.ts","../../src/lib/settings/src/components/channel-detail/channel-detail.component.html","../../src/lib/settings/src/components/channel-list/channel-list.component.ts","../../src/lib/settings/src/components/channel-list/channel-list.component.html","../../src/lib/settings/src/components/country-detail/country-detail.component.ts","../../src/lib/settings/src/components/country-detail/country-detail.component.html","../../src/lib/settings/src/components/country-list/country-list.component.ts","../../src/lib/settings/src/components/country-list/country-list.component.html","../../src/lib/settings/src/components/global-settings/global-settings.component.ts","../../src/lib/settings/src/components/global-settings/global-settings.component.html","../../src/lib/settings/src/components/payment-method-detail/payment-method-detail.component.ts","../../src/lib/settings/src/components/payment-method-detail/payment-method-detail.component.html","../../src/lib/settings/src/components/payment-method-list/payment-method-list.component.ts","../../src/lib/settings/src/components/payment-method-list/payment-method-list.component.html","../../src/lib/settings/src/components/profile/profile.component.ts","../../src/lib/settings/src/components/profile/profile.component.html","../../src/lib/settings/src/components/role-detail/role-detail.component.ts","../../src/lib/settings/src/components/role-detail/role-detail.component.html","../../src/lib/settings/src/components/role-list/role-list.component.ts","../../src/lib/settings/src/components/role-list/role-list.component.html","../../src/lib/settings/src/components/shipping-eligibility-test-result/shipping-eligibility-test-result.component.ts","../../src/lib/settings/src/components/shipping-eligibility-test-result/shipping-eligibility-test-result.component.html","../../src/lib/settings/src/components/test-order-builder/test-order-builder.component.ts","../../src/lib/settings/src/components/test-order-builder/test-order-builder.component.html","../../src/lib/settings/src/components/test-address-form/test-address-form.component.ts","../../src/lib/settings/src/components/test-address-form/test-address-form.component.html","../../src/lib/settings/src/components/shipping-method-test-result/shipping-method-test-result.component.ts","../../src/lib/settings/src/components/shipping-method-test-result/shipping-method-test-result.component.html","../../src/lib/settings/src/components/shipping-method-detail/shipping-method-detail.component.ts","../../src/lib/settings/src/components/shipping-method-detail/shipping-method-detail.component.html","../../src/lib/settings/src/components/shipping-method-list/shipping-method-list.component.ts","../../src/lib/settings/src/components/shipping-method-list/shipping-method-list.component.html","../../src/lib/settings/src/components/tax-category-detail/tax-category-detail.component.ts","../../src/lib/settings/src/components/tax-category-detail/tax-category-detail.component.html","../../src/lib/settings/src/components/tax-category-list/tax-category-list.component.ts","../../src/lib/settings/src/components/tax-category-list/tax-category-list.component.html","../../src/lib/settings/src/components/tax-rate-detail/tax-rate-detail.component.ts","../../src/lib/settings/src/components/tax-rate-detail/tax-rate-detail.component.html","../../src/lib/settings/src/components/tax-rate-list/tax-rate-list.component.ts","../../src/lib/settings/src/components/tax-rate-list/tax-rate-list.component.html","../../src/lib/settings/src/components/zone-detail-dialog/zone-detail-dialog.component.ts","../../src/lib/settings/src/components/zone-detail-dialog/zone-detail-dialog.component.html","../../src/lib/settings/src/components/zone-list/zone-list.component.ts","../../src/lib/settings/src/components/zone-list/zone-list.component.html","../../src/lib/settings/src/providers/routing/administrator-resolver.ts","../../src/lib/settings/src/providers/routing/channel-resolver.ts","../../src/lib/settings/src/providers/routing/country-resolver.ts","../../src/lib/settings/src/providers/routing/global-settings-resolver.ts","../../src/lib/settings/src/providers/routing/payment-method-resolver.ts","../../src/lib/settings/src/providers/routing/profile-resolver.ts","../../src/lib/settings/src/providers/routing/role-resolver.ts","../../src/lib/settings/src/providers/routing/shipping-method-resolver.ts","../../src/lib/settings/src/providers/routing/tax-category-resolver.ts","../../src/lib/settings/src/providers/routing/tax-rate-resolver.ts","../../src/lib/settings/src/settings.routes.ts","../../src/lib/settings/src/settings.module.ts","../../src/lib/settings/src/public_api.ts","../../src/lib/settings/src/vendure-admin-ui-settings.ts"],"sourcesContent":["import { Directive, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[vdrZoneMemberControls]',\r\n})\r\nexport class ZoneMemberControlsDirective {\r\n constructor(public templateRef: TemplateRef<any>) {}\r\n}\r\n","import { Directive, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[vdrZoneMemberListHeader]',\r\n})\r\nexport class ZoneMemberListHeaderDirective {\r\n constructor(public templateRef: TemplateRef<any>) {}\r\n}\r\n","import { ChangeDetectionStrategy, Component, ContentChild, EventEmitter, Input, Output } from '@angular/core';\r\n\r\nimport { ZoneMemberControlsDirective } from './zone-member-controls.directive';\r\nimport { ZoneMemberListHeaderDirective } from './zone-member-list-header.directive';\r\n\r\nexport type ZoneMember = { id: string; name: string; code: string };\r\n\r\n@Component({\r\n selector: 'vdr-zone-member-list',\r\n templateUrl: './zone-member-list.component.html',\r\n styleUrls: ['./zone-member-list.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ZoneMemberListComponent {\r\n @Input() members: ZoneMember[] = [];\r\n @Input() selectedMemberIds: string[] = [];\r\n @Output() selectionChange = new EventEmitter<string[]>();\r\n @ContentChild(ZoneMemberListHeaderDirective) headerTemplate: ZoneMemberListHeaderDirective;\r\n @ContentChild(ZoneMemberControlsDirective) controlsTemplate: ZoneMemberControlsDirective;\r\n filterTerm = '';\r\n\r\n filteredMembers(): ZoneMember[] {\r\n if (this.filterTerm !== '') {\r\n const term = this.filterTerm.toLocaleLowerCase();\r\n return this.members.filter(\r\n m => m.name.toLocaleLowerCase().includes(term) || m.code.toLocaleLowerCase().includes(term),\r\n );\r\n } else {\r\n return this.members;\r\n }\r\n }\r\n\r\n areAllSelected(): boolean {\r\n if (this.members) {\r\n return this.selectedMemberIds.length === this.members.length;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n toggleSelectAll() {\r\n if (this.areAllSelected()) {\r\n this.selectionChange.emit([]);\r\n } else {\r\n this.selectionChange.emit(this.members.map(v => v.id));\r\n }\r\n }\r\n\r\n toggleSelectMember({ item: member }: { item: ZoneMember }) {\r\n if (this.selectedMemberIds.includes(member.id)) {\r\n this.selectionChange.emit(this.selectedMemberIds.filter(id => id !== member.id));\r\n } else {\r\n this.selectionChange.emit([...this.selectedMemberIds, member.id]);\r\n }\r\n }\r\n\r\n isMemberSelected = (member: ZoneMember): boolean => {\r\n return -1 < this.selectedMemberIds.indexOf(member.id);\r\n };\r\n}\r\n","<div class=\"members-header\">\r\n <ng-container *ngIf=\"headerTemplate\">\r\n <ng-container *ngTemplateOutlet=\"headerTemplate.templateRef\"></ng-container>\r\n </ng-container>\r\n <input\r\n type=\"text\"\r\n [placeholder]=\"'settings.filter-by-member-name' | translate\"\r\n [(ngModel)]=\"filterTerm\"\r\n />\r\n</div>\r\n<vdr-data-table\r\n [items]=\"filteredMembers()\"\r\n [allSelected]=\"areAllSelected()\"\r\n [isRowSelectedFn]=\"(['UpdateSettings', 'UpdateZone'] | hasPermission) && isMemberSelected\"\r\n (rowSelectChange)=\"toggleSelectMember($event)\"\r\n (allSelectChange)=\"toggleSelectAll()\"\r\n>\r\n <vdr-dt-column>{{ 'common.code' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'common.name' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'common.enabled' | translate }}</vdr-dt-column>\r\n <vdr-dt-column></vdr-dt-column>\r\n <ng-template let-member=\"item\">\r\n <td class=\"left align-middle\">{{ member.code }}</td>\r\n <td class=\"left align-middle\">{{ member.name }}</td>\r\n <td class=\"left align-middle\">\r\n <clr-icon\r\n [class.is-success]=\"member.enabled\"\r\n [attr.shape]=\"member.enabled ? 'check' : 'times'\"\r\n ></clr-icon>\r\n </td>\r\n <td class=\"right align-middle\">\r\n <ng-container *ngIf=\"controlsTemplate\">\r\n <ng-container\r\n *ngTemplateOutlet=\"controlsTemplate.templateRef; context: { member: member }\"\r\n ></ng-container>\r\n </ng-container>\r\n </td>\r\n </ng-template>\r\n</vdr-data-table>\r\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\r\nimport { DataService, Dialog, GetCountryListQuery, GetZonesQuery, ItemOf } from '@vendure/admin-ui/core';\r\nimport { Observable } from 'rxjs';\r\nimport { filter, map } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'vdr-add-country-to-zone-dialog',\r\n templateUrl: './add-country-to-zone-dialog.component.html',\r\n styleUrls: ['./add-country-to-zone-dialog.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class AddCountryToZoneDialogComponent implements Dialog<string[]>, OnInit {\r\n resolveWith: (result?: string[]) => void;\r\n zoneName: string;\r\n currentMembers: GetZonesQuery['zones'][number]['members'] = [];\r\n availableCountries$: Observable<Array<ItemOf<GetCountryListQuery, 'countries'>>>;\r\n selectedMemberIds: string[] = [];\r\n\r\n constructor(private dataService: DataService) {}\r\n\r\n ngOnInit(): void {\r\n const currentMemberIds = this.currentMembers.map(m => m.id);\r\n this.availableCountries$ = this.dataService.settings\r\n .getCountries(999)\r\n .mapStream(data => data.countries.items)\r\n .pipe(map(countries => countries.filter(c => !currentMemberIds.includes(c.id))));\r\n }\r\n\r\n cancel() {\r\n this.resolveWith();\r\n }\r\n\r\n add() {\r\n this.resolveWith(this.selectedMemberIds);\r\n }\r\n}\r\n","<ng-template vdrDialogTitle>{{ 'settings.add-countries-to-zone' | translate: { zoneName: zoneName } }}</ng-template>\r\n\r\n<vdr-zone-member-list\r\n [members]=\"availableCountries$ | async\"\r\n [selectedMemberIds]=\"selectedMemberIds\"\r\n (selectionChange)=\"selectedMemberIds = $event\"\r\n>\r\n</vdr-zone-member-list>\r\n\r\n<ng-template vdrDialogButtons>\r\n <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\r\n <button type=\"submit\" (click)=\"add()\" [disabled]=\"!selectedMemberIds.length\" class=\"btn btn-primary\">\r\n {{ 'settings.add-countries-to-zone' | translate: { zoneName: zoneName } }}\r\n </button>\r\n</ng-template>\r\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport { PermissionDefinition } from '@vendure/admin-ui/core';\n\nexport interface PermissionGridRow {\n label: string;\n description: string;\n permissions: PermissionDefinition[];\n}\n\n/**\n * A table showing and allowing the setting of all possible CRUD permissions.\n */\n@Component({\n selector: 'vdr-permission-grid',\n templateUrl: './permission-grid.component.html',\n styleUrls: ['./permission-grid.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PermissionGridComponent implements OnInit {\n @Input() permissionDefinitions: PermissionDefinition[];\n @Input() activePermissions: string[];\n @Input() readonly = false;\n @Output() permissionChange = new EventEmitter<{ permission: string; value: boolean }>();\n gridData: PermissionGridRow[];\n\n ngOnInit() {\n this.buildGrid();\n }\n\n setPermission(permission: string, value: boolean) {\n if (!this.readonly) {\n this.permissionChange.emit({ permission, value });\n }\n }\n\n toggleAll(defs: PermissionDefinition[]) {\n const value = defs.some(d => !this.activePermissions.includes(d.name));\n for (const def of defs) {\n this.permissionChange.emit({ permission: def.name, value });\n }\n }\n\n private buildGrid() {\n const crudGroups = new Map<string, PermissionDefinition[]>();\n const nonCrud: PermissionDefinition[] = [];\n const crudRe = /^(Create|Read|Update|Delete)([a-zA-Z]+)$/;\n for (const def of this.permissionDefinitions) {\n const isCrud = crudRe.test(def.name);\n if (isCrud) {\n const groupName = def.name.match(crudRe)?.[2];\n if (groupName) {\n const existing = crudGroups.get(groupName);\n if (existing) {\n existing.push(def);\n } else {\n crudGroups.set(groupName, [def]);\n }\n }\n } else if (def.assignable) {\n nonCrud.push(def);\n }\n }\n this.gridData = [\n ...nonCrud.map(d => ({\n label: d.name,\n description: d.description,\n permissions: [d],\n })),\n ...Array.from(crudGroups.entries()).map(([label, defs]) => {\n return {\n label,\n description: this.extractCrudDescription(defs[0]),\n permissions: defs,\n };\n }),\n ];\n }\n\n private extractCrudDescription(def: PermissionDefinition): string {\n return def.description.replace(/Grants permission to [\\w]+/, 'Grants permissions on');\n }\n}\n","<table class=\"table\">\r\n <tbody>\r\n <tr *ngFor=\"let section of gridData\">\r\n <td class=\"permission-group left\">\r\n <div><strong>{{ section.label | translate }}</strong></div>\r\n <small>{{ section.description | translate }}</small><br>\r\n <button *ngIf=\"1 < section.permissions.length && !readonly\" class=\"btn btn-sm btn-link\" (click)=\"toggleAll(section.permissions)\">\r\n {{ 'common.toggle-all' | translate }}\r\n </button>\r\n </td>\r\n <td *ngFor=\"let permission of section.permissions\" [attr.colspan]=\"section.permissions.length === 1 ? 4 : 1\">\r\n <vdr-select-toggle\r\n size=\"small\"\r\n [title]=\"permission.description\"\r\n [label]=\"permission.name\"\r\n [disabled]=\"readonly\"\r\n [selected]=\"activePermissions?.includes(permission.name)\"\r\n (selectedChange)=\"setPermission(permission.name, $event)\"\r\n ></vdr-select-toggle>\r\n </td>\r\n </tr>\r\n </tbody>\r\n</table>\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { 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 Administrator,\r\n AdministratorFragment,\r\n BaseDetailComponent,\r\n CreateAdministratorInput,\r\n CustomFieldConfig,\r\n DataService,\r\n LanguageCode,\r\n NotificationService,\r\n Permission,\r\n PermissionDefinition,\r\n RoleFragment,\r\n ServerConfigService,\r\n UpdateAdministratorInput,\r\n} from '@vendure/admin-ui/core';\r\nimport { CUSTOMER_ROLE_CODE } from '@vendure/common/lib/shared-constants';\r\nimport { Observable } from 'rxjs';\r\nimport { mergeMap, take } from 'rxjs/operators';\r\n\r\nexport interface PermissionsByChannel {\r\n channelId: string;\r\n channelCode: string;\r\n permissions: { [K in Permission]: boolean };\r\n}\r\n\r\n@Component({\r\n selector: 'vdr-admin-detail',\r\n templateUrl: './admin-detail.component.html',\r\n styleUrls: ['./admin-detail.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class AdminDetailComponent\r\n extends BaseDetailComponent<AdministratorFragment>\r\n implements OnInit, OnDestroy\r\n{\r\n customFields: CustomFieldConfig[];\r\n administrator$: Observable<AdministratorFragment>;\r\n permissionDefinitions: PermissionDefinition[];\r\n allRoles$: Observable<RoleFragment[]>;\r\n selectedRoles: RoleFragment[] = [];\r\n detailForm: FormGroup;\r\n selectedRolePermissions: { [channelId: string]: PermissionsByChannel } = {} as any;\r\n selectedChannelId: string | null = null;\r\n\r\n getAvailableChannels(): PermissionsByChannel[] {\r\n return Object.values(this.selectedRolePermissions);\r\n }\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('Administrator');\r\n this.detailForm = this.formBuilder.group({\r\n emailAddress: ['', Validators.required],\r\n firstName: ['', Validators.required],\r\n lastName: ['', Validators.required],\r\n password: [''],\r\n roles: [[]],\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.administrator$ = this.entity$;\r\n this.allRoles$ = this.dataService.administrator\r\n .getRoles(999)\r\n .mapStream(item => item.roles.items.filter(i => i.code !== CUSTOMER_ROLE_CODE));\r\n this.dataService.client.userStatus().single$.subscribe(({ userStatus }) => {\r\n if (!userStatus.permissions.includes(Permission.UpdateAdministrator)) {\r\n const rolesSelect = this.detailForm.get('roles');\r\n if (rolesSelect) {\r\n rolesSelect.disable();\r\n }\r\n }\r\n });\r\n this.permissionDefinitions = this.serverConfigService.getPermissionDefinitions();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy();\r\n }\r\n\r\n rolesChanged(roles: RoleFragment[]) {\r\n this.buildPermissionsMap();\r\n }\r\n\r\n getPermissionsForSelectedChannel(): string[] {\r\n function getActivePermissions(input: PermissionsByChannel['permissions']): string[] {\r\n return Object.entries(input)\r\n .filter(([permission, active]) => active)\r\n .map(([permission, active]) => permission);\r\n }\r\n if (this.selectedChannelId) {\r\n const selectedChannel = this.selectedRolePermissions[this.selectedChannelId];\r\n if (selectedChannel) {\r\n const permissionMap = this.selectedRolePermissions[this.selectedChannelId].permissions;\r\n return getActivePermissions(permissionMap);\r\n }\r\n }\r\n const channels = Object.values(this.selectedRolePermissions);\r\n if (0 < channels.length) {\r\n this.selectedChannelId = channels[0].channelId;\r\n return getActivePermissions(channels[0].permissions);\r\n }\r\n return [];\r\n }\r\n\r\n create() {\r\n const formValue = this.detailForm.value;\r\n const administrator: CreateAdministratorInput = {\r\n emailAddress: formValue.emailAddress,\r\n firstName: formValue.firstName,\r\n lastName: formValue.lastName,\r\n password: formValue.password,\r\n customFields: formValue.customFields,\r\n roleIds: formValue.roles.map(role => role.id),\r\n };\r\n this.dataService.administrator.createAdministrator(administrator).subscribe(\r\n data => {\r\n this.notificationService.success(_('common.notify-create-success'), {\r\n entity: 'Administrator',\r\n });\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n this.router.navigate(['../', data.createAdministrator.id], { relativeTo: this.route });\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-create-error'), {\r\n entity: 'Administrator',\r\n });\r\n },\r\n );\r\n }\r\n\r\n save() {\r\n this.administrator$\r\n .pipe(\r\n take(1),\r\n mergeMap(({ id }) => {\r\n const formValue = this.detailForm.value;\r\n const administrator: UpdateAdministratorInput = {\r\n id,\r\n emailAddress: formValue.emailAddress,\r\n firstName: formValue.firstName,\r\n lastName: formValue.lastName,\r\n password: formValue.password,\r\n customFields: formValue.customFields,\r\n roleIds: formValue.roles.map(role => role.id),\r\n };\r\n return this.dataService.administrator.updateAdministrator(administrator);\r\n }),\r\n )\r\n .subscribe(\r\n data => {\r\n this.notificationService.success(_('common.notify-update-success'), {\r\n entity: 'Administrator',\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: 'Administrator',\r\n });\r\n },\r\n );\r\n }\r\n\r\n protected setFormValues(administrator: Administrator, languageCode: LanguageCode): void {\r\n this.detailForm.patchValue({\r\n emailAddress: administrator.emailAddress,\r\n firstName: administrator.firstName,\r\n lastName: administrator.lastName,\r\n roles: administrator.user.roles,\r\n });\r\n if (this.customFields.length) {\r\n this.setCustomFieldFormValues(\r\n this.customFields,\r\n this.detailForm.get(['customFields']),\r\n administrator,\r\n );\r\n }\r\n const passwordControl = this.detailForm.get('password');\r\n if (passwordControl) {\r\n if (!administrator.id) {\r\n passwordControl.setValidators([Validators.required]);\r\n } else {\r\n passwordControl.setValidators([]);\r\n }\r\n }\r\n this.buildPermissionsMap();\r\n }\r\n\r\n private buildPermissionsMap() {\r\n const permissionsControl = this.detailForm.get('roles');\r\n if (permissionsControl) {\r\n const roles: RoleFragment[] = permissionsControl.value;\r\n const channelIdPermissionsMap = new Map<string, Set<Permission>>();\r\n const channelIdCodeMap = new Map<string, string>();\r\n\r\n for (const role of roles) {\r\n for (const channel of role.channels) {\r\n const channelPermissions = channelIdPermissionsMap.get(channel.id);\r\n const permissionSet = channelPermissions || new Set<Permission>();\r\n\r\n role.permissions.forEach(p => permissionSet.add(p));\r\n channelIdPermissionsMap.set(channel.id, permissionSet);\r\n channelIdCodeMap.set(channel.id, channel.code);\r\n }\r\n }\r\n\r\n this.selectedRolePermissions = {} as any;\r\n for (const channelId of Array.from(channelIdPermissionsMap.keys())) {\r\n // tslint:disable-next-line:no-non-null-assertion\r\n const permissionSet = channelIdPermissionsMap.get(channelId)!;\r\n const permissionsHash: { [K in Permission]: boolean } = {} as any;\r\n for (const def of this.serverConfigService.getPermissionDefinitions()) {\r\n permissionsHash[def.name] = permissionSet.has(def.name as Permission);\r\n }\r\n this.selectedRolePermissions[channelId] = {\r\n // tslint:disable:no-non-null-assertion\r\n channelId,\r\n channelCode: channelIdCodeMap.get(channelId)!,\r\n permissions: permissionsHash,\r\n // tslint:enable:no-non-null-assertion\r\n };\r\n }\r\n }\r\n }\r\n}\r\n","<vdr-action-bar>\r\n <vdr-ab-left>\r\n <vdr-entity-info [entity]=\"entity$ | async\"></vdr-entity-info>\r\n </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"administrator-detail\"></vdr-action-bar-items>\r\n <button\r\n class=\"btn btn-primary\"\r\n *ngIf=\"isNew$ | async; else updateButton\"\r\n (click)=\"create()\"\r\n [disabled]=\"detailForm.invalid || detailForm.pristine\"\r\n >\r\n {{ 'common.create' | translate }}\r\n </button>\r\n <ng-template #updateButton>\r\n <button\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n *vdrIfPermissions=\"'UpdateAdministrator'\"\r\n [disabled]=\"detailForm.invalid || detailForm.pristine\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </ng-template>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<form class=\"form\" [formGroup]=\"detailForm\">\r\n <vdr-form-field [label]=\"'settings.email-address' | translate\" for=\"emailAddress\">\r\n <input\r\n id=\"emailAddress\"\r\n type=\"text\"\r\n formControlName=\"emailAddress\"\r\n [readonly]=\"!('UpdateAdministrator' | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'settings.first-name' | translate\" for=\"firstName\">\r\n <input\r\n id=\"firstName\"\r\n type=\"text\"\r\n formControlName=\"firstName\"\r\n [readonly]=\"!('UpdateAdministrator' | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'settings.last-name' | translate\" for=\"lastName\">\r\n <input\r\n id=\"lastName\"\r\n type=\"text\"\r\n formControlName=\"lastName\"\r\n [readonly]=\"!('UpdateAdministrator' | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field *ngIf=\"isNew$ | async\" [label]=\"'settings.password' | translate\" for=\"password\">\r\n <input id=\"password\" type=\"password\" formControlName=\"password\" />\r\n </vdr-form-field>\r\n <vdr-form-field\r\n *ngIf=\"!(isNew$ | async) && ('UpdateAdministrator' | hasPermission)\"\r\n [label]=\"'settings.password' | translate\"\r\n for=\"password\"\r\n [readOnlyToggle]=\"true\"\r\n >\r\n <input id=\"password\" type=\"password\" formControlName=\"password\" />\r\n </vdr-form-field>\r\n <section formGroupName=\"customFields\" *ngIf=\"customFields.length\">\r\n <label>{{ 'common.custom-fields' | translate }}</label>\r\n <vdr-tabbed-custom-fields\r\n entityName=\"Administrator\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\r\n [readonly]=\"!('UpdateAdministrator' | hasPermission)\"\r\n ></vdr-tabbed-custom-fields>\r\n </section>\r\n <vdr-custom-detail-component-host\r\n locationId=\"administrator-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n <label class=\"clr-control-label\">{{ 'settings.roles' | translate }}</label>\r\n <ng-select\r\n [items]=\"allRoles$ | async\"\r\n [multiple]=\"true\"\r\n [hideSelected]=\"true\"\r\n formControlName=\"roles\"\r\n (change)=\"rolesChanged($event)\"\r\n bindLabel=\"description\"\r\n ></ng-select>\r\n\r\n <ul class=\"nav\" role=\"tablist\">\r\n <li role=\"presentation\" class=\"nav-item\" *ngFor=\"let channel of getAvailableChannels()\">\r\n <button\r\n [id]=\"channel.channelId\"\r\n (click)=\"selectedChannelId = channel.channelId\"\r\n class=\"btn btn-link nav-link\"\r\n [class.active]=\"selectedChannelId === channel.channelId\"\r\n [attr.aria-selected]=\"selectedChannelId === channel.channelId\"\r\n type=\"button\"\r\n >\r\n {{ channel.channelCode | channelCodeToLabel | translate }}\r\n </button>\r\n </li>\r\n </ul>\r\n <vdr-permission-grid\r\n [activePermissions]=\"getPermissionsForSelectedChannel()\"\r\n [permissionDefinitions]=\"permissionDefinitions\"\r\n [readonly]=\"true\"\r\n ></vdr-permission-grid>\r\n</form>\r\n","import { Component } from '@angular/core';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n BaseListComponent,\r\n DataService,\r\n GetAdministratorsQuery,\r\n ItemOf,\r\n ModalService,\r\n NotificationService,\r\n} from '@vendure/admin-ui/core';\r\nimport { EMPTY } from 'rxjs';\r\nimport { switchMap } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'vdr-administrator-list',\r\n templateUrl: './administrator-list.component.html',\r\n styleUrls: ['./administrator-list.component.scss'],\r\n})\r\nexport class AdministratorListComponent extends BaseListComponent<\r\n GetAdministratorsQuery,\r\n ItemOf<GetAdministratorsQuery, 'administrators'>\r\n> {\r\n constructor(\r\n private dataService: DataService,\r\n router: Router,\r\n route: ActivatedRoute,\r\n private modalService: ModalService,\r\n private notificationService: NotificationService,\r\n ) {\r\n super(router, route);\r\n super.setQueryFn(\r\n (...args: any[]) => this.dataService.administrator.getAdministrators(...args),\r\n data => data.administrators,\r\n );\r\n }\r\n\r\n deleteAdministrator(administrator: ItemOf<GetAdministratorsQuery, 'administrators'>) {\r\n return this.modalService\r\n .dialog({\r\n title: _('catalog.confirm-delete-administrator'),\r\n body: `${administrator.firstName} ${administrator.lastName}`,\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(res =>\r\n res ? this.dataService.administrator.deleteAdministrator(administrator.id) : EMPTY,\r\n ),\r\n )\r\n .subscribe(\r\n () => {\r\n this.notificationService.success(_('common.notify-delete-success'), {\r\n entity: 'Administrator',\r\n });\r\n this.refresh();\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-delete-error'), {\r\n entity: 'Administrator',\r\n });\r\n },\r\n );\r\n }\r\n}\r\n","<vdr-action-bar>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"administrator-list\"></vdr-action-bar-items>\r\n <a class=\"btn btn-primary\" [routerLink]=\"['./create']\" *vdrIfPermissions=\"'CreateAdministrator'\">\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'admin.create-new-administrator' | translate }}\r\n </a>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<vdr-data-table\r\n [items]=\"items$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n>\r\n <vdr-dt-column>{{ 'settings.first-name' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'settings.last-name' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'settings.email-address' | translate }}</vdr-dt-column>\r\n <vdr-dt-column></vdr-dt-column>\r\n <vdr-dt-column></vdr-dt-column>\r\n <ng-template let-administrator=\"item\">\r\n <td class=\"left align-middle\">{{ administrator.firstName }}</td>\r\n <td class=\"left align-middle\">{{ administrator.lastName }}</td>\r\n <td class=\"left align-middle\">{{ administrator.emailAddress }}</td>\r\n <td class=\"right align-middle\">\r\n <vdr-table-row-action\r\n iconShape=\"edit\"\r\n [label]=\"'common.edit' | translate\"\r\n [linkTo]=\"['./', administrator.id]\"\r\n ></vdr-table-row-action>\r\n </td>\r\n <td>\r\n <vdr-dropdown>\r\n <button type=\"button\" class=\"btn btn-link btn-sm\" vdrDropdownTrigger>\r\n {{ 'common.actions' | translate }}\r\n <clr-icon shape=\"caret down\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button\r\n type=\"button\"\r\n class=\"delete-button\"\r\n (click)=\"deleteAdministrator(administrator)\"\r\n [disabled]=\"!('DeleteAdministrator' | hasPermission)\"\r\n vdrDropdownItem\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'common.delete' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </td>\r\n </ng-template>\r\n</vdr-data-table>\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { 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 ChannelFragment,\r\n CreateChannelInput,\r\n CurrencyCode,\r\n CustomFieldConfig,\r\n DataService,\r\n GetZonesQuery,\r\n LanguageCode,\r\n NotificationService,\r\n Permission,\r\n ServerConfigService,\r\n UpdateChannelInput,\r\n} from '@vendure/admin-ui/core';\r\nimport { DEFAULT_CHANNEL_CODE } from '@vendure/common/lib/shared-constants';\r\nimport { Observable } from 'rxjs';\r\nimport { map, mergeMap, take } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'vdr-channel-detail',\r\n templateUrl: './channel-detail.component.html',\r\n styleUrls: ['./channel-detail.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ChannelDetailComponent\r\n extends BaseDetailComponent<ChannelFragment>\r\n implements OnInit, OnDestroy\r\n{\r\n customFields: CustomFieldConfig[];\r\n zones$: Observable<GetZonesQuery['zones']>;\r\n detailForm: FormGroup;\r\n currencyCodes = Object.values(CurrencyCode);\r\n availableLanguageCodes$: Observable<LanguageCode[]>;\r\n readonly updatePermission = [Permission.SuperAdmin, Permission.UpdateChannel, Permission.CreateChannel];\r\n\r\n constructor(\r\n router: Router,\r\n route: ActivatedRoute,\r\n protected 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('Channel');\r\n this.detailForm = this.formBuilder.group({\r\n code: ['', Validators.required],\r\n token: ['', Validators.required],\r\n pricesIncludeTax: [false],\r\n currencyCode: [''],\r\n defaultShippingZoneId: ['', Validators.required],\r\n defaultLanguageCode: [],\r\n defaultTaxZoneId: ['', Validators.required],\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.zones$ = this.dataService.settings.getZones().mapSingle(data => data.zones);\r\n this.availableLanguageCodes$ = this.serverConfigService.getAvailableLanguages();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.destroy();\r\n }\r\n\r\n saveButtonEnabled(): boolean {\r\n return this.detailForm.dirty && this.detailForm.valid;\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: CreateChannelInput = {\r\n code: formValue.code,\r\n token: formValue.token,\r\n defaultLanguageCode: formValue.defaultLanguageCode,\r\n pricesIncludeTax: formValue.pricesIncludeTax,\r\n currencyCode: formValue.currencyCode,\r\n defaultShippingZoneId: formValue.defaultShippingZoneId,\r\n defaultTaxZoneId: formValue.defaultTaxZoneId,\r\n customFields: formValue.customFields,\r\n };\r\n this.dataService.settings\r\n .createChannel(input)\r\n .pipe(\r\n mergeMap(({ createChannel }) =>\r\n this.dataService.auth.currentUser().single$.pipe(\r\n map(({ me }) => ({\r\n me,\r\n createChannel,\r\n })),\r\n ),\r\n ),\r\n mergeMap(({ me, createChannel }) =>\r\n // tslint:disable-next-line:no-non-null-assertion\r\n this.dataService.client.updateUserChannels(me!.channels).pipe(map(() => createChannel)),\r\n ),\r\n )\r\n .subscribe(data => {\r\n switch (data.__typename) {\r\n case 'Channel':\r\n this.notificationService.success(_('common.notify-create-success'), {\r\n entity: 'Channel',\r\n });\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n this.router.navigate(['../', data.id], { relativeTo: this.route });\r\n break;\r\n case 'LanguageNotAvailableError':\r\n this.notificationService.error(data.message);\r\n break;\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.entity$\r\n .pipe(\r\n take(1),\r\n mergeMap(channel => {\r\n const input = {\r\n id: channel.id,\r\n code: formValue.code,\r\n token: formValue.token,\r\n pricesIncludeTax: formValue.pricesIncludeTax,\r\n currencyCode: formValue.currencyCode,\r\n defaultShippingZoneId: formValue.defaultShippingZoneId,\r\n defaultLanguageCode: formValue.defaultLanguageCode,\r\n defaultTaxZoneId: formValue.defaultTaxZoneId,\r\n customFields: formValue.customFields,\r\n } as UpdateChannelInput;\r\n return this.dataService.settings.updateChannel(input);\r\n }),\r\n )\r\n .subscribe(({ updateChannel }) => {\r\n switch (updateChannel.__typename) {\r\n case 'Channel':\r\n this.notificationService.success(_('common.notify-update-success'), {\r\n entity: 'Channel',\r\n });\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n break;\r\n case 'LanguageNotAvailableError':\r\n this.notificationService.error(updateChannel.message);\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: ChannelFragment, languageCode: LanguageCode): void {\r\n this.detailForm.patchValue({\r\n code: entity.code,\r\n token: entity.token || this.generateToken(),\r\n pricesIncludeTax: entity.pricesIncludeTax,\r\n currencyCode: entity.currencyCode,\r\n defaultShippingZoneId: entity.defaultShippingZone ? entity.defaultShippingZone.id : '',\r\n defaultLanguageCode: entity.defaultLanguageCode,\r\n defaultTaxZoneId: entity.defaultTaxZone ? entity.defaultTaxZone.id : '',\r\n });\r\n if (this.customFields.length) {\r\n this.setCustomFieldFormValues(this.customFields, this.detailForm.get(['customFields']), entity);\r\n }\r\n if (entity.code === DEFAULT_CHANNEL_CODE) {\r\n const codeControl = this.detailForm.get('code');\r\n if (codeControl) {\r\n codeControl.disable();\r\n }\r\n }\r\n }\r\n\r\n private generateToken(): string {\r\n const randomString = () => Math.random().toString(36).substr(3, 10);\r\n return `${randomString()}${randomString()}`;\r\n }\r\n}\r\n","<vdr-action-bar>\r\n <vdr-ab-left>\r\n <vdr-entity-info [entity]=\"entity$ | async\"></vdr-entity-info>\r\n </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"channel-detail\"></vdr-action-bar-items>\r\n <button\r\n class=\"btn btn-primary\"\r\n *ngIf=\"isNew$ | async; else updateButton\"\r\n (click)=\"create()\"\r\n [disabled]=\"!saveButtonEnabled()\"\r\n >\r\n {{ 'common.create' | translate }}\r\n </button>\r\n <ng-template #updateButton>\r\n <button\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n *vdrIfPermissions=\"['SuperAdmin', 'UpdateChannel']\"\r\n [disabled]=\"!saveButtonEnabled()\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </ng-template>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<form class=\"form\" [formGroup]=\"detailForm\">\r\n <vdr-form-field [label]=\"'common.code' | translate\" for=\"code\">\r\n <input\r\n id=\"code\"\r\n type=\"text\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n formControlName=\"code\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'settings.channel-token' | translate\" for=\"token\">\r\n <input\r\n id=\"token\"\r\n type=\"text\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n formControlName=\"token\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'settings.currency' | translate\" for=\"defaultTaxZoneId\">\r\n <select\r\n clrSelect\r\n name=\"currencyCode\"\r\n formControlName=\"currencyCode\"\r\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\r\n >\r\n <option *ngFor=\"let code of currencyCodes\" [value]=\"code\">{{ code | localeCurrencyName }}</option>\r\n </select>\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'common.default-language' | translate\" for=\"defaultLanguage\">\r\n <select\r\n clrSelect\r\n name=\"defaultLanguageCode\"\r\n formControlName=\"defaultLanguageCode\"\r\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\r\n >\r\n <option *ngFor=\"let languageCode of availableLanguageCodes$ | async\" [value]=\"languageCode\">\r\n {{ languageCode | localeLanguageName }} ({{ languageCode | uppercase }})\r\n </option>\r\n </select>\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'settings.prices-include-tax' | translate\" for=\"pricesIncludeTax\">\r\n <clr-toggle-wrapper>\r\n <input\r\n type=\"checkbox\"\r\n clrToggle\r\n id=\"pricesIncludeTax\"\r\n formControlName=\"pricesIncludeTax\"\r\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </clr-toggle-wrapper>\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'settings.default-tax-zone' | translate\" for=\"defaultTaxZoneId\">\r\n <select\r\n clrSelect\r\n name=\"defaultTaxZoneId\"\r\n formControlName=\"defaultTaxZoneId\"\r\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\r\n >\r\n <option selected value style=\"display: none\"></option>\r\n <option *ngFor=\"let zone of zones$ | async\" [value]=\"zone.id\">{{ zone.name }}</option>\r\n </select>\r\n </vdr-form-field>\r\n <clr-alert\r\n *ngIf=\"detailForm.value.code && !detailForm.value.defaultTaxZoneId\"\r\n clrAlertType=\"danger\"\r\n [clrAlertClosable]=\"false\"\r\n >\r\n <clr-alert-item>\r\n <span class=\"alert-text\">\r\n {{ 'error.no-default-tax-zone-set' | translate }}\r\n </span>\r\n </clr-alert-item>\r\n </clr-alert>\r\n\r\n <vdr-form-field [label]=\"'settings.default-shipping-zone' | translate\" for=\"defaultShippingZoneId\">\r\n <select\r\n clrSelect\r\n name=\"defaultShippingZoneId\"\r\n formControlName=\"defaultShippingZoneId\"\r\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\r\n >\r\n <option selected value style=\"display: none\"></option>\r\n <option *ngFor=\"let zone of zones$ | async\" [value]=\"zone.id\">{{ zone.name }}</option>\r\n </select>\r\n </vdr-form-field>\r\n <clr-alert\r\n *ngIf=\"detailForm.value.code && !detailForm.value.defaultShippingZoneId\"\r\n clrAlertType=\"warning\"\r\n [clrAlertClosable]=\"false\"\r\n >\r\n <clr-alert-item>\r\n <span class=\"alert-text\">\r\n {{ 'error.no-default-shipping-zone-set' | translate }}\r\n </span>\r\n </clr-alert-item>\r\n </clr-alert>\r\n\r\n <section formGroupName=\"customFields\" *ngIf=\"customFields.length\">\r\n <label>{{ 'common.custom-fields' | translate }}</label>\r\n <vdr-tabbed-custom-fields\r\n entityName=\"Channel\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n ></vdr-tabbed-custom-fields>\r\n </section>\r\n <vdr-custom-detail-component-host\r\n locationId=\"channel-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n</form>\r\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport { ChannelFragment, DataService, ModalService, NotificationService } from '@vendure/admin-ui/core';\r\nimport { DEFAULT_CHANNEL_CODE } from '@vendure/common/lib/shared-constants';\r\nimport { EMPTY, Observable, Subject } from 'rxjs';\r\nimport { mergeMap, startWith, switchMap } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'vdr-channel-list',\r\n templateUrl: './channel-list.component.html',\r\n styleUrls: ['./channel-list.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ChannelListComponent {\r\n channels$: Observable<ChannelFragment[]>;\r\n private refresh$ = new Subject();\r\n\r\n constructor(\r\n private dataService: DataService,\r\n private modalService: ModalService,\r\n private notificationService: NotificationService,\r\n ) {\r\n this.channels$ = this.refresh$.pipe(\r\n startWith(1),\r\n switchMap(() => this.dataService.settings.getChannels().mapStream(data => data.channels)),\r\n );\r\n }\r\n\r\n isDefaultChannel(channelCode: string): boolean {\r\n return channelCode === DEFAULT_CHANNEL_CODE;\r\n }\r\n\r\n deleteChannel(id: string) {\r\n this.modalService\r\n .dialog({\r\n title: _('catalog.confirm-delete-channel'),\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 => (response ? this.dataService.settings.deleteChannel(id) : EMPTY)),\r\n mergeMap(() => this.dataService.auth.currentUser().single$),\r\n // tslint:disable-next-line:no-non-null-assertion\r\n mergeMap(data => this.dataService.client.updateUserChannels(data.me!.channels)),\r\n )\r\n .subscribe(\r\n () => {\r\n this.notificationService.success(_('common.notify-delete-success'), {\r\n entity: 'Channel',\r\n });\r\n this.refresh$.next(1);\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-delete-error'), {\r\n entity: 'Channel',\r\n });\r\n },\r\n );\r\n }\r\n}\r\n","<vdr-action-bar>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"channel-list\"></vdr-action-bar-items>\r\n <a class=\"btn btn-primary\" [routerLink]=\"['./create']\" *vdrIfPermissions=\"['SuperAdmin', 'CreateChannel']\">\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'settings.create-new-channel' | translate }}\r\n </a>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<vdr-data-table [items]=\"channels$ | async\">\r\n <vdr-dt-column>{{ 'common.code' | translate }}</vdr-dt-column>\r\n <vdr-dt-column></vdr-dt-column>\r\n <vdr-dt-column></vdr-dt-column>\r\n <ng-template let-channel=\"item\">\r\n <td class=\"left align-middle\">\r\n <vdr-channel-badge [channelCode]=\"channel.code\"></vdr-channel-badge>\r\n {{ channel.code | channelCodeToLabel | translate }}\r\n </td>\r\n <td class=\"right align-middle\">\r\n <vdr-table-row-action\r\n iconShape=\"edit\"\r\n [label]=\"'common.edit' | translate\"\r\n [linkTo]=\"['./', channel.id]\"\r\n ></vdr-table-row-action>\r\n </td>\r\n <td class=\"right align-middle\">\r\n <vdr-dropdown>\r\n <button type=\"button\" class=\"btn btn-link btn-sm\" vdrDropdownTrigger [disabled]=\"isDefaultChannel(channel.code)\">\r\n {{ 'common.actions' | translate }}\r\n <clr-icon shape=\"caret down\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button\r\n type=\"button\"\r\n class=\"delete-button\"\r\n (click)=\"deleteChannel(channel.id)\"\r\n [disabled]=\"!(['SuperAdmin', 'DeleteChannel'] | hasPermission)\"\r\n vdrDropdownItem\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'common.delete' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </td>\r\n </ng-template>\r\n</vdr-data-table>\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { 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 CountryFragment,\r\n CreateCountryInput,\r\n createUpdatedTranslatable,\r\n CustomFieldConfig,\r\n DataService,\r\n findTranslation,\r\n LanguageCode,\r\n NotificationService,\r\n Permission,\r\n ServerConfigService,\r\n UpdateCountryInput,\r\n} from '@vendure/admin-ui/core';\r\nimport { combineLatest, Observable } from 'rxjs';\r\nimport { mergeMap, take } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'vdr-country-detail',\r\n templateUrl: './country-detail.component.html',\r\n styleUrls: ['./country-detail.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class CountryDetailComponent\r\n extends BaseDetailComponent<CountryFragment>\r\n implements OnInit, OnDestroy\r\n{\r\n country$: Observable<CountryFragment>;\r\n detailForm: FormGroup;\r\n customFields: CustomFieldConfig[];\r\n readonly updatePermission = [Permission.UpdateSettings, Permission.UpdateCountry];\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('Country');\r\n this.detailForm = this.formBuilder.group({\r\n code: ['', Validators.required],\r\n name: ['', Validators.required],\r\n enabled: [true],\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.country$ = this.entity$;\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy();\r\n }\r\n\r\n create() {\r\n if (!this.detailForm.dirty) {\r\n return;\r\n }\r\n combineLatest(this.country$, this.languageCode$)\r\n .pipe(\r\n take(1),\r\n mergeMap(([country, languageCode]) => {\r\n const formValue = this.detailForm.value;\r\n const input: CreateCountryInput = createUpdatedTranslatable({\r\n translatable: country,\r\n updatedFields: formValue,\r\n customFieldConfig: this.customFields,\r\n languageCode,\r\n defaultTranslation: {\r\n name: formValue.name,\r\n languageCode,\r\n },\r\n });\r\n return this.dataService.settings.createCountry(input);\r\n }),\r\n )\r\n .subscribe(\r\n data => {\r\n this.notificationService.success(_('common.notify-create-success'), {\r\n entity: 'Country',\r\n });\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n this.router.navigate(['../', data.createCountry.id], { relativeTo: this.route });\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-create-error'), {\r\n entity: 'Country',\r\n });\r\n },\r\n );\r\n }\r\n\r\n save() {\r\n combineLatest(this.country$, this.languageCode$)\r\n .pipe(\r\n take(1),\r\n mergeMap(([country, languageCode]) => {\r\n const formValue = this.detailForm.value;\r\n const input: UpdateCountryInput = createUpdatedTranslatable({\r\n translatable: country,\r\n updatedFields: formValue,\r\n customFieldConfig: this.customFields,\r\n languageCode,\r\n defaultTranslation: {\r\n name: formValue.name,\r\n languageCode,\r\n },\r\n });\r\n return this.dataService.settings.updateCountry(input);\r\n }),\r\n )\r\n .subscribe(\r\n data => {\r\n this.notificationService.success(_('common.notify-update-success'), {\r\n entity: 'Country',\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: 'Country',\r\n });\r\n },\r\n );\r\n }\r\n\r\n protected setFormValues(country: CountryFragment, languageCode: LanguageCode): void {\r\n const currentTranslation = findTranslation(country, languageCode);\r\n\r\n this.detailForm.patchValue({\r\n code: country.code,\r\n name: currentTranslation ? currentTranslation.name : '',\r\n enabled: country.enabled,\r\n });\r\n\r\n if (this.customFields.length) {\r\n this.setCustomFieldFormValues(\r\n this.customFields,\r\n this.detailForm.get(['customFields']),\r\n country,\r\n currentTranslation,\r\n );\r\n }\r\n }\r\n}\r\n","<vdr-action-bar>\r\n <vdr-ab-left>\r\n <vdr-entity-info [entity]=\"entity$ | async\"></vdr-entity-info>\r\n <vdr-language-selector\r\n [disabled]=\"isNew$ | async\"\r\n [availableLanguageCodes]=\"availableLanguages$ | async\"\r\n [currentLanguageCode]=\"languageCode$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"country-detail\"></vdr-action-bar-items>\r\n <button\r\n class=\"btn btn-primary\"\r\n *ngIf=\"isNew$ | async; else updateButton\"\r\n (click)=\"create()\"\r\n [disabled]=\"detailForm.invalid || detailForm.pristine\"\r\n >\r\n {{ 'common.create' | translate }}\r\n </button>\r\n <ng-template #updateButton>\r\n <button\r\n class=\"btn btn-primary\"\r\n *vdrIfPermissions=\"updatePermission\"\r\n (click)=\"save()\"\r\n [disabled]=\"detailForm.invalid || detailForm.pristine\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </ng-template>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<form class=\"form\" [formGroup]=\"detailForm\">\r\n <vdr-form-field [label]=\"'common.code' | translate\" for=\"code\">\r\n <input\r\n id=\"code\"\r\n type=\"text\"\r\n formControlName=\"code\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\r\n <input\r\n id=\"name\"\r\n type=\"text\"\r\n formControlName=\"name\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'common.enabled' | translate\" for=\"enabled\">\r\n <clr-toggle-wrapper>\r\n <input\r\n type=\"checkbox\"\r\n clrToggle\r\n id=\"enabled\"\r\n formControlName=\"enabled\"\r\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </clr-toggle-wrapper>\r\n </vdr-form-field>\r\n <section formGroupName=\"customFields\" *ngIf=\"customFields.length\">\r\n <label>{{ 'common.custom-fields' | translate }}</label>\r\n <vdr-tabbed-custom-fields\r\n entityName=\"Country\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n ></vdr-tabbed-custom-fields>\r\n </section>\r\n <vdr-custom-detail-component-host\r\n locationId=\"country-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n</form>\r\n","import { ChangeDetectionStrategy, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { FormControl } from '@angular/forms';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n DataService,\r\n DeletionResult,\r\n GetCountryListQuery,\r\n GetZonesQuery,\r\n ItemOf,\r\n LanguageCode,\r\n ModalService,\r\n NotificationService,\r\n ServerConfigService,\r\n ZoneFragment,\r\n} from '@vendure/admin-ui/core';\r\nimport { combineLatest, EMPTY, Observable, Subject } from 'rxjs';\r\nimport { map, startWith, switchMap, tap } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'vdr-country-list',\r\n templateUrl: './country-list.component.html',\r\n styleUrls: ['./country-list.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class CountryListComponent implements OnInit, OnDestroy {\r\n searchTerm = new FormControl('');\r\n countriesWithZones$: Observable<\r\n Array<ItemOf<GetCountryListQuery, 'countries'> & { zones: GetZonesQuery['zones'] }>\r\n >;\r\n zones$: Observable<GetZonesQuery['zones']>;\r\n availableLanguages$: Observable<LanguageCode[]>;\r\n contentLanguage$: Observable<LanguageCode>;\r\n\r\n private countries: GetCountryListQuery['countries']['items'] = [];\r\n private destroy$ = new Subject<void>();\r\n private refresh$ = new Subject<void>();\r\n\r\n constructor(\r\n private dataService: DataService,\r\n private notificationService: NotificationService,\r\n private modalService: ModalService,\r\n private serverConfigService: ServerConfigService,\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.contentLanguage$ = this.dataService.client\r\n .uiState()\r\n .mapStream(({ uiState }) => uiState.contentLanguage);\r\n\r\n const countries$ = combineLatest(\r\n this.contentLanguage$,\r\n this.searchTerm.valueChanges.pipe(startWith(null)),\r\n ).pipe(\r\n map(([__, term]) => term),\r\n switchMap(term => this.dataService.settings.getCountries(999, 0, term).single$),\r\n tap(data => {\r\n this.countries = data.countries.items;\r\n }),\r\n map(data => data.countries.items),\r\n );\r\n\r\n this.zones$ = this.dataService.settings.getZones().mapStream(data => data.zones);\r\n\r\n this.countriesWithZones$ = combineLatest(countries$, this.zones$).pipe(\r\n map(([countries, zones]) => {\r\n return countries.map(country => ({\r\n ...country,\r\n zones: zones.filter(z => !!z.members.find(c => c.id === country.id)),\r\n }));\r\n }),\r\n );\r\n\r\n this.availableLanguages$ = this.serverConfigService.getAvailableLanguages();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.destroy$.next(undefined);\r\n this.destroy$.complete();\r\n }\r\n\r\n setLanguage(code: LanguageCode) {\r\n this.dataService.client.setContentLanguage(code).subscribe();\r\n }\r\n\r\n deleteCountry(countryId: string) {\r\n this.modalService\r\n .dialog({\r\n title: _('catalog.confirm-delete-country'),\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.settings.deleteCountry(countryId) : EMPTY,\r\n ),\r\n )\r\n .subscribe(\r\n response => {\r\n if (response.deleteCountry.result === DeletionResult.DELETED) {\r\n this.notificationService.success(_('common.notify-delete-success'), {\r\n entity: 'Country',\r\n });\r\n this.dataService.settings.getCountries(999, 0).single$.subscribe();\r\n } else {\r\n this.notificationService.error(response.deleteCountry.message || '');\r\n }\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-delete-error'), {\r\n entity: 'Country',\r\n });\r\n },\r\n );\r\n }\r\n\r\n private isZone(input: ZoneFragment | { name: string } | string): input is ZoneFragment {\r\n return input.hasOwnProperty('id');\r\n }\r\n}\r\n","<vdr-action-bar>\r\n <vdr-ab-left>\r\n <input\r\n type=\"text\"\r\n name=\"searchTerm\"\r\n [formControl]=\"searchTerm\"\r\n [placeholder]=\"'settings.search-country-by-name' | translate\"\r\n class=\"search-input\"\r\n />\r\n <div>\r\n <vdr-language-selector\r\n [availableLanguageCodes]=\"availableLanguages$ | async\"\r\n [currentLanguageCode]=\"contentLanguage$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n </div>\r\n </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"country-list\"></vdr-action-bar-items>\r\n <a\r\n class=\"btn btn-primary\"\r\n [routerLink]=\"['./create']\"\r\n *vdrIfPermissions=\"['CreateSettings', 'CreateCountry']\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'settings.create-new-country' | translate }}\r\n </a>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<vdr-data-table [items]=\"countriesWithZones$ | async\">\r\n <vdr-dt-column>{{ 'common.code' | translate }}</vdr-dt-column>\r\n <vdr-dt-column [expand]=\"true\">{{ 'common.name' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'settings.zone' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'common.enabled' | translate }}</vdr-dt-column>\r\n <vdr-dt-column></vdr-dt-column>\r\n <vdr-dt-column></vdr-dt-column>\r\n <ng-template let-country=\"item\">\r\n <td class=\"left align-middle\">{{ country.code }}</td>\r\n <td class=\"left align-middle\">{{ country.name }}</td>\r\n <td class=\"left align-middle\">\r\n <a\r\n [routerLink]=\"['/settings', 'zones', { contents: zone.id }]\"\r\n *ngFor=\"let zone of country.zones\"\r\n >\r\n <vdr-chip [colorFrom]=\"zone.name\">{{ zone.name }}</vdr-chip>\r\n </a>\r\n </td>\r\n <td class=\"left align-middle\">\r\n <clr-icon\r\n [class.is-success]=\"country.enabled\"\r\n [attr.shape]=\"country.enabled ? 'check' : 'times'\"\r\n ></clr-icon>\r\n </td>\r\n <td class=\"right align-middle\">\r\n <vdr-table-row-action\r\n iconShape=\"edit\"\r\n [label]=\"'common.edit' | translate\"\r\n [linkTo]=\"['./', country.id]\"\r\n ></vdr-table-row-action>\r\n </td>\r\n <td class=\"right align-middle\">\r\n <vdr-dropdown>\r\n <button type=\"button\" class=\"btn btn-link btn-sm\" vdrDropdownTrigger>\r\n {{ 'common.actions' | translate }}\r\n <clr-icon shape=\"caret down\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button\r\n type=\"button\"\r\n class=\"delete-button\"\r\n (click)=\"deleteCountry(country.id)\"\r\n vdrDropdownItem\r\n [disabled]=\"!(['DeleteSettings', 'DeleteCountry'] | hasPermission)\"\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'common.delete' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </td>\r\n </ng-template>\r\n</vdr-data-table>\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit } from '@angular/core';\r\nimport { 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 CustomFieldConfig,\r\n DataService,\r\n GlobalSettings,\r\n LanguageCode,\r\n NotificationService,\r\n Permission,\r\n ServerConfigService,\r\n} from '@vendure/admin-ui/core';\r\nimport { switchMap, tap, withLatestFrom } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'vdr-global-settings',\r\n templateUrl: './global-settings.component.html',\r\n styleUrls: ['./global-settings.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class GlobalSettingsComponent extends BaseDetailComponent<GlobalSettings> implements OnInit {\r\n detailForm: FormGroup;\r\n customFields: CustomFieldConfig[];\r\n languageCodes = Object.values(LanguageCode);\r\n readonly updatePermission = [Permission.UpdateSettings, Permission.UpdateGlobalSettings];\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('GlobalSettings');\r\n this.detailForm = this.formBuilder.group({\r\n availableLanguages: [''],\r\n trackInventory: false,\r\n outOfStockThreshold: [0, Validators.required],\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(): void {\r\n this.init();\r\n this.dataService.client.userStatus().single$.subscribe(({ userStatus }) => {\r\n if (!userStatus.permissions.includes(Permission.UpdateSettings)) {\r\n const languagesSelect = this.detailForm.get('availableLanguages');\r\n if (languagesSelect) {\r\n languagesSelect.disable();\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\r\n this.dataService.settings\r\n .updateGlobalSettings(this.detailForm.value)\r\n .pipe(\r\n tap(({ updateGlobalSettings }) => {\r\n switch (updateGlobalSettings.__typename) {\r\n case 'GlobalSettings':\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n this.notificationService.success(_('common.notify-update-success'), {\r\n entity: 'Settings',\r\n });\r\n break;\r\n case 'ChannelDefaultLanguageError':\r\n this.notificationService.error(updateGlobalSettings.message);\r\n }\r\n }),\r\n switchMap(() => this.serverConfigService.refreshGlobalSettings()),\r\n withLatestFrom(this.dataService.client.uiState().single$),\r\n )\r\n .subscribe(([{ globalSettings }, { uiState }]) => {\r\n const availableLangs = globalSettings.availableLanguages;\r\n if (availableLangs.length && !availableLangs.includes(uiState.contentLanguage)) {\r\n this.dataService.client.setContentLanguage(availableLangs[0]).subscribe();\r\n }\r\n });\r\n }\r\n\r\n protected setFormValues(entity: GlobalSettings, languageCode: LanguageCode): void {\r\n this.detailForm.patchValue({\r\n availableLanguages: entity.availableLanguages,\r\n trackInventory: entity.trackInventory,\r\n outOfStockThreshold: entity.outOfStockThreshold,\r\n });\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","<vdr-action-bar>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"global-settings-detail\"></vdr-action-bar-items>\r\n <button\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n *vdrIfPermissions=\"updatePermission\"\r\n [disabled]=\"detailForm.invalid || detailForm.pristine\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<form class=\"form\" [formGroup]=\"detailForm\">\r\n <vdr-form-field [label]=\"'common.available-languages' | translate\" for=\"availableLanguages\">\r\n <ng-select\r\n [items]=\"languageCodes\"\r\n [addTag]=\"false\"\r\n [hideSelected]=\"true\"\r\n multiple=\"true\"\r\n appendTo=\"body\"\r\n formControlName=\"availableLanguages\"\r\n >\r\n <ng-template ng-label-tmp let-item=\"item\" let-clear=\"clear\">\r\n <span class=\"ng-value-icon left\" (click)=\"clear.call(null, item)\" aria-hidden=\"true\">\r\n ×\r\n </span>\r\n <span class=\"ng-value-label\">{{ item | localeLanguageName }} ({{ item }})</span>\r\n </ng-template>\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n {{ item | localeLanguageName }} ({{ item }})\r\n </ng-template>\r\n </ng-select>\r\n </vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"'settings.global-out-of-stock-threshold' | translate\"\r\n for=\"outOfStockThreshold\"\r\n [tooltip]=\"'settings.global-out-of-stock-threshold-tooltip' | translate\"\r\n >\r\n <input\r\n id=\"outOfStockThreshold\"\r\n type=\"number\"\r\n formControlName=\"outOfStockThreshold\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"'settings.track-inventory-default' | translate\"\r\n for=\"enabled\"\r\n [tooltip]=\"'catalog.track-inventory-tooltip' | translate\"\r\n >\r\n <clr-toggle-wrapper>\r\n <input\r\n type=\"checkbox\"\r\n clrToggle\r\n name=\"enabled\"\r\n formControlName=\"trackInventory\"\r\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </clr-toggle-wrapper>\r\n </vdr-form-field>\r\n <section formGroupName=\"customFields\" *ngIf=\"customFields.length\">\r\n <label>{{ 'common.custom-fields' | translate }}</label>\r\n <vdr-tabbed-custom-fields\r\n entityName=\"GlobalSettings\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n ></vdr-tabbed-custom-fields>\r\n </section>\r\n <vdr-custom-detail-component-host\r\n locationId=\"global-settings-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n</form>\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { 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 configurableDefinitionToInstance,\r\n ConfigurableOperation,\r\n ConfigurableOperationDefinition,\r\n CreatePaymentMethodInput,\r\n CustomFieldConfig,\r\n DataService,\r\n getConfigArgValue,\r\n NotificationService,\r\n PaymentMethodFragment,\r\n Permission,\r\n ServerConfigService,\r\n toConfigurableOperationInput,\r\n UpdatePaymentMethodInput,\r\n} from '@vendure/admin-ui/core';\r\nimport { normalizeString } from '@vendure/common/lib/normalize-string';\r\nimport { combineLatest } from 'rxjs';\r\nimport { mergeMap, take } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'vdr-payment-method-detail',\r\n templateUrl: './payment-method-detail.component.html',\r\n styleUrls: ['./payment-method-detail.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PaymentMethodDetailComponent\r\n extends BaseDetailComponent<PaymentMethodFragment>\r\n implements OnInit, OnDestroy\r\n{\r\n detailForm: FormGroup;\r\n customFields: CustomFieldConfig[];\r\n checkers: ConfigurableOperationDefinition[] = [];\r\n handlers: ConfigurableOperationDefinition[] = [];\r\n selectedChecker?: ConfigurableOperation | null;\r\n selectedCheckerDefinition?: ConfigurableOperationDefinition;\r\n selectedHandler?: ConfigurableOperation | null;\r\n selectedHandlerDefinition?: ConfigurableOperationDefinition;\r\n readonly updatePermission = [Permission.UpdateSettings, Permission.UpdatePaymentMethod];\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('PaymentMethod');\r\n this.detailForm = this.formBuilder.group({\r\n code: ['', Validators.required],\r\n name: ['', Validators.required],\r\n description: '',\r\n enabled: [true, Validators.required],\r\n checker: {},\r\n handler: {},\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 combineLatest([\r\n this.dataService.settings.getPaymentMethodOperations().single$,\r\n this.entity$.pipe(take(1)),\r\n ]).subscribe(([data, entity]) => {\r\n this.checkers = data.paymentMethodEligibilityCheckers;\r\n this.handlers = data.paymentMethodHandlers;\r\n this.changeDetector.markForCheck();\r\n this.selectedCheckerDefinition = data.paymentMethodEligibilityCheckers.find(\r\n c => c.code === (entity.checker && entity.checker.code),\r\n );\r\n this.selectedHandlerDefinition = data.paymentMethodHandlers.find(\r\n c => c.code === (entity.handler && entity.handler.code),\r\n );\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy();\r\n }\r\n\r\n updateCode(currentCode: string, nameValue: string) {\r\n if (!currentCode) {\r\n const codeControl = this.detailForm.get(['code']);\r\n if (codeControl && codeControl.pristine) {\r\n codeControl.setValue(normalizeString(nameValue, '-'));\r\n }\r\n }\r\n }\r\n\r\n configArgsIsPopulated(): boolean {\r\n const configArgsGroup = this.detailForm.get('configArgs') as FormGroup | undefined;\r\n if (!configArgsGroup) {\r\n return false;\r\n }\r\n return 0 < Object.keys(configArgsGroup.controls).length;\r\n }\r\n\r\n selectChecker(checker: ConfigurableOperationDefinition) {\r\n this.selectedCheckerDefinition = checker;\r\n this.selectedChecker = configurableDefinitionToInstance(checker);\r\n const formControl = this.detailForm.get('checker');\r\n if (formControl) {\r\n formControl.clearValidators();\r\n formControl.updateValueAndValidity({ onlySelf: true });\r\n formControl.patchValue(this.selectedChecker);\r\n }\r\n this.detailForm.markAsDirty();\r\n }\r\n\r\n selectHandler(handler: ConfigurableOperationDefinition) {\r\n this.selectedHandlerDefinition = handler;\r\n this.selectedHandler = configurableDefinitionToInstance(handler);\r\n const formControl = this.detailForm.get('handler');\r\n if (formControl) {\r\n formControl.clearValidators();\r\n formControl.updateValueAndValidity({ onlySelf: true });\r\n formControl.patchValue(this.selectedHandler);\r\n }\r\n this.detailForm.markAsDirty();\r\n }\r\n\r\n removeChecker() {\r\n this.selectedChecker = null;\r\n this.detailForm.markAsDirty();\r\n }\r\n\r\n removeHandler() {\r\n this.selectedHandler = null;\r\n this.detailForm.markAsDirty();\r\n }\r\n\r\n create() {\r\n const selectedChecker = this.selectedChecker;\r\n const selectedHandler = this.selectedHandler;\r\n if (!selectedHandler) {\r\n return;\r\n }\r\n this.entity$\r\n .pipe(\r\n take(1),\r\n mergeMap(({ id }) => {\r\n const formValue = this.detailForm.value;\r\n const input: CreatePaymentMethodInput = {\r\n name: formValue.name,\r\n code: formValue.code,\r\n description: formValue.description,\r\n enabled: formValue.enabled,\r\n checker: selectedChecker\r\n ? toConfigurableOperationInput(selectedChecker, formValue.checker)\r\n : null,\r\n handler: toConfigurableOperationInput(selectedHandler, formValue.handler),\r\n customFields: formValue.customFields,\r\n };\r\n return this.dataService.settings.createPaymentMethod(input);\r\n }),\r\n )\r\n .subscribe(\r\n data => {\r\n this.notificationService.success(_('common.notify-create-success'), {\r\n entity: 'PaymentMethod',\r\n });\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n this.router.navigate(['../', data.createPaymentMethod.id], { relativeTo: this.route });\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-create-error'), {\r\n entity: 'PaymentMethod',\r\n });\r\n },\r\n );\r\n }\r\n\r\n save() {\r\n const selectedChecker = this.selectedChecker;\r\n const selectedHandler = this.selectedHandler;\r\n if (!selectedHandler) {\r\n return;\r\n }\r\n this.entity$\r\n .pipe(\r\n take(1),\r\n mergeMap(({ id }) => {\r\n const formValue = this.detailForm.value;\r\n const input: UpdatePaymentMethodInput = {\r\n id,\r\n name: formValue.name,\r\n code: formValue.code,\r\n description: formValue.description,\r\n enabled: formValue.enabled,\r\n checker: selectedChecker\r\n ? toConfigurableOperationInput(selectedChecker, formValue.checker)\r\n : null,\r\n handler: toConfigurableOperationInput(selectedHandler, formValue.handler),\r\n customFields: formValue.customFields,\r\n };\r\n return this.dataService.settings.updatePaymentMethod(input);\r\n }),\r\n )\r\n .subscribe(\r\n data => {\r\n this.notificationService.success(_('common.notify-update-success'), {\r\n entity: 'PaymentMethod',\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: 'PaymentMethod',\r\n });\r\n },\r\n );\r\n }\r\n\r\n protected setFormValues(paymentMethod: PaymentMethodFragment): void {\r\n this.detailForm.patchValue({\r\n name: paymentMethod.name,\r\n code: paymentMethod.code,\r\n description: paymentMethod.description,\r\n enabled: paymentMethod.enabled,\r\n checker: paymentMethod.checker || {},\r\n handler: paymentMethod.handler || {},\r\n });\r\n if (!this.selectedChecker) {\r\n this.selectedChecker = paymentMethod.checker && {\r\n code: paymentMethod.checker.code,\r\n args: paymentMethod.checker.args.map(a => ({ ...a, value: getConfigArgValue(a.value) })),\r\n };\r\n }\r\n if (!this.selectedHandler) {\r\n this.selectedHandler = paymentMethod.handler && {\r\n code: paymentMethod.handler.code,\r\n args: paymentMethod.handler.args.map(a => ({ ...a, value: getConfigArgValue(a.value) })),\r\n };\r\n }\r\n if (this.customFields.length) {\r\n this.setCustomFieldFormValues(\r\n this.customFields,\r\n this.detailForm.get('customFields'),\r\n paymentMethod,\r\n );\r\n }\r\n }\r\n}\r\n","<vdr-action-bar>\r\n <vdr-ab-left>\r\n <vdr-entity-info [entity]=\"entity$ | async\"></vdr-entity-info>\r\n </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"payment-method-detail\"></vdr-action-bar-items>\r\n <button\r\n class=\"btn btn-primary\"\r\n *ngIf=\"isNew$ | async; else updateButton\"\r\n [disabled]=\"detailForm.pristine || detailForm.invalid\"\r\n (click)=\"create()\"\r\n >\r\n {{ 'common.create' | translate }}\r\n </button>\r\n <ng-template #updateButton>\r\n <button\r\n *vdrIfPermissions=\"updatePermission\"\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n [disabled]=\"detailForm.pristine || detailForm.invalid || !selectedHandler\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </ng-template>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<form class=\"form\" [formGroup]=\"detailForm\" *ngIf=\"entity$ | async as paymentMethod\">\r\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\r\n <input\r\n id=\"name\"\r\n type=\"text\"\r\n formControlName=\"name\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n (input)=\"updateCode(paymentMethod.code, $event.target.value)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"'common.code' | translate\"\r\n for=\"code\"\r\n [readOnlyToggle]=\"updatePermission | hasPermission\"\r\n >\r\n <input\r\n id=\"code\"\r\n type=\"text\"\r\n formControlName=\"code\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-rich-text-editor\r\n formControlName=\"description\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n [label]=\"'common.description' | translate\"\r\n ></vdr-rich-text-editor>\r\n <vdr-form-field [label]=\"'common.enabled' | translate\" for=\"description\">\r\n <clr-toggle-wrapper>\r\n <input\r\n type=\"checkbox\"\r\n clrToggle\r\n id=\"enabled\"\r\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\r\n formControlName=\"enabled\"\r\n />\r\n </clr-toggle-wrapper>\r\n </vdr-form-field>\r\n <section formGroupName=\"customFields\" *ngIf=\"customFields.length\">\r\n <label>{{ 'common.custom-fields' | translate }}</label>\r\n <vdr-tabbed-custom-fields\r\n entityName=\"PaymentMethod\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n ></vdr-tabbed-custom-fields>\r\n </section>\r\n\r\n <vdr-custom-detail-component-host\r\n locationId=\"payment-method-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n\r\n <div class=\"clr-row mt4\">\r\n <div class=\"clr-col\">\r\n <label class=\"clr-control-label\">{{ 'settings.payment-eligibility-checker' | translate }}</label>\r\n <vdr-configurable-input\r\n *ngIf=\"selectedChecker && selectedCheckerDefinition\"\r\n [operation]=\"selectedChecker\"\r\n [operationDefinition]=\"selectedCheckerDefinition\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n (remove)=\"removeChecker()\"\r\n formControlName=\"checker\"\r\n ></vdr-configurable-input>\r\n <div *ngIf=\"!selectedChecker || !selectedCheckerDefinition\">\r\n <vdr-dropdown>\r\n <button class=\"btn btn-outline\" vdrDropdownTrigger>\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'common.select' | translate }}\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-left\">\r\n <button\r\n *ngFor=\"let checker of checkers\"\r\n type=\"button\"\r\n vdrDropdownItem\r\n (click)=\"selectChecker(checker)\"\r\n >\r\n {{ checker.description }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n </div>\r\n <div class=\"clr-col\">\r\n <label class=\"clr-control-label\">{{ 'settings.payment-handler' | translate }}</label>\r\n <vdr-configurable-input\r\n *ngIf=\"selectedHandler && selectedHandlerDefinition\"\r\n [operation]=\"selectedHandler\"\r\n [operationDefinition]=\"selectedHandlerDefinition\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n (remove)=\"removeHandler()\"\r\n formControlName=\"handler\"\r\n ></vdr-configurable-input>\r\n <div *ngIf=\"!selectedHandler || !selectedHandlerDefinition\">\r\n <vdr-dropdown>\r\n <button class=\"btn btn-outline\" vdrDropdownTrigger>\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'common.select' | translate }}\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-left\">\r\n <button\r\n *ngFor=\"let handler of handlers\"\r\n type=\"button\"\r\n vdrDropdownItem\r\n (click)=\"selectHandler(handler)\"\r\n >\r\n {{ handler.description }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n </div>\r\n </div>\r\n</form>\r\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n BaseListComponent,\r\n DataService,\r\n DeletionResult,\r\n GetPaymentMethodListQuery,\r\n ItemOf,\r\n ModalService,\r\n NotificationService,\r\n} from '@vendure/admin-ui/core';\r\nimport { EMPTY } from 'rxjs';\r\nimport { map, switchMap } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'vdr-payment-method-list',\r\n templateUrl: './payment-method-list.component.html',\r\n styleUrls: ['./payment-method-list.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PaymentMethodListComponent extends BaseListComponent<\r\n GetPaymentMethodListQuery,\r\n ItemOf<GetPaymentMethodListQuery, 'paymentMethods'>\r\n> {\r\n constructor(\r\n private dataService: DataService,\r\n router: Router,\r\n route: ActivatedRoute,\r\n private modalService: ModalService,\r\n private notificationService: NotificationService,\r\n ) {\r\n super(router, route);\r\n super.setQueryFn(\r\n (...args: any[]) => this.dataService.settings.getPaymentMethods(...args).refetchOnChannelChange(),\r\n data => data.paymentMethods,\r\n );\r\n }\r\n\r\n deletePaymentMethod(paymentMethodId: string) {\r\n this.showModalAndDelete(paymentMethodId)\r\n .pipe(\r\n switchMap(response => {\r\n if (response.result === DeletionResult.DELETED) {\r\n return [true];\r\n } else {\r\n return this.showModalAndDelete(paymentMethodId, response.message || '').pipe(\r\n map(r => r.result === DeletionResult.DELETED),\r\n );\r\n }\r\n }),\r\n // Refresh the cached facets to reflect the changes\r\n switchMap(() => this.dataService.settings.getPaymentMethods(100).single$),\r\n )\r\n .subscribe(\r\n () => {\r\n this.notificationService.success(_('common.notify-delete-success'), {\r\n entity: 'PaymentMethod',\r\n });\r\n this.refresh();\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-delete-error'), {\r\n entity: 'PaymentMethod',\r\n });\r\n },\r\n );\r\n }\r\n\r\n private showModalAndDelete(paymentMethodId: string, message?: string) {\r\n return this.modalService\r\n .dialog({\r\n title: _('settings.confirm-delete-payment-method'),\r\n body: message,\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(res =>\r\n res ? this.dataService.settings.deletePaymentMethod(paymentMethodId, !!message) : EMPTY,\r\n ),\r\n map(res => res.deletePaymentMethod),\r\n );\r\n }\r\n}\r\n","<vdr-action-bar>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"payment-method-list\"></vdr-action-bar-items>\r\n <a class=\"btn btn-primary\" [routerLink]=\"['./create']\" *vdrIfPermissions=\"['CreateSettings', 'CreatePaymentMethod']\">\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'settings.create-new-payment-method' | translate }}\r\n </a>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<vdr-data-table\r\n [items]=\"items$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n>\r\n <vdr-dt-column>{{ 'common.code' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'common.enabled' | translate }}</vdr-dt-column>\r\n <vdr-dt-column></vdr-dt-column>\r\n <vdr-dt-column></vdr-dt-column>\r\n <ng-template let-paymentMethod=\"item\">\r\n <td class=\"left align-middle\">{{ paymentMethod.code }}</td>\r\n <td class=\"left align-middle\">{{ paymentMethod.enabled }}</td>\r\n <td class=\"right align-middle\">\r\n <vdr-table-row-action\r\n iconShape=\"edit\"\r\n [label]=\"'common.edit' | translate\"\r\n [linkTo]=\"['./', paymentMethod.id]\"\r\n ></vdr-table-row-action>\r\n </td>\r\n <td class=\"right align-middle\">\r\n <vdr-dropdown>\r\n <button type=\"button\" class=\"btn btn-link btn-sm\" vdrDropdownTrigger>\r\n {{ 'common.actions' | translate }}\r\n <clr-icon shape=\"caret down\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button\r\n type=\"button\"\r\n class=\"delete-button\"\r\n (click)=\"deletePaymentMethod(paymentMethod.id)\"\r\n [disabled]=\"!(['DeleteSettings', 'DeletePaymentMethod'] | hasPermission)\"\r\n vdrDropdownItem\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'common.delete' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </td>\r\n </ng-template>\r\n</vdr-data-table>\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { 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 Administrator,\r\n BaseDetailComponent,\r\n CustomFieldConfig,\r\n DataService,\r\n GetActiveAdministratorQuery,\r\n LanguageCode,\r\n NotificationService,\r\n ServerConfigService,\r\n UpdateActiveAdministratorInput,\r\n} from '@vendure/admin-ui/core';\r\nimport { mergeMap, take } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'vdr-profile',\r\n templateUrl: './profile.component.html',\r\n styleUrls: ['./profile.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ProfileComponent\r\n extends BaseDetailComponent<NonNullable<GetActiveAdministratorQuery['activeAdministrator']>>\r\n implements OnInit, OnDestroy\r\n{\r\n customFields: CustomFieldConfig[];\r\n detailForm: FormGroup;\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('Administrator');\r\n this.detailForm = this.formBuilder.group({\r\n emailAddress: ['', Validators.required],\r\n firstName: ['', Validators.required],\r\n lastName: ['', Validators.required],\r\n password: [''],\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 }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy();\r\n }\r\n\r\n save() {\r\n this.entity$\r\n .pipe(\r\n take(1),\r\n mergeMap(({ id }) => {\r\n const formValue = this.detailForm.value;\r\n const administrator: UpdateActiveAdministratorInput = {\r\n emailAddress: formValue.emailAddress,\r\n firstName: formValue.firstName,\r\n lastName: formValue.lastName,\r\n password: formValue.password,\r\n customFields: formValue.customFields,\r\n };\r\n return this.dataService.administrator.updateActiveAdministrator(administrator);\r\n }),\r\n )\r\n .subscribe(\r\n data => {\r\n this.notificationService.success(_('common.notify-update-success'), {\r\n entity: 'Administrator',\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: 'Administrator',\r\n });\r\n },\r\n );\r\n }\r\n\r\n protected setFormValues(administrator: Administrator, languageCode: LanguageCode): void {\r\n this.detailForm.patchValue({\r\n emailAddress: administrator.emailAddress,\r\n firstName: administrator.firstName,\r\n lastName: administrator.lastName,\r\n });\r\n if (this.customFields.length) {\r\n this.setCustomFieldFormValues(\r\n this.customFields,\r\n this.detailForm.get('customFields'),\r\n administrator,\r\n );\r\n }\r\n }\r\n}\r\n","<vdr-action-bar>\r\n <vdr-ab-left>\r\n <vdr-entity-info [entity]=\"entity$ | async\"></vdr-entity-info>\r\n </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"administrator-detail\"></vdr-action-bar-items>\r\n <button\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n [disabled]=\"detailForm.invalid || detailForm.pristine\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<form class=\"form\" [formGroup]=\"detailForm\">\r\n <vdr-form-field [label]=\"'settings.email-address' | translate\" for=\"emailAddress\">\r\n <input id=\"emailAddress\" type=\"text\" formControlName=\"emailAddress\"/>\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'settings.first-name' | translate\" for=\"firstName\">\r\n <input id=\"firstName\" type=\"text\" formControlName=\"firstName\"/>\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'settings.last-name' | translate\" for=\"lastName\">\r\n <input id=\"lastName\" type=\"text\" formControlName=\"lastName\"/>\r\n </vdr-form-field>\r\n <vdr-form-field *ngIf=\"isNew$ | async\" [label]=\"'settings.password' | translate\" for=\"password\">\r\n <input id=\"password\" type=\"password\" formControlName=\"password\"/>\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'settings.password' | translate\" for=\"password\" [readOnlyToggle]=\"true\">\r\n <input id=\"password\" type=\"password\" formControlName=\"password\"/>\r\n </vdr-form-field>\r\n <section formGroupName=\"customFields\" *ngIf=\"customFields.length\">\r\n <label>{{ 'common.custom-fields' | translate }}</label>\r\n <vdr-tabbed-custom-fields\r\n entityName=\"Administrator\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\r\n ></vdr-tabbed-custom-fields>\r\n </section>\r\n <vdr-custom-detail-component-host\r\n locationId=\"administrator-profile\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n</form>\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\nimport { 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 CreateRoleInput,\n DataService,\n LanguageCode,\n NotificationService,\n Permission,\n PermissionDefinition,\n Role,\n ServerConfigService,\n UpdateRoleInput,\n} from '@vendure/admin-ui/core';\nimport { normalizeString } from '@vendure/common/lib/normalize-string';\nimport { unique } from '@vendure/common/lib/unique';\nimport { Observable } from 'rxjs';\nimport { mergeMap, take } from 'rxjs/operators';\n\n@Component({\n selector: 'vdr-role-detail',\n templateUrl: './role-detail.component.html',\n styleUrls: ['./role-detail.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class RoleDetailComponent extends BaseDetailComponent<Role> implements OnInit, OnDestroy {\n role$: Observable<Role>;\n detailForm: FormGroup;\n permissionDefinitions: PermissionDefinition[];\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 code: ['', Validators.required],\n description: ['', Validators.required],\n channelIds: [],\n permissions: [],\n });\n }\n\n ngOnInit() {\n this.init();\n this.role$ = this.entity$;\n this.permissionDefinitions = this.serverConfigService.getPermissionDefinitions();\n }\n\n ngOnDestroy(): void {\n this.destroy();\n }\n\n updateCode(nameValue: string) {\n const codeControl = this.detailForm.get(['code']);\n if (codeControl && codeControl.pristine) {\n codeControl.setValue(normalizeString(nameValue, '-'));\n }\n }\n\n setPermission(change: { permission: string; value: boolean }) {\n const permissionsControl = this.detailForm.get('permissions');\n if (permissionsControl) {\n const currentPermissions = permissionsControl.value as string[];\n const newValue =\n change.value === true\n ? unique([...currentPermissions, change.permission])\n : currentPermissions.filter(p => p !== change.permission);\n permissionsControl.setValue(newValue);\n permissionsControl.markAsDirty();\n }\n }\n\n create() {\n const formValue = this.detailForm.value;\n const role: CreateRoleInput = formValue;\n this.dataService.administrator.createRole(role).subscribe(\n data => {\n this.notificationService.success(_('common.notify-create-success'), { entity: 'Role' });\n this.detailForm.markAsPristine();\n this.changeDetector.markForCheck();\n this.router.navigate(['../', data.createRole.id], { relativeTo: this.route });\n },\n err => {\n this.notificationService.error(_('common.notify-create-error'), {\n entity: 'Role',\n });\n },\n );\n }\n\n save() {\n this.role$\n .pipe(\n take(1),\n mergeMap(({ id }) => {\n const formValue = this.detailForm.value;\n const role: UpdateRoleInput = { id, ...formValue };\n return this.dataService.administrator.updateRole(role);\n }),\n )\n .subscribe(\n data => {\n this.notificationService.success(_('common.notify-update-success'), { entity: 'Role' });\n this.detailForm.markAsPristine();\n this.changeDetector.markForCheck();\n },\n err => {\n this.notificationService.error(_('common.notify-update-error'), {\n entity: 'Role',\n });\n },\n );\n }\n\n protected setFormValues(role: Role, languageCode: LanguageCode): void {\n this.detailForm.patchValue({\n description: role.description,\n code: role.code,\n channelIds: role.channels.map(c => c.id),\n permissions: role.permissions,\n });\n // This was required to get the channel selector component to\n // correctly display its contents. A while spent debugging the root\n // cause did not yield a solution, therefore this next line.\n this.changeDetector.detectChanges();\n }\n}\n","<vdr-action-bar>\r\n <vdr-ab-left>\r\n <vdr-entity-info [entity]=\"entity$ | async\"></vdr-entity-info>\r\n </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"role-detail\"></vdr-action-bar-items>\r\n <button\r\n class=\"btn btn-primary\"\r\n *ngIf=\"isNew$ | async; else updateButton\"\r\n (click)=\"create()\"\r\n [disabled]=\"detailForm.invalid || detailForm.pristine\"\r\n >\r\n {{ 'common.create' | translate }}\r\n </button>\r\n <ng-template #updateButton>\r\n <button\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n *vdrIfPermissions=\"'UpdateAdministrator'\"\r\n [disabled]=\"detailForm.invalid || detailForm.pristine\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </ng-template>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<form class=\"form\" [formGroup]=\"detailForm\">\r\n <vdr-form-field [label]=\"'common.description' | translate\" for=\"description\">\r\n <input\r\n id=\"description\"\r\n type=\"text\"\r\n formControlName=\"description\"\r\n [readonly]=\"!('UpdateAdministrator' | hasPermission)\"\r\n (input)=\"updateCode($event.target.value)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"'common.code' | translate\"\r\n for=\"code\"\r\n [readOnlyToggle]=\"'UpdateAdministrator' | hasPermission\"\r\n >\r\n <input\r\n id=\"code\"\r\n type=\"text\"\r\n formControlName=\"code\"\r\n [readonly]=\"!('UpdateAdministrator' | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'settings.channel' | translate\">\r\n <vdr-channel-assignment-control\r\n formControlName=\"channelIds\"\r\n [vdrDisabled]=\"!('UpdateAdministrator' | hasPermission)\"\r\n ></vdr-channel-assignment-control>\r\n </vdr-form-field>\r\n <label>{{ 'settings.permissions' | translate }}</label>\r\n <vdr-permission-grid\r\n [permissionDefinitions]=\"permissionDefinitions\"\r\n [activePermissions]=\"detailForm.get('permissions')?.value\"\r\n (permissionChange)=\"setPermission($event)\"\r\n [readonly]=\"!('UpdateAdministrator' | hasPermission)\"\r\n ></vdr-permission-grid>\r\n</form>\r\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport { BaseListComponent, GetRolesQuery, ItemOf } from '@vendure/admin-ui/core';\r\nimport { Role } 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 { CUSTOMER_ROLE_CODE, SUPER_ADMIN_ROLE_CODE } from '@vendure/common/lib/shared-constants';\r\nimport { EMPTY, Observable } from 'rxjs';\r\nimport { map, switchMap } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'vdr-role-list',\r\n templateUrl: './role-list.component.html',\r\n styleUrls: ['./role-list.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class RoleListComponent\r\n extends BaseListComponent<GetRolesQuery, ItemOf<GetRolesQuery, 'roles'>>\r\n implements OnInit\r\n{\r\n readonly initialLimit = 3;\r\n displayLimit: { [id: string]: number } = {};\r\n visibleRoles$: Observable<Array<ItemOf<GetRolesQuery, 'roles'>>>;\r\n\r\n constructor(\r\n private modalService: ModalService,\r\n private notificationService: NotificationService,\r\n private dataService: DataService,\r\n router: Router,\r\n route: ActivatedRoute,\r\n ) {\r\n super(router, route);\r\n super.setQueryFn(\r\n (...args: any[]) => this.dataService.administrator.getRoles(...args),\r\n data => data.roles,\r\n );\r\n }\r\n\r\n ngOnInit() {\r\n super.ngOnInit();\r\n this.visibleRoles$ = this.items$.pipe(\r\n map(roles => roles.filter(role => role.code !== CUSTOMER_ROLE_CODE)),\r\n );\r\n }\r\n\r\n toggleDisplayLimit(role: ItemOf<GetRolesQuery, 'roles'>) {\r\n if (this.displayLimit[role.id] === role.permissions.length) {\r\n this.displayLimit[role.id] = this.initialLimit;\r\n } else {\r\n this.displayLimit[role.id] = role.permissions.length;\r\n }\r\n }\r\n\r\n isDefaultRole(role: Role): boolean {\r\n return role.code === SUPER_ADMIN_ROLE_CODE || role.code === CUSTOMER_ROLE_CODE;\r\n }\r\n\r\n deleteRole(id: string) {\r\n this.modalService\r\n .dialog({\r\n title: _('settings.confirm-delete-role'),\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(switchMap(response => (response ? this.dataService.administrator.deleteRole(id) : EMPTY)))\r\n .subscribe(\r\n () => {\r\n this.notificationService.success(_('common.notify-delete-success'), {\r\n entity: 'Role',\r\n });\r\n this.refresh();\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-delete-error'), {\r\n entity: 'Role',\r\n });\r\n },\r\n );\r\n }\r\n}\r\n","<vdr-action-bar>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"role-list\"></vdr-action-bar-items>\r\n <a class=\"btn btn-primary\" [routerLink]=\"['./create']\" *vdrIfPermissions=\"'CreateAdministrator'\">\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'settings.create-new-role' | translate }}\r\n </a>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<vdr-data-table\r\n [items]=\"visibleRoles$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n>\r\n <vdr-dt-column>{{ 'common.description' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'common.code' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'settings.channel' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'settings.permissions' | translate }}</vdr-dt-column>\r\n <vdr-dt-column></vdr-dt-column>\r\n <vdr-dt-column></vdr-dt-column>\r\n <ng-template let-role=\"item\">\r\n <td class=\"left align-middle\">{{ role.description }}</td>\r\n <td class=\"left align-middle\"><span *ngIf=\"!isDefaultRole(role)\">{{ role.code }}</span></td>\r\n <td class=\"left align-middle\">\r\n <ng-container *ngIf=\"!isDefaultRole(role)\">\r\n <vdr-chip *ngFor=\"let channel of role.channels\">\r\n <vdr-channel-badge [channelCode]=\"channel.code\"></vdr-channel-badge>\r\n {{ channel.code | channelCodeToLabel | translate }}\r\n </vdr-chip>\r\n </ng-container>\r\n </td>\r\n <td class=\"left align-middle\">\r\n <ng-container *ngIf=\"!isDefaultRole(role); else defaultRole\">\r\n <vdr-chip *ngFor=\"let permission of role.permissions | slice: 0:displayLimit[role.id] || 3\">{{ permission }}</vdr-chip>\r\n <button\r\n class=\"btn btn-sm btn-secondary btn-icon\"\r\n *ngIf=\"role.permissions.length > initialLimit\"\r\n (click)=\"toggleDisplayLimit(role)\"\r\n >\r\n <ng-container *ngIf=\"(displayLimit[role.id] || 0) < role.permissions.length; else collapse\">\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ role.permissions.length - initialLimit }}\r\n </ng-container>\r\n <ng-template #collapse>\r\n <clr-icon shape=\"minus\"></clr-icon>\r\n </ng-template>\r\n </button>\r\n </ng-container>\r\n <ng-template #defaultRole>\r\n <span class=\"default-role-label\">{{ 'settings.default-role-label' | translate }}</span>\r\n </ng-template>\r\n </td>\r\n <td class=\"right align-middle\">\r\n <vdr-table-row-action\r\n *ngIf=\"!isDefaultRole(role)\"\r\n iconShape=\"edit\"\r\n [label]=\"'common.edit' | translate\"\r\n [linkTo]=\"['./', role.id]\"\r\n ></vdr-table-row-action>\r\n </td>\r\n <td class=\"right align-middle\">\r\n <vdr-dropdown>\r\n <button type=\"button\" class=\"btn btn-link btn-sm\" vdrDropdownTrigger [disabled]=\"isDefaultRole(role)\">\r\n {{ 'common.actions' | translate }}\r\n <clr-icon shape=\"caret down\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button\r\n type=\"button\"\r\n class=\"delete-button\"\r\n (click)=\"deleteRole(role.id)\"\r\n [disabled]=\"!('SuperAdmin' | hasPermission)\"\r\n vdrDropdownItem\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'common.delete' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </td>\r\n </ng-template>\r\n</vdr-data-table>\r\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\r\n\r\nimport { CurrencyCode, ShippingMethodQuote } from '@vendure/admin-ui/core';\r\n\r\n@Component({\r\n selector: 'vdr-shipping-eligibility-test-result',\r\n templateUrl: './shipping-eligibility-test-result.component.html',\r\n styleUrls: ['./shipping-eligibility-test-result.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ShippingEligibilityTestResultComponent {\r\n @Input() testResult: ShippingMethodQuote[];\r\n @Input() okToRun = false;\r\n @Input() testDataUpdated = false;\r\n @Input() currencyCode: CurrencyCode;\r\n @Output() runTest = new EventEmitter<void>();\r\n}\r\n","<div class=\"test-result card\">\r\n <div class=\"card-header\">\r\n {{ 'settings.test-result' | translate }}\r\n </div>\r\n <div class=\"card-block\" *ngFor=\"let quote of testResult\">\r\n <div class=\"result-details\" [class.stale]=\"testDataUpdated\">\r\n <vdr-labeled-data [label]=\"'settings.shipping-method' | translate\">\r\n {{ quote.name }}\r\n </vdr-labeled-data>\r\n <div class=\"price-row\">\r\n <vdr-labeled-data [label]=\"'common.price' | translate\">\r\n {{ quote.price | localeCurrency: currencyCode }}\r\n </vdr-labeled-data>\r\n <vdr-labeled-data [label]=\"'common.price-with-tax' | translate\">\r\n {{ quote.priceWithTax | localeCurrency: currencyCode }}\r\n </vdr-labeled-data>\r\n </div>\r\n <vdr-object-tree *ngIf=\"quote.metadata\" [value]=\"quote.metadata\"></vdr-object-tree>\r\n </div>\r\n </div>\r\n <div class=\"card-block\" *ngIf=\"testResult?.length === 0\">\r\n <clr-icon shape=\"ban\" class=\"is-solid error\"></clr-icon>\r\n {{ 'settings.no-eligible-shipping-methods' | translate }}\r\n </div>\r\n <div class=\"card-footer\">\r\n <button class=\"btn btn-secondary\" (click)=\"runTest.emit()\" [disabled]=\"!okToRun\">\r\n {{ 'settings.test-shipping-methods' | translate }}\r\n </button>\r\n </div>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, EventEmitter, OnInit, Output } from '@angular/core';\r\nimport {\r\n CurrencyCode,\r\n DataService,\r\n LocalStorageService,\r\n ProductSelectorSearchQuery,\r\n} from '@vendure/admin-ui/core';\r\n\r\ntype SearchItem = ProductSelectorSearchQuery['search']['items'][number];\r\n\r\nexport interface TestOrderLine {\r\n id: string;\r\n name: string;\r\n preview: string;\r\n sku: string;\r\n unitPriceWithTax: number;\r\n quantity: number;\r\n}\r\n\r\n@Component({\r\n selector: 'vdr-test-order-builder',\r\n templateUrl: './test-order-builder.component.html',\r\n styleUrls: ['./test-order-builder.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class TestOrderBuilderComponent implements OnInit {\r\n @Output() orderLinesChange = new EventEmitter<TestOrderLine[]>();\r\n lines: TestOrderLine[] = [];\r\n currencyCode: CurrencyCode;\r\n get subTotal(): number {\r\n return this.lines.reduce((sum, l) => sum + l.unitPriceWithTax * l.quantity, 0);\r\n }\r\n\r\n constructor(private dataService: DataService, private localStorageService: LocalStorageService) {}\r\n\r\n ngOnInit() {\r\n this.lines = this.loadFromLocalStorage();\r\n if (this.lines) {\r\n this.orderLinesChange.emit(this.lines);\r\n }\r\n this.dataService.settings.getActiveChannel('cache-first').single$.subscribe(result => {\r\n this.currencyCode = result.activeChannel.currencyCode;\r\n });\r\n }\r\n\r\n selectResult(result: SearchItem) {\r\n if (result) {\r\n this.addToLines(result);\r\n }\r\n }\r\n\r\n private addToLines(result: SearchItem) {\r\n if (!this.lines.find(l => l.id === result.productVariantId)) {\r\n this.lines.push({\r\n id: result.productVariantId,\r\n name: result.productVariantName,\r\n preview: result.productAsset?.preview ?? '',\r\n quantity: 1,\r\n sku: result.sku,\r\n unitPriceWithTax:\r\n (result.priceWithTax.__typename === 'SinglePrice' && result.priceWithTax.value) || 0,\r\n });\r\n this.persistToLocalStorage();\r\n this.orderLinesChange.emit(this.lines);\r\n }\r\n }\r\n\r\n updateQuantity() {\r\n this.persistToLocalStorage();\r\n this.orderLinesChange.emit(this.lines);\r\n }\r\n\r\n removeLine(line: TestOrderLine) {\r\n this.lines = this.lines.filter(l => l.id !== line.id);\r\n this.persistToLocalStorage();\r\n this.orderLinesChange.emit(this.lines);\r\n }\r\n\r\n private persistToLocalStorage() {\r\n this.localStorageService.setForCurrentLocation('shippingTestOrder', this.lines);\r\n }\r\n\r\n private loadFromLocalStorage(): TestOrderLine[] {\r\n return this.localStorageService.getForCurrentLocation('shippingTestOrder') || [];\r\n }\r\n}\r\n","<div class=\"card\">\r\n <div class=\"card-header\">\r\n {{ 'settings.test-order' | translate }}\r\n </div>\r\n <table class=\"order-table table\" *ngIf=\"lines.length; else emptyPlaceholder\">\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>{{ 'order.product-name' | translate }}</th>\r\n <th>{{ 'order.product-sku' | translate }}</th>\r\n <th>{{ 'order.unit-price' | translate }}</th>\r\n <th>{{ 'order.quantity' | translate }}</th>\r\n <th>{{ 'order.total' | translate }}</th>\r\n </tr>\r\n </thead>\r\n <tr *ngFor=\"let line of lines\" class=\"order-line\">\r\n <td class=\"align-middle thumb\">\r\n <img [src]=\"line.preview + '?preset=tiny'\" />\r\n </td>\r\n <td class=\"align-middle name\">{{ line.name }}</td>\r\n <td class=\"align-middle sku\">{{ line.sku }}</td>\r\n <td class=\"align-middle unit-price\">\r\n {{ line.unitPriceWithTax | localeCurrency: currencyCode }}\r\n </td>\r\n <td class=\"align-middle quantity\">\r\n <input\r\n [(ngModel)]=\"line.quantity\"\r\n (change)=\"updateQuantity()\"\r\n type=\"number\"\r\n max=\"9999\"\r\n min=\"1\"\r\n />\r\n <button class=\"icon-button\" (click)=\"removeLine(line)\">\r\n <clr-icon shape=\"trash\"></clr-icon>\r\n </button>\r\n </td>\r\n <td class=\"align-middle total\">\r\n {{ (line.unitPriceWithTax * line.quantity) | localeCurrency: currencyCode }}\r\n </td>\r\n </tr>\r\n <tr class=\"sub-total\">\r\n <td class=\"left\">{{ 'order.sub-total' | translate }}</td>\r\n <td></td>\r\n <td></td>\r\n <td></td>\r\n <td></td>\r\n <td>{{ subTotal | localeCurrency: currencyCode }}</td>\r\n </tr>\r\n </table>\r\n\r\n <ng-template #emptyPlaceholder>\r\n <div class=\"card-block empty-placeholder\">\r\n <div class=\"empty-text\">{{ 'settings.add-products-to-test-order' | translate }}</div>\r\n <clr-icon shape=\"arrow\" dir=\"down\" size=\"96\"></clr-icon>\r\n </div>\r\n </ng-template>\r\n <div class=\"card-block\">\r\n <vdr-product-variant-selector (productSelected)=\"selectResult($event)\"> </vdr-product-variant-selector>\r\n </div>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, EventEmitter, OnDestroy, OnInit, Output } from '@angular/core';\r\nimport { FormBuilder, FormGroup } from '@angular/forms';\r\nimport { DataService, GetAvailableCountriesQuery, ItemOf, LocalStorageService } from '@vendure/admin-ui/core';\r\nimport { Observable, Subscription } from 'rxjs';\r\n\r\nexport interface TestAddress {\r\n city: string;\r\n province: string;\r\n postalCode: string;\r\n countryCode: string;\r\n}\r\n\r\n@Component({\r\n selector: 'vdr-test-address-form',\r\n templateUrl: './test-address-form.component.html',\r\n styleUrls: ['./test-address-form.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class TestAddressFormComponent implements OnInit, OnDestroy {\r\n @Output() addressChange = new EventEmitter<TestAddress>();\r\n availableCountries$: Observable<Array<ItemOf<GetAvailableCountriesQuery, 'countries'>>>;\r\n form: FormGroup;\r\n private subscription: Subscription;\r\n\r\n constructor(\r\n private formBuilder: FormBuilder,\r\n private dataService: DataService,\r\n private localStorageService: LocalStorageService,\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.availableCountries$ = this.dataService.settings\r\n .getAvailableCountries()\r\n .mapSingle(result => result.countries.items);\r\n const storedValue = this.localStorageService.getForCurrentLocation('shippingTestAddress');\r\n const initialValue: TestAddress = storedValue\r\n ? storedValue\r\n : {\r\n city: '',\r\n countryCode: '',\r\n postalCode: '',\r\n province: '',\r\n };\r\n this.addressChange.emit(initialValue);\r\n\r\n this.form = this.formBuilder.group(initialValue);\r\n this.subscription = this.form.valueChanges.subscribe(value => {\r\n this.localStorageService.setForCurrentLocation('shippingTestAddress', value);\r\n this.addressChange.emit(value);\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.subscription) {\r\n this.subscription.unsubscribe();\r\n }\r\n }\r\n}\r\n","<div class=\"card\">\r\n <div class=\"card-header\">\r\n {{ 'settings.test-address' | translate }}\r\n </div>\r\n <div class=\"card-block\">\r\n <form [formGroup]=\"form\">\r\n <clr-input-container>\r\n <label>{{ 'customer.city' | translate }}</label>\r\n <input formControlName=\"city\" type=\"text\" clrInput />\r\n </clr-input-container>\r\n <clr-input-container>\r\n <label>{{ 'customer.province' | translate }}</label>\r\n <input formControlName=\"province\" type=\"text\" clrInput />\r\n </clr-input-container>\r\n <clr-input-container>\r\n <label>{{ 'customer.postal-code' | translate }}</label>\r\n <input formControlName=\"postalCode\" type=\"text\" clrInput />\r\n </clr-input-container>\r\n <clr-input-container>\r\n <label>{{ 'customer.country' | translate }}</label>\r\n <select name=\"countryCode\" formControlName=\"countryCode\" clrInput clrSelect>\r\n <option *ngFor=\"let country of availableCountries$ | async\" [value]=\"country.code\">\r\n {{ country.name }}\r\n </option>\r\n </select>\r\n </clr-input-container>\r\n </form>\r\n </div>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\r\n\r\nimport { CurrencyCode, TestShippingMethodResult } from '@vendure/admin-ui/core';\r\n\r\n@Component({\r\n selector: 'vdr-shipping-method-test-result',\r\n templateUrl: './shipping-method-test-result.component.html',\r\n styleUrls: ['./shipping-method-test-result.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ShippingMethodTestResultComponent {\r\n @Input() testResult: TestShippingMethodResult;\r\n @Input() okToRun = false;\r\n @Input() testDataUpdated = false;\r\n @Input() currencyCode: CurrencyCode;\r\n @Output() runTest = new EventEmitter<void>();\r\n}\r\n","<div\r\n class=\"test-result card\"\r\n [ngClass]=\"{\r\n success: testResult?.eligible === true,\r\n error: testResult?.eligible === false,\r\n unknown: !testResult\r\n }\"\r\n>\r\n <div class=\"card-header\">\r\n {{ 'settings.test-result' | translate }}\r\n </div>\r\n <div class=\"card-block\">\r\n <div class=\"result-details\" [class.stale]=\"testDataUpdated\">\r\n <vdr-labeled-data [label]=\"'settings.eligible' | translate\">\r\n <div class=\"eligible-icon\">\r\n <clr-icon\r\n shape=\"success-standard\"\r\n class=\"is-solid success\"\r\n *ngIf=\"testResult?.eligible\"\r\n ></clr-icon>\r\n <clr-icon\r\n shape=\"ban\"\r\n class=\"is-solid error\"\r\n *ngIf=\"testResult?.eligible === false\"\r\n ></clr-icon>\r\n <clr-icon shape=\"unknown-status\" *ngIf=\"!testResult\"></clr-icon>\r\n </div>\r\n {{ testResult?.eligible }}\r\n </vdr-labeled-data>\r\n <div class=\"price-row\">\r\n <vdr-labeled-data\r\n [label]=\"'common.price' | translate\"\r\n *ngIf=\"testResult?.quote?.price != null\"\r\n >\r\n {{ testResult.quote?.price | localeCurrency: currencyCode }}\r\n </vdr-labeled-data>\r\n <vdr-labeled-data\r\n [label]=\"'common.price-with-tax' | translate\"\r\n *ngIf=\"testResult?.quote?.priceWithTax != null\"\r\n >\r\n {{ testResult.quote?.priceWithTax | localeCurrency: currencyCode }}\r\n </vdr-labeled-data>\r\n </div>\r\n <vdr-object-tree\r\n *ngIf=\"testResult?.quote?.metadata\"\r\n [value]=\"testResult?.quote?.metadata\"\r\n ></vdr-object-tree>\r\n </div>\r\n </div>\r\n <div class=\"card-footer\">\r\n <button class=\"btn btn-secondary\" (click)=\"runTest.emit()\" [disabled]=\"!okToRun\">\r\n {{ 'settings.test-shipping-method' | translate }}\r\n </button>\r\n </div>\r\n</div>\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { 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 configurableDefinitionToInstance,\r\n ConfigurableOperation,\r\n ConfigurableOperationDefinition,\r\n CreateShippingMethodInput,\r\n createUpdatedTranslatable,\r\n CustomFieldConfig,\r\n DataService,\r\n findTranslation,\r\n GetActiveChannelQuery,\r\n getConfigArgValue,\r\n LanguageCode,\r\n NotificationService,\r\n Permission,\r\n ServerConfigService,\r\n ShippingMethod,\r\n ShippingMethodFragment,\r\n TestShippingMethodInput,\r\n TestShippingMethodResult,\r\n toConfigurableOperationInput,\r\n UpdateShippingMethodInput,\r\n} from '@vendure/admin-ui/core';\r\nimport { normalizeString } from '@vendure/common/lib/normalize-string';\r\nimport { combineLatest, merge, Observable, of, Subject } from 'rxjs';\r\nimport { mergeMap, switchMap, take, takeUntil } from 'rxjs/operators';\r\n\r\nimport { TestAddress } from '../test-address-form/test-address-form.component';\r\nimport { TestOrderLine } from '../test-order-builder/test-order-builder.component';\r\n\r\n@Component({\r\n selector: 'vdr-shipping-method-detail',\r\n templateUrl: './shipping-method-detail.component.html',\r\n styleUrls: ['./shipping-method-detail.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ShippingMethodDetailComponent\r\n extends BaseDetailComponent<ShippingMethodFragment>\r\n implements OnInit, OnDestroy\r\n{\r\n detailForm: FormGroup;\r\n checkers: ConfigurableOperationDefinition[] = [];\r\n calculators: ConfigurableOperationDefinition[] = [];\r\n fulfillmentHandlers: ConfigurableOperationDefinition[] = [];\r\n selectedChecker?: ConfigurableOperation | null;\r\n selectedCheckerDefinition?: ConfigurableOperationDefinition;\r\n selectedCalculator?: ConfigurableOperation | null;\r\n selectedCalculatorDefinition?: ConfigurableOperationDefinition;\r\n activeChannel$: Observable<GetActiveChannelQuery['activeChannel']>;\r\n testAddress: TestAddress;\r\n testOrderLines: TestOrderLine[];\r\n testDataUpdated = false;\r\n testResult$: Observable<TestShippingMethodResult | undefined>;\r\n customFields: CustomFieldConfig[];\r\n readonly updatePermission = [Permission.UpdateSettings, Permission.UpdateShippingMethod];\r\n private fetchTestResult$ = new Subject<[TestAddress, TestOrderLine[]]>();\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('ShippingMethod');\r\n this.detailForm = this.formBuilder.group({\r\n code: ['', Validators.required],\r\n name: ['', Validators.required],\r\n description: '',\r\n fulfillmentHandler: ['', Validators.required],\r\n checker: {},\r\n calculator: {},\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 combineLatest([\r\n this.dataService.shippingMethod.getShippingMethodOperations().single$,\r\n this.entity$.pipe(take(1)),\r\n ]).subscribe(([data, entity]) => {\r\n this.checkers = data.shippingEligibilityCheckers;\r\n this.calculators = data.shippingCalculators;\r\n this.fulfillmentHandlers = data.fulfillmentHandlers;\r\n this.changeDetector.markForCheck();\r\n this.selectedCheckerDefinition = data.shippingEligibilityCheckers.find(\r\n c => c.code === (entity.checker && entity.checker.code),\r\n );\r\n this.selectedCalculatorDefinition = data.shippingCalculators.find(\r\n c => c.code === (entity.calculator && entity.calculator.code),\r\n );\r\n });\r\n\r\n this.activeChannel$ = this.dataService.settings\r\n .getActiveChannel()\r\n .mapStream(data => data.activeChannel);\r\n\r\n this.testResult$ = this.fetchTestResult$.pipe(\r\n switchMap(([address, lines]) => {\r\n if (!this.selectedChecker || !this.selectedCalculator) {\r\n return of(undefined);\r\n }\r\n const formValue = this.detailForm.value;\r\n const input: TestShippingMethodInput = {\r\n shippingAddress: { ...address, streetLine1: 'test' },\r\n lines: lines.map(l => ({ productVariantId: l.id, quantity: l.quantity })),\r\n checker: toConfigurableOperationInput(this.selectedChecker, formValue.checker),\r\n calculator: toConfigurableOperationInput(this.selectedCalculator, formValue.calculator),\r\n };\r\n return this.dataService.shippingMethod\r\n .testShippingMethod(input)\r\n .mapSingle(result => result.testShippingMethod);\r\n }),\r\n );\r\n\r\n // tslint:disable:no-non-null-assertion\r\n merge(\r\n this.detailForm.get(['checker'])!.valueChanges,\r\n this.detailForm.get(['calculator'])!.valueChanges,\r\n )\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe(() => (this.testDataUpdated = true));\r\n // tslint:enable:no-non-null-assertion\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy();\r\n }\r\n\r\n updateCode(currentCode: string, nameValue: string) {\r\n if (!currentCode) {\r\n const codeControl = this.detailForm.get(['code']);\r\n if (codeControl && codeControl.pristine) {\r\n codeControl.setValue(normalizeString(nameValue, '-'));\r\n }\r\n }\r\n }\r\n\r\n selectChecker(checker: ConfigurableOperationDefinition) {\r\n this.selectedCheckerDefinition = checker;\r\n this.selectedChecker = configurableDefinitionToInstance(checker);\r\n const formControl = this.detailForm.get('checker');\r\n if (formControl) {\r\n formControl.clearValidators();\r\n formControl.updateValueAndValidity({ onlySelf: true });\r\n formControl.patchValue(this.selectedChecker);\r\n }\r\n this.detailForm.markAsDirty();\r\n }\r\n\r\n selectCalculator(calculator: ConfigurableOperationDefinition) {\r\n this.selectedCalculatorDefinition = calculator;\r\n this.selectedCalculator = configurableDefinitionToInstance(calculator);\r\n const formControl = this.detailForm.get('calculator');\r\n if (formControl) {\r\n formControl.clearValidators();\r\n formControl.updateValueAndValidity({ onlySelf: true });\r\n formControl.patchValue(this.selectedCalculator);\r\n }\r\n this.detailForm.markAsDirty();\r\n }\r\n\r\n create() {\r\n const selectedChecker = this.selectedChecker;\r\n const selectedCalculator = this.selectedCalculator;\r\n if (!selectedChecker || !selectedCalculator) {\r\n return;\r\n }\r\n combineLatest([this.entity$, this.languageCode$])\r\n .pipe(\r\n take(1),\r\n mergeMap(([shippingMethod, languageCode]) => {\r\n const formValue = this.detailForm.value;\r\n const input = {\r\n ...(this.getUpdatedShippingMethod(\r\n shippingMethod,\r\n this.detailForm,\r\n languageCode,\r\n ) as CreateShippingMethodInput),\r\n checker: toConfigurableOperationInput(selectedChecker, formValue.checker),\r\n calculator: toConfigurableOperationInput(selectedCalculator, formValue.calculator),\r\n };\r\n return this.dataService.shippingMethod.createShippingMethod(input);\r\n }),\r\n )\r\n .subscribe(\r\n data => {\r\n this.notificationService.success(_('common.notify-create-success'), {\r\n entity: 'ShippingMethod',\r\n });\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n this.router.navigate(['../', data.createShippingMethod.id], { relativeTo: this.route });\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-create-error'), {\r\n entity: 'ShippingMethod',\r\n });\r\n },\r\n );\r\n }\r\n\r\n save() {\r\n const selectedChecker = this.selectedChecker;\r\n const selectedCalculator = this.selectedCalculator;\r\n if (!selectedChecker || !selectedCalculator) {\r\n return;\r\n }\r\n combineLatest([this.entity$, this.languageCode$])\r\n .pipe(\r\n take(1),\r\n mergeMap(([shippingMethod, languageCode]) => {\r\n const formValue = this.detailForm.value;\r\n const input = {\r\n ...(this.getUpdatedShippingMethod(\r\n shippingMethod,\r\n this.detailForm,\r\n languageCode,\r\n ) as UpdateShippingMethodInput),\r\n checker: toConfigurableOperationInput(selectedChecker, formValue.checker),\r\n calculator: toConfigurableOperationInput(selectedCalculator, formValue.calculator),\r\n };\r\n return this.dataService.shippingMethod.updateShippingMethod(input);\r\n }),\r\n )\r\n .subscribe(\r\n data => {\r\n this.notificationService.success(_('common.notify-update-success'), {\r\n entity: 'ShippingMethod',\r\n });\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n },\r\n err => {\r\n // tslint:disable-next-line:no-console\r\n console.error(err);\r\n this.notificationService.error(_('common.notify-update-error'), {\r\n entity: 'ShippingMethod',\r\n });\r\n },\r\n );\r\n }\r\n\r\n setTestOrderLines(event: TestOrderLine[]) {\r\n this.testOrderLines = event;\r\n this.testDataUpdated = true;\r\n }\r\n\r\n setTestAddress(event: TestAddress) {\r\n this.testAddress = event;\r\n this.testDataUpdated = true;\r\n }\r\n\r\n allTestDataPresent(): boolean {\r\n return !!(\r\n this.testAddress &&\r\n this.testOrderLines &&\r\n this.testOrderLines.length &&\r\n this.selectedChecker &&\r\n this.selectedCalculator\r\n );\r\n }\r\n\r\n runTest() {\r\n this.fetchTestResult$.next([this.testAddress, this.testOrderLines]);\r\n this.testDataUpdated = false;\r\n }\r\n\r\n /**\r\n * Given a ShippingMethod and the value of the detailForm, this method creates an updated copy which\r\n * can then be persisted to the API.\r\n */\r\n private getUpdatedShippingMethod(\r\n shippingMethod: ShippingMethodFragment,\r\n formGroup: FormGroup,\r\n languageCode: LanguageCode,\r\n ): Omit<CreateShippingMethodInput | UpdateShippingMethodInput, 'checker' | 'calculator'> {\r\n const formValue = formGroup.value;\r\n const input = createUpdatedTranslatable({\r\n translatable: shippingMethod,\r\n updatedFields: formValue,\r\n customFieldConfig: this.customFields,\r\n languageCode,\r\n defaultTranslation: {\r\n languageCode,\r\n name: shippingMethod.name || '',\r\n description: shippingMethod.description || '',\r\n },\r\n });\r\n return { ...input, fulfillmentHandler: formValue.fulfillmentHandler };\r\n }\r\n\r\n protected setFormValues(shippingMethod: ShippingMethodFragment, languageCode: LanguageCode): void {\r\n const currentTranslation = findTranslation(shippingMethod, languageCode);\r\n this.detailForm.patchValue({\r\n name: currentTranslation?.name ?? '',\r\n description: currentTranslation?.description ?? '',\r\n code: shippingMethod.code,\r\n fulfillmentHandler: shippingMethod.fulfillmentHandlerCode,\r\n checker: shippingMethod.checker || {},\r\n calculator: shippingMethod.calculator || {},\r\n });\r\n if (!this.selectedChecker) {\r\n this.selectedChecker = shippingMethod.checker && {\r\n code: shippingMethod.checker.code,\r\n args: shippingMethod.checker.args.map(a => ({ ...a, value: getConfigArgValue(a.value) })),\r\n };\r\n }\r\n if (!this.selectedCalculator) {\r\n this.selectedCalculator = shippingMethod.calculator && {\r\n code: shippingMethod.calculator?.code,\r\n args: shippingMethod.calculator?.args.map(a => ({ ...a, value: getConfigArgValue(a.value) })),\r\n };\r\n }\r\n if (this.customFields.length) {\r\n this.setCustomFieldFormValues(\r\n this.customFields,\r\n this.detailForm.get(['customFields']),\r\n shippingMethod,\r\n currentTranslation,\r\n );\r\n }\r\n }\r\n}\r\n","<vdr-action-bar>\r\n <vdr-ab-left>\r\n <vdr-entity-info [entity]=\"entity$ | async\"></vdr-entity-info>\r\n <vdr-language-selector\r\n [disabled]=\"isNew$ | async\"\r\n [availableLanguageCodes]=\"availableLanguages$ | async\"\r\n [currentLanguageCode]=\"languageCode$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"shipping-method-detail\"></vdr-action-bar-items>\r\n <button\r\n class=\"btn btn-primary\"\r\n *ngIf=\"isNew$ | async; else updateButton\"\r\n (click)=\"create()\"\r\n [disabled]=\"detailForm.pristine || detailForm.invalid || !selectedChecker || !selectedCalculator\"\r\n >\r\n {{ 'common.create' | translate }}\r\n </button>\r\n <ng-template #updateButton>\r\n <button\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n *vdrIfPermissions=\"updatePermission\"\r\n [disabled]=\"\r\n detailForm.pristine || detailForm.invalid || !selectedChecker || !selectedCalculator\r\n \"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </ng-template>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<form class=\"form\" [formGroup]=\"detailForm\" *ngIf=\"entity$ | async as shippingMethod\">\r\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\r\n <input\r\n id=\"name\"\r\n type=\"text\"\r\n formControlName=\"name\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n (input)=\"updateCode(shippingMethod.code, $event.target.value)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"'common.code' | translate\"\r\n for=\"code\"\r\n [readOnlyToggle]=\"updatePermission | hasPermission\"\r\n >\r\n <input\r\n id=\"code\"\r\n type=\"text\"\r\n formControlName=\"code\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-rich-text-editor\r\n formControlName=\"description\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n [label]=\"'common.description' | translate\"\r\n ></vdr-rich-text-editor>\r\n <vdr-form-field [label]=\"'settings.fulfillment-handler' | translate\" for=\"fulfillmentHandler\" class=\"mb2\">\r\n <select\r\n name=\"fulfillmentHandler\"\r\n formControlName=\"fulfillmentHandler\"\r\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\r\n >\r\n <option *ngFor=\"let handler of fulfillmentHandlers\" [value]=\"handler.code\">\r\n {{ handler.code }}: {{ handler.description }}\r\n </option>\r\n </select>\r\n </vdr-form-field>\r\n\r\n <section formGroupName=\"customFields\" *ngIf=\"customFields.length\">\r\n <label>{{ 'common.custom-fields' | translate }}</label>\r\n <vdr-tabbed-custom-fields\r\n entityName=\"ShippingMethod\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n ></vdr-tabbed-custom-fields>\r\n </section>\r\n\r\n <vdr-custom-detail-component-host\r\n locationId=\"shipping-method-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n\r\n <div class=\"clr-row mt4\">\r\n <div class=\"clr-col\">\r\n <label class=\"clr-control-label\">{{ 'settings.shipping-eligibility-checker' | translate }}</label>\r\n <vdr-configurable-input\r\n *ngIf=\"selectedChecker && selectedCheckerDefinition\"\r\n [operation]=\"selectedChecker\"\r\n [operationDefinition]=\"selectedCheckerDefinition\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n (remove)=\"selectedChecker = null\"\r\n formControlName=\"checker\"\r\n ></vdr-configurable-input>\r\n <div *ngIf=\"!selectedChecker || !selectedCheckerDefinition\">\r\n <vdr-dropdown>\r\n <button class=\"btn btn-outline\" vdrDropdownTrigger>\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'common.select' | translate }}\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-left\">\r\n <button\r\n *ngFor=\"let checker of checkers\"\r\n type=\"button\"\r\n vdrDropdownItem\r\n (click)=\"selectChecker(checker)\"\r\n >\r\n {{ checker.description }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n </div>\r\n <div class=\"clr-col\">\r\n <label class=\"clr-control-label\">{{ 'settings.shipping-calculator' | translate }}</label>\r\n <vdr-configurable-input\r\n *ngIf=\"selectedCalculator && selectedCalculatorDefinition\"\r\n [operation]=\"selectedCalculator\"\r\n [operationDefinition]=\"selectedCalculatorDefinition\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n (remove)=\"selectedCalculator = null\"\r\n formControlName=\"calculator\"\r\n ></vdr-configurable-input>\r\n <div *ngIf=\"!selectedCalculator || !selectedCalculatorDefinition\">\r\n <vdr-dropdown>\r\n <button class=\"btn btn-outline\" vdrDropdownTrigger>\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'common.select' | translate }}\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-left\">\r\n <button\r\n *ngFor=\"let calculator of calculators\"\r\n type=\"button\"\r\n vdrDropdownItem\r\n (click)=\"selectCalculator(calculator)\"\r\n >\r\n {{ calculator.description }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n </div>\r\n </div>\r\n</form>\r\n<div class=\"testing-tool\">\r\n <clr-accordion>\r\n <clr-accordion-panel>\r\n <clr-accordion-title>{{ 'settings.test-shipping-method' | translate }}</clr-accordion-title>\r\n <clr-accordion-content *clrIfExpanded>\r\n <div class=\"clr-row\">\r\n <div class=\"clr-col\">\r\n <vdr-test-order-builder\r\n (orderLinesChange)=\"setTestOrderLines($event)\"\r\n ></vdr-test-order-builder>\r\n </div>\r\n <div class=\"clr-col\">\r\n <vdr-test-address-form\r\n (addressChange)=\"setTestAddress($event)\"\r\n ></vdr-test-address-form>\r\n <vdr-shipping-method-test-result\r\n [currencyCode]=\"(activeChannel$ | async)?.currencyCode\"\r\n [okToRun]=\"allTestDataPresent() && testDataUpdated && detailForm.valid\"\r\n [testDataUpdated]=\"testDataUpdated\"\r\n [testResult]=\"testResult$ | async\"\r\n (runTest)=\"runTest()\"\r\n ></vdr-shipping-method-test-result>\r\n </div>\r\n </div>\r\n </clr-accordion-content>\r\n </clr-accordion-panel>\r\n </clr-accordion>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n BaseListComponent,\r\n DataService,\r\n GetActiveChannelQuery,\r\n GetShippingMethodListQuery,\r\n ItemOf,\r\n LanguageCode,\r\n ModalService,\r\n NotificationService,\r\n ServerConfigService,\r\n ShippingMethodQuote,\r\n TestEligibleShippingMethodsInput,\r\n} from '@vendure/admin-ui/core';\r\nimport { EMPTY, Observable, Subject } from 'rxjs';\r\nimport { switchMap, tap } from 'rxjs/operators';\r\n\r\nimport { TestAddress } from '../test-address-form/test-address-form.component';\r\nimport { TestOrderLine } from '../test-order-builder/test-order-builder.component';\r\n\r\n@Component({\r\n selector: 'vdr-shipping-method-list',\r\n templateUrl: './shipping-method-list.component.html',\r\n styleUrls: ['./shipping-method-list.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ShippingMethodListComponent\r\n extends BaseListComponent<\r\n GetShippingMethodListQuery,\r\n ItemOf<GetShippingMethodListQuery, 'shippingMethods'>\r\n >\r\n implements OnInit\r\n{\r\n activeChannel$: Observable<GetActiveChannelQuery['activeChannel']>;\r\n testAddress: TestAddress;\r\n testOrderLines: TestOrderLine[];\r\n testDataUpdated = false;\r\n testResult$: Observable<ShippingMethodQuote[] | undefined>;\r\n availableLanguages$: Observable<LanguageCode[]>;\r\n contentLanguage$: Observable<LanguageCode>;\r\n private fetchTestResult$ = new Subject<[TestAddress, TestOrderLine[]]>();\r\n\r\n constructor(\r\n private modalService: ModalService,\r\n private notificationService: NotificationService,\r\n private dataService: DataService,\r\n private serverConfigService: ServerConfigService,\r\n router: Router,\r\n route: ActivatedRoute,\r\n ) {\r\n super(router, route);\r\n super.setQueryFn(\r\n (...args: any[]) =>\r\n this.dataService.shippingMethod.getShippingMethods(...args).refetchOnChannelChange(),\r\n data => data.shippingMethods,\r\n );\r\n }\r\n\r\n ngOnInit() {\r\n super.ngOnInit();\r\n this.testResult$ = this.fetchTestResult$.pipe(\r\n switchMap(([address, lines]) => {\r\n const input: TestEligibleShippingMethodsInput = {\r\n shippingAddress: { ...address, streetLine1: 'test' },\r\n lines: lines.map(l => ({ productVariantId: l.id, quantity: l.quantity })),\r\n };\r\n return this.dataService.shippingMethod\r\n .testEligibleShippingMethods(input)\r\n .mapSingle(result => result.testEligibleShippingMethods);\r\n }),\r\n );\r\n this.activeChannel$ = this.dataService.settings\r\n .getActiveChannel()\r\n .mapStream(data => data.activeChannel);\r\n this.availableLanguages$ = this.serverConfigService.getAvailableLanguages();\r\n this.contentLanguage$ = this.dataService.client\r\n .uiState()\r\n .mapStream(({ uiState }) => uiState.contentLanguage)\r\n .pipe(tap(() => this.refresh()));\r\n }\r\n\r\n deleteShippingMethod(id: string) {\r\n this.modalService\r\n .dialog({\r\n title: _('catalog.confirm-delete-shipping-method'),\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.shippingMethod.deleteShippingMethod(id) : EMPTY,\r\n ),\r\n )\r\n .subscribe(\r\n () => {\r\n this.notificationService.success(_('common.notify-delete-success'), {\r\n entity: 'ShippingMethod',\r\n });\r\n this.refresh();\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-delete-error'), {\r\n entity: 'ShippingMethod',\r\n });\r\n },\r\n );\r\n }\r\n\r\n setTestOrderLines(event: TestOrderLine[]) {\r\n this.testOrderLines = event;\r\n this.testDataUpdated = true;\r\n }\r\n\r\n setTestAddress(event: TestAddress) {\r\n this.testAddress = event;\r\n this.testDataUpdated = true;\r\n }\r\n\r\n allTestDataPresent(): boolean {\r\n return !!(this.testAddress && this.testOrderLines && this.testOrderLines.length);\r\n }\r\n\r\n runTest() {\r\n this.fetchTestResult$.next([this.testAddress, this.testOrderLines]);\r\n this.testDataUpdated = false;\r\n }\r\n\r\n setLanguage(code: LanguageCode) {\r\n this.dataService.client.setContentLanguage(code).subscribe();\r\n }\r\n}\r\n","<vdr-action-bar>\r\n <vdr-ab-left>\r\n <vdr-language-selector\r\n [availableLanguageCodes]=\"availableLanguages$ | async\"\r\n [currentLanguageCode]=\"contentLanguage$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"shipping-method-list\"></vdr-action-bar-items>\r\n <a\r\n class=\"btn btn-primary\"\r\n [routerLink]=\"['./create']\"\r\n *vdrIfPermissions=\"['CreateSettings', 'CreateShippingMethod']\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'settings.create-new-shipping-method' | translate }}\r\n </a>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<vdr-data-table\r\n [items]=\"items$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n>\r\n <vdr-dt-column>{{ 'common.code' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'common.name' | translate }}</vdr-dt-column>\r\n <vdr-dt-column></vdr-dt-column>\r\n <vdr-dt-column></vdr-dt-column>\r\n <ng-template let-shippingMethod=\"item\">\r\n <td class=\"left align-middle\">{{ shippingMethod.code }}</td>\r\n <td class=\"left align-middle\">{{ shippingMethod.name }}</td>\r\n <td class=\"right align-middle\">\r\n <vdr-table-row-action\r\n iconShape=\"edit\"\r\n [label]=\"'common.edit' | translate\"\r\n [linkTo]=\"['./', shippingMethod.id]\"\r\n ></vdr-table-row-action>\r\n </td>\r\n <td class=\"right align-middle\">\r\n <vdr-dropdown>\r\n <button type=\"button\" class=\"btn btn-link btn-sm\" vdrDropdownTrigger>\r\n {{ 'common.actions' | translate }}\r\n <clr-icon shape=\"caret down\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button\r\n type=\"button\"\r\n class=\"delete-button\"\r\n (click)=\"deleteShippingMethod(shippingMethod.id)\"\r\n [disabled]=\"!(['DeleteSettings', 'DeleteShippingMethod'] | hasPermission)\"\r\n vdrDropdownItem\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'common.delete' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </td>\r\n </ng-template>\r\n</vdr-data-table>\r\n\r\n<div class=\"testing-tool\">\r\n <clr-accordion>\r\n <clr-accordion-panel>\r\n <clr-accordion-title>{{ 'settings.test-shipping-methods' | translate }}</clr-accordion-title>\r\n <clr-accordion-content *clrIfExpanded>\r\n <div class=\"clr-row\">\r\n <div class=\"clr-col\">\r\n <vdr-test-order-builder\r\n (orderLinesChange)=\"setTestOrderLines($event)\"\r\n ></vdr-test-order-builder>\r\n </div>\r\n <div class=\"clr-col\">\r\n <vdr-test-address-form\r\n (addressChange)=\"setTestAddress($event)\"\r\n ></vdr-test-address-form>\r\n <vdr-shipping-eligibility-test-result\r\n [currencyCode]=\"(activeChannel$ | async)?.currencyCode\"\r\n [okToRun]=\"allTestDataPresent()\"\r\n [testDataUpdated]=\"testDataUpdated\"\r\n [testResult]=\"testResult$ | async\"\r\n (runTest)=\"runTest()\"\r\n ></vdr-shipping-eligibility-test-result>\r\n </div>\r\n </div>\r\n </clr-accordion-content>\r\n </clr-accordion-panel>\r\n </clr-accordion>\r\n</div>\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { 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 CreateTaxCategoryInput,\r\n CustomFieldConfig,\r\n DataService,\r\n LanguageCode,\r\n NotificationService,\r\n Permission,\r\n ServerConfigService,\r\n TaxCategoryFragment,\r\n UpdateTaxCategoryInput,\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-tax-detail',\r\n templateUrl: './tax-category-detail.component.html',\r\n styleUrls: ['./tax-category-detail.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class TaxCategoryDetailComponent\r\n extends BaseDetailComponent<TaxCategoryFragment>\r\n implements OnInit, OnDestroy\r\n{\r\n taxCategory$: Observable<TaxCategoryFragment>;\r\n detailForm: FormGroup;\r\n customFields: CustomFieldConfig[];\r\n readonly updatePermission = [Permission.UpdateSettings, Permission.UpdateTaxCategory];\r\n\r\n private taxCondition: ConfigurableOperation;\r\n private taxAction: ConfigurableOperation;\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('TaxCategory');\r\n this.detailForm = this.formBuilder.group({\r\n name: ['', Validators.required],\r\n isDefault: false,\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.taxCategory$ = this.entity$;\r\n }\r\n\r\n ngOnDestroy() {\r\n this.destroy();\r\n }\r\n\r\n saveButtonEnabled(): boolean {\r\n return this.detailForm.dirty && this.detailForm.valid;\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 = {\r\n name: formValue.name,\r\n isDefault: formValue.isDefault,\r\n customFields: formValue.customFields,\r\n } as CreateTaxCategoryInput;\r\n this.dataService.settings.createTaxCategory(input).subscribe(\r\n data => {\r\n this.notificationService.success(_('common.notify-create-success'), {\r\n entity: 'TaxCategory',\r\n });\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n this.router.navigate(['../', data.createTaxCategory.id], { relativeTo: this.route });\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-create-error'), {\r\n entity: 'TaxCategory',\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.taxCategory$\r\n .pipe(\r\n take(1),\r\n mergeMap(taxCategory => {\r\n const input = {\r\n id: taxCategory.id,\r\n name: formValue.name,\r\n isDefault: formValue.isDefault,\r\n customFields: formValue.customFields,\r\n } as UpdateTaxCategoryInput;\r\n return this.dataService.settings.updateTaxCategory(input);\r\n }),\r\n )\r\n .subscribe(\r\n data => {\r\n this.notificationService.success(_('common.notify-update-success'), {\r\n entity: 'TaxCategory',\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: 'TaxCategory',\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: TaxCategoryFragment, languageCode: LanguageCode): void {\r\n this.detailForm.patchValue({\r\n name: entity.name,\r\n isDefault: entity.isDefault,\r\n });\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","<vdr-action-bar>\r\n <vdr-ab-left>\r\n <vdr-entity-info [entity]=\"entity$ | async\"></vdr-entity-info>\r\n </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"tax-category-detail\"></vdr-action-bar-items>\r\n <button\r\n class=\"btn btn-primary\"\r\n *ngIf=\"isNew$ | async; else updateButton\"\r\n (click)=\"create()\"\r\n [disabled]=\"!saveButtonEnabled()\"\r\n >\r\n {{ 'common.create' | translate }}\r\n </button>\r\n <ng-template #updateButton>\r\n <button\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n [disabled]=\"!saveButtonEnabled()\"\r\n *vdrIfPermissions=\"updatePermission\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </ng-template>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<form class=\"form\" [formGroup]=\"detailForm\">\r\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\r\n <input\r\n id=\"name\"\r\n type=\"text\"\r\n formControlName=\"name\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'common.default-tax-category' | translate\" for=\"isDefault\">\r\n <clr-toggle-wrapper>\r\n <input\r\n type=\"checkbox\"\r\n clrToggle\r\n id=\"isDefault\"\r\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\r\n formControlName=\"isDefault\"\r\n />\r\n </clr-toggle-wrapper>\r\n </vdr-form-field>\r\n <section formGroupName=\"customFields\" *ngIf=\"customFields.length\">\r\n <label>{{ 'common.custom-fields' | translate }}</label>\r\n <vdr-tabbed-custom-fields\r\n entityName=\"TaxCategory\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n ></vdr-tabbed-custom-fields>\r\n </section>\r\n <vdr-custom-detail-component-host\r\n locationId=\"tax-category-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n</form>\r\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n DataService,\r\n DeletionResult,\r\n GetTaxCategoriesQuery,\r\n ModalService,\r\n NotificationService,\r\n QueryResult,\r\n TaxCategoryFragment,\r\n} from '@vendure/admin-ui/core';\r\nimport { EMPTY, Observable } from 'rxjs';\r\nimport { map, switchMap } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'vdr-tax-list',\r\n templateUrl: './tax-category-list.component.html',\r\n styleUrls: ['./tax-category-list.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class TaxCategoryListComponent {\r\n taxCategories$: Observable<TaxCategoryFragment[]>;\r\n private queryResult: QueryResult<GetTaxCategoriesQuery>;\r\n\r\n constructor(\r\n private dataService: DataService,\r\n private notificationService: NotificationService,\r\n private modalService: ModalService,\r\n ) {\r\n this.queryResult = this.dataService.settings.getTaxCategories();\r\n this.taxCategories$ = this.queryResult.mapStream(data => data.taxCategories);\r\n }\r\n\r\n deleteTaxCategory(taxCategory: TaxCategoryFragment) {\r\n return this.modalService\r\n .dialog({\r\n title: _('settings.confirm-delete-tax-category'),\r\n body: taxCategory.name,\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(res => (res ? this.dataService.settings.deleteTaxCategory(taxCategory.id) : EMPTY)),\r\n map(res => res.deleteTaxCategory),\r\n )\r\n .subscribe(\r\n res => {\r\n if (res.result === DeletionResult.DELETED) {\r\n this.notificationService.success(_('common.notify-delete-success'), {\r\n entity: 'TaxRate',\r\n });\r\n this.queryResult.ref.refetch();\r\n } else {\r\n this.notificationService.error(res.message || _('common.notify-delete-error'), {\r\n entity: 'TaxRate',\r\n });\r\n }\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-delete-error'), {\r\n entity: 'TaxRate',\r\n });\r\n },\r\n );\r\n }\r\n}\r\n","<vdr-action-bar>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"tax-category-list\"></vdr-action-bar-items>\r\n <a class=\"btn btn-primary\" [routerLink]=\"['./create']\" *vdrIfPermissions=\"['CreateSettings', 'CreateTaxCategory']\">\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'settings.create-new-tax-category' | translate }}\r\n </a>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<vdr-data-table [items]=\"taxCategories$ | async\">\r\n <vdr-dt-column>{{ 'common.name' | translate }}</vdr-dt-column>\r\n <vdr-dt-column></vdr-dt-column>\r\n <vdr-dt-column></vdr-dt-column>\r\n <vdr-dt-column></vdr-dt-column>\r\n <ng-template let-taxCategory=\"item\">\r\n <td class=\"left align-middle\">{{ taxCategory.name }}</td>\r\n <td class=\"left align-middle\">\r\n <vdr-chip *ngIf=\"taxCategory.isDefault\">{{ 'common.default-tax-category' | translate }}</vdr-chip>\r\n </td>\r\n <td class=\"right align-middle\">\r\n <vdr-table-row-action\r\n iconShape=\"edit\"\r\n [label]=\"'common.edit' | translate\"\r\n [linkTo]=\"['./', taxCategory.id]\"\r\n ></vdr-table-row-action>\r\n </td>\r\n <td class=\"right align-middle\">\r\n <vdr-dropdown>\r\n <button type=\"button\" class=\"btn btn-link btn-sm\" vdrDropdownTrigger>\r\n {{ 'common.actions' | translate }}\r\n <clr-icon shape=\"caret down\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button\r\n type=\"button\"\r\n class=\"delete-button\"\r\n (click)=\"deleteTaxCategory(taxCategory)\"\r\n [disabled]=\"!(['DeleteSettings', 'DeleteTaxCategory'] | hasPermission)\"\r\n vdrDropdownItem\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'common.delete' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </td>\r\n </ng-template>\r\n</vdr-data-table>\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { 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 CreateTaxRateInput,\r\n CustomerGroup,\r\n CustomFieldConfig,\r\n DataService,\r\n GetZonesQuery,\r\n LanguageCode,\r\n NotificationService,\r\n Permission,\r\n ServerConfigService,\r\n TaxCategoryFragment,\r\n TaxRate,\r\n TaxRateFragment,\r\n UpdateTaxRateInput,\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-tax-rate-detail',\r\n templateUrl: './tax-rate-detail.component.html',\r\n styleUrls: ['./tax-rate-detail.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class TaxRateDetailComponent\r\n extends BaseDetailComponent<TaxRateFragment>\r\n implements OnInit, OnDestroy\r\n{\r\n taxCategories$: Observable<TaxCategoryFragment[]>;\r\n zones$: Observable<GetZonesQuery['zones']>;\r\n groups$: Observable<CustomerGroup[]>;\r\n detailForm: FormGroup;\r\n customFields: CustomFieldConfig[];\r\n readonly updatePermission = [Permission.UpdateSettings, Permission.UpdateTaxRate];\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('TaxRate');\r\n this.detailForm = this.formBuilder.group({\r\n name: ['', Validators.required],\r\n enabled: [true],\r\n value: [0, Validators.required],\r\n taxCategoryId: [''],\r\n zoneId: [''],\r\n customerGroupId: [''],\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.taxCategories$ = this.dataService.settings\r\n .getTaxCategories()\r\n .mapSingle(data => data.taxCategories);\r\n this.zones$ = this.dataService.settings.getZones().mapSingle(data => data.zones);\r\n }\r\n\r\n ngOnDestroy() {\r\n this.destroy();\r\n }\r\n\r\n saveButtonEnabled(): boolean {\r\n return this.detailForm.dirty && this.detailForm.valid;\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 = {\r\n name: formValue.name,\r\n enabled: formValue.enabled,\r\n value: formValue.value,\r\n categoryId: formValue.taxCategoryId,\r\n zoneId: formValue.zoneId,\r\n customerGroupId: formValue.customerGroupId,\r\n customFields: formValue.customFields,\r\n } as CreateTaxRateInput;\r\n this.dataService.settings.createTaxRate(input).subscribe(\r\n data => {\r\n this.notificationService.success(_('common.notify-create-success'), {\r\n entity: 'TaxRate',\r\n });\r\n this.detailForm.markAsPristine();\r\n this.changeDetector.markForCheck();\r\n this.router.navigate(['../', data.createTaxRate.id], { relativeTo: this.route });\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-create-error'), {\r\n entity: 'TaxRate',\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.entity$\r\n .pipe(\r\n take(1),\r\n mergeMap(taxRate => {\r\n const input = {\r\n id: taxRate.id,\r\n name: formValue.name,\r\n enabled: formValue.enabled,\r\n value: formValue.value,\r\n categoryId: formValue.taxCategoryId,\r\n zoneId: formValue.zoneId,\r\n customerGroupId: formValue.customerGroupId,\r\n customFields: formValue.customFields,\r\n } as UpdateTaxRateInput;\r\n return this.dataService.settings.updateTaxRate(input);\r\n }),\r\n )\r\n .subscribe(\r\n data => {\r\n this.notificationService.success(_('common.notify-update-success'), {\r\n entity: 'TaxRate',\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: 'TaxRate',\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: TaxRateFragment, languageCode: LanguageCode): void {\r\n this.detailForm.patchValue({\r\n name: entity.name,\r\n enabled: entity.enabled,\r\n value: entity.value,\r\n taxCategoryId: entity.category ? entity.category.id : '',\r\n zoneId: entity.zone ? entity.zone.id : '',\r\n customerGroupId: entity.customerGroup ? entity.customerGroup.id : '',\r\n });\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","<vdr-action-bar>\r\n <vdr-ab-left>\r\n <vdr-entity-info [entity]=\"entity$ | async\"></vdr-entity-info>\r\n </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"tax-rate-detail\"></vdr-action-bar-items>\r\n <button\r\n class=\"btn btn-primary\"\r\n *ngIf=\"isNew$ | async; else updateButton\"\r\n (click)=\"create()\"\r\n [disabled]=\"!saveButtonEnabled()\"\r\n >\r\n {{ 'common.create' | translate }}\r\n </button>\r\n <ng-template #updateButton>\r\n <button\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n [disabled]=\"!saveButtonEnabled()\"\r\n *vdrIfPermissions=\"updatePermission\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </ng-template>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<form class=\"form\" [formGroup]=\"detailForm\">\r\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\r\n <input\r\n id=\"name\"\r\n type=\"text\"\r\n formControlName=\"name\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'common.enabled' | translate\" for=\"enabled\">\r\n <clr-toggle-wrapper>\r\n <input\r\n type=\"checkbox\"\r\n clrToggle\r\n id=\"enabled\"\r\n formControlName=\"enabled\"\r\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </clr-toggle-wrapper>\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'settings.rate' | translate\" for=\"value\">\r\n <vdr-affixed-input suffix=\"%\">\r\n <input\r\n id=\"value\"\r\n type=\"number\"\r\n step=\"0.1\"\r\n formControlName=\"value\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </vdr-affixed-input>\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'settings.tax-category' | translate\" for=\"taxCategoryId\">\r\n <select\r\n clrSelect\r\n name=\"taxCategoryId\"\r\n formControlName=\"taxCategoryId\"\r\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\r\n >\r\n <option *ngFor=\"let taxCategory of taxCategories$ | async\" [value]=\"taxCategory.id\">\r\n {{ taxCategory.name }}\r\n </option>\r\n </select>\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'settings.zone' | translate\" for=\"zoneId\">\r\n <select\r\n clrSelect\r\n name=\"zoneId\"\r\n formControlName=\"zoneId\"\r\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\r\n >\r\n <option *ngFor=\"let zone of zones$ | async\" [value]=\"zone.id\">{{ zone.name }}</option>\r\n </select>\r\n </vdr-form-field>\r\n <section formGroupName=\"customFields\" *ngIf=\"customFields.length\">\r\n <label>{{ 'common.custom-fields' | translate }}</label>\r\n <vdr-tabbed-custom-fields\r\n entityName=\"TaxRate\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n ></vdr-tabbed-custom-fields>\r\n </section>\r\n <vdr-custom-detail-component-host\r\n locationId=\"tax-rate-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n</form>\r\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n BaseListComponent,\r\n DataService,\r\n DeletionResult,\r\n GetTaxRateListQuery,\r\n ItemOf,\r\n ModalService,\r\n NotificationService,\r\n} from '@vendure/admin-ui/core';\r\nimport { EMPTY } from 'rxjs';\r\nimport { map, switchMap } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'vdr-tax-rate-list',\r\n templateUrl: './tax-rate-list.component.html',\r\n styleUrls: ['./tax-rate-list.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class TaxRateListComponent extends BaseListComponent<\r\n GetTaxRateListQuery,\r\n ItemOf<GetTaxRateListQuery, 'taxRates'>\r\n> {\r\n constructor(\r\n private modalService: ModalService,\r\n private notificationService: NotificationService,\r\n private dataService: DataService,\r\n router: Router,\r\n route: ActivatedRoute,\r\n ) {\r\n super(router, route);\r\n super.setQueryFn(\r\n (...args: any[]) => this.dataService.settings.getTaxRates(...args),\r\n data => data.taxRates,\r\n );\r\n }\r\n\r\n deleteTaxRate(taxRate: ItemOf<GetTaxRateListQuery, 'taxRates'>) {\r\n return this.modalService\r\n .dialog({\r\n title: _('settings.confirm-delete-tax-rate'),\r\n body: taxRate.name,\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(res => (res ? this.dataService.settings.deleteTaxRate(taxRate.id) : EMPTY)),\r\n map(res => res.deleteTaxRate),\r\n )\r\n .subscribe(\r\n res => {\r\n if (res.result === DeletionResult.DELETED) {\r\n this.notificationService.success(_('common.notify-delete-success'), {\r\n entity: 'TaxRate',\r\n });\r\n this.refresh();\r\n } else {\r\n this.notificationService.error(res.message || _('common.notify-delete-error'), {\r\n entity: 'TaxRate',\r\n });\r\n }\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-delete-error'), {\r\n entity: 'TaxRate',\r\n });\r\n },\r\n );\r\n }\r\n}\r\n","<vdr-action-bar>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"tax-rate-list\"></vdr-action-bar-items>\r\n <a class=\"btn btn-primary\" [routerLink]=\"['./create']\" *vdrIfPermissions=\"['CreateSettings', 'CreateTaxRate']\">\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'settings.create-new-tax-rate' | translate }}\r\n </a>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<vdr-data-table\r\n [items]=\"items$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n>\r\n <vdr-dt-column>{{ 'common.name' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'settings.tax-category' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'settings.zone' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'settings.tax-rate' | translate }}</vdr-dt-column>\r\n <vdr-dt-column></vdr-dt-column>\r\n <vdr-dt-column></vdr-dt-column>\r\n <ng-template let-taxRate=\"item\">\r\n <td class=\"left align-middle\">{{ taxRate.name }}</td>\r\n <td class=\"left align-middle\">{{ taxRate.category.name }}</td>\r\n <td class=\"left align-middle\">{{ taxRate.zone.name }}</td>\r\n <td class=\"left align-middle\">{{ taxRate.value }}%</td>\r\n <td class=\"right align-middle\">\r\n <vdr-table-row-action\r\n iconShape=\"edit\"\r\n [label]=\"'common.edit' | translate\"\r\n [linkTo]=\"['./', taxRate.id]\"\r\n ></vdr-table-row-action>\r\n </td>\r\n <td class=\"right align-middle\">\r\n <vdr-dropdown>\r\n <button type=\"button\" class=\"btn btn-link btn-sm\" vdrDropdownTrigger>\r\n {{ 'common.actions' | translate }}\r\n <clr-icon shape=\"caret down\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button\r\n type=\"button\"\r\n class=\"delete-button\"\r\n (click)=\"deleteTaxRate(taxRate)\"\r\n [disabled]=\"!(['DeleteSettings', 'DeleteTaxRate'] | hasPermission)\"\r\n vdrDropdownItem\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'common.delete' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </td>\r\n </ng-template>\r\n</vdr-data-table>\r\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { CreateZoneInput, CustomFieldConfig, Dialog, ServerConfigService } from '@vendure/admin-ui/core';\r\n\r\n@Component({\r\n selector: 'vdr-zone-detail-dialog',\r\n templateUrl: './zone-detail-dialog.component.html',\r\n styleUrls: ['./zone-detail-dialog.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ZoneDetailDialogComponent implements Dialog<CreateZoneInput>, OnInit {\r\n zone: { id?: string; name: string; customFields?: { [name: string]: any } };\r\n resolveWith: (result?: CreateZoneInput) => void;\r\n\r\n customFields: CustomFieldConfig[];\r\n form: FormGroup;\r\n\r\n constructor(private serverConfigService: ServerConfigService, private formBuilder: FormBuilder) {\r\n this.customFields = this.serverConfigService.getCustomFieldsFor('Zone');\r\n }\r\n\r\n ngOnInit() {\r\n this.form = this.formBuilder.group({\r\n name: [this.zone.name, Validators.required],\r\n customFields: this.formBuilder.group(\r\n this.customFields.reduce((hash, field) => ({ ...hash, [field.name]: '' }), {}),\r\n ),\r\n });\r\n if (this.customFields.length) {\r\n const customFieldsGroup = this.form.get('customFields') as FormGroup;\r\n\r\n for (const fieldDef of this.customFields) {\r\n const key = fieldDef.name;\r\n const value = this.zone.customFields?.[key];\r\n const control = customFieldsGroup.get(key);\r\n if (control) {\r\n control.patchValue(value);\r\n }\r\n }\r\n }\r\n }\r\n\r\n cancel() {\r\n this.resolveWith();\r\n }\r\n\r\n save() {\r\n this.resolveWith(this.form.value);\r\n }\r\n}\r\n","<ng-template vdrDialogTitle>\r\n <span *ngIf=\"zone.id\">{{ 'settings.update-zone' | translate }}</span>\r\n <span *ngIf=\"!zone.id\">{{ 'settings.create-zone' | translate }}</span>\r\n</ng-template>\r\n<form [formGroup]=\"form\">\r\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\r\n <input\r\n id=\"name\"\r\n type=\"text\"\r\n formControlName=\"name\"\r\n [readonly]=\"!(['UpdateSettings', 'UpdateZone'] | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-tabbed-custom-fields\r\n entityName=\"Zone\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"form.get('customFields')\"\r\n [readonly]=\"!(['UpdateSettings', 'UpdateZone'] | hasPermission)\"\r\n ></vdr-tabbed-custom-fields>\r\n</form>\r\n\r\n<ng-template vdrDialogButtons>\r\n <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\r\n <button type=\"submit\" (click)=\"save()\" [disabled]=\"form.invalid\" class=\"btn btn-primary\">\r\n <span *ngIf=\"zone.id\">{{ 'settings.update-zone' | translate }}</span>\r\n <span *ngIf=\"!zone.id\">{{ 'settings.create-zone' | translate }}</span>\r\n </button>\r\n</ng-template>\r\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n DataService,\r\n DeletionResult,\r\n GetZonesQuery,\r\n LanguageCode,\r\n ModalService,\r\n NotificationService,\r\n ServerConfigService,\r\n} from '@vendure/admin-ui/core';\r\nimport { combineLatest, EMPTY, Observable, of } from 'rxjs';\r\nimport { distinctUntilChanged, map, mapTo, switchMap, tap } from 'rxjs/operators';\r\n\r\nimport { AddCountryToZoneDialogComponent } from '../add-country-to-zone-dialog/add-country-to-zone-dialog.component';\r\nimport { ZoneDetailDialogComponent } from '../zone-detail-dialog/zone-detail-dialog.component';\r\n\r\n@Component({\r\n selector: 'vdr-zone-list',\r\n templateUrl: './zone-list.component.html',\r\n styleUrls: ['./zone-list.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ZoneListComponent implements OnInit {\r\n activeZone$: Observable<GetZonesQuery['zones'][number] | undefined>;\r\n zones$: Observable<GetZonesQuery['zones']>;\r\n members$: Observable<GetZonesQuery['zones'][number]['members']>;\r\n availableLanguages$: Observable<LanguageCode[]>;\r\n contentLanguage$: Observable<LanguageCode>;\r\n selectedMemberIds: string[] = [];\r\n\r\n constructor(\r\n private dataService: DataService,\r\n private notificationService: NotificationService,\r\n private modalService: ModalService,\r\n private route: ActivatedRoute,\r\n private router: Router,\r\n private serverConfigService: ServerConfigService,\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n const zonesQueryRef = this.dataService.settings.getZones().ref;\r\n this.zones$ = zonesQueryRef.valueChanges.pipe(map(data => data.data.zones));\r\n const activeZoneId$ = this.route.paramMap.pipe(\r\n map(pm => pm.get('contents')),\r\n distinctUntilChanged(),\r\n tap(() => (this.selectedMemberIds = [])),\r\n );\r\n this.activeZone$ = combineLatest(this.zones$, activeZoneId$).pipe(\r\n map(([zones, activeZoneId]) => {\r\n if (activeZoneId) {\r\n return zones.find(z => z.id === activeZoneId);\r\n }\r\n }),\r\n );\r\n this.availableLanguages$ = this.serverConfigService.getAvailableLanguages();\r\n this.contentLanguage$ = this.dataService.client\r\n .uiState()\r\n .mapStream(({ uiState }) => uiState.contentLanguage)\r\n .pipe(tap(() => zonesQueryRef.refetch()));\r\n }\r\n\r\n setLanguage(code: LanguageCode) {\r\n this.dataService.client.setContentLanguage(code).subscribe();\r\n }\r\n\r\n create() {\r\n this.modalService\r\n .fromComponent(ZoneDetailDialogComponent, { locals: { zone: { name: '' } } })\r\n .pipe(\r\n switchMap(result =>\r\n result ? this.dataService.settings.createZone({ ...result, memberIds: [] }) : EMPTY,\r\n ),\r\n // refresh list\r\n switchMap(() => this.dataService.settings.getZones().single$),\r\n )\r\n .subscribe(\r\n () => {\r\n this.notificationService.success(_('common.notify-create-success'), {\r\n entity: 'Zone',\r\n });\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-create-error'), {\r\n entity: 'Zone',\r\n });\r\n },\r\n );\r\n }\r\n\r\n delete(zoneId: string) {\r\n this.modalService\r\n .dialog({\r\n title: _('catalog.confirm-delete-zone'),\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 => (response ? this.dataService.settings.deleteZone(zoneId) : EMPTY)),\r\n\r\n switchMap(result => {\r\n if (result.deleteZone.result === DeletionResult.DELETED) {\r\n // refresh list\r\n return this.dataService.settings\r\n .getZones()\r\n .mapSingle(() => ({ errorMessage: false }));\r\n } else {\r\n return of({ errorMessage: result.deleteZone.message });\r\n }\r\n }),\r\n )\r\n .subscribe(\r\n result => {\r\n if (typeof result.errorMessage === 'string') {\r\n this.notificationService.error(result.errorMessage);\r\n } else {\r\n this.notificationService.success(_('common.notify-delete-success'), {\r\n entity: 'Zone',\r\n });\r\n }\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-delete-error'), {\r\n entity: 'Zone',\r\n });\r\n },\r\n );\r\n }\r\n\r\n update(zone: GetZonesQuery['zones'][number]) {\r\n this.modalService\r\n .fromComponent(ZoneDetailDialogComponent, { locals: { zone } })\r\n .pipe(\r\n switchMap(result =>\r\n result ? this.dataService.settings.updateZone({ id: zone.id, ...result }) : EMPTY,\r\n ),\r\n )\r\n .subscribe(\r\n () => {\r\n this.notificationService.success(_('common.notify-update-success'), {\r\n entity: 'Zone',\r\n });\r\n },\r\n err => {\r\n this.notificationService.error(_('common.notify-update-error'), {\r\n entity: 'Zone',\r\n });\r\n },\r\n );\r\n }\r\n\r\n closeMembers() {\r\n const params = { ...this.route.snapshot.params };\r\n delete params.contents;\r\n this.router.navigate(['./', params], { relativeTo: this.route, queryParamsHandling: 'preserve' });\r\n }\r\n\r\n addToZone(zone: GetZonesQuery['zones'][number]) {\r\n this.modalService\r\n .fromComponent(AddCountryToZoneDialogComponent, {\r\n locals: {\r\n zoneName: zone.name,\r\n currentMembers: zone.members,\r\n },\r\n size: 'md',\r\n })\r\n .pipe(\r\n switchMap(memberIds =>\r\n memberIds\r\n ? this.dataService.settings\r\n .addMembersToZone(zone.id, memberIds)\r\n .pipe(mapTo(memberIds))\r\n : EMPTY,\r\n ),\r\n )\r\n .subscribe({\r\n next: result => {\r\n this.notificationService.success(_(`settings.add-countries-to-zone-success`), {\r\n countryCount: result.length,\r\n zoneName: zone.name,\r\n });\r\n },\r\n error: err => {\r\n this.notificationService.error(err);\r\n },\r\n });\r\n }\r\n\r\n removeFromZone(zone: GetZonesQuery['zones'][number], memberIds: string[]) {\r\n this.dataService.settings.removeMembersFromZone(zone.id, memberIds).subscribe({\r\n complete: () => {\r\n this.notificationService.success(_(`settings.remove-countries-from-zone-success`), {\r\n countryCount: memberIds.length,\r\n zoneName: zone.name,\r\n });\r\n },\r\n });\r\n }\r\n}\r\n","<vdr-action-bar>\r\n <vdr-ab-left>\r\n <vdr-language-selector\r\n [availableLanguageCodes]=\"availableLanguages$ | async\"\r\n [currentLanguageCode]=\"contentLanguage$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"zone-list\"></vdr-action-bar-items>\r\n <button\r\n class=\"btn btn-primary\"\r\n *vdrIfPermissions=\"['CreateSettings', 'CreateZone']\"\r\n (click)=\"create()\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'settings.create-new-zone' | translate }}\r\n </button>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n<div class=\"zone-wrapper\">\r\n <div class=\"zone-list\">\r\n <table class=\"table mt0\">\r\n <tbody>\r\n <tr\r\n *ngFor=\"let zone of zones$ | async\"\r\n [class.active]=\"zone.id === (activeZone$ | async)?.id\"\r\n >\r\n <td class=\"left align-middle\"><vdr-entity-info [entity]=\"zone\"></vdr-entity-info></td>\r\n <td class=\"left align-middle\">\r\n <vdr-chip [colorFrom]=\"zone.name\">{{ zone.name }}</vdr-chip>\r\n </td>\r\n <td class=\"text-right align-middle\">\r\n <a\r\n class=\"btn btn-link btn-sm\"\r\n [routerLink]=\"['./', { contents: zone.id }]\"\r\n queryParamsHandling=\"preserve\"\r\n >\r\n <clr-icon shape=\"view-list\"></clr-icon>\r\n {{ 'settings.view-zone-members' | translate }}\r\n </a>\r\n </td>\r\n <td class=\"align-middle\">\r\n <button class=\"btn btn-link btn-sm\" (click)=\"update(zone)\">\r\n <clr-icon shape=\"edit\"></clr-icon>\r\n {{ 'common.edit' | translate }}\r\n </button>\r\n </td>\r\n <td class=\"align-middle\">\r\n <vdr-dropdown>\r\n <button type=\"button\" class=\"btn btn-link btn-sm\" vdrDropdownTrigger>\r\n {{ 'common.actions' | translate }}\r\n <clr-icon shape=\"caret down\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button\r\n class=\"button\"\r\n vdrDropdownItem\r\n (click)=\"delete(zone.id)\"\r\n [disabled]=\"!(['DeleteSettings', 'DeleteZone'] | hasPermission)\"\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'common.delete' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"zone-members\" [class.expanded]=\"activeZone$ | async\">\r\n <ng-container *ngIf=\"activeZone$ | async as activeZone\">\r\n <vdr-zone-member-list\r\n [members]=\"activeZone.members\"\r\n [selectedMemberIds]=\"selectedMemberIds\"\r\n (selectionChange)=\"selectedMemberIds = $event\"\r\n >\r\n <div *vdrZoneMemberListHeader>\r\n <div class=\"flex\">\r\n <div class=\"header-title-row\">\r\n {{ activeZone.name }} ({{ activeZone.members.length }})\r\n </div>\r\n <div class=\"flex-spacer\"></div>\r\n <button type=\"button\" class=\"close-button\" (click)=\"closeMembers()\">\r\n <clr-icon shape=\"close\"></clr-icon>\r\n </button>\r\n </div>\r\n <div class=\"controls\">\r\n <vdr-dropdown>\r\n <button\r\n type=\"button\"\r\n class=\"btn btn-secondary btn-sm\"\r\n vdrDropdownTrigger\r\n [disabled]=\"selectedMemberIds.length === 0\"\r\n >\r\n {{ 'common.with-selected' | translate: { count: selectedMemberIds.length } }}\r\n <clr-icon shape=\"caret down\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button\r\n type=\"button\"\r\n class=\"delete-button\"\r\n (click)=\"removeFromZone(activeZone, selectedMemberIds)\"\r\n vdrDropdownItem\r\n [disabled]=\"!(['UpdateSettings', 'UpdateZone'] | hasPermission)\"\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'settings.remove-from-zone' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n <button class=\"btn btn-secondary btn-sm\" (click)=\"addToZone(activeZone)\">\r\n {{ 'settings.add-countries-to-zone' | translate: { zoneName: activeZone.name } }}\r\n </button>\r\n </div>\r\n </div>\r\n <div *vdrZoneMemberControls=\"let member = member\">\r\n <vdr-dropdown>\r\n <button type=\"button\" class=\"btn btn-link btn-sm\" vdrDropdownTrigger>\r\n {{ 'common.actions' | translate }}\r\n <clr-icon shape=\"caret down\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <a\r\n type=\"button\"\r\n [routerLink]=\"['/settings', 'countries', member.id]\"\r\n vdrDropdownItem\r\n >\r\n <clr-icon shape=\"edit\"></clr-icon>\r\n {{ 'common.edit' | translate }}\r\n </a>\r\n <button\r\n type=\"button\"\r\n class=\"delete-button\"\r\n (click)=\"removeFromZone(activeZone, [member.id])\"\r\n vdrDropdownItem\r\n [disabled]=\"!(['UpdateSettings', 'UpdateZone'] | hasPermission)\"\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'settings.remove-from-zone' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n </vdr-zone-member-list>\r\n </ng-container>\r\n </div>\r\n</div>\r\n","import { Injectable } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { AdministratorFragment, BaseEntityResolver, DataService } from '@vendure/admin-ui/core';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class AdministratorResolver extends BaseEntityResolver<AdministratorFragment> {\r\n constructor(router: Router, dataService: DataService) {\r\n super(\r\n router,\r\n {\r\n __typename: 'Administrator' as 'Administrator',\r\n id: '',\r\n createdAt: '',\r\n updatedAt: '',\r\n emailAddress: '',\r\n firstName: '',\r\n lastName: '',\r\n user: { roles: [] } as any,\r\n },\r\n id => dataService.administrator.getAdministrator(id).mapStream(data => data.administrator),\r\n );\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport {\r\n BaseEntityResolver,\r\n ChannelFragment,\r\n CurrencyCode,\r\n DataService,\r\n getDefaultUiLanguage,\r\n} 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 ChannelResolver extends BaseEntityResolver<ChannelFragment> {\r\n constructor(router: Router, dataService: DataService) {\r\n super(\r\n router,\r\n {\r\n __typename: 'Channel',\r\n id: '',\r\n createdAt: '',\r\n updatedAt: '',\r\n code: '',\r\n token: '',\r\n pricesIncludeTax: false,\r\n currencyCode: CurrencyCode.USD,\r\n defaultLanguageCode: getDefaultUiLanguage(),\r\n defaultShippingZone: {} as any,\r\n defaultTaxZone: {} as any,\r\n },\r\n id => dataService.settings.getChannel(id).mapStream(data => data.channel),\r\n );\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { BaseEntityResolver, CountryFragment, DataService } 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 CountryResolver extends BaseEntityResolver<CountryFragment> {\r\n constructor(router: Router, dataService: DataService) {\r\n super(\r\n router,\r\n {\r\n __typename: 'Country',\r\n id: '',\r\n createdAt: '',\r\n updatedAt: '',\r\n code: '',\r\n name: '',\r\n enabled: false,\r\n translations: [],\r\n },\r\n id => dataService.settings.getCountry(id).mapStream(data => data.country),\r\n );\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { BaseEntityResolver, DataService, GetGlobalSettingsQuery } from '@vendure/admin-ui/core';\r\n\r\n/**\r\n * Resolves the global settings.\r\n */\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class GlobalSettingsResolver extends BaseEntityResolver<GetGlobalSettingsQuery['globalSettings']> {\r\n constructor(router: Router, dataService: DataService) {\r\n super(\r\n router,\r\n // we will never be creating a new GlobalSettings entity, so this part is not used.\r\n {} as any,\r\n () => dataService.settings.getGlobalSettings().mapStream(data => data.globalSettings),\r\n );\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { BaseEntityResolver, DataService, PaymentMethodFragment } 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 PaymentMethodResolver extends BaseEntityResolver<PaymentMethodFragment> {\r\n constructor(router: Router, dataService: DataService) {\r\n super(\r\n router,\r\n {\r\n __typename: 'PaymentMethod',\r\n id: '',\r\n createdAt: '',\r\n updatedAt: '',\r\n name: '',\r\n code: '',\r\n description: '',\r\n enabled: true,\r\n checker: undefined as any,\r\n handler: undefined as any,\r\n },\r\n id => dataService.settings.getPaymentMethod(id).mapStream(data => data.paymentMethod),\r\n );\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { AdministratorFragment, BaseEntityResolver, DataService } from '@vendure/admin-ui/core';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ProfileResolver extends BaseEntityResolver<AdministratorFragment> {\r\n constructor(router: Router, dataService: DataService) {\r\n super(\r\n router,\r\n {\r\n __typename: 'Administrator' as 'Administrator',\r\n id: '',\r\n createdAt: '',\r\n updatedAt: '',\r\n emailAddress: '',\r\n firstName: '',\r\n lastName: '',\r\n user: { roles: [] } as any,\r\n },\r\n id =>\r\n dataService.administrator\r\n .getActiveAdministrator()\r\n .mapStream(data => data.activeAdministrator),\r\n );\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { BaseEntityResolver, DataService, RoleFragment } from '@vendure/admin-ui/core';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class RoleResolver extends BaseEntityResolver<RoleFragment> {\r\n constructor(router: Router, dataService: DataService) {\r\n super(\r\n router,\r\n {\r\n __typename: 'Role' as 'Role',\r\n id: '',\r\n createdAt: '',\r\n updatedAt: '',\r\n code: '',\r\n description: '',\r\n permissions: [],\r\n channels: [],\r\n },\r\n id => dataService.administrator.getRole(id).mapStream(data => data.role),\r\n );\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { BaseEntityResolver, DataService, ShippingMethodFragment } 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 ShippingMethodResolver extends BaseEntityResolver<ShippingMethodFragment> {\r\n constructor(router: Router, dataService: DataService) {\r\n super(\r\n router,\r\n {\r\n __typename: 'ShippingMethod',\r\n createdAt: '',\r\n updatedAt: '',\r\n id: '',\r\n code: '',\r\n name: '',\r\n description: '',\r\n fulfillmentHandlerCode: undefined as any,\r\n checker: undefined as any,\r\n calculator: undefined as any,\r\n translations: [],\r\n },\r\n id => dataService.shippingMethod.getShippingMethod(id).mapStream(data => data.shippingMethod),\r\n );\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { BaseEntityResolver, DataService, TaxCategoryFragment } 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 TaxCategoryResolver extends BaseEntityResolver<TaxCategoryFragment> {\r\n constructor(router: Router, dataService: DataService) {\r\n super(\r\n router,\r\n {\r\n __typename: 'TaxCategory',\r\n id: '',\r\n createdAt: '',\r\n updatedAt: '',\r\n name: '',\r\n isDefault: false,\r\n },\r\n id => dataService.settings.getTaxCategory(id).mapStream(data => data.taxCategory),\r\n );\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { BaseEntityResolver, DataService, TaxRateFragment } 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 TaxRateResolver extends BaseEntityResolver<TaxRateFragment> {\r\n constructor(router: Router, dataService: DataService) {\r\n super(\r\n router,\r\n {\r\n __typename: 'TaxRate',\r\n id: '',\r\n createdAt: '',\r\n updatedAt: '',\r\n name: '',\r\n value: 0,\r\n enabled: true,\r\n category: {} as any,\r\n zone: {} as any,\r\n customerGroup: null,\r\n },\r\n id => dataService.settings.getTaxRate(id).mapStream(data => data.taxRate),\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 {\r\n Administrator,\r\n CanDeactivateDetailGuard,\r\n Channel,\r\n CountryFragment,\r\n createResolveData,\r\n detailBreadcrumb,\r\n PaymentMethodFragment,\r\n Role,\r\n ShippingMethodFragment,\r\n TaxCategoryFragment,\r\n TaxRateFragment,\r\n} from '@vendure/admin-ui/core';\r\n\r\nimport { AdminDetailComponent } from './components/admin-detail/admin-detail.component';\r\nimport { AdministratorListComponent } from './components/administrator-list/administrator-list.component';\r\nimport { ChannelDetailComponent } from './components/channel-detail/channel-detail.component';\r\nimport { ChannelListComponent } from './components/channel-list/channel-list.component';\r\nimport { CountryDetailComponent } from './components/country-detail/country-detail.component';\r\nimport { CountryListComponent } from './components/country-list/country-list.component';\r\nimport { GlobalSettingsComponent } from './components/global-settings/global-settings.component';\r\nimport { PaymentMethodDetailComponent } from './components/payment-method-detail/payment-method-detail.component';\r\nimport { PaymentMethodListComponent } from './components/payment-method-list/payment-method-list.component';\r\nimport { ProfileComponent } from './components/profile/profile.component';\r\nimport { RoleDetailComponent } from './components/role-detail/role-detail.component';\r\nimport { RoleListComponent } from './components/role-list/role-list.component';\r\nimport { ShippingMethodDetailComponent } from './components/shipping-method-detail/shipping-method-detail.component';\r\nimport { ShippingMethodListComponent } from './components/shipping-method-list/shipping-method-list.component';\r\nimport { TaxCategoryDetailComponent } from './components/tax-category-detail/tax-category-detail.component';\r\nimport { TaxCategoryListComponent } from './components/tax-category-list/tax-category-list.component';\r\nimport { TaxRateDetailComponent } from './components/tax-rate-detail/tax-rate-detail.component';\r\nimport { TaxRateListComponent } from './components/tax-rate-list/tax-rate-list.component';\r\nimport { ZoneListComponent } from './components/zone-list/zone-list.component';\r\nimport { AdministratorResolver } from './providers/routing/administrator-resolver';\r\nimport { ChannelResolver } from './providers/routing/channel-resolver';\r\nimport { CountryResolver } from './providers/routing/country-resolver';\r\nimport { GlobalSettingsResolver } from './providers/routing/global-settings-resolver';\r\nimport { PaymentMethodResolver } from './providers/routing/payment-method-resolver';\r\nimport { ProfileResolver } from './providers/routing/profile-resolver';\r\nimport { RoleResolver } from './providers/routing/role-resolver';\r\nimport { ShippingMethodResolver } from './providers/routing/shipping-method-resolver';\r\nimport { TaxCategoryResolver } from './providers/routing/tax-category-resolver';\r\nimport { TaxRateResolver } from './providers/routing/tax-rate-resolver';\r\n\r\nexport const settingsRoutes: Route[] = [\r\n {\r\n path: 'profile',\r\n component: ProfileComponent,\r\n resolve: createResolveData(ProfileResolver),\r\n canDeactivate: [CanDeactivateDetailGuard],\r\n data: {\r\n breadcrumb: _('breadcrumb.profile'),\r\n },\r\n },\r\n {\r\n path: 'administrators',\r\n component: AdministratorListComponent,\r\n data: {\r\n breadcrumb: _('breadcrumb.administrators'),\r\n },\r\n },\r\n {\r\n path: 'administrators/:id',\r\n component: AdminDetailComponent,\r\n resolve: createResolveData(AdministratorResolver),\r\n canDeactivate: [CanDeactivateDetailGuard],\r\n data: { breadcrumb: administratorBreadcrumb },\r\n },\r\n {\r\n path: 'channels',\r\n component: ChannelListComponent,\r\n data: {\r\n breadcrumb: _('breadcrumb.channels'),\r\n },\r\n },\r\n {\r\n path: 'channels/:id',\r\n component: ChannelDetailComponent,\r\n resolve: createResolveData(ChannelResolver),\r\n canDeactivate: [CanDeactivateDetailGuard],\r\n data: { breadcrumb: channelBreadcrumb },\r\n },\r\n {\r\n path: 'roles',\r\n component: RoleListComponent,\r\n data: {\r\n breadcrumb: _('breadcrumb.roles'),\r\n },\r\n },\r\n {\r\n path: 'roles/:id',\r\n component: RoleDetailComponent,\r\n resolve: createResolveData(RoleResolver),\r\n canDeactivate: [CanDeactivateDetailGuard],\r\n data: { breadcrumb: roleBreadcrumb },\r\n },\r\n {\r\n path: 'tax-categories',\r\n component: TaxCategoryListComponent,\r\n data: {\r\n breadcrumb: _('breadcrumb.tax-categories'),\r\n },\r\n },\r\n {\r\n path: 'tax-categories/:id',\r\n component: TaxCategoryDetailComponent,\r\n resolve: createResolveData(TaxCategoryResolver),\r\n canDeactivate: [CanDeactivateDetailGuard],\r\n data: {\r\n breadcrumb: taxCategoryBreadcrumb,\r\n },\r\n },\r\n {\r\n path: 'tax-rates',\r\n component: TaxRateListComponent,\r\n data: {\r\n breadcrumb: _('breadcrumb.tax-rates'),\r\n },\r\n },\r\n {\r\n path: 'tax-rates/:id',\r\n component: TaxRateDetailComponent,\r\n resolve: createResolveData(TaxRateResolver),\r\n canDeactivate: [CanDeactivateDetailGuard],\r\n data: {\r\n breadcrumb: taxRateBreadcrumb,\r\n },\r\n },\r\n {\r\n path: 'countries',\r\n component: CountryListComponent,\r\n data: {\r\n breadcrumb: _('breadcrumb.countries'),\r\n },\r\n },\r\n {\r\n path: 'countries/:id',\r\n component: CountryDetailComponent,\r\n resolve: createResolveData(CountryResolver),\r\n canDeactivate: [CanDeactivateDetailGuard],\r\n data: {\r\n breadcrumb: countryBreadcrumb,\r\n },\r\n },\r\n {\r\n path: 'zones',\r\n component: ZoneListComponent,\r\n data: {\r\n breadcrumb: _('breadcrumb.zones'),\r\n },\r\n },\r\n {\r\n path: 'shipping-methods',\r\n component: ShippingMethodListComponent,\r\n data: {\r\n breadcrumb: _('breadcrumb.shipping-methods'),\r\n },\r\n },\r\n {\r\n path: 'shipping-methods/:id',\r\n component: ShippingMethodDetailComponent,\r\n resolve: createResolveData(ShippingMethodResolver),\r\n canDeactivate: [CanDeactivateDetailGuard],\r\n data: {\r\n breadcrumb: shippingMethodBreadcrumb,\r\n },\r\n },\r\n {\r\n path: 'payment-methods',\r\n component: PaymentMethodListComponent,\r\n data: {\r\n breadcrumb: _('breadcrumb.payment-methods'),\r\n },\r\n },\r\n {\r\n path: 'payment-methods/:id',\r\n component: PaymentMethodDetailComponent,\r\n resolve: createResolveData(PaymentMethodResolver),\r\n canDeactivate: [CanDeactivateDetailGuard],\r\n data: {\r\n breadcrumb: paymentMethodBreadcrumb,\r\n },\r\n },\r\n {\r\n path: 'global-settings',\r\n component: GlobalSettingsComponent,\r\n resolve: createResolveData(GlobalSettingsResolver),\r\n canDeactivate: [CanDeactivateDetailGuard],\r\n data: {\r\n breadcrumb: _('breadcrumb.global-settings'),\r\n },\r\n },\r\n];\r\n\r\nexport function administratorBreadcrumb(data: any, params: any) {\r\n return detailBreadcrumb<Administrator>({\r\n entity: data.entity,\r\n id: params.id,\r\n breadcrumbKey: 'breadcrumb.administrators',\r\n getName: admin => `${admin.firstName} ${admin.lastName}`,\r\n route: 'administrators',\r\n });\r\n}\r\n\r\nexport function channelBreadcrumb(data: any, params: any) {\r\n return detailBreadcrumb<Channel>({\r\n entity: data.entity,\r\n id: params.id,\r\n breadcrumbKey: 'breadcrumb.channels',\r\n getName: channel => channel.code,\r\n route: 'channels',\r\n });\r\n}\r\n\r\nexport function roleBreadcrumb(data: any, params: any) {\r\n return detailBreadcrumb<Role>({\r\n entity: data.entity,\r\n id: params.id,\r\n breadcrumbKey: 'breadcrumb.roles',\r\n getName: role => role.description,\r\n route: 'roles',\r\n });\r\n}\r\n\r\nexport function taxCategoryBreadcrumb(data: any, params: any) {\r\n return detailBreadcrumb<TaxCategoryFragment>({\r\n entity: data.entity,\r\n id: params.id,\r\n breadcrumbKey: 'breadcrumb.tax-categories',\r\n getName: category => category.name,\r\n route: 'tax-categories',\r\n });\r\n}\r\n\r\nexport function taxRateBreadcrumb(data: any, params: any) {\r\n return detailBreadcrumb<TaxRateFragment>({\r\n entity: data.entity,\r\n id: params.id,\r\n breadcrumbKey: 'breadcrumb.tax-rates',\r\n getName: category => category.name,\r\n route: 'tax-rates',\r\n });\r\n}\r\n\r\nexport function countryBreadcrumb(data: any, params: any) {\r\n return detailBreadcrumb<CountryFragment>({\r\n entity: data.entity,\r\n id: params.id,\r\n breadcrumbKey: 'breadcrumb.countries',\r\n getName: promotion => promotion.name,\r\n route: 'countries',\r\n });\r\n}\r\n\r\nexport function shippingMethodBreadcrumb(data: any, params: any) {\r\n return detailBreadcrumb<ShippingMethodFragment>({\r\n entity: data.entity,\r\n id: params.id,\r\n breadcrumbKey: 'breadcrumb.shipping-methods',\r\n getName: method => method.name,\r\n route: 'shipping-methods',\r\n });\r\n}\r\n\r\nexport function paymentMethodBreadcrumb(data: any, params: any) {\r\n return detailBreadcrumb<PaymentMethodFragment>({\r\n entity: data.entity,\r\n id: params.id,\r\n breadcrumbKey: 'breadcrumb.payment-methods',\r\n getName: method => method.code,\r\n route: 'payment-methods',\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 { AddCountryToZoneDialogComponent } from './components/add-country-to-zone-dialog/add-country-to-zone-dialog.component';\r\nimport { AdminDetailComponent } from './components/admin-detail/admin-detail.component';\r\nimport { AdministratorListComponent } from './components/administrator-list/administrator-list.component';\r\nimport { ChannelDetailComponent } from './components/channel-detail/channel-detail.component';\r\nimport { ChannelListComponent } from './components/channel-list/channel-list.component';\r\nimport { CountryDetailComponent } from './components/country-detail/country-detail.component';\r\nimport { CountryListComponent } from './components/country-list/country-list.component';\r\nimport { GlobalSettingsComponent } from './components/global-settings/global-settings.component';\r\nimport { PaymentMethodDetailComponent } from './components/payment-method-detail/payment-method-detail.component';\r\nimport { PaymentMethodListComponent } from './components/payment-method-list/payment-method-list.component';\r\nimport { PermissionGridComponent } from './components/permission-grid/permission-grid.component';\r\nimport { ProfileComponent } from './components/profile/profile.component';\r\nimport { RoleDetailComponent } from './components/role-detail/role-detail.component';\r\nimport { RoleListComponent } from './components/role-list/role-list.component';\r\nimport { ShippingEligibilityTestResultComponent } from './components/shipping-eligibility-test-result/shipping-eligibility-test-result.component';\r\nimport { ShippingMethodDetailComponent } from './components/shipping-method-detail/shipping-method-detail.component';\r\nimport { ShippingMethodListComponent } from './components/shipping-method-list/shipping-method-list.component';\r\nimport { ShippingMethodTestResultComponent } from './components/shipping-method-test-result/shipping-method-test-result.component';\r\nimport { TaxCategoryDetailComponent } from './components/tax-category-detail/tax-category-detail.component';\r\nimport { TaxCategoryListComponent } from './components/tax-category-list/tax-category-list.component';\r\nimport { TaxRateDetailComponent } from './components/tax-rate-detail/tax-rate-detail.component';\r\nimport { TaxRateListComponent } from './components/tax-rate-list/tax-rate-list.component';\r\nimport { TestAddressFormComponent } from './components/test-address-form/test-address-form.component';\r\nimport { TestOrderBuilderComponent } from './components/test-order-builder/test-order-builder.component';\r\nimport { ZoneDetailDialogComponent } from './components/zone-detail-dialog/zone-detail-dialog.component';\r\nimport { ZoneListComponent } from './components/zone-list/zone-list.component';\r\nimport { ZoneMemberControlsDirective } from './components/zone-member-list/zone-member-controls.directive';\r\nimport { ZoneMemberListHeaderDirective } from './components/zone-member-list/zone-member-list-header.directive';\r\nimport { ZoneMemberListComponent } from './components/zone-member-list/zone-member-list.component';\r\nimport { settingsRoutes } from './settings.routes';\r\n\r\n@NgModule({\r\n imports: [SharedModule, RouterModule.forChild(settingsRoutes)],\r\n declarations: [\r\n TaxCategoryListComponent,\r\n TaxCategoryDetailComponent,\r\n AdministratorListComponent,\r\n RoleListComponent,\r\n RoleDetailComponent,\r\n AdminDetailComponent,\r\n PermissionGridComponent,\r\n CountryListComponent,\r\n CountryDetailComponent,\r\n TaxRateListComponent,\r\n TaxRateDetailComponent,\r\n ChannelListComponent,\r\n ChannelDetailComponent,\r\n ShippingMethodListComponent,\r\n ShippingMethodDetailComponent,\r\n PaymentMethodListComponent,\r\n PaymentMethodDetailComponent,\r\n GlobalSettingsComponent,\r\n TestOrderBuilderComponent,\r\n TestAddressFormComponent,\r\n ShippingMethodTestResultComponent,\r\n ShippingEligibilityTestResultComponent,\r\n ZoneListComponent,\r\n AddCountryToZoneDialogComponent,\r\n ZoneMemberListComponent,\r\n ZoneMemberListHeaderDirective,\r\n ZoneMemberControlsDirective,\r\n ZoneDetailDialogComponent,\r\n ProfileComponent,\r\n ],\r\n})\r\nexport class SettingsModule {}\r\n","// This file was generated by the build-public-api.ts script\nexport * from './components/add-country-to-zone-dialog/add-country-to-zone-dialog.component';\nexport * from './components/admin-detail/admin-detail.component';\nexport * from './components/administrator-list/administrator-list.component';\nexport * from './components/channel-detail/channel-detail.component';\nexport * from './components/channel-list/channel-list.component';\nexport * from './components/country-detail/country-detail.component';\nexport * from './components/country-list/country-list.component';\nexport * from './components/global-settings/global-settings.component';\nexport * from './components/payment-method-detail/payment-method-detail.component';\nexport * from './components/payment-method-list/payment-method-list.component';\nexport * from './components/permission-grid/permission-grid.component';\nexport * from './components/profile/profile.component';\nexport * from './components/role-detail/role-detail.component';\nexport * from './components/role-list/role-list.component';\nexport * from './components/shipping-eligibility-test-result/shipping-eligibility-test-result.component';\nexport * from './components/shipping-method-detail/shipping-method-detail.component';\nexport * from './components/shipping-method-list/shipping-method-list.component';\nexport * from './components/shipping-method-test-result/shipping-method-test-result.component';\nexport * from './components/tax-category-detail/tax-category-detail.component';\nexport * from './components/tax-category-list/tax-category-list.component';\nexport * from './components/tax-rate-detail/tax-rate-detail.component';\nexport * from './components/tax-rate-list/tax-rate-list.component';\nexport * from './components/test-address-form/test-address-form.component';\nexport * from './components/test-order-builder/test-order-builder.component';\nexport * from './components/zone-detail-dialog/zone-detail-dialog.component';\nexport * from './components/zone-list/zone-list.component';\nexport * from './components/zone-member-list/zone-member-controls.directive';\nexport * from './components/zone-member-list/zone-member-list-header.directive';\nexport * from './components/zone-member-list/zone-member-list.component';\nexport * from './providers/routing/administrator-resolver';\nexport * from './providers/routing/channel-resolver';\nexport * from './providers/routing/country-resolver';\nexport * from './providers/routing/global-settings-resolver';\nexport * from './providers/routing/payment-method-resolver';\nexport * from './providers/routing/profile-resolver';\nexport * from './providers/routing/role-resolver';\nexport * from './providers/routing/shipping-method-resolver';\nexport * from './providers/routing/tax-category-resolver';\nexport * from './providers/routing/tax-rate-resolver';\nexport * from './settings.module';\nexport * from './settings.routes';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["_"],"mappings":"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"}