@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.
Files changed (49) hide show
  1. package/dist/cdn/foxy-admin-subscription-card.js +1 -1
  2. package/dist/cdn/foxy-admin-subscription-form.js +1 -1
  3. package/dist/cdn/foxy-customer-portal.js +1 -1
  4. package/dist/cdn/foxy-customer.js +1 -1
  5. package/dist/cdn/foxy-subscription-card.js +1 -1
  6. package/dist/cdn/foxy-subscription-form.js +1 -1
  7. package/dist/cdn/foxy-subscriptions-table.js +1 -1
  8. package/dist/cdn/foxy-webhook-card.js +1 -1
  9. package/dist/cdn/foxy-webhook-form.js +1 -1
  10. package/dist/cdn/{shared-0ed075f9.js → shared-56d70cc2.js} +7 -7
  11. package/dist/cdn/shared-e2675ed0.js +1 -0
  12. package/dist/cdn/translations/admin-subscription-card/en.json +9 -7
  13. package/dist/cdn/translations/admin-subscription-form/en.json +7 -2
  14. package/dist/cdn/translations/customer/en.json +16 -12
  15. package/dist/cdn/translations/customer-portal/en.json +16 -12
  16. package/dist/cdn/translations/subscription-card/en.json +9 -8
  17. package/dist/cdn/translations/subscription-form/en.json +8 -6
  18. package/dist/cdn/translations/subscriptions-table/en.json +9 -7
  19. package/dist/cdn/translations/transaction/en.json +4 -2
  20. package/dist/cdn/translations/webhook-card/en.json +2 -0
  21. package/dist/cdn/translations/webhook-form/en.json +16 -2
  22. package/dist/elements/public/AdminSubscriptionCard/AdminSubscriptionCard.d.ts +0 -2
  23. package/dist/elements/public/AdminSubscriptionCard/AdminSubscriptionCard.js +5 -37
  24. package/dist/elements/public/AdminSubscriptionCard/AdminSubscriptionCard.js.map +1 -1
  25. package/dist/elements/public/AdminSubscriptionForm/AdminSubscriptionForm.d.ts +1 -1
  26. package/dist/elements/public/AdminSubscriptionForm/AdminSubscriptionForm.js +4 -3
  27. package/dist/elements/public/AdminSubscriptionForm/AdminSubscriptionForm.js.map +1 -1
  28. package/dist/elements/public/SubscriptionCard/SubscriptionCard.d.ts +0 -2
  29. package/dist/elements/public/SubscriptionCard/SubscriptionCard.js +17 -44
  30. package/dist/elements/public/SubscriptionCard/SubscriptionCard.js.map +1 -1
  31. package/dist/elements/public/SubscriptionForm/SubscriptionForm.d.ts +1 -1
  32. package/dist/elements/public/SubscriptionForm/SubscriptionForm.js +4 -25
  33. package/dist/elements/public/SubscriptionForm/SubscriptionForm.js.map +1 -1
  34. package/dist/elements/public/SubscriptionsTable/SubscriptionsTable.js +14 -29
  35. package/dist/elements/public/SubscriptionsTable/SubscriptionsTable.js.map +1 -1
  36. package/dist/elements/public/WebhookCard/WebhookCard.d.ts +1 -0
  37. package/dist/elements/public/WebhookCard/WebhookCard.js +25 -19
  38. package/dist/elements/public/WebhookCard/WebhookCard.js.map +1 -1
  39. package/dist/elements/public/WebhookCard/types.d.ts +3 -1
  40. package/dist/elements/public/WebhookCard/types.js.map +1 -1
  41. package/dist/elements/public/WebhookForm/WebhookForm.js +12 -6
  42. package/dist/elements/public/WebhookForm/WebhookForm.js.map +1 -1
  43. package/dist/elements/public/WebhookForm/index.d.ts +1 -0
  44. package/dist/elements/public/WebhookForm/index.js +1 -0
  45. package/dist/elements/public/WebhookForm/index.js.map +1 -1
  46. package/dist/utils/get-subscription-status.d.ts +6 -0
  47. package/dist/utils/get-subscription-status.js +29 -0
  48. package/dist/utils/get-subscription-status.js.map +1 -0
  49. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"WebhookForm.js","sourceRoot":"","sources":["../../../../src/elements/public/WebhookForm/WebhookForm.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PropertyDeclarations } from 'lit-element';\nimport type { TemplateResult } from 'lit-html';\nimport type { NucleonV8N } from '../NucleonElement/types';\nimport type { Data, WebhookLog } from './types';\n\nimport { BooleanSelector, getResourceId } from '@foxy.io/sdk/core';\nimport { TranslatableMixin } from '../../../mixins/translatable';\nimport { InternalForm } from '../../internal/InternalForm/InternalForm';\nimport { ifDefined } from 'lit-html/directives/if-defined';\nimport { html } from 'lit-html';\n\n/**\n * Form element for creating or editing webhooks (`fx:webhook`).\n *\n * @element foxy-webhook-form\n * @since 1.17.0\n */\nexport class WebhookForm extends TranslatableMixin(InternalForm, 'webhook-form')<Data> {\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n getStatusPageHref: { attribute: false },\n getLogPageHref: { attribute: false },\n resourceUri: { attribute: 'resource-uri' },\n };\n }\n\n static get v8n(): NucleonV8N<Data> {\n return [\n ({ name: v }) => !!v || 'name:v8n_required',\n ({ name: v }) => (!!v && v.length <= 255) || 'name:v8n_too_long',\n ({ url: v }) => !v || v.length <= 1000 || 'url:v8n_too_long',\n ({ query: v }) => !v || v.length <= 1000 || 'query:v8n_too_long',\n ({ encryption_key: v }) => !!v || 'encryption-key:v8n_required',\n ({ encryption_key: v }) => !v || v.length <= 1000 || 'encryption-key:v8n_too_long',\n ];\n }\n\n /** If set, renders Statuses list items as <a> tags. */\n getStatusPageHref: ((statusHref: string, status: WebhookLog) => string | null) | null = null;\n\n /** If set, renders Logs list items as <a> tags. */\n getLogPageHref: ((logHref: string, log: WebhookLog) => string | null) | null = null;\n\n /**\n * Optional URI of a transaction, customer or subscription. When provided,\n * the form will display logs and statuses for that particular resource only.\n */\n resourceUri: string | null = null;\n\n private __encryptionKeyGeneratorOptions = { separator: '', length: 512 };\n\n private __eventResources = [\n { value: 'subscription', label: 'event_resource_subscription' },\n { value: 'transaction', label: 'event_resource_transaction' },\n { value: 'customer', label: 'event_resource_customer' },\n ];\n\n get hiddenSelector(): BooleanSelector {\n const alwaysMatch: string[] = [super.hiddenSelector.toString()];\n\n if (this.data) {\n alwaysMatch.unshift('general:event-resource');\n } else {\n alwaysMatch.unshift('logs', 'statuses');\n }\n\n return new BooleanSelector(alwaysMatch.join(' ').trim());\n }\n\n get headerSubtitleOptions(): Record<string, unknown> {\n const format = this.data?.format;\n return { context: format === 'json' ? this.data?.event_resource : format };\n }\n\n edit(data: Partial<Data>): void {\n super.edit(data);\n if (!this.form.format) super.edit({ format: 'json' });\n if (!this.form.version) super.edit({ version: 2 });\n }\n\n renderBody(): TemplateResult {\n const resourceId = this.resourceUri ? getResourceId(this.resourceUri) : null;\n\n let statusesLink: string | undefined;\n let logsLink: string | undefined;\n\n try {\n const url = new URL(this.data?._links['fx:statuses'].href ?? '');\n if (resourceId !== null) url.searchParams.set('resource_id', String(resourceId));\n url.searchParams.set('order', 'date_created desc');\n statusesLink = url.toString();\n } catch {\n statusesLink = undefined;\n }\n\n try {\n const url = new URL(this.data?._links['fx:logs'].href ?? '');\n if (resourceId !== null) url.searchParams.set('resource_id', String(resourceId));\n url.searchParams.set('order', 'date_created desc');\n logsLink = url.toString();\n } catch {\n logsLink = undefined;\n }\n\n return html`\n ${this.renderHeader()}\n\n <foxy-internal-summary-control infer=\"general\">\n <foxy-internal-text-control layout=\"summary-item\" infer=\"name\"></foxy-internal-text-control>\n\n <foxy-internal-select-control\n layout=\"summary-item\"\n infer=\"event-resource\"\n .options=${this.__eventResources}\n >\n </foxy-internal-select-control>\n\n <foxy-internal-password-control\n layout=\"summary-item\"\n infer=\"encryption-key\"\n show-generator\n .generatorOptions=${this.__encryptionKeyGeneratorOptions}\n >\n </foxy-internal-password-control>\n\n <foxy-internal-text-control layout=\"summary-item\" infer=\"query\">\n </foxy-internal-text-control>\n\n <foxy-internal-text-control layout=\"summary-item\" infer=\"url\"></foxy-internal-text-control>\n </foxy-internal-summary-control>\n\n <foxy-internal-async-list-control\n first=${ifDefined(statusesLink)}\n infer=\"statuses\"\n limit=\"10\"\n item=\"foxy-webhook-status-card\"\n hide-delete-button\n .getPageHref=${this.getStatusPageHref}\n .itemProps=${this.resourceUri ? { layout: 'resource' } : {}}\n >\n </foxy-internal-async-list-control>\n\n <foxy-internal-async-list-control\n first=${ifDefined(logsLink)}\n infer=\"logs\"\n limit=\"10\"\n item=\"foxy-webhook-log-card\"\n hide-delete-button\n .getPageHref=${this.getLogPageHref}\n .itemProps=${this.resourceUri ? { layout: 'resource' } : {}}\n >\n </foxy-internal-async-list-control>\n\n ${super.renderBody()}\n `;\n }\n}\n"]}
