@foxy.io/elements 1.38.0 → 1.39.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cdn/foxy-admin-subscription-card.js +1 -1
- package/dist/cdn/foxy-admin-subscription-form.js +1 -1
- package/dist/cdn/foxy-customer-portal.js +1 -1
- package/dist/cdn/foxy-customer.js +1 -1
- package/dist/cdn/foxy-subscription-card.js +1 -1
- package/dist/cdn/foxy-subscription-form.js +1 -1
- package/dist/cdn/foxy-subscriptions-table.js +1 -1
- package/dist/cdn/foxy-webhook-card.js +1 -1
- package/dist/cdn/foxy-webhook-form.js +1 -1
- package/dist/cdn/{shared-0ed075f9.js → shared-56d70cc2.js} +7 -7
- package/dist/cdn/shared-e2675ed0.js +1 -0
- package/dist/cdn/translations/admin-subscription-card/en.json +9 -7
- package/dist/cdn/translations/admin-subscription-form/en.json +7 -2
- package/dist/cdn/translations/customer/en.json +16 -12
- package/dist/cdn/translations/customer-portal/en.json +16 -12
- package/dist/cdn/translations/subscription-card/en.json +9 -8
- package/dist/cdn/translations/subscription-form/en.json +8 -6
- package/dist/cdn/translations/subscriptions-table/en.json +9 -7
- package/dist/cdn/translations/transaction/en.json +4 -2
- package/dist/cdn/translations/webhook-card/en.json +2 -0
- package/dist/cdn/translations/webhook-form/en.json +16 -2
- package/dist/elements/public/AdminSubscriptionCard/AdminSubscriptionCard.d.ts +0 -2
- package/dist/elements/public/AdminSubscriptionCard/AdminSubscriptionCard.js +5 -37
- package/dist/elements/public/AdminSubscriptionCard/AdminSubscriptionCard.js.map +1 -1
- package/dist/elements/public/AdminSubscriptionForm/AdminSubscriptionForm.d.ts +1 -1
- package/dist/elements/public/AdminSubscriptionForm/AdminSubscriptionForm.js +4 -3
- package/dist/elements/public/AdminSubscriptionForm/AdminSubscriptionForm.js.map +1 -1
- package/dist/elements/public/SubscriptionCard/SubscriptionCard.d.ts +0 -2
- package/dist/elements/public/SubscriptionCard/SubscriptionCard.js +17 -44
- package/dist/elements/public/SubscriptionCard/SubscriptionCard.js.map +1 -1
- package/dist/elements/public/SubscriptionForm/SubscriptionForm.d.ts +1 -1
- package/dist/elements/public/SubscriptionForm/SubscriptionForm.js +4 -25
- package/dist/elements/public/SubscriptionForm/SubscriptionForm.js.map +1 -1
- package/dist/elements/public/SubscriptionsTable/SubscriptionsTable.js +14 -29
- package/dist/elements/public/SubscriptionsTable/SubscriptionsTable.js.map +1 -1
- package/dist/elements/public/WebhookCard/WebhookCard.d.ts +1 -0
- package/dist/elements/public/WebhookCard/WebhookCard.js +25 -19
- package/dist/elements/public/WebhookCard/WebhookCard.js.map +1 -1
- package/dist/elements/public/WebhookCard/types.d.ts +3 -1
- package/dist/elements/public/WebhookCard/types.js.map +1 -1
- package/dist/elements/public/WebhookForm/WebhookForm.js +12 -6
- package/dist/elements/public/WebhookForm/WebhookForm.js.map +1 -1
- package/dist/elements/public/WebhookForm/index.d.ts +1 -0
- package/dist/elements/public/WebhookForm/index.js +1 -0
- package/dist/elements/public/WebhookForm/index.js.map +1 -1
- package/dist/utils/get-subscription-status.d.ts +6 -0
- package/dist/utils/get-subscription-status.js +29 -0
- package/dist/utils/get-subscription-status.js.map +1 -0
- package/package.json +1 -1
|
@@ -921,12 +921,14 @@
|
|
|
921
921
|
"monthly_plural": "/ {{count}} months",
|
|
922
922
|
"price_recurring": "{{amount, price}} $t(customer.subscription-card.frequency, { \"count\": \"{{count}}\", \"units\": \"{{units}}\", \"ns\": \"customer-portal\" })",
|
|
923
923
|
"price_twice_a_month": "{{amount, price}} $t(customer.subscription-card.twice_a_month, { \"ns\": \"customer-portal\" })",
|
|
924
|
-
"
|
|
925
|
-
"
|
|
926
|
-
"
|
|
927
|
-
"
|
|
928
|
-
"
|
|
929
|
-
"
|
|
924
|
+
"status_failed_and_ended": "Ended on {{ end_date, date }} (failed on {{ first_failed_transaction_date, date }})",
|
|
925
|
+
"status_failed": "Failed on {{ first_failed_transaction_date, date }}",
|
|
926
|
+
"status_will_start": "Starts on {{ start_date, date }}",
|
|
927
|
+
"status_will_end_after_payment": "Next payment on {{ next_transaction_date, date }}, ending {{ end_date, date }}",
|
|
928
|
+
"status_will_end": "Ends on {{ end_date, date }}",
|
|
929
|
+
"status_ended": "Ended on {{ end_date, date }}",
|
|
930
|
+
"status_next_payment": "Next payment on {{ next_transaction_date, date }}",
|
|
931
|
+
"status_inactive": "Inactive",
|
|
930
932
|
"transaction_summary": "{{most_expensive_item.name}}",
|
|
931
933
|
"fees_hint": "inc. shipping, taxes, etc.",
|
|
932
934
|
"fees_explainer": "Taxes, shipping, and discounts may change the amount charged.",
|
|
@@ -948,12 +950,14 @@
|
|
|
948
950
|
"title_existing": "Subscription",
|
|
949
951
|
"title_recurring": "{{amount, price}} $t(customer.subscription-form.frequency, { \"count\": \"{{count}}\", \"units\": \"{{units}}\", \"ns\": \"customer-portal\" })",
|
|
950
952
|
"title_twice_a_month": "{{amount, price}} $t(customer.subscription-form.twice_a_month, { \"ns\": \"customer-portal\" })",
|
|
951
|
-
"
|
|
952
|
-
"
|
|
953
|
-
"
|
|
954
|
-
"
|
|
955
|
-
"
|
|
956
|
-
"
|
|
953
|
+
"subtitle_failed_and_ended": "Including shipping, taxes, etc. Ended on {{ end_date, date }} (failed on {{ first_failed_transaction_date, date }})",
|
|
954
|
+
"subtitle_failed": "Including shipping, taxes, etc. Failed on {{ first_failed_transaction_date, date }}",
|
|
955
|
+
"subtitle_will_start": "Including shipping, taxes, etc. Starts on {{ start_date, date }}",
|
|
956
|
+
"subtitle_will_end_after_payment": "Including shipping, taxes, etc. Next payment on {{ next_transaction_date, date }}, ending {{ end_date, date }}",
|
|
957
|
+
"subtitle_will_end": "Including shipping, taxes, etc. Ends on {{ end_date, date }}",
|
|
958
|
+
"subtitle_ended": "Including shipping, taxes, etc. Ended on {{ end_date, date }}",
|
|
959
|
+
"subtitle_next_payment": "Including shipping, taxes, etc. Next payment on {{ next_transaction_date, date }}",
|
|
960
|
+
"subtitle": "Including shipping, taxes, etc.",
|
|
957
961
|
"copy-id": {
|
|
958
962
|
"failed_to_copy": "Failed to copy",
|
|
959
963
|
"click_to_copy": "Copy ID",
|
|
@@ -6,13 +6,14 @@
|
|
|
6
6
|
"monthly_plural": "Every {{count}} months",
|
|
7
7
|
"price_recurring": "{{amount, price}} $t(frequency, { \"count\": \"{{count}}\", \"units\": \"{{units}}\", \"ns\": \"subscription-card\" })",
|
|
8
8
|
"price_twice_a_month": "{{amount, price}} $t(twice_a_month, { \"ns\": \"subscription-card\" })",
|
|
9
|
-
"
|
|
10
|
-
"
|
|
11
|
-
"
|
|
12
|
-
"
|
|
13
|
-
"
|
|
14
|
-
"
|
|
15
|
-
"
|
|
9
|
+
"status_failed_and_ended": "Ended on {{ end_date, date }} (failed on {{ first_failed_transaction_date, date }})",
|
|
10
|
+
"status_failed": "Failed on {{ first_failed_transaction_date, date }}",
|
|
11
|
+
"status_will_start": "Starts on {{ start_date, date }}",
|
|
12
|
+
"status_will_end_after_payment": "Next payment on {{ next_transaction_date, date }}, ending {{ end_date, date }}",
|
|
13
|
+
"status_will_end": "Ends on {{ end_date, date }}",
|
|
14
|
+
"status_ended": "Ended on {{ end_date, date }}",
|
|
15
|
+
"status_next_payment": "Next payment on {{ next_transaction_date, date }}",
|
|
16
|
+
"status_inactive": "Inactive",
|
|
16
17
|
"transaction_summary": "{{most_expensive_item.name}}",
|
|
17
18
|
"fees_hint": "inc. shipping, taxes, etc.",
|
|
18
19
|
"fees_explainer": "Taxes, shipping, and discounts may change the amount charged.",
|
|
@@ -26,4 +27,4 @@
|
|
|
26
27
|
"loading_empty": "No data",
|
|
27
28
|
"loading_error": "Unknown error"
|
|
28
29
|
}
|
|
29
|
-
}
|
|
30
|
+
}
|
|
@@ -4,12 +4,14 @@
|
|
|
4
4
|
"title_existing": "Subscription",
|
|
5
5
|
"title_recurring": "{{amount, price}} $t(frequency, { \"count\": \"{{count}}\", \"units\": \"{{units}}\", \"ns\": \"subscription-form\" })",
|
|
6
6
|
"title_twice_a_month": "{{amount, price}} $t(twice_a_month, { \"ns\": \"subscription-form\" })",
|
|
7
|
-
"
|
|
8
|
-
"
|
|
9
|
-
"
|
|
10
|
-
"
|
|
11
|
-
"
|
|
12
|
-
"
|
|
7
|
+
"subtitle_failed_and_ended": "Including shipping, taxes, etc. Ended on {{ end_date, date }} (failed on {{ first_failed_transaction_date, date }})",
|
|
8
|
+
"subtitle_failed": "Including shipping, taxes, etc. Failed on {{ first_failed_transaction_date, date }}",
|
|
9
|
+
"subtitle_will_start": "Including shipping, taxes, etc. Starts on {{ start_date, date }}",
|
|
10
|
+
"subtitle_will_end_after_payment": "Including shipping, taxes, etc. Next payment on {{ next_transaction_date, date }}, ending {{ end_date, date }}",
|
|
11
|
+
"subtitle_will_end": "Including shipping, taxes, etc. Ends on {{ end_date, date }}",
|
|
12
|
+
"subtitle_ended": "Including shipping, taxes, etc. Ended on {{ end_date, date }}",
|
|
13
|
+
"subtitle_next_payment": "Including shipping, taxes, etc. Next payment on {{ next_transaction_date, date }}",
|
|
14
|
+
"subtitle": "Including shipping, taxes, etc.",
|
|
13
15
|
"copy-id": {
|
|
14
16
|
"failed_to_copy": "Failed to copy",
|
|
15
17
|
"click_to_copy": "Copy ID",
|
|
@@ -6,12 +6,14 @@
|
|
|
6
6
|
"monthly_plural": "Every {{count}} months",
|
|
7
7
|
"price_recurring": "{{amount, price}} $t(frequency, { \"count\": \"{{count}}\", \"units\": \"{{units}}\", \"ns\": \"subscriptions-table\" })",
|
|
8
8
|
"price_twice_a_month": "{{amount, price}} $t(twice_a_month, { \"ns\": \"subscriptions-table\" })",
|
|
9
|
-
"
|
|
10
|
-
"
|
|
11
|
-
"
|
|
12
|
-
"
|
|
13
|
-
"
|
|
14
|
-
"
|
|
9
|
+
"status_failed_and_ended": "Ended on {{ end_date, date }} (failed on {{ first_failed_transaction_date, date }})",
|
|
10
|
+
"status_failed": "Failed on {{ first_failed_transaction_date, date }}",
|
|
11
|
+
"status_will_start": "Starts on {{ start_date, date }}",
|
|
12
|
+
"status_will_end_after_payment": "Next payment on {{ next_transaction_date, date }}, ending {{ end_date, date }}",
|
|
13
|
+
"status_will_end": "Ends on {{ end_date, date }}",
|
|
14
|
+
"status_ended": "Ended on {{ end_date, date }}",
|
|
15
|
+
"status_next_payment": "Next payment on {{ next_transaction_date, date }}",
|
|
16
|
+
"status_inactive": "Inactive",
|
|
15
17
|
"transaction_summary": "{{most_expensive_item.name}}",
|
|
16
18
|
"twice_a_month": "Twice a month",
|
|
17
19
|
"update": "Update",
|
|
@@ -25,4 +27,4 @@
|
|
|
25
27
|
"loading_empty": "No data",
|
|
26
28
|
"loading_error": "Unknown error"
|
|
27
29
|
}
|
|
28
|
-
}
|
|
30
|
+
}
|
|
@@ -843,13 +843,15 @@
|
|
|
843
843
|
"previous": "Previous",
|
|
844
844
|
"card": {
|
|
845
845
|
"status_successful": "OK",
|
|
846
|
+
"status_inactive": "Inactive",
|
|
847
|
+
"status_loading": "Loading",
|
|
846
848
|
"status_pending": "Pending",
|
|
847
849
|
"status_failed": "Failed",
|
|
848
850
|
"status_none": "No runs yet",
|
|
849
851
|
"spinner": {
|
|
850
852
|
"loading_busy": "Loading",
|
|
851
|
-
"
|
|
852
|
-
"
|
|
853
|
+
"loading_error": "Unknown error",
|
|
854
|
+
"loading_empty": "No webhooks"
|
|
853
855
|
}
|
|
854
856
|
}
|
|
855
857
|
}
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
"done": "Copied to clipboard"
|
|
22
22
|
}
|
|
23
23
|
},
|
|
24
|
-
"
|
|
24
|
+
"group-one": {
|
|
25
25
|
"label": "",
|
|
26
26
|
"helper_text": "",
|
|
27
27
|
"name": {
|
|
@@ -30,7 +30,11 @@
|
|
|
30
30
|
"helper_text": "",
|
|
31
31
|
"v8n_required": "Webhook name is required",
|
|
32
32
|
"v8n_too_long": "Webhook name cannot exceed 255 characters"
|
|
33
|
-
}
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
"group-two": {
|
|
36
|
+
"label": "",
|
|
37
|
+
"helper_text": "",
|
|
34
38
|
"encryption-key": {
|
|
35
39
|
"label": "Encryption key",
|
|
36
40
|
"placeholder": "Required",
|
|
@@ -59,6 +63,16 @@
|
|
|
59
63
|
"v8n_too_long": "Query cannot exceed 1000 characters"
|
|
60
64
|
}
|
|
61
65
|
},
|
|
66
|
+
"group-three": {
|
|
67
|
+
"label": "",
|
|
68
|
+
"helper_text": "",
|
|
69
|
+
"is-active": {
|
|
70
|
+
"label": "Enable this webhook",
|
|
71
|
+
"helper_text": "Webhooks are disabled automatically when there are too many consecutive failed runs.",
|
|
72
|
+
"checked": "Yes",
|
|
73
|
+
"unchecked": "No"
|
|
74
|
+
}
|
|
75
|
+
},
|
|
62
76
|
"statuses": {
|
|
63
77
|
"label": "Runs",
|
|
64
78
|
"pagination": {
|
|
@@ -46,10 +46,8 @@ export declare class AdminSubscriptionCard extends Base<Data> {
|
|
|
46
46
|
private get __currencyDisplay();
|
|
47
47
|
private get __summaryOptions();
|
|
48
48
|
private get __summaryKey();
|
|
49
|
-
private get __statusOptions();
|
|
50
49
|
private get __currencyCode();
|
|
51
50
|
private get __priceOptions();
|
|
52
|
-
private get __statusKey();
|
|
53
51
|
private get __priceKey();
|
|
54
52
|
}
|
|
55
53
|
export {};
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { getSubscriptionStatus } from "../../../utils/get-subscription-status.js";
|
|
1
2
|
import { TranslatableMixin } from "../../../mixins/translatable.js";
|
|
2
3
|
import { ConfigurableMixin } from "../../../mixins/configurable.js";
|
|
3
4
|
import { parseFrequency } from "../../../utils/parse-frequency.js";
|
|
@@ -37,16 +38,13 @@ export class AdminSubscriptionCard extends Base {
|
|
|
37
38
|
};
|
|
38
39
|
}
|
|
39
40
|
renderBody() {
|
|
40
|
-
var _a;
|
|
41
|
-
const isFailed = !!((_a = this.data) === null || _a === void 0 ? void 0 : _a.first_failed_transaction_date);
|
|
42
41
|
const customer = this.__customer;
|
|
43
42
|
const cart = this.__transactionTemplate;
|
|
44
43
|
const priceKey = this.__priceKey;
|
|
45
44
|
const priceOptions = this.__priceOptions;
|
|
46
45
|
const summaryOptions = this.__summaryOptions;
|
|
47
46
|
const summaryKey = this.__summaryKey;
|
|
48
|
-
const
|
|
49
|
-
const statusOptions = this.__statusOptions;
|
|
47
|
+
const status = getSubscriptionStatus(this.data);
|
|
50
48
|
return html `
|
|
51
49
|
<foxy-nucleon
|
|
52
50
|
class="hidden"
|
|
@@ -125,9 +123,9 @@ export class AdminSubscriptionCard extends Base {
|
|
|
125
123
|
</span>
|
|
126
124
|
</div>
|
|
127
125
|
|
|
128
|
-
<div class="truncate text-s ${
|
|
129
|
-
${
|
|
130
|
-
? html `<foxy-i18n infer="" key
|
|
126
|
+
<div class="truncate text-s ${status === 'failed' ? 'text-error' : 'text-secondary'}">
|
|
127
|
+
${this.data && status
|
|
128
|
+
? html `<foxy-i18n infer="" key="status_${status}" .options=${this.data}></foxy-i18n>`
|
|
131
129
|
: html `​`}
|
|
132
130
|
</div>
|
|
133
131
|
|
|
@@ -281,20 +279,6 @@ export class AdminSubscriptionCard extends Base {
|
|
|
281
279
|
if (items)
|
|
282
280
|
return items.isApproximateCount ? 'summary_approximate' : 'summary';
|
|
283
281
|
}
|
|
284
|
-
get __statusOptions() {
|
|
285
|
-
const data = this.data;
|
|
286
|
-
if (data === null)
|
|
287
|
-
return;
|
|
288
|
-
if (data.first_failed_transaction_date)
|
|
289
|
-
return { date: data.first_failed_transaction_date };
|
|
290
|
-
if (data.end_date)
|
|
291
|
-
return { date: data.end_date };
|
|
292
|
-
if (data.is_active === false)
|
|
293
|
-
return {};
|
|
294
|
-
if (new Date(data.start_date) > new Date())
|
|
295
|
-
return { date: data.start_date };
|
|
296
|
-
return { date: data.next_transaction_date };
|
|
297
|
-
}
|
|
298
282
|
get __currencyCode() {
|
|
299
283
|
var _a, _b, _c;
|
|
300
284
|
const cart = this.__transactionTemplate;
|
|
@@ -329,22 +313,6 @@ export class AdminSubscriptionCard extends Base {
|
|
|
329
313
|
currencyDisplay,
|
|
330
314
|
};
|
|
331
315
|
}
|
|
332
|
-
get __statusKey() {
|
|
333
|
-
const data = this.data;
|
|
334
|
-
if (data === null)
|
|
335
|
-
return;
|
|
336
|
-
if (data.first_failed_transaction_date)
|
|
337
|
-
return 'subscription_failed';
|
|
338
|
-
if (data.end_date) {
|
|
339
|
-
const hasEnded = new Date(data.end_date).getTime() > Date.now();
|
|
340
|
-
return hasEnded ? 'subscription_will_be_cancelled' : 'subscription_cancelled';
|
|
341
|
-
}
|
|
342
|
-
if (data.is_active === false)
|
|
343
|
-
return 'subscription_inactive';
|
|
344
|
-
if (new Date(data.start_date) > new Date())
|
|
345
|
-
return 'subscription_will_be_active';
|
|
346
|
-
return 'subscription_active';
|
|
347
|
-
}
|
|
348
316
|
get __priceKey() {
|
|
349
317
|
var _a;
|
|
350
318
|
const frequency = (_a = this.data) === null || _a === void 0 ? void 0 : _a.frequency;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdminSubscriptionCard.js","sourceRoot":"","sources":["../../../../src/elements/public/AdminSubscriptionCard/AdminSubscriptionCard.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PropertyDeclarations } from 'lit-element';\nimport type { TemplateResult } from 'lit-html';\nimport type { NucleonElement } from '../NucleonElement/NucleonElement';\nimport type { Resource } from '@foxy.io/sdk/core';\nimport type { Rels } from '@foxy.io/sdk/backend';\nimport type { Data } from './types';\n\nimport { TranslatableMixin } from '../../../mixins/translatable';\nimport { ConfigurableMixin } from '../../../mixins/configurable';\nimport { parseFrequency } from '../../../utils/parse-frequency';\nimport { InternalCard } from '../../internal/InternalCard/InternalCard';\nimport { ifDefined } from 'lit-html/directives/if-defined';\nimport { html } from 'lit-html';\n\nconst NS = 'admin-subscription-card';\nconst Base = ConfigurableMixin(TranslatableMixin(InternalCard, NS));\n\n/**\n * Card element representing a subscription (`fx:subscription`).\n * Admin-only.\n *\n * @element foxy-admin-subscription-card\n * @since 1.21.0\n */\nexport class AdminSubscriptionCard extends Base<Data> {\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n localeCodes: { attribute: 'locale-codes' },\n };\n }\n\n /**\n * URL of the `fx:locale_codes` property helper.\n * This will be used to determine the currency code for subscriptions that link to a\n * transaction template without the code.\n */\n localeCodes: string | null = null;\n\n private readonly __transactionTemplateLoaderId = 'transactionTemplateLoader';\n\n private readonly __defaultTemplateSetLoaderId = 'defaultTemplateSetLoader';\n\n private readonly __localeCodesHelperLoaderId = 'localeCodesLoader';\n\n private readonly __templateSetLoaderId = 'templateSetLoader';\n\n private readonly __customerLoaderId = 'customerLoader';\n\n private readonly __itemsLoaderId = 'itemsLoader';\n\n private readonly __storeLoaderId = 'storeLoader';\n\n renderBody(): TemplateResult {\n const isFailed = !!this.data?.first_failed_transaction_date;\n const customer = this.__customer;\n const cart = this.__transactionTemplate;\n\n const priceKey = this.__priceKey;\n const priceOptions = this.__priceOptions;\n const summaryOptions = this.__summaryOptions;\n const summaryKey = this.__summaryKey;\n const statusKey = this.__statusKey;\n const statusOptions = this.__statusOptions;\n\n return html`\n <foxy-nucleon\n class=\"hidden\"\n infer=\"\"\n href=${ifDefined(this.__transactionTemplateHref)}\n id=${this.__transactionTemplateLoaderId}\n @update=${() => this.requestUpdate()}\n >\n </foxy-nucleon>\n\n <foxy-nucleon\n class=\"hidden\"\n infer=\"\"\n href=${ifDefined(this.__defaultTemplateSetHref)}\n id=${this.__defaultTemplateSetLoaderId}\n @update=${() => this.requestUpdate()}\n >\n </foxy-nucleon>\n\n <foxy-nucleon\n class=\"hidden\"\n infer=\"\"\n href=${ifDefined(this.__localeCodesHelperHref)}\n id=${this.__localeCodesHelperLoaderId}\n @update=${() => this.requestUpdate()}\n >\n </foxy-nucleon>\n\n <foxy-nucleon\n class=\"hidden\"\n infer=\"\"\n href=${ifDefined(this.__templateSetHref)}\n id=${this.__templateSetLoaderId}\n @update=${() => this.requestUpdate()}\n >\n </foxy-nucleon>\n\n <foxy-nucleon\n class=\"hidden\"\n infer=\"\"\n href=${ifDefined(this.__customerHref)}\n id=${this.__customerLoaderId}\n @update=${() => this.requestUpdate()}\n >\n </foxy-nucleon>\n\n <foxy-nucleon\n class=\"hidden\"\n infer=\"\"\n href=${ifDefined(this.__itemsHref)}\n id=${this.__itemsLoaderId}\n @update=${() => this.requestUpdate()}\n >\n </foxy-nucleon>\n\n <foxy-nucleon\n class=\"hidden\"\n infer=\"\"\n href=${ifDefined(this.__storeHref)}\n id=${this.__storeLoaderId}\n @update=${() => this.requestUpdate()}\n >\n </foxy-nucleon>\n\n <div class=\"text-left leading-s text-tertiary\">\n <div class=\"flex items-center space-x-s\">\n <span class=\"block flex-1 font-medium text-body truncate\">\n ${summaryOptions && summaryKey\n ? html`<foxy-i18n infer=\"\" key=${summaryKey} .options=${summaryOptions}></foxy-i18n>`\n : html`​`}\n </span>\n <span class=\"text-s\">\n ${priceOptions && priceKey\n ? html`<foxy-i18n infer=\"\" key=${priceKey} .options=${priceOptions}></foxy-i18n>`\n : html`​`}\n </span>\n </div>\n\n <div class=\"truncate text-s ${isFailed ? 'text-error' : 'text-secondary'}\">\n ${statusOptions && statusKey\n ? html`<foxy-i18n infer=\"\" key=${statusKey} .options=${statusOptions}></foxy-i18n>`\n : html`​`}\n </div>\n\n <div class=\"text-tertiary truncate text-s\">\n ${customer?.first_name} ${customer?.last_name} (${cart?.customer_email})\n </div>\n </div>\n `;\n }\n\n get isBodyReady(): boolean {\n return (\n super.isBodyReady &&\n !!this.__items &&\n !!this.__currencyCode &&\n !!this.__currencyDisplay &&\n !!this.__customer\n );\n }\n\n private get __transactionTemplateHref() {\n const data = this.data;\n\n if (!data) return;\n if ('_embedded' in data && 'fx:transaction_template' in data._embedded) return;\n\n const url = new URL(this.data?._links['fx:transaction_template'].href ?? '');\n url.searchParams.set('zoom', 'items');\n return url.toString();\n }\n\n private get __defaultTemplateSetHref() {\n const templateSetUri = this.__transactionTemplate?.template_set_uri;\n\n if (templateSetUri === '') {\n try {\n const url = new URL(this.__store?._links['fx:template_sets'].href ?? '');\n url.searchParams.set('code', 'DEFAULT');\n return url.toString();\n } catch {\n //\n }\n }\n }\n\n private get __localeCodesHelperHref() {\n if (this.__defaultTemplateSetHref || this.__templateSetHref) {\n return this.localeCodes ?? void 0;\n }\n }\n\n private get __templateSetHref() {\n const cart = this.__transactionTemplate;\n if (!cart?.currency_code) return cart?.template_set_uri || void 0;\n }\n\n private get __customerHref() {\n if ('fx:customer' in (this.data?._embedded ?? {})) return;\n return this.data?._links['fx:customer']?.href;\n }\n\n private get __itemsHref() {\n const cart = this.__transactionTemplate;\n\n if (!cart) return;\n if ('_embedded' in cart && 'fx:items' in cart._embedded) return;\n\n const url = new URL(cart._links['fx:items'].href);\n url.searchParams.set('limit', '1');\n return url.toString();\n }\n\n private get __storeHref() {\n return this.data?._links['fx:store']?.href;\n }\n\n private get __transactionTemplate() {\n const data = this.data;\n\n if (data && '_embedded' in data && 'fx:transaction_template' in data._embedded) {\n type Cart = Resource<Rels.TransactionTemplate>;\n type CartWithItems = Resource<Rels.TransactionTemplate, { zoom: 'items' }>;\n return data._embedded['fx:transaction_template'] as Cart | CartWithItems;\n } else {\n type Loader = NucleonElement<Resource<Rels.TransactionTemplate, { zoom: 'items' }>>;\n const selector = `#${this.__transactionTemplateLoaderId}`;\n return this.renderRoot.querySelector<Loader>(selector)?.data ?? null;\n }\n }\n\n private get __defaultTemplateSet() {\n type Loader = NucleonElement<Resource<Rels.TemplateSets>>;\n const selector = `#${this.__defaultTemplateSetLoaderId}`;\n const loader = this.renderRoot.querySelector<Loader>(selector);\n return loader?.data?._embedded['fx:template_sets'][0] ?? null;\n }\n\n private get __localeCodesHelper() {\n type Loader = NucleonElement<Resource<Rels.LocaleCodes>>;\n const selector = `#${this.__localeCodesHelperLoaderId}`;\n return this.renderRoot.querySelector<Loader>(selector)?.data ?? null;\n }\n\n private get __templateSet() {\n type Loader = NucleonElement<Resource<Rels.TemplateSet>>;\n const selector = `#${this.__templateSetLoaderId}`;\n return this.renderRoot.querySelector<Loader>(selector)?.data ?? null;\n }\n\n private get __customer() {\n const data = this.data;\n\n if (data && '_embedded' in data && 'fx:customer' in data._embedded) {\n return data._embedded['fx:customer'] as Resource<Rels.Customer>;\n } else {\n type Loader = NucleonElement<Resource<Rels.Customer>>;\n const selector = `#${this.__customerLoaderId}`;\n return this.renderRoot.querySelector<Loader>(selector)?.data ?? null;\n }\n }\n\n private get __items() {\n type Cart = Resource<Rels.TransactionTemplate>;\n type CartWithItems = Resource<Rels.TransactionTemplate, { zoom: 'items' }>;\n\n const cart = this.__transactionTemplate as Cart | CartWithItems | null;\n\n if (cart && '_embedded' in cart && 'fx:items' in cart._embedded) {\n const items = cart._embedded['fx:items'];\n\n return {\n array: items,\n count: items.length,\n isApproximateCount: items.length === 20,\n };\n }\n\n type Loader = NucleonElement<Resource<Rels.Items>>;\n const loader = this.renderRoot.querySelector<Loader>(`#${this.__itemsLoaderId}`);\n if (!loader?.data) return null;\n\n return {\n array: loader.data._embedded['fx:items'],\n count: loader.data.total_items,\n isApproximateCount: false,\n };\n }\n\n private get __store() {\n type Loader = NucleonElement<Resource<Rels.Store>>;\n const selector = `#${this.__storeLoaderId}`;\n return this.renderRoot.querySelector<Loader>(selector)?.data ?? null;\n }\n\n private get __currencyDisplay() {\n const useCode = this.__store?.use_international_currency_symbol;\n\n if (useCode === true) return 'code';\n if (useCode === false) return 'symbol';\n }\n\n private get __summaryOptions() {\n const { array, count } = this.__items ?? {};\n if (array && count) return { firstItem: array[0], count, countMinus1: count - 1 };\n }\n\n private get __summaryKey() {\n const items = this.__items;\n if (items) return items.isApproximateCount ? 'summary_approximate' : 'summary';\n }\n\n private get __statusOptions() {\n const data = this.data;\n\n if (data === null) return;\n if (data.first_failed_transaction_date) return { date: data.first_failed_transaction_date };\n if (data.end_date) return { date: data.end_date };\n if (data.is_active === false) return {};\n if (new Date(data.start_date) > new Date()) return { date: data.start_date };\n\n return { date: data.next_transaction_date };\n }\n\n private get __currencyCode() {\n const cart = this.__transactionTemplate;\n\n if (cart?.currency_code) {\n return cart.currency_code as string;\n } else {\n const allLocaleCodes = this.__localeCodesHelper;\n const localeCode = (this.__templateSet ?? this.__defaultTemplateSet)?.locale_code;\n const localeInfo = localeCode ? allLocaleCodes?.values[localeCode] : void 0;\n\n if (localeInfo) return /Currency: ([A-Z]{3})/g.exec(localeInfo)?.[1];\n }\n }\n\n private get __priceOptions() {\n const currencyDisplay = this.__currencyDisplay;\n if (currencyDisplay === undefined) return;\n\n const currencyCode = this.__currencyCode;\n if (currencyCode === undefined) return;\n\n const totalOrder = this.__transactionTemplate?.total_order;\n if (totalOrder === undefined) return;\n\n const frequency = this.data?.frequency;\n if (frequency === undefined) return;\n\n return {\n ...parseFrequency(frequency),\n amount: `${totalOrder} ${currencyCode}`,\n currencyDisplay,\n };\n }\n\n private get __statusKey() {\n const data = this.data;\n\n if (data === null) return;\n if (data.first_failed_transaction_date) return 'subscription_failed';\n if (data.end_date) {\n const hasEnded = new Date(data.end_date).getTime() > Date.now();\n return hasEnded ? 'subscription_will_be_cancelled' : 'subscription_cancelled';\n }\n\n if (data.is_active === false) return 'subscription_inactive';\n if (new Date(data.start_date) > new Date()) return 'subscription_will_be_active';\n\n return 'subscription_active';\n }\n\n private get __priceKey() {\n const frequency = this.data?.frequency;\n if (frequency) return `price_${frequency === '.5m' ? 'twice_a_month' : 'recurring'}`;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"AdminSubscriptionCard.js","sourceRoot":"","sources":["../../../../src/elements/public/AdminSubscriptionCard/AdminSubscriptionCard.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PropertyDeclarations } from 'lit-element';\nimport type { TemplateResult } from 'lit-html';\nimport type { NucleonElement } from '../NucleonElement/NucleonElement';\nimport type { Resource } from '@foxy.io/sdk/core';\nimport type { Rels } from '@foxy.io/sdk/backend';\nimport type { Data } from './types';\n\nimport { getSubscriptionStatus } from '../../../utils/get-subscription-status';\nimport { TranslatableMixin } from '../../../mixins/translatable';\nimport { ConfigurableMixin } from '../../../mixins/configurable';\nimport { parseFrequency } from '../../../utils/parse-frequency';\nimport { InternalCard } from '../../internal/InternalCard/InternalCard';\nimport { ifDefined } from 'lit-html/directives/if-defined';\nimport { html } from 'lit-html';\n\nconst NS = 'admin-subscription-card';\nconst Base = ConfigurableMixin(TranslatableMixin(InternalCard, NS));\n\n/**\n * Card element representing a subscription (`fx:subscription`).\n * Admin-only.\n *\n * @element foxy-admin-subscription-card\n * @since 1.21.0\n */\nexport class AdminSubscriptionCard extends Base<Data> {\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n localeCodes: { attribute: 'locale-codes' },\n };\n }\n\n /**\n * URL of the `fx:locale_codes` property helper.\n * This will be used to determine the currency code for subscriptions that link to a\n * transaction template without the code.\n */\n localeCodes: string | null = null;\n\n private readonly __transactionTemplateLoaderId = 'transactionTemplateLoader';\n\n private readonly __defaultTemplateSetLoaderId = 'defaultTemplateSetLoader';\n\n private readonly __localeCodesHelperLoaderId = 'localeCodesLoader';\n\n private readonly __templateSetLoaderId = 'templateSetLoader';\n\n private readonly __customerLoaderId = 'customerLoader';\n\n private readonly __itemsLoaderId = 'itemsLoader';\n\n private readonly __storeLoaderId = 'storeLoader';\n\n renderBody(): TemplateResult {\n const customer = this.__customer;\n const cart = this.__transactionTemplate;\n\n const priceKey = this.__priceKey;\n const priceOptions = this.__priceOptions;\n const summaryOptions = this.__summaryOptions;\n const summaryKey = this.__summaryKey;\n const status = getSubscriptionStatus(this.data);\n\n return html`\n <foxy-nucleon\n class=\"hidden\"\n infer=\"\"\n href=${ifDefined(this.__transactionTemplateHref)}\n id=${this.__transactionTemplateLoaderId}\n @update=${() => this.requestUpdate()}\n >\n </foxy-nucleon>\n\n <foxy-nucleon\n class=\"hidden\"\n infer=\"\"\n href=${ifDefined(this.__defaultTemplateSetHref)}\n id=${this.__defaultTemplateSetLoaderId}\n @update=${() => this.requestUpdate()}\n >\n </foxy-nucleon>\n\n <foxy-nucleon\n class=\"hidden\"\n infer=\"\"\n href=${ifDefined(this.__localeCodesHelperHref)}\n id=${this.__localeCodesHelperLoaderId}\n @update=${() => this.requestUpdate()}\n >\n </foxy-nucleon>\n\n <foxy-nucleon\n class=\"hidden\"\n infer=\"\"\n href=${ifDefined(this.__templateSetHref)}\n id=${this.__templateSetLoaderId}\n @update=${() => this.requestUpdate()}\n >\n </foxy-nucleon>\n\n <foxy-nucleon\n class=\"hidden\"\n infer=\"\"\n href=${ifDefined(this.__customerHref)}\n id=${this.__customerLoaderId}\n @update=${() => this.requestUpdate()}\n >\n </foxy-nucleon>\n\n <foxy-nucleon\n class=\"hidden\"\n infer=\"\"\n href=${ifDefined(this.__itemsHref)}\n id=${this.__itemsLoaderId}\n @update=${() => this.requestUpdate()}\n >\n </foxy-nucleon>\n\n <foxy-nucleon\n class=\"hidden\"\n infer=\"\"\n href=${ifDefined(this.__storeHref)}\n id=${this.__storeLoaderId}\n @update=${() => this.requestUpdate()}\n >\n </foxy-nucleon>\n\n <div class=\"text-left leading-s text-tertiary\">\n <div class=\"flex items-center space-x-s\">\n <span class=\"block flex-1 font-medium text-body truncate\">\n ${summaryOptions && summaryKey\n ? html`<foxy-i18n infer=\"\" key=${summaryKey} .options=${summaryOptions}></foxy-i18n>`\n : html`​`}\n </span>\n <span class=\"text-s\">\n ${priceOptions && priceKey\n ? html`<foxy-i18n infer=\"\" key=${priceKey} .options=${priceOptions}></foxy-i18n>`\n : html`​`}\n </span>\n </div>\n\n <div class=\"truncate text-s ${status === 'failed' ? 'text-error' : 'text-secondary'}\">\n ${this.data && status\n ? html`<foxy-i18n infer=\"\" key=\"status_${status}\" .options=${this.data}></foxy-i18n>`\n : html`​`}\n </div>\n\n <div class=\"text-tertiary truncate text-s\">\n ${customer?.first_name} ${customer?.last_name} (${cart?.customer_email})\n </div>\n </div>\n `;\n }\n\n get isBodyReady(): boolean {\n return (\n super.isBodyReady &&\n !!this.__items &&\n !!this.__currencyCode &&\n !!this.__currencyDisplay &&\n !!this.__customer\n );\n }\n\n private get __transactionTemplateHref() {\n const data = this.data;\n\n if (!data) return;\n if ('_embedded' in data && 'fx:transaction_template' in data._embedded) return;\n\n const url = new URL(this.data?._links['fx:transaction_template'].href ?? '');\n url.searchParams.set('zoom', 'items');\n return url.toString();\n }\n\n private get __defaultTemplateSetHref() {\n const templateSetUri = this.__transactionTemplate?.template_set_uri;\n\n if (templateSetUri === '') {\n try {\n const url = new URL(this.__store?._links['fx:template_sets'].href ?? '');\n url.searchParams.set('code', 'DEFAULT');\n return url.toString();\n } catch {\n //\n }\n }\n }\n\n private get __localeCodesHelperHref() {\n if (this.__defaultTemplateSetHref || this.__templateSetHref) {\n return this.localeCodes ?? void 0;\n }\n }\n\n private get __templateSetHref() {\n const cart = this.__transactionTemplate;\n if (!cart?.currency_code) return cart?.template_set_uri || void 0;\n }\n\n private get __customerHref() {\n if ('fx:customer' in (this.data?._embedded ?? {})) return;\n return this.data?._links['fx:customer']?.href;\n }\n\n private get __itemsHref() {\n const cart = this.__transactionTemplate;\n\n if (!cart) return;\n if ('_embedded' in cart && 'fx:items' in cart._embedded) return;\n\n const url = new URL(cart._links['fx:items'].href);\n url.searchParams.set('limit', '1');\n return url.toString();\n }\n\n private get __storeHref() {\n return this.data?._links['fx:store']?.href;\n }\n\n private get __transactionTemplate() {\n const data = this.data;\n\n if (data && '_embedded' in data && 'fx:transaction_template' in data._embedded) {\n type Cart = Resource<Rels.TransactionTemplate>;\n type CartWithItems = Resource<Rels.TransactionTemplate, { zoom: 'items' }>;\n return data._embedded['fx:transaction_template'] as Cart | CartWithItems;\n } else {\n type Loader = NucleonElement<Resource<Rels.TransactionTemplate, { zoom: 'items' }>>;\n const selector = `#${this.__transactionTemplateLoaderId}`;\n return this.renderRoot.querySelector<Loader>(selector)?.data ?? null;\n }\n }\n\n private get __defaultTemplateSet() {\n type Loader = NucleonElement<Resource<Rels.TemplateSets>>;\n const selector = `#${this.__defaultTemplateSetLoaderId}`;\n const loader = this.renderRoot.querySelector<Loader>(selector);\n return loader?.data?._embedded['fx:template_sets'][0] ?? null;\n }\n\n private get __localeCodesHelper() {\n type Loader = NucleonElement<Resource<Rels.LocaleCodes>>;\n const selector = `#${this.__localeCodesHelperLoaderId}`;\n return this.renderRoot.querySelector<Loader>(selector)?.data ?? null;\n }\n\n private get __templateSet() {\n type Loader = NucleonElement<Resource<Rels.TemplateSet>>;\n const selector = `#${this.__templateSetLoaderId}`;\n return this.renderRoot.querySelector<Loader>(selector)?.data ?? null;\n }\n\n private get __customer() {\n const data = this.data;\n\n if (data && '_embedded' in data && 'fx:customer' in data._embedded) {\n return data._embedded['fx:customer'] as Resource<Rels.Customer>;\n } else {\n type Loader = NucleonElement<Resource<Rels.Customer>>;\n const selector = `#${this.__customerLoaderId}`;\n return this.renderRoot.querySelector<Loader>(selector)?.data ?? null;\n }\n }\n\n private get __items() {\n type Cart = Resource<Rels.TransactionTemplate>;\n type CartWithItems = Resource<Rels.TransactionTemplate, { zoom: 'items' }>;\n\n const cart = this.__transactionTemplate as Cart | CartWithItems | null;\n\n if (cart && '_embedded' in cart && 'fx:items' in cart._embedded) {\n const items = cart._embedded['fx:items'];\n\n return {\n array: items,\n count: items.length,\n isApproximateCount: items.length === 20,\n };\n }\n\n type Loader = NucleonElement<Resource<Rels.Items>>;\n const loader = this.renderRoot.querySelector<Loader>(`#${this.__itemsLoaderId}`);\n if (!loader?.data) return null;\n\n return {\n array: loader.data._embedded['fx:items'],\n count: loader.data.total_items,\n isApproximateCount: false,\n };\n }\n\n private get __store() {\n type Loader = NucleonElement<Resource<Rels.Store>>;\n const selector = `#${this.__storeLoaderId}`;\n return this.renderRoot.querySelector<Loader>(selector)?.data ?? null;\n }\n\n private get __currencyDisplay() {\n const useCode = this.__store?.use_international_currency_symbol;\n\n if (useCode === true) return 'code';\n if (useCode === false) return 'symbol';\n }\n\n private get __summaryOptions() {\n const { array, count } = this.__items ?? {};\n if (array && count) return { firstItem: array[0], count, countMinus1: count - 1 };\n }\n\n private get __summaryKey() {\n const items = this.__items;\n if (items) return items.isApproximateCount ? 'summary_approximate' : 'summary';\n }\n\n private get __currencyCode() {\n const cart = this.__transactionTemplate;\n\n if (cart?.currency_code) {\n return cart.currency_code as string;\n } else {\n const allLocaleCodes = this.__localeCodesHelper;\n const localeCode = (this.__templateSet ?? this.__defaultTemplateSet)?.locale_code;\n const localeInfo = localeCode ? allLocaleCodes?.values[localeCode] : void 0;\n\n if (localeInfo) return /Currency: ([A-Z]{3})/g.exec(localeInfo)?.[1];\n }\n }\n\n private get __priceOptions() {\n const currencyDisplay = this.__currencyDisplay;\n if (currencyDisplay === undefined) return;\n\n const currencyCode = this.__currencyCode;\n if (currencyCode === undefined) return;\n\n const totalOrder = this.__transactionTemplate?.total_order;\n if (totalOrder === undefined) return;\n\n const frequency = this.data?.frequency;\n if (frequency === undefined) return;\n\n return {\n ...parseFrequency(frequency),\n amount: `${totalOrder} ${currencyCode}`,\n currencyDisplay,\n };\n }\n\n private get __priceKey() {\n const frequency = this.data?.frequency;\n if (frequency) return `price_${frequency === '.5m' ? 'twice_a_month' : 'recurring'}`;\n }\n}\n"]}
|
|
@@ -11,7 +11,7 @@ export declare class AdminSubscriptionForm extends Base<Data> {
|
|
|
11
11
|
/** URL of the UOE settings page in the admin. If set, displays a link to that page in the self-service links section. */
|
|
12
12
|
uoeSettingsPage: string | null;
|
|
13
13
|
get hiddenSelector(): BooleanSelector;
|
|
14
|
-
get
|
|
14
|
+
get headerSubtitleKey(): string;
|
|
15
15
|
renderBody(): TemplateResult;
|
|
16
16
|
}
|
|
17
17
|
export {};
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { getSubscriptionStatus } from "../../../utils/get-subscription-status.js";
|
|
1
2
|
import { TranslatableMixin } from "../../../mixins/translatable.js";
|
|
2
3
|
import { BooleanSelector } from '@foxy.io/sdk/core';
|
|
3
4
|
import { InternalForm } from "../../internal/InternalForm/InternalForm.js";
|
|
@@ -26,9 +27,9 @@ export class AdminSubscriptionForm extends Base {
|
|
|
26
27
|
alwaysMatch.unshift('view-action', 'cancel-action');
|
|
27
28
|
return new BooleanSelector(alwaysMatch.join(' ').trim());
|
|
28
29
|
}
|
|
29
|
-
get
|
|
30
|
-
|
|
31
|
-
return
|
|
30
|
+
get headerSubtitleKey() {
|
|
31
|
+
const status = getSubscriptionStatus(this.data);
|
|
32
|
+
return status ? `subtitle_${status}` : super.headerSubtitleKey;
|
|
32
33
|
}
|
|
33
34
|
renderBody() {
|
|
34
35
|
var _a, _b, _c, _d, _e;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdminSubscriptionForm.js","sourceRoot":"","sources":["../../../../src/elements/public/AdminSubscriptionForm/AdminSubscriptionForm.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,iBAAiB,EAAE,wCAAqC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,oDAAiD;AACxE,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAErC,MAAM,EAAE,GAAG,yBAAyB,CAAC;AACrC,MAAM,IAAI,GAAG,iBAAiB,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;AAEjD,MAAM,OAAO,qBAAsB,SAAQ,IAAU;IAArD;;QAQE,yHAAyH;QACzH,oBAAe,GAAkB,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"AdminSubscriptionForm.js","sourceRoot":"","sources":["../../../../src/elements/public/AdminSubscriptionForm/AdminSubscriptionForm.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,qBAAqB,EAAE,kDAA+C;AAC/E,OAAO,EAAE,iBAAiB,EAAE,wCAAqC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,oDAAiD;AACxE,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAErC,MAAM,EAAE,GAAG,yBAAyB,CAAC;AACrC,MAAM,IAAI,GAAG,iBAAiB,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;AAEjD,MAAM,OAAO,qBAAsB,SAAQ,IAAU;IAArD;;QAQE,yHAAyH;QACzH,oBAAe,GAAkB,IAAI,CAAC;IAgIxC,CAAC;IAxIC,MAAM,KAAK,UAAU;QACnB,OAAO;YACL,GAAG,KAAK,CAAC,UAAU;YACnB,eAAe,EAAE,EAAE,SAAS,EAAE,mBAAmB,EAAE;SACpD,CAAC;IACJ,CAAC;IAKD,IAAI,cAAc;;QAChB,MAAM,WAAW,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC;QAChE,IAAI,QAAC,IAAI,CAAC,IAAI,0CAAE,aAAa,CAAA;YAAE,WAAW,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QACpE,IAAI,QAAC,IAAI,CAAC,IAAI,0CAAE,SAAS,CAAA;YAAE,WAAW,CAAC,OAAO,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;QAC/E,OAAO,IAAI,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,IAAI,iBAAiB;QACnB,MAAM,MAAM,GAAG,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChD,OAAO,MAAM,CAAC,CAAC,CAAC,YAAY,MAAM,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC;IACjE,CAAC;IAED,UAAU;;QACR,IAAI,gBAAoC,CAAC;QAEzC,IAAI;YACF,MAAM,GAAG,GAAG,IAAI,GAAG,aAAC,IAAI,CAAC,IAAI,0CAAE,MAAM,CAAC,iBAAiB,EAAE,IAAI,mCAAI,EAAE,CAAC,CAAC;YACrE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACtC,gBAAgB,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;SACnC;QAAC,WAAM;YACN,gBAAgB,GAAG,SAAS,CAAC;SAC9B;QAED,OAAO,IAAI,CAAA;QACP,IAAI,CAAC,YAAY,EAAE;;;;;;;;;;;;;;;;;;;;;;;mBAuBR,SAAS,OAAC,IAAI,CAAC,IAAI,0CAAE,SAAS,CAAC,yBAAyB,EAAE,aAAa,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;YAiC/E,GAAG,CAAA,qWAAqW;;;cAGtW,IAAI,CAAC,eAAe;YACpB,CAAC,CAAC,IAAI,CAAA;;;;2BAIO,IAAI,CAAC,eAAe;;;;iBAI9B;YACH,CAAC,CAAC,EAAE;;;;;QAKV,IAAI,CAAC,oBAAoB,EAAE;;;;;gBAKnB,SAAS,aAAC,IAAI,CAAC,IAAI,0CAAE,MAAM,0CAAG,eAAe,EAAE,IAAI,CAAC;;;;;;;;;;gBAUpD,SAAS,CAAC,gBAAgB,CAAC;;;;;;;;;;QAUnC,KAAK,CAAC,UAAU,EAAE;KACrB,CAAC;IACJ,CAAC;CACF","sourcesContent":["import type { PropertyDeclarations } from 'lit-element';\nimport type { TemplateResult } from 'lit-html';\nimport type { Data } from './types';\n\nimport { getSubscriptionStatus } from '../../../utils/get-subscription-status';\nimport { TranslatableMixin } from '../../../mixins/translatable';\nimport { BooleanSelector } from '@foxy.io/sdk/core';\nimport { InternalForm } from '../../internal/InternalForm/InternalForm';\nimport { ifDefined } from 'lit-html/directives/if-defined';\nimport { html, svg } from 'lit-html';\n\nconst NS = 'admin-subscription-form';\nconst Base = TranslatableMixin(InternalForm, NS);\n\nexport class AdminSubscriptionForm extends Base<Data> {\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n uoeSettingsPage: { attribute: 'uoe-settings-page' },\n };\n }\n\n /** URL of the UOE settings page in the admin. If set, displays a link to that page in the self-service links section. */\n uoeSettingsPage: string | null = null;\n\n get hiddenSelector(): BooleanSelector {\n const alwaysMatch = ['delete', super.hiddenSelector.toString()];\n if (!this.data?.error_message) alwaysMatch.unshift('error-message');\n if (!this.data?.is_active) alwaysMatch.unshift('view-action', 'cancel-action');\n return new BooleanSelector(alwaysMatch.join(' ').trim());\n }\n\n get headerSubtitleKey(): string {\n const status = getSubscriptionStatus(this.data);\n return status ? `subtitle_${status}` : super.headerSubtitleKey;\n }\n\n renderBody(): TemplateResult {\n let transactionsHref: string | undefined;\n\n try {\n const url = new URL(this.data?._links['fx:transactions'].href ?? '');\n url.searchParams.set('zoom', 'items');\n transactionsHref = url.toString();\n } catch {\n transactionsHref = undefined;\n }\n\n return html`\n ${this.renderHeader()}\n\n <foxy-internal-admin-subscription-form-error infer=\"error-message\">\n </foxy-internal-admin-subscription-form-error>\n\n <foxy-internal-summary-control infer=\"general\">\n <foxy-internal-date-control layout=\"summary-item\" infer=\"start-date\">\n </foxy-internal-date-control>\n <foxy-internal-frequency-control\n layout=\"summary-item\"\n infer=\"frequency\"\n allow-twice-a-month\n >\n </foxy-internal-frequency-control>\n <foxy-internal-date-control layout=\"summary-item\" infer=\"next-transaction-date\">\n </foxy-internal-date-control>\n <foxy-internal-date-control layout=\"summary-item\" infer=\"end-date\">\n </foxy-internal-date-control>\n </foxy-internal-summary-control>\n\n <foxy-internal-summary-control infer=\"overdue\">\n <foxy-internal-number-control\n layout=\"summary-item\"\n suffix=${ifDefined(this.data?._embedded['fx:transaction_template'].currency_code)}\n infer=\"past-due-amount\"\n min=\"0\"\n >\n </foxy-internal-number-control>\n </foxy-internal-summary-control>\n\n <foxy-internal-summary-control infer=\"self-service-links\">\n <foxy-internal-admin-subscription-form-link-control infer=\"load-in-cart\">\n </foxy-internal-admin-subscription-form-link-control>\n\n <foxy-internal-admin-subscription-form-link-control\n search=\"cart=checkout\"\n infer=\"load-on-checkout\"\n >\n </foxy-internal-admin-subscription-form-link-control>\n\n <foxy-internal-admin-subscription-form-link-control\n search=\"sub_cancel=next_transaction_date\"\n infer=\"cancel-at-end-of-billing-period\"\n >\n </foxy-internal-admin-subscription-form-link-control>\n\n <foxy-internal-admin-subscription-form-link-control\n search=\"sub_cancel=true\"\n infer=\"cancel-next-day\"\n >\n </foxy-internal-admin-subscription-form-link-control>\n\n <div\n class=\"flex items-start leading-xs text-xs text-secondary\"\n style=\"gap: calc(0.625em + (var(--lumo-border-radius) / 4) - 1px)\"\n >\n ${svg`<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" fill=\"currentColor\" aria-hidden=\"true\" class=\"flex-shrink-0\" style=\"width: 1.25em\"><path fill-rule=\"evenodd\" d=\"M15 8A7 7 0 1 1 1 8a7 7 0 0 1 14 0ZM9 5a1 1 0 1 1-2 0 1 1 0 0 1 2 0ZM6.75 8a.75.75 0 0 0 0 1.5h.75v1.75a.75.75 0 0 0 1.5 0v-2.5A.75.75 0 0 0 8.25 8h-1.5Z\" clip-rule=\"evenodd\" /></svg>`}\n <p>\n <foxy-i18n infer=\"\" key=\"uoe_hint_text\"></foxy-i18n>\n ${this.uoeSettingsPage\n ? html`\n <a\n target=\"_blank\"\n class=\"inline-block rounded font-medium text-body cursor-pointer hover-underline focus-outline-none focus-ring-2 focus-ring-primary-50\"\n href=${this.uoeSettingsPage}\n >\n <foxy-i18n infer=\"\" key=\"uoe_link_text\"></foxy-i18n>\n </a>\n `\n : ''}\n </p>\n </div>\n </foxy-internal-summary-control>\n\n ${this.renderTemplateOrSlot()}\n\n <foxy-internal-async-list-control\n infer=\"attributes\"\n class=\"min-w-0\"\n first=${ifDefined(this.data?._links?.['fx:attributes'].href)}\n item=\"foxy-attribute-card\"\n form=\"foxy-attribute-form\"\n alert\n >\n </foxy-internal-async-list-control>\n\n <foxy-internal-async-list-control\n infer=\"transactions\"\n class=\"min-w-0\"\n first=${ifDefined(transactionsHref)}\n item=\"foxy-transaction-card\"\n form=\"foxy-transaction\"\n hide-create-button\n hide-delete-button\n alert\n wide\n >\n </foxy-internal-async-list-control>\n\n ${super.renderBody()}\n `;\n }\n}\n"]}
|
|
@@ -15,8 +15,6 @@ declare const Base: typeof NucleonElement & import("lit-element").Constructor<im
|
|
|
15
15
|
export declare class SubscriptionCard extends Base<Data> {
|
|
16
16
|
render(): TemplateResult;
|
|
17
17
|
private __getSummaryOptions;
|
|
18
|
-
private __getStatusOptions;
|
|
19
18
|
private __getPriceOptions;
|
|
20
|
-
private __getStatusKey;
|
|
21
19
|
}
|
|
22
20
|
export {};
|
|
@@ -6,6 +6,7 @@ import { ThemeableMixin } from "../../../mixins/themeable.js";
|
|
|
6
6
|
import { TranslatableMixin } from "../../../mixins/translatable.js";
|
|
7
7
|
import { classMap } from "../../../utils/class-map.js";
|
|
8
8
|
import { parseFrequency } from "../../../utils/parse-frequency.js";
|
|
9
|
+
import { getSubscriptionStatus } from "../../../utils/get-subscription-status.js";
|
|
9
10
|
const NS = 'subscription-card';
|
|
10
11
|
const Base = ConfigurableMixin(ResponsiveMixin(ThemeableMixin(TranslatableMixin(NucleonElement, NS))));
|
|
11
12
|
/**
|
|
@@ -16,9 +17,11 @@ const Base = ConfigurableMixin(ResponsiveMixin(ThemeableMixin(TranslatableMixin(
|
|
|
16
17
|
*/
|
|
17
18
|
export class SubscriptionCard extends Base {
|
|
18
19
|
render() {
|
|
19
|
-
var _a, _b, _c
|
|
20
|
-
const
|
|
21
|
-
const
|
|
20
|
+
var _a, _b, _c;
|
|
21
|
+
const status = getSubscriptionStatus(this.data);
|
|
22
|
+
const isRed = status === 'failed';
|
|
23
|
+
const isGreen = status === 'next_payment' || !!(status === null || status === void 0 ? void 0 : status.startsWith('will_end'));
|
|
24
|
+
const isNormal = !isGreen && !isRed;
|
|
22
25
|
return html `
|
|
23
26
|
<div class="relative text-left">
|
|
24
27
|
<div
|
|
@@ -30,14 +33,14 @@ export class SubscriptionCard extends Base {
|
|
|
30
33
|
<div
|
|
31
34
|
class=${classMap({
|
|
32
35
|
'min-w-0 flex-shrink-0 rounded-full relative flex p-s': true,
|
|
33
|
-
'text-success bg-success-10':
|
|
34
|
-
'text-body bg-contrast-5':
|
|
35
|
-
'text-error bg-error-10':
|
|
36
|
+
'text-success bg-success-10': isGreen,
|
|
37
|
+
'text-body bg-contrast-5': isNormal,
|
|
38
|
+
'text-error bg-error-10': isRed,
|
|
36
39
|
})}
|
|
37
40
|
>
|
|
38
41
|
<iron-icon
|
|
39
42
|
class="m-auto"
|
|
40
|
-
icon=${
|
|
43
|
+
icon=${isRed ? 'error-outline' : isGreen ? 'done' : 'done-all'}
|
|
41
44
|
>
|
|
42
45
|
</iron-icon>
|
|
43
46
|
</div>
|
|
@@ -59,17 +62,17 @@ export class SubscriptionCard extends Base {
|
|
|
59
62
|
<div
|
|
60
63
|
class=${classMap({
|
|
61
64
|
'text-m': true,
|
|
62
|
-
'text-tertiary':
|
|
63
|
-
'text-success':
|
|
64
|
-
'text-error':
|
|
65
|
+
'text-tertiary': isNormal,
|
|
66
|
+
'text-success': isGreen,
|
|
67
|
+
'text-error': isRed,
|
|
65
68
|
})}
|
|
66
69
|
>
|
|
67
70
|
<foxy-i18n
|
|
68
71
|
data-testid="status"
|
|
69
|
-
options=${JSON.stringify(this.__getStatusOptions())}
|
|
70
72
|
lang=${this.lang}
|
|
71
|
-
key
|
|
73
|
+
key="status_${status}"
|
|
72
74
|
ns=${this.ns}
|
|
75
|
+
.options=${this.data}
|
|
73
76
|
>
|
|
74
77
|
</foxy-i18n>
|
|
75
78
|
​
|
|
@@ -84,7 +87,7 @@ export class SubscriptionCard extends Base {
|
|
|
84
87
|
options=${JSON.stringify(this.__getPriceOptions())}
|
|
85
88
|
class="text-xxs sm-text-l font-tnum tracking-wide sm-tracking-normal uppercase sm-normal-case font-medium text-secondary sm-text-body sm-block"
|
|
86
89
|
lang=${this.lang}
|
|
87
|
-
key="price_${((
|
|
90
|
+
key="price_${((_a = this.data) === null || _a === void 0 ? void 0 : _a.frequency) === '.5m' ? 'twice_a_month' : 'recurring'}"
|
|
88
91
|
ns=${this.ns}
|
|
89
92
|
>
|
|
90
93
|
</foxy-i18n>
|
|
@@ -111,7 +114,7 @@ export class SubscriptionCard extends Base {
|
|
|
111
114
|
state=${this.in('fail') ? 'error' : this.in({ idle: 'template' }) ? 'empty' : 'busy'}
|
|
112
115
|
class="m-auto"
|
|
113
116
|
lang=${this.lang}
|
|
114
|
-
ns="${this.ns} ${(
|
|
117
|
+
ns="${this.ns} ${(_c = (_b = customElements.get('foxy-spinner')) === null || _b === void 0 ? void 0 : _b.defaultNS) !== null && _c !== void 0 ? _c : ''}"
|
|
115
118
|
>
|
|
116
119
|
</foxy-spinner>
|
|
117
120
|
</div>
|
|
@@ -130,20 +133,6 @@ export class SubscriptionCard extends Base {
|
|
|
130
133
|
count: items.length,
|
|
131
134
|
};
|
|
132
135
|
}
|
|
133
|
-
__getStatusOptions() {
|
|
134
|
-
const data = this.data;
|
|
135
|
-
if (data === null)
|
|
136
|
-
return {};
|
|
137
|
-
if (data.first_failed_transaction_date)
|
|
138
|
-
return { date: data.first_failed_transaction_date };
|
|
139
|
-
if (data.end_date)
|
|
140
|
-
return { date: data.end_date };
|
|
141
|
-
if (data.is_active === false)
|
|
142
|
-
return {};
|
|
143
|
-
if (new Date(data.start_date) > new Date())
|
|
144
|
-
return { date: data.start_date };
|
|
145
|
-
return { date: data.next_transaction_date };
|
|
146
|
-
}
|
|
147
136
|
__getPriceOptions() {
|
|
148
137
|
if (this.data === null)
|
|
149
138
|
return {};
|
|
@@ -151,21 +140,5 @@ export class SubscriptionCard extends Base {
|
|
|
151
140
|
const amount = `${cart.total_order} ${cart.currency_code}`;
|
|
152
141
|
return { ...parseFrequency(this.data.frequency), amount };
|
|
153
142
|
}
|
|
154
|
-
__getStatusKey() {
|
|
155
|
-
const data = this.data;
|
|
156
|
-
if (data === null)
|
|
157
|
-
return;
|
|
158
|
-
if (data.first_failed_transaction_date)
|
|
159
|
-
return 'subscription_failed';
|
|
160
|
-
if (data.end_date) {
|
|
161
|
-
const hasEnded = new Date(data.end_date).getTime() > Date.now();
|
|
162
|
-
return hasEnded ? 'subscription_will_be_cancelled' : 'subscription_cancelled';
|
|
163
|
-
}
|
|
164
|
-
if (data.is_active === false)
|
|
165
|
-
return 'subscription_inactive';
|
|
166
|
-
if (new Date(data.start_date) > new Date())
|
|
167
|
-
return 'subscription_will_be_active';
|
|
168
|
-
return 'subscription_active';
|
|
169
|
-
}
|
|
170
143
|
}
|
|
171
144
|
//# sourceMappingURL=SubscriptionCard.js.map
|