@vendure/admin-ui 2.2.0-next.1 → 2.2.0-next.3
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/components/product-variant-list/product-variant-list-bulk-actions.d.ts +1 -0
- package/catalog/components/product-variant-list/product-variant-list.component.d.ts +1 -1
- package/core/common/base-list.component.d.ts +1 -1
- package/core/common/component-registry-types.d.ts +1 -1
- package/core/common/generated-types.d.ts +174 -4817
- package/core/common/version.d.ts +1 -1
- package/core/data/server-config.d.ts +4 -3
- package/core/data/utils/add-custom-fields.d.ts +2 -2
- package/core/extension/register-route-component.d.ts +1 -1
- package/core/shared/components/custom-field-control/custom-field-control.component.d.ts +0 -2
- package/core/shared/components/form-field/form-field-control.directive.d.ts +1 -1
- package/core/shared/components/form-field/form-field.component.d.ts +3 -2
- package/core/shared/components/order-state-label/order-state-label.component.d.ts +1 -1
- package/core/shared/components/page-title/page-title.component.d.ts +2 -3
- package/core/shared/dynamic-form-inputs/default-form-inputs.d.ts +1 -1
- package/esm2022/catalog/catalog.module.mjs +3 -2
- package/esm2022/catalog/components/assign-products-to-channel-dialog/assign-products-to-channel-dialog.component.mjs +1 -1
- package/esm2022/catalog/components/collection-data-table/collection-data-table.component.mjs +1 -1
- package/esm2022/catalog/components/collection-detail/collection-detail.component.mjs +1 -1
- package/esm2022/catalog/components/collection-list/collection-list.component.mjs +3 -3
- package/esm2022/catalog/components/collection-tree/collection-tree-node.component.mjs +2 -2
- package/esm2022/catalog/components/create-facet-value-dialog/create-facet-value-dialog.component.mjs +1 -1
- package/esm2022/catalog/components/create-product-option-group-dialog/create-product-option-group-dialog.component.mjs +1 -1
- package/esm2022/catalog/components/create-product-variant-dialog/create-product-variant-dialog.component.mjs +1 -1
- package/esm2022/catalog/components/facet-detail/facet-detail.component.mjs +1 -1
- package/esm2022/catalog/components/generate-product-variants/generate-product-variants.component.mjs +1 -1
- package/esm2022/catalog/components/option-value-input/option-value-input.component.mjs +1 -1
- package/esm2022/catalog/components/product-detail/product-detail.component.mjs +1 -1
- package/esm2022/catalog/components/product-list/product-list-bulk-actions.mjs +1 -2
- package/esm2022/catalog/components/product-options-editor/product-options-editor.component.mjs +1 -1
- package/esm2022/catalog/components/product-variant-detail/product-variant-detail.component.mjs +1 -1
- package/esm2022/catalog/components/product-variant-list/product-variant-list-bulk-actions.mjs +33 -2
- package/esm2022/catalog/components/product-variants-editor/product-variants-editor.component.mjs +1 -1
- package/esm2022/catalog/components/product-variants-table/product-variants-table.component.mjs +1 -1
- package/esm2022/catalog/components/update-product-option-dialog/update-product-option-dialog.component.mjs +1 -1
- package/esm2022/core/common/base-list.component.mjs +1 -1
- package/esm2022/core/common/component-registry-types.mjs +1 -1
- package/esm2022/core/common/generated-types.mjs +23 -19
- package/esm2022/core/common/introspection-result.mjs +4 -1
- package/esm2022/core/common/version.mjs +2 -2
- package/esm2022/core/components/channel-switcher/channel-switcher.component.mjs +1 -1
- package/esm2022/core/components/ui-language-switcher-dialog/ui-language-switcher-dialog.component.mjs +1 -1
- package/esm2022/core/core.module.mjs +2 -2
- package/esm2022/core/data/definitions/order-definitions.mjs +5 -1
- package/esm2022/core/data/definitions/settings-definitions.mjs +4 -81
- package/esm2022/core/data/providers/base-data.service.mjs +2 -2
- package/esm2022/core/data/server-config.mjs +6 -2
- package/esm2022/core/data/utils/add-custom-fields.mjs +2 -2
- package/esm2022/core/shared/components/address-form/address-form.component.mjs +1 -1
- package/esm2022/core/shared/components/affixed-input/percentage-suffix-input.component.mjs +1 -1
- package/esm2022/core/shared/components/asset-file-input/asset-file-input.component.mjs +1 -1
- package/esm2022/core/shared/components/asset-preview/asset-preview.component.mjs +1 -1
- package/esm2022/core/shared/components/assign-to-channel-dialog/assign-to-channel-dialog.component.mjs +1 -1
- package/esm2022/core/shared/components/currency-input/currency-input.component.mjs +2 -2
- package/esm2022/core/shared/components/custom-field-control/custom-field-control.component.mjs +3 -6
- package/esm2022/core/shared/components/data-table/data-table.component.mjs +1 -1
- package/esm2022/core/shared/components/data-table-2/data-table-custom-field-column.component.mjs +4 -1
- package/esm2022/core/shared/components/data-table-2/data-table-search.component.mjs +1 -1
- package/esm2022/core/shared/components/data-table-2/data-table2.component.mjs +1 -1
- package/esm2022/core/shared/components/data-table-column-picker/data-table-column-picker.component.mjs +1 -1
- package/esm2022/core/shared/components/data-table-filter-presets/add-filter-preset-button.component.mjs +1 -1
- package/esm2022/core/shared/components/data-table-filter-presets/rename-filter-preset-dialog.component.mjs +1 -1
- package/esm2022/core/shared/components/data-table-filters/data-table-filters.component.mjs +1 -1
- package/esm2022/core/shared/components/datetime-picker/datetime-picker.component.mjs +1 -1
- package/esm2022/core/shared/components/edit-note-dialog/edit-note-dialog.component.mjs +1 -1
- package/esm2022/core/shared/components/form-field/form-field-control.directive.mjs +3 -3
- package/esm2022/core/shared/components/form-field/form-field.component.mjs +8 -4
- package/esm2022/core/shared/components/manage-tags-dialog/manage-tags-dialog.component.mjs +1 -1
- package/esm2022/core/shared/components/page-title/page-title.component.mjs +5 -6
- package/esm2022/core/shared/components/radio-card/radio-card.component.mjs +1 -1
- package/esm2022/core/shared/components/rich-text-editor/external-image-dialog/external-image-dialog.component.mjs +1 -1
- package/esm2022/core/shared/components/rich-text-editor/link-dialog/link-dialog.component.mjs +1 -1
- package/esm2022/core/shared/components/timeline-entry/timeline-entry.component.mjs +2 -2
- package/esm2022/core/shared/dynamic-form-inputs/boolean-form-input/boolean-form-input.component.mjs +1 -1
- package/esm2022/core/shared/dynamic-form-inputs/currency-form-input/currency-form-input.component.mjs +4 -3
- package/esm2022/core/shared/dynamic-form-inputs/number-form-input/number-form-input.component.mjs +1 -1
- package/esm2022/core/shared/dynamic-form-inputs/password-form-input/password-form-input.component.mjs +1 -1
- package/esm2022/core/shared/dynamic-form-inputs/relation-form-input/generic/relation-generic-input.component.mjs +1 -1
- package/esm2022/core/shared/dynamic-form-inputs/select-form-input/select-form-input.component.mjs +1 -1
- package/esm2022/core/shared/dynamic-form-inputs/text-form-input/text-form-input.component.mjs +1 -1
- package/esm2022/core/shared/dynamic-form-inputs/textarea-form-input/textarea-form-input.component.mjs +1 -1
- package/esm2022/customer/components/customer-detail/customer-detail.component.mjs +1 -1
- package/esm2022/customer/components/customer-group-detail/customer-group-detail.component.mjs +1 -1
- package/esm2022/customer/components/customer-group-detail-dialog/customer-group-detail-dialog.component.mjs +1 -1
- package/esm2022/customer/components/customer-history/customer-history.component.mjs +3 -3
- package/esm2022/login/components/login/login.component.mjs +1 -1
- package/esm2022/marketing/components/promotion-detail/promotion-detail.component.mjs +1 -1
- package/esm2022/order/common/get-refundable-payments.mjs +19 -0
- package/esm2022/order/common/modify-order-types.mjs +2 -0
- package/esm2022/order/components/add-manual-payment-dialog/add-manual-payment-dialog.component.mjs +1 -1
- package/esm2022/order/components/cancel-order-dialog/cancel-order-dialog.component.mjs +1 -1
- package/esm2022/order/components/coupon-code-selector/coupon-code-selector.component.mjs +3 -3
- package/esm2022/order/components/draft-order-variant-selector/draft-order-variant-selector.component.mjs +1 -1
- package/esm2022/order/components/fulfill-order-dialog/fulfill-order-dialog.component.mjs +1 -1
- package/esm2022/order/components/modification-detail/modification-detail.component.mjs +17 -6
- package/esm2022/order/components/order-data-table/order-data-table.component.mjs +1 -1
- package/esm2022/order/components/order-detail/order-detail.component.mjs +77 -29
- package/esm2022/order/components/order-editor/order-editor.component.mjs +201 -98
- package/esm2022/order/components/order-edits-preview-dialog/order-edits-preview-dialog.component.mjs +45 -7
- package/esm2022/order/components/order-history/order-history.component.mjs +22 -6
- package/esm2022/order/components/order-modification-summary/order-modification-summary.component.mjs +76 -0
- package/esm2022/order/components/order-payment-card/order-payment-card.component.mjs +3 -3
- package/esm2022/order/components/order-state-select-dialog/order-state-select-dialog.component.mjs +1 -1
- package/esm2022/order/components/order-table/order-table.component.mjs +3 -3
- package/esm2022/order/components/payment-for-refund-selector/payment-for-refund-selector.component.mjs +24 -0
- package/esm2022/order/components/payment-state-label/payment-state-label.component.mjs +2 -2
- package/esm2022/order/components/refund-detail/refund-detail.component.mjs +18 -0
- package/esm2022/order/components/refund-order-dialog/refund-order-dialog.component.mjs +99 -57
- package/esm2022/order/components/refund-state-label/refund-state-label.component.mjs +2 -2
- package/esm2022/order/components/select-customer-dialog/select-customer-dialog.component.mjs +14 -8
- package/esm2022/order/components/settle-refund-dialog/settle-refund-dialog.component.mjs +1 -1
- package/esm2022/order/components/simple-item-list/simple-item-list.component.mjs +3 -3
- package/esm2022/order/order.module.mjs +32 -2
- package/esm2022/order/order.routes.mjs +7 -53
- package/esm2022/order/providers/routing/order.guard.mjs +22 -2
- package/esm2022/order/public_api.mjs +6 -2
- package/esm2022/react/components/react-custom-column.component.mjs +3 -3
- package/esm2022/react/components/react-custom-detail.component.mjs +3 -3
- package/esm2022/react/components/react-form-input.component.mjs +3 -3
- package/esm2022/react/components/react-route.component.mjs +3 -3
- package/esm2022/react/react-hooks/use-form-control.mjs +1 -1
- package/esm2022/settings/components/admin-detail/admin-detail.component.mjs +1 -1
- package/esm2022/settings/components/channel-detail/channel-detail.component.mjs +1 -1
- package/esm2022/settings/components/country-detail/country-detail.component.mjs +1 -1
- package/esm2022/settings/components/global-settings/global-settings.component.mjs +1 -1
- package/esm2022/settings/components/payment-method-detail/payment-method-detail.component.mjs +1 -1
- package/esm2022/settings/components/profile/profile.component.mjs +1 -1
- package/esm2022/settings/components/role-detail/role-detail.component.mjs +1 -1
- package/esm2022/settings/components/seller-detail/seller-detail.component.mjs +1 -1
- package/esm2022/settings/components/shipping-method-detail/shipping-method-detail.component.mjs +1 -1
- package/esm2022/settings/components/stock-location-detail/stock-location-detail.component.mjs +1 -1
- package/esm2022/settings/components/tax-category-detail/tax-category-detail.component.mjs +1 -1
- package/esm2022/settings/components/tax-rate-detail/tax-rate-detail.component.mjs +1 -1
- package/esm2022/settings/components/test-address-form/test-address-form.component.mjs +1 -1
- package/esm2022/settings/components/test-order-builder/test-order-builder.component.mjs +1 -1
- package/esm2022/settings/components/zone-detail/zone-detail.component.mjs +1 -1
- package/esm2022/system/components/job-list/job-list.component.mjs +1 -1
- package/fesm2022/vendure-admin-ui-catalog.mjs +50 -20
- package/fesm2022/vendure-admin-ui-catalog.mjs.map +1 -1
- package/fesm2022/vendure-admin-ui-core.mjs +89 -149
- package/fesm2022/vendure-admin-ui-core.mjs.map +1 -1
- package/fesm2022/vendure-admin-ui-customer.mjs +5 -5
- package/fesm2022/vendure-admin-ui-customer.mjs.map +1 -1
- package/fesm2022/vendure-admin-ui-login.mjs +1 -1
- package/fesm2022/vendure-admin-ui-login.mjs.map +1 -1
- package/fesm2022/vendure-admin-ui-marketing.mjs +1 -1
- package/fesm2022/vendure-admin-ui-marketing.mjs.map +1 -1
- package/fesm2022/vendure-admin-ui-order.mjs +660 -323
- package/fesm2022/vendure-admin-ui-order.mjs.map +1 -1
- package/fesm2022/vendure-admin-ui-react.mjs +8 -8
- package/fesm2022/vendure-admin-ui-react.mjs.map +1 -1
- package/fesm2022/vendure-admin-ui-settings.mjs +15 -15
- package/fesm2022/vendure-admin-ui-settings.mjs.map +1 -1
- package/fesm2022/vendure-admin-ui-system.mjs +1 -1
- package/fesm2022/vendure-admin-ui-system.mjs.map +1 -1
- package/order/common/get-refundable-payments.d.ts +9 -0
- package/order/common/modify-order-types.d.ts +29 -0
- package/order/components/modification-detail/modification-detail.component.d.ts +4 -0
- package/order/components/order-detail/order-detail.component.d.ts +2 -0
- package/order/components/order-editor/order-editor.component.d.ts +57 -33
- package/order/components/order-edits-preview-dialog/order-edits-preview-dialog.component.d.ts +17 -6
- package/order/components/order-history/order-history.component.d.ts +6 -2
- package/order/components/order-modification-summary/order-modification-summary.component.d.ts +19 -0
- package/order/components/payment-for-refund-selector/payment-for-refund-selector.component.d.ts +14 -0
- package/order/components/refund-detail/refund-detail.component.d.ts +8 -0
- package/order/components/refund-order-dialog/refund-order-dialog.component.d.ts +13 -11
- package/order/components/select-customer-dialog/select-customer-dialog.component.d.ts +9 -2
- package/order/components/simple-item-list/simple-item-list.component.d.ts +1 -1
- package/order/order.module.d.ts +6 -3
- package/order/order.routes.d.ts +0 -2
- package/order/providers/routing/order.guard.d.ts +1 -0
- package/order/public_api.d.ts +5 -1
- package/package.json +14 -14
- package/static/i18n-messages/ar.json +14 -5
- package/static/i18n-messages/cs.json +14 -5
- package/static/i18n-messages/de.json +14 -5
- package/static/i18n-messages/en.json +14 -5
- package/static/i18n-messages/es.json +14 -5
- package/static/i18n-messages/fa.json +14 -5
- package/static/i18n-messages/fr.json +14 -5
- package/static/i18n-messages/he.json +14 -5
- package/static/i18n-messages/hr.json +14 -5
- package/static/i18n-messages/it.json +14 -5
- package/static/i18n-messages/nb.json +15 -7
- package/static/i18n-messages/ne.json +14 -5
- package/static/i18n-messages/pl.json +14 -5
- package/static/i18n-messages/pt_BR.json +15 -7
- package/static/i18n-messages/pt_PT.json +14 -5
- package/static/i18n-messages/ru.json +14 -5
- package/static/i18n-messages/uk.json +179 -170
- package/static/i18n-messages/zh_Hans.json +14 -5
- package/static/i18n-messages/zh_Hant.json +14 -5
- package/static/styles/global/_utilities.scss +4 -0
- package/static/styles/theme/dark.scss +4 -2
- package/static/styles/theme/default.scss +1 -2
- package/static/theme.min.css +1 -1
- package/esm2022/order/providers/routing/order-resolver.mjs +0 -48
- package/order/providers/routing/order-resolver.d.ts +0 -16
|
@@ -2,6 +2,7 @@ import { ChangeDetectionStrategy, Component } from '@angular/core';
|
|
|
2
2
|
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
|
3
3
|
import { getAppConfig, } from '@vendure/admin-ui/core';
|
|
4
4
|
import { summate } from '@vendure/common/lib/shared-utils';
|
|
5
|
+
import { getRefundablePayments } from '../../common/get-refundable-payments';
|
|
5
6
|
import * as i0 from "@angular/core";
|
|
6
7
|
import * as i1 from "@vendure/admin-ui/core";
|
|
7
8
|
import * as i2 from "@clr/angular";
|
|
@@ -9,35 +10,27 @@ import * as i3 from "@angular/common";
|
|
|
9
10
|
import * as i4 from "@angular/forms";
|
|
10
11
|
import * as i5 from "@ng-select/ng-select";
|
|
11
12
|
import * as i6 from "../line-refunds/line-refunds.component";
|
|
12
|
-
import * as i7 from "
|
|
13
|
+
import * as i7 from "../payment-for-refund-selector/payment-for-refund-selector.component";
|
|
14
|
+
import * as i8 from "@ngx-translate/core";
|
|
13
15
|
export class RefundOrderDialogComponent {
|
|
14
16
|
constructor(i18nService) {
|
|
15
17
|
this.i18nService = i18nService;
|
|
16
18
|
this.lineQuantities = {};
|
|
17
|
-
this.
|
|
18
|
-
this.
|
|
19
|
+
this.refundablePayments = [];
|
|
20
|
+
this.refundShippingLineIds = [];
|
|
19
21
|
this.reasons = getAppConfig().cancellationReasons ?? [
|
|
20
22
|
_('order.refund-reason-customer-request'),
|
|
21
23
|
_('order.refund-reason-not-available'),
|
|
22
24
|
];
|
|
25
|
+
this.manuallySetRefundTotal = false;
|
|
26
|
+
this.refundTotal = 0;
|
|
23
27
|
this.reasons = this.reasons.map(r => this.i18nService.translate(r));
|
|
24
28
|
}
|
|
25
|
-
get
|
|
26
|
-
|
|
27
|
-
const lineRef = this.lineQuantities[line.id];
|
|
28
|
-
const refundCount = (lineRef.refund && lineRef.quantity) || 0;
|
|
29
|
-
return total + line.proratedUnitPriceWithTax * refundCount;
|
|
30
|
-
}, 0);
|
|
31
|
-
return itemTotal + (this.refundShipping ? this.order.shippingWithTax : 0) + this.adjustment;
|
|
29
|
+
get totalRefundableAmount() {
|
|
30
|
+
return summate(this.refundablePayments, 'refundableAmount');
|
|
32
31
|
}
|
|
33
|
-
get
|
|
34
|
-
return this.
|
|
35
|
-
.map(payment => {
|
|
36
|
-
const paymentTotal = payment.amount;
|
|
37
|
-
const alreadyRefundedTotal = summate(payment.refunds.filter(r => r.state !== 'Failed'), 'total');
|
|
38
|
-
return paymentTotal - alreadyRefundedTotal;
|
|
39
|
-
})
|
|
40
|
-
.reduce((sum, amount) => sum + amount, 0);
|
|
32
|
+
get amountToRefundTotal() {
|
|
33
|
+
return this.refundablePayments.reduce((total, payment) => total + payment.amountToRefundControl.value, 0);
|
|
41
34
|
}
|
|
42
35
|
lineCanBeRefundedOrCancelled(line) {
|
|
43
36
|
const refundedCount = this.order.payments
|
|
@@ -53,23 +46,79 @@ export class RefundOrderDialogComponent {
|
|
|
53
46
|
...result,
|
|
54
47
|
[line.id]: {
|
|
55
48
|
quantity: 0,
|
|
56
|
-
refund:
|
|
49
|
+
refund: true,
|
|
57
50
|
cancel: false,
|
|
58
51
|
},
|
|
59
52
|
}), {});
|
|
60
|
-
this.
|
|
61
|
-
|
|
62
|
-
|
|
53
|
+
this.refundablePayments = getRefundablePayments(this.order.payments);
|
|
54
|
+
}
|
|
55
|
+
updateRefundTotal() {
|
|
56
|
+
if (!this.manuallySetRefundTotal) {
|
|
57
|
+
const itemTotal = this.order.lines.reduce((total, line) => {
|
|
58
|
+
const lineRef = this.lineQuantities[line.id];
|
|
59
|
+
const refundCount = lineRef.quantity || 0;
|
|
60
|
+
return total + line.proratedUnitPriceWithTax * refundCount;
|
|
61
|
+
}, 0);
|
|
62
|
+
const shippingTotal = this.order.shippingLines.reduce((total, line) => {
|
|
63
|
+
if (this.refundShippingLineIds.includes(line.id)) {
|
|
64
|
+
return total + line.discountedPriceWithTax;
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
return total;
|
|
68
|
+
}
|
|
69
|
+
}, 0);
|
|
70
|
+
this.refundTotal = itemTotal + shippingTotal;
|
|
71
|
+
}
|
|
72
|
+
// allocate the refund total across the refundable payments
|
|
73
|
+
const refundablePayments = this.refundablePayments.filter(p => p.selected);
|
|
74
|
+
let refundsAllocated = 0;
|
|
75
|
+
for (const payment of refundablePayments) {
|
|
76
|
+
const amountToRefund = Math.min(payment.refundableAmount, this.refundTotal - refundsAllocated);
|
|
77
|
+
payment.amountToRefundControl.setValue(amountToRefund);
|
|
78
|
+
refundsAllocated += amountToRefund;
|
|
63
79
|
}
|
|
64
80
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
81
|
+
toggleShippingRefund(lineId) {
|
|
82
|
+
const index = this.refundShippingLineIds.indexOf(lineId);
|
|
83
|
+
if (index === -1) {
|
|
84
|
+
this.refundShippingLineIds.push(lineId);
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
this.refundShippingLineIds.splice(index, 1);
|
|
88
|
+
}
|
|
89
|
+
this.updateRefundTotal();
|
|
90
|
+
}
|
|
91
|
+
onRefundQuantityChange(orderLineId, quantity) {
|
|
92
|
+
this.manuallySetRefundTotal = false;
|
|
93
|
+
const selectionLine = this.lineQuantities[orderLineId];
|
|
94
|
+
if (selectionLine) {
|
|
95
|
+
const previousQuantity = selectionLine.quantity;
|
|
96
|
+
if (quantity === 0) {
|
|
97
|
+
selectionLine.cancel = false;
|
|
98
|
+
}
|
|
99
|
+
else if (previousQuantity === 0 && quantity > 0) {
|
|
100
|
+
selectionLine.cancel = true;
|
|
101
|
+
}
|
|
102
|
+
selectionLine.quantity = quantity;
|
|
103
|
+
this.updateRefundTotal();
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
onPaymentSelected(payment, selected) {
|
|
107
|
+
if (selected) {
|
|
108
|
+
const outstandingRefundAmount = this.refundTotal -
|
|
109
|
+
this.refundablePayments
|
|
110
|
+
.filter(p => p.id !== payment.id)
|
|
111
|
+
.reduce((total, p) => total + p.amountToRefundControl.value, 0);
|
|
112
|
+
if (0 < outstandingRefundAmount) {
|
|
113
|
+
payment.amountToRefundControl.setValue(Math.min(outstandingRefundAmount, payment.refundableAmount));
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
payment.amountToRefundControl.setValue(0);
|
|
69
118
|
}
|
|
70
119
|
}
|
|
71
120
|
isRefunding() {
|
|
72
|
-
const result = Object.values(this.lineQuantities).reduce((isRefunding, line) => isRefunding ||
|
|
121
|
+
const result = Object.values(this.lineQuantities).reduce((isRefunding, line) => isRefunding || 0 < line.quantity, false);
|
|
73
122
|
return result;
|
|
74
123
|
}
|
|
75
124
|
isCancelling() {
|
|
@@ -77,38 +126,31 @@ export class RefundOrderDialogComponent {
|
|
|
77
126
|
return result;
|
|
78
127
|
}
|
|
79
128
|
canSubmit() {
|
|
80
|
-
|
|
81
|
-
return !!(this.selectedPayment &&
|
|
82
|
-
this.reason &&
|
|
83
|
-
0 < this.refundTotal &&
|
|
84
|
-
this.refundTotal <= this.settledPaymentsTotal);
|
|
85
|
-
}
|
|
86
|
-
else if (this.isCancelling()) {
|
|
87
|
-
return !!this.reason;
|
|
88
|
-
}
|
|
89
|
-
return false;
|
|
129
|
+
return 0 < this.refundTotal && this.amountToRefundTotal === this.refundTotal && !!this.reason;
|
|
90
130
|
}
|
|
91
131
|
select() {
|
|
92
|
-
const
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
132
|
+
const refundLines = this.getOrderLineInput(() => true);
|
|
133
|
+
const cancelLines = this.getOrderLineInput(line => line.cancel);
|
|
134
|
+
this.resolveWith({
|
|
135
|
+
refunds: this.refundablePayments
|
|
136
|
+
.filter(rp => rp.selected && 0 < rp.amountToRefundControl.value)
|
|
137
|
+
.map(payment => {
|
|
138
|
+
return {
|
|
98
139
|
lines: refundLines,
|
|
99
140
|
reason: this.reason,
|
|
100
|
-
shipping: this.refundShipping ? this.order.shippingWithTax : 0,
|
|
101
|
-
adjustment: this.adjustment,
|
|
102
141
|
paymentId: payment.id,
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
142
|
+
amount: payment.amountToRefundControl.value,
|
|
143
|
+
shipping: 0,
|
|
144
|
+
adjustment: 0,
|
|
145
|
+
};
|
|
146
|
+
}),
|
|
147
|
+
cancel: {
|
|
148
|
+
lines: cancelLines,
|
|
149
|
+
orderId: this.order.id,
|
|
150
|
+
reason: this.reason,
|
|
151
|
+
cancelShipping: this.refundShippingLineIds.length > 0,
|
|
152
|
+
},
|
|
153
|
+
});
|
|
112
154
|
}
|
|
113
155
|
cancel() {
|
|
114
156
|
this.resolveWith();
|
|
@@ -122,10 +164,10 @@ export class RefundOrderDialogComponent {
|
|
|
122
164
|
}));
|
|
123
165
|
}
|
|
124
166
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: RefundOrderDialogComponent, deps: [{ token: i1.I18nService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
125
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.2", type: RefundOrderDialogComponent, selector: "vdr-refund-order-dialog", ngImport: i0, template: "<ng-template vdrDialogTitle>{{ 'order.refund-and-cancel-order' | translate }}</ng-template>\r\n\r\n<div class=\"refund-wrapper\">\r\n <div class=\"order-table\">\r\n <table class=\"table\">\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.quantity' | translate }}</th>\r\n <th>{{ 'order.unit-price' | translate }}</th>\r\n <th>{{ 'order.prorated-unit-price' | translate }}</th>\r\n <th>{{ 'order.quantity' | translate }}</th>\r\n <th>{{ 'order.refund' | translate }}</th>\r\n <th>{{ 'order.cancel' | translate }}</th>\r\n </tr>\r\n </thead>\r\n <tr *ngFor=\"let line of order.lines\" class=\"order-line\">\r\n <td class=\"align-middle thumb\">\r\n <img [src]=\"line.featuredAsset | assetPreview: 'tiny'\" />\r\n </td>\r\n <td class=\"align-middle name\">{{ line.productVariant.name }}</td>\r\n <td class=\"align-middle sku\">{{ line.productVariant.sku }}</td>\r\n <td class=\"align-middle quantity\">\r\n {{ line.quantity }}\r\n <vdr-line-refunds [line]=\"line\" [payments]=\"order.payments\"></vdr-line-refunds>\r\n </td>\r\n <td class=\"align-middle quantity\">\r\n {{ line.unitPriceWithTax | localeCurrency: order.currencyCode }}\r\n </td>\r\n <td class=\"align-middle quantity\">\r\n <div class=\"prorated-wrapper\">\r\n {{ line.proratedUnitPriceWithTax | localeCurrency: order.currencyCode }}\r\n <ng-container *ngIf=\"line.discounts as discounts\">\r\n <vdr-dropdown *ngIf=\"discounts.length\">\r\n <div class=\"promotions-label\" vdrDropdownTrigger>\r\n <button class=\"icon-button\"><clr-icon shape=\"info\"></clr-icon></button>\r\n </div>\r\n <vdr-dropdown-menu>\r\n <div class=\"line-promotion\" *ngFor=\"let discount of discounts\">\r\n {{ discount.description }}\r\n <div class=\"promotion-amount\">\r\n {{\r\n discount.amount / 100 / line.quantity\r\n | number: '1.0-2'\r\n | currency: order.currencyCode\r\n }}\r\n </div>\r\n </div>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </ng-container>\r\n </div>\r\n </td>\r\n <td class=\"align-middle quantity-col\">\r\n <input\r\n *ngIf=\"lineCanBeRefundedOrCancelled(line)\"\r\n [(ngModel)]=\"lineQuantities[line.id].quantity\"\r\n type=\"number\"\r\n [max]=\"line.quantity\"\r\n min=\"0\"\r\n (input)=\"handleZeroQuantity(lineQuantities[line.id])\"\r\n />\r\n </td>\r\n <td class=\"align-middle\">\r\n <div class=\"cancel-checkbox-wrapper\">\r\n <input\r\n type=\"checkbox\"\r\n *ngIf=\"lineCanBeRefundedOrCancelled(line)\"\r\n clrCheckbox\r\n [disabled]=\"0 === lineQuantities[line.id].quantity\"\r\n [(ngModel)]=\"lineQuantities[line.id].refund\"\r\n />\r\n </div>\r\n </td>\r\n <td class=\"align-middle\">\r\n <div class=\"cancel-checkbox-wrapper\">\r\n <input\r\n type=\"checkbox\"\r\n *ngIf=\"lineCanBeRefundedOrCancelled(line)\"\r\n clrCheckbox\r\n [disabled]=\"0 === lineQuantities[line.id].quantity\"\r\n [(ngModel)]=\"lineQuantities[line.id].cancel\"\r\n />\r\n </div>\r\n </td>\r\n </tr>\r\n </table>\r\n </div>\r\n <div class=\"refund-details mt-4\" [class.faded]=\"!isRefunding() && !isCancelling()\">\r\n <div>\r\n <label class=\"clr-control-label\">{{ 'order.refund-cancellation-reason' | translate }}</label>\r\n <ng-select\r\n [disabled]=\"!isRefunding() && !isCancelling()\"\r\n [items]=\"reasons\"\r\n bindLabel=\"name\"\r\n autofocus\r\n [placeholder]=\"'order.refund-cancellation-reason-required' | translate\"\r\n bindValue=\"id\"\r\n [addTag]=\"true\"\r\n [(ngModel)]=\"reason\"\r\n ></ng-select>\r\n </div>\r\n\r\n <div>\r\n <clr-select-container>\r\n <label>{{ 'order.payment-to-refund' | translate }}</label>\r\n <select clrSelect name=\"options\" [(ngModel)]=\"selectedPayment\" [disabled]=\"!isRefunding()\">\r\n <option\r\n *ngFor=\"let payment of settledPayments\"\r\n [ngValue]=\"payment\"\r\n [disabled]=\"payment.state !== 'Settled'\"\r\n >\r\n #{{ payment.id }} {{ payment.method }}:\r\n {{ payment.amount | localeCurrency: order.currencyCode }}\r\n </option>\r\n </select>\r\n </clr-select-container>\r\n\r\n <clr-checkbox-wrapper>\r\n <input type=\"checkbox\" clrCheckbox [(ngModel)]=\"refundShipping\" [disabled]=\"!isRefunding()\" />\r\n <label>\r\n {{ 'order.refund-shipping' | translate }} ({{\r\n order.shippingWithTax | localeCurrency: order.currencyCode\r\n }})\r\n </label>\r\n </clr-checkbox-wrapper>\r\n <clr-input-container>\r\n <label>{{ 'order.refund-adjustment' | translate }}</label>\r\n <vdr-currency-input\r\n clrInput\r\n [disabled]=\"!isRefunding()\"\r\n [currencyCode]=\"order.currencyCode\"\r\n [(ngModel)]=\"adjustment\"\r\n ></vdr-currency-input>\r\n </clr-input-container>\r\n <div class=\"totals\" [class.disabled]=\"!isRefunding()\">\r\n <div class=\"order-total\">\r\n {{ 'order.payment-amount' | translate }}:\r\n {{ selectedPayment.amount | localeCurrency: order.currencyCode }}\r\n </div>\r\n <div class=\"refund-total\">\r\n {{ 'order.refund-total' | translate }}:\r\n {{ refundTotal | localeCurrency: order.currencyCode }}\r\n </div>\r\n <div class=\"refund-total-error\" *ngIf=\"refundTotal < 0 || settledPaymentsTotal < refundTotal\">\r\n {{\r\n 'order.refund-total-error'\r\n | translate\r\n : {\r\n min: 0 | currency: order.currencyCode,\r\n max: settledPaymentsTotal | localeCurrency: order.currencyCode\r\n }\r\n }}\r\n </div>\r\n <div class=\"refund-total-warning\" *ngIf=\"selectedPayment.amount < refundTotal\">\r\n {{ 'order.refund-total-warning' | translate }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\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)=\"select()\" [disabled]=\"!canSubmit()\" class=\"btn btn-primary\">\r\n <ng-container *ngIf=\"isRefunding(); else cancelling\">\r\n {{\r\n 'order.refund-with-amount'\r\n | translate: { amount: refundTotal | localeCurrency: order.currencyCode }\r\n }}\r\n </ng-container>\r\n <ng-template #cancelling>\r\n {{ 'order.cancel-selected-items' | translate }}\r\n </ng-template>\r\n </button>\r\n</ng-template>\r\n", styles: [":host{height:100%;display:flex;min-height:64vh}.refund-wrapper{flex:1;flex-direction:column}.refund-wrapper .order-table{flex:1;overflow-y:auto}.refund-wrapper .order-table table{margin-top:0}.refund-wrapper tr.ignore{color:var(--color-grey-300)}.quantity-col{background-color:var(--color-warning-100)}.cancel-checkbox-wrapper{display:flex;align-items:center;justify-content:center}clr-checkbox-wrapper{margin-top:12px;margin-bottom:12px;display:block}.refund-details{display:flex;justify-content:space-between}.refund-details.faded{opacity:.5}.totals{margin-top:48px}.totals .refund-total{font-size:18px}.totals .refund-total-error{color:var(--color-error-500)}.totals .refund-total-warning{color:var(--color-warning-600);max-width:250px}.totals.disabled{color:var(--color-grey-300)}.prorated-wrapper{display:flex;justify-content:center}.line-promotion{display:flex;justify-content:space-between;font-size:12px;padding:3px 6px}.line-promotion .promotion-amount{margin-inline-start:12px}\n"], dependencies: [{ kind: "directive", type: i2.ClrIconCustomTag, selector: "clr-icon" }, { kind: "directive", type: i2.ClrLabel, selector: "label", inputs: ["for"] }, { kind: "directive", type: i2.ClrCheckbox, selector: "[clrCheckbox],[clrToggle]" }, { kind: "component", type: i2.ClrCheckboxWrapper, selector: "clr-checkbox-wrapper,clr-toggle-wrapper" }, { kind: "directive", type: i2.ClrInput, selector: "[clrInput]" }, { kind: "component", type: i2.ClrInputContainer, selector: "clr-input-container" }, { kind: "directive", type: i2.ClrSelect, selector: "[clrSelect]" }, { kind: "component", type: i2.ClrSelectContainer, selector: "clr-select-container" }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i4.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i4.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i4.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.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", "deselectOnClick"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }, { kind: "component", type: i1.CurrencyInputComponent, selector: "vdr-currency-input", inputs: ["disabled", "readonly", "value", "currencyCode"], outputs: ["valueChange"] }, { kind: "directive", type: i1.FormFieldControlDirective, selector: "input, textarea, select" }, { kind: "directive", type: i1.DialogButtonsDirective, selector: "[vdrDialogButtons]" }, { kind: "directive", type: i1.DialogTitleDirective, selector: "[vdrDialogTitle]" }, { kind: "component", type: i1.DropdownComponent, selector: "vdr-dropdown", inputs: ["manualToggle"] }, { kind: "component", type: i1.DropdownMenuComponent, selector: "vdr-dropdown-menu", inputs: ["vdrPosition", "customClasses"] }, { kind: "directive", type: i1.DropdownTriggerDirective, selector: "[vdrDropdownTrigger]" }, { kind: "component", type: i6.LineRefundsComponent, selector: "vdr-line-refunds", inputs: ["line", "payments"] }, { kind: "pipe", type: i3.DecimalPipe, name: "number" }, { kind: "pipe", type: i3.CurrencyPipe, name: "currency" }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }, { kind: "pipe", type: i1.AssetPreviewPipe, name: "assetPreview" }, { kind: "pipe", type: i1.LocaleCurrencyPipe, name: "localeCurrency" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
167
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.2", type: RefundOrderDialogComponent, selector: "vdr-refund-order-dialog", ngImport: i0, template: "<ng-template vdrDialogTitle>{{ 'order.refund-and-cancel-order' | translate }}</ng-template>\r\n\r\n<div class=\"refund-wrapper\">\r\n <vdr-data-table-2 id=\"refund-order\" [items]=\"order.lines\">\r\n <!-- Here we define all the available columns -->\r\n <vdr-dt2-column id=\"id\" [heading]=\"'common.id' | translate\" [hiddenByDefault]=\"true\">\r\n <ng-template let-line=\"item\">\r\n {{ line.id }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column id=\"created-at\" [heading]=\"'common.created-at' | translate\" [hiddenByDefault]=\"true\">\r\n <ng-template let-line=\"item\">\r\n {{ line.createdAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column id=\"updated-at\" [heading]=\"'common.updated-at' | translate\" [hiddenByDefault]=\"true\">\r\n <ng-template let-line=\"item\">\r\n {{ line.updatedAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.image' | translate\" id=\"image\">\r\n <ng-template let-line=\"item\">\r\n <div class=\"image-placeholder\">\r\n <img\r\n *ngIf=\"line.featuredAsset as asset; else imagePlaceholder\"\r\n [src]=\"asset | assetPreview : 'tiny'\"\r\n />\r\n <ng-template #imagePlaceholder>\r\n <div class=\"placeholder\">\r\n <clr-icon shape=\"image\" size=\"48\"></clr-icon>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column id=\"product-name\" [heading]=\"'order.product-name' | translate\" [optional]=\"false\">\r\n <ng-template let-line=\"item\">\r\n {{ line.productVariant.name }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column id=\"product-sku\" [heading]=\"'order.product-sku' | translate\">\r\n <ng-template let-line=\"item\">\r\n {{ line.productVariant.sku }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column id=\"unit-price\" [heading]=\"'order.unit-price' | translate\" [hiddenByDefault]=\"true\">\r\n <ng-template let-line=\"item\">\r\n {{ line.unitPriceWithTax | localeCurrency : order.currencyCode }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column id=\"prorated-unit-price\" [heading]=\"'order.prorated-unit-price' | translate\">\r\n <ng-template let-line=\"item\">\r\n {{ line.unitPriceWithTax | localeCurrency : order.currencyCode }}\r\n <ng-container *ngIf=\"line.discounts as discounts\">\r\n <vdr-dropdown *ngIf=\"discounts.length\">\r\n <div class=\"promotions-label\" vdrDropdownTrigger>\r\n <button class=\"icon-button\"><clr-icon shape=\"info\"></clr-icon></button>\r\n </div>\r\n <vdr-dropdown-menu>\r\n <div class=\"line-promotion\" *ngFor=\"let discount of discounts\">\r\n {{ discount.description }}\r\n <div class=\"promotion-amount\">\r\n {{\r\n discount.amount / 100 / line.quantity\r\n | number : '1.0-2'\r\n | currency : order.currencyCode\r\n }}\r\n </div>\r\n </div>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </ng-container>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column id=\"quantity\" [heading]=\"'order.quantity' | translate\">\r\n <ng-template let-line=\"item\">\r\n {{ line.quantity }}\r\n <vdr-line-refunds [line]=\"line\" [payments]=\"order.payments\"></vdr-line-refunds>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column id=\"refund-quantity\" [heading]=\"'order.refund' | translate\" [optional]=\"false\">\r\n <ng-template let-line=\"item\">\r\n <input\r\n *ngIf=\"lineCanBeRefundedOrCancelled(line)\"\r\n [ngModel]=\"lineQuantities[line.id].quantity\"\r\n type=\"number\"\r\n [max]=\"line.quantity\"\r\n min=\"0\"\r\n (ngModelChange)=\"onRefundQuantityChange(line.id, $event)\"\r\n />\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column id=\"cancel\" [heading]=\"'order.return-to-stock' | translate\" [optional]=\"false\">\r\n <ng-template let-line=\"item\">\r\n <div class=\"cancel-checkbox-wrapper\">\r\n <label class=\"flex center\">\r\n <input\r\n type=\"checkbox\"\r\n *ngIf=\"lineCanBeRefundedOrCancelled(line)\"\r\n clrCheckbox\r\n [disabled]=\"0 === lineQuantities[line.id].quantity\"\r\n [(ngModel)]=\"lineQuantities[line.id].cancel\"\r\n />\r\n <span class=\"ml-1\">{{ 'order.return-to-stock' | translate }}</span></label\r\n >\r\n </div>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n </vdr-data-table-2>\r\n\r\n <div class=\"refund-details mt-4\">\r\n <div>\r\n <vdr-card>\r\n <label class=\"flex mb-2\" *ngFor=\"let shippingLine of order.shippingLines\">\r\n <input type=\"checkbox\" clrCheckbox (change)=\"toggleShippingRefund(shippingLine.id)\" />\r\n <div class=\"ml-1\">\r\n {{ 'order.refund-shipping' | translate }}\r\n <span>{{ shippingLine.shippingMethod.name }}:</span>\r\n <span class=\"ml-1\"\r\n >{{ shippingLine.discountedPriceWithTax | localeCurrency : order.currencyCode }}\r\n </span>\r\n </div></label\r\n >\r\n <vdr-form-field [label]=\"'order.refund-cancellation-reason' | translate\" class=\"mb-2\">\r\n <ng-select\r\n [items]=\"reasons\"\r\n bindLabel=\"name\"\r\n autofocus\r\n [placeholder]=\"'order.refund-cancellation-reason-required' | translate\"\r\n bindValue=\"id\"\r\n [addTag]=\"true\"\r\n [(ngModel)]=\"reason\"\r\n ></ng-select>\r\n </vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"'order.refund-total' | translate\"\r\n [readOnlyToggle]=\"true\"\r\n (readOnlyToggleChange)=\"manuallySetRefundTotal = !$event\"\r\n >\r\n <vdr-currency-input\r\n [readonly]=\"!manuallySetRefundTotal\"\r\n [currencyCode]=\"order.currencyCode\"\r\n [(ngModel)]=\"refundTotal\"\r\n (ngModelChange)=\"updateRefundTotal()\"\r\n ></vdr-currency-input>\r\n </vdr-form-field>\r\n </vdr-card>\r\n </div>\r\n <div class=\"\">\r\n <vdr-payment-for-refund-selector\r\n [refundablePayments]=\"refundablePayments\"\r\n (paymentSelected)=\"onPaymentSelected($event.payment, $event.selected)\"\r\n [order]=\"order\"\r\n ></vdr-payment-for-refund-selector>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template vdrDialogButtons>\r\n <div>\r\n <div class=\"errors\">\r\n <clr-alert\r\n *ngIf=\"refundTotal < 0 || totalRefundableAmount < refundTotal\"\r\n [clrAlertType]=\"'danger'\"\r\n [clrAlertClosable]=\"false\"\r\n >\r\n <clr-alert-item>\r\n {{\r\n 'order.refund-total-error'\r\n | translate\r\n : {\r\n min: 0 | currency : order.currencyCode,\r\n max: totalRefundableAmount | localeCurrency : order.currencyCode\r\n }\r\n }}\r\n </clr-alert-item>\r\n </clr-alert>\r\n <clr-alert\r\n *ngIf=\"amountToRefundTotal < refundTotal || refundTotal < amountToRefundTotal\"\r\n [clrAlertType]=\"'danger'\"\r\n [clrAlertClosable]=\"false\"\r\n >\r\n <clr-alert-item>\r\n {{ 'order.refund-total-warning' | translate }}\r\n </clr-alert-item>\r\n </clr-alert>\r\n <clr-alert\r\n *ngIf=\"amountToRefundTotal && !reason\"\r\n [clrAlertType]=\"'danger'\"\r\n [clrAlertClosable]=\"false\"\r\n >\r\n <clr-alert-item>\r\n {{ 'order.refund-cancellation-reason-required' | translate }}\r\n </clr-alert-item>\r\n </clr-alert>\r\n </div>\r\n <div class=\"modal-buttons\">\r\n <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\r\n <button type=\"submit\" (click)=\"select()\" [disabled]=\"!canSubmit()\" class=\"btn btn-primary\">\r\n {{\r\n 'order.refund-with-amount'\r\n | translate : { amount: amountToRefundTotal | localeCurrency : order.currencyCode }\r\n }}\r\n </button>\r\n </div>\r\n </div>\r\n</ng-template>\r\n", styles: [":host{height:100%;display:flex;flex-direction:column;min-height:64vh}.refund-wrapper{flex:1;flex-direction:column}.refund-wrapper .order-table{flex:1;overflow-y:auto}.refund-wrapper .order-table table{margin-top:0}.refund-wrapper tr.ignore{color:var(--color-grey-300)}::ng-deep .refund-wrapper .table-wrapper{max-width:initial!important}.quantity-col{background-color:var(--color-warning-100)}.cancel-checkbox-wrapper{display:flex;align-items:center;justify-content:center}clr-checkbox-wrapper{margin-top:12px;margin-bottom:12px;display:block}.refund-details{display:flex;flex-direction:column;padding-bottom:var(--space-unit);gap:calc(var(--space-unit) * 2);justify-content:space-between}@media screen and (min-width: 992px){.refund-details{flex-direction:row}}.refund-details vdr-card.unselected{opacity:.8}.refund-details>*{flex:1}.errors{display:flex;justify-content:flex-end;gap:calc(var(--space-unit) * 2);margin:calc(var(--space-unit) * 2) 0}.prorated-wrapper{display:flex;justify-content:center}.line-promotion{display:flex;justify-content:space-between;font-size:12px;padding:3px 6px}.line-promotion .promotion-amount{margin-inline-start:12px}vdr-card.faded{opacity:.8}.modal-buttons{display:flex;justify-content:flex-end;gap:.6rem;gap:var(--clr-modal-footer-gap, .6rem)}\n"], dependencies: [{ kind: "component", type: i2.ClrAlert, selector: "clr-alert", inputs: ["clrAlertSizeSmall", "clrAlertClosable", "clrAlertAppLevel", "clrCloseButtonAriaLabel", "clrAlertType", "clrAlertIcon", "clrAlertClosed"], outputs: ["clrAlertClosedChange"] }, { kind: "component", type: i2.ClrAlertItem, selector: "clr-alert-item" }, { kind: "directive", type: i2.ClrIconCustomTag, selector: "clr-icon" }, { kind: "directive", type: i2.ClrLabel, selector: "label", inputs: ["for"] }, { kind: "directive", type: i2.ClrCheckbox, selector: "[clrCheckbox],[clrToggle]" }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i4.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i4.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.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", "deselectOnClick"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }, { kind: "component", type: i1.CurrencyInputComponent, selector: "vdr-currency-input", inputs: ["disabled", "readonly", "value", "currencyCode"], outputs: ["valueChange"] }, { kind: "component", type: i1.FormFieldComponent, selector: "vdr-form-field", inputs: ["label", "for", "tooltip", "errors", "readOnlyToggle"], outputs: ["readOnlyToggleChange"] }, { kind: "directive", type: i1.FormFieldControlDirective, selector: "input, textarea, select, vdr-currency-input" }, { kind: "directive", type: i1.DialogButtonsDirective, selector: "[vdrDialogButtons]" }, { kind: "directive", type: i1.DialogTitleDirective, selector: "[vdrDialogTitle]" }, { kind: "component", type: i1.DropdownComponent, selector: "vdr-dropdown", inputs: ["manualToggle"] }, { kind: "component", type: i1.DropdownMenuComponent, selector: "vdr-dropdown-menu", inputs: ["vdrPosition", "customClasses"] }, { kind: "directive", type: i1.DropdownTriggerDirective, selector: "[vdrDropdownTrigger]" }, { kind: "component", type: i1.DataTable2Component, selector: "vdr-data-table-2", inputs: ["id", "items", "itemsPerPage", "currentPage", "totalItems", "emptyStateLabel", "filters", "activeIndex"], outputs: ["pageChange", "itemsPerPageChange"] }, { kind: "component", type: i1.DataTable2ColumnComponent, selector: "vdr-dt2-column", inputs: ["id", "expand", "heading", "align", "sort", "optional", "hiddenByDefault", "orderable"], exportAs: ["row"] }, { kind: "component", type: i1.CardComponent, selector: "vdr-card", inputs: ["title", "paddingX"] }, { kind: "component", type: i6.LineRefundsComponent, selector: "vdr-line-refunds", inputs: ["line", "payments"] }, { kind: "component", type: i7.PaymentForRefundSelectorComponent, selector: "vdr-payment-for-refund-selector", inputs: ["refundablePayments", "order"], outputs: ["paymentSelected"] }, { kind: "pipe", type: i3.DecimalPipe, name: "number" }, { kind: "pipe", type: i3.CurrencyPipe, name: "currency" }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }, { kind: "pipe", type: i1.AssetPreviewPipe, name: "assetPreview" }, { kind: "pipe", type: i1.LocaleDatePipe, name: "localeDate" }, { kind: "pipe", type: i1.LocaleCurrencyPipe, name: "localeCurrency" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
126
168
|
}
|
|
127
169
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: RefundOrderDialogComponent, decorators: [{
|
|
128
170
|
type: Component,
|
|
129
|
-
args: [{ selector: 'vdr-refund-order-dialog', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-template vdrDialogTitle>{{ 'order.refund-and-cancel-order' | translate }}</ng-template>\r\n\r\n<div class=\"refund-wrapper\">\r\n <div class=\"order-table\">\r\n <table class=\"table\">\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.quantity' | translate }}</th>\r\n <th>{{ 'order.unit-price' | translate }}</th>\r\n <th>{{ 'order.prorated-unit-price' | translate }}</th>\r\n <th>{{ 'order.quantity' | translate }}</th>\r\n <th>{{ 'order.refund' | translate }}</th>\r\n <th>{{ 'order.cancel' | translate }}</th>\r\n </tr>\r\n </thead>\r\n <tr *ngFor=\"let line of order.lines\" class=\"order-line\">\r\n <td class=\"align-middle thumb\">\r\n <img [src]=\"line.featuredAsset | assetPreview: 'tiny'\" />\r\n </td>\r\n <td class=\"align-middle name\">{{ line.productVariant.name }}</td>\r\n <td class=\"align-middle sku\">{{ line.productVariant.sku }}</td>\r\n <td class=\"align-middle quantity\">\r\n {{ line.quantity }}\r\n <vdr-line-refunds [line]=\"line\" [payments]=\"order.payments\"></vdr-line-refunds>\r\n </td>\r\n <td class=\"align-middle quantity\">\r\n {{ line.unitPriceWithTax | localeCurrency: order.currencyCode }}\r\n </td>\r\n <td class=\"align-middle quantity\">\r\n <div class=\"prorated-wrapper\">\r\n {{ line.proratedUnitPriceWithTax | localeCurrency: order.currencyCode }}\r\n <ng-container *ngIf=\"line.discounts as discounts\">\r\n <vdr-dropdown *ngIf=\"discounts.length\">\r\n <div class=\"promotions-label\" vdrDropdownTrigger>\r\n <button class=\"icon-button\"><clr-icon shape=\"info\"></clr-icon></button>\r\n </div>\r\n <vdr-dropdown-menu>\r\n <div class=\"line-promotion\" *ngFor=\"let discount of discounts\">\r\n {{ discount.description }}\r\n <div class=\"promotion-amount\">\r\n {{\r\n discount.amount / 100 / line.quantity\r\n | number: '1.0-2'\r\n | currency: order.currencyCode\r\n }}\r\n </div>\r\n </div>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </ng-container>\r\n </div>\r\n </td>\r\n <td class=\"align-middle quantity-col\">\r\n <input\r\n *ngIf=\"lineCanBeRefundedOrCancelled(line)\"\r\n [(ngModel)]=\"lineQuantities[line.id].quantity\"\r\n type=\"number\"\r\n [max]=\"line.quantity\"\r\n min=\"0\"\r\n (input)=\"handleZeroQuantity(lineQuantities[line.id])\"\r\n />\r\n </td>\r\n <td class=\"align-middle\">\r\n <div class=\"cancel-checkbox-wrapper\">\r\n <input\r\n type=\"checkbox\"\r\n *ngIf=\"lineCanBeRefundedOrCancelled(line)\"\r\n clrCheckbox\r\n [disabled]=\"0 === lineQuantities[line.id].quantity\"\r\n [(ngModel)]=\"lineQuantities[line.id].refund\"\r\n />\r\n </div>\r\n </td>\r\n <td class=\"align-middle\">\r\n <div class=\"cancel-checkbox-wrapper\">\r\n <input\r\n type=\"checkbox\"\r\n *ngIf=\"lineCanBeRefundedOrCancelled(line)\"\r\n clrCheckbox\r\n [disabled]=\"0 === lineQuantities[line.id].quantity\"\r\n [(ngModel)]=\"lineQuantities[line.id].cancel\"\r\n />\r\n </div>\r\n </td>\r\n </tr>\r\n </table>\r\n </div>\r\n <div class=\"refund-details mt-4\" [class.faded]=\"!isRefunding() && !isCancelling()\">\r\n <div>\r\n <label class=\"clr-control-label\">{{ 'order.refund-cancellation-reason' | translate }}</label>\r\n <ng-select\r\n [disabled]=\"!isRefunding() && !isCancelling()\"\r\n [items]=\"reasons\"\r\n bindLabel=\"name\"\r\n autofocus\r\n [placeholder]=\"'order.refund-cancellation-reason-required' | translate\"\r\n bindValue=\"id\"\r\n [addTag]=\"true\"\r\n [(ngModel)]=\"reason\"\r\n ></ng-select>\r\n </div>\r\n\r\n <div>\r\n <clr-select-container>\r\n <label>{{ 'order.payment-to-refund' | translate }}</label>\r\n <select clrSelect name=\"options\" [(ngModel)]=\"selectedPayment\" [disabled]=\"!isRefunding()\">\r\n <option\r\n *ngFor=\"let payment of settledPayments\"\r\n [ngValue]=\"payment\"\r\n [disabled]=\"payment.state !== 'Settled'\"\r\n >\r\n #{{ payment.id }} {{ payment.method }}:\r\n {{ payment.amount | localeCurrency: order.currencyCode }}\r\n </option>\r\n </select>\r\n </clr-select-container>\r\n\r\n <clr-checkbox-wrapper>\r\n <input type=\"checkbox\" clrCheckbox [(ngModel)]=\"refundShipping\" [disabled]=\"!isRefunding()\" />\r\n <label>\r\n {{ 'order.refund-shipping' | translate }} ({{\r\n order.shippingWithTax | localeCurrency: order.currencyCode\r\n }})\r\n </label>\r\n </clr-checkbox-wrapper>\r\n <clr-input-container>\r\n <label>{{ 'order.refund-adjustment' | translate }}</label>\r\n <vdr-currency-input\r\n clrInput\r\n [disabled]=\"!isRefunding()\"\r\n [currencyCode]=\"order.currencyCode\"\r\n [(ngModel)]=\"adjustment\"\r\n ></vdr-currency-input>\r\n </clr-input-container>\r\n <div class=\"totals\" [class.disabled]=\"!isRefunding()\">\r\n <div class=\"order-total\">\r\n {{ 'order.payment-amount' | translate }}:\r\n {{ selectedPayment.amount | localeCurrency: order.currencyCode }}\r\n </div>\r\n <div class=\"refund-total\">\r\n {{ 'order.refund-total' | translate }}:\r\n {{ refundTotal | localeCurrency: order.currencyCode }}\r\n </div>\r\n <div class=\"refund-total-error\" *ngIf=\"refundTotal < 0 || settledPaymentsTotal < refundTotal\">\r\n {{\r\n 'order.refund-total-error'\r\n | translate\r\n : {\r\n min: 0 | currency: order.currencyCode,\r\n max: settledPaymentsTotal | localeCurrency: order.currencyCode\r\n }\r\n }}\r\n </div>\r\n <div class=\"refund-total-warning\" *ngIf=\"selectedPayment.amount < refundTotal\">\r\n {{ 'order.refund-total-warning' | translate }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\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)=\"select()\" [disabled]=\"!canSubmit()\" class=\"btn btn-primary\">\r\n <ng-container *ngIf=\"isRefunding(); else cancelling\">\r\n {{\r\n 'order.refund-with-amount'\r\n | translate: { amount: refundTotal | localeCurrency: order.currencyCode }\r\n }}\r\n </ng-container>\r\n <ng-template #cancelling>\r\n {{ 'order.cancel-selected-items' | translate }}\r\n </ng-template>\r\n </button>\r\n</ng-template>\r\n", styles: [":host{height:100%;display:flex;min-height:64vh}.refund-wrapper{flex:1;flex-direction:column}.refund-wrapper .order-table{flex:1;overflow-y:auto}.refund-wrapper .order-table table{margin-top:0}.refund-wrapper tr.ignore{color:var(--color-grey-300)}.quantity-col{background-color:var(--color-warning-100)}.cancel-checkbox-wrapper{display:flex;align-items:center;justify-content:center}clr-checkbox-wrapper{margin-top:12px;margin-bottom:12px;display:block}.refund-details{display:flex;justify-content:space-between}.refund-details.faded{opacity:.5}.totals{margin-top:48px}.totals .refund-total{font-size:18px}.totals .refund-total-error{color:var(--color-error-500)}.totals .refund-total-warning{color:var(--color-warning-600);max-width:250px}.totals.disabled{color:var(--color-grey-300)}.prorated-wrapper{display:flex;justify-content:center}.line-promotion{display:flex;justify-content:space-between;font-size:12px;padding:3px 6px}.line-promotion .promotion-amount{margin-inline-start:12px}\n"] }]
|
|
171
|
+
args: [{ selector: 'vdr-refund-order-dialog', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-template vdrDialogTitle>{{ 'order.refund-and-cancel-order' | translate }}</ng-template>\r\n\r\n<div class=\"refund-wrapper\">\r\n <vdr-data-table-2 id=\"refund-order\" [items]=\"order.lines\">\r\n <!-- Here we define all the available columns -->\r\n <vdr-dt2-column id=\"id\" [heading]=\"'common.id' | translate\" [hiddenByDefault]=\"true\">\r\n <ng-template let-line=\"item\">\r\n {{ line.id }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column id=\"created-at\" [heading]=\"'common.created-at' | translate\" [hiddenByDefault]=\"true\">\r\n <ng-template let-line=\"item\">\r\n {{ line.createdAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column id=\"updated-at\" [heading]=\"'common.updated-at' | translate\" [hiddenByDefault]=\"true\">\r\n <ng-template let-line=\"item\">\r\n {{ line.updatedAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.image' | translate\" id=\"image\">\r\n <ng-template let-line=\"item\">\r\n <div class=\"image-placeholder\">\r\n <img\r\n *ngIf=\"line.featuredAsset as asset; else imagePlaceholder\"\r\n [src]=\"asset | assetPreview : 'tiny'\"\r\n />\r\n <ng-template #imagePlaceholder>\r\n <div class=\"placeholder\">\r\n <clr-icon shape=\"image\" size=\"48\"></clr-icon>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column id=\"product-name\" [heading]=\"'order.product-name' | translate\" [optional]=\"false\">\r\n <ng-template let-line=\"item\">\r\n {{ line.productVariant.name }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column id=\"product-sku\" [heading]=\"'order.product-sku' | translate\">\r\n <ng-template let-line=\"item\">\r\n {{ line.productVariant.sku }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column id=\"unit-price\" [heading]=\"'order.unit-price' | translate\" [hiddenByDefault]=\"true\">\r\n <ng-template let-line=\"item\">\r\n {{ line.unitPriceWithTax | localeCurrency : order.currencyCode }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column id=\"prorated-unit-price\" [heading]=\"'order.prorated-unit-price' | translate\">\r\n <ng-template let-line=\"item\">\r\n {{ line.unitPriceWithTax | localeCurrency : order.currencyCode }}\r\n <ng-container *ngIf=\"line.discounts as discounts\">\r\n <vdr-dropdown *ngIf=\"discounts.length\">\r\n <div class=\"promotions-label\" vdrDropdownTrigger>\r\n <button class=\"icon-button\"><clr-icon shape=\"info\"></clr-icon></button>\r\n </div>\r\n <vdr-dropdown-menu>\r\n <div class=\"line-promotion\" *ngFor=\"let discount of discounts\">\r\n {{ discount.description }}\r\n <div class=\"promotion-amount\">\r\n {{\r\n discount.amount / 100 / line.quantity\r\n | number : '1.0-2'\r\n | currency : order.currencyCode\r\n }}\r\n </div>\r\n </div>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </ng-container>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column id=\"quantity\" [heading]=\"'order.quantity' | translate\">\r\n <ng-template let-line=\"item\">\r\n {{ line.quantity }}\r\n <vdr-line-refunds [line]=\"line\" [payments]=\"order.payments\"></vdr-line-refunds>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column id=\"refund-quantity\" [heading]=\"'order.refund' | translate\" [optional]=\"false\">\r\n <ng-template let-line=\"item\">\r\n <input\r\n *ngIf=\"lineCanBeRefundedOrCancelled(line)\"\r\n [ngModel]=\"lineQuantities[line.id].quantity\"\r\n type=\"number\"\r\n [max]=\"line.quantity\"\r\n min=\"0\"\r\n (ngModelChange)=\"onRefundQuantityChange(line.id, $event)\"\r\n />\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column id=\"cancel\" [heading]=\"'order.return-to-stock' | translate\" [optional]=\"false\">\r\n <ng-template let-line=\"item\">\r\n <div class=\"cancel-checkbox-wrapper\">\r\n <label class=\"flex center\">\r\n <input\r\n type=\"checkbox\"\r\n *ngIf=\"lineCanBeRefundedOrCancelled(line)\"\r\n clrCheckbox\r\n [disabled]=\"0 === lineQuantities[line.id].quantity\"\r\n [(ngModel)]=\"lineQuantities[line.id].cancel\"\r\n />\r\n <span class=\"ml-1\">{{ 'order.return-to-stock' | translate }}</span></label\r\n >\r\n </div>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n </vdr-data-table-2>\r\n\r\n <div class=\"refund-details mt-4\">\r\n <div>\r\n <vdr-card>\r\n <label class=\"flex mb-2\" *ngFor=\"let shippingLine of order.shippingLines\">\r\n <input type=\"checkbox\" clrCheckbox (change)=\"toggleShippingRefund(shippingLine.id)\" />\r\n <div class=\"ml-1\">\r\n {{ 'order.refund-shipping' | translate }}\r\n <span>{{ shippingLine.shippingMethod.name }}:</span>\r\n <span class=\"ml-1\"\r\n >{{ shippingLine.discountedPriceWithTax | localeCurrency : order.currencyCode }}\r\n </span>\r\n </div></label\r\n >\r\n <vdr-form-field [label]=\"'order.refund-cancellation-reason' | translate\" class=\"mb-2\">\r\n <ng-select\r\n [items]=\"reasons\"\r\n bindLabel=\"name\"\r\n autofocus\r\n [placeholder]=\"'order.refund-cancellation-reason-required' | translate\"\r\n bindValue=\"id\"\r\n [addTag]=\"true\"\r\n [(ngModel)]=\"reason\"\r\n ></ng-select>\r\n </vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"'order.refund-total' | translate\"\r\n [readOnlyToggle]=\"true\"\r\n (readOnlyToggleChange)=\"manuallySetRefundTotal = !$event\"\r\n >\r\n <vdr-currency-input\r\n [readonly]=\"!manuallySetRefundTotal\"\r\n [currencyCode]=\"order.currencyCode\"\r\n [(ngModel)]=\"refundTotal\"\r\n (ngModelChange)=\"updateRefundTotal()\"\r\n ></vdr-currency-input>\r\n </vdr-form-field>\r\n </vdr-card>\r\n </div>\r\n <div class=\"\">\r\n <vdr-payment-for-refund-selector\r\n [refundablePayments]=\"refundablePayments\"\r\n (paymentSelected)=\"onPaymentSelected($event.payment, $event.selected)\"\r\n [order]=\"order\"\r\n ></vdr-payment-for-refund-selector>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template vdrDialogButtons>\r\n <div>\r\n <div class=\"errors\">\r\n <clr-alert\r\n *ngIf=\"refundTotal < 0 || totalRefundableAmount < refundTotal\"\r\n [clrAlertType]=\"'danger'\"\r\n [clrAlertClosable]=\"false\"\r\n >\r\n <clr-alert-item>\r\n {{\r\n 'order.refund-total-error'\r\n | translate\r\n : {\r\n min: 0 | currency : order.currencyCode,\r\n max: totalRefundableAmount | localeCurrency : order.currencyCode\r\n }\r\n }}\r\n </clr-alert-item>\r\n </clr-alert>\r\n <clr-alert\r\n *ngIf=\"amountToRefundTotal < refundTotal || refundTotal < amountToRefundTotal\"\r\n [clrAlertType]=\"'danger'\"\r\n [clrAlertClosable]=\"false\"\r\n >\r\n <clr-alert-item>\r\n {{ 'order.refund-total-warning' | translate }}\r\n </clr-alert-item>\r\n </clr-alert>\r\n <clr-alert\r\n *ngIf=\"amountToRefundTotal && !reason\"\r\n [clrAlertType]=\"'danger'\"\r\n [clrAlertClosable]=\"false\"\r\n >\r\n <clr-alert-item>\r\n {{ 'order.refund-cancellation-reason-required' | translate }}\r\n </clr-alert-item>\r\n </clr-alert>\r\n </div>\r\n <div class=\"modal-buttons\">\r\n <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\r\n <button type=\"submit\" (click)=\"select()\" [disabled]=\"!canSubmit()\" class=\"btn btn-primary\">\r\n {{\r\n 'order.refund-with-amount'\r\n | translate : { amount: amountToRefundTotal | localeCurrency : order.currencyCode }\r\n }}\r\n </button>\r\n </div>\r\n </div>\r\n</ng-template>\r\n", styles: [":host{height:100%;display:flex;flex-direction:column;min-height:64vh}.refund-wrapper{flex:1;flex-direction:column}.refund-wrapper .order-table{flex:1;overflow-y:auto}.refund-wrapper .order-table table{margin-top:0}.refund-wrapper tr.ignore{color:var(--color-grey-300)}::ng-deep .refund-wrapper .table-wrapper{max-width:initial!important}.quantity-col{background-color:var(--color-warning-100)}.cancel-checkbox-wrapper{display:flex;align-items:center;justify-content:center}clr-checkbox-wrapper{margin-top:12px;margin-bottom:12px;display:block}.refund-details{display:flex;flex-direction:column;padding-bottom:var(--space-unit);gap:calc(var(--space-unit) * 2);justify-content:space-between}@media screen and (min-width: 992px){.refund-details{flex-direction:row}}.refund-details vdr-card.unselected{opacity:.8}.refund-details>*{flex:1}.errors{display:flex;justify-content:flex-end;gap:calc(var(--space-unit) * 2);margin:calc(var(--space-unit) * 2) 0}.prorated-wrapper{display:flex;justify-content:center}.line-promotion{display:flex;justify-content:space-between;font-size:12px;padding:3px 6px}.line-promotion .promotion-amount{margin-inline-start:12px}vdr-card.faded{opacity:.8}.modal-buttons{display:flex;justify-content:flex-end;gap:.6rem;gap:var(--clr-modal-footer-gap, .6rem)}\n"] }]
|
|
130
172
|
}], ctorParameters: function () { return [{ type: i1.I18nService }]; } });
|
|
131
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmdW5kLW9yZGVyLWRpYWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL29yZGVyL3NyYy9jb21wb25lbnRzL3JlZnVuZC1vcmRlci1kaWFsb2cvcmVmdW5kLW9yZGVyLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL29yZGVyL3NyYy9jb21wb25lbnRzL3JlZnVuZC1vcmRlci1kaWFsb2cvcmVmdW5kLW9yZGVyLWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQyxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDdEUsT0FBTyxFQUdILFlBQVksR0FNZixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQzs7Ozs7Ozs7O0FBVzNELE1BQU0sT0FBTywwQkFBMEI7SUFnQm5DLFlBQW9CLFdBQXdCO1FBQXhCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBUjVDLG1CQUFjLEdBQXdDLEVBQUUsQ0FBQztRQUN6RCxtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUN2QixlQUFVLEdBQUcsQ0FBQyxDQUFDO1FBQ2YsWUFBTyxHQUFHLFlBQVksRUFBRSxDQUFDLG1CQUFtQixJQUFJO1lBQzVDLENBQUMsQ0FBQyxzQ0FBc0MsQ0FBQztZQUN6QyxDQUFDLENBQUMsbUNBQW1DLENBQUM7U0FDekMsQ0FBQztRQUdFLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7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QUM7U0FDTjtJQUNMLENBQUM7SUFFRCxNQUFNO1FBQ0YsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxRQUEwQztRQUNoRSxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQzthQUNyQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3BFLEdBQUcsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzNCLFdBQVc7WUFDWCxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7U0FDMUIsQ0FBQyxDQUFDLENBQUM7SUFDWixDQUFDOzhHQXhKUSwwQkFBMEI7a0dBQTFCLDBCQUEwQiwrREN2QnZDLHNpU0FrTEE7OzJGRDNKYSwwQkFBMEI7a0JBTnRDLFNBQVM7K0JBQ0kseUJBQXlCLG1CQUdsQix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IG1hcmtlciBhcyBfIH0gZnJvbSAnQGJpZXNiamVyZy9uZ3gtdHJhbnNsYXRlLWV4dHJhY3QtbWFya2VyJztcclxuaW1wb3J0IHtcclxuICAgIENhbmNlbE9yZGVySW5wdXQsXHJcbiAgICBEaWFsb2csXHJcbiAgICBnZXRBcHBDb25maWcsXHJcbiAgICBJMThuU2VydmljZSxcclxuICAgIE9yZGVyRGV0YWlsRnJhZ21lbnQsXHJcbiAgICBPcmRlckxpbmVJbnB1dCxcclxuICAgIFBheW1lbnRXaXRoUmVmdW5kc0ZyYWdtZW50LFxyXG4gICAgUmVmdW5kT3JkZXJJbnB1dCxcclxufSBmcm9tICdAdmVuZHVyZS9hZG1pbi11aS9jb3JlJztcclxuaW1wb3J0IHsgc3VtbWF0ZSB9IGZyb20gJ0B2ZW5kdXJlL2NvbW1vbi9saWIvc2hhcmVkLXV0aWxzJztcclxuXHJcbnR5cGUgU2VsZWN0aW9uTGluZSA9IHsgcXVhbnRpdHk6IG51bWJlcjsgcmVmdW5kOiBib29sZWFuOyBjYW5jZWw6IGJvb2xlYW4gfTtcclxudHlwZSBQYXltZW50ID0gTm9uTnVsbGFibGU8T3JkZXJEZXRhaWxGcmFnbWVudFsncGF5bWVudHMnXT5bbnVtYmVyXTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICd2ZHItcmVmdW5kLW9yZGVyLWRpYWxvZycsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vcmVmdW5kLW9yZGVyLWRpYWxvZy5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9yZWZ1bmQtb3JkZXItZGlhbG9nLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxufSlcclxuZXhwb3J0IGNsYXNzIFJlZnVuZE9yZGVyRGlhbG9nQ29tcG9uZW50XHJcbiAgICBpbXBsZW1lbnRzIE9uSW5pdCwgRGlhbG9nPHsgY2FuY2VsOiBDYW5jZWxPcmRlcklucHV0OyByZWZ1bmQ6IFJlZnVuZE9yZGVySW5wdXQgfT5cclxue1xyXG4gICAgb3JkZXI6IE9yZGVyRGV0YWlsRnJhZ21lbnQ7XHJcbiAgICByZXNvbHZlV2l0aDogKHJlc3VsdD86IHsgY2FuY2VsOiBDYW5jZWxPcmRlcklucHV0OyByZWZ1bmQ6IFJlZnVuZE9yZGVySW5wdXQgfSkgPT4gdm9pZDtcclxuICAgIHJlYXNvbjogc3RyaW5nO1xyXG4gICAgc2V0dGxlZFBheW1lbnRzOiBQYXltZW50W107XHJcbiAgICBzZWxlY3RlZFBheW1lbnQ6IFBheW1lbnQ7XHJcbiAgICBsaW5lUXVhbnRpdGllczogeyBbbGluZUlkOiBzdHJpbmddOiBTZWxlY3Rpb25MaW5lIH0gPSB7fTtcclxuICAgIHJlZnVuZFNoaXBwaW5nID0gZmFsc2U7XHJcbiAgICBhZGp1c3RtZW50ID0gMDtcclxuICAgIHJlYXNvbnMgPSBnZXRBcHBDb25maWcoKS5jYW5jZWxsYXRpb25SZWFzb25zID8/IFtcclxuICAgICAgICBfKCdvcmRlci5yZWZ1bmQtcmVhc29uLWN1c3RvbWVyLXJlcXVlc3QnKSxcclxuICAgICAgICBfKCdvcmRlci5yZWZ1bmQtcmVhc29uLW5vdC1hdmFpbGFibGUnKSxcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBpMThuU2VydmljZTogSTE4blNlcnZpY2UpIHtcclxuICAgICAgICB0aGlzLnJlYXNvbnMgPSB0aGlzLnJlYXNvbnMubWFwKHIgPT4gdGhpcy5pMThuU2VydmljZS50cmFuc2xhdGUocikpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCByZWZ1bmRUb3RhbCgpOiBudW1iZXIge1xyXG4gICAgICAgIGNvbnN0IGl0ZW1Ub3RhbCA9IHRoaXMub3JkZXIubGluZXMucmVkdWNlKCh0b3RhbCwgbGluZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBsaW5lUmVmID0gdGhpcy5saW5lUXVhbnRpdGllc1tsaW5lLmlkXTtcclxuICAgICAgICAgICAgY29uc3QgcmVmdW5kQ291bnQgPSAobGluZVJlZi5yZWZ1bmQgJiYgbGluZVJlZi5xdWFudGl0eSkgfHwgMDtcclxuICAgICAgICAgICAgcmV0dXJuIHRvdGFsICsgbGluZS5wcm9yYXRlZFVuaXRQcmljZVdpdGhUYXggKiByZWZ1bmRDb3VudDtcclxuICAgICAgICB9LCAwKTtcclxuICAgICAgICByZXR1cm4gaXRlbVRvdGFsICsgKHRoaXMucmVmdW5kU2hpcHBpbmcgPyB0aGlzLm9yZGVyLnNoaXBwaW5nV2l0aFRheCA6IDApICsgdGhpcy5hZGp1c3RtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBzZXR0bGVkUGF5bWVudHNUb3RhbCgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNldHRsZWRQYXltZW50c1xyXG4gICAgICAgICAgICAubWFwKHBheW1lbnQgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcGF5bWVudFRvdGFsID0gcGF5bWVudC5hbW91bnQ7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhbHJlYWR5UmVmdW5kZWRUb3RhbCA9IHN1bW1hdGUoXHJcbiAgICAgICAgICAgICAgICAgICAgcGF5bWVudC5yZWZ1bmRzLmZpbHRlcihyID0+IHIuc3RhdGUgIT09ICdGYWlsZWQnKSBhcyBBcnJheTxcclxuICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWlyZWQ8UGF5bWVudFsncmVmdW5kcyddW251bWJlcl0+XHJcbiAgICAgICAgICAgICAgICAgICAgPixcclxuICAgICAgICAgICAgICAgICAgICAndG90YWwnLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBwYXltZW50VG90YWwgLSBhbHJlYWR5UmVmdW5kZWRUb3RhbDtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnJlZHVjZSgoc3VtLCBhbW91bnQpID0+IHN1bSArIGFtb3VudCwgMCk7XHJcbiAgICB9XHJcblxyXG4gICAgbGluZUNhbkJlUmVmdW5kZWRPckNhbmNlbGxlZChsaW5lOiBPcmRlckRldGFpbEZyYWdtZW50WydsaW5lcyddW251bWJlcl0pOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCByZWZ1bmRlZENvdW50ID1cclxuICAgICAgICAgICAgdGhpcy5vcmRlci5wYXltZW50c1xyXG4gICAgICAgICAgICAgICAgPy5yZWR1Y2UoXHJcbiAgICAgICAgICAgICAgICAgICAgKGFsbCwgcGF5bWVudCkgPT4gWy4uLmFsbCwgLi4ucGF5bWVudC5yZWZ1bmRzXSxcclxuICAgICAgICAgICAgICAgICAgICBbXSBhcyBQYXltZW50V2l0aFJlZnVuZHNGcmFnbWVudFsncmVmdW5kcyddLFxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgLmZpbHRlcihyZWZ1bmQgPT4gcmVmdW5kLnN0YXRlICE9PSAnRmFpbGVkJylcclxuICAgICAgICAgICAgICAgIC5yZWR1Y2UoXHJcbiAgICAgICAgICAgICAgICAgICAgKGFsbCwgcmVmdW5kKSA9PiBbLi4uYWxsLCAuLi5yZWZ1bmQubGluZXNdLFxyXG4gICAgICAgICAgICAgICAgICAgIFtdIGFzIEFycmF5PHsgb3JkZXJMaW5lSWQ6IHN0cmluZzsgcXVhbnRpdHk6IG51bWJlciB9PixcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIC5maWx0ZXIocmVmdW5kTGluZSA9PiByZWZ1bmRMaW5lLm9yZGVyTGluZUlkID09PSBsaW5lLmlkKVxyXG4gICAgICAgICAgICAgICAgLnJlZHVjZSgoc3VtLCByZWZ1bmRMaW5lKSA9PiBzdW0gKyByZWZ1bmRMaW5lLnF1YW50aXR5LCAwKSA/PyAwO1xyXG5cclxuICAgICAgICByZXR1cm4gcmVmdW5kZWRDb3VudCA8IGxpbmUub3JkZXJQbGFjZWRRdWFudGl0eTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLmxpbmVRdWFudGl0aWVzID0gdGhpcy5vcmRlci5saW5lcy5yZWR1Y2UoXHJcbiAgICAgICAgICAgIChyZXN1bHQsIGxpbmUpID0+ICh7XHJcbiAgICAgICAgICAgICAgICAuLi5yZXN1bHQsXHJcbiAgICAgICAgICAgICAgICBbbGluZS5pZF06IHtcclxuICAgICAgICAgICAgICAgICAgICBxdWFudGl0eTogMCxcclxuICAgICAgICAgICAgICAgICAgICByZWZ1bmQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIGNhbmNlbDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAge30sXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnNldHRsZWRQYXltZW50cyA9ICh0aGlzLm9yZGVyLnBheW1lbnRzIHx8IFtdKS5maWx0ZXIocCA9PiBwLnN0YXRlID09PSAnU2V0dGxlZCcpO1xyXG4gICAgICAgIGlmICh0aGlzLnNldHRsZWRQYXltZW50cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFBheW1lbnQgPSB0aGlzLnNldHRsZWRQYXltZW50c1swXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlWmVyb1F1YW50aXR5KGxpbmU/OiBTZWxlY3Rpb25MaW5lKSB7XHJcbiAgICAgICAgaWYgKGxpbmU/LnF1YW50aXR5ID09PSAwKSB7XHJcbiAgICAgICAgICAgIGxpbmUuY2FuY2VsID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGxpbmUucmVmdW5kID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlzUmVmdW5kaW5nKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IE9iamVjdC52YWx1ZXModGhpcy5saW5lUXVhbnRpdGllcykucmVkdWNlKFxyXG4gICAgICAgICAgICAoaXNSZWZ1bmRpbmcsIGxpbmUpID0+IGlzUmVmdW5kaW5nIHx8ICgwIDwgbGluZS5xdWFudGl0eSAmJiBsaW5lLnJlZnVuZCksXHJcbiAgICAgICAgICAgIGZhbHNlLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBpc0NhbmNlbGxpbmcoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gT2JqZWN0LnZhbHVlcyh0aGlzLmxpbmVRdWFudGl0aWVzKS5yZWR1Y2UoXHJcbiAgICAgICAgICAgIChpc0NhbmNlbGxpbmcsIGxpbmUpID0+IGlzQ2FuY2VsbGluZyB8fCAoMCA8IGxpbmUucXVhbnRpdHkgJiYgbGluZS5jYW5jZWwpLFxyXG4gICAgICAgICAgICBmYWxzZSxcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgY2FuU3VibWl0KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLmlzUmVmdW5kaW5nKCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuICEhKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFBheW1lbnQgJiZcclxuICAgICAgICAgICAgICAgIHRoaXMucmVhc29uICYmXHJcbiAgICAgICAgICAgICAgICAwIDwgdGhpcy5yZWZ1bmRUb3RhbCAmJlxyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWZ1bmRUb3RhbCA8PSB0aGlzLnNldHRsZWRQYXltZW50c1RvdGFsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzQ2FuY2VsbGluZygpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAhIXRoaXMucmVhc29uO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0KCkge1xyXG4gICAgICAgIGNvbnN0IHBheW1lbnQgPSB0aGlzLnNlbGVjdGVkUGF5bWVudDtcclxuICAgICAgICBpZiAocGF5bWVudCkge1xyXG4gICAgICAgICAgICBjb25zdCByZWZ1bmRMaW5lcyA9IHRoaXMuZ2V0T3JkZXJMaW5lSW5wdXQobGluZSA9PiBsaW5lLnJlZnVuZCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNhbmNlbExpbmVzID0gdGhpcy5nZXRPcmRlckxpbmVJbnB1dChsaW5lID0+IGxpbmUuY2FuY2VsKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucmVzb2x2ZVdpdGgoe1xyXG4gICAgICAgICAgICAgICAgcmVmdW5kOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGluZXM6IHJlZnVuZExpbmVzLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlYXNvbjogdGhpcy5yZWFzb24sXHJcbiAgICAgICAgICAgICAgICAgICAgc2hpcHBpbmc6IHRoaXMucmVmdW5kU2hpcHBpbmcgPyB0aGlzLm9yZGVyLnNoaXBwaW5nV2l0aFRheCA6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgYWRqdXN0bWVudDogdGhpcy5hZGp1c3RtZW50LFxyXG4gICAgICAgICAgICAgICAgICAgIHBheW1lbnRJZDogcGF5bWVudC5pZCxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBjYW5jZWw6IHtcclxuICAgICAgICAgICAgICAgICAgICBsaW5lczogY2FuY2VsTGluZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgb3JkZXJJZDogdGhpcy5vcmRlci5pZCxcclxuICAgICAgICAgICAgICAgICAgICByZWFzb246IHRoaXMucmVhc29uLFxyXG4gICAgICAgICAgICAgICAgICAgIGNhbmNlbFNoaXBwaW5nOiB0aGlzLnJlZnVuZFNoaXBwaW5nLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNhbmNlbCgpIHtcclxuICAgICAgICB0aGlzLnJlc29sdmVXaXRoKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRPcmRlckxpbmVJbnB1dChmaWx0ZXJGbjogKGxpbmU6IFNlbGVjdGlvbkxpbmUpID0+IGJvb2xlYW4pOiBPcmRlckxpbmVJbnB1dFtdIHtcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy5saW5lUXVhbnRpdGllcylcclxuICAgICAgICAgICAgLmZpbHRlcigoW29yZGVyTGluZUlkLCBsaW5lXSkgPT4gMCA8IGxpbmUucXVhbnRpdHkgJiYgZmlsdGVyRm4obGluZSkpXHJcbiAgICAgICAgICAgIC5tYXAoKFtvcmRlckxpbmVJZCwgbGluZV0pID0+ICh7XHJcbiAgICAgICAgICAgICAgICBvcmRlckxpbmVJZCxcclxuICAgICAgICAgICAgICAgIHF1YW50aXR5OiBsaW5lLnF1YW50aXR5LFxyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICB9XHJcbn1cclxuIiwiPG5nLXRlbXBsYXRlIHZkckRpYWxvZ1RpdGxlPnt7ICdvcmRlci5yZWZ1bmQtYW5kLWNhbmNlbC1vcmRlcicgfCB0cmFuc2xhdGUgfX08L25nLXRlbXBsYXRlPlxyXG5cclxuPGRpdiBjbGFzcz1cInJlZnVuZC13cmFwcGVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwib3JkZXItdGFibGVcIj5cclxuICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZVwiPlxyXG4gICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoPjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoPnt7ICdvcmRlci5wcm9kdWN0LW5hbWUnIHwgdHJhbnNsYXRlIH19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICA8dGg+e3sgJ29yZGVyLnByb2R1Y3Qtc2t1JyB8IHRyYW5zbGF0ZSB9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoPnt7ICdvcmRlci5xdWFudGl0eScgfCB0cmFuc2xhdGUgfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aD57eyAnb3JkZXIudW5pdC1wcmljZScgfCB0cmFuc2xhdGUgfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aD57eyAnb3JkZXIucHJvcmF0ZWQtdW5pdC1wcmljZScgfCB0cmFuc2xhdGUgfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aD57eyAnb3JkZXIucXVhbnRpdHknIHwgdHJhbnNsYXRlIH19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICA8dGg+e3sgJ29yZGVyLnJlZnVuZCcgfCB0cmFuc2xhdGUgfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aD57eyAnb3JkZXIuY2FuY2VsJyB8IHRyYW5zbGF0ZSB9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IGxpbmUgb2Ygb3JkZXIubGluZXNcIiBjbGFzcz1cIm9yZGVyLWxpbmVcIj5cclxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImFsaWduLW1pZGRsZSB0aHVtYlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJsaW5lLmZlYXR1cmVkQXNzZXQgfCBhc3NldFByZXZpZXc6ICd0aW55J1wiIC8+XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYWxpZ24tbWlkZGxlIG5hbWVcIj57eyBsaW5lLnByb2R1Y3RWYXJpYW50Lm5hbWUgfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYWxpZ24tbWlkZGxlIHNrdVwiPnt7IGxpbmUucHJvZHVjdFZhcmlhbnQuc2t1IH19PC90ZD5cclxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImFsaWduLW1pZGRsZSBxdWFudGl0eVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGxpbmUucXVhbnRpdHkgfX1cclxuICAgICAgICAgICAgICAgICAgICA8dmRyLWxpbmUtcmVmdW5kcyBbbGluZV09XCJsaW5lXCIgW3BheW1lbnRzXT1cIm9yZGVyLnBheW1lbnRzXCI+PC92ZHItbGluZS1yZWZ1bmRzPlxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImFsaWduLW1pZGRsZSBxdWFudGl0eVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGxpbmUudW5pdFByaWNlV2l0aFRheCB8IGxvY2FsZUN1cnJlbmN5OiBvcmRlci5jdXJyZW5jeUNvZGUgfX1cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJhbGlnbi1taWRkbGUgcXVhbnRpdHlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvcmF0ZWQtd3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBsaW5lLnByb3JhdGVkVW5pdFByaWNlV2l0aFRheCB8IGxvY2FsZUN1cnJlbmN5OiBvcmRlci5jdXJyZW5jeUNvZGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxpbmUuZGlzY291bnRzIGFzIGRpc2NvdW50c1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1kcm9wZG93biAqbmdJZj1cImRpc2NvdW50cy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvbW90aW9ucy1sYWJlbFwiIHZkckRyb3Bkb3duVHJpZ2dlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImljb24tYnV0dG9uXCI+PGNsci1pY29uIHNoYXBlPVwiaW5mb1wiPjwvY2xyLWljb24+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1kcm9wZG93bi1tZW51PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGluZS1wcm9tb3Rpb25cIiAqbmdGb3I9XCJsZXQgZGlzY291bnQgb2YgZGlzY291bnRzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBkaXNjb3VudC5kZXNjcmlwdGlvbiB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb21vdGlvbi1hbW91bnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNjb3VudC5hbW91bnQgLyAxMDAgLyBsaW5lLnF1YW50aXR5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG51bWJlcjogJzEuMC0yJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjdXJyZW5jeTogb3JkZXIuY3VycmVuY3lDb2RlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Zkci1kcm9wZG93bi1tZW51PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC92ZHItZHJvcGRvd24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImFsaWduLW1pZGRsZSBxdWFudGl0eS1jb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJsaW5lQ2FuQmVSZWZ1bmRlZE9yQ2FuY2VsbGVkKGxpbmUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJsaW5lUXVhbnRpdGllc1tsaW5lLmlkXS5xdWFudGl0eVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF4XT1cImxpbmUucXVhbnRpdHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW49XCIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cImhhbmRsZVplcm9RdWFudGl0eShsaW5lUXVhbnRpdGllc1tsaW5lLmlkXSlcIlxyXG4gICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYWxpZ24tbWlkZGxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhbmNlbC1jaGVja2JveC13cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwibGluZUNhbkJlUmVmdW5kZWRPckNhbmNlbGxlZChsaW5lKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHJDaGVja2JveFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIjAgPT09IGxpbmVRdWFudGl0aWVzW2xpbmUuaWRdLnF1YW50aXR5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwibGluZVF1YW50aXRpZXNbbGluZS5pZF0ucmVmdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJhbGlnbi1taWRkbGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FuY2VsLWNoZWNrYm94LXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJsaW5lQ2FuQmVSZWZ1bmRlZE9yQ2FuY2VsbGVkKGxpbmUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsckNoZWNrYm94XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiMCA9PT0gbGluZVF1YW50aXRpZXNbbGluZS5pZF0ucXVhbnRpdHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJsaW5lUXVhbnRpdGllc1tsaW5lLmlkXS5jYW5jZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPC90cj5cclxuICAgICAgICA8L3RhYmxlPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwicmVmdW5kLWRldGFpbHMgbXQtNFwiIFtjbGFzcy5mYWRlZF09XCIhaXNSZWZ1bmRpbmcoKSAmJiAhaXNDYW5jZWxsaW5nKClcIj5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjbHItY29udHJvbC1sYWJlbFwiPnt7ICdvcmRlci5yZWZ1bmQtY2FuY2VsbGF0aW9uLXJlYXNvbicgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxyXG4gICAgICAgICAgICA8bmctc2VsZWN0XHJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWlzUmVmdW5kaW5nKCkgJiYgIWlzQ2FuY2VsbGluZygpXCJcclxuICAgICAgICAgICAgICAgIFtpdGVtc109XCJyZWFzb25zXCJcclxuICAgICAgICAgICAgICAgIGJpbmRMYWJlbD1cIm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgYXV0b2ZvY3VzXHJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ29yZGVyLnJlZnVuZC1jYW5jZWxsYXRpb24tcmVhc29uLXJlcXVpcmVkJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICBiaW5kVmFsdWU9XCJpZFwiXHJcbiAgICAgICAgICAgICAgICBbYWRkVGFnXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyZWFzb25cIlxyXG4gICAgICAgICAgICA+PC9uZy1zZWxlY3Q+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgIDxjbHItc2VsZWN0LWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbD57eyAnb3JkZXIucGF5bWVudC10by1yZWZ1bmQnIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xyU2VsZWN0IG5hbWU9XCJvcHRpb25zXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZFBheW1lbnRcIiBbZGlzYWJsZWRdPVwiIWlzUmVmdW5kaW5nKClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBwYXltZW50IG9mIHNldHRsZWRQYXltZW50c1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1ZhbHVlXT1cInBheW1lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwicGF5bWVudC5zdGF0ZSAhPT0gJ1NldHRsZWQnXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICN7eyBwYXltZW50LmlkIH19IHt7IHBheW1lbnQubWV0aG9kIH19OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBwYXltZW50LmFtb3VudCB8IGxvY2FsZUN1cnJlbmN5OiBvcmRlci5jdXJyZW5jeUNvZGUgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICA8L2Nsci1zZWxlY3QtY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgPGNsci1jaGVja2JveC13cmFwcGVyPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsckNoZWNrYm94IFsobmdNb2RlbCldPVwicmVmdW5kU2hpcHBpbmdcIiBbZGlzYWJsZWRdPVwiIWlzUmVmdW5kaW5nKClcIiAvPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7ICdvcmRlci5yZWZ1bmQtc2hpcHBpbmcnIHwgdHJhbnNsYXRlIH19ICh7e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcmRlci5zaGlwcGluZ1dpdGhUYXggfCBsb2NhbGVDdXJyZW5jeTogb3JkZXIuY3VycmVuY3lDb2RlXHJcbiAgICAgICAgICAgICAgICAgICAgfX0pXHJcbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICA8L2Nsci1jaGVja2JveC13cmFwcGVyPlxyXG4gICAgICAgICAgICA8Y2xyLWlucHV0LWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbD57eyAnb3JkZXIucmVmdW5kLWFkanVzdG1lbnQnIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDx2ZHItY3VycmVuY3ktaW5wdXRcclxuICAgICAgICAgICAgICAgICAgICBjbHJJbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhaXNSZWZ1bmRpbmcoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2N1cnJlbmN5Q29kZV09XCJvcmRlci5jdXJyZW5jeUNvZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiYWRqdXN0bWVudFwiXHJcbiAgICAgICAgICAgICAgICA+PC92ZHItY3VycmVuY3ktaW5wdXQ+XHJcbiAgICAgICAgICAgIDwvY2xyLWlucHV0LWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRvdGFsc1wiIFtjbGFzcy5kaXNhYmxlZF09XCIhaXNSZWZ1bmRpbmcoKVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9yZGVyLXRvdGFsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgJ29yZGVyLnBheW1lbnQtYW1vdW50JyB8IHRyYW5zbGF0ZSB9fTpcclxuICAgICAgICAgICAgICAgICAgICB7eyBzZWxlY3RlZFBheW1lbnQuYW1vdW50IHwgbG9jYWxlQ3VycmVuY3k6IG9yZGVyLmN1cnJlbmN5Q29kZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVmdW5kLXRvdGFsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgJ29yZGVyLnJlZnVuZC10b3RhbCcgfCB0cmFuc2xhdGUgfX06XHJcbiAgICAgICAgICAgICAgICAgICAge3sgcmVmdW5kVG90YWwgfCBsb2NhbGVDdXJyZW5jeTogb3JkZXIuY3VycmVuY3lDb2RlIH19XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWZ1bmQtdG90YWwtZXJyb3JcIiAqbmdJZj1cInJlZnVuZFRvdGFsIDwgMCB8fCBzZXR0bGVkUGF5bWVudHNUb3RhbCA8IHJlZnVuZFRvdGFsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ29yZGVyLnJlZnVuZC10b3RhbC1lcnJvcidcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluOiAwIHwgY3VycmVuY3k6IG9yZGVyLmN1cnJlbmN5Q29kZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXg6IHNldHRsZWRQYXltZW50c1RvdGFsIHwgbG9jYWxlQ3VycmVuY3k6IG9yZGVyLmN1cnJlbmN5Q29kZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWZ1bmQtdG90YWwtd2FybmluZ1wiICpuZ0lmPVwic2VsZWN0ZWRQYXltZW50LmFtb3VudCA8IHJlZnVuZFRvdGFsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgJ29yZGVyLnJlZnVuZC10b3RhbC13YXJuaW5nJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPG5nLXRlbXBsYXRlIHZkckRpYWxvZ0J1dHRvbnM+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0blwiIChjbGljayk9XCJjYW5jZWwoKVwiPnt7ICdjb21tb24uY2FuY2VsJyB8IHRyYW5zbGF0ZSB9fTwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgKGNsaWNrKT1cInNlbGVjdCgpXCIgW2Rpc2FibGVkXT1cIiFjYW5TdWJtaXQoKVwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzUmVmdW5kaW5nKCk7IGVsc2UgY2FuY2VsbGluZ1wiPlxyXG4gICAgICAgICAgICB7e1xyXG4gICAgICAgICAgICAgICAgJ29yZGVyLnJlZnVuZC13aXRoLWFtb3VudCdcclxuICAgICAgICAgICAgICAgICAgICB8IHRyYW5zbGF0ZTogeyBhbW91bnQ6IHJlZnVuZFRvdGFsIHwgbG9jYWxlQ3VycmVuY3k6IG9yZGVyLmN1cnJlbmN5Q29kZSB9XHJcbiAgICAgICAgICAgIH19XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICNjYW5jZWxsaW5nPlxyXG4gICAgICAgICAgICB7eyAnb3JkZXIuY2FuY2VsLXNlbGVjdGVkLWl0ZW1zJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L2J1dHRvbj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuIl19
|
|
173
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmdW5kLW9yZGVyLWRpYWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL29yZGVyL3NyYy9jb21wb25lbnRzL3JlZnVuZC1vcmRlci1kaWFsb2cvcmVmdW5kLW9yZGVyLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL29yZGVyL3NyYy9jb21wb25lbnRzL3JlZnVuZC1vcmRlci1kaWFsb2cvcmVmdW5kLW9yZGVyLWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBRTNFLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQyxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDdEUsT0FBTyxFQUdILFlBQVksR0FNZixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMzRCxPQUFPLEVBQUUscUJBQXFCLEVBQXFCLE1BQU0sc0NBQXNDLENBQUM7Ozs7Ozs7Ozs7QUFVaEcsTUFBTSxPQUFPLDBCQUEwQjtJQWdCbkMsWUFBb0IsV0FBd0I7UUFBeEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFWNUMsbUJBQWMsR0FBd0MsRUFBRSxDQUFDO1FBQ3pELHVCQUFrQixHQUF3QixFQUFFLENBQUM7UUFDN0MsMEJBQXFCLEdBQWEsRUFBRSxDQUFDO1FBQ3JDLFlBQU8sR0FBRyxZQUFZLEVBQUUsQ0FBQyxtQkFBbUIsSUFBSTtZQUM1QyxDQUFDLENBQUMsc0NBQXNDLENBQUM7WUFDekMsQ0FBQyxDQUFDLG1DQUFtQyxDQUFDO1NBQ3pDLENBQUM7UUFDRiwyQkFBc0IsR0FBRyxLQUFLLENBQUM7UUFDL0IsZ0JBQVcsR0FBRyxDQUFDLENBQUM7UUFHWixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUks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LDBCQUEwQjtrQkFOdEMsU0FBUzsrQkFDSSx5QkFBeUIsbUJBR2xCLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IG1hcmtlciBhcyBfIH0gZnJvbSAnQGJpZXNiamVyZy9uZ3gtdHJhbnNsYXRlLWV4dHJhY3QtbWFya2VyJztcclxuaW1wb3J0IHtcclxuICAgIENhbmNlbE9yZGVySW5wdXQsXHJcbiAgICBEaWFsb2csXHJcbiAgICBnZXRBcHBDb25maWcsXHJcbiAgICBJMThuU2VydmljZSxcclxuICAgIE9yZGVyRGV0YWlsRnJhZ21lbnQsXHJcbiAgICBPcmRlckxpbmVJbnB1dCxcclxuICAgIFBheW1lbnRXaXRoUmVmdW5kc0ZyYWdtZW50LFxyXG4gICAgUmVmdW5kT3JkZXJJbnB1dCxcclxufSBmcm9tICdAdmVuZHVyZS9hZG1pbi11aS9jb3JlJztcclxuaW1wb3J0IHsgc3VtbWF0ZSB9IGZyb20gJ0B2ZW5kdXJlL2NvbW1vbi9saWIvc2hhcmVkLXV0aWxzJztcclxuaW1wb3J0IHsgZ2V0UmVmdW5kYWJsZVBheW1lbnRzLCBSZWZ1bmRhYmxlUGF5bWVudCB9IGZyb20gJy4uLy4uL2NvbW1vbi9nZXQtcmVmdW5kYWJsZS1wYXltZW50cyc7XHJcblxyXG50eXBlIFNlbGVjdGlvbkxpbmUgPSB7IHF1YW50aXR5OiBudW1iZXI7IGNhbmNlbDogYm9vbGVhbiB9O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3Zkci1yZWZ1bmQtb3JkZXItZGlhbG9nJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9yZWZ1bmQtb3JkZXItZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL3JlZnVuZC1vcmRlci1kaWFsb2cuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUmVmdW5kT3JkZXJEaWFsb2dDb21wb25lbnRcclxuICAgIGltcGxlbWVudHMgT25Jbml0LCBEaWFsb2c8eyBjYW5jZWw6IENhbmNlbE9yZGVySW5wdXQ7IHJlZnVuZHM6IFJlZnVuZE9yZGVySW5wdXRbXSB9PlxyXG57XHJcbiAgICBvcmRlcjogT3JkZXJEZXRhaWxGcmFnbWVudDtcclxuICAgIHJlc29sdmVXaXRoOiAocmVzdWx0PzogeyBjYW5jZWw6IENhbmNlbE9yZGVySW5wdXQ7IHJlZnVuZHM6IFJlZnVuZE9yZGVySW5wdXRbXSB9KSA9PiB2b2lkO1xyXG4gICAgcmVhc29uOiBzdHJpbmc7XHJcbiAgICBsaW5lUXVhbnRpdGllczogeyBbbGluZUlkOiBzdHJpbmddOiBTZWxlY3Rpb25MaW5lIH0gPSB7fTtcclxuICAgIHJlZnVuZGFibGVQYXltZW50czogUmVmdW5kYWJsZVBheW1lbnRbXSA9IFtdO1xyXG4gICAgcmVmdW5kU2hpcHBpbmdMaW5lSWRzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgcmVhc29ucyA9IGdldEFwcENvbmZpZygpLmNhbmNlbGxhdGlvblJlYXNvbnMgPz8gW1xyXG4gICAgICAgIF8oJ29yZGVyLnJlZnVuZC1yZWFzb24tY3VzdG9tZXItcmVxdWVzdCcpLFxyXG4gICAgICAgIF8oJ29yZGVyLnJlZnVuZC1yZWFzb24tbm90LWF2YWlsYWJsZScpLFxyXG4gICAgXTtcclxuICAgIG1hbnVhbGx5U2V0UmVmdW5kVG90YWwgPSBmYWxzZTtcclxuICAgIHJlZnVuZFRvdGFsID0gMDtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGkxOG5TZXJ2aWNlOiBJMThuU2VydmljZSkge1xyXG4gICAgICAgIHRoaXMucmVhc29ucyA9IHRoaXMucmVhc29ucy5tYXAociA9PiB0aGlzLmkxOG5TZXJ2aWNlLnRyYW5zbGF0ZShyKSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHRvdGFsUmVmdW5kYWJsZUFtb3VudCgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiBzdW1tYXRlKHRoaXMucmVmdW5kYWJsZVBheW1lbnRzLCAncmVmdW5kYWJsZUFtb3VudCcpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBhbW91bnRUb1JlZnVuZFRvdGFsKCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmdW5kYWJsZVBheW1lbnRzLnJlZHVjZShcclxuICAgICAgICAgICAgKHRvdGFsLCBwYXltZW50KSA9PiB0b3RhbCArIHBheW1lbnQuYW1vdW50VG9SZWZ1bmRDb250cm9sLnZhbHVlLFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgbGluZUNhbkJlUmVmdW5kZWRPckNhbmNlbGxlZChsaW5lOiBPcmRlckRldGFpbEZyYWdtZW50WydsaW5lcyddW251bWJlcl0pOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCByZWZ1bmRlZENvdW50ID1cclxuICAgICAgICAgICAgdGhpcy5vcmRlci5wYXltZW50c1xyXG4gICAgICAgICAgICAgICAgPy5yZWR1Y2UoXHJcbiAgICAgICAgICAgICAgICAgICAgKGFsbCwgcGF5bWVudCkgPT4gWy4uLmFsbCwgLi4ucGF5bWVudC5yZWZ1bmRzXSxcclxuICAgICAgICAgICAgICAgICAgICBbXSBhcyBQYXltZW50V2l0aFJlZnVuZHNGcmFnbWVudFsncmVmdW5kcyddLFxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgLmZpbHRlcihyZWZ1bmQgPT4gcmVmdW5kLnN0YXRlICE9PSAnRmFpbGVkJylcclxuICAgICAgICAgICAgICAgIC5yZWR1Y2UoXHJcbiAgICAgICAgICAgICAgICAgICAgKGFsbCwgcmVmdW5kKSA9PiBbLi4uYWxsLCAuLi5yZWZ1bmQubGluZXNdLFxyXG4gICAgICAgICAgICAgICAgICAgIFtdIGFzIEFycmF5PHsgb3JkZXJMaW5lSWQ6IHN0cmluZzsgcXVhbnRpdHk6IG51bWJlciB9PixcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIC5maWx0ZXIocmVmdW5kTGluZSA9PiByZWZ1bmRMaW5lLm9yZGVyTGluZUlkID09PSBsaW5lLmlkKVxyXG4gICAgICAgICAgICAgICAgLnJlZHVjZSgoc3VtLCByZWZ1bmRMaW5lKSA9PiBzdW0gKyByZWZ1bmRMaW5lLnF1YW50aXR5LCAwKSA/PyAwO1xyXG5cclxuICAgICAgICByZXR1cm4gcmVmdW5kZWRDb3VudCA8IGxpbmUub3JkZXJQbGFjZWRRdWFudGl0eTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLmxpbmVRdWFudGl0aWVzID0gdGhpcy5vcmRlci5saW5lcy5yZWR1Y2UoXHJcbiAgICAgICAgICAgIChyZXN1bHQsIGxpbmUpID0+ICh7XHJcbiAgICAgICAgICAgICAgICAuLi5yZXN1bHQsXHJcbiAgICAgICAgICAgICAgICBbbGluZS5pZF06IHtcclxuICAgICAgICAgICAgICAgICAgICBxdWFudGl0eTogMCxcclxuICAgICAgICAgICAgICAgICAgICByZWZ1bmQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgY2FuY2VsOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICB7fSxcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMucmVmdW5kYWJsZVBheW1lbnRzID0gZ2V0UmVmdW5kYWJsZVBheW1lbnRzKHRoaXMub3JkZXIucGF5bWVudHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVJlZnVuZFRvdGFsKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5tYW51YWxseVNldFJlZnVuZFRvdGFsKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1Ub3RhbCA9IHRoaXMub3JkZXIubGluZXMucmVkdWNlKCh0b3RhbCwgbGluZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbGluZVJlZiA9IHRoaXMubGluZVF1YW50aXRpZXNbbGluZS5pZF07XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZWZ1bmRDb3VudCA9IGxpbmVSZWYucXVhbnRpdHkgfHwgMDtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0b3RhbCArIGxpbmUucHJvcmF0ZWRVbml0UHJpY2VXaXRoVGF4ICogcmVmdW5kQ291bnQ7XHJcbiAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgICAgICBjb25zdCBzaGlwcGluZ1RvdGFsID0gdGhpcy5vcmRlci5zaGlwcGluZ0xpbmVzLnJlZHVjZSgodG90YWwsIGxpbmUpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlZnVuZFNoaXBwaW5nTGluZUlkcy5pbmNsdWRlcyhsaW5lLmlkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0b3RhbCArIGxpbmUuZGlzY291bnRlZFByaWNlV2l0aFRheDtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRvdGFsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LCAwKTtcclxuICAgICAgICAgICAgdGhpcy5yZWZ1bmRUb3RhbCA9IGl0ZW1Ub3RhbCArIHNoaXBwaW5nVG90YWw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBhbGxvY2F0ZSB0aGUgcmVmdW5kIHRvdGFsIGFjcm9zcyB0aGUgcmVmdW5kYWJsZSBwYXltZW50c1xyXG4gICAgICAgIGNvbnN0IHJlZnVuZGFibGVQYXltZW50cyA9IHRoaXMucmVmdW5kYWJsZVBheW1lbnRzLmZpbHRlcihwID0+IHAuc2VsZWN0ZWQpO1xyXG4gICAgICAgIGxldCByZWZ1bmRzQWxsb2NhdGVkID0gMDtcclxuICAgICAgICBmb3IgKGNvbnN0IHBheW1lbnQgb2YgcmVmdW5kYWJsZVBheW1lbnRzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGFtb3VudFRvUmVmdW5kID0gTWF0aC5taW4ocGF5bWVudC5yZWZ1bmRhYmxlQW1vdW50LCB0aGlzLnJlZnVuZFRvdGFsIC0gcmVmdW5kc0FsbG9jYXRlZCk7XHJcbiAgICAgICAgICAgIHBheW1lbnQuYW1vdW50VG9SZWZ1bmRDb250cm9sLnNldFZhbHVlKGFtb3VudFRvUmVmdW5kKTtcclxuICAgICAgICAgICAgcmVmdW5kc0FsbG9jYXRlZCArPSBhbW91bnRUb1JlZnVuZDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdG9nZ2xlU2hpcHBpbmdSZWZ1bmQobGluZUlkOiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMucmVmdW5kU2hpcHBpbmdMaW5lSWRzLmluZGV4T2YobGluZUlkKTtcclxuICAgICAgICBpZiAoaW5kZXggPT09IC0xKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVmdW5kU2hpcHBpbmdMaW5lSWRzLnB1c2gobGluZUlkKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnJlZnVuZFNoaXBwaW5nTGluZUlkcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnVwZGF0ZVJlZnVuZFRvdGFsKCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25SZWZ1bmRRdWFudGl0eUNoYW5nZShvcmRlckxpbmVJZDogc3RyaW5nLCBxdWFudGl0eTogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5tYW51YWxseVNldFJlZnVuZFRvdGFsID0gZmFsc2U7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uTGluZSA9IHRoaXMubGluZVF1YW50aXRpZXNbb3JkZXJMaW5lSWRdO1xyXG4gICAgICAgIGlmIChzZWxlY3Rpb25MaW5lKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzUXVhbnRpdHkgPSBzZWxlY3Rpb25MaW5lLnF1YW50aXR5O1xyXG4gICAgICAgICAgICBpZiAocXVhbnRpdHkgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbkxpbmUuY2FuY2VsID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocHJldmlvdXNRdWFudGl0eSA9PT0gMCAmJiBxdWFudGl0eSA+IDApIHtcclxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbkxpbmUuY2FuY2VsID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZWxlY3Rpb25MaW5lLnF1YW50aXR5ID0gcXVhbnRpdHk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUmVmdW5kVG90YWwoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25QYXltZW50U2VsZWN0ZWQocGF5bWVudDogUmVmdW5kYWJsZVBheW1lbnQsIHNlbGVjdGVkOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKHNlbGVjdGVkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG91dHN0YW5kaW5nUmVmdW5kQW1vdW50ID1cclxuICAgICAgICAgICAgICAgIHRoaXMucmVmdW5kVG90YWwgLVxyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWZ1bmRhYmxlUGF5bWVudHNcclxuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKHAgPT4gcC5pZCAhPT0gcGF5bWVudC5pZClcclxuICAgICAgICAgICAgICAgICAgICAucmVkdWNlKCh0b3RhbCwgcCkgPT4gdG90YWwgKyBwLmFtb3VudFRvUmVmdW5kQ29udHJvbC52YWx1ZSwgMCk7XHJcbiAgICAgICAgICAgIGlmICgwIDwgb3V0c3RhbmRpbmdSZWZ1bmRBbW91bnQpIHtcclxuICAgICAgICAgICAgICAgIHBheW1lbnQuYW1vdW50VG9SZWZ1bmRDb250cm9sLnNldFZhbHVlKFxyXG4gICAgICAgICAgICAgICAgICAgIE1hdGgubWluKG91dHN0YW5kaW5nUmVmdW5kQW1vdW50LCBwYXltZW50LnJlZnVuZGFibGVBbW91bnQpLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHBheW1lbnQuYW1vdW50VG9SZWZ1bmRDb250cm9sLnNldFZhbHVlKDApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpc1JlZnVuZGluZygpOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBPYmplY3QudmFsdWVzKHRoaXMubGluZVF1YW50aXRpZXMpLnJlZHVjZShcclxuICAgICAgICAgICAgKGlzUmVmdW5kaW5nLCBsaW5lKSA9PiBpc1JlZnVuZGluZyB8fCAwIDwgbGluZS5xdWFudGl0eSxcclxuICAgICAgICAgICAgZmFsc2UsXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIGlzQ2FuY2VsbGluZygpOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBPYmplY3QudmFsdWVzKHRoaXMubGluZVF1YW50aXRpZXMpLnJlZHVjZShcclxuICAgICAgICAgICAgKGlzQ2FuY2VsbGluZywgbGluZSkgPT4gaXNDYW5jZWxsaW5nIHx8ICgwIDwgbGluZS5xdWFudGl0eSAmJiBsaW5lLmNhbmNlbCksXHJcbiAgICAgICAgICAgIGZhbHNlLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBjYW5TdWJtaXQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIDAgPCB0aGlzLnJlZnVuZFRvdGFsICYmIHRoaXMuYW1vdW50VG9SZWZ1bmRUb3RhbCA9PT0gdGhpcy5yZWZ1bmRUb3RhbCAmJiAhIXRoaXMucmVhc29uO1xyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdCgpIHtcclxuICAgICAgICBjb25zdCByZWZ1bmRMaW5lcyA9IHRoaXMuZ2V0T3JkZXJMaW5lSW5wdXQoKCkgPT4gdHJ1ZSk7XHJcbiAgICAgICAgY29uc3QgY2FuY2VsTGluZXMgPSB0aGlzLmdldE9yZGVyTGluZUlucHV0KGxpbmUgPT4gbGluZS5jYW5jZWwpO1xyXG5cclxuICAgICAgICB0aGlzLnJlc29sdmVXaXRoKHtcclxuICAgICAgICAgICAgcmVmdW5kczogdGhpcy5yZWZ1bmRhYmxlUGF5bWVudHNcclxuICAgICAgICAgICAgICAgIC5maWx0ZXIocnAgPT4gcnAuc2VsZWN0ZWQgJiYgMCA8IHJwLmFtb3VudFRvUmVmdW5kQ29udHJvbC52YWx1ZSlcclxuICAgICAgICAgICAgICAgIC5tYXAocGF5bWVudCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGluZXM6IHJlZnVuZExpbmVzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWFzb246IHRoaXMucmVhc29uLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXltZW50SWQ6IHBheW1lbnQuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFtb3VudDogcGF5bWVudC5hbW91bnRUb1JlZnVuZENvbnRyb2wudmFsdWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNoaXBwaW5nOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhZGp1c3RtZW50OiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgY2FuY2VsOiB7XHJcbiAgICAgICAgICAgICAgICBsaW5lczogY2FuY2VsTGluZXMsXHJcbiAgICAgICAgICAgICAgICBvcmRlcklkOiB0aGlzLm9yZGVyLmlkLFxyXG4gICAgICAgICAgICAgICAgcmVhc29uOiB0aGlzLnJlYXNvbixcclxuICAgICAgICAgICAgICAgIGNhbmNlbFNoaXBwaW5nOiB0aGlzLnJlZnVuZFNoaXBwaW5nTGluZUlkcy5sZW5ndGggPiAwLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNhbmNlbCgpIHtcclxuICAgICAgICB0aGlzLnJlc29sdmVXaXRoKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRPcmRlckxpbmVJbnB1dChmaWx0ZXJGbjogKGxpbmU6IFNlbGVjdGlvbkxpbmUpID0+IGJvb2xlYW4pOiBPcmRlckxpbmVJbnB1dFtdIHtcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy5saW5lUXVhbnRpdGllcylcclxuICAgICAgICAgICAgLmZpbHRlcigoW29yZGVyTGluZUlkLCBsaW5lXSkgPT4gMCA8IGxpbmUucXVhbnRpdHkgJiYgZmlsdGVyRm4obGluZSkpXHJcbiAgICAgICAgICAgIC5tYXAoKFtvcmRlckxpbmVJZCwgbGluZV0pID0+ICh7XHJcbiAgICAgICAgICAgICAgICBvcmRlckxpbmVJZCxcclxuICAgICAgICAgICAgICAgIHF1YW50aXR5OiBsaW5lLnF1YW50aXR5LFxyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICB9XHJcbn1cclxuIiwiPG5nLXRlbXBsYXRlIHZkckRpYWxvZ1RpdGxlPnt7ICdvcmRlci5yZWZ1bmQtYW5kLWNhbmNlbC1vcmRlcicgfCB0cmFuc2xhdGUgfX08L25nLXRlbXBsYXRlPlxyXG5cclxuPGRpdiBjbGFzcz1cInJlZnVuZC13cmFwcGVyXCI+XHJcbiAgICA8dmRyLWRhdGEtdGFibGUtMiBpZD1cInJlZnVuZC1vcmRlclwiIFtpdGVtc109XCJvcmRlci5saW5lc1wiPlxyXG4gICAgICAgIDwhLS0gSGVyZSB3ZSBkZWZpbmUgYWxsIHRoZSBhdmFpbGFibGUgY29sdW1ucyAtLT5cclxuICAgICAgICA8dmRyLWR0Mi1jb2x1bW4gaWQ9XCJpZFwiIFtoZWFkaW5nXT1cIidjb21tb24uaWQnIHwgdHJhbnNsYXRlXCIgW2hpZGRlbkJ5RGVmYXVsdF09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtbGluZT1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICAgIHt7IGxpbmUuaWQgfX1cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L3Zkci1kdDItY29sdW1uPlxyXG4gICAgICAgIDx2ZHItZHQyLWNvbHVtbiBpZD1cImNyZWF0ZWQtYXRcIiBbaGVhZGluZ109XCInY29tbW9uLmNyZWF0ZWQtYXQnIHwgdHJhbnNsYXRlXCIgW2hpZGRlbkJ5RGVmYXVsdF09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtbGluZT1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICAgIHt7IGxpbmUuY3JlYXRlZEF0IHwgbG9jYWxlRGF0ZSA6ICdzaG9ydCcgfX1cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L3Zkci1kdDItY29sdW1uPlxyXG4gICAgICAgIDx2ZHItZHQyLWNvbHVtbiBpZD1cInVwZGF0ZWQtYXRcIiBbaGVhZGluZ109XCInY29tbW9uLnVwZGF0ZWQtYXQnIHwgdHJhbnNsYXRlXCIgW2hpZGRlbkJ5RGVmYXVsdF09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtbGluZT1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICAgIHt7IGxpbmUudXBkYXRlZEF0IHwgbG9jYWxlRGF0ZSA6ICdzaG9ydCcgfX1cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L3Zkci1kdDItY29sdW1uPlxyXG4gICAgICAgIDx2ZHItZHQyLWNvbHVtbiBbaGVhZGluZ109XCInY29tbW9uLmltYWdlJyB8IHRyYW5zbGF0ZVwiIGlkPVwiaW1hZ2VcIj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1saW5lPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImltYWdlLXBsYWNlaG9sZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGltZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImxpbmUuZmVhdHVyZWRBc3NldCBhcyBhc3NldDsgZWxzZSBpbWFnZVBsYWNlaG9sZGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJhc3NldCB8IGFzc2V0UHJldmlldyA6ICd0aW55J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2ltYWdlUGxhY2Vob2xkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwbGFjZWhvbGRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsci1pY29uIHNoYXBlPVwiaW1hZ2VcIiBzaXplPVwiNDhcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC92ZHItZHQyLWNvbHVtbj5cclxuICAgICAgICA8dmRyLWR0Mi1jb2x1bW4gaWQ9XCJwcm9kdWN0LW5hbWVcIiBbaGVhZGluZ109XCInb3JkZXIucHJvZHVjdC1uYW1lJyB8IHRyYW5zbGF0ZVwiIFtvcHRpb25hbF09XCJmYWxzZVwiPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgbGV0LWxpbmU9XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBsaW5lLnByb2R1Y3RWYXJpYW50Lm5hbWUgfX1cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L3Zkci1kdDItY29sdW1uPlxyXG4gICAgICAgIDx2ZHItZHQyLWNvbHVtbiBpZD1cInByb2R1Y3Qtc2t1XCIgW2hlYWRpbmddPVwiJ29yZGVyLnByb2R1Y3Qtc2t1JyB8IHRyYW5zbGF0ZVwiPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgbGV0LWxpbmU9XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBsaW5lLnByb2R1Y3RWYXJpYW50LnNrdSB9fVxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvdmRyLWR0Mi1jb2x1bW4+XHJcbiAgICAgICAgPHZkci1kdDItY29sdW1uIGlkPVwidW5pdC1wcmljZVwiIFtoZWFkaW5nXT1cIidvcmRlci51bml0LXByaWNlJyB8IHRyYW5zbGF0ZVwiIFtoaWRkZW5CeURlZmF1bHRdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgbGV0LWxpbmU9XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBsaW5lLnVuaXRQcmljZVdpdGhUYXggfCBsb2NhbGVDdXJyZW5jeSA6IG9yZGVyLmN1cnJlbmN5Q29kZSB9fVxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvdmRyLWR0Mi1jb2x1bW4+XHJcbiAgICAgICAgPHZkci1kdDItY29sdW1uIGlkPVwicHJvcmF0ZWQtdW5pdC1wcmljZVwiIFtoZWFkaW5nXT1cIidvcmRlci5wcm9yYXRlZC11bml0LXByaWNlJyB8IHRyYW5zbGF0ZVwiPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgbGV0LWxpbmU9XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBsaW5lLnVuaXRQcmljZVdpdGhUYXggfCBsb2NhbGVDdXJyZW5jeSA6IG9yZGVyLmN1cnJlbmN5Q29kZSB9fVxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxpbmUuZGlzY291bnRzIGFzIGRpc2NvdW50c1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx2ZHItZHJvcGRvd24gKm5nSWY9XCJkaXNjb3VudHMubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9tb3Rpb25zLWxhYmVsXCIgdmRyRHJvcGRvd25UcmlnZ2VyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImljb24tYnV0dG9uXCI+PGNsci1pY29uIHNoYXBlPVwiaW5mb1wiPjwvY2xyLWljb24+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWRyb3Bkb3duLW1lbnU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGluZS1wcm9tb3Rpb25cIiAqbmdGb3I9XCJsZXQgZGlzY291bnQgb2YgZGlzY291bnRzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZGlzY291bnQuZGVzY3JpcHRpb24gfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvbW90aW9uLWFtb3VudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzY291bnQuYW1vdW50IC8gMTAwIC8gbGluZS5xdWFudGl0eVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgbnVtYmVyIDogJzEuMC0yJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY3VycmVuY3kgOiBvcmRlci5jdXJyZW5jeUNvZGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Zkci1kcm9wZG93bi1tZW51PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdmRyLWRyb3Bkb3duPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC92ZHItZHQyLWNvbHVtbj5cclxuICAgICAgICA8dmRyLWR0Mi1jb2x1bW4gaWQ9XCJxdWFudGl0eVwiIFtoZWFkaW5nXT1cIidvcmRlci5xdWFudGl0eScgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1saW5lPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAge3sgbGluZS5xdWFudGl0eSB9fVxyXG4gICAgICAgICAgICAgICAgPHZkci1saW5lLXJlZnVuZHMgW2xpbmVdPVwibGluZVwiIFtwYXltZW50c109XCJvcmRlci5wYXltZW50c1wiPjwvdmRyLWxpbmUtcmVmdW5kcz5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L3Zkci1kdDItY29sdW1uPlxyXG4gICAgICAgIDx2ZHItZHQyLWNvbHVtbiBpZD1cInJlZnVuZC1xdWFudGl0eVwiIFtoZWFkaW5nXT1cIidvcmRlci5yZWZ1bmQnIHwgdHJhbnNsYXRlXCIgW29wdGlvbmFsXT1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtbGluZT1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwibGluZUNhbkJlUmVmdW5kZWRPckNhbmNlbGxlZChsaW5lKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwibGluZVF1YW50aXRpZXNbbGluZS5pZF0ucXVhbnRpdHlcIlxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgIFttYXhdPVwibGluZS5xdWFudGl0eVwiXHJcbiAgICAgICAgICAgICAgICAgICAgbWluPVwiMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25SZWZ1bmRRdWFudGl0eUNoYW5nZShsaW5lLmlkLCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC92ZHItZHQyLWNvbHVtbj5cclxuICAgICAgICA8dmRyLWR0Mi1jb2x1bW4gaWQ9XCJjYW5jZWxcIiBbaGVhZGluZ109XCInb3JkZXIucmV0dXJuLXRvLXN0b2NrJyB8IHRyYW5zbGF0ZVwiIFtvcHRpb25hbF09XCJmYWxzZVwiPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgbGV0LWxpbmU9XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FuY2VsLWNoZWNrYm94LXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmbGV4IGNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImxpbmVDYW5CZVJlZnVuZGVkT3JDYW5jZWxsZWQobGluZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xyQ2hlY2tib3hcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIwID09PSBsaW5lUXVhbnRpdGllc1tsaW5lLmlkXS5xdWFudGl0eVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImxpbmVRdWFudGl0aWVzW2xpbmUuaWRdLmNhbmNlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWwtMVwiPnt7ICdvcmRlci5yZXR1cm4tdG8tc3RvY2snIHwgdHJhbnNsYXRlIH19PC9zcGFuPjwvbGFiZWxcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L3Zkci1kdDItY29sdW1uPlxyXG4gICAgPC92ZHItZGF0YS10YWJsZS0yPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJyZWZ1bmQtZGV0YWlscyBtdC00XCI+XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgPHZkci1jYXJkPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZmxleCBtYi0yXCIgKm5nRm9yPVwibGV0IHNoaXBwaW5nTGluZSBvZiBvcmRlci5zaGlwcGluZ0xpbmVzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsckNoZWNrYm94IChjaGFuZ2UpPVwidG9nZ2xlU2hpcHBpbmdSZWZ1bmQoc2hpcHBpbmdMaW5lLmlkKVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1sLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ29yZGVyLnJlZnVuZC1zaGlwcGluZycgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgc2hpcHBpbmdMaW5lLnNoaXBwaW5nTWV0aG9kLm5hbWUgfX06PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1sLTFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPnt7IHNoaXBwaW5nTGluZS5kaXNjb3VudGVkUHJpY2VXaXRoVGF4IHwgbG9jYWxlQ3VycmVuY3kgOiBvcmRlci5jdXJyZW5jeUNvZGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PjwvbGFiZWxcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDx2ZHItZm9ybS1maWVsZCBbbGFiZWxdPVwiJ29yZGVyLnJlZnVuZC1jYW5jZWxsYXRpb24tcmVhc29uJyB8IHRyYW5zbGF0ZVwiIGNsYXNzPVwibWItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1zZWxlY3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1zXT1cInJlYXNvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBiaW5kTGFiZWw9XCJuYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXV0b2ZvY3VzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInb3JkZXIucmVmdW5kLWNhbmNlbGxhdGlvbi1yZWFzb24tcmVxdWlyZWQnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmluZFZhbHVlPVwiaWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbYWRkVGFnXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInJlYXNvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgPjwvbmctc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgPC92ZHItZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgIDx2ZHItZm9ybS1maWVsZFxyXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInb3JkZXIucmVmdW5kLXRvdGFsJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3JlYWRPbmx5VG9nZ2xlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIChyZWFkT25seVRvZ2dsZUNoYW5nZSk9XCJtYW51YWxseVNldFJlZnVuZFRvdGFsID0gISRldmVudFwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPHZkci1jdXJyZW5jeS1pbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiIW1hbnVhbGx5U2V0UmVmdW5kVG90YWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY3VycmVuY3lDb2RlXT1cIm9yZGVyLmN1cnJlbmN5Q29kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicmVmdW5kVG90YWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ1cGRhdGVSZWZ1bmRUb3RhbCgpXCJcclxuICAgICAgICAgICAgICAgICAgICA+PC92ZHItY3VycmVuY3ktaW5wdXQ+XHJcbiAgICAgICAgICAgICAgICA8L3Zkci1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8L3Zkci1jYXJkPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJcIj5cclxuICAgICAgICAgICAgPHZkci1wYXltZW50LWZvci1yZWZ1bmQtc2VsZWN0b3JcclxuICAgICAgICAgICAgICAgIFtyZWZ1bmRhYmxlUGF5bWVudHNdPVwicmVmdW5kYWJsZVBheW1lbnRzXCJcclxuICAgICAgICAgICAgICAgIChwYXltZW50U2VsZWN0ZWQpPVwib25QYXltZW50U2VsZWN0ZWQoJGV2ZW50LnBheW1lbnQsICRldmVudC5zZWxlY3RlZClcIlxyXG4gICAgICAgICAgICAgICAgW29yZGVyXT1cIm9yZGVyXCJcclxuICAgICAgICAgICAgPjwvdmRyLXBheW1lbnQtZm9yLXJlZnVuZC1zZWxlY3Rvcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxuZy10ZW1wbGF0ZSB2ZHJEaWFsb2dCdXR0b25zPlxyXG4gICAgPGRpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZXJyb3JzXCI+XHJcbiAgICAgICAgICAgIDxjbHItYWxlcnRcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwicmVmdW5kVG90YWwgPCAwIHx8IHRvdGFsUmVmdW5kYWJsZUFtb3VudCA8IHJlZnVuZFRvdGFsXCJcclxuICAgICAgICAgICAgICAgIFtjbHJBbGVydFR5cGVdPVwiJ2RhbmdlcidcIlxyXG4gICAgICAgICAgICAgICAgW2NsckFsZXJ0Q2xvc2FibGVdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8Y2xyLWFsZXJ0LWl0ZW0+XHJcbiAgICAgICAgICAgICAgICAgICAge3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ29yZGVyLnJlZnVuZC10b3RhbC1lcnJvcidcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluOiAwIHwgY3VycmVuY3kgOiBvcmRlci5jdXJyZW5jeUNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4OiB0b3RhbFJlZnVuZGFibGVBbW91bnQgfCBsb2NhbGVDdXJyZW5jeSA6IG9yZGVyLmN1cnJlbmN5Q29kZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICA8L2Nsci1hbGVydC1pdGVtPlxyXG4gICAgICAgICAgICA8L2Nsci1hbGVydD5cclxuICAgICAgICAgICAgPGNsci1hbGVydFxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJhbW91bnRUb1JlZnVuZFRvdGFsIDwgcmVmdW5kVG90YWwgfHwgcmVmdW5kVG90YWwgPCBhbW91bnRUb1JlZnVuZFRvdGFsXCJcclxuICAgICAgICAgICAgICAgIFtjbHJBbGVydFR5cGVdPVwiJ2RhbmdlcidcIlxyXG4gICAgICAgICAgICAgICAgW2NsckFsZXJ0Q2xvc2FibGVdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8Y2xyLWFsZXJ0LWl0ZW0+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgJ29yZGVyLnJlZnVuZC10b3RhbC13YXJuaW5nJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9jbHItYWxlcnQtaXRlbT5cclxuICAgICAgICAgICAgPC9jbHItYWxlcnQ+XHJcbiAgICAgICAgICAgIDxjbHItYWxlcnRcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiYW1vdW50VG9SZWZ1bmRUb3RhbCAmJiAhcmVhc29uXCJcclxuICAgICAgICAgICAgICAgIFtjbHJBbGVydFR5cGVdPVwiJ2RhbmdlcidcIlxyXG4gICAgICAgICAgICAgICAgW2NsckFsZXJ0Q2xvc2FibGVdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8Y2xyLWFsZXJ0LWl0ZW0+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgJ29yZGVyLnJlZnVuZC1jYW5jZWxsYXRpb24tcmVhc29uLXJlcXVpcmVkJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9jbHItYWxlcnQtaXRlbT5cclxuICAgICAgICAgICAgPC9jbHItYWxlcnQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJ1dHRvbnNcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG5cIiAoY2xpY2spPVwiY2FuY2VsKClcIj57eyAnY29tbW9uLmNhbmNlbCcgfCB0cmFuc2xhdGUgfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgKGNsaWNrKT1cInNlbGVjdCgpXCIgW2Rpc2FibGVkXT1cIiFjYW5TdWJtaXQoKVwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCI+XHJcbiAgICAgICAgICAgICAgICB7e1xyXG4gICAgICAgICAgICAgICAgICAgICdvcmRlci5yZWZ1bmQtd2l0aC1hbW91bnQnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHwgdHJhbnNsYXRlIDogeyBhbW91bnQ6IGFtb3VudFRvUmVmdW5kVG90YWwgfCBsb2NhbGVDdXJyZW5jeSA6IG9yZGVyLmN1cnJlbmN5Q29kZSB9XHJcbiAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG4iXX0=
|
|
@@ -16,11 +16,11 @@ export class RefundStateLabelComponent {
|
|
|
16
16
|
}
|
|
17
17
|
}
|
|
18
18
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: RefundStateLabelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
19
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.2", type: RefundStateLabelComponent, selector: "vdr-refund-state-label", inputs: { state: "state" }, ngImport: i0, template: "<vdr-chip [title]=\"'order.payment-state' | translate\" [colorType]=\"chipColorType\">\r\n <clr-icon shape=\"check-circle\" *ngIf=\"state === 'Settled'\"></clr-icon>\r\n {{ state | stateI18nToken | translate }}\r\n</vdr-chip>\r\n", styles: [":host{font-size:14px}\n"], dependencies: [{ kind: "directive", type: i1.ClrIconCustomTag, selector: "clr-icon" }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.ChipComponent, selector: "vdr-chip", inputs: ["icon", "invert", "colorFrom", "colorType"], outputs: ["iconClick"] }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }, { kind: "pipe", type: i3.StateI18nTokenPipe, name: "stateI18nToken" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
19
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.2", type: RefundStateLabelComponent, selector: "vdr-refund-state-label", inputs: { state: "state" }, ngImport: i0, template: "<vdr-chip [title]=\"'order.payment-state' | translate\" [colorType]=\"chipColorType\">\r\n <clr-icon shape=\"check-circle\" *ngIf=\"state === 'Settled'\"></clr-icon>\r\n {{ state | stateI18nToken | translate }}\r\n</vdr-chip>\r\n", styles: [":host{display:flex;font-size:14px}\n"], dependencies: [{ kind: "directive", type: i1.ClrIconCustomTag, selector: "clr-icon" }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.ChipComponent, selector: "vdr-chip", inputs: ["icon", "invert", "colorFrom", "colorType"], outputs: ["iconClick"] }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }, { kind: "pipe", type: i3.StateI18nTokenPipe, name: "stateI18nToken" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
20
20
|
}
|
|
21
21
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: RefundStateLabelComponent, decorators: [{
|
|
22
22
|
type: Component,
|
|
23
|
-
args: [{ selector: 'vdr-refund-state-label', changeDetection: ChangeDetectionStrategy.OnPush, template: "<vdr-chip [title]=\"'order.payment-state' | translate\" [colorType]=\"chipColorType\">\r\n <clr-icon shape=\"check-circle\" *ngIf=\"state === 'Settled'\"></clr-icon>\r\n {{ state | stateI18nToken | translate }}\r\n</vdr-chip>\r\n", styles: [":host{font-size:14px}\n"] }]
|
|
23
|
+
args: [{ selector: 'vdr-refund-state-label', changeDetection: ChangeDetectionStrategy.OnPush, template: "<vdr-chip [title]=\"'order.payment-state' | translate\" [colorType]=\"chipColorType\">\r\n <clr-icon shape=\"check-circle\" *ngIf=\"state === 'Settled'\"></clr-icon>\r\n {{ state | stateI18nToken | translate }}\r\n</vdr-chip>\r\n", styles: [":host{display:flex;font-size:14px}\n"] }]
|
|
24
24
|
}], propDecorators: { state: [{
|
|
25
25
|
type: Input
|
|
26
26
|
}] } });
|