1
+ {"version":3,"file":"WebhookForm.js","sourceRoot":"","sources":["../../../../src/elements/public/WebhookForm/WebhookForm.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PropertyDeclarations } from 'lit-element';\nimport type { TemplateResult } from 'lit-html';\nimport type { NucleonV8N } from '../NucleonElement/types';\nimport type { Data, WebhookLog } from './types';\n\nimport { BooleanSelector, getResourceId } from '@foxy.io/sdk/core';\nimport { TranslatableMixin } from '../../../mixins/translatable';\nimport { InternalForm } from '../../internal/InternalForm/InternalForm';\nimport { ifDefined } from 'lit-html/directives/if-defined';\nimport { html } from 'lit-html';\n\n/**\n * Form element for creating or editing webhooks (`fx:webhook`).\n *\n * @element foxy-webhook-form\n * @since 1.17.0\n */\nexport class WebhookForm extends TranslatableMixin(InternalForm, 'webhook-form')<Data> {\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n getStatusPageHref: { attribute: false },\n getLogPageHref: { attribute: false },\n resourceUri: { attribute: 'resource-uri' },\n };\n }\n\n static get v8n(): NucleonV8N<Data> {\n return [\n ({ name: v }) => !!v || 'name:v8n_required',\n ({ name: v }) => (!!v && v.length <= 255) || 'name:v8n_too_long',\n ({ url: v }) => !v || v.length <= 1000 || 'url:v8n_too_long',\n ({ query: v }) => !v || v.length <= 1000 || 'query:v8n_too_long',\n ({ encryption_key: v }) => !!v || 'encryption-key:v8n_required',\n ({ encryption_key: v }) => !v || v.length <= 1000 || 'encryption-key:v8n_too_long',\n ];\n }\n\n /** If set, renders Statuses list items as <a> tags. */\n getStatusPageHref: ((statusHref: string, status: WebhookLog) => string | null) | null = null;\n\n /** If set, renders Logs list items as <a> tags. */\n getLogPageHref: ((logHref: string, log: WebhookLog) => string | null) | null = null;\n\n /**\n * Optional URI of a transaction, customer or subscription. When provided,\n * the form will display logs and statuses for that particular resource only.\n */\n resourceUri: string | null = null;\n\n private __encryptionKeyGeneratorOptions = { separator: '', length: 512 };\n\n private __eventResources = [\n { value: 'subscription', label: 'event_resource_subscription' },\n { value: 'transaction', label: 'event_resource_transaction' },\n { value: 'customer', label: 'event_resource_customer' },\n ];\n\n get hiddenSelector(): BooleanSelector {\n const alwaysMatch: string[] = [super.hiddenSelector.toString()];\n\n if (this.data) {\n alwaysMatch.unshift('group-two:event-resource');\n } else {\n alwaysMatch.unshift('logs', 'statuses');\n }\n\n return new BooleanSelector(alwaysMatch.join(' ').trim());\n }\n\n get headerSubtitleOptions(): Record<string, unknown> {\n const format = this.data?.format;\n return { context: format === 'json' ? this.data?.event_resource : format };\n }\n\n edit(data: Partial<Data>): void {\n super.edit(data);\n if (!this.form.format) super.edit({ format: 'json' });\n if (!this.form.version) super.edit({ version: 2 });\n }\n\n renderBody(): TemplateResult {\n const resourceId = this.resourceUri ? getResourceId(this.resourceUri) : null;\n\n let statusesLink: string | undefined;\n let logsLink: string | undefined;\n\n try {\n const url = new URL(this.data?._links['fx:statuses'].href ?? '');\n if (resourceId !== null) url.searchParams.set('resource_id', String(resourceId));\n url.searchParams.set('order', 'date_created desc');\n statusesLink = url.toString();\n } catch {\n statusesLink = undefined;\n }\n\n try {\n const url = new URL(this.data?._links['fx:logs'].href ?? '');\n if (resourceId !== null) url.searchParams.set('resource_id', String(resourceId));\n url.searchParams.set('order', 'date_created desc');\n logsLink = url.toString();\n } catch {\n logsLink = undefined;\n }\n\n return html`\n ${this.renderHeader()}\n\n <foxy-internal-summary-control infer=\"group-one\">\n <foxy-internal-text-control layout=\"summary-item\" infer=\"name\"></foxy-internal-text-control>\n </foxy-internal-summary-control>\n\n <foxy-internal-summary-control infer=\"group-two\">\n <foxy-internal-select-control\n layout=\"summary-item\"\n infer=\"event-resource\"\n .options=${this.__eventResources}\n >\n </foxy-internal-select-control>\n\n <foxy-internal-text-control layout=\"summary-item\" infer=\"query\">\n </foxy-internal-text-control>\n\n <foxy-internal-text-control layout=\"summary-item\" infer=\"url\"></foxy-internal-text-control>\n\n <foxy-internal-password-control\n layout=\"summary-item\"\n infer=\"encryption-key\"\n show-generator\n .generatorOptions=${this.__encryptionKeyGeneratorOptions}\n >\n </foxy-internal-password-control>\n </foxy-internal-summary-control>\n\n <foxy-internal-summary-control infer=\"group-three\">\n <foxy-internal-switch-control infer=\"is-active\"></foxy-internal-switch-control>\n </foxy-internal-summary-control>\n\n <foxy-internal-async-list-control\n first=${ifDefined(statusesLink)}\n infer=\"statuses\"\n limit=\"10\"\n item=\"foxy-webhook-status-card\"\n hide-delete-button\n .getPageHref=${this.getStatusPageHref}\n .itemProps=${this.resourceUri ? { layout: 'resource' } : {}}\n >\n </foxy-internal-async-list-control>\n\n <foxy-internal-async-list-control\n first=${ifDefined(logsLink)}\n infer=\"logs\"\n limit=\"10\"\n item=\"foxy-webhook-log-card\"\n hide-delete-button\n .getPageHref=${this.getLogPageHref}\n .itemProps=${this.resourceUri ? { layout: 'resource' } : {}}\n >\n </foxy-internal-async-list-control>\n\n ${super.renderBody()}\n `;\n }\n}\n"]}
@@ -2,6 +2,7 @@ import '../../internal/InternalAsyncListControl/index';
2
2
  import '../../internal/InternalPasswordControl/index';
