@vendure/admin-ui 1.4.7 → 2.0.0-next.0
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.
- package/catalog/catalog.module.d.ts +30 -0
- package/catalog/components/apply-facet-dialog/apply-facet-dialog.component.d.ts +5 -2
- package/catalog/components/asset-detail/asset-detail.component.d.ts +6 -4
- package/catalog/components/asset-list/asset-list.component.d.ts +5 -2
- package/catalog/components/{product-assets/product-assets.component.d.ts → assets/assets.component.d.ts} +7 -10
- package/catalog/components/assign-products-to-channel-dialog/assign-products-to-channel-dialog.component.d.ts +9 -7
- package/catalog/components/collection-contents/collection-contents.component.d.ts +5 -3
- package/catalog/components/collection-detail/collection-detail.component.d.ts +6 -3
- package/catalog/components/collection-list/collection-list.component.d.ts +6 -3
- package/catalog/components/collection-tree/collection-tree-node.component.d.ts +7 -3
- package/catalog/components/collection-tree/collection-tree.component.d.ts +10 -25
- package/catalog/components/collection-tree/collection-tree.service.d.ts +33 -0
- package/catalog/components/collection-tree/collection-tree.types.d.ts +7 -0
- package/catalog/components/confirm-variant-deletion-dialog/confirm-variant-deletion-dialog.component.d.ts +5 -2
- package/catalog/components/facet-detail/facet-detail.component.d.ts +7 -4
- package/catalog/components/facet-list/facet-list.component.d.ts +6 -3
- package/catalog/components/generate-product-variants/generate-product-variants.component.d.ts +3 -0
- package/catalog/components/option-value-input/option-value-input.component.d.ts +3 -0
- package/catalog/components/product-detail/product-detail.component.d.ts +17 -37
- package/catalog/components/product-detail/product-detail.types.d.ts +26 -0
- package/catalog/components/product-list/product-list.component.d.ts +6 -3
- package/catalog/components/product-options-editor/product-options-editor.component.d.ts +9 -4
- package/catalog/components/product-search-input/product-search-input.component.d.ts +9 -4
- package/catalog/components/product-variants-editor/product-variants-editor.component.d.ts +5 -2
- package/catalog/components/product-variants-list/product-variants-list.component.d.ts +24 -17
- package/catalog/components/product-variants-table/product-variants-table.component.d.ts +24 -11
- package/catalog/components/update-product-option-dialog/update-product-option-dialog.component.d.ts +5 -2
- package/catalog/components/variant-price-detail/variant-price-detail.component.d.ts +3 -0
- package/catalog/package.json +5 -6
- package/catalog/providers/product-detail/product-detail.service.d.ts +214 -93
- package/catalog/providers/routing/asset-resolver.d.ts +5 -3
- package/catalog/providers/routing/collection-resolver.d.ts +5 -2
- package/catalog/providers/routing/facet-resolver.d.ts +5 -4
- package/catalog/providers/routing/product-resolver.d.ts +5 -2
- package/catalog/providers/routing/product-variants-resolver.d.ts +5 -2
- package/catalog/public_api.d.ts +4 -1
- package/catalog/vendure-admin-ui-catalog.d.ts +1 -0
- package/core/app.component.d.ts +3 -0
- package/core/app.component.module.d.ts +7 -0
- package/core/common/base-detail.component.d.ts +2 -2
- package/core/common/base-entity-resolver.d.ts +1 -1
- package/core/common/base-list.component.d.ts +10 -0
- package/core/common/generated-types.d.ts +12045 -4197
- package/core/common/utilities/flatten-facet-values.d.ts +2 -2
- package/core/common/version.d.ts +1 -1
- package/core/components/app-shell/app-shell.component.d.ts +3 -0
- package/core/components/breadcrumb/breadcrumb.component.d.ts +3 -0
- package/core/components/channel-switcher/channel-switcher.component.d.ts +3 -0
- package/core/components/main-nav/main-nav.component.d.ts +3 -0
- package/core/components/notification/notification.component.d.ts +3 -0
- package/core/components/overlay-host/overlay-host.component.d.ts +3 -0
- package/core/components/theme-switcher/theme-switcher.component.d.ts +3 -0
- package/core/components/ui-language-switcher-dialog/ui-language-switcher-dialog.component.d.ts +4 -1
- package/core/components/user-menu/user-menu.component.d.ts +3 -0
- package/core/core.module.d.ts +18 -0
- package/core/data/client-state/client-defaults.d.ts +19 -7
- package/core/data/data.module.d.ts +6 -0
- package/core/data/definitions/administrator-definitions.d.ts +15 -15
- package/core/data/definitions/auth-definitions.d.ts +4 -4
- package/core/data/definitions/client-definitions.d.ts +16 -16
- package/core/data/definitions/collection-definitions.d.ts +9 -9
- package/core/data/definitions/customer-definitions.d.ts +22 -21
- package/core/data/definitions/facet-definitions.d.ts +10 -10
- package/core/data/definitions/order-definitions.d.ts +25 -25
- package/core/data/definitions/product-definitions.d.ts +44 -44
- package/core/data/definitions/promotion-definitions.d.ts +7 -7
- package/core/data/definitions/settings-definitions.d.ts +65 -65
- package/core/data/definitions/shared-definitions.d.ts +3 -3
- package/core/data/definitions/shipping-definitions.d.ts +9 -9
- package/core/data/providers/administrator-data.service.d.ts +15 -15
- package/core/data/providers/auth-data.service.d.ts +4 -3
- package/core/data/providers/base-data.service.d.ts +3 -0
- package/core/data/providers/client-data.service.d.ts +15 -14
- package/core/data/providers/collection-data.service.d.ts +11 -11
- package/core/data/providers/customer-data.service.d.ts +25 -24
- package/core/data/providers/data.service.d.ts +5 -2
- package/core/data/providers/facet-data.service.d.ts +12 -12
- package/core/data/providers/fetch-adapter.d.ts +3 -0
- package/core/data/providers/interceptor.d.ts +3 -0
- package/core/data/providers/order-data.service.d.ts +21 -21
- package/core/data/providers/product-data.service.d.ts +51 -51
- package/core/data/providers/promotion-data.service.d.ts +8 -8
- package/core/data/providers/settings-data.service.d.ts +52 -51
- package/core/data/providers/shipping-method-data.service.d.ts +12 -12
- package/core/data/query-result.d.ts +1 -1
- package/core/data/server-config.d.ts +5 -2
- package/core/package.json +5 -6
- package/core/providers/auth/auth.service.d.ts +5 -2
- package/core/providers/component-registry/component-registry.service.d.ts +3 -0
- package/core/providers/custom-detail-component/custom-detail-component.service.d.ts +3 -0
- package/core/providers/custom-field-component/custom-field-component.service.d.ts +3 -0
- package/core/providers/dashboard-widget/dashboard-widget.service.d.ts +3 -0
- package/core/providers/guard/auth.guard.d.ts +3 -0
- package/core/providers/health-check/health-check.service.d.ts +3 -0
- package/core/providers/i18n/custom-message-format-compiler.d.ts +3 -0
- package/core/providers/i18n/i18n.service.d.ts +3 -0
- package/core/providers/job-queue/job-queue.service.d.ts +3 -0
- package/core/providers/local-storage/local-storage.service.d.ts +3 -0
- package/core/providers/modal/modal.service.d.ts +4 -67
- package/core/providers/modal/modal.types.d.ts +67 -0
- package/core/providers/nav-builder/nav-builder.service.d.ts +3 -0
- package/core/providers/notification/notification.service.d.ts +3 -0
- package/core/providers/overlay-host/overlay-host.service.d.ts +3 -0
- package/core/public_api.d.ts +3 -0
- package/core/shared/components/action-bar/action-bar.component.d.ts +7 -0
- package/core/shared/components/action-bar-items/action-bar-items.component.d.ts +3 -0
- package/core/shared/components/address-form/address-form.component.d.ts +5 -2
- package/core/shared/components/affixed-input/affixed-input.component.d.ts +3 -0
- package/core/shared/components/affixed-input/percentage-suffix-input.component.d.ts +3 -0
- package/core/shared/components/asset-file-input/asset-file-input.component.d.ts +3 -0
- package/core/shared/components/asset-gallery/asset-gallery.component.d.ts +46 -26
- package/core/shared/components/asset-gallery/asset-gallery.types.d.ts +3 -0
- package/core/shared/components/asset-picker-dialog/asset-picker-dialog.component.d.ts +7 -3
- package/core/shared/components/asset-preview/asset-preview.component.d.ts +5 -3
- package/core/shared/components/asset-preview-dialog/asset-preview-dialog.component.d.ts +7 -5
- package/core/shared/components/asset-preview-links/asset-preview-links.component.d.ts +8 -0
- package/core/shared/components/asset-search-input/asset-search-input.component.d.ts +5 -2
- package/core/shared/components/channel-assignment-control/channel-assignment-control.component.d.ts +3 -0
- package/core/shared/components/channel-badge/channel-badge.component.d.ts +3 -0
- package/core/shared/components/chip/chip.component.d.ts +3 -0
- package/core/shared/components/configurable-input/configurable-input.component.d.ts +3 -0
- package/core/shared/components/currency-input/currency-input.component.d.ts +3 -0
- package/core/shared/components/custom-detail-component-host/custom-detail-component-host.component.d.ts +3 -0
- package/core/shared/components/custom-field-control/custom-field-control.component.d.ts +3 -0
- package/core/shared/components/customer-label/customer-label.component.d.ts +5 -2
- package/core/shared/components/data-table/data-table-column.component.d.ts +3 -0
- package/core/shared/components/data-table/data-table.component.d.ts +3 -0
- package/core/shared/components/datetime-picker/datetime-picker.component.d.ts +3 -0
- package/core/shared/components/datetime-picker/datetime-picker.service.d.ts +3 -0
- package/core/shared/components/dropdown/dropdown-item.directive.d.ts +3 -0
- package/core/shared/components/dropdown/dropdown-menu.component.d.ts +3 -0
- package/core/shared/components/dropdown/dropdown-trigger.directive.d.ts +3 -0
- package/core/shared/components/dropdown/dropdown.component.d.ts +3 -0
- package/core/shared/components/edit-note-dialog/edit-note-dialog.component.d.ts +4 -1
- package/core/shared/components/empty-placeholder/empty-placeholder.component.d.ts +3 -0
- package/core/shared/components/entity-info/entity-info.component.d.ts +3 -0
- package/core/shared/components/extension-host/extension-host.component.d.ts +3 -0
- package/core/shared/components/extension-host/extension-host.service.d.ts +3 -0
- package/core/shared/components/facet-value-chip/facet-value-chip.component.d.ts +5 -2
- package/core/shared/components/facet-value-selector/facet-value-selector.component.d.ts +8 -5
- package/core/shared/components/focal-point-control/focal-point-control.component.d.ts +3 -0
- package/core/shared/components/form-field/form-field-control.directive.d.ts +3 -0
- package/core/shared/components/form-field/form-field.component.d.ts +3 -0
- package/core/shared/components/form-item/form-item.component.d.ts +3 -0
- package/core/shared/components/formatted-address/formatted-address.component.d.ts +3 -0
- package/core/shared/components/help-tooltip/help-tooltip.component.d.ts +3 -0
- package/core/shared/components/history-entry-detail/history-entry-detail.component.d.ts +3 -0
- package/core/shared/components/items-per-page-controls/items-per-page-controls.component.d.ts +3 -0
- package/core/shared/components/labeled-data/labeled-data.component.d.ts +3 -0
- package/core/shared/components/language-selector/language-selector.component.d.ts +3 -0
- package/core/shared/components/manage-tags-dialog/manage-tags-dialog.component.d.ts +6 -3
- package/core/shared/components/modal-dialog/dialog-buttons.directive.d.ts +3 -0
- package/core/shared/components/modal-dialog/dialog-component-outlet.component.d.ts +3 -0
- package/core/shared/components/modal-dialog/dialog-title.directive.d.ts +3 -0
- package/core/shared/components/modal-dialog/modal-dialog.component.d.ts +4 -1
- package/core/shared/components/object-tree/object-tree.component.d.ts +3 -0
- package/core/shared/components/order-state-label/order-state-label.component.d.ts +4 -1
- package/core/shared/components/pagination-controls/pagination-controls.component.d.ts +3 -0
- package/core/shared/components/product-selector/product-selector.component.d.ts +23 -13
- package/core/shared/components/rich-text-editor/external-image-dialog/external-image-dialog.component.d.ts +4 -1
- package/core/shared/components/rich-text-editor/link-dialog/link-dialog.component.d.ts +4 -1
- package/core/shared/components/rich-text-editor/prosemirror/prosemirror.service.d.ts +3 -0
- package/core/shared/components/rich-text-editor/rich-text-editor.component.d.ts +3 -0
- package/core/shared/components/select-toggle/select-toggle.component.d.ts +3 -0
- package/core/shared/components/simple-dialog/simple-dialog.component.d.ts +4 -1
- package/core/shared/components/status-badge/status-badge.component.d.ts +3 -0
- package/core/shared/components/tabbed-custom-fields/tabbed-custom-fields.component.d.ts +3 -0
- package/core/shared/components/table-row-action/table-row-action.component.d.ts +3 -0
- package/core/shared/components/tag-selector/tag-selector.component.d.ts +3 -0
- package/core/shared/components/timeline-entry/timeline-entry.component.d.ts +3 -0
- package/core/shared/components/title-input/title-input.component.d.ts +3 -0
- package/core/shared/components/ui-extension-point/ui-extension-point.component.d.ts +3 -0
- package/core/shared/directives/disabled.directive.d.ts +3 -0
- package/core/shared/directives/if-default-channel-active.directive.d.ts +3 -0
- package/core/shared/directives/if-directive-base.d.ts +3 -0
- package/core/shared/directives/if-multichannel.directive.d.ts +3 -0
- package/core/shared/directives/if-permissions.directive.d.ts +3 -0
- package/core/shared/dynamic-form-inputs/boolean-form-input/boolean-form-input.component.d.ts +3 -0
- package/core/shared/dynamic-form-inputs/code-editor-form-input/json-editor-form-input.component.d.ts +3 -0
- package/core/shared/dynamic-form-inputs/currency-form-input/currency-form-input.component.d.ts +3 -0
- package/core/shared/dynamic-form-inputs/customer-group-form-input/customer-group-form-input.component.d.ts +7 -3
- package/core/shared/dynamic-form-inputs/date-form-input/date-form-input.component.d.ts +3 -0
- package/core/shared/dynamic-form-inputs/dynamic-form-input/dynamic-form-input.component.d.ts +3 -0
- package/core/shared/dynamic-form-inputs/facet-value-form-input/facet-value-form-input.component.d.ts +5 -2
- package/core/shared/dynamic-form-inputs/number-form-input/number-form-input.component.d.ts +3 -0
- package/core/shared/dynamic-form-inputs/password-form-input/password-form-input.component.d.ts +3 -0
- package/core/shared/dynamic-form-inputs/product-selector-form-input/product-selector-form-input.component.d.ts +6 -3
- package/core/shared/dynamic-form-inputs/register-dynamic-input-components.d.ts +1 -1
- package/core/shared/dynamic-form-inputs/relation-form-input/asset/relation-asset-input.component.d.ts +6 -3
- package/core/shared/dynamic-form-inputs/relation-form-input/customer/relation-customer-input.component.d.ts +6 -2
- package/core/shared/dynamic-form-inputs/relation-form-input/product/relation-product-input.component.d.ts +7 -3
- package/core/shared/dynamic-form-inputs/relation-form-input/product-variant/relation-product-variant-input.component.d.ts +7 -3
- package/core/shared/dynamic-form-inputs/relation-form-input/relation-card/relation-card.component.d.ts +7 -0
- package/core/shared/dynamic-form-inputs/relation-form-input/relation-form-input.component.d.ts +3 -0
- package/core/shared/dynamic-form-inputs/relation-form-input/relation-selector-dialog/relation-selector-dialog.component.d.ts +4 -1
- package/core/shared/dynamic-form-inputs/rich-text-form-input/rich-text-form-input.component.d.ts +3 -0
- package/core/shared/dynamic-form-inputs/select-form-input/select-form-input.component.d.ts +3 -0
- package/core/shared/dynamic-form-inputs/text-form-input/text-form-input.component.d.ts +3 -0
- package/core/shared/dynamic-form-inputs/textarea-form-input/textarea-form-input.component.d.ts +3 -0
- package/core/shared/pipes/asset-preview.pipe.d.ts +3 -0
- package/core/shared/pipes/channel-label.pipe.d.ts +3 -0
- package/core/shared/pipes/custom-field-label.pipe.d.ts +3 -0
- package/core/shared/pipes/duration.pipe.d.ts +3 -0
- package/core/shared/pipes/file-size.pipe.d.ts +3 -0
- package/core/shared/pipes/has-permission.pipe.d.ts +3 -0
- package/core/shared/pipes/locale-base.pipe.d.ts +3 -0
- package/core/shared/pipes/locale-currency-name.pipe.d.ts +3 -0
- package/core/shared/pipes/locale-currency.pipe.d.ts +3 -0
- package/core/shared/pipes/locale-date.pipe.d.ts +3 -0
- package/core/shared/pipes/locale-language-name.pipe.d.ts +3 -0
- package/core/shared/pipes/locale-region-name.pipe.d.ts +3 -0
- package/core/shared/pipes/sentence-case.pipe.d.ts +3 -0
- package/core/shared/pipes/sort.pipe.d.ts +3 -0
- package/core/shared/pipes/state-i18n-token.pipe.d.ts +3 -0
- package/core/shared/pipes/string-to-color.pipe.d.ts +3 -0
- package/core/shared/pipes/time-ago.pipe.d.ts +3 -0
- package/core/shared/providers/routing/can-deactivate-detail-guard.d.ts +3 -0
- package/core/shared/shared.module.d.ts +118 -0
- package/core/vendure-admin-ui-core.d.ts +1 -0
- package/customer/components/add-customer-to-group-dialog/add-customer-to-group-dialog.component.d.ts +6 -3
- package/customer/components/address-card/address-card.component.d.ts +7 -2
- package/customer/components/address-detail-dialog/address-detail-dialog.component.d.ts +5 -2
- package/customer/components/customer-detail/customer-detail.component.d.ts +10 -5
- package/customer/components/customer-group-detail-dialog/customer-group-detail-dialog.component.d.ts +3 -0
- package/customer/components/customer-group-list/customer-group-list.component.d.ts +10 -7
- package/customer/components/customer-group-member-list/customer-group-member-list.component.d.ts +3 -0
- package/customer/components/customer-history/customer-history.component.d.ts +12 -7
- package/customer/components/customer-list/customer-list.component.d.ts +7 -5
- package/customer/components/customer-status-label/customer-status-label.component.d.ts +5 -2
- package/customer/components/select-customer-group-dialog/select-customer-group-dialog.component.d.ts +5 -2
- package/customer/customer.module.d.ts +17 -0
- package/customer/package.json +5 -6
- package/customer/providers/routing/customer-resolver.d.ts +5 -4
- package/customer/vendure-admin-ui-customer.d.ts +1 -0
- package/dashboard/components/dashboard/dashboard.component.d.ts +3 -0
- package/dashboard/components/dashboard-widget/dashboard-widget.component.d.ts +3 -0
- package/dashboard/dashboard.module.d.ts +8 -0
- package/dashboard/package.json +5 -6
- package/dashboard/vendure-admin-ui-dashboard.d.ts +1 -0
- package/dashboard/widgets/latest-orders-widget/latest-orders-widget.component.d.ts +9 -2
- package/dashboard/widgets/order-summary-widget/order-summary-widget.component.d.ts +7 -0
- package/dashboard/widgets/test-widget/test-widget.component.d.ts +6 -0
- package/dashboard/widgets/welcome-widget/welcome-widget.component.d.ts +9 -2
- package/esm2020/catalog/catalog.module.mjs +116 -0
- package/esm2020/catalog/catalog.routes.mjs +174 -0
- package/esm2020/catalog/components/apply-facet-dialog/apply-facet-dialog.component.mjs +30 -0
- package/esm2020/catalog/components/asset-detail/asset-detail.component.mjs +66 -0
- package/esm2020/catalog/components/asset-list/asset-list.component.mjs +120 -0
- package/esm2020/catalog/components/assets/assets.component.mjs +100 -0
- package/esm2020/catalog/components/assign-products-to-channel-dialog/assign-products-to-channel-dialog.component.mjs +104 -0
- package/esm2020/catalog/components/collection-contents/collection-contents.component.mjs +76 -0
- package/esm2020/catalog/components/collection-detail/collection-detail.component.mjs +210 -0
- package/esm2020/catalog/components/collection-list/collection-list.component.mjs +120 -0
- package/esm2020/catalog/components/collection-tree/array-to-tree.mjs +56 -0
- package/esm2020/catalog/components/collection-tree/collection-tree-node.component.mjs +99 -0
- package/esm2020/catalog/components/collection-tree/collection-tree.component.mjs +44 -0
- package/esm2020/catalog/components/collection-tree/collection-tree.service.mjs +68 -0
- package/esm2020/catalog/components/collection-tree/collection-tree.types.mjs +2 -0
- package/esm2020/catalog/components/confirm-variant-deletion-dialog/confirm-variant-deletion-dialog.component.mjs +23 -0
- package/esm2020/catalog/components/facet-detail/facet-detail.component.mjs +321 -0
- package/esm2020/catalog/components/facet-list/facet-list.component.mjs +104 -0
- package/esm2020/catalog/components/generate-product-variants/generate-product-variants.component.mjs +79 -0
- package/esm2020/catalog/components/option-value-input/option-value-input.component.mjs +97 -0
- package/esm2020/catalog/components/product-detail/product-detail.component.mjs +520 -0
- package/esm2020/catalog/components/product-detail/product-detail.types.mjs +2 -0
- package/esm2020/catalog/components/product-list/product-list.component.mjs +150 -0
- package/esm2020/catalog/components/product-options-editor/product-options-editor.component.mjs +151 -0
- package/esm2020/catalog/components/product-search-input/product-search-input.component.mjs +107 -0
- package/esm2020/catalog/components/product-variants-editor/product-variants-editor.component.mjs +313 -0
- package/esm2020/catalog/components/product-variants-list/product-variants-list.component.mjs +226 -0
- package/esm2020/catalog/components/product-variants-table/product-variants-table.component.mjs +72 -0
- package/esm2020/catalog/components/update-product-option-dialog/update-product-option-dialog.component.mjs +64 -0
- package/esm2020/catalog/components/variant-price-detail/variant-price-detail.component.mjs +61 -0
- package/esm2020/catalog/providers/product-detail/product-detail.service.mjs +224 -0
- package/{esm2015/catalog/providers/product-detail/replace-last.js → esm2020/catalog/providers/product-detail/replace-last.mjs} +0 -0
- package/esm2020/catalog/providers/routing/asset-resolver.mjs +33 -0
- package/esm2020/catalog/providers/routing/collection-resolver.mjs +35 -0
- package/esm2020/catalog/providers/routing/facet-resolver.mjs +30 -0
- package/esm2020/catalog/providers/routing/product-resolver.mjs +39 -0
- package/esm2020/catalog/providers/routing/product-variants-resolver.mjs +27 -0
- package/esm2020/catalog/public_api.mjs +39 -0
- package/{esm2015/catalog/vendure-admin-ui-catalog.js → esm2020/catalog/vendure-admin-ui-catalog.mjs} +0 -0
- package/esm2020/core/app.component.mjs +79 -0
- package/esm2020/core/app.component.module.mjs +19 -0
- package/{esm2015/core/app.config.js → esm2020/core/app.config.mjs} +0 -0
- package/esm2020/core/common/base-detail.component.mjs +108 -0
- package/{esm2015/core/common/base-entity-resolver.js → esm2020/core/common/base-entity-resolver.mjs} +2 -2
- package/esm2020/core/common/base-list.component.mjs +159 -0
- package/{esm2015/core/common/component-registry-types.js → esm2020/core/common/component-registry-types.mjs} +0 -0
- package/{esm2015/core/common/deactivate-aware.js → esm2020/core/common/deactivate-aware.mjs} +0 -0
- package/{esm2015/core/common/detail-breadcrumb.js → esm2020/core/common/detail-breadcrumb.mjs} +0 -0
- package/esm2020/core/common/generated-types.mjs +954 -0
- package/{esm2015/core/common/introspection-result-wrapper.js → esm2020/core/common/introspection-result-wrapper.mjs} +0 -0
- package/esm2020/core/common/introspection-result.mjs +187 -0
- package/{esm2015/core/common/single-search-selection-model.js → esm2020/core/common/single-search-selection-model.mjs} +0 -0
- package/esm2020/core/common/utilities/configurable-operation-utils.mjs +83 -0
- package/esm2020/core/common/utilities/create-updated-translatable.mjs +75 -0
- package/esm2020/core/common/utilities/find-translation.mjs +9 -0
- package/esm2020/core/common/utilities/flatten-facet-values.mjs +4 -0
- package/esm2020/core/common/utilities/get-default-ui-language.mjs +12 -0
- package/{esm2015/core/common/utilities/interpolate-description.js → esm2020/core/common/utilities/interpolate-description.mjs} +0 -0
- package/{esm2015/core/common/utilities/string-to-color.js → esm2020/core/common/utilities/string-to-color.mjs} +0 -0
- package/{esm2015/core/common/version.js → esm2020/core/common/version.mjs} +2 -2
- package/esm2020/core/components/app-shell/app-shell.component.mjs +76 -0
- package/esm2020/core/components/breadcrumb/breadcrumb.component.mjs +124 -0
- package/esm2020/core/components/channel-switcher/channel-switcher.component.mjs +58 -0
- package/esm2020/core/components/main-nav/main-nav.component.mjs +270 -0
- package/esm2020/core/components/notification/notification.component.mjs +76 -0
- package/esm2020/core/components/overlay-host/overlay-host.component.mjs +22 -0
- package/esm2020/core/components/theme-switcher/theme-switcher.component.mjs +29 -0
- package/esm2020/core/components/ui-language-switcher-dialog/ui-language-switcher-dialog.component.mjs +305 -0
- package/esm2020/core/components/user-menu/user-menu.component.mjs +37 -0
- package/esm2020/core/core.module.mjs +145 -0
- package/{esm2015/core/data/check-jobs-link.js → esm2020/core/data/check-jobs-link.mjs} +0 -0
- package/{esm2015/core/data/client-state/client-defaults.js → esm2020/core/data/client-state/client-defaults.mjs} +1 -1
- package/esm2020/core/data/client-state/client-resolvers.mjs +131 -0
- package/esm2020/core/data/data.module.mjs +126 -0
- package/{esm2015/core/data/definitions/administrator-definitions.js → esm2020/core/data/definitions/administrator-definitions.mjs} +0 -0
- package/{esm2015/core/data/definitions/auth-definitions.js → esm2020/core/data/definitions/auth-definitions.mjs} +0 -0
- package/{esm2015/core/data/definitions/client-definitions.js → esm2020/core/data/definitions/client-definitions.mjs} +0 -0
- package/{esm2015/core/data/definitions/collection-definitions.js → esm2020/core/data/definitions/collection-definitions.mjs} +0 -0
- package/esm2020/core/data/definitions/customer-definitions.mjs +265 -0
- package/{esm2015/core/data/definitions/facet-definitions.js → esm2020/core/data/definitions/facet-definitions.mjs} +0 -0
- package/{esm2015/core/data/definitions/order-definitions.js → esm2020/core/data/definitions/order-definitions.mjs} +0 -0
- package/{esm2015/core/data/definitions/product-definitions.js → esm2020/core/data/definitions/product-definitions.mjs} +0 -0
- package/{esm2015/core/data/definitions/promotion-definitions.js → esm2020/core/data/definitions/promotion-definitions.mjs} +0 -0
- package/{esm2015/core/data/definitions/settings-definitions.js → esm2020/core/data/definitions/settings-definitions.mjs} +0 -0
- package/{esm2015/core/data/definitions/shared-definitions.js → esm2020/core/data/definitions/shared-definitions.mjs} +0 -0
- package/{esm2015/core/data/definitions/shipping-definitions.js → esm2020/core/data/definitions/shipping-definitions.mjs} +0 -0
- package/{esm2015/core/data/omit-typename-link.js → esm2020/core/data/omit-typename-link.mjs} +0 -0
- package/esm2020/core/data/providers/administrator-data.service.mjs +63 -0
- package/esm2020/core/data/providers/auth-data.service.mjs +20 -0
- package/esm2020/core/data/providers/base-data.service.mjs +69 -0
- package/esm2020/core/data/providers/client-data.service.mjs +75 -0
- package/esm2020/core/data/providers/collection-data.service.mjs +72 -0
- package/esm2020/core/data/providers/customer-data.service.mjs +120 -0
- package/esm2020/core/data/providers/data.service.mjs +90 -0
- package/esm2020/core/data/providers/facet-data.service.mjs +60 -0
- package/esm2020/core/data/providers/fetch-adapter.mjs +36 -0
- package/esm2020/core/data/providers/interceptor.mjs +136 -0
- package/esm2020/core/data/providers/order-data.service.mjs +100 -0
- package/esm2020/core/data/providers/product-data.service.mjs +240 -0
- package/esm2020/core/data/providers/promotion-data.service.mjs +36 -0
- package/esm2020/core/data/providers/settings-data.service.mjs +235 -0
- package/esm2020/core/data/providers/shipping-method-data.service.mjs +66 -0
- package/{esm2015/core/data/query-result.js → esm2020/core/data/query-result.mjs} +1 -1
- package/esm2020/core/data/server-config.mjs +74 -0
- package/esm2020/core/data/utils/add-custom-fields.mjs +84 -0
- package/{esm2015/core/data/utils/get-server-location.js → esm2020/core/data/utils/get-server-location.mjs} +0 -0
- package/{esm2015/core/data/utils/remove-readonly-custom-fields.js → esm2020/core/data/utils/remove-readonly-custom-fields.mjs} +1 -1
- package/esm2020/core/data/utils/transform-relation-custom-field-inputs.mjs +46 -0
- package/esm2020/core/providers/auth/auth.service.mjs +104 -0
- package/esm2020/core/providers/component-registry/component-registry.service.mjs +25 -0
- package/{esm2015/core/providers/custom-detail-component/custom-detail-component-types.js → esm2020/core/providers/custom-detail-component/custom-detail-component-types.mjs} +0 -0
- package/esm2020/core/providers/custom-detail-component/custom-detail-component.service.mjs +44 -0
- package/esm2020/core/providers/custom-field-component/custom-field-component.service.mjs +45 -0
- package/{esm2015/core/providers/dashboard-widget/dashboard-widget-types.js → esm2020/core/providers/dashboard-widget/dashboard-widget-types.mjs} +0 -0
- package/esm2020/core/providers/dashboard-widget/dashboard-widget.service.mjs +98 -0
- package/{esm2015/core/providers/dashboard-widget/register-dashboard-widget.js → esm2020/core/providers/dashboard-widget/register-dashboard-widget.mjs} +0 -0
- package/esm2020/core/providers/guard/auth.guard.mjs +38 -0
- package/esm2020/core/providers/health-check/health-check.service.mjs +36 -0
- package/{esm2015/core/providers/i18n/custom-http-loader.js → esm2020/core/providers/i18n/custom-http-loader.mjs} +0 -0
- package/esm2020/core/providers/i18n/custom-message-format-compiler.mjs +31 -0
- package/esm2020/core/providers/i18n/i18n.service.mjs +54 -0
- package/esm2020/core/providers/job-queue/job-queue.service.mjs +91 -0
- package/esm2020/core/providers/local-storage/local-storage.service.mjs +77 -0
- package/esm2020/core/providers/modal/modal.service.mjs +97 -0
- package/esm2020/core/providers/modal/modal.types.mjs +2 -0
- package/{esm2015/core/providers/nav-builder/nav-builder-types.js → esm2020/core/providers/nav-builder/nav-builder-types.mjs} +0 -0
- package/esm2020/core/providers/nav-builder/nav-builder.service.mjs +268 -0
- package/esm2020/core/providers/notification/notification.service.mjs +157 -0
- package/esm2020/core/providers/overlay-host/overlay-host.service.mjs +48 -0
- package/esm2020/core/public_api.mjs +220 -0
- package/esm2020/core/shared/components/action-bar/action-bar.component.mjs +57 -0
- package/esm2020/core/shared/components/action-bar-items/action-bar-items.component.mjs +78 -0
- package/esm2020/core/shared/components/address-form/address-form.component.mjs +23 -0
- package/esm2020/core/shared/components/affixed-input/affixed-input.component.mjs +19 -0
- package/esm2020/core/shared/components/affixed-input/percentage-suffix-input.component.mjs +97 -0
- package/esm2020/core/shared/components/asset-file-input/asset-file-input.component.mjs +97 -0
- package/esm2020/core/shared/components/asset-gallery/asset-gallery.component.mjs +110 -0
- package/esm2020/core/shared/components/asset-gallery/asset-gallery.types.mjs +2 -0
- package/esm2020/core/shared/components/asset-picker-dialog/asset-picker-dialog.component.mjs +144 -0
- package/esm2020/core/shared/components/asset-preview/asset-preview.component.mjs +189 -0
- package/esm2020/core/shared/components/asset-preview-dialog/asset-preview-dialog.component.mjs +34 -0
- package/esm2020/core/shared/components/asset-preview-links/asset-preview-links.component.mjs +26 -0
- package/esm2020/core/shared/components/asset-search-input/asset-search-input.component.mjs +106 -0
- package/esm2020/core/shared/components/channel-assignment-control/channel-assignment-control.component.mjs +116 -0
- package/esm2020/core/shared/components/channel-badge/channel-badge.component.mjs +19 -0
- package/esm2020/core/shared/components/chip/chip.component.mjs +47 -0
- package/esm2020/core/shared/components/configurable-input/configurable-input.component.mjs +144 -0
- package/esm2020/core/shared/components/currency-input/currency-input.component.mjs +152 -0
- package/esm2020/core/shared/components/custom-detail-component-host/custom-detail-component-host.component.mjs +40 -0
- package/esm2020/core/shared/components/custom-field-control/custom-field-control.component.mjs +83 -0
- package/esm2020/core/shared/components/customer-label/customer-label.component.mjs +17 -0
- package/esm2020/core/shared/components/data-table/data-table-column.component.mjs +29 -0
- package/esm2020/core/shared/components/data-table/data-table.component.mjs +124 -0
- package/{esm2015/core/shared/components/datetime-picker/constants.js → esm2020/core/shared/components/datetime-picker/constants.mjs} +0 -0
- package/esm2020/core/shared/components/datetime-picker/datetime-picker.component.mjs +226 -0
- package/esm2020/core/shared/components/datetime-picker/datetime-picker.service.mjs +201 -0
- package/{esm2015/core/shared/components/datetime-picker/types.js → esm2020/core/shared/components/datetime-picker/types.mjs} +0 -0
- package/esm2020/core/shared/components/dropdown/dropdown-item.directive.mjs +25 -0
- package/esm2020/core/shared/components/dropdown/dropdown-menu.component.mjs +127 -0
- package/esm2020/core/shared/components/dropdown/dropdown-trigger.directive.mjs +25 -0
- package/esm2020/core/shared/components/dropdown/dropdown.component.mjs +58 -0
- package/esm2020/core/shared/components/edit-note-dialog/edit-note-dialog.component.mjs +32 -0
- package/esm2020/core/shared/components/empty-placeholder/empty-placeholder.component.mjs +16 -0
- package/esm2020/core/shared/components/entity-info/entity-info.component.mjs +26 -0
- package/{esm2015/core/shared/components/extension-host/extension-host-config.js → esm2020/core/shared/components/extension-host/extension-host-config.mjs} +0 -0
- package/esm2020/core/shared/components/extension-host/extension-host.component.mjs +80 -0
- package/esm2020/core/shared/components/extension-host/extension-host.service.mjs +99 -0
- package/{esm2015/core/shared/components/extension-host/host-external-frame.js → esm2020/core/shared/components/extension-host/host-external-frame.mjs} +0 -0
- package/esm2020/core/shared/components/facet-value-chip/facet-value-chip.component.mjs +26 -0
- package/esm2020/core/shared/components/facet-value-selector/facet-value-selector.component.mjs +121 -0
- package/esm2020/core/shared/components/focal-point-control/focal-point-control.component.mjs +71 -0
- package/esm2020/core/shared/components/form-field/form-field-control.directive.mjs +37 -0
- package/esm2020/core/shared/components/form-field/form-field.component.mjs +70 -0
- package/esm2020/core/shared/components/form-item/form-item.component.mjs +18 -0
- package/esm2020/core/shared/components/formatted-address/formatted-address.component.mjs +38 -0
- package/esm2020/core/shared/components/help-tooltip/help-tooltip.component.mjs +16 -0
- package/esm2020/core/shared/components/history-entry-detail/history-entry-detail.component.mjs +16 -0
- package/esm2020/core/shared/components/items-per-page-controls/items-per-page-controls.component.mjs +25 -0
- package/esm2020/core/shared/components/labeled-data/labeled-data.component.mjs +13 -0
- package/esm2020/core/shared/components/language-selector/language-selector.component.mjs +31 -0
- package/esm2020/core/shared/components/manage-tags-dialog/manage-tags-dialog.component.mjs +61 -0
- package/esm2020/core/shared/components/modal-dialog/dialog-buttons.directive.mjs +23 -0
- package/esm2020/core/shared/components/modal-dialog/dialog-component-outlet.component.mjs +31 -0
- package/esm2020/core/shared/components/modal-dialog/dialog-title.directive.mjs +23 -0
- package/esm2020/core/shared/components/modal-dialog/modal-dialog.component.mjs +60 -0
- package/esm2020/core/shared/components/object-tree/object-tree.component.mjs +56 -0
- package/esm2020/core/shared/components/order-state-label/order-state-label.component.mjs +46 -0
- package/esm2020/core/shared/components/pagination-controls/pagination-controls.component.mjs +26 -0
- package/esm2020/core/shared/components/product-selector/product-selector.component.mjs +62 -0
- package/esm2020/core/shared/components/rich-text-editor/external-image-dialog/external-image-dialog.component.mjs +37 -0
- package/esm2020/core/shared/components/rich-text-editor/link-dialog/link-dialog.component.mjs +34 -0
- package/{esm2015/core/shared/components/rich-text-editor/prosemirror/inputrules.js → esm2020/core/shared/components/rich-text-editor/prosemirror/inputrules.mjs} +0 -0
- package/{esm2015/core/shared/components/rich-text-editor/prosemirror/keymap.js → esm2020/core/shared/components/rich-text-editor/prosemirror/keymap.mjs} +0 -0
- package/{esm2015/core/shared/components/rich-text-editor/prosemirror/menu/images.js → esm2020/core/shared/components/rich-text-editor/prosemirror/menu/images.mjs} +0 -0
- package/{esm2015/core/shared/components/rich-text-editor/prosemirror/menu/links.js → esm2020/core/shared/components/rich-text-editor/prosemirror/menu/links.mjs} +0 -0
- package/{esm2015/core/shared/components/rich-text-editor/prosemirror/menu/menu-common.js → esm2020/core/shared/components/rich-text-editor/prosemirror/menu/menu-common.mjs} +0 -0
- package/{esm2015/core/shared/components/rich-text-editor/prosemirror/menu/menu.js → esm2020/core/shared/components/rich-text-editor/prosemirror/menu/menu.mjs} +0 -0
- package/{esm2015/core/shared/components/rich-text-editor/prosemirror/plugins/link-select-plugin.js → esm2020/core/shared/components/rich-text-editor/prosemirror/plugins/link-select-plugin.mjs} +0 -0
- package/esm2020/core/shared/components/rich-text-editor/prosemirror/prosemirror.service.mjs +112 -0
- package/{esm2015/core/shared/components/rich-text-editor/prosemirror/types.js → esm2020/core/shared/components/rich-text-editor/prosemirror/types.mjs} +0 -0
- package/{esm2015/core/shared/components/rich-text-editor/prosemirror/utils.js → esm2020/core/shared/components/rich-text-editor/prosemirror/utils.mjs} +0 -0
- package/esm2020/core/shared/components/rich-text-editor/rich-text-editor.component.mjs +93 -0
- package/esm2020/core/shared/components/select-toggle/select-toggle.component.mjs +32 -0
- package/esm2020/core/shared/components/simple-dialog/simple-dialog.component.mjs +24 -0
- package/esm2020/core/shared/components/status-badge/status-badge.component.mjs +16 -0
- package/esm2020/core/shared/components/tabbed-custom-fields/tabbed-custom-fields.component.mjs +54 -0
- package/esm2020/core/shared/components/table-row-action/table-row-action.component.mjs +28 -0
- package/esm2020/core/shared/components/tag-selector/tag-selector.component.mjs +60 -0
- package/esm2020/core/shared/components/timeline-entry/timeline-entry.component.mjs +52 -0
- package/esm2020/core/shared/components/title-input/title-input.component.mjs +21 -0
- package/esm2020/core/shared/components/ui-extension-point/ui-extension-point.component.mjs +34 -0
- package/esm2020/core/shared/directives/disabled.directive.mjs +41 -0
- package/esm2020/core/shared/directives/if-default-channel-active.directive.mjs +39 -0
- package/esm2020/core/shared/directives/if-directive-base.mjs +73 -0
- package/esm2020/core/shared/directives/if-multichannel.directive.mjs +45 -0
- package/esm2020/core/shared/directives/if-permissions.directive.mjs +76 -0
- package/esm2020/core/shared/dynamic-form-inputs/boolean-form-input/boolean-form-input.component.mjs +23 -0
- package/esm2020/core/shared/dynamic-form-inputs/code-editor-form-input/json-editor-form-input.component.mjs +120 -0
- package/esm2020/core/shared/dynamic-form-inputs/currency-form-input/currency-form-input.component.mjs +31 -0
- package/esm2020/core/shared/dynamic-form-inputs/customer-group-form-input/customer-group-form-input.component.mjs +42 -0
- package/esm2020/core/shared/dynamic-form-inputs/date-form-input/date-form-input.component.mjs +32 -0
- package/esm2020/core/shared/dynamic-form-inputs/dynamic-form-input/dynamic-form-input.component.mjs +265 -0
- package/esm2020/core/shared/dynamic-form-inputs/facet-value-form-input/facet-value-form-input.component.mjs +35 -0
- package/esm2020/core/shared/dynamic-form-inputs/number-form-input/number-form-input.component.mjs +39 -0
- package/esm2020/core/shared/dynamic-form-inputs/password-form-input/password-form-input.component.mjs +21 -0
- package/esm2020/core/shared/dynamic-form-inputs/product-selector-form-input/product-selector-form-input.component.mjs +61 -0
- package/{esm2015/core/shared/dynamic-form-inputs/register-dynamic-input-components.js → esm2020/core/shared/dynamic-form-inputs/register-dynamic-input-components.mjs} +0 -0
- package/esm2020/core/shared/dynamic-form-inputs/relation-form-input/asset/relation-asset-input.component.mjs +69 -0
- package/esm2020/core/shared/dynamic-form-inputs/relation-form-input/customer/relation-customer-input.component.mjs +70 -0
- package/esm2020/core/shared/dynamic-form-inputs/relation-form-input/product/relation-product-input.component.mjs +89 -0
- package/esm2020/core/shared/dynamic-form-inputs/relation-form-input/product-variant/relation-product-variant-input.component.mjs +89 -0
- package/esm2020/core/shared/dynamic-form-inputs/relation-form-input/relation-card/relation-card.component.mjs +60 -0
- package/esm2020/core/shared/dynamic-form-inputs/relation-form-input/relation-form-input.component.mjs +28 -0
- package/esm2020/core/shared/dynamic-form-inputs/relation-form-input/relation-selector-dialog/relation-selector-dialog.component.mjs +14 -0
- package/esm2020/core/shared/dynamic-form-inputs/rich-text-form-input/rich-text-form-input.component.mjs +21 -0
- package/esm2020/core/shared/dynamic-form-inputs/select-form-input/select-form-input.component.mjs +31 -0
- package/esm2020/core/shared/dynamic-form-inputs/text-form-input/text-form-input.component.mjs +28 -0
- package/esm2020/core/shared/dynamic-form-inputs/textarea-form-input/textarea-form-input.component.mjs +24 -0
- package/esm2020/core/shared/pipes/asset-preview.pipe.mjs +42 -0
- package/esm2020/core/shared/pipes/channel-label.pipe.mjs +23 -0
- package/esm2020/core/shared/pipes/custom-field-label.pipe.mjs +47 -0
- package/esm2020/core/shared/pipes/duration.pipe.mjs +49 -0
- package/esm2020/core/shared/pipes/file-size.pipe.mjs +47 -0
- package/esm2020/core/shared/pipes/has-permission.pipe.mjs +65 -0
- package/esm2020/core/shared/pipes/locale-base.pipe.mjs +55 -0
- package/esm2020/core/shared/pipes/locale-currency-name.pipe.mjs +61 -0
- package/esm2020/core/shared/pipes/locale-currency.pipe.mjs +44 -0
- package/esm2020/core/shared/pipes/locale-date.pipe.mjs +84 -0
- package/esm2020/core/shared/pipes/locale-language-name.pipe.mjs +51 -0
- package/esm2020/core/shared/pipes/locale-region-name.pipe.mjs +51 -0
- package/esm2020/core/shared/pipes/sentence-case.pipe.mjs +30 -0
- package/esm2020/core/shared/pipes/sort.pipe.mjs +34 -0
- package/esm2020/core/shared/pipes/state-i18n-token.pipe.mjs +50 -0
- package/esm2020/core/shared/pipes/string-to-color.pipe.mjs +18 -0
- package/esm2020/core/shared/pipes/time-ago.pipe.mjs +52 -0
- package/esm2020/core/shared/providers/routing/can-deactivate-detail-guard.mjs +35 -0
- package/esm2020/core/shared/shared.module.mjs +520 -0
- package/{esm2015/core/validators/unicode-pattern.validator.js → esm2020/core/validators/unicode-pattern.validator.mjs} +0 -0
- package/{esm2015/core/vendure-admin-ui-core.js → esm2020/core/vendure-admin-ui-core.mjs} +0 -0
- package/esm2020/customer/components/add-customer-to-group-dialog/add-customer-to-group-dialog.component.mjs +41 -0
- package/esm2020/customer/components/address-card/address-card.component.mjs +97 -0
- package/esm2020/customer/components/address-detail-dialog/address-detail-dialog.component.mjs +28 -0
- package/esm2020/customer/components/customer-detail/customer-detail.component.mjs +414 -0
- package/esm2020/customer/components/customer-group-detail-dialog/customer-group-detail-dialog.component.mjs +45 -0
- package/esm2020/customer/components/customer-group-list/customer-group-list.component.mjs +181 -0
- package/esm2020/customer/components/customer-group-member-list/customer-group-member-list.component.mjs +103 -0
- package/esm2020/customer/components/customer-history/customer-history.component.mjs +83 -0
- package/esm2020/customer/components/customer-list/customer-list.component.mjs +80 -0
- package/esm2020/customer/components/customer-status-label/customer-status-label.component.mjs +17 -0
- package/esm2020/customer/components/select-customer-group-dialog/select-customer-group-dialog.component.mjs +31 -0
- package/esm2020/customer/customer.module.mjs +53 -0
- package/esm2020/customer/customer.routes.mjs +42 -0
- package/esm2020/customer/providers/routing/customer-resolver.mjs +31 -0
- package/{esm2015/customer/public_api.js → esm2020/customer/public_api.mjs} +0 -0
- package/{esm2015/customer/vendure-admin-ui-customer.js → esm2020/customer/vendure-admin-ui-customer.mjs} +0 -0
- package/esm2020/dashboard/components/dashboard/dashboard.component.mjs +121 -0
- package/esm2020/dashboard/components/dashboard-widget/dashboard-widget.component.mjs +35 -0
- package/esm2020/dashboard/dashboard.module.mjs +29 -0
- package/{esm2015/dashboard/dashboard.routes.js → esm2020/dashboard/dashboard.routes.mjs} +0 -0
- package/esm2020/dashboard/default-widgets.mjs +32 -0
- package/{esm2015/dashboard/public_api.js → esm2020/dashboard/public_api.mjs} +0 -0
- package/{esm2015/dashboard/vendure-admin-ui-dashboard.js → esm2020/dashboard/vendure-admin-ui-dashboard.mjs} +0 -0
- package/esm2020/dashboard/widgets/latest-orders-widget/latest-orders-widget.component.mjs +45 -0
- package/esm2020/dashboard/widgets/order-summary-widget/order-summary-widget.component.mjs +59 -0
- package/esm2020/dashboard/widgets/test-widget/test-widget.component.mjs +22 -0
- package/esm2020/dashboard/widgets/welcome-widget/welcome-widget.component.mjs +39 -0
- package/esm2020/login/components/login/login.component.mjs +62 -0
- package/esm2020/login/login.module.mjs +21 -0
- package/{esm2015/login/login.routes.js → esm2020/login/login.routes.mjs} +0 -0
- package/esm2020/login/providers/login.guard.mjs +31 -0
- package/{esm2015/login/public_api.js → esm2020/login/public_api.mjs} +0 -0
- package/{esm2015/login/vendure-admin-ui-login.js → esm2020/login/vendure-admin-ui-login.mjs} +0 -0
- package/esm2020/marketing/components/promotion-detail/promotion-detail.component.mjs +242 -0
- package/esm2020/marketing/components/promotion-list/promotion-list.component.mjs +81 -0
- package/esm2020/marketing/marketing.module.mjs +21 -0
- package/esm2020/marketing/marketing.routes.mjs +33 -0
- package/esm2020/marketing/providers/routing/promotion-resolver.mjs +31 -0
- package/{esm2015/marketing/public_api.js → esm2020/marketing/public_api.mjs} +0 -0
- package/{esm2015/marketing/vendure-admin-ui-marketing.js → esm2020/marketing/vendure-admin-ui-marketing.mjs} +0 -0
- package/esm2020/order/components/add-manual-payment-dialog/add-manual-payment-dialog.component.mjs +39 -0
- package/esm2020/order/components/cancel-order-dialog/cancel-order-dialog.component.mjs +78 -0
- package/esm2020/order/components/fulfill-order-dialog/fulfill-order-dialog.component.mjs +73 -0
- package/esm2020/order/components/fulfillment-card/fulfillment-card.component.mjs +48 -0
- package/esm2020/order/components/fulfillment-detail/fulfillment-detail.component.mjs +62 -0
- package/esm2020/order/components/fulfillment-state-label/fulfillment-state-label.component.mjs +28 -0
- package/esm2020/order/components/line-fulfillment/line-fulfillment.component.mjs +68 -0
- package/esm2020/order/components/line-refunds/line-refunds.component.mjs +37 -0
- package/esm2020/order/components/modification-detail/modification-detail.component.mjs +68 -0
- package/esm2020/order/components/order-custom-fields-card/order-custom-fields-card.component.mjs +40 -0
- package/esm2020/order/components/order-detail/order-detail.component.mjs +504 -0
- package/esm2020/order/components/order-editor/order-editor.component.mjs +365 -0
- package/esm2020/order/components/order-edits-preview-dialog/order-edits-preview-dialog.component.mjs +55 -0
- package/esm2020/order/components/order-history/order-history.component.mjs +166 -0
- package/esm2020/order/components/order-list/order-list.component.mjs +192 -0
- package/esm2020/order/components/order-payment-card/order-payment-card.component.mjs +43 -0
- package/{esm2015/order/components/order-process-graph/constants.js → esm2020/order/components/order-process-graph/constants.mjs} +0 -0
- package/esm2020/order/components/order-process-graph/order-process-edge.component.mjs +45 -0
- package/esm2020/order/components/order-process-graph/order-process-graph.component.mjs +96 -0
- package/esm2020/order/components/order-process-graph/order-process-node.component.mjs +53 -0
- package/{esm2015/order/components/order-process-graph/types.js → esm2020/order/components/order-process-graph/types.mjs} +0 -0
- package/esm2020/order/components/order-process-graph-dialog/order-process-graph-dialog.component.mjs +21 -0
- package/esm2020/order/components/order-state-select-dialog/order-state-select-dialog.component.mjs +29 -0
- package/esm2020/order/components/order-table/order-table.component.mjs +73 -0
- package/esm2020/order/components/payment-detail/payment-detail.component.mjs +18 -0
- package/esm2020/order/components/payment-state-label/payment-state-label.component.mjs +28 -0
- package/esm2020/order/components/refund-order-dialog/refund-order-dialog.component.mjs +138 -0
- package/esm2020/order/components/refund-state-label/refund-state-label.component.mjs +27 -0
- package/esm2020/order/components/settle-refund-dialog/settle-refund-dialog.component.mjs +24 -0
- package/esm2020/order/components/simple-item-list/simple-item-list.component.mjs +15 -0
- package/esm2020/order/order.module.mjs +103 -0
- package/esm2020/order/order.routes.mjs +52 -0
- package/esm2020/order/providers/order-transition.service.mjs +112 -0
- package/esm2020/order/providers/routing/order-resolver.mjs +29 -0
- package/{esm2015/order/public_api.js → esm2020/order/public_api.mjs} +0 -0
- package/{esm2015/order/vendure-admin-ui-order.js → esm2020/order/vendure-admin-ui-order.mjs} +0 -0
- package/{esm2015/public_api.js → esm2020/public_api.mjs} +0 -0
- package/esm2020/settings/components/add-country-to-zone-dialog/add-country-to-zone-dialog.component.mjs +34 -0
- package/esm2020/settings/components/admin-detail/admin-detail.component.mjs +192 -0
- package/esm2020/settings/components/administrator-list/administrator-list.component.mjs +49 -0
- package/esm2020/settings/components/channel-detail/channel-detail.component.mjs +154 -0
- package/esm2020/settings/components/channel-list/channel-list.component.mjs +53 -0
- package/esm2020/settings/components/country-detail/country-detail.component.mjs +115 -0
- package/esm2020/settings/components/country-list/country-list.component.mjs +84 -0
- package/esm2020/settings/components/global-settings/global-settings.component.mjs +85 -0
- package/esm2020/settings/components/payment-method-detail/payment-method-detail.component.mjs +199 -0
- package/esm2020/settings/components/payment-method-list/payment-method-list.component.mjs +62 -0
- package/esm2020/settings/components/permission-grid/permission-grid.component.mjs +83 -0
- package/esm2020/settings/components/profile/profile.component.mjs +77 -0
- package/esm2020/settings/components/role-detail/role-detail.component.mjs +105 -0
- package/esm2020/settings/components/role-list/role-list.component.mjs +66 -0
- package/esm2020/settings/components/shipping-eligibility-test-result/shipping-eligibility-test-result.component.mjs +30 -0
- package/esm2020/settings/components/shipping-method-detail/shipping-method-detail.component.mjs +240 -0
- package/esm2020/settings/components/shipping-method-list/shipping-method-list.component.mjs +92 -0
- package/esm2020/settings/components/shipping-method-test-result/shipping-method-test-result.component.mjs +30 -0
- package/esm2020/settings/components/tax-category-detail/tax-category-detail.component.mjs +107 -0
- package/esm2020/settings/components/tax-category-list/tax-category-list.component.mjs +56 -0
- package/esm2020/settings/components/tax-rate-detail/tax-rate-detail.component.mjs +126 -0
- package/esm2020/settings/components/tax-rate-list/tax-rate-list.component.mjs +56 -0
- package/esm2020/settings/components/test-address-form/test-address-form.component.mjs +49 -0
- package/esm2020/settings/components/test-order-builder/test-order-builder.component.mjs +71 -0
- package/esm2020/settings/components/zone-detail-dialog/zone-detail-dialog.component.mjs +44 -0
- package/esm2020/settings/components/zone-list/zone-list.component.mjs +158 -0
- package/esm2020/settings/components/zone-member-list/zone-member-controls.directive.mjs +16 -0
- package/esm2020/settings/components/zone-member-list/zone-member-list-header.directive.mjs +16 -0
- package/esm2020/settings/components/zone-member-list/zone-member-list.component.mjs +72 -0
- package/esm2020/settings/providers/routing/administrator-resolver.mjs +28 -0
- package/esm2020/settings/providers/routing/channel-resolver.mjs +34 -0
- package/esm2020/settings/providers/routing/country-resolver.mjs +31 -0
- package/esm2020/settings/providers/routing/global-settings-resolver.mjs +24 -0
- package/esm2020/settings/providers/routing/payment-method-resolver.mjs +33 -0
- package/esm2020/settings/providers/routing/profile-resolver.mjs +30 -0
- package/esm2020/settings/providers/routing/role-resolver.mjs +28 -0
- package/esm2020/settings/providers/routing/shipping-method-resolver.mjs +34 -0
- package/esm2020/settings/providers/routing/tax-category-resolver.mjs +29 -0
- package/esm2020/settings/providers/routing/tax-rate-resolver.mjs +33 -0
- package/{esm2015/settings/public_api.js → esm2020/settings/public_api.mjs} +0 -0
- package/esm2020/settings/settings.module.mjs +106 -0
- package/esm2020/settings/settings.routes.mjs +253 -0
- package/{esm2015/settings/vendure-admin-ui-settings.js → esm2020/settings/vendure-admin-ui-settings.mjs} +0 -0
- package/esm2020/system/components/health-check/health-check.component.mjs +18 -0
- package/esm2020/system/components/job-list/job-list.component.mjs +76 -0
- package/esm2020/system/components/job-state-label/job-state-label.component.mjs +46 -0
- package/{esm2015/system/public_api.js → esm2020/system/public_api.mjs} +0 -0
- package/esm2020/system/system.module.mjs +22 -0
- package/esm2020/system/system.routes.mjs +20 -0
- package/{esm2015/system/vendure-admin-ui-system.js → esm2020/system/vendure-admin-ui-system.mjs} +0 -0
- package/{esm2015/vendure-admin-ui.js → esm2020/vendure-admin-ui.mjs} +0 -0
- package/fesm2015/vendure-admin-ui-catalog.mjs +3732 -0
- package/fesm2015/vendure-admin-ui-catalog.mjs.map +1 -0
- package/fesm2015/vendure-admin-ui-core.mjs +15998 -0
- package/fesm2015/vendure-admin-ui-core.mjs.map +1 -0
- package/fesm2015/vendure-admin-ui-customer.mjs +1134 -0
- package/fesm2015/vendure-admin-ui-customer.mjs.map +1 -0
- package/fesm2015/vendure-admin-ui-dashboard.mjs +365 -0
- package/fesm2015/vendure-admin-ui-dashboard.mjs.map +1 -0
- package/fesm2015/vendure-admin-ui-login.mjs +122 -0
- package/fesm2015/vendure-admin-ui-login.mjs.map +1 -0
- package/fesm2015/vendure-admin-ui-marketing.mjs +388 -0
- package/fesm2015/vendure-admin-ui-marketing.mjs.map +1 -0
- package/fesm2015/vendure-admin-ui-order.mjs +2448 -0
- package/fesm2015/vendure-admin-ui-order.mjs.map +1 -0
- package/fesm2015/vendure-admin-ui-settings.mjs +2784 -0
- package/fesm2015/vendure-admin-ui-settings.mjs.map +1 -0
- package/fesm2015/vendure-admin-ui-system.mjs +165 -0
- package/fesm2015/vendure-admin-ui-system.mjs.map +1 -0
- package/fesm2015/{vendure-admin-ui.js → vendure-admin-ui.mjs} +1 -1
- package/fesm2015/vendure-admin-ui.mjs.map +1 -0
- package/fesm2020/vendure-admin-ui-catalog.mjs +3747 -0
- package/fesm2020/vendure-admin-ui-catalog.mjs.map +1 -0
- package/fesm2020/vendure-admin-ui-core.mjs +15994 -0
- package/fesm2020/vendure-admin-ui-core.mjs.map +1 -0
- package/fesm2020/vendure-admin-ui-customer.mjs +1135 -0
- package/fesm2020/vendure-admin-ui-customer.mjs.map +1 -0
- package/fesm2020/vendure-admin-ui-dashboard.mjs +361 -0
- package/fesm2020/vendure-admin-ui-dashboard.mjs.map +1 -0
- package/fesm2020/vendure-admin-ui-login.mjs +122 -0
- package/fesm2020/vendure-admin-ui-login.mjs.map +1 -0
- package/fesm2020/vendure-admin-ui-marketing.mjs +388 -0
- package/fesm2020/vendure-admin-ui-marketing.mjs.map +1 -0
- package/fesm2020/vendure-admin-ui-order.mjs +2462 -0
- package/fesm2020/vendure-admin-ui-order.mjs.map +1 -0
- package/fesm2020/vendure-admin-ui-settings.mjs +2791 -0
- package/fesm2020/vendure-admin-ui-settings.mjs.map +1 -0
- package/fesm2020/vendure-admin-ui-system.mjs +168 -0
- package/fesm2020/vendure-admin-ui-system.mjs.map +1 -0
- package/fesm2020/vendure-admin-ui.mjs +11 -0
- package/fesm2020/vendure-admin-ui.mjs.map +1 -0
- package/login/components/login/login.component.d.ts +3 -0
- package/login/login.module.d.ts +7 -0
- package/login/package.json +5 -6
- package/login/providers/login.guard.d.ts +3 -0
- package/login/vendure-admin-ui-login.d.ts +1 -0
- package/marketing/components/promotion-detail/promotion-detail.component.d.ts +7 -4
- package/marketing/components/promotion-list/promotion-list.component.d.ts +5 -6
- package/marketing/marketing.module.d.ts +8 -0
- package/marketing/package.json +5 -6
- package/marketing/providers/routing/promotion-resolver.d.ts +5 -2
- package/marketing/vendure-admin-ui-marketing.d.ts +1 -0
- package/order/components/add-manual-payment-dialog/add-manual-payment-dialog.component.d.ts +5 -2
- package/order/components/cancel-order-dialog/cancel-order-dialog.component.d.ts +6 -0
- package/order/components/fulfill-order-dialog/fulfill-order-dialog.component.d.ts +6 -3
- package/order/components/fulfillment-card/fulfillment-card.component.d.ts +6 -3
- package/order/components/fulfillment-detail/fulfillment-detail.component.d.ts +6 -3
- package/order/components/fulfillment-state-label/fulfillment-state-label.component.d.ts +3 -0
- package/order/components/line-fulfillment/line-fulfillment.component.d.ts +8 -3
- package/order/components/line-refunds/line-refunds.component.d.ts +6 -3
- package/order/components/modification-detail/modification-detail.component.d.ts +13 -4
- package/order/components/order-custom-fields-card/order-custom-fields-card.component.d.ts +3 -0
- package/order/components/order-detail/order-detail.component.d.ts +15 -10
- package/order/components/order-editor/order-editor.component.d.ts +16 -12
- package/order/components/order-edits-preview-dialog/order-edits-preview-dialog.component.d.ts +6 -3
- package/order/components/order-history/order-history.component.d.ts +36 -20
- package/order/components/order-list/order-list.component.d.ts +5 -2
- package/order/components/order-payment-card/order-payment-card.component.d.ts +48 -14
- package/order/components/order-process-graph/order-process-edge.component.d.ts +3 -0
- package/order/components/order-process-graph/order-process-graph.component.d.ts +3 -0
- package/order/components/order-process-graph/order-process-node.component.d.ts +3 -0
- package/order/components/order-process-graph-dialog/order-process-graph-dialog.component.d.ts +3 -0
- package/order/components/order-state-select-dialog/order-state-select-dialog.component.d.ts +3 -0
- package/order/components/order-table/order-table.component.d.ts +14 -8
- package/order/components/payment-detail/payment-detail.component.d.ts +5 -2
- package/order/components/payment-state-label/payment-state-label.component.d.ts +3 -0
- package/order/components/refund-order-dialog/refund-order-dialog.component.d.ts +8 -4
- package/order/components/refund-state-label/refund-state-label.component.d.ts +3 -0
- package/order/components/settle-refund-dialog/settle-refund-dialog.component.d.ts +5 -3
- package/order/components/simple-item-list/simple-item-list.component.d.ts +3 -0
- package/order/order.module.d.ts +34 -0
- package/order/package.json +5 -6
- package/order/providers/order-transition.service.d.ts +3 -0
- package/order/providers/routing/order-resolver.d.ts +5 -4
- package/order/vendure-admin-ui-order.d.ts +1 -0
- package/package.json +120 -36
- package/settings/components/add-country-to-zone-dialog/add-country-to-zone-dialog.component.d.ts +6 -3
- package/settings/components/admin-detail/admin-detail.component.d.ts +9 -10
- package/settings/components/administrator-list/administrator-list.component.d.ts +6 -3
- package/settings/components/channel-detail/channel-detail.component.d.ts +7 -8
- package/settings/components/channel-list/channel-list.component.d.ts +5 -5
- package/settings/components/country-detail/country-detail.component.d.ts +7 -4
- package/settings/components/country-list/country-list.component.d.ts +7 -4
- package/settings/components/global-settings/global-settings.component.d.ts +3 -0
- package/settings/components/payment-method-detail/payment-method-detail.component.d.ts +6 -3
- package/settings/components/payment-method-list/payment-method-list.component.d.ts +5 -2
- package/settings/components/permission-grid/permission-grid.component.d.ts +3 -0
- package/settings/components/profile/profile.component.d.ts +5 -2
- package/settings/components/role-detail/role-detail.component.d.ts +3 -0
- package/settings/components/role-list/role-list.component.d.ts +8 -5
- package/settings/components/shipping-eligibility-test-result/shipping-eligibility-test-result.component.d.ts +3 -0
- package/settings/components/shipping-method-detail/shipping-method-detail.component.d.ts +7 -4
- package/settings/components/shipping-method-list/shipping-method-list.component.d.ts +6 -3
- package/settings/components/shipping-method-test-result/shipping-method-test-result.component.d.ts +3 -0
- package/settings/components/tax-category-detail/tax-category-detail.component.d.ts +7 -8
- package/settings/components/tax-category-list/tax-category-list.component.d.ts +6 -6
- package/settings/components/tax-rate-detail/tax-rate-detail.component.d.ts +8 -5
- package/settings/components/tax-rate-list/tax-rate-list.component.d.ts +6 -7
- package/settings/components/test-address-form/test-address-form.component.d.ts +5 -2
- package/settings/components/test-order-builder/test-order-builder.component.d.ts +7 -2
- package/settings/components/zone-detail-dialog/zone-detail-dialog.component.d.ts +3 -0
- package/settings/components/zone-list/zone-list.component.d.ts +10 -7
- package/settings/components/zone-member-list/zone-member-controls.directive.d.ts +3 -0
- package/settings/components/zone-member-list/zone-member-list-header.directive.d.ts +3 -0
- package/settings/components/zone-member-list/zone-member-list.component.d.ts +3 -0
- package/settings/package.json +5 -6
- package/settings/providers/routing/administrator-resolver.d.ts +5 -4
- package/settings/providers/routing/channel-resolver.d.ts +5 -4
- package/settings/providers/routing/country-resolver.d.ts +5 -4
- package/settings/providers/routing/global-settings-resolver.d.ts +5 -4
- package/settings/providers/routing/payment-method-resolver.d.ts +5 -4
- package/settings/providers/routing/profile-resolver.d.ts +5 -4
- package/settings/providers/routing/role-resolver.d.ts +5 -4
- package/settings/providers/routing/shipping-method-resolver.d.ts +5 -4
- package/settings/providers/routing/tax-category-resolver.d.ts +5 -2
- package/settings/providers/routing/tax-rate-resolver.d.ts +5 -2
- package/settings/settings.module.d.ts +35 -0
- package/settings/vendure-admin-ui-settings.d.ts +1 -0
- package/static/i18n-messages/cs.json +5 -1
- package/static/i18n-messages/de.json +5 -1
- package/static/i18n-messages/en.json +6 -2
- package/static/i18n-messages/es.json +5 -1
- package/static/i18n-messages/fr.json +5 -1
- package/static/i18n-messages/it.json +5 -1
- package/static/i18n-messages/pl.json +5 -1
- package/static/i18n-messages/pt_BR.json +5 -1
- package/static/i18n-messages/pt_PT.json +5 -1
- package/static/i18n-messages/ru.json +5 -1
- package/static/i18n-messages/uk.json +5 -1
- package/static/i18n-messages/zh_Hans.json +5 -1
- package/static/i18n-messages/zh_Hant.json +5 -1
- package/static/polyfills.ts +0 -10
- package/static/styles/styles.scss +1 -1
- package/static/theme.min.css +1 -1
- package/system/components/health-check/health-check.component.d.ts +3 -0
- package/system/components/job-list/job-list.component.d.ts +7 -4
- package/system/components/job-state-label/job-state-label.component.d.ts +3 -0
- package/system/package.json +5 -6
- package/system/system.module.d.ts +9 -0
- package/system/vendure-admin-ui-system.d.ts +1 -0
- package/vendure-admin-ui.d.ts +1 -0
- package/bundles/vendure-admin-ui-catalog.umd.js +0 -4638
- package/bundles/vendure-admin-ui-catalog.umd.js.map +0 -1
- package/bundles/vendure-admin-ui-core.umd.js +0 -14759
- package/bundles/vendure-admin-ui-core.umd.js.map +0 -1
- package/bundles/vendure-admin-ui-customer.umd.js +0 -1626
- package/bundles/vendure-admin-ui-customer.umd.js.map +0 -1
- package/bundles/vendure-admin-ui-dashboard.umd.js +0 -757
- package/bundles/vendure-admin-ui-dashboard.umd.js.map +0 -1
- package/bundles/vendure-admin-ui-login.umd.js +0 -157
- package/bundles/vendure-admin-ui-login.umd.js.map +0 -1
- package/bundles/vendure-admin-ui-marketing.umd.js +0 -783
- package/bundles/vendure-admin-ui-marketing.umd.js.map +0 -1
- package/bundles/vendure-admin-ui-order.umd.js +0 -3287
- package/bundles/vendure-admin-ui-order.umd.js.map +0 -1
- package/bundles/vendure-admin-ui-settings.umd.js +0 -3697
- package/bundles/vendure-admin-ui-settings.umd.js.map +0 -1
- package/bundles/vendure-admin-ui-system.umd.js +0 -524
- package/bundles/vendure-admin-ui-system.umd.js.map +0 -1
- package/bundles/vendure-admin-ui.umd.js +0 -21
- package/bundles/vendure-admin-ui.umd.js.map +0 -1
- package/catalog/vendure-admin-ui-catalog.metadata.json +0 -1
- package/core/vendure-admin-ui-core.metadata.json +0 -1
- package/customer/vendure-admin-ui-customer.metadata.json +0 -1
- package/dashboard/vendure-admin-ui-dashboard.metadata.json +0 -1
- package/esm2015/catalog/catalog.module.js +0 -64
- package/esm2015/catalog/catalog.routes.js +0 -176
- package/esm2015/catalog/components/apply-facet-dialog/apply-facet-dialog.component.js +0 -32
- package/esm2015/catalog/components/asset-detail/asset-detail.component.js +0 -74
- package/esm2015/catalog/components/asset-list/asset-list.component.js +0 -119
- package/esm2015/catalog/components/assign-products-to-channel-dialog/assign-products-to-channel-dialog.component.js +0 -109
- package/esm2015/catalog/components/collection-contents/collection-contents.component.js +0 -78
- package/esm2015/catalog/components/collection-detail/collection-detail.component.js +0 -206
- package/esm2015/catalog/components/collection-list/collection-list.component.js +0 -119
- package/esm2015/catalog/components/collection-tree/array-to-tree.js +0 -57
- package/esm2015/catalog/components/collection-tree/collection-tree-node.component.js +0 -94
- package/esm2015/catalog/components/collection-tree/collection-tree.component.js +0 -74
- package/esm2015/catalog/components/confirm-variant-deletion-dialog/confirm-variant-deletion-dialog.component.js +0 -21
- package/esm2015/catalog/components/facet-detail/facet-detail.component.js +0 -326
- package/esm2015/catalog/components/facet-list/facet-list.component.js +0 -107
- package/esm2015/catalog/components/generate-product-variants/generate-product-variants.component.js +0 -78
- package/esm2015/catalog/components/option-value-input/option-value-input.component.js +0 -98
- package/esm2015/catalog/components/product-assets/product-assets.component.js +0 -108
- package/esm2015/catalog/components/product-detail/product-detail.component.js +0 -514
- package/esm2015/catalog/components/product-list/product-list.component.js +0 -153
- package/esm2015/catalog/components/product-options-editor/product-options-editor.component.js +0 -157
- package/esm2015/catalog/components/product-search-input/product-search-input.component.js +0 -104
- package/esm2015/catalog/components/product-variants-editor/product-variants-editor.component.js +0 -316
- package/esm2015/catalog/components/product-variants-list/product-variants-list.component.js +0 -207
- package/esm2015/catalog/components/product-variants-table/product-variants-table.component.js +0 -66
- package/esm2015/catalog/components/update-product-option-dialog/update-product-option-dialog.component.js +0 -61
- package/esm2015/catalog/components/variant-price-detail/variant-price-detail.component.js +0 -60
- package/esm2015/catalog/providers/product-detail/product-detail.service.js +0 -224
- package/esm2015/catalog/providers/routing/asset-resolver.js +0 -37
- package/esm2015/catalog/providers/routing/collection-resolver.js +0 -38
- package/esm2015/catalog/providers/routing/facet-resolver.js +0 -35
- package/esm2015/catalog/providers/routing/product-resolver.js +0 -42
- package/esm2015/catalog/providers/routing/product-variants-resolver.js +0 -31
- package/esm2015/catalog/public_api.js +0 -36
- package/esm2015/core/app.component.js +0 -80
- package/esm2015/core/app.component.module.js +0 -14
- package/esm2015/core/common/base-detail.component.js +0 -106
- package/esm2015/core/common/base-list.component.js +0 -156
- package/esm2015/core/common/generated-types.js +0 -953
- package/esm2015/core/common/introspection-result.js +0 -253
- package/esm2015/core/common/utilities/configurable-operation-utils.js +0 -78
- package/esm2015/core/common/utilities/create-updated-translatable.js +0 -72
- package/esm2015/core/common/utilities/find-translation.js +0 -9
- package/esm2015/core/common/utilities/flatten-facet-values.js +0 -4
- package/esm2015/core/common/utilities/get-default-ui-language.js +0 -13
- package/esm2015/core/components/app-shell/app-shell.component.js +0 -78
- package/esm2015/core/components/breadcrumb/breadcrumb.component.js +0 -126
- package/esm2015/core/components/channel-switcher/channel-switcher.component.js +0 -52
- package/esm2015/core/components/main-nav/main-nav.component.js +0 -272
- package/esm2015/core/components/notification/notification.component.js +0 -71
- package/esm2015/core/components/overlay-host/overlay-host.component.js +0 -22
- package/esm2015/core/components/theme-switcher/theme-switcher.component.js +0 -31
- package/esm2015/core/components/ui-language-switcher-dialog/ui-language-switcher-dialog.component.js +0 -294
- package/esm2015/core/components/user-menu/user-menu.component.js +0 -24
- package/esm2015/core/core.module.js +0 -115
- package/esm2015/core/data/client-state/client-resolvers.js +0 -123
- package/esm2015/core/data/data.module.js +0 -106
- package/esm2015/core/data/definitions/customer-definitions.js +0 -258
- package/esm2015/core/data/providers/administrator-data.service.js +0 -55
- package/esm2015/core/data/providers/auth-data.service.js +0 -20
- package/esm2015/core/data/providers/base-data.service.js +0 -72
- package/esm2015/core/data/providers/client-data.service.js +0 -75
- package/esm2015/core/data/providers/collection-data.service.js +0 -72
- package/esm2015/core/data/providers/customer-data.service.js +0 -114
- package/esm2015/core/data/providers/data.service.js +0 -90
- package/esm2015/core/data/providers/facet-data.service.js +0 -60
- package/esm2015/core/data/providers/fetch-adapter.js +0 -38
- package/esm2015/core/data/providers/interceptor.js +0 -142
- package/esm2015/core/data/providers/order-data.service.js +0 -98
- package/esm2015/core/data/providers/product-data.service.js +0 -232
- package/esm2015/core/data/providers/promotion-data.service.js +0 -36
- package/esm2015/core/data/providers/settings-data.service.js +0 -231
- package/esm2015/core/data/providers/shipping-method-data.service.js +0 -66
- package/esm2015/core/data/server-config.js +0 -76
- package/esm2015/core/data/utils/add-custom-fields.js +0 -78
- package/esm2015/core/data/utils/transform-relation-custom-field-inputs.js +0 -46
- package/esm2015/core/providers/auth/auth.service.js +0 -110
- package/esm2015/core/providers/component-registry/component-registry.service.js +0 -23
- package/esm2015/core/providers/custom-detail-component/custom-detail-component.service.js +0 -44
- package/esm2015/core/providers/custom-field-component/custom-field-component.service.js +0 -47
- package/esm2015/core/providers/dashboard-widget/dashboard-widget.service.js +0 -97
- package/esm2015/core/providers/guard/auth.guard.js +0 -42
- package/esm2015/core/providers/health-check/health-check.service.js +0 -38
- package/esm2015/core/providers/i18n/custom-message-format-compiler.js +0 -30
- package/esm2015/core/providers/i18n/i18n.service.js +0 -56
- package/esm2015/core/providers/job-queue/job-queue.service.js +0 -93
- package/esm2015/core/providers/local-storage/local-storage.service.js +0 -79
- package/esm2015/core/providers/modal/modal.service.js +0 -100
- package/esm2015/core/providers/nav-builder/nav-builder.service.js +0 -264
- package/esm2015/core/providers/notification/notification.service.js +0 -165
- package/esm2015/core/providers/overlay-host/overlay-host.service.js +0 -46
- package/esm2015/core/public_api.js +0 -217
- package/esm2015/core/shared/components/action-bar/action-bar.component.js +0 -47
- package/esm2015/core/shared/components/action-bar-items/action-bar-items.component.js +0 -78
- package/esm2015/core/shared/components/address-form/address-form.component.js +0 -17
- package/esm2015/core/shared/components/affixed-input/affixed-input.component.js +0 -19
- package/esm2015/core/shared/components/affixed-input/percentage-suffix-input.component.js +0 -70
- package/esm2015/core/shared/components/asset-file-input/asset-file-input.component.js +0 -92
- package/esm2015/core/shared/components/asset-gallery/asset-gallery.component.js +0 -102
- package/esm2015/core/shared/components/asset-picker-dialog/asset-picker-dialog.component.js +0 -138
- package/esm2015/core/shared/components/asset-preview/asset-preview.component.js +0 -176
- package/esm2015/core/shared/components/asset-preview-dialog/asset-preview-dialog.component.js +0 -35
- package/esm2015/core/shared/components/asset-search-input/asset-search-input.component.js +0 -102
- package/esm2015/core/shared/components/channel-assignment-control/channel-assignment-control.component.js +0 -109
- package/esm2015/core/shared/components/channel-badge/channel-badge.component.js +0 -19
- package/esm2015/core/shared/components/chip/chip.component.js +0 -42
- package/esm2015/core/shared/components/configurable-input/configurable-input.component.js +0 -128
- package/esm2015/core/shared/components/currency-input/currency-input.component.js +0 -145
- package/esm2015/core/shared/components/custom-detail-component-host/custom-detail-component-host.component.js +0 -44
- package/esm2015/core/shared/components/custom-field-control/custom-field-control.component.js +0 -55
- package/esm2015/core/shared/components/customer-label/customer-label.component.js +0 -15
- package/esm2015/core/shared/components/data-table/data-table-column.component.js +0 -22
- package/esm2015/core/shared/components/data-table/data-table.component.js +0 -106
- package/esm2015/core/shared/components/datetime-picker/datetime-picker.component.js +0 -205
- package/esm2015/core/shared/components/datetime-picker/datetime-picker.service.js +0 -199
- package/esm2015/core/shared/components/dropdown/dropdown-item.directive.js +0 -24
- package/esm2015/core/shared/components/dropdown/dropdown-menu.component.js +0 -121
- package/esm2015/core/shared/components/dropdown/dropdown-trigger.directive.js +0 -25
- package/esm2015/core/shared/components/dropdown/dropdown.component.js +0 -60
- package/esm2015/core/shared/components/edit-note-dialog/edit-note-dialog.component.js +0 -26
- package/esm2015/core/shared/components/empty-placeholder/empty-placeholder.component.js +0 -15
- package/esm2015/core/shared/components/entity-info/entity-info.component.js +0 -19
- package/esm2015/core/shared/components/extension-host/extension-host.component.js +0 -83
- package/esm2015/core/shared/components/extension-host/extension-host.service.js +0 -100
- package/esm2015/core/shared/components/facet-value-chip/facet-value-chip.component.js +0 -23
- package/esm2015/core/shared/components/facet-value-selector/facet-value-selector.component.js +0 -114
- package/esm2015/core/shared/components/focal-point-control/focal-point-control.component.js +0 -56
- package/esm2015/core/shared/components/form-field/form-field-control.directive.js +0 -35
- package/esm2015/core/shared/components/form-field/form-field.component.js +0 -61
- package/esm2015/core/shared/components/form-item/form-item.component.js +0 -19
- package/esm2015/core/shared/components/formatted-address/formatted-address.component.js +0 -37
- package/esm2015/core/shared/components/help-tooltip/help-tooltip.component.js +0 -16
- package/esm2015/core/shared/components/history-entry-detail/history-entry-detail.component.js +0 -12
- package/esm2015/core/shared/components/items-per-page-controls/items-per-page-controls.component.js +0 -23
- package/esm2015/core/shared/components/labeled-data/labeled-data.component.js +0 -15
- package/esm2015/core/shared/components/language-selector/language-selector.component.js +0 -21
- package/esm2015/core/shared/components/manage-tags-dialog/manage-tags-dialog.component.js +0 -58
- package/esm2015/core/shared/components/modal-dialog/dialog-buttons.directive.js +0 -23
- package/esm2015/core/shared/components/modal-dialog/dialog-component-outlet.component.js +0 -31
- package/esm2015/core/shared/components/modal-dialog/dialog-title.directive.js +0 -23
- package/esm2015/core/shared/components/modal-dialog/modal-dialog.component.js +0 -57
- package/esm2015/core/shared/components/object-tree/object-tree.component.js +0 -53
- package/esm2015/core/shared/components/order-state-label/order-state-label.component.js +0 -43
- package/esm2015/core/shared/components/pagination-controls/pagination-controls.component.js +0 -22
- package/esm2015/core/shared/components/product-selector/product-selector.component.js +0 -61
- package/esm2015/core/shared/components/rich-text-editor/external-image-dialog/external-image-dialog.component.js +0 -32
- package/esm2015/core/shared/components/rich-text-editor/link-dialog/link-dialog.component.js +0 -28
- package/esm2015/core/shared/components/rich-text-editor/prosemirror/prosemirror.service.js +0 -112
- package/esm2015/core/shared/components/rich-text-editor/rich-text-editor.component.js +0 -86
- package/esm2015/core/shared/components/select-toggle/select-toggle.component.js +0 -28
- package/esm2015/core/shared/components/simple-dialog/simple-dialog.component.js +0 -21
- package/esm2015/core/shared/components/status-badge/status-badge.component.js +0 -18
- package/esm2015/core/shared/components/tabbed-custom-fields/tabbed-custom-fields.component.js +0 -49
- package/esm2015/core/shared/components/table-row-action/table-row-action.component.js +0 -23
- package/esm2015/core/shared/components/tag-selector/tag-selector.component.js +0 -55
- package/esm2015/core/shared/components/timeline-entry/timeline-entry.component.js +0 -40
- package/esm2015/core/shared/components/title-input/title-input.component.js +0 -18
- package/esm2015/core/shared/components/ui-extension-point/ui-extension-point.component.js +0 -31
- package/esm2015/core/shared/directives/disabled.directive.js +0 -38
- package/esm2015/core/shared/directives/if-default-channel-active.directive.js +0 -42
- package/esm2015/core/shared/directives/if-directive-base.js +0 -75
- package/esm2015/core/shared/directives/if-multichannel.directive.js +0 -47
- package/esm2015/core/shared/directives/if-permissions.directive.js +0 -78
- package/esm2015/core/shared/dynamic-form-inputs/boolean-form-input/boolean-form-input.component.js +0 -20
- package/esm2015/core/shared/dynamic-form-inputs/code-editor-form-input/json-editor-form-input.component.js +0 -125
- package/esm2015/core/shared/dynamic-form-inputs/currency-form-input/currency-form-input.component.js +0 -33
- package/esm2015/core/shared/dynamic-form-inputs/customer-group-form-input/customer-group-form-input.component.js +0 -43
- package/esm2015/core/shared/dynamic-form-inputs/date-form-input/date-form-input.component.js +0 -35
- package/esm2015/core/shared/dynamic-form-inputs/dynamic-form-input/dynamic-form-input.component.js +0 -266
- package/esm2015/core/shared/dynamic-form-inputs/facet-value-form-input/facet-value-form-input.component.js +0 -36
- package/esm2015/core/shared/dynamic-form-inputs/number-form-input/number-form-input.component.js +0 -43
- package/esm2015/core/shared/dynamic-form-inputs/password-form-input/password-form-input.component.js +0 -20
- package/esm2015/core/shared/dynamic-form-inputs/product-selector-form-input/product-selector-form-input.component.js +0 -60
- package/esm2015/core/shared/dynamic-form-inputs/relation-form-input/asset/relation-asset-input.component.js +0 -69
- package/esm2015/core/shared/dynamic-form-inputs/relation-form-input/customer/relation-customer-input.component.js +0 -66
- package/esm2015/core/shared/dynamic-form-inputs/relation-form-input/product/relation-product-input.component.js +0 -81
- package/esm2015/core/shared/dynamic-form-inputs/relation-form-input/product-variant/relation-product-variant-input.component.js +0 -81
- package/esm2015/core/shared/dynamic-form-inputs/relation-form-input/relation-card/relation-card.component.js +0 -43
- package/esm2015/core/shared/dynamic-form-inputs/relation-form-input/relation-form-input.component.js +0 -25
- package/esm2015/core/shared/dynamic-form-inputs/relation-form-input/relation-selector-dialog/relation-selector-dialog.component.js +0 -12
- package/esm2015/core/shared/dynamic-form-inputs/rich-text-form-input/rich-text-form-input.component.js +0 -20
- package/esm2015/core/shared/dynamic-form-inputs/select-form-input/select-form-input.component.js +0 -28
- package/esm2015/core/shared/dynamic-form-inputs/text-form-input/text-form-input.component.js +0 -28
- package/esm2015/core/shared/dynamic-form-inputs/textarea-form-input/textarea-form-input.component.js +0 -23
- package/esm2015/core/shared/pipes/asset-preview.pipe.js +0 -38
- package/esm2015/core/shared/pipes/channel-label.pipe.js +0 -19
- package/esm2015/core/shared/pipes/custom-field-label.pipe.js +0 -46
- package/esm2015/core/shared/pipes/duration.pipe.js +0 -48
- package/esm2015/core/shared/pipes/file-size.pipe.js +0 -43
- package/esm2015/core/shared/pipes/has-permission.pipe.js +0 -65
- package/esm2015/core/shared/pipes/locale-base.pipe.js +0 -57
- package/esm2015/core/shared/pipes/locale-currency-name.pipe.js +0 -58
- package/esm2015/core/shared/pipes/locale-currency.pipe.js +0 -40
- package/esm2015/core/shared/pipes/locale-date.pipe.js +0 -80
- package/esm2015/core/shared/pipes/locale-language-name.pipe.js +0 -47
- package/esm2015/core/shared/pipes/locale-region-name.pipe.js +0 -47
- package/esm2015/core/shared/pipes/sentence-case.pipe.js +0 -26
- package/esm2015/core/shared/pipes/sort.pipe.js +0 -30
- package/esm2015/core/shared/pipes/state-i18n-token.pipe.js +0 -46
- package/esm2015/core/shared/pipes/string-to-color.pipe.js +0 -14
- package/esm2015/core/shared/pipes/time-ago.pipe.js +0 -51
- package/esm2015/core/shared/providers/routing/can-deactivate-detail-guard.js +0 -36
- package/esm2015/core/shared/shared.module.js +0 -263
- package/esm2015/customer/components/add-customer-to-group-dialog/add-customer-to-group-dialog.component.js +0 -42
- package/esm2015/customer/components/address-card/address-card.component.js +0 -86
- package/esm2015/customer/components/address-detail-dialog/address-detail-dialog.component.js +0 -28
- package/esm2015/customer/components/customer-detail/customer-detail.component.js +0 -393
- package/esm2015/customer/components/customer-group-detail-dialog/customer-group-detail-dialog.component.js +0 -47
- package/esm2015/customer/components/customer-group-list/customer-group-list.component.js +0 -184
- package/esm2015/customer/components/customer-group-member-list/customer-group-member-list.component.js +0 -101
- package/esm2015/customer/components/customer-history/customer-history.component.js +0 -76
- package/esm2015/customer/components/customer-list/customer-list.component.js +0 -78
- package/esm2015/customer/components/customer-status-label/customer-status-label.component.js +0 -15
- package/esm2015/customer/components/select-customer-group-dialog/select-customer-group-dialog.component.js +0 -31
- package/esm2015/customer/customer.module.js +0 -37
- package/esm2015/customer/customer.routes.js +0 -44
- package/esm2015/customer/providers/routing/customer-resolver.js +0 -35
- package/esm2015/dashboard/components/dashboard/dashboard.component.js +0 -124
- package/esm2015/dashboard/components/dashboard-widget/dashboard-widget.component.js +0 -39
- package/esm2015/dashboard/dashboard.module.js +0 -25
- package/esm2015/dashboard/default-widgets.js +0 -34
- package/esm2015/dashboard/widgets/latest-orders-widget/latest-orders-widget.component.js +0 -42
- package/esm2015/dashboard/widgets/order-summary-widget/order-summary-widget.component.js +0 -56
- package/esm2015/dashboard/widgets/test-widget/test-widget.component.js +0 -19
- package/esm2015/dashboard/widgets/welcome-widget/welcome-widget.component.js +0 -36
- package/esm2015/login/components/login/login.component.js +0 -61
- package/esm2015/login/login.module.js +0 -15
- package/esm2015/login/providers/login.guard.js +0 -35
- package/esm2015/marketing/components/promotion-detail/promotion-detail.component.js +0 -247
- package/esm2015/marketing/components/promotion-list/promotion-list.component.js +0 -87
- package/esm2015/marketing/marketing.module.js +0 -15
- package/esm2015/marketing/marketing.routes.js +0 -35
- package/esm2015/marketing/providers/routing/promotion-resolver.js +0 -34
- package/esm2015/order/components/add-manual-payment-dialog/add-manual-payment-dialog.component.js +0 -39
- package/esm2015/order/components/cancel-order-dialog/cancel-order-dialog.component.js +0 -52
- package/esm2015/order/components/fulfill-order-dialog/fulfill-order-dialog.component.js +0 -71
- package/esm2015/order/components/fulfillment-card/fulfillment-card.component.js +0 -43
- package/esm2015/order/components/fulfillment-detail/fulfillment-detail.component.js +0 -64
- package/esm2015/order/components/fulfillment-state-label/fulfillment-state-label.component.js +0 -26
- package/esm2015/order/components/line-fulfillment/line-fulfillment.component.js +0 -65
- package/esm2015/order/components/line-refunds/line-refunds.component.js +0 -35
- package/esm2015/order/components/modification-detail/modification-detail.component.js +0 -66
- package/esm2015/order/components/order-custom-fields-card/order-custom-fields-card.component.js +0 -39
- package/esm2015/order/components/order-detail/order-detail.component.js +0 -509
- package/esm2015/order/components/order-editor/order-editor.component.js +0 -362
- package/esm2015/order/components/order-edits-preview-dialog/order-edits-preview-dialog.component.js +0 -50
- package/esm2015/order/components/order-history/order-history.component.js +0 -154
- package/esm2015/order/components/order-list/order-list.component.js +0 -188
- package/esm2015/order/components/order-payment-card/order-payment-card.component.js +0 -33
- package/esm2015/order/components/order-process-graph/order-process-edge.component.js +0 -37
- package/esm2015/order/components/order-process-graph/order-process-graph.component.js +0 -94
- package/esm2015/order/components/order-process-graph/order-process-node.component.js +0 -53
- package/esm2015/order/components/order-process-graph-dialog/order-process-graph-dialog.component.js +0 -23
- package/esm2015/order/components/order-state-select-dialog/order-state-select-dialog.component.js +0 -25
- package/esm2015/order/components/order-table/order-table.component.js +0 -68
- package/esm2015/order/components/payment-detail/payment-detail.component.js +0 -16
- package/esm2015/order/components/payment-state-label/payment-state-label.component.js +0 -26
- package/esm2015/order/components/refund-order-dialog/refund-order-dialog.component.js +0 -133
- package/esm2015/order/components/refund-state-label/refund-state-label.component.js +0 -25
- package/esm2015/order/components/settle-refund-dialog/settle-refund-dialog.component.js +0 -21
- package/esm2015/order/components/simple-item-list/simple-item-list.component.js +0 -15
- package/esm2015/order/order.module.js +0 -70
- package/esm2015/order/order.routes.js +0 -54
- package/esm2015/order/providers/order-transition.service.js +0 -116
- package/esm2015/order/providers/routing/order-resolver.js +0 -33
- package/esm2015/settings/components/add-country-to-zone-dialog/add-country-to-zone-dialog.component.js +0 -35
- package/esm2015/settings/components/admin-detail/admin-detail.component.js +0 -199
- package/esm2015/settings/components/administrator-list/administrator-list.component.js +0 -52
- package/esm2015/settings/components/channel-detail/channel-detail.component.js +0 -163
- package/esm2015/settings/components/channel-list/channel-list.component.js +0 -57
- package/esm2015/settings/components/country-detail/country-detail.component.js +0 -120
- package/esm2015/settings/components/country-list/country-list.component.js +0 -82
- package/esm2015/settings/components/global-settings/global-settings.component.js +0 -89
- package/esm2015/settings/components/payment-method-detail/payment-method-detail.component.js +0 -204
- package/esm2015/settings/components/payment-method-list/payment-method-list.component.js +0 -66
- package/esm2015/settings/components/permission-grid/permission-grid.component.js +0 -80
- package/esm2015/settings/components/profile/profile.component.js +0 -82
- package/esm2015/settings/components/role-detail/role-detail.component.js +0 -109
- package/esm2015/settings/components/role-list/role-list.component.js +0 -73
- package/esm2015/settings/components/shipping-eligibility-test-result/shipping-eligibility-test-result.component.js +0 -24
- package/esm2015/settings/components/shipping-method-detail/shipping-method-detail.component.js +0 -235
- package/esm2015/settings/components/shipping-method-list/shipping-method-list.component.js +0 -94
- package/esm2015/settings/components/shipping-method-test-result/shipping-method-test-result.component.js +0 -24
- package/esm2015/settings/components/tax-category-detail/tax-category-detail.component.js +0 -115
- package/esm2015/settings/components/tax-category-list/tax-category-list.component.js +0 -60
- package/esm2015/settings/components/tax-rate-detail/tax-rate-detail.component.js +0 -131
- package/esm2015/settings/components/tax-rate-list/tax-rate-list.component.js +0 -64
- package/esm2015/settings/components/test-address-form/test-address-form.component.js +0 -53
- package/esm2015/settings/components/test-order-builder/test-order-builder.component.js +0 -73
- package/esm2015/settings/components/zone-detail-dialog/zone-detail-dialog.component.js +0 -47
- package/esm2015/settings/components/zone-list/zone-list.component.js +0 -160
- package/esm2015/settings/components/zone-member-list/zone-member-controls.directive.js +0 -15
- package/esm2015/settings/components/zone-member-list/zone-member-list-header.directive.js +0 -15
- package/esm2015/settings/components/zone-member-list/zone-member-list.component.js +0 -63
- package/esm2015/settings/providers/routing/administrator-resolver.js +0 -32
- package/esm2015/settings/providers/routing/channel-resolver.js +0 -40
- package/esm2015/settings/providers/routing/country-resolver.js +0 -35
- package/esm2015/settings/providers/routing/global-settings-resolver.js +0 -28
- package/esm2015/settings/providers/routing/payment-method-resolver.js +0 -37
- package/esm2015/settings/providers/routing/profile-resolver.js +0 -34
- package/esm2015/settings/providers/routing/role-resolver.js +0 -32
- package/esm2015/settings/providers/routing/shipping-method-resolver.js +0 -38
- package/esm2015/settings/providers/routing/tax-category-resolver.js +0 -32
- package/esm2015/settings/providers/routing/tax-rate-resolver.js +0 -36
- package/esm2015/settings/settings.module.js +0 -72
- package/esm2015/settings/settings.routes.js +0 -255
- package/esm2015/system/components/health-check/health-check.component.js +0 -19
- package/esm2015/system/components/job-list/job-list.component.js +0 -74
- package/esm2015/system/components/job-state-label/job-state-label.component.js +0 -45
- package/esm2015/system/system.module.js +0 -16
- package/esm2015/system/system.routes.js +0 -22
- package/fesm2015/vendure-admin-ui-catalog.js +0 -3800
- package/fesm2015/vendure-admin-ui-catalog.js.map +0 -1
- package/fesm2015/vendure-admin-ui-core.js +0 -15757
- package/fesm2015/vendure-admin-ui-core.js.map +0 -1
- package/fesm2015/vendure-admin-ui-customer.js +0 -1140
- package/fesm2015/vendure-admin-ui-customer.js.map +0 -1
- package/fesm2015/vendure-admin-ui-dashboard.js +0 -371
- package/fesm2015/vendure-admin-ui-dashboard.js.map +0 -1
- package/fesm2015/vendure-admin-ui-login.js +0 -121
- package/fesm2015/vendure-admin-ui-login.js.map +0 -1
- package/fesm2015/vendure-admin-ui-marketing.js +0 -403
- package/fesm2015/vendure-admin-ui-marketing.js.map +0 -1
- package/fesm2015/vendure-admin-ui-order.js +0 -2492
- package/fesm2015/vendure-admin-ui-order.js.map +0 -1
- package/fesm2015/vendure-admin-ui-settings.js +0 -2975
- package/fesm2015/vendure-admin-ui-settings.js.map +0 -1
- package/fesm2015/vendure-admin-ui-system.js +0 -171
- package/fesm2015/vendure-admin-ui-system.js.map +0 -1
- package/fesm2015/vendure-admin-ui.js.map +0 -1
- package/login/vendure-admin-ui-login.metadata.json +0 -1
- package/marketing/vendure-admin-ui-marketing.metadata.json +0 -1
- package/order/vendure-admin-ui-order.metadata.json +0 -1
- package/settings/vendure-admin-ui-settings.metadata.json +0 -1
- package/system/vendure-admin-ui-system.metadata.json +0 -1
- package/vendure-admin-ui.metadata.json +0 -1
|
@@ -0,0 +1,2784 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { Directive, EventEmitter, Component, ChangeDetectionStrategy, Input, Output, ContentChild, Injectable, NgModule } from '@angular/core';
|
|
3
|
+
import { map, take, mergeMap, switchMap, startWith, tap, withLatestFrom, takeUntil, distinctUntilChanged, mapTo } from 'rxjs/operators';
|
|
4
|
+
import * as i2 from '@vendure/admin-ui/core';
|
|
5
|
+
import { BaseDetailComponent, Permission, BaseListComponent, CurrencyCode, createUpdatedTranslatable, findTranslation, DeletionResult, LanguageCode, configurableDefinitionToInstance, toConfigurableOperationInput, getConfigArgValue, BaseEntityResolver, getDefaultUiLanguage, createResolveData, CanDeactivateDetailGuard, detailBreadcrumb, SharedModule } from '@vendure/admin-ui/core';
|
|
6
|
+
import * as i5 from '@angular/common';
|
|
7
|
+
import * as i3 from '@angular/forms';
|
|
8
|
+
import { Validators, FormControl } from '@angular/forms';
|
|
9
|
+
import * as i4 from '@clr/angular';
|
|
10
|
+
import * as i6 from '@ngx-translate/core';
|
|
11
|
+
import { marker } from '@biesbjerg/ngx-translate-extract-marker';
|
|
12
|
+
import { CUSTOMER_ROLE_CODE, DEFAULT_CHANNEL_CODE, SUPER_ADMIN_ROLE_CODE } from '@vendure/common/lib/shared-constants';
|
|
13
|
+
import * as i1 from '@angular/router';
|
|
14
|
+
import { RouterModule } from '@angular/router';
|
|
15
|
+
import * as i4$1 from '@ng-select/ng-select';
|
|
16
|
+
import { EMPTY, Subject, combineLatest, of, merge } from 'rxjs';
|
|
17
|
+
import { normalizeString } from '@vendure/common/lib/normalize-string';
|
|
18
|
+
import { unique } from '@vendure/common/lib/unique';
|
|
19
|
+
import * as i5$1 from '@angular/cdk/bidi';
|
|
20
|
+
|
|
21
|
+
class ZoneMemberControlsDirective {
|
|
22
|
+
constructor(templateRef) {
|
|
23
|
+
this.templateRef = templateRef;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
ZoneMemberControlsDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: ZoneMemberControlsDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
27
|
+
ZoneMemberControlsDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2.3", type: ZoneMemberControlsDirective, selector: "[vdrZoneMemberControls]", ngImport: i0 });
|
|
28
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: ZoneMemberControlsDirective, decorators: [{
|
|
29
|
+
type: Directive,
|
|
30
|
+
args: [{
|
|
31
|
+
selector: '[vdrZoneMemberControls]',
|
|
32
|
+
}]
|
|
33
|
+
}], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });
|
|
34
|
+
|
|
35
|
+
class ZoneMemberListHeaderDirective {
|
|
36
|
+
constructor(templateRef) {
|
|
37
|
+
this.templateRef = templateRef;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
ZoneMemberListHeaderDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: ZoneMemberListHeaderDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
41
|
+
ZoneMemberListHeaderDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2.3", type: ZoneMemberListHeaderDirective, selector: "[vdrZoneMemberListHeader]", ngImport: i0 });
|
|
42
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: ZoneMemberListHeaderDirective, decorators: [{
|
|
43
|
+
type: Directive,
|
|
44
|
+
args: [{
|
|
45
|
+
selector: '[vdrZoneMemberListHeader]',
|
|
46
|
+
}]
|
|
47
|
+
}], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });
|
|
48
|
+
|
|
49
|
+
class ZoneMemberListComponent {
|
|
50
|
+
constructor() {
|
|
51
|
+
this.members = [];
|
|
52
|
+
this.selectedMemberIds = [];
|
|
53
|
+
this.selectionChange = new EventEmitter();
|
|
54
|
+
this.filterTerm = '';
|
|
55
|
+
this.isMemberSelected = (member) => {
|
|
56
|
+
return -1 < this.selectedMemberIds.indexOf(member.id);
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
filteredMembers() {
|
|
60
|
+
if (this.filterTerm !== '') {
|
|
61
|
+
const term = this.filterTerm.toLocaleLowerCase();
|
|
62
|
+
return this.members.filter(m => m.name.toLocaleLowerCase().includes(term) || m.code.toLocaleLowerCase().includes(term));
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
return this.members;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
areAllSelected() {
|
|
69
|
+
if (this.members) {
|
|
70
|
+
return this.selectedMemberIds.length === this.members.length;
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
toggleSelectAll() {
|
|
77
|
+
if (this.areAllSelected()) {
|
|
78
|
+
this.selectionChange.emit([]);
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
this.selectionChange.emit(this.members.map(v => v.id));
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
toggleSelectMember(member) {
|
|
85
|
+
if (this.selectedMemberIds.includes(member.id)) {
|
|
86
|
+
this.selectionChange.emit(this.selectedMemberIds.filter(id => id !== member.id));
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
this.selectionChange.emit([...this.selectedMemberIds, member.id]);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
ZoneMemberListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: ZoneMemberListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
94
|
+
ZoneMemberListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: ZoneMemberListComponent, selector: "vdr-zone-member-list", inputs: { members: "members", selectedMemberIds: "selectedMemberIds" }, outputs: { selectionChange: "selectionChange" }, queries: [{ propertyName: "headerTemplate", first: true, predicate: ZoneMemberListHeaderDirective, descendants: true }, { propertyName: "controlsTemplate", first: true, predicate: ZoneMemberControlsDirective, descendants: true }], ngImport: i0, template: "<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", styles: [".members-header{background-color:var(--color-component-bg-100);position:sticky;top:0;padding:6px;z-index:5;border-bottom:1px solid var(--color-component-border-200)}.members-header .header-title-row{display:flex;justify-content:space-between;align-items:center}.members-header .clr-input{width:100%}\n"], components: [{ type: i2.DataTableComponent, selector: "vdr-data-table", inputs: ["items", "itemsPerPage", "currentPage", "totalItems", "allSelected", "isRowSelectedFn", "emptyStateLabel"], outputs: ["allSelectChange", "rowSelectChange", "pageChange", "itemsPerPageChange"] }, { type: i2.DataTableColumnComponent, selector: "vdr-dt-column", inputs: ["expand"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i2.FormFieldControlDirective, selector: "input, textarea, select" }, { type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i4.ClrIconCustomTag, selector: "clr-icon" }], pipes: { "translate": i6.TranslatePipe, "hasPermission": i2.HasPermissionPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
95
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: ZoneMemberListComponent, decorators: [{
|
|
96
|
+
type: Component,
|
|
97
|
+
args: [{ selector: 'vdr-zone-member-list', changeDetection: ChangeDetectionStrategy.OnPush, template: "<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", styles: [".members-header{background-color:var(--color-component-bg-100);position:sticky;top:0;padding:6px;z-index:5;border-bottom:1px solid var(--color-component-border-200)}.members-header .header-title-row{display:flex;justify-content:space-between;align-items:center}.members-header .clr-input{width:100%}\n"] }]
|
|
98
|
+
}], propDecorators: { members: [{
|
|
99
|
+
type: Input
|
|
100
|
+
}], selectedMemberIds: [{
|
|
101
|
+
type: Input
|
|
102
|
+
}], selectionChange: [{
|
|
103
|
+
type: Output
|
|
104
|
+
}], headerTemplate: [{
|
|
105
|
+
type: ContentChild,
|
|
106
|
+
args: [ZoneMemberListHeaderDirective]
|
|
107
|
+
}], controlsTemplate: [{
|
|
108
|
+
type: ContentChild,
|
|
109
|
+
args: [ZoneMemberControlsDirective]
|
|
110
|
+
}] } });
|
|
111
|
+
|
|
112
|
+
class AddCountryToZoneDialogComponent {
|
|
113
|
+
constructor(dataService) {
|
|
114
|
+
this.dataService = dataService;
|
|
115
|
+
this.currentMembers = [];
|
|
116
|
+
this.selectedMemberIds = [];
|
|
117
|
+
}
|
|
118
|
+
ngOnInit() {
|
|
119
|
+
const currentMemberIds = this.currentMembers.map(m => m.id);
|
|
120
|
+
this.availableCountries$ = this.dataService.settings
|
|
121
|
+
.getCountries(999)
|
|
122
|
+
.mapStream(data => data.countries.items)
|
|
123
|
+
.pipe(map(countries => countries.filter(c => !currentMemberIds.includes(c.id))));
|
|
124
|
+
}
|
|
125
|
+
cancel() {
|
|
126
|
+
this.resolveWith();
|
|
127
|
+
}
|
|
128
|
+
add() {
|
|
129
|
+
this.resolveWith(this.selectedMemberIds);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
AddCountryToZoneDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: AddCountryToZoneDialogComponent, deps: [{ token: i2.DataService }], target: i0.ɵɵFactoryTarget.Component });
|
|
133
|
+
AddCountryToZoneDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: AddCountryToZoneDialogComponent, selector: "vdr-add-country-to-zone-dialog", ngImport: i0, template: "<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", styles: [""], components: [{ type: ZoneMemberListComponent, selector: "vdr-zone-member-list", inputs: ["members", "selectedMemberIds"], outputs: ["selectionChange"] }], directives: [{ type: i2.DialogTitleDirective, selector: "[vdrDialogTitle]" }, { type: i2.DialogButtonsDirective, selector: "[vdrDialogButtons]" }], pipes: { "translate": i6.TranslatePipe, "async": i5.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
134
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: AddCountryToZoneDialogComponent, decorators: [{
|
|
135
|
+
type: Component,
|
|
136
|
+
args: [{ selector: 'vdr-add-country-to-zone-dialog', changeDetection: ChangeDetectionStrategy.OnPush, template: "<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", styles: [""] }]
|
|
137
|
+
}], ctorParameters: function () { return [{ type: i2.DataService }]; } });
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* A table showing and allowing the setting of all possible CRUD permissions.
|
|
141
|
+
*/
|
|
142
|
+
class PermissionGridComponent {
|
|
143
|
+
constructor() {
|
|
144
|
+
this.readonly = false;
|
|
145
|
+
this.permissionChange = new EventEmitter();
|
|
146
|
+
}
|
|
147
|
+
ngOnInit() {
|
|
148
|
+
this.buildGrid();
|
|
149
|
+
}
|
|
150
|
+
setPermission(permission, value) {
|
|
151
|
+
if (!this.readonly) {
|
|
152
|
+
this.permissionChange.emit({ permission, value });
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
toggleAll(defs) {
|
|
156
|
+
const value = defs.some(d => !this.activePermissions.includes(d.name));
|
|
157
|
+
for (const def of defs) {
|
|
158
|
+
this.permissionChange.emit({ permission: def.name, value });
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
buildGrid() {
|
|
162
|
+
var _a;
|
|
163
|
+
const crudGroups = new Map();
|
|
164
|
+
const nonCrud = [];
|
|
165
|
+
const crudRe = /^(Create|Read|Update|Delete)([a-zA-Z]+)$/;
|
|
166
|
+
for (const def of this.permissionDefinitions) {
|
|
167
|
+
const isCrud = crudRe.test(def.name);
|
|
168
|
+
if (isCrud) {
|
|
169
|
+
const groupName = (_a = def.name.match(crudRe)) === null || _a === void 0 ? void 0 : _a[2];
|
|
170
|
+
if (groupName) {
|
|
171
|
+
const existing = crudGroups.get(groupName);
|
|
172
|
+
if (existing) {
|
|
173
|
+
existing.push(def);
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
crudGroups.set(groupName, [def]);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
else if (def.assignable) {
|
|
181
|
+
nonCrud.push(def);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
this.gridData = [
|
|
185
|
+
...nonCrud.map(d => ({
|
|
186
|
+
label: d.name,
|
|
187
|
+
description: d.description,
|
|
188
|
+
permissions: [d],
|
|
189
|
+
})),
|
|
190
|
+
...Array.from(crudGroups.entries()).map(([label, defs]) => {
|
|
191
|
+
return {
|
|
192
|
+
label,
|
|
193
|
+
description: this.extractCrudDescription(defs[0]),
|
|
194
|
+
permissions: defs,
|
|
195
|
+
};
|
|
196
|
+
}),
|
|
197
|
+
];
|
|
198
|
+
}
|
|
199
|
+
extractCrudDescription(def) {
|
|
200
|
+
return def.description.replace(/Grants permission to [\w]+/, 'Grants permissions on');
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
PermissionGridComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: PermissionGridComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
204
|
+
PermissionGridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: PermissionGridComponent, selector: "vdr-permission-grid", inputs: { permissionDefinitions: "permissionDefinitions", activePermissions: "activePermissions", readonly: "readonly" }, outputs: { permissionChange: "permissionChange" }, ngImport: i0, template: "<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", styles: ["td.permission-group{max-width:300px;background-color:var(--color-component-bg-200)}\n"], components: [{ type: i2.SelectToggleComponent, selector: "vdr-select-toggle", inputs: ["size", "selected", "disabled", "label"], outputs: ["selectedChange"] }], directives: [{ type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "translate": i6.TranslatePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
205
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: PermissionGridComponent, decorators: [{
|
|
206
|
+
type: Component,
|
|
207
|
+
args: [{ selector: 'vdr-permission-grid', changeDetection: ChangeDetectionStrategy.OnPush, template: "<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", styles: ["td.permission-group{max-width:300px;background-color:var(--color-component-bg-200)}\n"] }]
|
|
208
|
+
}], propDecorators: { permissionDefinitions: [{
|
|
209
|
+
type: Input
|
|
210
|
+
}], activePermissions: [{
|
|
211
|
+
type: Input
|
|
212
|
+
}], readonly: [{
|
|
213
|
+
type: Input
|
|
214
|
+
}], permissionChange: [{
|
|
215
|
+
type: Output
|
|
216
|
+
}] } });
|
|
217
|
+
|
|
218
|
+
class AdminDetailComponent extends BaseDetailComponent {
|
|
219
|
+
constructor(router, route, serverConfigService, changeDetector, dataService, formBuilder, notificationService) {
|
|
220
|
+
super(route, router, serverConfigService, dataService);
|
|
221
|
+
this.changeDetector = changeDetector;
|
|
222
|
+
this.dataService = dataService;
|
|
223
|
+
this.formBuilder = formBuilder;
|
|
224
|
+
this.notificationService = notificationService;
|
|
225
|
+
this.selectedRoles = [];
|
|
226
|
+
this.selectedRolePermissions = {};
|
|
227
|
+
this.selectedChannelId = null;
|
|
228
|
+
this.customFields = this.getCustomFieldConfig('Administrator');
|
|
229
|
+
this.detailForm = this.formBuilder.group({
|
|
230
|
+
emailAddress: ['', Validators.required],
|
|
231
|
+
firstName: ['', Validators.required],
|
|
232
|
+
lastName: ['', Validators.required],
|
|
233
|
+
password: [''],
|
|
234
|
+
roles: [[]],
|
|
235
|
+
customFields: this.formBuilder.group(this.customFields.reduce((hash, field) => (Object.assign(Object.assign({}, hash), { [field.name]: '' })), {})),
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
getAvailableChannels() {
|
|
239
|
+
return Object.values(this.selectedRolePermissions);
|
|
240
|
+
}
|
|
241
|
+
ngOnInit() {
|
|
242
|
+
this.init();
|
|
243
|
+
this.administrator$ = this.entity$;
|
|
244
|
+
this.allRoles$ = this.dataService.administrator
|
|
245
|
+
.getRoles(999)
|
|
246
|
+
.mapStream(item => item.roles.items.filter(i => i.code !== CUSTOMER_ROLE_CODE));
|
|
247
|
+
this.dataService.client.userStatus().single$.subscribe(({ userStatus }) => {
|
|
248
|
+
if (!userStatus.permissions.includes(Permission.UpdateAdministrator)) {
|
|
249
|
+
const rolesSelect = this.detailForm.get('roles');
|
|
250
|
+
if (rolesSelect) {
|
|
251
|
+
rolesSelect.disable();
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
});
|
|
255
|
+
this.permissionDefinitions = this.serverConfigService.getPermissionDefinitions();
|
|
256
|
+
}
|
|
257
|
+
ngOnDestroy() {
|
|
258
|
+
this.destroy();
|
|
259
|
+
}
|
|
260
|
+
rolesChanged(roles) {
|
|
261
|
+
this.buildPermissionsMap();
|
|
262
|
+
}
|
|
263
|
+
getPermissionsForSelectedChannel() {
|
|
264
|
+
function getActivePermissions(input) {
|
|
265
|
+
return Object.entries(input)
|
|
266
|
+
.filter(([permission, active]) => active)
|
|
267
|
+
.map(([permission, active]) => permission);
|
|
268
|
+
}
|
|
269
|
+
if (this.selectedChannelId) {
|
|
270
|
+
const selectedChannel = this.selectedRolePermissions[this.selectedChannelId];
|
|
271
|
+
if (selectedChannel) {
|
|
272
|
+
const permissionMap = this.selectedRolePermissions[this.selectedChannelId].permissions;
|
|
273
|
+
return getActivePermissions(permissionMap);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
const channels = Object.values(this.selectedRolePermissions);
|
|
277
|
+
if (0 < channels.length) {
|
|
278
|
+
this.selectedChannelId = channels[0].channelId;
|
|
279
|
+
return getActivePermissions(channels[0].permissions);
|
|
280
|
+
}
|
|
281
|
+
return [];
|
|
282
|
+
}
|
|
283
|
+
create() {
|
|
284
|
+
const formValue = this.detailForm.value;
|
|
285
|
+
const administrator = {
|
|
286
|
+
emailAddress: formValue.emailAddress,
|
|
287
|
+
firstName: formValue.firstName,
|
|
288
|
+
lastName: formValue.lastName,
|
|
289
|
+
password: formValue.password,
|
|
290
|
+
customFields: formValue.customFields,
|
|
291
|
+
roleIds: formValue.roles.map(role => role.id),
|
|
292
|
+
};
|
|
293
|
+
this.dataService.administrator.createAdministrator(administrator).subscribe(data => {
|
|
294
|
+
this.notificationService.success(marker('common.notify-create-success'), {
|
|
295
|
+
entity: 'Administrator',
|
|
296
|
+
});
|
|
297
|
+
this.detailForm.markAsPristine();
|
|
298
|
+
this.changeDetector.markForCheck();
|
|
299
|
+
this.router.navigate(['../', data.createAdministrator.id], { relativeTo: this.route });
|
|
300
|
+
}, err => {
|
|
301
|
+
this.notificationService.error(marker('common.notify-create-error'), {
|
|
302
|
+
entity: 'Administrator',
|
|
303
|
+
});
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
save() {
|
|
307
|
+
this.administrator$
|
|
308
|
+
.pipe(take(1), mergeMap(({ id }) => {
|
|
309
|
+
const formValue = this.detailForm.value;
|
|
310
|
+
const administrator = {
|
|
311
|
+
id,
|
|
312
|
+
emailAddress: formValue.emailAddress,
|
|
313
|
+
firstName: formValue.firstName,
|
|
314
|
+
lastName: formValue.lastName,
|
|
315
|
+
password: formValue.password,
|
|
316
|
+
customFields: formValue.customFields,
|
|
317
|
+
roleIds: formValue.roles.map(role => role.id),
|
|
318
|
+
};
|
|
319
|
+
return this.dataService.administrator.updateAdministrator(administrator);
|
|
320
|
+
}))
|
|
321
|
+
.subscribe(data => {
|
|
322
|
+
this.notificationService.success(marker('common.notify-update-success'), {
|
|
323
|
+
entity: 'Administrator',
|
|
324
|
+
});
|
|
325
|
+
this.detailForm.markAsPristine();
|
|
326
|
+
this.changeDetector.markForCheck();
|
|
327
|
+
}, err => {
|
|
328
|
+
this.notificationService.error(marker('common.notify-update-error'), {
|
|
329
|
+
entity: 'Administrator',
|
|
330
|
+
});
|
|
331
|
+
});
|
|
332
|
+
}
|
|
333
|
+
setFormValues(administrator, languageCode) {
|
|
334
|
+
this.detailForm.patchValue({
|
|
335
|
+
emailAddress: administrator.emailAddress,
|
|
336
|
+
firstName: administrator.firstName,
|
|
337
|
+
lastName: administrator.lastName,
|
|
338
|
+
roles: administrator.user.roles,
|
|
339
|
+
});
|
|
340
|
+
if (this.customFields.length) {
|
|
341
|
+
this.setCustomFieldFormValues(this.customFields, this.detailForm.get(['customFields']), administrator);
|
|
342
|
+
}
|
|
343
|
+
const passwordControl = this.detailForm.get('password');
|
|
344
|
+
if (passwordControl) {
|
|
345
|
+
if (!administrator.id) {
|
|
346
|
+
passwordControl.setValidators([Validators.required]);
|
|
347
|
+
}
|
|
348
|
+
else {
|
|
349
|
+
passwordControl.setValidators([]);
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
this.buildPermissionsMap();
|
|
353
|
+
}
|
|
354
|
+
buildPermissionsMap() {
|
|
355
|
+
const permissionsControl = this.detailForm.get('roles');
|
|
356
|
+
if (permissionsControl) {
|
|
357
|
+
const roles = permissionsControl.value;
|
|
358
|
+
const channelIdPermissionsMap = new Map();
|
|
359
|
+
const channelIdCodeMap = new Map();
|
|
360
|
+
for (const role of roles) {
|
|
361
|
+
for (const channel of role.channels) {
|
|
362
|
+
const channelPermissions = channelIdPermissionsMap.get(channel.id);
|
|
363
|
+
const permissionSet = channelPermissions || new Set();
|
|
364
|
+
role.permissions.forEach(p => permissionSet.add(p));
|
|
365
|
+
channelIdPermissionsMap.set(channel.id, permissionSet);
|
|
366
|
+
channelIdCodeMap.set(channel.id, channel.code);
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
this.selectedRolePermissions = {};
|
|
370
|
+
for (const channelId of Array.from(channelIdPermissionsMap.keys())) {
|
|
371
|
+
// tslint:disable-next-line:no-non-null-assertion
|
|
372
|
+
const permissionSet = channelIdPermissionsMap.get(channelId);
|
|
373
|
+
const permissionsHash = {};
|
|
374
|
+
for (const def of this.serverConfigService.getPermissionDefinitions()) {
|
|
375
|
+
permissionsHash[def.name] = permissionSet.has(def.name);
|
|
376
|
+
}
|
|
377
|
+
this.selectedRolePermissions[channelId] = {
|
|
378
|
+
// tslint:disable:no-non-null-assertion
|
|
379
|
+
channelId,
|
|
380
|
+
channelCode: channelIdCodeMap.get(channelId),
|
|
381
|
+
permissions: permissionsHash,
|
|
382
|
+
// tslint:enable:no-non-null-assertion
|
|
383
|
+
};
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
AdminDetailComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: AdminDetailComponent, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }, { token: i2.ServerConfigService }, { token: i0.ChangeDetectorRef }, { token: i2.DataService }, { token: i3.FormBuilder }, { token: i2.NotificationService }], target: i0.ɵɵFactoryTarget.Component });
|
|
389
|
+
AdminDetailComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: AdminDetailComponent, selector: "vdr-admin-detail", usesInheritance: true, ngImport: i0, template: "<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", styles: [""], components: [{ type: i2.ActionBarComponent, selector: "vdr-action-bar" }, { type: i2.ActionBarLeftComponent, selector: "vdr-ab-left", inputs: ["grow"] }, { type: i2.EntityInfoComponent, selector: "vdr-entity-info", inputs: ["small", "entity"] }, { type: i2.ActionBarRightComponent, selector: "vdr-ab-right", inputs: ["grow"] }, { type: i2.ActionBarItemsComponent, selector: "vdr-action-bar-items", inputs: ["locationId"] }, { type: i2.FormFieldComponent, selector: "vdr-form-field", inputs: ["label", "for", "tooltip", "errors", "readOnlyToggle"] }, { type: i2.TabbedCustomFieldsComponent, selector: "vdr-tabbed-custom-fields", inputs: ["entityName", "customFields", "customFieldsFormGroup", "readonly", "compact", "showLabel"] }, { type: i2.CustomDetailComponentHostComponent, selector: "vdr-custom-detail-component-host", inputs: ["locationId", "entity$", "detailForm"] }, { type: i4$1.NgSelectComponent, selector: "ng-select", inputs: ["bindLabel", "bindValue", "markFirst", "placeholder", "notFoundText", "typeToSearchText", "addTagText", "loadingText", "clearAllText", "appearance", "dropdownPosition", "appendTo", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "keyDownFn", "typeahead", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }, { type: PermissionGridComponent, selector: "vdr-permission-grid", inputs: ["permissionDefinitions", "activePermissions", "readonly"], outputs: ["permissionChange"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.IfPermissionsDirective, selector: "[vdrIfPermissions]", inputs: ["vdrIfPermissions", "vdrIfPermissionsElse"] }, { type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i2.FormFieldControlDirective, selector: "input, textarea, select" }, { type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i3.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { type: i4.ClrLabel, selector: "label", inputs: ["for"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "async": i5.AsyncPipe, "translate": i6.TranslatePipe, "hasPermission": i2.HasPermissionPipe, "channelCodeToLabel": i2.ChannelLabelPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
390
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: AdminDetailComponent, decorators: [{
|
|
391
|
+
type: Component,
|
|
392
|
+
args: [{ selector: 'vdr-admin-detail', changeDetection: ChangeDetectionStrategy.OnPush, template: "<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", styles: [""] }]
|
|
393
|
+
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: i2.ServerConfigService }, { type: i0.ChangeDetectorRef }, { type: i2.DataService }, { type: i3.FormBuilder }, { type: i2.NotificationService }]; } });
|
|
394
|
+
|
|
395
|
+
class AdministratorListComponent extends BaseListComponent {
|
|
396
|
+
constructor(dataService, router, route, modalService, notificationService) {
|
|
397
|
+
super(router, route);
|
|
398
|
+
this.dataService = dataService;
|
|
399
|
+
this.modalService = modalService;
|
|
400
|
+
this.notificationService = notificationService;
|
|
401
|
+
super.setQueryFn((...args) => this.dataService.administrator.getAdministrators(...args), data => data.administrators);
|
|
402
|
+
}
|
|
403
|
+
deleteAdministrator(administrator) {
|
|
404
|
+
return this.modalService
|
|
405
|
+
.dialog({
|
|
406
|
+
title: marker('catalog.confirm-delete-administrator'),
|
|
407
|
+
body: `${administrator.firstName} ${administrator.lastName}`,
|
|
408
|
+
buttons: [
|
|
409
|
+
{ type: 'secondary', label: marker('common.cancel') },
|
|
410
|
+
{ type: 'danger', label: marker('common.delete'), returnValue: true },
|
|
411
|
+
],
|
|
412
|
+
})
|
|
413
|
+
.pipe(switchMap(res => res ? this.dataService.administrator.deleteAdministrator(administrator.id) : EMPTY))
|
|
414
|
+
.subscribe(() => {
|
|
415
|
+
this.notificationService.success(marker('common.notify-delete-success'), {
|
|
416
|
+
entity: 'Administrator',
|
|
417
|
+
});
|
|
418
|
+
this.refresh();
|
|
419
|
+
}, err => {
|
|
420
|
+
this.notificationService.error(marker('common.notify-delete-error'), {
|
|
421
|
+
entity: 'Administrator',
|
|
422
|
+
});
|
|
423
|
+
});
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
AdministratorListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: AdministratorListComponent, deps: [{ token: i2.DataService }, { token: i1.Router }, { token: i1.ActivatedRoute }, { token: i2.ModalService }, { token: i2.NotificationService }], target: i0.ɵɵFactoryTarget.Component });
|
|
427
|
+
AdministratorListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: AdministratorListComponent, selector: "vdr-administrator-list", usesInheritance: true, ngImport: i0, template: "<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", styles: [""], components: [{ type: i2.ActionBarComponent, selector: "vdr-action-bar" }, { type: i2.ActionBarRightComponent, selector: "vdr-ab-right", inputs: ["grow"] }, { type: i2.ActionBarItemsComponent, selector: "vdr-action-bar-items", inputs: ["locationId"] }, { type: i2.DataTableComponent, selector: "vdr-data-table", inputs: ["items", "itemsPerPage", "currentPage", "totalItems", "allSelected", "isRowSelectedFn", "emptyStateLabel"], outputs: ["allSelectChange", "rowSelectChange", "pageChange", "itemsPerPageChange"] }, { type: i2.DataTableColumnComponent, selector: "vdr-dt-column", inputs: ["expand"] }, { type: i2.TableRowActionComponent, selector: "vdr-table-row-action", inputs: ["linkTo", "label", "iconShape", "disabled"] }, { type: i2.DropdownComponent, selector: "vdr-dropdown", inputs: ["manualToggle"] }, { type: i2.DropdownMenuComponent, selector: "vdr-dropdown-menu", inputs: ["vdrPosition"] }], directives: [{ type: i2.IfPermissionsDirective, selector: "[vdrIfPermissions]", inputs: ["vdrIfPermissions", "vdrIfPermissionsElse"] }, { type: i1.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { type: i4.ClrIconCustomTag, selector: "clr-icon" }, { type: i2.DropdownTriggerDirective, selector: "[vdrDropdownTrigger]" }, { type: i2.DropdownItemDirective, selector: "[vdrDropdownItem]" }], pipes: { "translate": i6.TranslatePipe, "async": i5.AsyncPipe, "hasPermission": i2.HasPermissionPipe } });
|
|
428
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: AdministratorListComponent, decorators: [{
|
|
429
|
+
type: Component,
|
|
430
|
+
args: [{ selector: 'vdr-administrator-list', template: "<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", styles: [""] }]
|
|
431
|
+
}], ctorParameters: function () { return [{ type: i2.DataService }, { type: i1.Router }, { type: i1.ActivatedRoute }, { type: i2.ModalService }, { type: i2.NotificationService }]; } });
|
|
432
|
+
|
|
433
|
+
class ChannelDetailComponent extends BaseDetailComponent {
|
|
434
|
+
constructor(router, route, serverConfigService, changeDetector, dataService, formBuilder, notificationService) {
|
|
435
|
+
super(route, router, serverConfigService, dataService);
|
|
436
|
+
this.serverConfigService = serverConfigService;
|
|
437
|
+
this.changeDetector = changeDetector;
|
|
438
|
+
this.dataService = dataService;
|
|
439
|
+
this.formBuilder = formBuilder;
|
|
440
|
+
this.notificationService = notificationService;
|
|
441
|
+
this.currencyCodes = Object.values(CurrencyCode);
|
|
442
|
+
this.updatePermission = [Permission.SuperAdmin, Permission.UpdateChannel, Permission.CreateChannel];
|
|
443
|
+
this.customFields = this.getCustomFieldConfig('Channel');
|
|
444
|
+
this.detailForm = this.formBuilder.group({
|
|
445
|
+
code: ['', Validators.required],
|
|
446
|
+
token: ['', Validators.required],
|
|
447
|
+
pricesIncludeTax: [false],
|
|
448
|
+
currencyCode: [''],
|
|
449
|
+
defaultShippingZoneId: ['', Validators.required],
|
|
450
|
+
defaultLanguageCode: [],
|
|
451
|
+
defaultTaxZoneId: ['', Validators.required],
|
|
452
|
+
customFields: this.formBuilder.group(this.customFields.reduce((hash, field) => (Object.assign(Object.assign({}, hash), { [field.name]: '' })), {})),
|
|
453
|
+
});
|
|
454
|
+
}
|
|
455
|
+
ngOnInit() {
|
|
456
|
+
this.init();
|
|
457
|
+
this.zones$ = this.dataService.settings.getZones().mapSingle(data => data.zones);
|
|
458
|
+
this.availableLanguageCodes$ = this.serverConfigService.getAvailableLanguages();
|
|
459
|
+
}
|
|
460
|
+
ngOnDestroy() {
|
|
461
|
+
this.destroy();
|
|
462
|
+
}
|
|
463
|
+
saveButtonEnabled() {
|
|
464
|
+
return this.detailForm.dirty && this.detailForm.valid;
|
|
465
|
+
}
|
|
466
|
+
create() {
|
|
467
|
+
if (!this.detailForm.dirty) {
|
|
468
|
+
return;
|
|
469
|
+
}
|
|
470
|
+
const formValue = this.detailForm.value;
|
|
471
|
+
const input = {
|
|
472
|
+
code: formValue.code,
|
|
473
|
+
token: formValue.token,
|
|
474
|
+
defaultLanguageCode: formValue.defaultLanguageCode,
|
|
475
|
+
pricesIncludeTax: formValue.pricesIncludeTax,
|
|
476
|
+
currencyCode: formValue.currencyCode,
|
|
477
|
+
defaultShippingZoneId: formValue.defaultShippingZoneId,
|
|
478
|
+
defaultTaxZoneId: formValue.defaultTaxZoneId,
|
|
479
|
+
customFields: formValue.customFields,
|
|
480
|
+
};
|
|
481
|
+
this.dataService.settings
|
|
482
|
+
.createChannel(input)
|
|
483
|
+
.pipe(mergeMap(({ createChannel }) => this.dataService.auth.currentUser().single$.pipe(map(({ me }) => ({
|
|
484
|
+
me,
|
|
485
|
+
createChannel,
|
|
486
|
+
})))), mergeMap(({ me, createChannel }) =>
|
|
487
|
+
// tslint:disable-next-line:no-non-null-assertion
|
|
488
|
+
this.dataService.client.updateUserChannels(me.channels).pipe(map(() => createChannel))))
|
|
489
|
+
.subscribe(data => {
|
|
490
|
+
switch (data.__typename) {
|
|
491
|
+
case 'Channel':
|
|
492
|
+
this.notificationService.success(marker('common.notify-create-success'), {
|
|
493
|
+
entity: 'Channel',
|
|
494
|
+
});
|
|
495
|
+
this.detailForm.markAsPristine();
|
|
496
|
+
this.changeDetector.markForCheck();
|
|
497
|
+
this.router.navigate(['../', data.id], { relativeTo: this.route });
|
|
498
|
+
break;
|
|
499
|
+
case 'LanguageNotAvailableError':
|
|
500
|
+
this.notificationService.error(data.message);
|
|
501
|
+
break;
|
|
502
|
+
}
|
|
503
|
+
});
|
|
504
|
+
}
|
|
505
|
+
save() {
|
|
506
|
+
if (!this.detailForm.dirty) {
|
|
507
|
+
return;
|
|
508
|
+
}
|
|
509
|
+
const formValue = this.detailForm.value;
|
|
510
|
+
this.entity$
|
|
511
|
+
.pipe(take(1), mergeMap(channel => {
|
|
512
|
+
const input = {
|
|
513
|
+
id: channel.id,
|
|
514
|
+
code: formValue.code,
|
|
515
|
+
token: formValue.token,
|
|
516
|
+
pricesIncludeTax: formValue.pricesIncludeTax,
|
|
517
|
+
currencyCode: formValue.currencyCode,
|
|
518
|
+
defaultShippingZoneId: formValue.defaultShippingZoneId,
|
|
519
|
+
defaultLanguageCode: formValue.defaultLanguageCode,
|
|
520
|
+
defaultTaxZoneId: formValue.defaultTaxZoneId,
|
|
521
|
+
customFields: formValue.customFields,
|
|
522
|
+
};
|
|
523
|
+
return this.dataService.settings.updateChannel(input);
|
|
524
|
+
}))
|
|
525
|
+
.subscribe(({ updateChannel }) => {
|
|
526
|
+
switch (updateChannel.__typename) {
|
|
527
|
+
case 'Channel':
|
|
528
|
+
this.notificationService.success(marker('common.notify-update-success'), {
|
|
529
|
+
entity: 'Channel',
|
|
530
|
+
});
|
|
531
|
+
this.detailForm.markAsPristine();
|
|
532
|
+
this.changeDetector.markForCheck();
|
|
533
|
+
break;
|
|
534
|
+
case 'LanguageNotAvailableError':
|
|
535
|
+
this.notificationService.error(updateChannel.message);
|
|
536
|
+
}
|
|
537
|
+
});
|
|
538
|
+
}
|
|
539
|
+
/**
|
|
540
|
+
* Update the form values when the entity changes.
|
|
541
|
+
*/
|
|
542
|
+
setFormValues(entity, languageCode) {
|
|
543
|
+
this.detailForm.patchValue({
|
|
544
|
+
code: entity.code,
|
|
545
|
+
token: entity.token || this.generateToken(),
|
|
546
|
+
pricesIncludeTax: entity.pricesIncludeTax,
|
|
547
|
+
currencyCode: entity.currencyCode,
|
|
548
|
+
defaultShippingZoneId: entity.defaultShippingZone ? entity.defaultShippingZone.id : '',
|
|
549
|
+
defaultLanguageCode: entity.defaultLanguageCode,
|
|
550
|
+
defaultTaxZoneId: entity.defaultTaxZone ? entity.defaultTaxZone.id : '',
|
|
551
|
+
});
|
|
552
|
+
if (this.customFields.length) {
|
|
553
|
+
this.setCustomFieldFormValues(this.customFields, this.detailForm.get(['customFields']), entity);
|
|
554
|
+
}
|
|
555
|
+
if (entity.code === DEFAULT_CHANNEL_CODE) {
|
|
556
|
+
const codeControl = this.detailForm.get('code');
|
|
557
|
+
if (codeControl) {
|
|
558
|
+
codeControl.disable();
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
generateToken() {
|
|
563
|
+
const randomString = () => Math.random().toString(36).substr(3, 10);
|
|
564
|
+
return `${randomString()}${randomString()}`;
|
|
565
|
+
}
|
|
566
|
+
}
|
|
567
|
+
ChannelDetailComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: ChannelDetailComponent, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }, { token: i2.ServerConfigService }, { token: i0.ChangeDetectorRef }, { token: i2.DataService }, { token: i3.FormBuilder }, { token: i2.NotificationService }], target: i0.ɵɵFactoryTarget.Component });
|
|
568
|
+
ChannelDetailComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: ChannelDetailComponent, selector: "vdr-channel-detail", usesInheritance: true, ngImport: i0, template: "<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", styles: ["clr-alert{max-width:30rem;margin-bottom:12px}\n"], components: [{ type: i2.ActionBarComponent, selector: "vdr-action-bar" }, { type: i2.ActionBarLeftComponent, selector: "vdr-ab-left", inputs: ["grow"] }, { type: i2.EntityInfoComponent, selector: "vdr-entity-info", inputs: ["small", "entity"] }, { type: i2.ActionBarRightComponent, selector: "vdr-ab-right", inputs: ["grow"] }, { type: i2.ActionBarItemsComponent, selector: "vdr-action-bar-items", inputs: ["locationId"] }, { type: i2.FormFieldComponent, selector: "vdr-form-field", inputs: ["label", "for", "tooltip", "errors", "readOnlyToggle"] }, { type: i4.ClrCheckboxWrapper, selector: "clr-checkbox-wrapper,clr-toggle-wrapper" }, { type: i4.ClrAlert, selector: "clr-alert", inputs: ["clrAlertSizeSmall", "clrAlertClosable", "clrAlertAppLevel", "clrCloseButtonAriaLabel", "clrAlertClosed", "clrAlertType", "clrAlertIcon"], outputs: ["clrAlertClosedChange"] }, { type: i4.ClrAlertItem, selector: "clr-alert-item" }, { type: i2.TabbedCustomFieldsComponent, selector: "vdr-tabbed-custom-fields", inputs: ["entityName", "customFields", "customFieldsFormGroup", "readonly", "compact", "showLabel"] }, { type: i2.CustomDetailComponentHostComponent, selector: "vdr-custom-detail-component-host", inputs: ["locationId", "entity$", "detailForm"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.IfPermissionsDirective, selector: "[vdrIfPermissions]", inputs: ["vdrIfPermissions", "vdrIfPermissionsElse"] }, { type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i2.FormFieldControlDirective, selector: "input, textarea, select" }, { type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i3.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { type: i4.ClrSelect, selector: "[clrSelect]" }, { type: i2.DisabledDirective, selector: "[vdrDisabled]", inputs: ["vdrDisabled"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i3.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i3.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i4.ClrCheckbox, selector: "[clrCheckbox],[clrToggle]" }, { type: i4.ClrAlertText, selector: ".alert-text" }, { type: i3.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { type: i4.ClrLabel, selector: "label", inputs: ["for"] }], pipes: { "async": i5.AsyncPipe, "translate": i6.TranslatePipe, "hasPermission": i2.HasPermissionPipe, "localeCurrencyName": i2.LocaleCurrencyNamePipe, "localeLanguageName": i2.LocaleLanguageNamePipe, "uppercase": i5.UpperCasePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
569
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: ChannelDetailComponent, decorators: [{
|
|
570
|
+
type: Component,
|
|
571
|
+
args: [{ selector: 'vdr-channel-detail', changeDetection: ChangeDetectionStrategy.OnPush, template: "<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", styles: ["clr-alert{max-width:30rem;margin-bottom:12px}\n"] }]
|
|
572
|
+
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: i2.ServerConfigService }, { type: i0.ChangeDetectorRef }, { type: i2.DataService }, { type: i3.FormBuilder }, { type: i2.NotificationService }]; } });
|
|
573
|
+
|
|
574
|
+
class ChannelListComponent {
|
|
575
|
+
constructor(dataService, modalService, notificationService) {
|
|
576
|
+
this.dataService = dataService;
|
|
577
|
+
this.modalService = modalService;
|
|
578
|
+
this.notificationService = notificationService;
|
|
579
|
+
this.refresh$ = new Subject();
|
|
580
|
+
this.channels$ = this.refresh$.pipe(startWith(1), switchMap(() => this.dataService.settings.getChannels().mapStream(data => data.channels)));
|
|
581
|
+
}
|
|
582
|
+
isDefaultChannel(channelCode) {
|
|
583
|
+
return channelCode === DEFAULT_CHANNEL_CODE;
|
|
584
|
+
}
|
|
585
|
+
deleteChannel(id) {
|
|
586
|
+
this.modalService
|
|
587
|
+
.dialog({
|
|
588
|
+
title: marker('catalog.confirm-delete-channel'),
|
|
589
|
+
buttons: [
|
|
590
|
+
{ type: 'secondary', label: marker('common.cancel') },
|
|
591
|
+
{ type: 'danger', label: marker('common.delete'), returnValue: true },
|
|
592
|
+
],
|
|
593
|
+
})
|
|
594
|
+
.pipe(switchMap(response => (response ? this.dataService.settings.deleteChannel(id) : EMPTY)), mergeMap(() => this.dataService.auth.currentUser().single$),
|
|
595
|
+
// tslint:disable-next-line:no-non-null-assertion
|
|
596
|
+
mergeMap(data => this.dataService.client.updateUserChannels(data.me.channels)))
|
|
597
|
+
.subscribe(() => {
|
|
598
|
+
this.notificationService.success(marker('common.notify-delete-success'), {
|
|
599
|
+
entity: 'Channel',
|
|
600
|
+
});
|
|
601
|
+
this.refresh$.next(1);
|
|
602
|
+
}, err => {
|
|
603
|
+
this.notificationService.error(marker('common.notify-delete-error'), {
|
|
604
|
+
entity: 'Channel',
|
|
605
|
+
});
|
|
606
|
+
});
|
|
607
|
+
}
|
|
608
|
+
}
|
|
609
|
+
ChannelListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: ChannelListComponent, deps: [{ token: i2.DataService }, { token: i2.ModalService }, { token: i2.NotificationService }], target: i0.ɵɵFactoryTarget.Component });
|
|
610
|
+
ChannelListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: ChannelListComponent, selector: "vdr-channel-list", ngImport: i0, template: "<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", styles: [""], components: [{ type: i2.ActionBarComponent, selector: "vdr-action-bar" }, { type: i2.ActionBarRightComponent, selector: "vdr-ab-right", inputs: ["grow"] }, { type: i2.ActionBarItemsComponent, selector: "vdr-action-bar-items", inputs: ["locationId"] }, { type: i2.DataTableComponent, selector: "vdr-data-table", inputs: ["items", "itemsPerPage", "currentPage", "totalItems", "allSelected", "isRowSelectedFn", "emptyStateLabel"], outputs: ["allSelectChange", "rowSelectChange", "pageChange", "itemsPerPageChange"] }, { type: i2.DataTableColumnComponent, selector: "vdr-dt-column", inputs: ["expand"] }, { type: i2.ChannelBadgeComponent, selector: "vdr-channel-badge", inputs: ["channelCode"] }, { type: i2.TableRowActionComponent, selector: "vdr-table-row-action", inputs: ["linkTo", "label", "iconShape", "disabled"] }, { type: i2.DropdownComponent, selector: "vdr-dropdown", inputs: ["manualToggle"] }, { type: i2.DropdownMenuComponent, selector: "vdr-dropdown-menu", inputs: ["vdrPosition"] }], directives: [{ type: i2.IfPermissionsDirective, selector: "[vdrIfPermissions]", inputs: ["vdrIfPermissions", "vdrIfPermissionsElse"] }, { type: i1.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { type: i4.ClrIconCustomTag, selector: "clr-icon" }, { type: i2.DropdownTriggerDirective, selector: "[vdrDropdownTrigger]" }, { type: i2.DropdownItemDirective, selector: "[vdrDropdownItem]" }], pipes: { "translate": i6.TranslatePipe, "async": i5.AsyncPipe, "channelCodeToLabel": i2.ChannelLabelPipe, "hasPermission": i2.HasPermissionPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
611
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: ChannelListComponent, decorators: [{
|
|
612
|
+
type: Component,
|
|
613
|
+
args: [{ selector: 'vdr-channel-list', changeDetection: ChangeDetectionStrategy.OnPush, template: "<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", styles: [""] }]
|
|
614
|
+
}], ctorParameters: function () { return [{ type: i2.DataService }, { type: i2.ModalService }, { type: i2.NotificationService }]; } });
|
|
615
|
+
|
|
616
|
+
class CountryDetailComponent extends BaseDetailComponent {
|
|
617
|
+
constructor(router, route, serverConfigService, changeDetector, dataService, formBuilder, notificationService) {
|
|
618
|
+
super(route, router, serverConfigService, dataService);
|
|
619
|
+
this.changeDetector = changeDetector;
|
|
620
|
+
this.dataService = dataService;
|
|
621
|
+
this.formBuilder = formBuilder;
|
|
622
|
+
this.notificationService = notificationService;
|
|
623
|
+
this.updatePermission = [Permission.UpdateSettings, Permission.UpdateCountry];
|
|
624
|
+
this.customFields = this.getCustomFieldConfig('Country');
|
|
625
|
+
this.detailForm = this.formBuilder.group({
|
|
626
|
+
code: ['', Validators.required],
|
|
627
|
+
name: ['', Validators.required],
|
|
628
|
+
enabled: [true],
|
|
629
|
+
customFields: this.formBuilder.group(this.customFields.reduce((hash, field) => (Object.assign(Object.assign({}, hash), { [field.name]: '' })), {})),
|
|
630
|
+
});
|
|
631
|
+
}
|
|
632
|
+
ngOnInit() {
|
|
633
|
+
this.init();
|
|
634
|
+
this.country$ = this.entity$;
|
|
635
|
+
}
|
|
636
|
+
ngOnDestroy() {
|
|
637
|
+
this.destroy();
|
|
638
|
+
}
|
|
639
|
+
create() {
|
|
640
|
+
if (!this.detailForm.dirty) {
|
|
641
|
+
return;
|
|
642
|
+
}
|
|
643
|
+
combineLatest(this.country$, this.languageCode$)
|
|
644
|
+
.pipe(take(1), mergeMap(([country, languageCode]) => {
|
|
645
|
+
const formValue = this.detailForm.value;
|
|
646
|
+
const input = createUpdatedTranslatable({
|
|
647
|
+
translatable: country,
|
|
648
|
+
updatedFields: formValue,
|
|
649
|
+
customFieldConfig: this.customFields,
|
|
650
|
+
languageCode,
|
|
651
|
+
defaultTranslation: {
|
|
652
|
+
name: formValue.name,
|
|
653
|
+
languageCode,
|
|
654
|
+
},
|
|
655
|
+
});
|
|
656
|
+
return this.dataService.settings.createCountry(input);
|
|
657
|
+
}))
|
|
658
|
+
.subscribe(data => {
|
|
659
|
+
this.notificationService.success(marker('common.notify-create-success'), {
|
|
660
|
+
entity: 'Country',
|
|
661
|
+
});
|
|
662
|
+
this.detailForm.markAsPristine();
|
|
663
|
+
this.changeDetector.markForCheck();
|
|
664
|
+
this.router.navigate(['../', data.createCountry.id], { relativeTo: this.route });
|
|
665
|
+
}, err => {
|
|
666
|
+
this.notificationService.error(marker('common.notify-create-error'), {
|
|
667
|
+
entity: 'Country',
|
|
668
|
+
});
|
|
669
|
+
});
|
|
670
|
+
}
|
|
671
|
+
save() {
|
|
672
|
+
combineLatest(this.country$, this.languageCode$)
|
|
673
|
+
.pipe(take(1), mergeMap(([country, languageCode]) => {
|
|
674
|
+
const formValue = this.detailForm.value;
|
|
675
|
+
const input = createUpdatedTranslatable({
|
|
676
|
+
translatable: country,
|
|
677
|
+
updatedFields: formValue,
|
|
678
|
+
customFieldConfig: this.customFields,
|
|
679
|
+
languageCode,
|
|
680
|
+
defaultTranslation: {
|
|
681
|
+
name: formValue.name,
|
|
682
|
+
languageCode,
|
|
683
|
+
},
|
|
684
|
+
});
|
|
685
|
+
return this.dataService.settings.updateCountry(input);
|
|
686
|
+
}))
|
|
687
|
+
.subscribe(data => {
|
|
688
|
+
this.notificationService.success(marker('common.notify-update-success'), {
|
|
689
|
+
entity: 'Country',
|
|
690
|
+
});
|
|
691
|
+
this.detailForm.markAsPristine();
|
|
692
|
+
this.changeDetector.markForCheck();
|
|
693
|
+
}, err => {
|
|
694
|
+
this.notificationService.error(marker('common.notify-update-error'), {
|
|
695
|
+
entity: 'Country',
|
|
696
|
+
});
|
|
697
|
+
});
|
|
698
|
+
}
|
|
699
|
+
setFormValues(country, languageCode) {
|
|
700
|
+
const currentTranslation = findTranslation(country, languageCode);
|
|
701
|
+
this.detailForm.patchValue({
|
|
702
|
+
code: country.code,
|
|
703
|
+
name: currentTranslation ? currentTranslation.name : '',
|
|
704
|
+
enabled: country.enabled,
|
|
705
|
+
});
|
|
706
|
+
if (this.customFields.length) {
|
|
707
|
+
this.setCustomFieldFormValues(this.customFields, this.detailForm.get(['customFields']), country, currentTranslation);
|
|
708
|
+
}
|
|
709
|
+
}
|
|
710
|
+
}
|
|
711
|
+
CountryDetailComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: CountryDetailComponent, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }, { token: i2.ServerConfigService }, { token: i0.ChangeDetectorRef }, { token: i2.DataService }, { token: i3.FormBuilder }, { token: i2.NotificationService }], target: i0.ɵɵFactoryTarget.Component });
|
|
712
|
+
CountryDetailComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: CountryDetailComponent, selector: "vdr-country-detail", usesInheritance: true, ngImport: i0, template: "<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", styles: [""], components: [{ type: i2.ActionBarComponent, selector: "vdr-action-bar" }, { type: i2.ActionBarLeftComponent, selector: "vdr-ab-left", inputs: ["grow"] }, { type: i2.EntityInfoComponent, selector: "vdr-entity-info", inputs: ["small", "entity"] }, { type: i2.LanguageSelectorComponent, selector: "vdr-language-selector", inputs: ["currentLanguageCode", "availableLanguageCodes", "disabled"], outputs: ["languageCodeChange"] }, { type: i2.ActionBarRightComponent, selector: "vdr-ab-right", inputs: ["grow"] }, { type: i2.ActionBarItemsComponent, selector: "vdr-action-bar-items", inputs: ["locationId"] }, { type: i2.FormFieldComponent, selector: "vdr-form-field", inputs: ["label", "for", "tooltip", "errors", "readOnlyToggle"] }, { type: i4.ClrCheckboxWrapper, selector: "clr-checkbox-wrapper,clr-toggle-wrapper" }, { type: i2.TabbedCustomFieldsComponent, selector: "vdr-tabbed-custom-fields", inputs: ["entityName", "customFields", "customFieldsFormGroup", "readonly", "compact", "showLabel"] }, { type: i2.CustomDetailComponentHostComponent, selector: "vdr-custom-detail-component-host", inputs: ["locationId", "entity$", "detailForm"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.IfPermissionsDirective, selector: "[vdrIfPermissions]", inputs: ["vdrIfPermissions", "vdrIfPermissionsElse"] }, { type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i2.FormFieldControlDirective, selector: "input, textarea, select" }, { type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i3.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i4.ClrCheckbox, selector: "[clrCheckbox],[clrToggle]" }, { type: i2.DisabledDirective, selector: "[vdrDisabled]", inputs: ["vdrDisabled"] }, { type: i3.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { type: i4.ClrLabel, selector: "label", inputs: ["for"] }], pipes: { "async": i5.AsyncPipe, "translate": i6.TranslatePipe, "hasPermission": i2.HasPermissionPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
713
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: CountryDetailComponent, decorators: [{
|
|
714
|
+
type: Component,
|
|
715
|
+
args: [{ selector: 'vdr-country-detail', changeDetection: ChangeDetectionStrategy.OnPush, template: "<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", styles: [""] }]
|
|
716
|
+
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: i2.ServerConfigService }, { type: i0.ChangeDetectorRef }, { type: i2.DataService }, { type: i3.FormBuilder }, { type: i2.NotificationService }]; } });
|
|
717
|
+
|
|
718
|
+
class CountryListComponent {
|
|
719
|
+
constructor(dataService, notificationService, modalService, serverConfigService) {
|
|
720
|
+
this.dataService = dataService;
|
|
721
|
+
this.notificationService = notificationService;
|
|
722
|
+
this.modalService = modalService;
|
|
723
|
+
this.serverConfigService = serverConfigService;
|
|
724
|
+
this.searchTerm = new FormControl('');
|
|
725
|
+
this.countries = [];
|
|
726
|
+
this.destroy$ = new Subject();
|
|
727
|
+
this.refresh$ = new Subject();
|
|
728
|
+
}
|
|
729
|
+
ngOnInit() {
|
|
730
|
+
this.contentLanguage$ = this.dataService.client
|
|
731
|
+
.uiState()
|
|
732
|
+
.mapStream(({ uiState }) => uiState.contentLanguage);
|
|
733
|
+
const countries$ = combineLatest(this.contentLanguage$, this.searchTerm.valueChanges.pipe(startWith(null))).pipe(map(([__, term]) => term), switchMap(term => this.dataService.settings.getCountries(999, 0, term).single$), tap(data => {
|
|
734
|
+
this.countries = data.countries.items;
|
|
735
|
+
}), map(data => data.countries.items));
|
|
736
|
+
this.zones$ = this.dataService.settings.getZones().mapStream(data => data.zones);
|
|
737
|
+
this.countriesWithZones$ = combineLatest(countries$, this.zones$).pipe(map(([countries, zones]) => {
|
|
738
|
+
return countries.map(country => (Object.assign(Object.assign({}, country), { zones: zones.filter(z => !!z.members.find(c => c.id === country.id)) })));
|
|
739
|
+
}));
|
|
740
|
+
this.availableLanguages$ = this.serverConfigService.getAvailableLanguages();
|
|
741
|
+
}
|
|
742
|
+
ngOnDestroy() {
|
|
743
|
+
this.destroy$.next(undefined);
|
|
744
|
+
this.destroy$.complete();
|
|
745
|
+
}
|
|
746
|
+
setLanguage(code) {
|
|
747
|
+
this.dataService.client.setContentLanguage(code).subscribe();
|
|
748
|
+
}
|
|
749
|
+
deleteCountry(countryId) {
|
|
750
|
+
this.modalService
|
|
751
|
+
.dialog({
|
|
752
|
+
title: marker('catalog.confirm-delete-country'),
|
|
753
|
+
buttons: [
|
|
754
|
+
{ type: 'secondary', label: marker('common.cancel') },
|
|
755
|
+
{ type: 'danger', label: marker('common.delete'), returnValue: true },
|
|
756
|
+
],
|
|
757
|
+
})
|
|
758
|
+
.pipe(switchMap(response => response ? this.dataService.settings.deleteCountry(countryId) : EMPTY))
|
|
759
|
+
.subscribe(response => {
|
|
760
|
+
if (response.deleteCountry.result === DeletionResult.DELETED) {
|
|
761
|
+
this.notificationService.success(marker('common.notify-delete-success'), {
|
|
762
|
+
entity: 'Country',
|
|
763
|
+
});
|
|
764
|
+
this.dataService.settings.getCountries(999, 0).single$.subscribe();
|
|
765
|
+
}
|
|
766
|
+
else {
|
|
767
|
+
this.notificationService.error(response.deleteCountry.message || '');
|
|
768
|
+
}
|
|
769
|
+
}, err => {
|
|
770
|
+
this.notificationService.error(marker('common.notify-delete-error'), {
|
|
771
|
+
entity: 'Country',
|
|
772
|
+
});
|
|
773
|
+
});
|
|
774
|
+
}
|
|
775
|
+
isZone(input) {
|
|
776
|
+
return input.hasOwnProperty('id');
|
|
777
|
+
}
|
|
778
|
+
}
|
|
779
|
+
CountryListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: CountryListComponent, deps: [{ token: i2.DataService }, { token: i2.NotificationService }, { token: i2.ModalService }, { token: i2.ServerConfigService }], target: i0.ɵɵFactoryTarget.Component });
|
|
780
|
+
CountryListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: CountryListComponent, selector: "vdr-country-list", ngImport: i0, template: "<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", styles: [".search-input{margin-top:6px;min-width:300px}\n"], components: [{ type: i2.ActionBarComponent, selector: "vdr-action-bar" }, { type: i2.ActionBarLeftComponent, selector: "vdr-ab-left", inputs: ["grow"] }, { type: i2.LanguageSelectorComponent, selector: "vdr-language-selector", inputs: ["currentLanguageCode", "availableLanguageCodes", "disabled"], outputs: ["languageCodeChange"] }, { type: i2.ActionBarRightComponent, selector: "vdr-ab-right", inputs: ["grow"] }, { type: i2.ActionBarItemsComponent, selector: "vdr-action-bar-items", inputs: ["locationId"] }, { type: i2.DataTableComponent, selector: "vdr-data-table", inputs: ["items", "itemsPerPage", "currentPage", "totalItems", "allSelected", "isRowSelectedFn", "emptyStateLabel"], outputs: ["allSelectChange", "rowSelectChange", "pageChange", "itemsPerPageChange"] }, { type: i2.DataTableColumnComponent, selector: "vdr-dt-column", inputs: ["expand"] }, { type: i2.ChipComponent, selector: "vdr-chip", inputs: ["icon", "invert", "colorFrom", "colorType"], outputs: ["iconClick"] }, { type: i2.TableRowActionComponent, selector: "vdr-table-row-action", inputs: ["linkTo", "label", "iconShape", "disabled"] }, { type: i2.DropdownComponent, selector: "vdr-dropdown", inputs: ["manualToggle"] }, { type: i2.DropdownMenuComponent, selector: "vdr-dropdown-menu", inputs: ["vdrPosition"] }], directives: [{ type: i2.FormFieldControlDirective, selector: "input, textarea, select" }, { type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i2.IfPermissionsDirective, selector: "[vdrIfPermissions]", inputs: ["vdrIfPermissions", "vdrIfPermissionsElse"] }, { type: i1.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { type: i4.ClrIconCustomTag, selector: "clr-icon" }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.DropdownTriggerDirective, selector: "[vdrDropdownTrigger]" }, { type: i2.DropdownItemDirective, selector: "[vdrDropdownItem]" }], pipes: { "translate": i6.TranslatePipe, "async": i5.AsyncPipe, "hasPermission": i2.HasPermissionPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
781
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: CountryListComponent, decorators: [{
|
|
782
|
+
type: Component,
|
|
783
|
+
args: [{ selector: 'vdr-country-list', changeDetection: ChangeDetectionStrategy.OnPush, template: "<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", styles: [".search-input{margin-top:6px;min-width:300px}\n"] }]
|
|
784
|
+
}], ctorParameters: function () { return [{ type: i2.DataService }, { type: i2.NotificationService }, { type: i2.ModalService }, { type: i2.ServerConfigService }]; } });
|
|
785
|
+
|
|
786
|
+
class GlobalSettingsComponent extends BaseDetailComponent {
|
|
787
|
+
constructor(router, route, serverConfigService, changeDetector, dataService, formBuilder, notificationService) {
|
|
788
|
+
super(route, router, serverConfigService, dataService);
|
|
789
|
+
this.changeDetector = changeDetector;
|
|
790
|
+
this.dataService = dataService;
|
|
791
|
+
this.formBuilder = formBuilder;
|
|
792
|
+
this.notificationService = notificationService;
|
|
793
|
+
this.languageCodes = Object.values(LanguageCode);
|
|
794
|
+
this.updatePermission = [Permission.UpdateSettings, Permission.UpdateGlobalSettings];
|
|
795
|
+
this.customFields = this.getCustomFieldConfig('GlobalSettings');
|
|
796
|
+
this.detailForm = this.formBuilder.group({
|
|
797
|
+
availableLanguages: [''],
|
|
798
|
+
trackInventory: false,
|
|
799
|
+
outOfStockThreshold: [0, Validators.required],
|
|
800
|
+
customFields: this.formBuilder.group(this.customFields.reduce((hash, field) => (Object.assign(Object.assign({}, hash), { [field.name]: '' })), {})),
|
|
801
|
+
});
|
|
802
|
+
}
|
|
803
|
+
ngOnInit() {
|
|
804
|
+
this.init();
|
|
805
|
+
this.dataService.client.userStatus().single$.subscribe(({ userStatus }) => {
|
|
806
|
+
if (!userStatus.permissions.includes(Permission.UpdateSettings)) {
|
|
807
|
+
const languagesSelect = this.detailForm.get('availableLanguages');
|
|
808
|
+
if (languagesSelect) {
|
|
809
|
+
languagesSelect.disable();
|
|
810
|
+
}
|
|
811
|
+
}
|
|
812
|
+
});
|
|
813
|
+
}
|
|
814
|
+
save() {
|
|
815
|
+
if (!this.detailForm.dirty) {
|
|
816
|
+
return;
|
|
817
|
+
}
|
|
818
|
+
this.dataService.settings
|
|
819
|
+
.updateGlobalSettings(this.detailForm.value)
|
|
820
|
+
.pipe(tap(({ updateGlobalSettings }) => {
|
|
821
|
+
switch (updateGlobalSettings.__typename) {
|
|
822
|
+
case 'GlobalSettings':
|
|
823
|
+
this.detailForm.markAsPristine();
|
|
824
|
+
this.changeDetector.markForCheck();
|
|
825
|
+
this.notificationService.success(marker('common.notify-update-success'), {
|
|
826
|
+
entity: 'Settings',
|
|
827
|
+
});
|
|
828
|
+
break;
|
|
829
|
+
case 'ChannelDefaultLanguageError':
|
|
830
|
+
this.notificationService.error(updateGlobalSettings.message);
|
|
831
|
+
}
|
|
832
|
+
}), switchMap(() => this.serverConfigService.refreshGlobalSettings()), withLatestFrom(this.dataService.client.uiState().single$))
|
|
833
|
+
.subscribe(([{ globalSettings }, { uiState }]) => {
|
|
834
|
+
const availableLangs = globalSettings.availableLanguages;
|
|
835
|
+
if (availableLangs.length && !availableLangs.includes(uiState.contentLanguage)) {
|
|
836
|
+
this.dataService.client.setContentLanguage(availableLangs[0]).subscribe();
|
|
837
|
+
}
|
|
838
|
+
});
|
|
839
|
+
}
|
|
840
|
+
setFormValues(entity, languageCode) {
|
|
841
|
+
this.detailForm.patchValue({
|
|
842
|
+
availableLanguages: entity.availableLanguages,
|
|
843
|
+
trackInventory: entity.trackInventory,
|
|
844
|
+
outOfStockThreshold: entity.outOfStockThreshold,
|
|
845
|
+
});
|
|
846
|
+
if (this.customFields.length) {
|
|
847
|
+
this.setCustomFieldFormValues(this.customFields, this.detailForm.get('customFields'), entity);
|
|
848
|
+
}
|
|
849
|
+
}
|
|
850
|
+
}
|
|
851
|
+
GlobalSettingsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: GlobalSettingsComponent, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }, { token: i2.ServerConfigService }, { token: i0.ChangeDetectorRef }, { token: i2.DataService }, { token: i3.FormBuilder }, { token: i2.NotificationService }], target: i0.ɵɵFactoryTarget.Component });
|
|
852
|
+
GlobalSettingsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: GlobalSettingsComponent, selector: "vdr-global-settings", usesInheritance: true, ngImport: i0, template: "<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 \u00D7\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", styles: ["::ng-deep ng-select .ng-value>span{margin:0!important}::ng-deep ng-select .ng-arrow-wrapper .ng-arrow{margin:0!important}::ng-deep ng-select .ng-select-container>span{margin:0!important}\n"], components: [{ type: i2.ActionBarComponent, selector: "vdr-action-bar" }, { type: i2.ActionBarRightComponent, selector: "vdr-ab-right", inputs: ["grow"] }, { type: i2.ActionBarItemsComponent, selector: "vdr-action-bar-items", inputs: ["locationId"] }, { type: i2.FormFieldComponent, selector: "vdr-form-field", inputs: ["label", "for", "tooltip", "errors", "readOnlyToggle"] }, { type: i4$1.NgSelectComponent, selector: "ng-select", inputs: ["bindLabel", "bindValue", "markFirst", "placeholder", "notFoundText", "typeToSearchText", "addTagText", "loadingText", "clearAllText", "appearance", "dropdownPosition", "appendTo", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "keyDownFn", "typeahead", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }, { type: i4.ClrCheckboxWrapper, selector: "clr-checkbox-wrapper,clr-toggle-wrapper" }, { type: i2.TabbedCustomFieldsComponent, selector: "vdr-tabbed-custom-fields", inputs: ["entityName", "customFields", "customFieldsFormGroup", "readonly", "compact", "showLabel"] }, { type: i2.CustomDetailComponentHostComponent, selector: "vdr-custom-detail-component-host", inputs: ["locationId", "entity$", "detailForm"] }], directives: [{ type: i2.IfPermissionsDirective, selector: "[vdrIfPermissions]", inputs: ["vdrIfPermissions", "vdrIfPermissionsElse"] }, { type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i4$1.NgLabelTemplateDirective, selector: "[ng-label-tmp]" }, { type: i4$1.NgOptionTemplateDirective, selector: "[ng-option-tmp]" }, { type: i2.FormFieldControlDirective, selector: "input, textarea, select" }, { type: i3.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i3.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i4.ClrCheckbox, selector: "[clrCheckbox],[clrToggle]" }, { type: i2.DisabledDirective, selector: "[vdrDisabled]", inputs: ["vdrDisabled"] }, { type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { type: i4.ClrLabel, selector: "label", inputs: ["for"] }], pipes: { "translate": i6.TranslatePipe, "localeLanguageName": i2.LocaleLanguageNamePipe, "hasPermission": i2.HasPermissionPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
853
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: GlobalSettingsComponent, decorators: [{
|
|
854
|
+
type: Component,
|
|
855
|
+
args: [{ selector: 'vdr-global-settings', changeDetection: ChangeDetectionStrategy.OnPush, template: "<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 \u00D7\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", styles: ["::ng-deep ng-select .ng-value>span{margin:0!important}::ng-deep ng-select .ng-arrow-wrapper .ng-arrow{margin:0!important}::ng-deep ng-select .ng-select-container>span{margin:0!important}\n"] }]
|
|
856
|
+
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: i2.ServerConfigService }, { type: i0.ChangeDetectorRef }, { type: i2.DataService }, { type: i3.FormBuilder }, { type: i2.NotificationService }]; } });
|
|
857
|
+
|
|
858
|
+
class PaymentMethodDetailComponent extends BaseDetailComponent {
|
|
859
|
+
constructor(router, route, serverConfigService, changeDetector, dataService, formBuilder, notificationService) {
|
|
860
|
+
super(route, router, serverConfigService, dataService);
|
|
861
|
+
this.changeDetector = changeDetector;
|
|
862
|
+
this.dataService = dataService;
|
|
863
|
+
this.formBuilder = formBuilder;
|
|
864
|
+
this.notificationService = notificationService;
|
|
865
|
+
this.checkers = [];
|
|
866
|
+
this.handlers = [];
|
|
867
|
+
this.updatePermission = [Permission.UpdateSettings, Permission.UpdatePaymentMethod];
|
|
868
|
+
this.customFields = this.getCustomFieldConfig('PaymentMethod');
|
|
869
|
+
this.detailForm = this.formBuilder.group({
|
|
870
|
+
code: ['', Validators.required],
|
|
871
|
+
name: ['', Validators.required],
|
|
872
|
+
description: '',
|
|
873
|
+
enabled: [true, Validators.required],
|
|
874
|
+
checker: {},
|
|
875
|
+
handler: {},
|
|
876
|
+
customFields: this.formBuilder.group(this.customFields.reduce((hash, field) => (Object.assign(Object.assign({}, hash), { [field.name]: '' })), {})),
|
|
877
|
+
});
|
|
878
|
+
}
|
|
879
|
+
ngOnInit() {
|
|
880
|
+
this.init();
|
|
881
|
+
combineLatest([
|
|
882
|
+
this.dataService.settings.getPaymentMethodOperations().single$,
|
|
883
|
+
this.entity$.pipe(take(1)),
|
|
884
|
+
]).subscribe(([data, entity]) => {
|
|
885
|
+
this.checkers = data.paymentMethodEligibilityCheckers;
|
|
886
|
+
this.handlers = data.paymentMethodHandlers;
|
|
887
|
+
this.changeDetector.markForCheck();
|
|
888
|
+
this.selectedCheckerDefinition = data.paymentMethodEligibilityCheckers.find(c => c.code === (entity.checker && entity.checker.code));
|
|
889
|
+
this.selectedHandlerDefinition = data.paymentMethodHandlers.find(c => c.code === (entity.handler && entity.handler.code));
|
|
890
|
+
});
|
|
891
|
+
}
|
|
892
|
+
ngOnDestroy() {
|
|
893
|
+
this.destroy();
|
|
894
|
+
}
|
|
895
|
+
updateCode(currentCode, nameValue) {
|
|
896
|
+
if (!currentCode) {
|
|
897
|
+
const codeControl = this.detailForm.get(['code']);
|
|
898
|
+
if (codeControl && codeControl.pristine) {
|
|
899
|
+
codeControl.setValue(normalizeString(nameValue, '-'));
|
|
900
|
+
}
|
|
901
|
+
}
|
|
902
|
+
}
|
|
903
|
+
configArgsIsPopulated() {
|
|
904
|
+
const configArgsGroup = this.detailForm.get('configArgs');
|
|
905
|
+
if (!configArgsGroup) {
|
|
906
|
+
return false;
|
|
907
|
+
}
|
|
908
|
+
return 0 < Object.keys(configArgsGroup.controls).length;
|
|
909
|
+
}
|
|
910
|
+
selectChecker(checker) {
|
|
911
|
+
this.selectedCheckerDefinition = checker;
|
|
912
|
+
this.selectedChecker = configurableDefinitionToInstance(checker);
|
|
913
|
+
const formControl = this.detailForm.get('checker');
|
|
914
|
+
if (formControl) {
|
|
915
|
+
formControl.clearValidators();
|
|
916
|
+
formControl.updateValueAndValidity({ onlySelf: true });
|
|
917
|
+
formControl.patchValue(this.selectedChecker);
|
|
918
|
+
}
|
|
919
|
+
this.detailForm.markAsDirty();
|
|
920
|
+
}
|
|
921
|
+
selectHandler(handler) {
|
|
922
|
+
this.selectedHandlerDefinition = handler;
|
|
923
|
+
this.selectedHandler = configurableDefinitionToInstance(handler);
|
|
924
|
+
const formControl = this.detailForm.get('handler');
|
|
925
|
+
if (formControl) {
|
|
926
|
+
formControl.clearValidators();
|
|
927
|
+
formControl.updateValueAndValidity({ onlySelf: true });
|
|
928
|
+
formControl.patchValue(this.selectedHandler);
|
|
929
|
+
}
|
|
930
|
+
this.detailForm.markAsDirty();
|
|
931
|
+
}
|
|
932
|
+
removeChecker() {
|
|
933
|
+
this.selectedChecker = null;
|
|
934
|
+
this.detailForm.markAsDirty();
|
|
935
|
+
}
|
|
936
|
+
removeHandler() {
|
|
937
|
+
this.selectedHandler = null;
|
|
938
|
+
this.detailForm.markAsDirty();
|
|
939
|
+
}
|
|
940
|
+
create() {
|
|
941
|
+
const selectedChecker = this.selectedChecker;
|
|
942
|
+
const selectedHandler = this.selectedHandler;
|
|
943
|
+
if (!selectedHandler) {
|
|
944
|
+
return;
|
|
945
|
+
}
|
|
946
|
+
this.entity$
|
|
947
|
+
.pipe(take(1), mergeMap(({ id }) => {
|
|
948
|
+
const formValue = this.detailForm.value;
|
|
949
|
+
const input = {
|
|
950
|
+
name: formValue.name,
|
|
951
|
+
code: formValue.code,
|
|
952
|
+
description: formValue.description,
|
|
953
|
+
enabled: formValue.enabled,
|
|
954
|
+
checker: selectedChecker
|
|
955
|
+
? toConfigurableOperationInput(selectedChecker, formValue.checker)
|
|
956
|
+
: null,
|
|
957
|
+
handler: toConfigurableOperationInput(selectedHandler, formValue.handler),
|
|
958
|
+
customFields: formValue.customFields,
|
|
959
|
+
};
|
|
960
|
+
return this.dataService.settings.createPaymentMethod(input);
|
|
961
|
+
}))
|
|
962
|
+
.subscribe(data => {
|
|
963
|
+
this.notificationService.success(marker('common.notify-create-success'), {
|
|
964
|
+
entity: 'PaymentMethod',
|
|
965
|
+
});
|
|
966
|
+
this.detailForm.markAsPristine();
|
|
967
|
+
this.changeDetector.markForCheck();
|
|
968
|
+
this.router.navigate(['../', data.createPaymentMethod.id], { relativeTo: this.route });
|
|
969
|
+
}, err => {
|
|
970
|
+
this.notificationService.error(marker('common.notify-create-error'), {
|
|
971
|
+
entity: 'PaymentMethod',
|
|
972
|
+
});
|
|
973
|
+
});
|
|
974
|
+
}
|
|
975
|
+
save() {
|
|
976
|
+
const selectedChecker = this.selectedChecker;
|
|
977
|
+
const selectedHandler = this.selectedHandler;
|
|
978
|
+
if (!selectedHandler) {
|
|
979
|
+
return;
|
|
980
|
+
}
|
|
981
|
+
this.entity$
|
|
982
|
+
.pipe(take(1), mergeMap(({ id }) => {
|
|
983
|
+
const formValue = this.detailForm.value;
|
|
984
|
+
const input = {
|
|
985
|
+
id,
|
|
986
|
+
name: formValue.name,
|
|
987
|
+
code: formValue.code,
|
|
988
|
+
description: formValue.description,
|
|
989
|
+
enabled: formValue.enabled,
|
|
990
|
+
checker: selectedChecker
|
|
991
|
+
? toConfigurableOperationInput(selectedChecker, formValue.checker)
|
|
992
|
+
: null,
|
|
993
|
+
handler: toConfigurableOperationInput(selectedHandler, formValue.handler),
|
|
994
|
+
customFields: formValue.customFields,
|
|
995
|
+
};
|
|
996
|
+
return this.dataService.settings.updatePaymentMethod(input);
|
|
997
|
+
}))
|
|
998
|
+
.subscribe(data => {
|
|
999
|
+
this.notificationService.success(marker('common.notify-update-success'), {
|
|
1000
|
+
entity: 'PaymentMethod',
|
|
1001
|
+
});
|
|
1002
|
+
this.detailForm.markAsPristine();
|
|
1003
|
+
this.changeDetector.markForCheck();
|
|
1004
|
+
}, err => {
|
|
1005
|
+
this.notificationService.error(marker('common.notify-update-error'), {
|
|
1006
|
+
entity: 'PaymentMethod',
|
|
1007
|
+
});
|
|
1008
|
+
});
|
|
1009
|
+
}
|
|
1010
|
+
setFormValues(paymentMethod) {
|
|
1011
|
+
this.detailForm.patchValue({
|
|
1012
|
+
name: paymentMethod.name,
|
|
1013
|
+
code: paymentMethod.code,
|
|
1014
|
+
description: paymentMethod.description,
|
|
1015
|
+
enabled: paymentMethod.enabled,
|
|
1016
|
+
checker: paymentMethod.checker || {},
|
|
1017
|
+
handler: paymentMethod.handler || {},
|
|
1018
|
+
});
|
|
1019
|
+
if (!this.selectedChecker) {
|
|
1020
|
+
this.selectedChecker = paymentMethod.checker && {
|
|
1021
|
+
code: paymentMethod.checker.code,
|
|
1022
|
+
args: paymentMethod.checker.args.map(a => (Object.assign(Object.assign({}, a), { value: getConfigArgValue(a.value) }))),
|
|
1023
|
+
};
|
|
1024
|
+
}
|
|
1025
|
+
if (!this.selectedHandler) {
|
|
1026
|
+
this.selectedHandler = paymentMethod.handler && {
|
|
1027
|
+
code: paymentMethod.handler.code,
|
|
1028
|
+
args: paymentMethod.handler.args.map(a => (Object.assign(Object.assign({}, a), { value: getConfigArgValue(a.value) }))),
|
|
1029
|
+
};
|
|
1030
|
+
}
|
|
1031
|
+
if (this.customFields.length) {
|
|
1032
|
+
this.setCustomFieldFormValues(this.customFields, this.detailForm.get('customFields'), paymentMethod);
|
|
1033
|
+
}
|
|
1034
|
+
}
|
|
1035
|
+
}
|
|
1036
|
+
PaymentMethodDetailComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: PaymentMethodDetailComponent, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }, { token: i2.ServerConfigService }, { token: i0.ChangeDetectorRef }, { token: i2.DataService }, { token: i3.FormBuilder }, { token: i2.NotificationService }], target: i0.ɵɵFactoryTarget.Component });
|
|
1037
|
+
PaymentMethodDetailComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: PaymentMethodDetailComponent, selector: "vdr-payment-method-detail", usesInheritance: true, ngImport: i0, template: "<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", styles: [""], components: [{ type: i2.ActionBarComponent, selector: "vdr-action-bar" }, { type: i2.ActionBarLeftComponent, selector: "vdr-ab-left", inputs: ["grow"] }, { type: i2.EntityInfoComponent, selector: "vdr-entity-info", inputs: ["small", "entity"] }, { type: i2.ActionBarRightComponent, selector: "vdr-ab-right", inputs: ["grow"] }, { type: i2.ActionBarItemsComponent, selector: "vdr-action-bar-items", inputs: ["locationId"] }, { type: i2.FormFieldComponent, selector: "vdr-form-field", inputs: ["label", "for", "tooltip", "errors", "readOnlyToggle"] }, { type: i2.RichTextEditorComponent, selector: "vdr-rich-text-editor", inputs: ["label", "readonly"] }, { type: i4.ClrCheckboxWrapper, selector: "clr-checkbox-wrapper,clr-toggle-wrapper" }, { type: i2.TabbedCustomFieldsComponent, selector: "vdr-tabbed-custom-fields", inputs: ["entityName", "customFields", "customFieldsFormGroup", "readonly", "compact", "showLabel"] }, { type: i2.CustomDetailComponentHostComponent, selector: "vdr-custom-detail-component-host", inputs: ["locationId", "entity$", "detailForm"] }, { type: i2.ConfigurableInputComponent, selector: "vdr-configurable-input", inputs: ["operation", "operationDefinition", "readonly", "removable"], outputs: ["remove"] }, { type: i2.DropdownComponent, selector: "vdr-dropdown", inputs: ["manualToggle"] }, { type: i2.DropdownMenuComponent, selector: "vdr-dropdown-menu", inputs: ["vdrPosition"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.IfPermissionsDirective, selector: "[vdrIfPermissions]", inputs: ["vdrIfPermissions", "vdrIfPermissionsElse"] }, { type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i2.FormFieldControlDirective, selector: "input, textarea, select" }, { type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i3.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i4.ClrCheckbox, selector: "[clrCheckbox],[clrToggle]" }, { type: i2.DisabledDirective, selector: "[vdrDisabled]", inputs: ["vdrDisabled"] }, { type: i3.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { type: i4.ClrLabel, selector: "label", inputs: ["for"] }, { type: i2.DropdownTriggerDirective, selector: "[vdrDropdownTrigger]" }, { type: i4.ClrIconCustomTag, selector: "clr-icon" }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.DropdownItemDirective, selector: "[vdrDropdownItem]" }], pipes: { "async": i5.AsyncPipe, "translate": i6.TranslatePipe, "hasPermission": i2.HasPermissionPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1038
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: PaymentMethodDetailComponent, decorators: [{
|
|
1039
|
+
type: Component,
|
|
1040
|
+
args: [{ selector: 'vdr-payment-method-detail', changeDetection: ChangeDetectionStrategy.OnPush, template: "<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", styles: [""] }]
|
|
1041
|
+
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: i2.ServerConfigService }, { type: i0.ChangeDetectorRef }, { type: i2.DataService }, { type: i3.FormBuilder }, { type: i2.NotificationService }]; } });
|
|
1042
|
+
|
|
1043
|
+
class PaymentMethodListComponent extends BaseListComponent {
|
|
1044
|
+
constructor(dataService, router, route, modalService, notificationService) {
|
|
1045
|
+
super(router, route);
|
|
1046
|
+
this.dataService = dataService;
|
|
1047
|
+
this.modalService = modalService;
|
|
1048
|
+
this.notificationService = notificationService;
|
|
1049
|
+
super.setQueryFn((...args) => this.dataService.settings.getPaymentMethods(...args).refetchOnChannelChange(), data => data.paymentMethods);
|
|
1050
|
+
}
|
|
1051
|
+
deletePaymentMethod(paymentMethodId) {
|
|
1052
|
+
this.showModalAndDelete(paymentMethodId)
|
|
1053
|
+
.pipe(switchMap(response => {
|
|
1054
|
+
if (response.result === DeletionResult.DELETED) {
|
|
1055
|
+
return [true];
|
|
1056
|
+
}
|
|
1057
|
+
else {
|
|
1058
|
+
return this.showModalAndDelete(paymentMethodId, response.message || '').pipe(map(r => r.result === DeletionResult.DELETED));
|
|
1059
|
+
}
|
|
1060
|
+
}),
|
|
1061
|
+
// Refresh the cached facets to reflect the changes
|
|
1062
|
+
switchMap(() => this.dataService.settings.getPaymentMethods(100).single$))
|
|
1063
|
+
.subscribe(() => {
|
|
1064
|
+
this.notificationService.success(marker('common.notify-delete-success'), {
|
|
1065
|
+
entity: 'PaymentMethod',
|
|
1066
|
+
});
|
|
1067
|
+
this.refresh();
|
|
1068
|
+
}, err => {
|
|
1069
|
+
this.notificationService.error(marker('common.notify-delete-error'), {
|
|
1070
|
+
entity: 'PaymentMethod',
|
|
1071
|
+
});
|
|
1072
|
+
});
|
|
1073
|
+
}
|
|
1074
|
+
showModalAndDelete(paymentMethodId, message) {
|
|
1075
|
+
return this.modalService
|
|
1076
|
+
.dialog({
|
|
1077
|
+
title: marker('settings.confirm-delete-payment-method'),
|
|
1078
|
+
body: message,
|
|
1079
|
+
buttons: [
|
|
1080
|
+
{ type: 'secondary', label: marker('common.cancel') },
|
|
1081
|
+
{ type: 'danger', label: marker('common.delete'), returnValue: true },
|
|
1082
|
+
],
|
|
1083
|
+
})
|
|
1084
|
+
.pipe(switchMap(res => res ? this.dataService.settings.deletePaymentMethod(paymentMethodId, !!message) : EMPTY), map(res => res.deletePaymentMethod));
|
|
1085
|
+
}
|
|
1086
|
+
}
|
|
1087
|
+
PaymentMethodListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: PaymentMethodListComponent, deps: [{ token: i2.DataService }, { token: i1.Router }, { token: i1.ActivatedRoute }, { token: i2.ModalService }, { token: i2.NotificationService }], target: i0.ɵɵFactoryTarget.Component });
|
|
1088
|
+
PaymentMethodListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: PaymentMethodListComponent, selector: "vdr-payment-method-list", usesInheritance: true, ngImport: i0, template: "<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", styles: [""], components: [{ type: i2.ActionBarComponent, selector: "vdr-action-bar" }, { type: i2.ActionBarRightComponent, selector: "vdr-ab-right", inputs: ["grow"] }, { type: i2.ActionBarItemsComponent, selector: "vdr-action-bar-items", inputs: ["locationId"] }, { type: i2.DataTableComponent, selector: "vdr-data-table", inputs: ["items", "itemsPerPage", "currentPage", "totalItems", "allSelected", "isRowSelectedFn", "emptyStateLabel"], outputs: ["allSelectChange", "rowSelectChange", "pageChange", "itemsPerPageChange"] }, { type: i2.DataTableColumnComponent, selector: "vdr-dt-column", inputs: ["expand"] }, { type: i2.TableRowActionComponent, selector: "vdr-table-row-action", inputs: ["linkTo", "label", "iconShape", "disabled"] }, { type: i2.DropdownComponent, selector: "vdr-dropdown", inputs: ["manualToggle"] }, { type: i2.DropdownMenuComponent, selector: "vdr-dropdown-menu", inputs: ["vdrPosition"] }], directives: [{ type: i2.IfPermissionsDirective, selector: "[vdrIfPermissions]", inputs: ["vdrIfPermissions", "vdrIfPermissionsElse"] }, { type: i1.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { type: i4.ClrIconCustomTag, selector: "clr-icon" }, { type: i2.DropdownTriggerDirective, selector: "[vdrDropdownTrigger]" }, { type: i2.DropdownItemDirective, selector: "[vdrDropdownItem]" }], pipes: { "translate": i6.TranslatePipe, "async": i5.AsyncPipe, "hasPermission": i2.HasPermissionPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1089
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: PaymentMethodListComponent, decorators: [{
|
|
1090
|
+
type: Component,
|
|
1091
|
+
args: [{ selector: 'vdr-payment-method-list', changeDetection: ChangeDetectionStrategy.OnPush, template: "<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", styles: [""] }]
|
|
1092
|
+
}], ctorParameters: function () { return [{ type: i2.DataService }, { type: i1.Router }, { type: i1.ActivatedRoute }, { type: i2.ModalService }, { type: i2.NotificationService }]; } });
|
|
1093
|
+
|
|
1094
|
+
class ProfileComponent extends BaseDetailComponent {
|
|
1095
|
+
constructor(router, route, serverConfigService, changeDetector, dataService, formBuilder, notificationService) {
|
|
1096
|
+
super(route, router, serverConfigService, dataService);
|
|
1097
|
+
this.changeDetector = changeDetector;
|
|
1098
|
+
this.dataService = dataService;
|
|
1099
|
+
this.formBuilder = formBuilder;
|
|
1100
|
+
this.notificationService = notificationService;
|
|
1101
|
+
this.customFields = this.getCustomFieldConfig('Administrator');
|
|
1102
|
+
this.detailForm = this.formBuilder.group({
|
|
1103
|
+
emailAddress: ['', Validators.required],
|
|
1104
|
+
firstName: ['', Validators.required],
|
|
1105
|
+
lastName: ['', Validators.required],
|
|
1106
|
+
password: [''],
|
|
1107
|
+
customFields: this.formBuilder.group(this.customFields.reduce((hash, field) => (Object.assign(Object.assign({}, hash), { [field.name]: '' })), {})),
|
|
1108
|
+
});
|
|
1109
|
+
}
|
|
1110
|
+
ngOnInit() {
|
|
1111
|
+
this.init();
|
|
1112
|
+
}
|
|
1113
|
+
ngOnDestroy() {
|
|
1114
|
+
this.destroy();
|
|
1115
|
+
}
|
|
1116
|
+
save() {
|
|
1117
|
+
this.entity$
|
|
1118
|
+
.pipe(take(1), mergeMap(({ id }) => {
|
|
1119
|
+
const formValue = this.detailForm.value;
|
|
1120
|
+
const administrator = {
|
|
1121
|
+
emailAddress: formValue.emailAddress,
|
|
1122
|
+
firstName: formValue.firstName,
|
|
1123
|
+
lastName: formValue.lastName,
|
|
1124
|
+
password: formValue.password,
|
|
1125
|
+
customFields: formValue.customFields,
|
|
1126
|
+
};
|
|
1127
|
+
return this.dataService.administrator.updateActiveAdministrator(administrator);
|
|
1128
|
+
}))
|
|
1129
|
+
.subscribe(data => {
|
|
1130
|
+
this.notificationService.success(marker('common.notify-update-success'), {
|
|
1131
|
+
entity: 'Administrator',
|
|
1132
|
+
});
|
|
1133
|
+
this.detailForm.markAsPristine();
|
|
1134
|
+
this.changeDetector.markForCheck();
|
|
1135
|
+
}, err => {
|
|
1136
|
+
this.notificationService.error(marker('common.notify-update-error'), {
|
|
1137
|
+
entity: 'Administrator',
|
|
1138
|
+
});
|
|
1139
|
+
});
|
|
1140
|
+
}
|
|
1141
|
+
setFormValues(administrator, languageCode) {
|
|
1142
|
+
this.detailForm.patchValue({
|
|
1143
|
+
emailAddress: administrator.emailAddress,
|
|
1144
|
+
firstName: administrator.firstName,
|
|
1145
|
+
lastName: administrator.lastName,
|
|
1146
|
+
});
|
|
1147
|
+
if (this.customFields.length) {
|
|
1148
|
+
this.setCustomFieldFormValues(this.customFields, this.detailForm.get('customFields'), administrator);
|
|
1149
|
+
}
|
|
1150
|
+
}
|
|
1151
|
+
}
|
|
1152
|
+
ProfileComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: ProfileComponent, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }, { token: i2.ServerConfigService }, { token: i0.ChangeDetectorRef }, { token: i2.DataService }, { token: i3.FormBuilder }, { token: i2.NotificationService }], target: i0.ɵɵFactoryTarget.Component });
|
|
1153
|
+
ProfileComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: ProfileComponent, selector: "vdr-profile", usesInheritance: true, ngImport: i0, template: "<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", styles: [""], components: [{ type: i2.ActionBarComponent, selector: "vdr-action-bar" }, { type: i2.ActionBarLeftComponent, selector: "vdr-ab-left", inputs: ["grow"] }, { type: i2.EntityInfoComponent, selector: "vdr-entity-info", inputs: ["small", "entity"] }, { type: i2.ActionBarRightComponent, selector: "vdr-ab-right", inputs: ["grow"] }, { type: i2.ActionBarItemsComponent, selector: "vdr-action-bar-items", inputs: ["locationId"] }, { type: i2.FormFieldComponent, selector: "vdr-form-field", inputs: ["label", "for", "tooltip", "errors", "readOnlyToggle"] }, { type: i2.TabbedCustomFieldsComponent, selector: "vdr-tabbed-custom-fields", inputs: ["entityName", "customFields", "customFieldsFormGroup", "readonly", "compact", "showLabel"] }], directives: [{ type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i2.FormFieldControlDirective, selector: "input, textarea, select" }, { type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { type: i4.ClrLabel, selector: "label", inputs: ["for"] }], pipes: { "async": i5.AsyncPipe, "translate": i6.TranslatePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1154
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: ProfileComponent, decorators: [{
|
|
1155
|
+
type: Component,
|
|
1156
|
+
args: [{ selector: 'vdr-profile', changeDetection: ChangeDetectionStrategy.OnPush, template: "<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", styles: [""] }]
|
|
1157
|
+
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: i2.ServerConfigService }, { type: i0.ChangeDetectorRef }, { type: i2.DataService }, { type: i3.FormBuilder }, { type: i2.NotificationService }]; } });
|
|
1158
|
+
|
|
1159
|
+
class RoleDetailComponent extends BaseDetailComponent {
|
|
1160
|
+
constructor(router, route, serverConfigService, changeDetector, dataService, formBuilder, notificationService) {
|
|
1161
|
+
super(route, router, serverConfigService, dataService);
|
|
1162
|
+
this.changeDetector = changeDetector;
|
|
1163
|
+
this.dataService = dataService;
|
|
1164
|
+
this.formBuilder = formBuilder;
|
|
1165
|
+
this.notificationService = notificationService;
|
|
1166
|
+
this.detailForm = this.formBuilder.group({
|
|
1167
|
+
code: ['', Validators.required],
|
|
1168
|
+
description: ['', Validators.required],
|
|
1169
|
+
channelIds: [],
|
|
1170
|
+
permissions: [],
|
|
1171
|
+
});
|
|
1172
|
+
}
|
|
1173
|
+
ngOnInit() {
|
|
1174
|
+
this.init();
|
|
1175
|
+
this.role$ = this.entity$;
|
|
1176
|
+
this.permissionDefinitions = this.serverConfigService.getPermissionDefinitions();
|
|
1177
|
+
}
|
|
1178
|
+
ngOnDestroy() {
|
|
1179
|
+
this.destroy();
|
|
1180
|
+
}
|
|
1181
|
+
updateCode(nameValue) {
|
|
1182
|
+
const codeControl = this.detailForm.get(['code']);
|
|
1183
|
+
if (codeControl && codeControl.pristine) {
|
|
1184
|
+
codeControl.setValue(normalizeString(nameValue, '-'));
|
|
1185
|
+
}
|
|
1186
|
+
}
|
|
1187
|
+
setPermission(change) {
|
|
1188
|
+
const permissionsControl = this.detailForm.get('permissions');
|
|
1189
|
+
if (permissionsControl) {
|
|
1190
|
+
const currentPermissions = permissionsControl.value;
|
|
1191
|
+
const newValue = change.value === true
|
|
1192
|
+
? unique([...currentPermissions, change.permission])
|
|
1193
|
+
: currentPermissions.filter(p => p !== change.permission);
|
|
1194
|
+
permissionsControl.setValue(newValue);
|
|
1195
|
+
permissionsControl.markAsDirty();
|
|
1196
|
+
}
|
|
1197
|
+
}
|
|
1198
|
+
create() {
|
|
1199
|
+
const formValue = this.detailForm.value;
|
|
1200
|
+
const role = formValue;
|
|
1201
|
+
this.dataService.administrator.createRole(role).subscribe(data => {
|
|
1202
|
+
this.notificationService.success(marker('common.notify-create-success'), { entity: 'Role' });
|
|
1203
|
+
this.detailForm.markAsPristine();
|
|
1204
|
+
this.changeDetector.markForCheck();
|
|
1205
|
+
this.router.navigate(['../', data.createRole.id], { relativeTo: this.route });
|
|
1206
|
+
}, err => {
|
|
1207
|
+
this.notificationService.error(marker('common.notify-create-error'), {
|
|
1208
|
+
entity: 'Role',
|
|
1209
|
+
});
|
|
1210
|
+
});
|
|
1211
|
+
}
|
|
1212
|
+
save() {
|
|
1213
|
+
this.role$
|
|
1214
|
+
.pipe(take(1), mergeMap(({ id }) => {
|
|
1215
|
+
const formValue = this.detailForm.value;
|
|
1216
|
+
const role = Object.assign({ id }, formValue);
|
|
1217
|
+
return this.dataService.administrator.updateRole(role);
|
|
1218
|
+
}))
|
|
1219
|
+
.subscribe(data => {
|
|
1220
|
+
this.notificationService.success(marker('common.notify-update-success'), { entity: 'Role' });
|
|
1221
|
+
this.detailForm.markAsPristine();
|
|
1222
|
+
this.changeDetector.markForCheck();
|
|
1223
|
+
}, err => {
|
|
1224
|
+
this.notificationService.error(marker('common.notify-update-error'), {
|
|
1225
|
+
entity: 'Role',
|
|
1226
|
+
});
|
|
1227
|
+
});
|
|
1228
|
+
}
|
|
1229
|
+
setFormValues(role, languageCode) {
|
|
1230
|
+
this.detailForm.patchValue({
|
|
1231
|
+
description: role.description,
|
|
1232
|
+
code: role.code,
|
|
1233
|
+
channelIds: role.channels.map(c => c.id),
|
|
1234
|
+
permissions: role.permissions,
|
|
1235
|
+
});
|
|
1236
|
+
// This was required to get the channel selector component to
|
|
1237
|
+
// correctly display its contents. A while spent debugging the root
|
|
1238
|
+
// cause did not yield a solution, therefore this next line.
|
|
1239
|
+
this.changeDetector.detectChanges();
|
|
1240
|
+
}
|
|
1241
|
+
}
|
|
1242
|
+
RoleDetailComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: RoleDetailComponent, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }, { token: i2.ServerConfigService }, { token: i0.ChangeDetectorRef }, { token: i2.DataService }, { token: i3.FormBuilder }, { token: i2.NotificationService }], target: i0.ɵɵFactoryTarget.Component });
|
|
1243
|
+
RoleDetailComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: RoleDetailComponent, selector: "vdr-role-detail", usesInheritance: true, ngImport: i0, template: "<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", styles: [""], components: [{ type: i2.ActionBarComponent, selector: "vdr-action-bar" }, { type: i2.ActionBarLeftComponent, selector: "vdr-ab-left", inputs: ["grow"] }, { type: i2.EntityInfoComponent, selector: "vdr-entity-info", inputs: ["small", "entity"] }, { type: i2.ActionBarRightComponent, selector: "vdr-ab-right", inputs: ["grow"] }, { type: i2.ActionBarItemsComponent, selector: "vdr-action-bar-items", inputs: ["locationId"] }, { type: i2.FormFieldComponent, selector: "vdr-form-field", inputs: ["label", "for", "tooltip", "errors", "readOnlyToggle"] }, { type: i2.ChannelAssignmentControlComponent, selector: "vdr-channel-assignment-control", inputs: ["multiple", "includeDefaultChannel", "disableChannelIds"] }, { type: PermissionGridComponent, selector: "vdr-permission-grid", inputs: ["permissionDefinitions", "activePermissions", "readonly"], outputs: ["permissionChange"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.IfPermissionsDirective, selector: "[vdrIfPermissions]", inputs: ["vdrIfPermissions", "vdrIfPermissionsElse"] }, { type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i2.FormFieldControlDirective, selector: "input, textarea, select" }, { type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i2.DisabledDirective, selector: "[vdrDisabled]", inputs: ["vdrDisabled"] }, { type: i4.ClrLabel, selector: "label", inputs: ["for"] }], pipes: { "async": i5.AsyncPipe, "translate": i6.TranslatePipe, "hasPermission": i2.HasPermissionPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1244
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: RoleDetailComponent, decorators: [{
|
|
1245
|
+
type: Component,
|
|
1246
|
+
args: [{ selector: 'vdr-role-detail', changeDetection: ChangeDetectionStrategy.OnPush, template: "<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", styles: [""] }]
|
|
1247
|
+
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: i2.ServerConfigService }, { type: i0.ChangeDetectorRef }, { type: i2.DataService }, { type: i3.FormBuilder }, { type: i2.NotificationService }]; } });
|
|
1248
|
+
|
|
1249
|
+
class RoleListComponent extends BaseListComponent {
|
|
1250
|
+
constructor(modalService, notificationService, dataService, router, route) {
|
|
1251
|
+
super(router, route);
|
|
1252
|
+
this.modalService = modalService;
|
|
1253
|
+
this.notificationService = notificationService;
|
|
1254
|
+
this.dataService = dataService;
|
|
1255
|
+
this.initialLimit = 3;
|
|
1256
|
+
this.displayLimit = {};
|
|
1257
|
+
super.setQueryFn((...args) => this.dataService.administrator.getRoles(...args), data => data.roles);
|
|
1258
|
+
}
|
|
1259
|
+
ngOnInit() {
|
|
1260
|
+
super.ngOnInit();
|
|
1261
|
+
this.visibleRoles$ = this.items$.pipe(map(roles => roles.filter(role => role.code !== CUSTOMER_ROLE_CODE)));
|
|
1262
|
+
}
|
|
1263
|
+
toggleDisplayLimit(role) {
|
|
1264
|
+
if (this.displayLimit[role.id] === role.permissions.length) {
|
|
1265
|
+
this.displayLimit[role.id] = this.initialLimit;
|
|
1266
|
+
}
|
|
1267
|
+
else {
|
|
1268
|
+
this.displayLimit[role.id] = role.permissions.length;
|
|
1269
|
+
}
|
|
1270
|
+
}
|
|
1271
|
+
isDefaultRole(role) {
|
|
1272
|
+
return role.code === SUPER_ADMIN_ROLE_CODE || role.code === CUSTOMER_ROLE_CODE;
|
|
1273
|
+
}
|
|
1274
|
+
deleteRole(id) {
|
|
1275
|
+
this.modalService
|
|
1276
|
+
.dialog({
|
|
1277
|
+
title: marker('settings.confirm-delete-role'),
|
|
1278
|
+
buttons: [
|
|
1279
|
+
{ type: 'secondary', label: marker('common.cancel') },
|
|
1280
|
+
{ type: 'danger', label: marker('common.delete'), returnValue: true },
|
|
1281
|
+
],
|
|
1282
|
+
})
|
|
1283
|
+
.pipe(switchMap(response => (response ? this.dataService.administrator.deleteRole(id) : EMPTY)))
|
|
1284
|
+
.subscribe(() => {
|
|
1285
|
+
this.notificationService.success(marker('common.notify-delete-success'), {
|
|
1286
|
+
entity: 'Role',
|
|
1287
|
+
});
|
|
1288
|
+
this.refresh();
|
|
1289
|
+
}, err => {
|
|
1290
|
+
this.notificationService.error(marker('common.notify-delete-error'), {
|
|
1291
|
+
entity: 'Role',
|
|
1292
|
+
});
|
|
1293
|
+
});
|
|
1294
|
+
}
|
|
1295
|
+
}
|
|
1296
|
+
RoleListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: RoleListComponent, deps: [{ token: i2.ModalService }, { token: i2.NotificationService }, { token: i2.DataService }, { token: i1.Router }, { token: i1.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component });
|
|
1297
|
+
RoleListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: RoleListComponent, selector: "vdr-role-list", usesInheritance: true, ngImport: i0, template: "<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", styles: [".default-role-label{color:var(--color-grey-400)}\n"], components: [{ type: i2.ActionBarComponent, selector: "vdr-action-bar" }, { type: i2.ActionBarRightComponent, selector: "vdr-ab-right", inputs: ["grow"] }, { type: i2.ActionBarItemsComponent, selector: "vdr-action-bar-items", inputs: ["locationId"] }, { type: i2.DataTableComponent, selector: "vdr-data-table", inputs: ["items", "itemsPerPage", "currentPage", "totalItems", "allSelected", "isRowSelectedFn", "emptyStateLabel"], outputs: ["allSelectChange", "rowSelectChange", "pageChange", "itemsPerPageChange"] }, { type: i2.DataTableColumnComponent, selector: "vdr-dt-column", inputs: ["expand"] }, { type: i2.ChipComponent, selector: "vdr-chip", inputs: ["icon", "invert", "colorFrom", "colorType"], outputs: ["iconClick"] }, { type: i2.ChannelBadgeComponent, selector: "vdr-channel-badge", inputs: ["channelCode"] }, { type: i2.TableRowActionComponent, selector: "vdr-table-row-action", inputs: ["linkTo", "label", "iconShape", "disabled"] }, { type: i2.DropdownComponent, selector: "vdr-dropdown", inputs: ["manualToggle"] }, { type: i2.DropdownMenuComponent, selector: "vdr-dropdown-menu", inputs: ["vdrPosition"] }], directives: [{ type: i2.IfPermissionsDirective, selector: "[vdrIfPermissions]", inputs: ["vdrIfPermissions", "vdrIfPermissionsElse"] }, { type: i1.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { type: i4.ClrIconCustomTag, selector: "clr-icon" }, { type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.DropdownTriggerDirective, selector: "[vdrDropdownTrigger]" }, { type: i2.DropdownItemDirective, selector: "[vdrDropdownItem]" }], pipes: { "translate": i6.TranslatePipe, "async": i5.AsyncPipe, "channelCodeToLabel": i2.ChannelLabelPipe, "slice": i5.SlicePipe, "hasPermission": i2.HasPermissionPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1298
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: RoleListComponent, decorators: [{
|
|
1299
|
+
type: Component,
|
|
1300
|
+
args: [{ selector: 'vdr-role-list', changeDetection: ChangeDetectionStrategy.OnPush, template: "<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", styles: [".default-role-label{color:var(--color-grey-400)}\n"] }]
|
|
1301
|
+
}], ctorParameters: function () { return [{ type: i2.ModalService }, { type: i2.NotificationService }, { type: i2.DataService }, { type: i1.Router }, { type: i1.ActivatedRoute }]; } });
|
|
1302
|
+
|
|
1303
|
+
class ShippingEligibilityTestResultComponent {
|
|
1304
|
+
constructor() {
|
|
1305
|
+
this.okToRun = false;
|
|
1306
|
+
this.testDataUpdated = false;
|
|
1307
|
+
this.runTest = new EventEmitter();
|
|
1308
|
+
}
|
|
1309
|
+
}
|
|
1310
|
+
ShippingEligibilityTestResultComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: ShippingEligibilityTestResultComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1311
|
+
ShippingEligibilityTestResultComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: ShippingEligibilityTestResultComponent, selector: "vdr-shipping-eligibility-test-result", inputs: { testResult: "testResult", okToRun: "okToRun", testDataUpdated: "testDataUpdated", currencyCode: "currencyCode" }, outputs: { runTest: "runTest" }, ngImport: i0, template: "<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", styles: [".result-details{transition:opacity .2s}.result-details.stale{opacity:.5}.price-row{display:flex}.price-row>*:not(:first-child){margin-left:24px}clr-icon.error{color:var(--color-error-500)}\n"], components: [{ type: i2.LabeledDataComponent, selector: "vdr-labeled-data", inputs: ["label"] }, { type: i2.ObjectTreeComponent, selector: "vdr-object-tree", inputs: ["value", "isArrayItem"] }], directives: [{ type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.ClrIconCustomTag, selector: "clr-icon" }], pipes: { "translate": i6.TranslatePipe, "localeCurrency": i2.LocaleCurrencyPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1312
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: ShippingEligibilityTestResultComponent, decorators: [{
|
|
1313
|
+
type: Component,
|
|
1314
|
+
args: [{ selector: 'vdr-shipping-eligibility-test-result', changeDetection: ChangeDetectionStrategy.OnPush, template: "<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", styles: [".result-details{transition:opacity .2s}.result-details.stale{opacity:.5}.price-row{display:flex}.price-row>*:not(:first-child){margin-left:24px}clr-icon.error{color:var(--color-error-500)}\n"] }]
|
|
1315
|
+
}], propDecorators: { testResult: [{
|
|
1316
|
+
type: Input
|
|
1317
|
+
}], okToRun: [{
|
|
1318
|
+
type: Input
|
|
1319
|
+
}], testDataUpdated: [{
|
|
1320
|
+
type: Input
|
|
1321
|
+
}], currencyCode: [{
|
|
1322
|
+
type: Input
|
|
1323
|
+
}], runTest: [{
|
|
1324
|
+
type: Output
|
|
1325
|
+
}] } });
|
|
1326
|
+
|
|
1327
|
+
class TestOrderBuilderComponent {
|
|
1328
|
+
constructor(dataService, localStorageService) {
|
|
1329
|
+
this.dataService = dataService;
|
|
1330
|
+
this.localStorageService = localStorageService;
|
|
1331
|
+
this.orderLinesChange = new EventEmitter();
|
|
1332
|
+
this.lines = [];
|
|
1333
|
+
}
|
|
1334
|
+
get subTotal() {
|
|
1335
|
+
return this.lines.reduce((sum, l) => sum + l.unitPriceWithTax * l.quantity, 0);
|
|
1336
|
+
}
|
|
1337
|
+
ngOnInit() {
|
|
1338
|
+
this.lines = this.loadFromLocalStorage();
|
|
1339
|
+
if (this.lines) {
|
|
1340
|
+
this.orderLinesChange.emit(this.lines);
|
|
1341
|
+
}
|
|
1342
|
+
this.dataService.settings.getActiveChannel('cache-first').single$.subscribe(result => {
|
|
1343
|
+
this.currencyCode = result.activeChannel.currencyCode;
|
|
1344
|
+
});
|
|
1345
|
+
}
|
|
1346
|
+
selectResult(result) {
|
|
1347
|
+
if (result) {
|
|
1348
|
+
this.addToLines(result);
|
|
1349
|
+
}
|
|
1350
|
+
}
|
|
1351
|
+
addToLines(result) {
|
|
1352
|
+
var _a, _b;
|
|
1353
|
+
if (!this.lines.find(l => l.id === result.productVariantId)) {
|
|
1354
|
+
this.lines.push({
|
|
1355
|
+
id: result.productVariantId,
|
|
1356
|
+
name: result.productVariantName,
|
|
1357
|
+
preview: (_b = (_a = result.productAsset) === null || _a === void 0 ? void 0 : _a.preview) !== null && _b !== void 0 ? _b : '',
|
|
1358
|
+
quantity: 1,
|
|
1359
|
+
sku: result.sku,
|
|
1360
|
+
unitPriceWithTax: (result.priceWithTax.__typename === 'SinglePrice' && result.priceWithTax.value) || 0,
|
|
1361
|
+
});
|
|
1362
|
+
this.persistToLocalStorage();
|
|
1363
|
+
this.orderLinesChange.emit(this.lines);
|
|
1364
|
+
}
|
|
1365
|
+
}
|
|
1366
|
+
updateQuantity() {
|
|
1367
|
+
this.persistToLocalStorage();
|
|
1368
|
+
this.orderLinesChange.emit(this.lines);
|
|
1369
|
+
}
|
|
1370
|
+
removeLine(line) {
|
|
1371
|
+
this.lines = this.lines.filter(l => l.id !== line.id);
|
|
1372
|
+
this.persistToLocalStorage();
|
|
1373
|
+
this.orderLinesChange.emit(this.lines);
|
|
1374
|
+
}
|
|
1375
|
+
persistToLocalStorage() {
|
|
1376
|
+
this.localStorageService.setForCurrentLocation('shippingTestOrder', this.lines);
|
|
1377
|
+
}
|
|
1378
|
+
loadFromLocalStorage() {
|
|
1379
|
+
return this.localStorageService.getForCurrentLocation('shippingTestOrder') || [];
|
|
1380
|
+
}
|
|
1381
|
+
}
|
|
1382
|
+
TestOrderBuilderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: TestOrderBuilderComponent, deps: [{ token: i2.DataService }, { token: i2.LocalStorageService }], target: i0.ɵɵFactoryTarget.Component });
|
|
1383
|
+
TestOrderBuilderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: TestOrderBuilderComponent, selector: "vdr-test-order-builder", outputs: { orderLinesChange: "orderLinesChange" }, ngImport: i0, template: "<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-selector (productSelected)=\"selectResult($event)\"> </vdr-product-selector>\r\n </div>\r\n</div>\r\n", styles: [".empty-placeholder{color:var(--color-grey-400);text-align:center}.empty-text{font-size:22px}\n"], components: [{ type: i2.ProductSelectorComponent, selector: "vdr-product-selector", outputs: ["productSelected"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.FormFieldControlDirective, selector: "input, textarea, select" }, { type: i3.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { type: i3.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { type: i3.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i4.ClrIconCustomTag, selector: "clr-icon" }, { type: i5$1.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }], pipes: { "translate": i6.TranslatePipe, "localeCurrency": i2.LocaleCurrencyPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1384
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: TestOrderBuilderComponent, decorators: [{
|
|
1385
|
+
type: Component,
|
|
1386
|
+
args: [{ selector: 'vdr-test-order-builder', changeDetection: ChangeDetectionStrategy.OnPush, template: "<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-selector (productSelected)=\"selectResult($event)\"> </vdr-product-selector>\r\n </div>\r\n</div>\r\n", styles: [".empty-placeholder{color:var(--color-grey-400);text-align:center}.empty-text{font-size:22px}\n"] }]
|
|
1387
|
+
}], ctorParameters: function () { return [{ type: i2.DataService }, { type: i2.LocalStorageService }]; }, propDecorators: { orderLinesChange: [{
|
|
1388
|
+
type: Output
|
|
1389
|
+
}] } });
|
|
1390
|
+
|
|
1391
|
+
class TestAddressFormComponent {
|
|
1392
|
+
constructor(formBuilder, dataService, localStorageService) {
|
|
1393
|
+
this.formBuilder = formBuilder;
|
|
1394
|
+
this.dataService = dataService;
|
|
1395
|
+
this.localStorageService = localStorageService;
|
|
1396
|
+
this.addressChange = new EventEmitter();
|
|
1397
|
+
}
|
|
1398
|
+
ngOnInit() {
|
|
1399
|
+
this.availableCountries$ = this.dataService.settings
|
|
1400
|
+
.getAvailableCountries()
|
|
1401
|
+
.mapSingle(result => result.countries.items);
|
|
1402
|
+
const storedValue = this.localStorageService.getForCurrentLocation('shippingTestAddress');
|
|
1403
|
+
const initialValue = storedValue
|
|
1404
|
+
? storedValue
|
|
1405
|
+
: {
|
|
1406
|
+
city: '',
|
|
1407
|
+
countryCode: '',
|
|
1408
|
+
postalCode: '',
|
|
1409
|
+
province: '',
|
|
1410
|
+
};
|
|
1411
|
+
this.addressChange.emit(initialValue);
|
|
1412
|
+
this.form = this.formBuilder.group(initialValue);
|
|
1413
|
+
this.subscription = this.form.valueChanges.subscribe(value => {
|
|
1414
|
+
this.localStorageService.setForCurrentLocation('shippingTestAddress', value);
|
|
1415
|
+
this.addressChange.emit(value);
|
|
1416
|
+
});
|
|
1417
|
+
}
|
|
1418
|
+
ngOnDestroy() {
|
|
1419
|
+
if (this.subscription) {
|
|
1420
|
+
this.subscription.unsubscribe();
|
|
1421
|
+
}
|
|
1422
|
+
}
|
|
1423
|
+
}
|
|
1424
|
+
TestAddressFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: TestAddressFormComponent, deps: [{ token: i3.FormBuilder }, { token: i2.DataService }, { token: i2.LocalStorageService }], target: i0.ɵɵFactoryTarget.Component });
|
|
1425
|
+
TestAddressFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: TestAddressFormComponent, selector: "vdr-test-address-form", outputs: { addressChange: "addressChange" }, ngImport: i0, template: "<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", styles: ["clr-input-container{margin-bottom:12px}\n"], components: [{ type: i4.ClrInputContainer, selector: "clr-input-container" }], directives: [{ type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i4.ClrLabel, selector: "label", inputs: ["for"] }, { type: i2.FormFieldControlDirective, selector: "input, textarea, select" }, { type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i4.ClrInput, selector: "[clrInput]" }, { type: i3.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { type: i4.ClrSelect, selector: "[clrSelect]" }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i3.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }], pipes: { "translate": i6.TranslatePipe, "async": i5.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1426
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: TestAddressFormComponent, decorators: [{
|
|
1427
|
+
type: Component,
|
|
1428
|
+
args: [{ selector: 'vdr-test-address-form', changeDetection: ChangeDetectionStrategy.OnPush, template: "<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", styles: ["clr-input-container{margin-bottom:12px}\n"] }]
|
|
1429
|
+
}], ctorParameters: function () { return [{ type: i3.FormBuilder }, { type: i2.DataService }, { type: i2.LocalStorageService }]; }, propDecorators: { addressChange: [{
|
|
1430
|
+
type: Output
|
|
1431
|
+
}] } });
|
|
1432
|
+
|
|
1433
|
+
class ShippingMethodTestResultComponent {
|
|
1434
|
+
constructor() {
|
|
1435
|
+
this.okToRun = false;
|
|
1436
|
+
this.testDataUpdated = false;
|
|
1437
|
+
this.runTest = new EventEmitter();
|
|
1438
|
+
}
|
|
1439
|
+
}
|
|
1440
|
+
ShippingMethodTestResultComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: ShippingMethodTestResultComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1441
|
+
ShippingMethodTestResultComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: ShippingMethodTestResultComponent, selector: "vdr-shipping-method-test-result", inputs: { testResult: "testResult", okToRun: "okToRun", testDataUpdated: "testDataUpdated", currencyCode: "currencyCode" }, outputs: { runTest: "runTest" }, ngImport: i0, template: "<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", styles: [".test-result.success .card-block{background-color:var(--color-success-100)}.test-result.error .card-block{background-color:var(--color-error-100)}.test-result.unknown .card-block{background-color:var(--color-component-bg-100)}.result-details{transition:opacity .2s}.result-details.stale{opacity:.5}.eligible-icon{display:inline-block}.eligible-icon .success{color:var(--color-success-500)}.eligible-icon .error{color:var(--color-error-500)}.price-row{display:flex}.price-row>*:not(:first-child){margin-left:24px}\n"], components: [{ type: i2.LabeledDataComponent, selector: "vdr-labeled-data", inputs: ["label"] }, { type: i2.ObjectTreeComponent, selector: "vdr-object-tree", inputs: ["value", "isArrayItem"] }], directives: [{ type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.ClrIconCustomTag, selector: "clr-icon" }], pipes: { "translate": i6.TranslatePipe, "localeCurrency": i2.LocaleCurrencyPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1442
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: ShippingMethodTestResultComponent, decorators: [{
|
|
1443
|
+
type: Component,
|
|
1444
|
+
args: [{ selector: 'vdr-shipping-method-test-result', changeDetection: ChangeDetectionStrategy.OnPush, template: "<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", styles: [".test-result.success .card-block{background-color:var(--color-success-100)}.test-result.error .card-block{background-color:var(--color-error-100)}.test-result.unknown .card-block{background-color:var(--color-component-bg-100)}.result-details{transition:opacity .2s}.result-details.stale{opacity:.5}.eligible-icon{display:inline-block}.eligible-icon .success{color:var(--color-success-500)}.eligible-icon .error{color:var(--color-error-500)}.price-row{display:flex}.price-row>*:not(:first-child){margin-left:24px}\n"] }]
|
|
1445
|
+
}], propDecorators: { testResult: [{
|
|
1446
|
+
type: Input
|
|
1447
|
+
}], okToRun: [{
|
|
1448
|
+
type: Input
|
|
1449
|
+
}], testDataUpdated: [{
|
|
1450
|
+
type: Input
|
|
1451
|
+
}], currencyCode: [{
|
|
1452
|
+
type: Input
|
|
1453
|
+
}], runTest: [{
|
|
1454
|
+
type: Output
|
|
1455
|
+
}] } });
|
|
1456
|
+
|
|
1457
|
+
class ShippingMethodDetailComponent extends BaseDetailComponent {
|
|
1458
|
+
constructor(router, route, serverConfigService, changeDetector, dataService, formBuilder, notificationService) {
|
|
1459
|
+
super(route, router, serverConfigService, dataService);
|
|
1460
|
+
this.changeDetector = changeDetector;
|
|
1461
|
+
this.dataService = dataService;
|
|
1462
|
+
this.formBuilder = formBuilder;
|
|
1463
|
+
this.notificationService = notificationService;
|
|
1464
|
+
this.checkers = [];
|
|
1465
|
+
this.calculators = [];
|
|
1466
|
+
this.fulfillmentHandlers = [];
|
|
1467
|
+
this.testDataUpdated = false;
|
|
1468
|
+
this.updatePermission = [Permission.UpdateSettings, Permission.UpdateShippingMethod];
|
|
1469
|
+
this.fetchTestResult$ = new Subject();
|
|
1470
|
+
this.customFields = this.getCustomFieldConfig('ShippingMethod');
|
|
1471
|
+
this.detailForm = this.formBuilder.group({
|
|
1472
|
+
code: ['', Validators.required],
|
|
1473
|
+
name: ['', Validators.required],
|
|
1474
|
+
description: '',
|
|
1475
|
+
fulfillmentHandler: ['', Validators.required],
|
|
1476
|
+
checker: {},
|
|
1477
|
+
calculator: {},
|
|
1478
|
+
customFields: this.formBuilder.group(this.customFields.reduce((hash, field) => (Object.assign(Object.assign({}, hash), { [field.name]: '' })), {})),
|
|
1479
|
+
});
|
|
1480
|
+
}
|
|
1481
|
+
ngOnInit() {
|
|
1482
|
+
this.init();
|
|
1483
|
+
combineLatest([
|
|
1484
|
+
this.dataService.shippingMethod.getShippingMethodOperations().single$,
|
|
1485
|
+
this.entity$.pipe(take(1)),
|
|
1486
|
+
]).subscribe(([data, entity]) => {
|
|
1487
|
+
this.checkers = data.shippingEligibilityCheckers;
|
|
1488
|
+
this.calculators = data.shippingCalculators;
|
|
1489
|
+
this.fulfillmentHandlers = data.fulfillmentHandlers;
|
|
1490
|
+
this.changeDetector.markForCheck();
|
|
1491
|
+
this.selectedCheckerDefinition = data.shippingEligibilityCheckers.find(c => c.code === (entity.checker && entity.checker.code));
|
|
1492
|
+
this.selectedCalculatorDefinition = data.shippingCalculators.find(c => c.code === (entity.calculator && entity.calculator.code));
|
|
1493
|
+
});
|
|
1494
|
+
this.activeChannel$ = this.dataService.settings
|
|
1495
|
+
.getActiveChannel()
|
|
1496
|
+
.mapStream(data => data.activeChannel);
|
|
1497
|
+
this.testResult$ = this.fetchTestResult$.pipe(switchMap(([address, lines]) => {
|
|
1498
|
+
if (!this.selectedChecker || !this.selectedCalculator) {
|
|
1499
|
+
return of(undefined);
|
|
1500
|
+
}
|
|
1501
|
+
const formValue = this.detailForm.value;
|
|
1502
|
+
const input = {
|
|
1503
|
+
shippingAddress: Object.assign(Object.assign({}, address), { streetLine1: 'test' }),
|
|
1504
|
+
lines: lines.map(l => ({ productVariantId: l.id, quantity: l.quantity })),
|
|
1505
|
+
checker: toConfigurableOperationInput(this.selectedChecker, formValue.checker),
|
|
1506
|
+
calculator: toConfigurableOperationInput(this.selectedCalculator, formValue.calculator),
|
|
1507
|
+
};
|
|
1508
|
+
return this.dataService.shippingMethod
|
|
1509
|
+
.testShippingMethod(input)
|
|
1510
|
+
.mapSingle(result => result.testShippingMethod);
|
|
1511
|
+
}));
|
|
1512
|
+
// tslint:disable:no-non-null-assertion
|
|
1513
|
+
merge(this.detailForm.get(['checker']).valueChanges, this.detailForm.get(['calculator']).valueChanges)
|
|
1514
|
+
.pipe(takeUntil(this.destroy$))
|
|
1515
|
+
.subscribe(() => (this.testDataUpdated = true));
|
|
1516
|
+
// tslint:enable:no-non-null-assertion
|
|
1517
|
+
}
|
|
1518
|
+
ngOnDestroy() {
|
|
1519
|
+
this.destroy();
|
|
1520
|
+
}
|
|
1521
|
+
updateCode(currentCode, nameValue) {
|
|
1522
|
+
if (!currentCode) {
|
|
1523
|
+
const codeControl = this.detailForm.get(['code']);
|
|
1524
|
+
if (codeControl && codeControl.pristine) {
|
|
1525
|
+
codeControl.setValue(normalizeString(nameValue, '-'));
|
|
1526
|
+
}
|
|
1527
|
+
}
|
|
1528
|
+
}
|
|
1529
|
+
selectChecker(checker) {
|
|
1530
|
+
this.selectedCheckerDefinition = checker;
|
|
1531
|
+
this.selectedChecker = configurableDefinitionToInstance(checker);
|
|
1532
|
+
const formControl = this.detailForm.get('checker');
|
|
1533
|
+
if (formControl) {
|
|
1534
|
+
formControl.clearValidators();
|
|
1535
|
+
formControl.updateValueAndValidity({ onlySelf: true });
|
|
1536
|
+
formControl.patchValue(this.selectedChecker);
|
|
1537
|
+
}
|
|
1538
|
+
this.detailForm.markAsDirty();
|
|
1539
|
+
}
|
|
1540
|
+
selectCalculator(calculator) {
|
|
1541
|
+
this.selectedCalculatorDefinition = calculator;
|
|
1542
|
+
this.selectedCalculator = configurableDefinitionToInstance(calculator);
|
|
1543
|
+
const formControl = this.detailForm.get('calculator');
|
|
1544
|
+
if (formControl) {
|
|
1545
|
+
formControl.clearValidators();
|
|
1546
|
+
formControl.updateValueAndValidity({ onlySelf: true });
|
|
1547
|
+
formControl.patchValue(this.selectedCalculator);
|
|
1548
|
+
}
|
|
1549
|
+
this.detailForm.markAsDirty();
|
|
1550
|
+
}
|
|
1551
|
+
create() {
|
|
1552
|
+
const selectedChecker = this.selectedChecker;
|
|
1553
|
+
const selectedCalculator = this.selectedCalculator;
|
|
1554
|
+
if (!selectedChecker || !selectedCalculator) {
|
|
1555
|
+
return;
|
|
1556
|
+
}
|
|
1557
|
+
combineLatest([this.entity$, this.languageCode$])
|
|
1558
|
+
.pipe(take(1), mergeMap(([shippingMethod, languageCode]) => {
|
|
1559
|
+
const formValue = this.detailForm.value;
|
|
1560
|
+
const input = Object.assign(Object.assign({}, this.getUpdatedShippingMethod(shippingMethod, this.detailForm, languageCode)), { checker: toConfigurableOperationInput(selectedChecker, formValue.checker), calculator: toConfigurableOperationInput(selectedCalculator, formValue.calculator) });
|
|
1561
|
+
return this.dataService.shippingMethod.createShippingMethod(input);
|
|
1562
|
+
}))
|
|
1563
|
+
.subscribe(data => {
|
|
1564
|
+
this.notificationService.success(marker('common.notify-create-success'), {
|
|
1565
|
+
entity: 'ShippingMethod',
|
|
1566
|
+
});
|
|
1567
|
+
this.detailForm.markAsPristine();
|
|
1568
|
+
this.changeDetector.markForCheck();
|
|
1569
|
+
this.router.navigate(['../', data.createShippingMethod.id], { relativeTo: this.route });
|
|
1570
|
+
}, err => {
|
|
1571
|
+
this.notificationService.error(marker('common.notify-create-error'), {
|
|
1572
|
+
entity: 'ShippingMethod',
|
|
1573
|
+
});
|
|
1574
|
+
});
|
|
1575
|
+
}
|
|
1576
|
+
save() {
|
|
1577
|
+
const selectedChecker = this.selectedChecker;
|
|
1578
|
+
const selectedCalculator = this.selectedCalculator;
|
|
1579
|
+
if (!selectedChecker || !selectedCalculator) {
|
|
1580
|
+
return;
|
|
1581
|
+
}
|
|
1582
|
+
combineLatest([this.entity$, this.languageCode$])
|
|
1583
|
+
.pipe(take(1), mergeMap(([shippingMethod, languageCode]) => {
|
|
1584
|
+
const formValue = this.detailForm.value;
|
|
1585
|
+
const input = Object.assign(Object.assign({}, this.getUpdatedShippingMethod(shippingMethod, this.detailForm, languageCode)), { checker: toConfigurableOperationInput(selectedChecker, formValue.checker), calculator: toConfigurableOperationInput(selectedCalculator, formValue.calculator) });
|
|
1586
|
+
return this.dataService.shippingMethod.updateShippingMethod(input);
|
|
1587
|
+
}))
|
|
1588
|
+
.subscribe(data => {
|
|
1589
|
+
this.notificationService.success(marker('common.notify-update-success'), {
|
|
1590
|
+
entity: 'ShippingMethod',
|
|
1591
|
+
});
|
|
1592
|
+
this.detailForm.markAsPristine();
|
|
1593
|
+
this.changeDetector.markForCheck();
|
|
1594
|
+
}, err => {
|
|
1595
|
+
this.notificationService.error(marker('common.notify-update-error'), {
|
|
1596
|
+
entity: 'ShippingMethod',
|
|
1597
|
+
});
|
|
1598
|
+
});
|
|
1599
|
+
}
|
|
1600
|
+
setTestOrderLines(event) {
|
|
1601
|
+
this.testOrderLines = event;
|
|
1602
|
+
this.testDataUpdated = true;
|
|
1603
|
+
}
|
|
1604
|
+
setTestAddress(event) {
|
|
1605
|
+
this.testAddress = event;
|
|
1606
|
+
this.testDataUpdated = true;
|
|
1607
|
+
}
|
|
1608
|
+
allTestDataPresent() {
|
|
1609
|
+
return !!(this.testAddress &&
|
|
1610
|
+
this.testOrderLines &&
|
|
1611
|
+
this.testOrderLines.length &&
|
|
1612
|
+
this.selectedChecker &&
|
|
1613
|
+
this.selectedCalculator);
|
|
1614
|
+
}
|
|
1615
|
+
runTest() {
|
|
1616
|
+
this.fetchTestResult$.next([this.testAddress, this.testOrderLines]);
|
|
1617
|
+
this.testDataUpdated = false;
|
|
1618
|
+
}
|
|
1619
|
+
/**
|
|
1620
|
+
* Given a ShippingMethod and the value of the detailForm, this method creates an updated copy which
|
|
1621
|
+
* can then be persisted to the API.
|
|
1622
|
+
*/
|
|
1623
|
+
getUpdatedShippingMethod(shippingMethod, formGroup, languageCode) {
|
|
1624
|
+
const formValue = formGroup.value;
|
|
1625
|
+
const input = createUpdatedTranslatable({
|
|
1626
|
+
translatable: shippingMethod,
|
|
1627
|
+
updatedFields: formValue,
|
|
1628
|
+
customFieldConfig: this.customFields,
|
|
1629
|
+
languageCode,
|
|
1630
|
+
defaultTranslation: {
|
|
1631
|
+
languageCode,
|
|
1632
|
+
name: shippingMethod.name || '',
|
|
1633
|
+
description: shippingMethod.description || '',
|
|
1634
|
+
},
|
|
1635
|
+
});
|
|
1636
|
+
return Object.assign(Object.assign({}, input), { fulfillmentHandler: formValue.fulfillmentHandler });
|
|
1637
|
+
}
|
|
1638
|
+
setFormValues(shippingMethod, languageCode) {
|
|
1639
|
+
var _a, _b, _c, _d;
|
|
1640
|
+
const currentTranslation = findTranslation(shippingMethod, languageCode);
|
|
1641
|
+
this.detailForm.patchValue({
|
|
1642
|
+
name: (_a = currentTranslation === null || currentTranslation === void 0 ? void 0 : currentTranslation.name) !== null && _a !== void 0 ? _a : '',
|
|
1643
|
+
description: (_b = currentTranslation === null || currentTranslation === void 0 ? void 0 : currentTranslation.description) !== null && _b !== void 0 ? _b : '',
|
|
1644
|
+
code: shippingMethod.code,
|
|
1645
|
+
fulfillmentHandler: shippingMethod.fulfillmentHandlerCode,
|
|
1646
|
+
checker: shippingMethod.checker || {},
|
|
1647
|
+
calculator: shippingMethod.calculator || {},
|
|
1648
|
+
});
|
|
1649
|
+
if (!this.selectedChecker) {
|
|
1650
|
+
this.selectedChecker = shippingMethod.checker && {
|
|
1651
|
+
code: shippingMethod.checker.code,
|
|
1652
|
+
args: shippingMethod.checker.args.map(a => (Object.assign(Object.assign({}, a), { value: getConfigArgValue(a.value) }))),
|
|
1653
|
+
};
|
|
1654
|
+
}
|
|
1655
|
+
if (!this.selectedCalculator) {
|
|
1656
|
+
this.selectedCalculator = shippingMethod.calculator && {
|
|
1657
|
+
code: (_c = shippingMethod.calculator) === null || _c === void 0 ? void 0 : _c.code,
|
|
1658
|
+
args: (_d = shippingMethod.calculator) === null || _d === void 0 ? void 0 : _d.args.map(a => (Object.assign(Object.assign({}, a), { value: getConfigArgValue(a.value) }))),
|
|
1659
|
+
};
|
|
1660
|
+
}
|
|
1661
|
+
if (this.customFields.length) {
|
|
1662
|
+
this.setCustomFieldFormValues(this.customFields, this.detailForm.get(['customFields']), shippingMethod, currentTranslation);
|
|
1663
|
+
}
|
|
1664
|
+
}
|
|
1665
|
+
}
|
|
1666
|
+
ShippingMethodDetailComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: ShippingMethodDetailComponent, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }, { token: i2.ServerConfigService }, { token: i0.ChangeDetectorRef }, { token: i2.DataService }, { token: i3.FormBuilder }, { token: i2.NotificationService }], target: i0.ɵɵFactoryTarget.Component });
|
|
1667
|
+
ShippingMethodDetailComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: ShippingMethodDetailComponent, selector: "vdr-shipping-method-detail", usesInheritance: true, ngImport: i0, template: "<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", styles: [".testing-tool{margin-top:48px;margin-bottom:128px}.testing-tool h4{margin-bottom:12px}\n"], components: [{ type: i2.ActionBarComponent, selector: "vdr-action-bar" }, { type: i2.ActionBarLeftComponent, selector: "vdr-ab-left", inputs: ["grow"] }, { type: i2.EntityInfoComponent, selector: "vdr-entity-info", inputs: ["small", "entity"] }, { type: i2.LanguageSelectorComponent, selector: "vdr-language-selector", inputs: ["currentLanguageCode", "availableLanguageCodes", "disabled"], outputs: ["languageCodeChange"] }, { type: i2.ActionBarRightComponent, selector: "vdr-ab-right", inputs: ["grow"] }, { type: i2.ActionBarItemsComponent, selector: "vdr-action-bar-items", inputs: ["locationId"] }, { type: i2.FormFieldComponent, selector: "vdr-form-field", inputs: ["label", "for", "tooltip", "errors", "readOnlyToggle"] }, { type: i2.RichTextEditorComponent, selector: "vdr-rich-text-editor", inputs: ["label", "readonly"] }, { type: i2.TabbedCustomFieldsComponent, selector: "vdr-tabbed-custom-fields", inputs: ["entityName", "customFields", "customFieldsFormGroup", "readonly", "compact", "showLabel"] }, { type: i2.CustomDetailComponentHostComponent, selector: "vdr-custom-detail-component-host", inputs: ["locationId", "entity$", "detailForm"] }, { type: i2.ConfigurableInputComponent, selector: "vdr-configurable-input", inputs: ["operation", "operationDefinition", "readonly", "removable"], outputs: ["remove"] }, { type: i2.DropdownComponent, selector: "vdr-dropdown", inputs: ["manualToggle"] }, { type: i2.DropdownMenuComponent, selector: "vdr-dropdown-menu", inputs: ["vdrPosition"] }, { type: i4.ClrAccordion, selector: "clr-accordion", inputs: ["clrAccordionMultiPanel"] }, { type: i4.ClrAccordionPanel, selector: "clr-accordion-panel", inputs: ["clrAccordionPanelDisabled", "clrAccordionPanelOpen"], outputs: ["clrAccordionPanelOpenChange"] }, { type: i4.ClrAccordionTitle, selector: "clr-accordion-title, clr-step-title" }, { type: i4.ClrAccordionContent, selector: "clr-accordion-content, clr-step-content" }, { type: TestOrderBuilderComponent, selector: "vdr-test-order-builder", outputs: ["orderLinesChange"] }, { type: TestAddressFormComponent, selector: "vdr-test-address-form", outputs: ["addressChange"] }, { type: ShippingMethodTestResultComponent, selector: "vdr-shipping-method-test-result", inputs: ["testResult", "okToRun", "testDataUpdated", "currencyCode"], outputs: ["runTest"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.IfPermissionsDirective, selector: "[vdrIfPermissions]", inputs: ["vdrIfPermissions", "vdrIfPermissionsElse"] }, { type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i2.FormFieldControlDirective, selector: "input, textarea, select" }, { type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i3.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { type: i2.DisabledDirective, selector: "[vdrDisabled]", inputs: ["vdrDisabled"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i3.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i3.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { type: i4.ClrLabel, selector: "label", inputs: ["for"] }, { type: i2.DropdownTriggerDirective, selector: "[vdrDropdownTrigger]" }, { type: i4.ClrIconCustomTag, selector: "clr-icon" }, { type: i2.DropdownItemDirective, selector: "[vdrDropdownItem]" }, { type: i4.ÇlrAccordionWillyWonka, selector: "clr-accordion" }, { type: i4.ÇlrAccordionOompaLoompa, selector: "clr-accordion-panel" }, { type: i4.ÇlrDatagridDetailRegisterer, selector: "[clrIfExpanded]" }, { type: i4.ClrIfExpanded, selector: "[clrIfExpanded]", inputs: ["clrIfExpanded"], outputs: ["clrIfExpandedChange"] }], pipes: { "async": i5.AsyncPipe, "translate": i6.TranslatePipe, "hasPermission": i2.HasPermissionPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1668
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: ShippingMethodDetailComponent, decorators: [{
|
|
1669
|
+
type: Component,
|
|
1670
|
+
args: [{ selector: 'vdr-shipping-method-detail', changeDetection: ChangeDetectionStrategy.OnPush, template: "<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", styles: [".testing-tool{margin-top:48px;margin-bottom:128px}.testing-tool h4{margin-bottom:12px}\n"] }]
|
|
1671
|
+
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: i2.ServerConfigService }, { type: i0.ChangeDetectorRef }, { type: i2.DataService }, { type: i3.FormBuilder }, { type: i2.NotificationService }]; } });
|
|
1672
|
+
|
|
1673
|
+
class ShippingMethodListComponent extends BaseListComponent {
|
|
1674
|
+
constructor(modalService, notificationService, dataService, serverConfigService, router, route) {
|
|
1675
|
+
super(router, route);
|
|
1676
|
+
this.modalService = modalService;
|
|
1677
|
+
this.notificationService = notificationService;
|
|
1678
|
+
this.dataService = dataService;
|
|
1679
|
+
this.serverConfigService = serverConfigService;
|
|
1680
|
+
this.testDataUpdated = false;
|
|
1681
|
+
this.fetchTestResult$ = new Subject();
|
|
1682
|
+
super.setQueryFn((...args) => this.dataService.shippingMethod.getShippingMethods(...args).refetchOnChannelChange(), data => data.shippingMethods);
|
|
1683
|
+
}
|
|
1684
|
+
ngOnInit() {
|
|
1685
|
+
super.ngOnInit();
|
|
1686
|
+
this.testResult$ = this.fetchTestResult$.pipe(switchMap(([address, lines]) => {
|
|
1687
|
+
const input = {
|
|
1688
|
+
shippingAddress: Object.assign(Object.assign({}, address), { streetLine1: 'test' }),
|
|
1689
|
+
lines: lines.map(l => ({ productVariantId: l.id, quantity: l.quantity })),
|
|
1690
|
+
};
|
|
1691
|
+
return this.dataService.shippingMethod
|
|
1692
|
+
.testEligibleShippingMethods(input)
|
|
1693
|
+
.mapSingle(result => result.testEligibleShippingMethods);
|
|
1694
|
+
}));
|
|
1695
|
+
this.activeChannel$ = this.dataService.settings
|
|
1696
|
+
.getActiveChannel()
|
|
1697
|
+
.mapStream(data => data.activeChannel);
|
|
1698
|
+
this.availableLanguages$ = this.serverConfigService.getAvailableLanguages();
|
|
1699
|
+
this.contentLanguage$ = this.dataService.client
|
|
1700
|
+
.uiState()
|
|
1701
|
+
.mapStream(({ uiState }) => uiState.contentLanguage)
|
|
1702
|
+
.pipe(tap(() => this.refresh()));
|
|
1703
|
+
}
|
|
1704
|
+
deleteShippingMethod(id) {
|
|
1705
|
+
this.modalService
|
|
1706
|
+
.dialog({
|
|
1707
|
+
title: marker('catalog.confirm-delete-shipping-method'),
|
|
1708
|
+
buttons: [
|
|
1709
|
+
{ type: 'secondary', label: marker('common.cancel') },
|
|
1710
|
+
{ type: 'danger', label: marker('common.delete'), returnValue: true },
|
|
1711
|
+
],
|
|
1712
|
+
})
|
|
1713
|
+
.pipe(switchMap(response => response ? this.dataService.shippingMethod.deleteShippingMethod(id) : EMPTY))
|
|
1714
|
+
.subscribe(() => {
|
|
1715
|
+
this.notificationService.success(marker('common.notify-delete-success'), {
|
|
1716
|
+
entity: 'ShippingMethod',
|
|
1717
|
+
});
|
|
1718
|
+
this.refresh();
|
|
1719
|
+
}, err => {
|
|
1720
|
+
this.notificationService.error(marker('common.notify-delete-error'), {
|
|
1721
|
+
entity: 'ShippingMethod',
|
|
1722
|
+
});
|
|
1723
|
+
});
|
|
1724
|
+
}
|
|
1725
|
+
setTestOrderLines(event) {
|
|
1726
|
+
this.testOrderLines = event;
|
|
1727
|
+
this.testDataUpdated = true;
|
|
1728
|
+
}
|
|
1729
|
+
setTestAddress(event) {
|
|
1730
|
+
this.testAddress = event;
|
|
1731
|
+
this.testDataUpdated = true;
|
|
1732
|
+
}
|
|
1733
|
+
allTestDataPresent() {
|
|
1734
|
+
return !!(this.testAddress && this.testOrderLines && this.testOrderLines.length);
|
|
1735
|
+
}
|
|
1736
|
+
runTest() {
|
|
1737
|
+
this.fetchTestResult$.next([this.testAddress, this.testOrderLines]);
|
|
1738
|
+
this.testDataUpdated = false;
|
|
1739
|
+
}
|
|
1740
|
+
setLanguage(code) {
|
|
1741
|
+
this.dataService.client.setContentLanguage(code).subscribe();
|
|
1742
|
+
}
|
|
1743
|
+
}
|
|
1744
|
+
ShippingMethodListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: ShippingMethodListComponent, deps: [{ token: i2.ModalService }, { token: i2.NotificationService }, { token: i2.DataService }, { token: i2.ServerConfigService }, { token: i1.Router }, { token: i1.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component });
|
|
1745
|
+
ShippingMethodListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: ShippingMethodListComponent, selector: "vdr-shipping-method-list", usesInheritance: true, ngImport: i0, template: "<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", styles: [".testing-tool{margin-top:48px}\n"], components: [{ type: i2.ActionBarComponent, selector: "vdr-action-bar" }, { type: i2.ActionBarLeftComponent, selector: "vdr-ab-left", inputs: ["grow"] }, { type: i2.LanguageSelectorComponent, selector: "vdr-language-selector", inputs: ["currentLanguageCode", "availableLanguageCodes", "disabled"], outputs: ["languageCodeChange"] }, { type: i2.ActionBarRightComponent, selector: "vdr-ab-right", inputs: ["grow"] }, { type: i2.ActionBarItemsComponent, selector: "vdr-action-bar-items", inputs: ["locationId"] }, { type: i2.DataTableComponent, selector: "vdr-data-table", inputs: ["items", "itemsPerPage", "currentPage", "totalItems", "allSelected", "isRowSelectedFn", "emptyStateLabel"], outputs: ["allSelectChange", "rowSelectChange", "pageChange", "itemsPerPageChange"] }, { type: i2.DataTableColumnComponent, selector: "vdr-dt-column", inputs: ["expand"] }, { type: i2.TableRowActionComponent, selector: "vdr-table-row-action", inputs: ["linkTo", "label", "iconShape", "disabled"] }, { type: i2.DropdownComponent, selector: "vdr-dropdown", inputs: ["manualToggle"] }, { type: i2.DropdownMenuComponent, selector: "vdr-dropdown-menu", inputs: ["vdrPosition"] }, { type: i4.ClrAccordion, selector: "clr-accordion", inputs: ["clrAccordionMultiPanel"] }, { type: i4.ClrAccordionPanel, selector: "clr-accordion-panel", inputs: ["clrAccordionPanelDisabled", "clrAccordionPanelOpen"], outputs: ["clrAccordionPanelOpenChange"] }, { type: i4.ClrAccordionTitle, selector: "clr-accordion-title, clr-step-title" }, { type: i4.ClrAccordionContent, selector: "clr-accordion-content, clr-step-content" }, { type: TestOrderBuilderComponent, selector: "vdr-test-order-builder", outputs: ["orderLinesChange"] }, { type: TestAddressFormComponent, selector: "vdr-test-address-form", outputs: ["addressChange"] }, { type: ShippingEligibilityTestResultComponent, selector: "vdr-shipping-eligibility-test-result", inputs: ["testResult", "okToRun", "testDataUpdated", "currencyCode"], outputs: ["runTest"] }], directives: [{ type: i2.IfPermissionsDirective, selector: "[vdrIfPermissions]", inputs: ["vdrIfPermissions", "vdrIfPermissionsElse"] }, { type: i1.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { type: i4.ClrIconCustomTag, selector: "clr-icon" }, { type: i2.DropdownTriggerDirective, selector: "[vdrDropdownTrigger]" }, { type: i2.DropdownItemDirective, selector: "[vdrDropdownItem]" }, { type: i4.ÇlrAccordionWillyWonka, selector: "clr-accordion" }, { type: i4.ÇlrAccordionOompaLoompa, selector: "clr-accordion-panel" }, { type: i4.ÇlrDatagridDetailRegisterer, selector: "[clrIfExpanded]" }, { type: i4.ClrIfExpanded, selector: "[clrIfExpanded]", inputs: ["clrIfExpanded"], outputs: ["clrIfExpandedChange"] }], pipes: { "async": i5.AsyncPipe, "translate": i6.TranslatePipe, "hasPermission": i2.HasPermissionPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1746
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: ShippingMethodListComponent, decorators: [{
|
|
1747
|
+
type: Component,
|
|
1748
|
+
args: [{ selector: 'vdr-shipping-method-list', changeDetection: ChangeDetectionStrategy.OnPush, template: "<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", styles: [".testing-tool{margin-top:48px}\n"] }]
|
|
1749
|
+
}], ctorParameters: function () { return [{ type: i2.ModalService }, { type: i2.NotificationService }, { type: i2.DataService }, { type: i2.ServerConfigService }, { type: i1.Router }, { type: i1.ActivatedRoute }]; } });
|
|
1750
|
+
|
|
1751
|
+
class TaxCategoryDetailComponent extends BaseDetailComponent {
|
|
1752
|
+
constructor(router, route, serverConfigService, changeDetector, dataService, formBuilder, notificationService) {
|
|
1753
|
+
super(route, router, serverConfigService, dataService);
|
|
1754
|
+
this.changeDetector = changeDetector;
|
|
1755
|
+
this.dataService = dataService;
|
|
1756
|
+
this.formBuilder = formBuilder;
|
|
1757
|
+
this.notificationService = notificationService;
|
|
1758
|
+
this.updatePermission = [Permission.UpdateSettings, Permission.UpdateTaxCategory];
|
|
1759
|
+
this.customFields = this.getCustomFieldConfig('TaxCategory');
|
|
1760
|
+
this.detailForm = this.formBuilder.group({
|
|
1761
|
+
name: ['', Validators.required],
|
|
1762
|
+
isDefault: false,
|
|
1763
|
+
customFields: this.formBuilder.group(this.customFields.reduce((hash, field) => (Object.assign(Object.assign({}, hash), { [field.name]: '' })), {})),
|
|
1764
|
+
});
|
|
1765
|
+
}
|
|
1766
|
+
ngOnInit() {
|
|
1767
|
+
this.init();
|
|
1768
|
+
this.taxCategory$ = this.entity$;
|
|
1769
|
+
}
|
|
1770
|
+
ngOnDestroy() {
|
|
1771
|
+
this.destroy();
|
|
1772
|
+
}
|
|
1773
|
+
saveButtonEnabled() {
|
|
1774
|
+
return this.detailForm.dirty && this.detailForm.valid;
|
|
1775
|
+
}
|
|
1776
|
+
create() {
|
|
1777
|
+
if (!this.detailForm.dirty) {
|
|
1778
|
+
return;
|
|
1779
|
+
}
|
|
1780
|
+
const formValue = this.detailForm.value;
|
|
1781
|
+
const input = {
|
|
1782
|
+
name: formValue.name,
|
|
1783
|
+
isDefault: formValue.isDefault,
|
|
1784
|
+
customFields: formValue.customFields,
|
|
1785
|
+
};
|
|
1786
|
+
this.dataService.settings.createTaxCategory(input).subscribe(data => {
|
|
1787
|
+
this.notificationService.success(marker('common.notify-create-success'), {
|
|
1788
|
+
entity: 'TaxCategory',
|
|
1789
|
+
});
|
|
1790
|
+
this.detailForm.markAsPristine();
|
|
1791
|
+
this.changeDetector.markForCheck();
|
|
1792
|
+
this.router.navigate(['../', data.createTaxCategory.id], { relativeTo: this.route });
|
|
1793
|
+
}, err => {
|
|
1794
|
+
this.notificationService.error(marker('common.notify-create-error'), {
|
|
1795
|
+
entity: 'TaxCategory',
|
|
1796
|
+
});
|
|
1797
|
+
});
|
|
1798
|
+
}
|
|
1799
|
+
save() {
|
|
1800
|
+
if (!this.detailForm.dirty) {
|
|
1801
|
+
return;
|
|
1802
|
+
}
|
|
1803
|
+
const formValue = this.detailForm.value;
|
|
1804
|
+
this.taxCategory$
|
|
1805
|
+
.pipe(take(1), mergeMap(taxCategory => {
|
|
1806
|
+
const input = {
|
|
1807
|
+
id: taxCategory.id,
|
|
1808
|
+
name: formValue.name,
|
|
1809
|
+
isDefault: formValue.isDefault,
|
|
1810
|
+
customFields: formValue.customFields,
|
|
1811
|
+
};
|
|
1812
|
+
return this.dataService.settings.updateTaxCategory(input);
|
|
1813
|
+
}))
|
|
1814
|
+
.subscribe(data => {
|
|
1815
|
+
this.notificationService.success(marker('common.notify-update-success'), {
|
|
1816
|
+
entity: 'TaxCategory',
|
|
1817
|
+
});
|
|
1818
|
+
this.detailForm.markAsPristine();
|
|
1819
|
+
this.changeDetector.markForCheck();
|
|
1820
|
+
}, err => {
|
|
1821
|
+
this.notificationService.error(marker('common.notify-update-error'), {
|
|
1822
|
+
entity: 'TaxCategory',
|
|
1823
|
+
});
|
|
1824
|
+
});
|
|
1825
|
+
}
|
|
1826
|
+
/**
|
|
1827
|
+
* Update the form values when the entity changes.
|
|
1828
|
+
*/
|
|
1829
|
+
setFormValues(entity, languageCode) {
|
|
1830
|
+
this.detailForm.patchValue({
|
|
1831
|
+
name: entity.name,
|
|
1832
|
+
isDefault: entity.isDefault,
|
|
1833
|
+
});
|
|
1834
|
+
if (this.customFields.length) {
|
|
1835
|
+
this.setCustomFieldFormValues(this.customFields, this.detailForm.get('customFields'), entity);
|
|
1836
|
+
}
|
|
1837
|
+
}
|
|
1838
|
+
}
|
|
1839
|
+
TaxCategoryDetailComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: TaxCategoryDetailComponent, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }, { token: i2.ServerConfigService }, { token: i0.ChangeDetectorRef }, { token: i2.DataService }, { token: i3.FormBuilder }, { token: i2.NotificationService }], target: i0.ɵɵFactoryTarget.Component });
|
|
1840
|
+
TaxCategoryDetailComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: TaxCategoryDetailComponent, selector: "vdr-tax-detail", usesInheritance: true, ngImport: i0, template: "<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", styles: [""], components: [{ type: i2.ActionBarComponent, selector: "vdr-action-bar" }, { type: i2.ActionBarLeftComponent, selector: "vdr-ab-left", inputs: ["grow"] }, { type: i2.EntityInfoComponent, selector: "vdr-entity-info", inputs: ["small", "entity"] }, { type: i2.ActionBarRightComponent, selector: "vdr-ab-right", inputs: ["grow"] }, { type: i2.ActionBarItemsComponent, selector: "vdr-action-bar-items", inputs: ["locationId"] }, { type: i2.FormFieldComponent, selector: "vdr-form-field", inputs: ["label", "for", "tooltip", "errors", "readOnlyToggle"] }, { type: i4.ClrCheckboxWrapper, selector: "clr-checkbox-wrapper,clr-toggle-wrapper" }, { type: i2.TabbedCustomFieldsComponent, selector: "vdr-tabbed-custom-fields", inputs: ["entityName", "customFields", "customFieldsFormGroup", "readonly", "compact", "showLabel"] }, { type: i2.CustomDetailComponentHostComponent, selector: "vdr-custom-detail-component-host", inputs: ["locationId", "entity$", "detailForm"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.IfPermissionsDirective, selector: "[vdrIfPermissions]", inputs: ["vdrIfPermissions", "vdrIfPermissionsElse"] }, { type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i2.FormFieldControlDirective, selector: "input, textarea, select" }, { type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i3.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i4.ClrCheckbox, selector: "[clrCheckbox],[clrToggle]" }, { type: i2.DisabledDirective, selector: "[vdrDisabled]", inputs: ["vdrDisabled"] }, { type: i3.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { type: i4.ClrLabel, selector: "label", inputs: ["for"] }], pipes: { "async": i5.AsyncPipe, "translate": i6.TranslatePipe, "hasPermission": i2.HasPermissionPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1841
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: TaxCategoryDetailComponent, decorators: [{
|
|
1842
|
+
type: Component,
|
|
1843
|
+
args: [{ selector: 'vdr-tax-detail', changeDetection: ChangeDetectionStrategy.OnPush, template: "<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", styles: [""] }]
|
|
1844
|
+
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: i2.ServerConfigService }, { type: i0.ChangeDetectorRef }, { type: i2.DataService }, { type: i3.FormBuilder }, { type: i2.NotificationService }]; } });
|
|
1845
|
+
|
|
1846
|
+
class TaxCategoryListComponent {
|
|
1847
|
+
constructor(dataService, notificationService, modalService) {
|
|
1848
|
+
this.dataService = dataService;
|
|
1849
|
+
this.notificationService = notificationService;
|
|
1850
|
+
this.modalService = modalService;
|
|
1851
|
+
this.queryResult = this.dataService.settings.getTaxCategories();
|
|
1852
|
+
this.taxCategories$ = this.queryResult.mapStream(data => data.taxCategories);
|
|
1853
|
+
}
|
|
1854
|
+
deleteTaxCategory(taxCategory) {
|
|
1855
|
+
return this.modalService
|
|
1856
|
+
.dialog({
|
|
1857
|
+
title: marker('settings.confirm-delete-tax-category'),
|
|
1858
|
+
body: taxCategory.name,
|
|
1859
|
+
buttons: [
|
|
1860
|
+
{ type: 'secondary', label: marker('common.cancel') },
|
|
1861
|
+
{ type: 'danger', label: marker('common.delete'), returnValue: true },
|
|
1862
|
+
],
|
|
1863
|
+
})
|
|
1864
|
+
.pipe(switchMap(res => (res ? this.dataService.settings.deleteTaxCategory(taxCategory.id) : EMPTY)), map(res => res.deleteTaxCategory))
|
|
1865
|
+
.subscribe(res => {
|
|
1866
|
+
if (res.result === DeletionResult.DELETED) {
|
|
1867
|
+
this.notificationService.success(marker('common.notify-delete-success'), {
|
|
1868
|
+
entity: 'TaxRate',
|
|
1869
|
+
});
|
|
1870
|
+
this.queryResult.ref.refetch();
|
|
1871
|
+
}
|
|
1872
|
+
else {
|
|
1873
|
+
this.notificationService.error(res.message || marker('common.notify-delete-error'), {
|
|
1874
|
+
entity: 'TaxRate',
|
|
1875
|
+
});
|
|
1876
|
+
}
|
|
1877
|
+
}, err => {
|
|
1878
|
+
this.notificationService.error(marker('common.notify-delete-error'), {
|
|
1879
|
+
entity: 'TaxRate',
|
|
1880
|
+
});
|
|
1881
|
+
});
|
|
1882
|
+
}
|
|
1883
|
+
}
|
|
1884
|
+
TaxCategoryListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: TaxCategoryListComponent, deps: [{ token: i2.DataService }, { token: i2.NotificationService }, { token: i2.ModalService }], target: i0.ɵɵFactoryTarget.Component });
|
|
1885
|
+
TaxCategoryListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: TaxCategoryListComponent, selector: "vdr-tax-list", ngImport: i0, template: "<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", styles: [""], components: [{ type: i2.ActionBarComponent, selector: "vdr-action-bar" }, { type: i2.ActionBarRightComponent, selector: "vdr-ab-right", inputs: ["grow"] }, { type: i2.ActionBarItemsComponent, selector: "vdr-action-bar-items", inputs: ["locationId"] }, { type: i2.DataTableComponent, selector: "vdr-data-table", inputs: ["items", "itemsPerPage", "currentPage", "totalItems", "allSelected", "isRowSelectedFn", "emptyStateLabel"], outputs: ["allSelectChange", "rowSelectChange", "pageChange", "itemsPerPageChange"] }, { type: i2.DataTableColumnComponent, selector: "vdr-dt-column", inputs: ["expand"] }, { type: i2.ChipComponent, selector: "vdr-chip", inputs: ["icon", "invert", "colorFrom", "colorType"], outputs: ["iconClick"] }, { type: i2.TableRowActionComponent, selector: "vdr-table-row-action", inputs: ["linkTo", "label", "iconShape", "disabled"] }, { type: i2.DropdownComponent, selector: "vdr-dropdown", inputs: ["manualToggle"] }, { type: i2.DropdownMenuComponent, selector: "vdr-dropdown-menu", inputs: ["vdrPosition"] }], directives: [{ type: i2.IfPermissionsDirective, selector: "[vdrIfPermissions]", inputs: ["vdrIfPermissions", "vdrIfPermissionsElse"] }, { type: i1.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { type: i4.ClrIconCustomTag, selector: "clr-icon" }, { type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.DropdownTriggerDirective, selector: "[vdrDropdownTrigger]" }, { type: i2.DropdownItemDirective, selector: "[vdrDropdownItem]" }], pipes: { "translate": i6.TranslatePipe, "async": i5.AsyncPipe, "hasPermission": i2.HasPermissionPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1886
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: TaxCategoryListComponent, decorators: [{
|
|
1887
|
+
type: Component,
|
|
1888
|
+
args: [{ selector: 'vdr-tax-list', changeDetection: ChangeDetectionStrategy.OnPush, template: "<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", styles: [""] }]
|
|
1889
|
+
}], ctorParameters: function () { return [{ type: i2.DataService }, { type: i2.NotificationService }, { type: i2.ModalService }]; } });
|
|
1890
|
+
|
|
1891
|
+
class TaxRateDetailComponent extends BaseDetailComponent {
|
|
1892
|
+
constructor(router, route, serverConfigService, changeDetector, dataService, formBuilder, notificationService) {
|
|
1893
|
+
super(route, router, serverConfigService, dataService);
|
|
1894
|
+
this.changeDetector = changeDetector;
|
|
1895
|
+
this.dataService = dataService;
|
|
1896
|
+
this.formBuilder = formBuilder;
|
|
1897
|
+
this.notificationService = notificationService;
|
|
1898
|
+
this.updatePermission = [Permission.UpdateSettings, Permission.UpdateTaxRate];
|
|
1899
|
+
this.customFields = this.getCustomFieldConfig('TaxRate');
|
|
1900
|
+
this.detailForm = this.formBuilder.group({
|
|
1901
|
+
name: ['', Validators.required],
|
|
1902
|
+
enabled: [true],
|
|
1903
|
+
value: [0, Validators.required],
|
|
1904
|
+
taxCategoryId: [''],
|
|
1905
|
+
zoneId: [''],
|
|
1906
|
+
customerGroupId: [''],
|
|
1907
|
+
customFields: this.formBuilder.group(this.customFields.reduce((hash, field) => (Object.assign(Object.assign({}, hash), { [field.name]: '' })), {})),
|
|
1908
|
+
});
|
|
1909
|
+
}
|
|
1910
|
+
ngOnInit() {
|
|
1911
|
+
this.init();
|
|
1912
|
+
this.taxCategories$ = this.dataService.settings
|
|
1913
|
+
.getTaxCategories()
|
|
1914
|
+
.mapSingle(data => data.taxCategories);
|
|
1915
|
+
this.zones$ = this.dataService.settings.getZones().mapSingle(data => data.zones);
|
|
1916
|
+
}
|
|
1917
|
+
ngOnDestroy() {
|
|
1918
|
+
this.destroy();
|
|
1919
|
+
}
|
|
1920
|
+
saveButtonEnabled() {
|
|
1921
|
+
return this.detailForm.dirty && this.detailForm.valid;
|
|
1922
|
+
}
|
|
1923
|
+
create() {
|
|
1924
|
+
if (!this.detailForm.dirty) {
|
|
1925
|
+
return;
|
|
1926
|
+
}
|
|
1927
|
+
const formValue = this.detailForm.value;
|
|
1928
|
+
const input = {
|
|
1929
|
+
name: formValue.name,
|
|
1930
|
+
enabled: formValue.enabled,
|
|
1931
|
+
value: formValue.value,
|
|
1932
|
+
categoryId: formValue.taxCategoryId,
|
|
1933
|
+
zoneId: formValue.zoneId,
|
|
1934
|
+
customerGroupId: formValue.customerGroupId,
|
|
1935
|
+
customFields: formValue.customFields,
|
|
1936
|
+
};
|
|
1937
|
+
this.dataService.settings.createTaxRate(input).subscribe(data => {
|
|
1938
|
+
this.notificationService.success(marker('common.notify-create-success'), {
|
|
1939
|
+
entity: 'TaxRate',
|
|
1940
|
+
});
|
|
1941
|
+
this.detailForm.markAsPristine();
|
|
1942
|
+
this.changeDetector.markForCheck();
|
|
1943
|
+
this.router.navigate(['../', data.createTaxRate.id], { relativeTo: this.route });
|
|
1944
|
+
}, err => {
|
|
1945
|
+
this.notificationService.error(marker('common.notify-create-error'), {
|
|
1946
|
+
entity: 'TaxRate',
|
|
1947
|
+
});
|
|
1948
|
+
});
|
|
1949
|
+
}
|
|
1950
|
+
save() {
|
|
1951
|
+
if (!this.detailForm.dirty) {
|
|
1952
|
+
return;
|
|
1953
|
+
}
|
|
1954
|
+
const formValue = this.detailForm.value;
|
|
1955
|
+
this.entity$
|
|
1956
|
+
.pipe(take(1), mergeMap(taxRate => {
|
|
1957
|
+
const input = {
|
|
1958
|
+
id: taxRate.id,
|
|
1959
|
+
name: formValue.name,
|
|
1960
|
+
enabled: formValue.enabled,
|
|
1961
|
+
value: formValue.value,
|
|
1962
|
+
categoryId: formValue.taxCategoryId,
|
|
1963
|
+
zoneId: formValue.zoneId,
|
|
1964
|
+
customerGroupId: formValue.customerGroupId,
|
|
1965
|
+
customFields: formValue.customFields,
|
|
1966
|
+
};
|
|
1967
|
+
return this.dataService.settings.updateTaxRate(input);
|
|
1968
|
+
}))
|
|
1969
|
+
.subscribe(data => {
|
|
1970
|
+
this.notificationService.success(marker('common.notify-update-success'), {
|
|
1971
|
+
entity: 'TaxRate',
|
|
1972
|
+
});
|
|
1973
|
+
this.detailForm.markAsPristine();
|
|
1974
|
+
this.changeDetector.markForCheck();
|
|
1975
|
+
}, err => {
|
|
1976
|
+
this.notificationService.error(marker('common.notify-update-error'), {
|
|
1977
|
+
entity: 'TaxRate',
|
|
1978
|
+
});
|
|
1979
|
+
});
|
|
1980
|
+
}
|
|
1981
|
+
/**
|
|
1982
|
+
* Update the form values when the entity changes.
|
|
1983
|
+
*/
|
|
1984
|
+
setFormValues(entity, languageCode) {
|
|
1985
|
+
this.detailForm.patchValue({
|
|
1986
|
+
name: entity.name,
|
|
1987
|
+
enabled: entity.enabled,
|
|
1988
|
+
value: entity.value,
|
|
1989
|
+
taxCategoryId: entity.category ? entity.category.id : '',
|
|
1990
|
+
zoneId: entity.zone ? entity.zone.id : '',
|
|
1991
|
+
customerGroupId: entity.customerGroup ? entity.customerGroup.id : '',
|
|
1992
|
+
});
|
|
1993
|
+
if (this.customFields.length) {
|
|
1994
|
+
this.setCustomFieldFormValues(this.customFields, this.detailForm.get('customFields'), entity);
|
|
1995
|
+
}
|
|
1996
|
+
}
|
|
1997
|
+
}
|
|
1998
|
+
TaxRateDetailComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: TaxRateDetailComponent, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }, { token: i2.ServerConfigService }, { token: i0.ChangeDetectorRef }, { token: i2.DataService }, { token: i3.FormBuilder }, { token: i2.NotificationService }], target: i0.ɵɵFactoryTarget.Component });
|
|
1999
|
+
TaxRateDetailComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: TaxRateDetailComponent, selector: "vdr-tax-rate-detail", usesInheritance: true, ngImport: i0, template: "<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", styles: [""], components: [{ type: i2.ActionBarComponent, selector: "vdr-action-bar" }, { type: i2.ActionBarLeftComponent, selector: "vdr-ab-left", inputs: ["grow"] }, { type: i2.EntityInfoComponent, selector: "vdr-entity-info", inputs: ["small", "entity"] }, { type: i2.ActionBarRightComponent, selector: "vdr-ab-right", inputs: ["grow"] }, { type: i2.ActionBarItemsComponent, selector: "vdr-action-bar-items", inputs: ["locationId"] }, { type: i2.FormFieldComponent, selector: "vdr-form-field", inputs: ["label", "for", "tooltip", "errors", "readOnlyToggle"] }, { type: i4.ClrCheckboxWrapper, selector: "clr-checkbox-wrapper,clr-toggle-wrapper" }, { type: i2.AffixedInputComponent, selector: "vdr-affixed-input", inputs: ["prefix", "suffix"] }, { type: i2.TabbedCustomFieldsComponent, selector: "vdr-tabbed-custom-fields", inputs: ["entityName", "customFields", "customFieldsFormGroup", "readonly", "compact", "showLabel"] }, { type: i2.CustomDetailComponentHostComponent, selector: "vdr-custom-detail-component-host", inputs: ["locationId", "entity$", "detailForm"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.IfPermissionsDirective, selector: "[vdrIfPermissions]", inputs: ["vdrIfPermissions", "vdrIfPermissionsElse"] }, { type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i2.FormFieldControlDirective, selector: "input, textarea, select" }, { type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i3.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i4.ClrCheckbox, selector: "[clrCheckbox],[clrToggle]" }, { type: i2.DisabledDirective, selector: "[vdrDisabled]", inputs: ["vdrDisabled"] }, { type: i3.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { type: i3.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { type: i4.ClrSelect, selector: "[clrSelect]" }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i3.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i3.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { type: i4.ClrLabel, selector: "label", inputs: ["for"] }], pipes: { "async": i5.AsyncPipe, "translate": i6.TranslatePipe, "hasPermission": i2.HasPermissionPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
2000
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: TaxRateDetailComponent, decorators: [{
|
|
2001
|
+
type: Component,
|
|
2002
|
+
args: [{ selector: 'vdr-tax-rate-detail', changeDetection: ChangeDetectionStrategy.OnPush, template: "<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", styles: [""] }]
|
|
2003
|
+
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: i2.ServerConfigService }, { type: i0.ChangeDetectorRef }, { type: i2.DataService }, { type: i3.FormBuilder }, { type: i2.NotificationService }]; } });
|
|
2004
|
+
|
|
2005
|
+
class TaxRateListComponent extends BaseListComponent {
|
|
2006
|
+
constructor(modalService, notificationService, dataService, router, route) {
|
|
2007
|
+
super(router, route);
|
|
2008
|
+
this.modalService = modalService;
|
|
2009
|
+
this.notificationService = notificationService;
|
|
2010
|
+
this.dataService = dataService;
|
|
2011
|
+
super.setQueryFn((...args) => this.dataService.settings.getTaxRates(...args), data => data.taxRates);
|
|
2012
|
+
}
|
|
2013
|
+
deleteTaxRate(taxRate) {
|
|
2014
|
+
return this.modalService
|
|
2015
|
+
.dialog({
|
|
2016
|
+
title: marker('settings.confirm-delete-tax-rate'),
|
|
2017
|
+
body: taxRate.name,
|
|
2018
|
+
buttons: [
|
|
2019
|
+
{ type: 'secondary', label: marker('common.cancel') },
|
|
2020
|
+
{ type: 'danger', label: marker('common.delete'), returnValue: true },
|
|
2021
|
+
],
|
|
2022
|
+
})
|
|
2023
|
+
.pipe(switchMap(res => (res ? this.dataService.settings.deleteTaxRate(taxRate.id) : EMPTY)), map(res => res.deleteTaxRate))
|
|
2024
|
+
.subscribe(res => {
|
|
2025
|
+
if (res.result === DeletionResult.DELETED) {
|
|
2026
|
+
this.notificationService.success(marker('common.notify-delete-success'), {
|
|
2027
|
+
entity: 'TaxRate',
|
|
2028
|
+
});
|
|
2029
|
+
this.refresh();
|
|
2030
|
+
}
|
|
2031
|
+
else {
|
|
2032
|
+
this.notificationService.error(res.message || marker('common.notify-delete-error'), {
|
|
2033
|
+
entity: 'TaxRate',
|
|
2034
|
+
});
|
|
2035
|
+
}
|
|
2036
|
+
}, err => {
|
|
2037
|
+
this.notificationService.error(marker('common.notify-delete-error'), {
|
|
2038
|
+
entity: 'TaxRate',
|
|
2039
|
+
});
|
|
2040
|
+
});
|
|
2041
|
+
}
|
|
2042
|
+
}
|
|
2043
|
+
TaxRateListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: TaxRateListComponent, deps: [{ token: i2.ModalService }, { token: i2.NotificationService }, { token: i2.DataService }, { token: i1.Router }, { token: i1.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component });
|
|
2044
|
+
TaxRateListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: TaxRateListComponent, selector: "vdr-tax-rate-list", usesInheritance: true, ngImport: i0, template: "<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", styles: [""], components: [{ type: i2.ActionBarComponent, selector: "vdr-action-bar" }, { type: i2.ActionBarRightComponent, selector: "vdr-ab-right", inputs: ["grow"] }, { type: i2.ActionBarItemsComponent, selector: "vdr-action-bar-items", inputs: ["locationId"] }, { type: i2.DataTableComponent, selector: "vdr-data-table", inputs: ["items", "itemsPerPage", "currentPage", "totalItems", "allSelected", "isRowSelectedFn", "emptyStateLabel"], outputs: ["allSelectChange", "rowSelectChange", "pageChange", "itemsPerPageChange"] }, { type: i2.DataTableColumnComponent, selector: "vdr-dt-column", inputs: ["expand"] }, { type: i2.TableRowActionComponent, selector: "vdr-table-row-action", inputs: ["linkTo", "label", "iconShape", "disabled"] }, { type: i2.DropdownComponent, selector: "vdr-dropdown", inputs: ["manualToggle"] }, { type: i2.DropdownMenuComponent, selector: "vdr-dropdown-menu", inputs: ["vdrPosition"] }], directives: [{ type: i2.IfPermissionsDirective, selector: "[vdrIfPermissions]", inputs: ["vdrIfPermissions", "vdrIfPermissionsElse"] }, { type: i1.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { type: i4.ClrIconCustomTag, selector: "clr-icon" }, { type: i2.DropdownTriggerDirective, selector: "[vdrDropdownTrigger]" }, { type: i2.DropdownItemDirective, selector: "[vdrDropdownItem]" }], pipes: { "translate": i6.TranslatePipe, "async": i5.AsyncPipe, "hasPermission": i2.HasPermissionPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
2045
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: TaxRateListComponent, decorators: [{
|
|
2046
|
+
type: Component,
|
|
2047
|
+
args: [{ selector: 'vdr-tax-rate-list', changeDetection: ChangeDetectionStrategy.OnPush, template: "<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", styles: [""] }]
|
|
2048
|
+
}], ctorParameters: function () { return [{ type: i2.ModalService }, { type: i2.NotificationService }, { type: i2.DataService }, { type: i1.Router }, { type: i1.ActivatedRoute }]; } });
|
|
2049
|
+
|
|
2050
|
+
class ZoneDetailDialogComponent {
|
|
2051
|
+
constructor(serverConfigService, formBuilder) {
|
|
2052
|
+
this.serverConfigService = serverConfigService;
|
|
2053
|
+
this.formBuilder = formBuilder;
|
|
2054
|
+
this.customFields = this.serverConfigService.getCustomFieldsFor('CustomerGroup');
|
|
2055
|
+
}
|
|
2056
|
+
ngOnInit() {
|
|
2057
|
+
var _a;
|
|
2058
|
+
this.form = this.formBuilder.group({
|
|
2059
|
+
name: [this.zone.name, Validators.required],
|
|
2060
|
+
customFields: this.formBuilder.group(this.customFields.reduce((hash, field) => (Object.assign(Object.assign({}, hash), { [field.name]: '' })), {})),
|
|
2061
|
+
});
|
|
2062
|
+
if (this.customFields.length) {
|
|
2063
|
+
const customFieldsGroup = this.form.get('customFields');
|
|
2064
|
+
for (const fieldDef of this.customFields) {
|
|
2065
|
+
const key = fieldDef.name;
|
|
2066
|
+
const value = (_a = this.zone.customFields) === null || _a === void 0 ? void 0 : _a[key];
|
|
2067
|
+
const control = customFieldsGroup.get(key);
|
|
2068
|
+
if (control) {
|
|
2069
|
+
control.patchValue(value);
|
|
2070
|
+
}
|
|
2071
|
+
}
|
|
2072
|
+
}
|
|
2073
|
+
}
|
|
2074
|
+
cancel() {
|
|
2075
|
+
this.resolveWith();
|
|
2076
|
+
}
|
|
2077
|
+
save() {
|
|
2078
|
+
this.resolveWith(this.form.value);
|
|
2079
|
+
}
|
|
2080
|
+
}
|
|
2081
|
+
ZoneDetailDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: ZoneDetailDialogComponent, deps: [{ token: i2.ServerConfigService }, { token: i3.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
|
|
2082
|
+
ZoneDetailDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: ZoneDetailDialogComponent, selector: "vdr-zone-detail-dialog", ngImport: i0, template: "<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", styles: [""], components: [{ type: i2.FormFieldComponent, selector: "vdr-form-field", inputs: ["label", "for", "tooltip", "errors", "readOnlyToggle"] }, { type: i2.TabbedCustomFieldsComponent, selector: "vdr-tabbed-custom-fields", inputs: ["entityName", "customFields", "customFieldsFormGroup", "readonly", "compact", "showLabel"] }], directives: [{ type: i2.DialogTitleDirective, selector: "[vdrDialogTitle]" }, { type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i2.FormFieldControlDirective, selector: "input, textarea, select" }, { type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i2.DialogButtonsDirective, selector: "[vdrDialogButtons]" }], pipes: { "translate": i6.TranslatePipe, "hasPermission": i2.HasPermissionPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
2083
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: ZoneDetailDialogComponent, decorators: [{
|
|
2084
|
+
type: Component,
|
|
2085
|
+
args: [{ selector: 'vdr-zone-detail-dialog', changeDetection: ChangeDetectionStrategy.OnPush, template: "<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", styles: [""] }]
|
|
2086
|
+
}], ctorParameters: function () { return [{ type: i2.ServerConfigService }, { type: i3.FormBuilder }]; } });
|
|
2087
|
+
|
|
2088
|
+
class ZoneListComponent {
|
|
2089
|
+
constructor(dataService, notificationService, modalService, route, router, serverConfigService) {
|
|
2090
|
+
this.dataService = dataService;
|
|
2091
|
+
this.notificationService = notificationService;
|
|
2092
|
+
this.modalService = modalService;
|
|
2093
|
+
this.route = route;
|
|
2094
|
+
this.router = router;
|
|
2095
|
+
this.serverConfigService = serverConfigService;
|
|
2096
|
+
this.selectedMemberIds = [];
|
|
2097
|
+
}
|
|
2098
|
+
ngOnInit() {
|
|
2099
|
+
const zonesQueryRef = this.dataService.settings.getZones().ref;
|
|
2100
|
+
this.zones$ = zonesQueryRef.valueChanges.pipe(map(data => data.data.zones));
|
|
2101
|
+
const activeZoneId$ = this.route.paramMap.pipe(map(pm => pm.get('contents')), distinctUntilChanged(), tap(() => (this.selectedMemberIds = [])));
|
|
2102
|
+
this.activeZone$ = combineLatest(this.zones$, activeZoneId$).pipe(map(([zones, activeZoneId]) => {
|
|
2103
|
+
if (activeZoneId) {
|
|
2104
|
+
return zones.find(z => z.id === activeZoneId);
|
|
2105
|
+
}
|
|
2106
|
+
}));
|
|
2107
|
+
this.availableLanguages$ = this.serverConfigService.getAvailableLanguages();
|
|
2108
|
+
this.contentLanguage$ = this.dataService.client
|
|
2109
|
+
.uiState()
|
|
2110
|
+
.mapStream(({ uiState }) => uiState.contentLanguage)
|
|
2111
|
+
.pipe(tap(() => zonesQueryRef.refetch()));
|
|
2112
|
+
}
|
|
2113
|
+
setLanguage(code) {
|
|
2114
|
+
this.dataService.client.setContentLanguage(code).subscribe();
|
|
2115
|
+
}
|
|
2116
|
+
create() {
|
|
2117
|
+
this.modalService
|
|
2118
|
+
.fromComponent(ZoneDetailDialogComponent, { locals: { zone: { name: '' } } })
|
|
2119
|
+
.pipe(switchMap(result => result ? this.dataService.settings.createZone(Object.assign(Object.assign({}, result), { memberIds: [] })) : EMPTY),
|
|
2120
|
+
// refresh list
|
|
2121
|
+
switchMap(() => this.dataService.settings.getZones().single$))
|
|
2122
|
+
.subscribe(() => {
|
|
2123
|
+
this.notificationService.success(marker('common.notify-create-success'), {
|
|
2124
|
+
entity: 'Zone',
|
|
2125
|
+
});
|
|
2126
|
+
}, err => {
|
|
2127
|
+
this.notificationService.error(marker('common.notify-create-error'), {
|
|
2128
|
+
entity: 'Zone',
|
|
2129
|
+
});
|
|
2130
|
+
});
|
|
2131
|
+
}
|
|
2132
|
+
delete(zoneId) {
|
|
2133
|
+
this.modalService
|
|
2134
|
+
.dialog({
|
|
2135
|
+
title: marker('catalog.confirm-delete-zone'),
|
|
2136
|
+
buttons: [
|
|
2137
|
+
{ type: 'secondary', label: marker('common.cancel') },
|
|
2138
|
+
{ type: 'danger', label: marker('common.delete'), returnValue: true },
|
|
2139
|
+
],
|
|
2140
|
+
})
|
|
2141
|
+
.pipe(switchMap(response => (response ? this.dataService.settings.deleteZone(zoneId) : EMPTY)), switchMap(result => {
|
|
2142
|
+
if (result.deleteZone.result === DeletionResult.DELETED) {
|
|
2143
|
+
// refresh list
|
|
2144
|
+
return this.dataService.settings
|
|
2145
|
+
.getZones()
|
|
2146
|
+
.mapSingle(() => ({ errorMessage: false }));
|
|
2147
|
+
}
|
|
2148
|
+
else {
|
|
2149
|
+
return of({ errorMessage: result.deleteZone.message });
|
|
2150
|
+
}
|
|
2151
|
+
}))
|
|
2152
|
+
.subscribe(result => {
|
|
2153
|
+
if (typeof result.errorMessage === 'string') {
|
|
2154
|
+
this.notificationService.error(result.errorMessage);
|
|
2155
|
+
}
|
|
2156
|
+
else {
|
|
2157
|
+
this.notificationService.success(marker('common.notify-delete-success'), {
|
|
2158
|
+
entity: 'Zone',
|
|
2159
|
+
});
|
|
2160
|
+
}
|
|
2161
|
+
}, err => {
|
|
2162
|
+
this.notificationService.error(marker('common.notify-delete-error'), {
|
|
2163
|
+
entity: 'Zone',
|
|
2164
|
+
});
|
|
2165
|
+
});
|
|
2166
|
+
}
|
|
2167
|
+
update(zone) {
|
|
2168
|
+
this.modalService
|
|
2169
|
+
.fromComponent(ZoneDetailDialogComponent, { locals: { zone } })
|
|
2170
|
+
.pipe(switchMap(result => result ? this.dataService.settings.updateZone(Object.assign({ id: zone.id }, result)) : EMPTY))
|
|
2171
|
+
.subscribe(() => {
|
|
2172
|
+
this.notificationService.success(marker('common.notify-update-success'), {
|
|
2173
|
+
entity: 'Zone',
|
|
2174
|
+
});
|
|
2175
|
+
}, err => {
|
|
2176
|
+
this.notificationService.error(marker('common.notify-update-error'), {
|
|
2177
|
+
entity: 'Zone',
|
|
2178
|
+
});
|
|
2179
|
+
});
|
|
2180
|
+
}
|
|
2181
|
+
closeMembers() {
|
|
2182
|
+
const params = Object.assign({}, this.route.snapshot.params);
|
|
2183
|
+
delete params.contents;
|
|
2184
|
+
this.router.navigate(['./', params], { relativeTo: this.route, queryParamsHandling: 'preserve' });
|
|
2185
|
+
}
|
|
2186
|
+
addToZone(zone) {
|
|
2187
|
+
this.modalService
|
|
2188
|
+
.fromComponent(AddCountryToZoneDialogComponent, {
|
|
2189
|
+
locals: {
|
|
2190
|
+
zoneName: zone.name,
|
|
2191
|
+
currentMembers: zone.members,
|
|
2192
|
+
},
|
|
2193
|
+
size: 'md',
|
|
2194
|
+
})
|
|
2195
|
+
.pipe(switchMap(memberIds => memberIds
|
|
2196
|
+
? this.dataService.settings
|
|
2197
|
+
.addMembersToZone(zone.id, memberIds)
|
|
2198
|
+
.pipe(mapTo(memberIds))
|
|
2199
|
+
: EMPTY))
|
|
2200
|
+
.subscribe({
|
|
2201
|
+
next: result => {
|
|
2202
|
+
this.notificationService.success(marker(`settings.add-countries-to-zone-success`), {
|
|
2203
|
+
countryCount: result.length,
|
|
2204
|
+
zoneName: zone.name,
|
|
2205
|
+
});
|
|
2206
|
+
},
|
|
2207
|
+
error: err => {
|
|
2208
|
+
this.notificationService.error(err);
|
|
2209
|
+
},
|
|
2210
|
+
});
|
|
2211
|
+
}
|
|
2212
|
+
removeFromZone(zone, memberIds) {
|
|
2213
|
+
this.dataService.settings.removeMembersFromZone(zone.id, memberIds).subscribe({
|
|
2214
|
+
complete: () => {
|
|
2215
|
+
this.notificationService.success(marker(`settings.remove-countries-from-zone-success`), {
|
|
2216
|
+
countryCount: memberIds.length,
|
|
2217
|
+
zoneName: zone.name,
|
|
2218
|
+
});
|
|
2219
|
+
},
|
|
2220
|
+
});
|
|
2221
|
+
}
|
|
2222
|
+
}
|
|
2223
|
+
ZoneListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: ZoneListComponent, deps: [{ token: i2.DataService }, { token: i2.NotificationService }, { token: i2.ModalService }, { token: i1.ActivatedRoute }, { token: i1.Router }, { token: i2.ServerConfigService }], target: i0.ɵɵFactoryTarget.Component });
|
|
2224
|
+
ZoneListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.3", type: ZoneListComponent, selector: "vdr-zone-list", ngImport: i0, template: "<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", styles: [".zone-wrapper{display:flex;height:calc(100% - 50px)}.zone-wrapper .zone-list{flex:1;overflow:auto;margin-top:0}.zone-wrapper .zone-list tr.active{background-color:var(--color-component-bg-200)}.zone-members{height:100%;width:0;opacity:0;visibility:hidden;overflow:auto;transition:width .3s,opacity .2s .3s,visibility 0s .3s}.zone-members.expanded{width:40vw;visibility:visible;opacity:1;padding-left:12px}.zone-members .close-button{margin:0;background:none;border:none;cursor:pointer}.zone-members ::ng-deep table.table{margin-top:0}.zone-members ::ng-deep table.table th{top:0}.zone-members .controls{display:flex;justify-content:space-between}\n"], components: [{ type: i2.ActionBarComponent, selector: "vdr-action-bar" }, { type: i2.ActionBarLeftComponent, selector: "vdr-ab-left", inputs: ["grow"] }, { type: i2.LanguageSelectorComponent, selector: "vdr-language-selector", inputs: ["currentLanguageCode", "availableLanguageCodes", "disabled"], outputs: ["languageCodeChange"] }, { type: i2.ActionBarRightComponent, selector: "vdr-ab-right", inputs: ["grow"] }, { type: i2.ActionBarItemsComponent, selector: "vdr-action-bar-items", inputs: ["locationId"] }, { type: i2.EntityInfoComponent, selector: "vdr-entity-info", inputs: ["small", "entity"] }, { type: i2.ChipComponent, selector: "vdr-chip", inputs: ["icon", "invert", "colorFrom", "colorType"], outputs: ["iconClick"] }, { type: i2.DropdownComponent, selector: "vdr-dropdown", inputs: ["manualToggle"] }, { type: i2.DropdownMenuComponent, selector: "vdr-dropdown-menu", inputs: ["vdrPosition"] }, { type: ZoneMemberListComponent, selector: "vdr-zone-member-list", inputs: ["members", "selectedMemberIds"], outputs: ["selectionChange"] }], directives: [{ type: i2.IfPermissionsDirective, selector: "[vdrIfPermissions]", inputs: ["vdrIfPermissions", "vdrIfPermissionsElse"] }, { type: i4.ClrIconCustomTag, selector: "clr-icon" }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { type: i2.DropdownTriggerDirective, selector: "[vdrDropdownTrigger]" }, { type: i2.DropdownItemDirective, selector: "[vdrDropdownItem]" }, { type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: ZoneMemberListHeaderDirective, selector: "[vdrZoneMemberListHeader]" }, { type: ZoneMemberControlsDirective, selector: "[vdrZoneMemberControls]" }], pipes: { "async": i5.AsyncPipe, "translate": i6.TranslatePipe, "hasPermission": i2.HasPermissionPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
2225
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: ZoneListComponent, decorators: [{
|
|
2226
|
+
type: Component,
|
|
2227
|
+
args: [{ selector: 'vdr-zone-list', changeDetection: ChangeDetectionStrategy.OnPush, template: "<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", styles: [".zone-wrapper{display:flex;height:calc(100% - 50px)}.zone-wrapper .zone-list{flex:1;overflow:auto;margin-top:0}.zone-wrapper .zone-list tr.active{background-color:var(--color-component-bg-200)}.zone-members{height:100%;width:0;opacity:0;visibility:hidden;overflow:auto;transition:width .3s,opacity .2s .3s,visibility 0s .3s}.zone-members.expanded{width:40vw;visibility:visible;opacity:1;padding-left:12px}.zone-members .close-button{margin:0;background:none;border:none;cursor:pointer}.zone-members ::ng-deep table.table{margin-top:0}.zone-members ::ng-deep table.table th{top:0}.zone-members .controls{display:flex;justify-content:space-between}\n"] }]
|
|
2228
|
+
}], ctorParameters: function () { return [{ type: i2.DataService }, { type: i2.NotificationService }, { type: i2.ModalService }, { type: i1.ActivatedRoute }, { type: i1.Router }, { type: i2.ServerConfigService }]; } });
|
|
2229
|
+
|
|
2230
|
+
class AdministratorResolver extends BaseEntityResolver {
|
|
2231
|
+
constructor(router, dataService) {
|
|
2232
|
+
super(router, {
|
|
2233
|
+
__typename: 'Administrator',
|
|
2234
|
+
id: '',
|
|
2235
|
+
createdAt: '',
|
|
2236
|
+
updatedAt: '',
|
|
2237
|
+
emailAddress: '',
|
|
2238
|
+
firstName: '',
|
|
2239
|
+
lastName: '',
|
|
2240
|
+
user: { roles: [] },
|
|
2241
|
+
}, id => dataService.administrator.getAdministrator(id).mapStream(data => data.administrator));
|
|
2242
|
+
}
|
|
2243
|
+
}
|
|
2244
|
+
AdministratorResolver.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: AdministratorResolver, deps: [{ token: i1.Router }, { token: i2.DataService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
2245
|
+
AdministratorResolver.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: AdministratorResolver, providedIn: 'root' });
|
|
2246
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: AdministratorResolver, decorators: [{
|
|
2247
|
+
type: Injectable,
|
|
2248
|
+
args: [{
|
|
2249
|
+
providedIn: 'root',
|
|
2250
|
+
}]
|
|
2251
|
+
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.DataService }]; } });
|
|
2252
|
+
|
|
2253
|
+
/**
|
|
2254
|
+
* Resolves the id from the path into a Customer entity.
|
|
2255
|
+
*/
|
|
2256
|
+
class ChannelResolver extends BaseEntityResolver {
|
|
2257
|
+
constructor(router, dataService) {
|
|
2258
|
+
super(router, {
|
|
2259
|
+
__typename: 'Channel',
|
|
2260
|
+
id: '',
|
|
2261
|
+
createdAt: '',
|
|
2262
|
+
updatedAt: '',
|
|
2263
|
+
code: '',
|
|
2264
|
+
token: '',
|
|
2265
|
+
pricesIncludeTax: false,
|
|
2266
|
+
currencyCode: CurrencyCode.USD,
|
|
2267
|
+
defaultLanguageCode: getDefaultUiLanguage(),
|
|
2268
|
+
defaultShippingZone: {},
|
|
2269
|
+
defaultTaxZone: {},
|
|
2270
|
+
}, id => dataService.settings.getChannel(id).mapStream(data => data.channel));
|
|
2271
|
+
}
|
|
2272
|
+
}
|
|
2273
|
+
ChannelResolver.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: ChannelResolver, deps: [{ token: i1.Router }, { token: i2.DataService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
2274
|
+
ChannelResolver.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: ChannelResolver, providedIn: 'root' });
|
|
2275
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: ChannelResolver, decorators: [{
|
|
2276
|
+
type: Injectable,
|
|
2277
|
+
args: [{
|
|
2278
|
+
providedIn: 'root',
|
|
2279
|
+
}]
|
|
2280
|
+
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.DataService }]; } });
|
|
2281
|
+
|
|
2282
|
+
/**
|
|
2283
|
+
* Resolves the id from the path into a Customer entity.
|
|
2284
|
+
*/
|
|
2285
|
+
class CountryResolver extends BaseEntityResolver {
|
|
2286
|
+
constructor(router, dataService) {
|
|
2287
|
+
super(router, {
|
|
2288
|
+
__typename: 'Country',
|
|
2289
|
+
id: '',
|
|
2290
|
+
createdAt: '',
|
|
2291
|
+
updatedAt: '',
|
|
2292
|
+
code: '',
|
|
2293
|
+
name: '',
|
|
2294
|
+
enabled: false,
|
|
2295
|
+
translations: [],
|
|
2296
|
+
}, id => dataService.settings.getCountry(id).mapStream(data => data.country));
|
|
2297
|
+
}
|
|
2298
|
+
}
|
|
2299
|
+
CountryResolver.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: CountryResolver, deps: [{ token: i1.Router }, { token: i2.DataService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
2300
|
+
CountryResolver.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: CountryResolver, providedIn: 'root' });
|
|
2301
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: CountryResolver, decorators: [{
|
|
2302
|
+
type: Injectable,
|
|
2303
|
+
args: [{
|
|
2304
|
+
providedIn: 'root',
|
|
2305
|
+
}]
|
|
2306
|
+
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.DataService }]; } });
|
|
2307
|
+
|
|
2308
|
+
/**
|
|
2309
|
+
* Resolves the global settings.
|
|
2310
|
+
*/
|
|
2311
|
+
class GlobalSettingsResolver extends BaseEntityResolver {
|
|
2312
|
+
constructor(router, dataService) {
|
|
2313
|
+
super(router,
|
|
2314
|
+
// we will never be creating a new GlobalSettings entity, so this part is not used.
|
|
2315
|
+
{}, () => dataService.settings.getGlobalSettings().mapStream(data => data.globalSettings));
|
|
2316
|
+
}
|
|
2317
|
+
}
|
|
2318
|
+
GlobalSettingsResolver.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: GlobalSettingsResolver, deps: [{ token: i1.Router }, { token: i2.DataService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
2319
|
+
GlobalSettingsResolver.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: GlobalSettingsResolver, providedIn: 'root' });
|
|
2320
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: GlobalSettingsResolver, decorators: [{
|
|
2321
|
+
type: Injectable,
|
|
2322
|
+
args: [{
|
|
2323
|
+
providedIn: 'root',
|
|
2324
|
+
}]
|
|
2325
|
+
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.DataService }]; } });
|
|
2326
|
+
|
|
2327
|
+
/**
|
|
2328
|
+
* Resolves the id from the path into a Customer entity.
|
|
2329
|
+
*/
|
|
2330
|
+
class PaymentMethodResolver extends BaseEntityResolver {
|
|
2331
|
+
constructor(router, dataService) {
|
|
2332
|
+
super(router, {
|
|
2333
|
+
__typename: 'PaymentMethod',
|
|
2334
|
+
id: '',
|
|
2335
|
+
createdAt: '',
|
|
2336
|
+
updatedAt: '',
|
|
2337
|
+
name: '',
|
|
2338
|
+
code: '',
|
|
2339
|
+
description: '',
|
|
2340
|
+
enabled: true,
|
|
2341
|
+
checker: undefined,
|
|
2342
|
+
handler: undefined,
|
|
2343
|
+
}, id => dataService.settings.getPaymentMethod(id).mapStream(data => data.paymentMethod));
|
|
2344
|
+
}
|
|
2345
|
+
}
|
|
2346
|
+
PaymentMethodResolver.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: PaymentMethodResolver, deps: [{ token: i1.Router }, { token: i2.DataService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
2347
|
+
PaymentMethodResolver.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: PaymentMethodResolver, providedIn: 'root' });
|
|
2348
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: PaymentMethodResolver, decorators: [{
|
|
2349
|
+
type: Injectable,
|
|
2350
|
+
args: [{
|
|
2351
|
+
providedIn: 'root',
|
|
2352
|
+
}]
|
|
2353
|
+
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.DataService }]; } });
|
|
2354
|
+
|
|
2355
|
+
class ProfileResolver extends BaseEntityResolver {
|
|
2356
|
+
constructor(router, dataService) {
|
|
2357
|
+
super(router, {
|
|
2358
|
+
__typename: 'Administrator',
|
|
2359
|
+
id: '',
|
|
2360
|
+
createdAt: '',
|
|
2361
|
+
updatedAt: '',
|
|
2362
|
+
emailAddress: '',
|
|
2363
|
+
firstName: '',
|
|
2364
|
+
lastName: '',
|
|
2365
|
+
user: { roles: [] },
|
|
2366
|
+
}, id => dataService.administrator
|
|
2367
|
+
.getActiveAdministrator()
|
|
2368
|
+
.mapStream(data => data.activeAdministrator));
|
|
2369
|
+
}
|
|
2370
|
+
}
|
|
2371
|
+
ProfileResolver.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: ProfileResolver, deps: [{ token: i1.Router }, { token: i2.DataService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
2372
|
+
ProfileResolver.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: ProfileResolver, providedIn: 'root' });
|
|
2373
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: ProfileResolver, decorators: [{
|
|
2374
|
+
type: Injectable,
|
|
2375
|
+
args: [{
|
|
2376
|
+
providedIn: 'root',
|
|
2377
|
+
}]
|
|
2378
|
+
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.DataService }]; } });
|
|
2379
|
+
|
|
2380
|
+
class RoleResolver extends BaseEntityResolver {
|
|
2381
|
+
constructor(router, dataService) {
|
|
2382
|
+
super(router, {
|
|
2383
|
+
__typename: 'Role',
|
|
2384
|
+
id: '',
|
|
2385
|
+
createdAt: '',
|
|
2386
|
+
updatedAt: '',
|
|
2387
|
+
code: '',
|
|
2388
|
+
description: '',
|
|
2389
|
+
permissions: [],
|
|
2390
|
+
channels: [],
|
|
2391
|
+
}, id => dataService.administrator.getRole(id).mapStream(data => data.role));
|
|
2392
|
+
}
|
|
2393
|
+
}
|
|
2394
|
+
RoleResolver.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: RoleResolver, deps: [{ token: i1.Router }, { token: i2.DataService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
2395
|
+
RoleResolver.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: RoleResolver, providedIn: 'root' });
|
|
2396
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: RoleResolver, decorators: [{
|
|
2397
|
+
type: Injectable,
|
|
2398
|
+
args: [{
|
|
2399
|
+
providedIn: 'root',
|
|
2400
|
+
}]
|
|
2401
|
+
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.DataService }]; } });
|
|
2402
|
+
|
|
2403
|
+
/**
|
|
2404
|
+
* Resolves the id from the path into a Customer entity.
|
|
2405
|
+
*/
|
|
2406
|
+
class ShippingMethodResolver extends BaseEntityResolver {
|
|
2407
|
+
constructor(router, dataService) {
|
|
2408
|
+
super(router, {
|
|
2409
|
+
__typename: 'ShippingMethod',
|
|
2410
|
+
createdAt: '',
|
|
2411
|
+
updatedAt: '',
|
|
2412
|
+
id: '',
|
|
2413
|
+
code: '',
|
|
2414
|
+
name: '',
|
|
2415
|
+
description: '',
|
|
2416
|
+
fulfillmentHandlerCode: undefined,
|
|
2417
|
+
checker: undefined,
|
|
2418
|
+
calculator: undefined,
|
|
2419
|
+
translations: [],
|
|
2420
|
+
}, id => dataService.shippingMethod.getShippingMethod(id).mapStream(data => data.shippingMethod));
|
|
2421
|
+
}
|
|
2422
|
+
}
|
|
2423
|
+
ShippingMethodResolver.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: ShippingMethodResolver, deps: [{ token: i1.Router }, { token: i2.DataService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
2424
|
+
ShippingMethodResolver.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: ShippingMethodResolver, providedIn: 'root' });
|
|
2425
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: ShippingMethodResolver, decorators: [{
|
|
2426
|
+
type: Injectable,
|
|
2427
|
+
args: [{
|
|
2428
|
+
providedIn: 'root',
|
|
2429
|
+
}]
|
|
2430
|
+
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.DataService }]; } });
|
|
2431
|
+
|
|
2432
|
+
/**
|
|
2433
|
+
* Resolves the id from the path into a Customer entity.
|
|
2434
|
+
*/
|
|
2435
|
+
class TaxCategoryResolver extends BaseEntityResolver {
|
|
2436
|
+
constructor(router, dataService) {
|
|
2437
|
+
super(router, {
|
|
2438
|
+
__typename: 'TaxCategory',
|
|
2439
|
+
id: '',
|
|
2440
|
+
createdAt: '',
|
|
2441
|
+
updatedAt: '',
|
|
2442
|
+
name: '',
|
|
2443
|
+
isDefault: false,
|
|
2444
|
+
}, id => dataService.settings.getTaxCategory(id).mapStream(data => data.taxCategory));
|
|
2445
|
+
}
|
|
2446
|
+
}
|
|
2447
|
+
TaxCategoryResolver.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: TaxCategoryResolver, deps: [{ token: i1.Router }, { token: i2.DataService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
2448
|
+
TaxCategoryResolver.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: TaxCategoryResolver, providedIn: 'root' });
|
|
2449
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: TaxCategoryResolver, decorators: [{
|
|
2450
|
+
type: Injectable,
|
|
2451
|
+
args: [{
|
|
2452
|
+
providedIn: 'root',
|
|
2453
|
+
}]
|
|
2454
|
+
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.DataService }]; } });
|
|
2455
|
+
|
|
2456
|
+
/**
|
|
2457
|
+
* Resolves the id from the path into a Customer entity.
|
|
2458
|
+
*/
|
|
2459
|
+
class TaxRateResolver extends BaseEntityResolver {
|
|
2460
|
+
constructor(router, dataService) {
|
|
2461
|
+
super(router, {
|
|
2462
|
+
__typename: 'TaxRate',
|
|
2463
|
+
id: '',
|
|
2464
|
+
createdAt: '',
|
|
2465
|
+
updatedAt: '',
|
|
2466
|
+
name: '',
|
|
2467
|
+
value: 0,
|
|
2468
|
+
enabled: true,
|
|
2469
|
+
category: {},
|
|
2470
|
+
zone: {},
|
|
2471
|
+
customerGroup: null,
|
|
2472
|
+
}, id => dataService.settings.getTaxRate(id).mapStream(data => data.taxRate));
|
|
2473
|
+
}
|
|
2474
|
+
}
|
|
2475
|
+
TaxRateResolver.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: TaxRateResolver, deps: [{ token: i1.Router }, { token: i2.DataService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
2476
|
+
TaxRateResolver.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: TaxRateResolver, providedIn: 'root' });
|
|
2477
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: TaxRateResolver, decorators: [{
|
|
2478
|
+
type: Injectable,
|
|
2479
|
+
args: [{
|
|
2480
|
+
providedIn: 'root',
|
|
2481
|
+
}]
|
|
2482
|
+
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.DataService }]; } });
|
|
2483
|
+
|
|
2484
|
+
const settingsRoutes = [
|
|
2485
|
+
{
|
|
2486
|
+
path: 'profile',
|
|
2487
|
+
component: ProfileComponent,
|
|
2488
|
+
resolve: createResolveData(ProfileResolver),
|
|
2489
|
+
canDeactivate: [CanDeactivateDetailGuard],
|
|
2490
|
+
data: {
|
|
2491
|
+
breadcrumb: marker('breadcrumb.profile'),
|
|
2492
|
+
},
|
|
2493
|
+
},
|
|
2494
|
+
{
|
|
2495
|
+
path: 'administrators',
|
|
2496
|
+
component: AdministratorListComponent,
|
|
2497
|
+
data: {
|
|
2498
|
+
breadcrumb: marker('breadcrumb.administrators'),
|
|
2499
|
+
},
|
|
2500
|
+
},
|
|
2501
|
+
{
|
|
2502
|
+
path: 'administrators/:id',
|
|
2503
|
+
component: AdminDetailComponent,
|
|
2504
|
+
resolve: createResolveData(AdministratorResolver),
|
|
2505
|
+
canDeactivate: [CanDeactivateDetailGuard],
|
|
2506
|
+
data: { breadcrumb: administratorBreadcrumb },
|
|
2507
|
+
},
|
|
2508
|
+
{
|
|
2509
|
+
path: 'channels',
|
|
2510
|
+
component: ChannelListComponent,
|
|
2511
|
+
data: {
|
|
2512
|
+
breadcrumb: marker('breadcrumb.channels'),
|
|
2513
|
+
},
|
|
2514
|
+
},
|
|
2515
|
+
{
|
|
2516
|
+
path: 'channels/:id',
|
|
2517
|
+
component: ChannelDetailComponent,
|
|
2518
|
+
resolve: createResolveData(ChannelResolver),
|
|
2519
|
+
canDeactivate: [CanDeactivateDetailGuard],
|
|
2520
|
+
data: { breadcrumb: channelBreadcrumb },
|
|
2521
|
+
},
|
|
2522
|
+
{
|
|
2523
|
+
path: 'roles',
|
|
2524
|
+
component: RoleListComponent,
|
|
2525
|
+
data: {
|
|
2526
|
+
breadcrumb: marker('breadcrumb.roles'),
|
|
2527
|
+
},
|
|
2528
|
+
},
|
|
2529
|
+
{
|
|
2530
|
+
path: 'roles/:id',
|
|
2531
|
+
component: RoleDetailComponent,
|
|
2532
|
+
resolve: createResolveData(RoleResolver),
|
|
2533
|
+
canDeactivate: [CanDeactivateDetailGuard],
|
|
2534
|
+
data: { breadcrumb: roleBreadcrumb },
|
|
2535
|
+
},
|
|
2536
|
+
{
|
|
2537
|
+
path: 'tax-categories',
|
|
2538
|
+
component: TaxCategoryListComponent,
|
|
2539
|
+
data: {
|
|
2540
|
+
breadcrumb: marker('breadcrumb.tax-categories'),
|
|
2541
|
+
},
|
|
2542
|
+
},
|
|
2543
|
+
{
|
|
2544
|
+
path: 'tax-categories/:id',
|
|
2545
|
+
component: TaxCategoryDetailComponent,
|
|
2546
|
+
resolve: createResolveData(TaxCategoryResolver),
|
|
2547
|
+
canDeactivate: [CanDeactivateDetailGuard],
|
|
2548
|
+
data: {
|
|
2549
|
+
breadcrumb: taxCategoryBreadcrumb,
|
|
2550
|
+
},
|
|
2551
|
+
},
|
|
2552
|
+
{
|
|
2553
|
+
path: 'tax-rates',
|
|
2554
|
+
component: TaxRateListComponent,
|
|
2555
|
+
data: {
|
|
2556
|
+
breadcrumb: marker('breadcrumb.tax-rates'),
|
|
2557
|
+
},
|
|
2558
|
+
},
|
|
2559
|
+
{
|
|
2560
|
+
path: 'tax-rates/:id',
|
|
2561
|
+
component: TaxRateDetailComponent,
|
|
2562
|
+
resolve: createResolveData(TaxRateResolver),
|
|
2563
|
+
canDeactivate: [CanDeactivateDetailGuard],
|
|
2564
|
+
data: {
|
|
2565
|
+
breadcrumb: taxRateBreadcrumb,
|
|
2566
|
+
},
|
|
2567
|
+
},
|
|
2568
|
+
{
|
|
2569
|
+
path: 'countries',
|
|
2570
|
+
component: CountryListComponent,
|
|
2571
|
+
data: {
|
|
2572
|
+
breadcrumb: marker('breadcrumb.countries'),
|
|
2573
|
+
},
|
|
2574
|
+
},
|
|
2575
|
+
{
|
|
2576
|
+
path: 'countries/:id',
|
|
2577
|
+
component: CountryDetailComponent,
|
|
2578
|
+
resolve: createResolveData(CountryResolver),
|
|
2579
|
+
canDeactivate: [CanDeactivateDetailGuard],
|
|
2580
|
+
data: {
|
|
2581
|
+
breadcrumb: countryBreadcrumb,
|
|
2582
|
+
},
|
|
2583
|
+
},
|
|
2584
|
+
{
|
|
2585
|
+
path: 'zones',
|
|
2586
|
+
component: ZoneListComponent,
|
|
2587
|
+
data: {
|
|
2588
|
+
breadcrumb: marker('breadcrumb.zones'),
|
|
2589
|
+
},
|
|
2590
|
+
},
|
|
2591
|
+
{
|
|
2592
|
+
path: 'shipping-methods',
|
|
2593
|
+
component: ShippingMethodListComponent,
|
|
2594
|
+
data: {
|
|
2595
|
+
breadcrumb: marker('breadcrumb.shipping-methods'),
|
|
2596
|
+
},
|
|
2597
|
+
},
|
|
2598
|
+
{
|
|
2599
|
+
path: 'shipping-methods/:id',
|
|
2600
|
+
component: ShippingMethodDetailComponent,
|
|
2601
|
+
resolve: createResolveData(ShippingMethodResolver),
|
|
2602
|
+
canDeactivate: [CanDeactivateDetailGuard],
|
|
2603
|
+
data: {
|
|
2604
|
+
breadcrumb: shippingMethodBreadcrumb,
|
|
2605
|
+
},
|
|
2606
|
+
},
|
|
2607
|
+
{
|
|
2608
|
+
path: 'payment-methods',
|
|
2609
|
+
component: PaymentMethodListComponent,
|
|
2610
|
+
data: {
|
|
2611
|
+
breadcrumb: marker('breadcrumb.payment-methods'),
|
|
2612
|
+
},
|
|
2613
|
+
},
|
|
2614
|
+
{
|
|
2615
|
+
path: 'payment-methods/:id',
|
|
2616
|
+
component: PaymentMethodDetailComponent,
|
|
2617
|
+
resolve: createResolveData(PaymentMethodResolver),
|
|
2618
|
+
canDeactivate: [CanDeactivateDetailGuard],
|
|
2619
|
+
data: {
|
|
2620
|
+
breadcrumb: paymentMethodBreadcrumb,
|
|
2621
|
+
},
|
|
2622
|
+
},
|
|
2623
|
+
{
|
|
2624
|
+
path: 'global-settings',
|
|
2625
|
+
component: GlobalSettingsComponent,
|
|
2626
|
+
resolve: createResolveData(GlobalSettingsResolver),
|
|
2627
|
+
canDeactivate: [CanDeactivateDetailGuard],
|
|
2628
|
+
data: {
|
|
2629
|
+
breadcrumb: marker('breadcrumb.global-settings'),
|
|
2630
|
+
},
|
|
2631
|
+
},
|
|
2632
|
+
];
|
|
2633
|
+
function administratorBreadcrumb(data, params) {
|
|
2634
|
+
return detailBreadcrumb({
|
|
2635
|
+
entity: data.entity,
|
|
2636
|
+
id: params.id,
|
|
2637
|
+
breadcrumbKey: 'breadcrumb.administrators',
|
|
2638
|
+
getName: admin => `${admin.firstName} ${admin.lastName}`,
|
|
2639
|
+
route: 'administrators',
|
|
2640
|
+
});
|
|
2641
|
+
}
|
|
2642
|
+
function channelBreadcrumb(data, params) {
|
|
2643
|
+
return detailBreadcrumb({
|
|
2644
|
+
entity: data.entity,
|
|
2645
|
+
id: params.id,
|
|
2646
|
+
breadcrumbKey: 'breadcrumb.channels',
|
|
2647
|
+
getName: channel => channel.code,
|
|
2648
|
+
route: 'channels',
|
|
2649
|
+
});
|
|
2650
|
+
}
|
|
2651
|
+
function roleBreadcrumb(data, params) {
|
|
2652
|
+
return detailBreadcrumb({
|
|
2653
|
+
entity: data.entity,
|
|
2654
|
+
id: params.id,
|
|
2655
|
+
breadcrumbKey: 'breadcrumb.roles',
|
|
2656
|
+
getName: role => role.description,
|
|
2657
|
+
route: 'roles',
|
|
2658
|
+
});
|
|
2659
|
+
}
|
|
2660
|
+
function taxCategoryBreadcrumb(data, params) {
|
|
2661
|
+
return detailBreadcrumb({
|
|
2662
|
+
entity: data.entity,
|
|
2663
|
+
id: params.id,
|
|
2664
|
+
breadcrumbKey: 'breadcrumb.tax-categories',
|
|
2665
|
+
getName: category => category.name,
|
|
2666
|
+
route: 'tax-categories',
|
|
2667
|
+
});
|
|
2668
|
+
}
|
|
2669
|
+
function taxRateBreadcrumb(data, params) {
|
|
2670
|
+
return detailBreadcrumb({
|
|
2671
|
+
entity: data.entity,
|
|
2672
|
+
id: params.id,
|
|
2673
|
+
breadcrumbKey: 'breadcrumb.tax-rates',
|
|
2674
|
+
getName: category => category.name,
|
|
2675
|
+
route: 'tax-rates',
|
|
2676
|
+
});
|
|
2677
|
+
}
|
|
2678
|
+
function countryBreadcrumb(data, params) {
|
|
2679
|
+
return detailBreadcrumb({
|
|
2680
|
+
entity: data.entity,
|
|
2681
|
+
id: params.id,
|
|
2682
|
+
breadcrumbKey: 'breadcrumb.countries',
|
|
2683
|
+
getName: promotion => promotion.name,
|
|
2684
|
+
route: 'countries',
|
|
2685
|
+
});
|
|
2686
|
+
}
|
|
2687
|
+
function shippingMethodBreadcrumb(data, params) {
|
|
2688
|
+
return detailBreadcrumb({
|
|
2689
|
+
entity: data.entity,
|
|
2690
|
+
id: params.id,
|
|
2691
|
+
breadcrumbKey: 'breadcrumb.shipping-methods',
|
|
2692
|
+
getName: method => method.name,
|
|
2693
|
+
route: 'shipping-methods',
|
|
2694
|
+
});
|
|
2695
|
+
}
|
|
2696
|
+
function paymentMethodBreadcrumb(data, params) {
|
|
2697
|
+
return detailBreadcrumb({
|
|
2698
|
+
entity: data.entity,
|
|
2699
|
+
id: params.id,
|
|
2700
|
+
breadcrumbKey: 'breadcrumb.payment-methods',
|
|
2701
|
+
getName: method => method.code,
|
|
2702
|
+
route: 'payment-methods',
|
|
2703
|
+
});
|
|
2704
|
+
}
|
|
2705
|
+
|
|
2706
|
+
class SettingsModule {
|
|
2707
|
+
}
|
|
2708
|
+
SettingsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: SettingsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
2709
|
+
SettingsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: SettingsModule, declarations: [TaxCategoryListComponent,
|
|
2710
|
+
TaxCategoryDetailComponent,
|
|
2711
|
+
AdministratorListComponent,
|
|
2712
|
+
RoleListComponent,
|
|
2713
|
+
RoleDetailComponent,
|
|
2714
|
+
AdminDetailComponent,
|
|
2715
|
+
PermissionGridComponent,
|
|
2716
|
+
CountryListComponent,
|
|
2717
|
+
CountryDetailComponent,
|
|
2718
|
+
TaxRateListComponent,
|
|
2719
|
+
TaxRateDetailComponent,
|
|
2720
|
+
ChannelListComponent,
|
|
2721
|
+
ChannelDetailComponent,
|
|
2722
|
+
ShippingMethodListComponent,
|
|
2723
|
+
ShippingMethodDetailComponent,
|
|
2724
|
+
PaymentMethodListComponent,
|
|
2725
|
+
PaymentMethodDetailComponent,
|
|
2726
|
+
GlobalSettingsComponent,
|
|
2727
|
+
TestOrderBuilderComponent,
|
|
2728
|
+
TestAddressFormComponent,
|
|
2729
|
+
ShippingMethodTestResultComponent,
|
|
2730
|
+
ShippingEligibilityTestResultComponent,
|
|
2731
|
+
ZoneListComponent,
|
|
2732
|
+
AddCountryToZoneDialogComponent,
|
|
2733
|
+
ZoneMemberListComponent,
|
|
2734
|
+
ZoneMemberListHeaderDirective,
|
|
2735
|
+
ZoneMemberControlsDirective,
|
|
2736
|
+
ZoneDetailDialogComponent,
|
|
2737
|
+
ProfileComponent], imports: [SharedModule, i1.RouterModule] });
|
|
2738
|
+
SettingsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: SettingsModule, imports: [[SharedModule, RouterModule.forChild(settingsRoutes)]] });
|
|
2739
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: SettingsModule, decorators: [{
|
|
2740
|
+
type: NgModule,
|
|
2741
|
+
args: [{
|
|
2742
|
+
imports: [SharedModule, RouterModule.forChild(settingsRoutes)],
|
|
2743
|
+
declarations: [
|
|
2744
|
+
TaxCategoryListComponent,
|
|
2745
|
+
TaxCategoryDetailComponent,
|
|
2746
|
+
AdministratorListComponent,
|
|
2747
|
+
RoleListComponent,
|
|
2748
|
+
RoleDetailComponent,
|
|
2749
|
+
AdminDetailComponent,
|
|
2750
|
+
PermissionGridComponent,
|
|
2751
|
+
CountryListComponent,
|
|
2752
|
+
CountryDetailComponent,
|
|
2753
|
+
TaxRateListComponent,
|
|
2754
|
+
TaxRateDetailComponent,
|
|
2755
|
+
ChannelListComponent,
|
|
2756
|
+
ChannelDetailComponent,
|
|
2757
|
+
ShippingMethodListComponent,
|
|
2758
|
+
ShippingMethodDetailComponent,
|
|
2759
|
+
PaymentMethodListComponent,
|
|
2760
|
+
PaymentMethodDetailComponent,
|
|
2761
|
+
GlobalSettingsComponent,
|
|
2762
|
+
TestOrderBuilderComponent,
|
|
2763
|
+
TestAddressFormComponent,
|
|
2764
|
+
ShippingMethodTestResultComponent,
|
|
2765
|
+
ShippingEligibilityTestResultComponent,
|
|
2766
|
+
ZoneListComponent,
|
|
2767
|
+
AddCountryToZoneDialogComponent,
|
|
2768
|
+
ZoneMemberListComponent,
|
|
2769
|
+
ZoneMemberListHeaderDirective,
|
|
2770
|
+
ZoneMemberControlsDirective,
|
|
2771
|
+
ZoneDetailDialogComponent,
|
|
2772
|
+
ProfileComponent,
|
|
2773
|
+
],
|
|
2774
|
+
}]
|
|
2775
|
+
}] });
|
|
2776
|
+
|
|
2777
|
+
// This file was generated by the build-public-api.ts script
|
|
2778
|
+
|
|
2779
|
+
/**
|
|
2780
|
+
* Generated bundle index. Do not edit.
|
|
2781
|
+
*/
|
|
2782
|
+
|
|
2783
|
+
export { AddCountryToZoneDialogComponent, AdminDetailComponent, AdministratorListComponent, AdministratorResolver, ChannelDetailComponent, ChannelListComponent, ChannelResolver, CountryDetailComponent, CountryListComponent, CountryResolver, GlobalSettingsComponent, GlobalSettingsResolver, PaymentMethodDetailComponent, PaymentMethodListComponent, PaymentMethodResolver, PermissionGridComponent, ProfileComponent, ProfileResolver, RoleDetailComponent, RoleListComponent, RoleResolver, SettingsModule, ShippingEligibilityTestResultComponent, ShippingMethodDetailComponent, ShippingMethodListComponent, ShippingMethodResolver, ShippingMethodTestResultComponent, TaxCategoryDetailComponent, TaxCategoryListComponent, TaxCategoryResolver, TaxRateDetailComponent, TaxRateListComponent, TaxRateResolver, TestAddressFormComponent, TestOrderBuilderComponent, ZoneDetailDialogComponent, ZoneListComponent, ZoneMemberControlsDirective, ZoneMemberListComponent, ZoneMemberListHeaderDirective, administratorBreadcrumb, channelBreadcrumb, countryBreadcrumb, paymentMethodBreadcrumb, roleBreadcrumb, settingsRoutes, shippingMethodBreadcrumb, taxCategoryBreadcrumb, taxRateBreadcrumb };
|
|
2784
|
+
//# sourceMappingURL=vendure-admin-ui-settings.mjs.map
|