3
3
  import '../../internal/InternalSummaryControl/index';
4
4
  import '../../internal/InternalSelectControl/index';
5
+ import '../../internal/InternalSwitchControl/index';
5
6
  import '../../internal/InternalTextControl/index';
6
7
  import '../../internal/InternalForm/index';
7
8
  import '../WebhookStatusCard/index';
@@ -2,6 +2,7 @@ import "../../internal/InternalAsyncListControl/index.js";
2
2
  import "../../internal/InternalPasswordControl/index.js";
3
3
  import "../../internal/InternalSummaryControl/index.js";
4
4
  import "../../internal/InternalSelectControl/index.js";
5
+ import "../../internal/InternalSwitchControl/index.js";
5
6
  import "../../internal/InternalTextControl/index.js";
6
7
  import "../../internal/InternalForm/index.js";
7
8
  import "../WebhookStatusCard/index.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/elements/public/WebhookForm/index.ts"],"names":[],"mappings":"AAAA,0DAAuD;AACvD,yDAAsD;AACtD,wDAAqD;AACrD,uDAAoD;AACpD,qDAAkD;AAClD,8CAA2C;AAE3C,uCAAoC;AACpC,oCAAiC;AAEjC,OAAO,EAAE,WAAW,EAAE,yBAAsB;AAE5C,cAAc,CAAC,MAAM,CAAC,mBAAmB,EAAE,WAAW,CAAC,CAAC;AAExD,OAAO,EAAE,WAAW,EAAE,CAAC","sourcesContent":["import '../../internal/InternalAsyncListControl/index';\nimport '../../internal/InternalPasswordControl/index';\nimport '../../internal/InternalSummaryControl/index';\nimport '../../internal/InternalSelectControl/index';\nimport '../../internal/InternalTextControl/index';\nimport '../../internal/InternalForm/index';\n\nimport '../WebhookStatusCard/index';\nimport '../WebhookLogCard/index';\n\nimport { WebhookForm } from './WebhookForm';\n\ncustomElements.define('foxy-webhook-form', WebhookForm);\n\nexport { WebhookForm };\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/elements/public/WebhookForm/index.ts"],"names":[],"mappings":"AAAA,0DAAuD;AACvD,yDAAsD;AACtD,wDAAqD;AACrD,uDAAoD;AACpD,uDAAoD;AACpD,qDAAkD;AAClD,8CAA2C;AAE3C,uCAAoC;AACpC,oCAAiC;AAEjC,OAAO,EAAE,WAAW,EAAE,yBAAsB;AAE5C,cAAc,CAAC,MAAM,CAAC,mBAAmB,EAAE,WAAW,CAAC,CAAC;AAExD,OAAO,EAAE,WAAW,EAAE,CAAC","sourcesContent":["import '../../internal/InternalAsyncListControl/index';\nimport '../../internal/InternalPasswordControl/index';\nimport '../../internal/InternalSummaryControl/index';\nimport '../../internal/InternalSelectControl/index';\nimport '../../internal/InternalSwitchControl/index';\nimport '../../internal/InternalTextControl/index';\nimport '../../internal/InternalForm/index';\n\nimport '../WebhookStatusCard/index';\nimport '../WebhookLogCard/index';\n\nimport { WebhookForm } from './WebhookForm';\n\ncustomElements.define('foxy-webhook-form', WebhookForm);\n\nexport { WebhookForm };\n"]}
@@ -0,0 +1,6 @@
1
+ import type { Resource } from '@foxy.io/sdk/core';
2
+ import type { Rels } from '@foxy.io/sdk/backend';
3
+ declare type Data = Pick<Resource<Rels.Subscription>, 'is_active' | 'first_failed_transaction_date' | 'start_date' | 'next_transaction_date' | 'end_date'>;
4
+ declare type Status = 'will_start' | 'will_end' | 'will_end_after_payment' | 'next_payment' | 'ended' | 'failed' | 'failed_and_ended' | 'inactive';
5
+ export declare function getSubscriptionStatus(data: Data | null): Status | null;
6
+ export {};
@@ -0,0 +1,29 @@
1
+ export function getSubscriptionStatus(data) {
2
+ if (data === null)
3
+ return null;
4
+ const getTime = (date) => {
5
+ if (!date || date === '0000-00-00')
6
+ return null;
7
+ return new Date(date).getTime();
8
+ };
9
+ const isActive = data.is_active;
10
+ const failure = getTime(data.first_failed_transaction_date);
11
+ const start = getTime(data.start_date);
12
+ const next = getTime(data.next_transaction_date);
13
+ const end = getTime(data.end_date);
14
+ const now = Date.now();
15
+ if (failure)
16
+ return end && end <= now ? 'failed_and_ended' : 'failed';
17
+ if (start === null)
18
+ return null;
19
+ if (isActive && start > now)
20
+ return 'will_start';
21
+ if (next === null)
22
+ return null;
23
+ if (isActive && end && end > now)
24
+ return next <= end ? 'will_end_after_payment' : 'will_end';
25
+ if (isActive)
26
+ return end ? 'ended' : 'next_payment';
27
+ return start <= now && end && end <= now ? 'ended' : 'inactive';
28
+ }
29
+ //# sourceMappingURL=get-subscription-status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-subscription-status.js","sourceRoot":"","sources":["../../src/utils/get-subscription-status.ts"],"names":[],"mappings":"AAsBA,MAAM,UAAU,qBAAqB,CAAC,IAAiB;IACrD,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAE/B,MAAM,OAAO,GAAG,CAAC,IAAmB,EAAE,EAAE;QACtC,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,YAAY;YAAE,OAAO,IAAI,CAAC;QAChD,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;IAClC,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;IAChC,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;IAC5D,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IACjD,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACnC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEvB,IAAI,OAAO;QAAE,OAAO,GAAG,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,QAAQ,CAAC;IACtE,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAEhC,IAAI,QAAQ,IAAI,KAAK,GAAG,GAAG;QAAE,OAAO,YAAY,CAAC;IACjD,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAE/B,IAAI,QAAQ,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG;QAAE,OAAO,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,UAAU,CAAC;IAC7F,IAAI,QAAQ;QAAE,OAAO,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC;IAEpD,OAAO,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC;AAClE,CAAC","sourcesContent":["import type { Resource } from '@foxy.io/sdk/core';\nimport type { Rels } from '@foxy.io/sdk/backend';\n\ntype Data = Pick<\n Resource<Rels.Subscription>,\n | 'is_active'\n | 'first_failed_transaction_date'\n | 'start_date'\n | 'next_transaction_date'\n | 'end_date'\n>;\n\ntype Status =\n | 'will_start'\n | 'will_end'\n | 'will_end_after_payment'\n | 'next_payment'\n | 'ended'\n | 'failed'\n | 'failed_and_ended'\n | 'inactive';\n\nexport function getSubscriptionStatus(data: Data | null): Status | null {\n if (data === null) return null;\n\n const getTime = (date: string | null) => {\n if (!date || date === '0000-00-00') return null;\n return new Date(date).getTime();\n };\n\n const isActive = data.is_active;\n const failure = getTime(data.first_failed_transaction_date);\n const start = getTime(data.start_date);\n const next = getTime(data.next_transaction_date);\n const end = getTime(data.end_date);\n const now = Date.now();\n\n if (failure) return end && end <= now ? 'failed_and_ended' : 'failed';\n if (start === null) return null;\n\n if (isActive && start > now) return 'will_start';\n if (next === null) return null;\n\n if (isActive && end && end > now) return next <= end ? 'will_end_after_payment' : 'will_end';\n if (isActive) return end ? 'ended' : 'next_payment';\n\n return start <= now && end && end <= now ? 'ended' : 'inactive';\n}\n"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@foxy.io/elements",
3
3
  "type": "module",
4
- "version": "1.38.0",
4
+ "version": "1.39.0-beta.2",
5
5
  "description": "E-commerce web components by Foxy.",
6
6
  "repository": {
7
7
  "type": "git",