@foxy.io/elements 1.13.0-beta.3 → 1.14.0-beta.11
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/README.md +1 -1
- package/dist/cdn/foxy-access-recovery-form.js +1 -1
- package/dist/cdn/foxy-address-card.js +1 -1
- package/dist/cdn/foxy-address-form.js +1 -1
- package/dist/cdn/foxy-applied-tax-card.js +1 -1
- package/dist/cdn/foxy-attribute-card.js +1 -1
- package/dist/cdn/foxy-attribute-form.js +1 -1
- package/dist/cdn/foxy-cancellation-form.js +1 -1
- package/dist/cdn/foxy-collection-page.js +1 -1
- package/dist/cdn/foxy-collection-pages.js +1 -1
- package/dist/cdn/foxy-custom-field-card.js +1 -1
- package/dist/cdn/foxy-custom-field-form.js +1 -1
- package/dist/cdn/foxy-customer-api.js +1 -1
- package/dist/cdn/foxy-customer-card.js +1 -1
- package/dist/cdn/foxy-customer-form.js +1 -1
- package/dist/cdn/foxy-customer-portal-settings.js +18 -18
- package/dist/cdn/foxy-customer-portal.js +18 -15
- package/dist/cdn/foxy-customer.js +4 -4
- package/dist/cdn/foxy-customers-table.js +1 -1
- package/dist/cdn/foxy-discount-card.js +1 -1
- package/dist/cdn/foxy-donation.js +1 -1
- package/dist/cdn/foxy-email-template-form.js +1 -0
- package/dist/cdn/foxy-error-entry-card.js +1 -1
- package/dist/cdn/foxy-form-dialog.js +1 -1
- package/dist/cdn/foxy-i18n.js +1 -1
- package/dist/cdn/foxy-items-form.js +1 -1
- package/dist/cdn/foxy-nucleon-element.js +1 -1
- package/dist/cdn/foxy-payment-card.js +1 -1
- package/dist/cdn/foxy-payment-method-card.js +1 -1
- package/dist/cdn/foxy-query-builder.js +1 -1
- package/dist/cdn/foxy-sign-in-form.js +1 -1
- package/dist/cdn/foxy-spinner.js +2 -2
- package/dist/cdn/foxy-subscription-card.js +1 -1
- package/dist/cdn/foxy-subscription-form.js +26 -9
- package/dist/cdn/foxy-subscriptions-table.js +1 -1
- package/dist/cdn/foxy-table.js +1 -1
- package/dist/cdn/foxy-tax-card.js +1 -1
- package/dist/cdn/foxy-tax-form.js +1 -1
- package/dist/cdn/foxy-template-config-form.js +1 -0
- package/dist/cdn/foxy-template-form.js +1 -0
- package/dist/cdn/foxy-transaction-card.js +1 -1
- package/dist/cdn/foxy-transactions-table.js +1 -1
- package/dist/cdn/foxy-user-form.js +1 -1
- package/dist/cdn/foxy-users-table.js +1 -1
- package/dist/cdn/{shared-d4dad105.js → shared-00563cb0.js} +1 -1
- package/dist/cdn/{shared-b0b1d248.js → shared-05956f55.js} +1 -1
- package/dist/cdn/{shared-91a9e922.js → shared-05b473a7.js} +4 -4
- package/dist/cdn/shared-07134f93.js +14 -0
- package/dist/cdn/shared-0ced76a0.js +358 -0
- package/dist/cdn/{shared-a99dea97.js → shared-1177fd2a.js} +1 -1
- package/dist/cdn/{shared-f4119f12.js → shared-16f72e27.js} +1 -1
- package/dist/cdn/shared-1761daef.js +15 -0
- package/dist/cdn/{shared-5fedf5e4.js → shared-200f613b.js} +2 -2
- package/dist/cdn/{shared-4059f633.js → shared-218ba06e.js} +1 -1
- package/dist/cdn/{shared-d9159fe1.js → shared-2b685624.js} +1 -1
- package/dist/cdn/{shared-e9920617.js → shared-34b2c1e2.js} +1 -1
- package/dist/cdn/shared-4168c6cd.js +1 -0
- package/dist/cdn/{shared-cf248335.js → shared-44cfc617.js} +1 -1
- package/dist/cdn/{shared-45d647e4.js → shared-46ee137f.js} +1 -1
- package/dist/cdn/{shared-f0199313.js → shared-593f7e2c.js} +1 -1
- package/dist/cdn/shared-59e44f29.js +1 -0
- package/dist/cdn/{shared-67157a25.js → shared-5d1314d7.js} +1 -1
- package/dist/cdn/{shared-cd700eac.js → shared-60126eee.js} +1 -1
- package/dist/cdn/{shared-17968c53.js → shared-63eaded9.js} +3 -3
- package/dist/cdn/shared-6b7602c7.js +1 -0
- package/dist/cdn/{shared-98ee7fad.js → shared-6d45a07b.js} +1 -1
- package/dist/cdn/shared-70631d0a.js +1 -0
- package/dist/cdn/{shared-f2cf6cfb.js → shared-775b37f9.js} +1 -1
- package/dist/cdn/shared-8730c141.js +314 -0
- package/dist/cdn/{shared-84fa75d9.js → shared-9221e6b2.js} +1 -1
- package/dist/cdn/{shared-f47647ac.js → shared-93f23978.js} +1 -1
- package/dist/cdn/{shared-2860a3d3.js → shared-94b0ae99.js} +2 -2
- package/dist/cdn/shared-a46edf4b.js +1 -0
- package/dist/cdn/shared-a94b7271.js +1 -0
- package/dist/cdn/{shared-54702b33.js → shared-b0f0e8b5.js} +1 -1
- package/dist/cdn/{shared-ed4ed7a5.js → shared-b710881a.js} +2 -2
- package/dist/cdn/{shared-3ae39e52.js → shared-bb824ab4.js} +3 -3
- package/dist/cdn/{shared-036a8b21.js → shared-bda600d6.js} +1 -1
- package/dist/cdn/{shared-b77179fd.js → shared-d3167239.js} +1 -1
- package/dist/cdn/shared-df573cea.js +12 -0
- package/dist/cdn/shared-e36452b9.js +1 -0
- package/dist/cdn/{shared-e5de8675.js → shared-e7f8ffe9.js} +1 -1
- package/dist/cdn/{shared-54c485d2.js → shared-ec861f31.js} +21 -21
- package/dist/cdn/{shared-e0248713.js → shared-f0a83bd6.js} +1 -1
- package/dist/cdn/shared-f968379d.js +264 -0
- package/dist/cdn/{shared-145cc9eb.js → shared-fbeb1de3.js} +1 -1
- package/dist/cdn/{shared-747b0842.js → shared-ff79f3f9.js} +1 -1
- package/dist/cdn/translations/shared/en.json +94 -1
- package/dist/elements/private/Checkbox/Checkbox.d.ts +3 -1
- package/dist/elements/private/Checkbox/Checkbox.js +45 -12
- package/dist/elements/private/Checkbox/Checkbox.js.map +1 -1
- package/dist/elements/private/Choice/Choice.js +9 -9
- package/dist/elements/private/Choice/Choice.js.map +1 -1
- package/dist/elements/private/Group/Group.js +1 -1
- package/dist/elements/private/Group/Group.js.map +1 -1
- package/dist/elements/private/I18N/I18N.js +1 -1
- package/dist/elements/private/I18N/I18N.js.map +1 -1
- package/dist/elements/public/AddressForm/AddressForm.js +8 -4
- package/dist/elements/public/AddressForm/AddressForm.js.map +1 -1
- package/dist/elements/public/AttributeForm/AttributeForm.js +8 -4
- package/dist/elements/public/AttributeForm/AttributeForm.js.map +1 -1
- package/dist/elements/public/CustomFieldForm/CustomFieldForm.js +8 -4
- package/dist/elements/public/CustomFieldForm/CustomFieldForm.js.map +1 -1
- package/dist/elements/public/CustomerForm/CustomerForm.js +8 -4
- package/dist/elements/public/CustomerForm/CustomerForm.js.map +1 -1
- package/dist/elements/public/CustomerPortal/InternalCustomerPortalLink.d.ts +1 -0
- package/dist/elements/public/CustomerPortal/InternalCustomerPortalLink.js +17 -8
- package/dist/elements/public/CustomerPortal/InternalCustomerPortalLink.js.map +1 -1
- package/dist/elements/public/CustomerPortal/InternalCustomerPortalSubscriptions.js +11 -3
- package/dist/elements/public/CustomerPortal/InternalCustomerPortalSubscriptions.js.map +1 -1
- package/dist/elements/public/EmailTemplateForm/EmailTemplateForm.d.ts +46 -0
- package/dist/elements/public/EmailTemplateForm/EmailTemplateForm.js +350 -0
- package/dist/elements/public/EmailTemplateForm/EmailTemplateForm.js.map +1 -0
- package/dist/elements/public/EmailTemplateForm/index.d.ts +9 -0
- package/dist/elements/public/EmailTemplateForm/index.js +11 -0
- package/dist/elements/public/EmailTemplateForm/index.js.map +1 -0
- package/dist/elements/public/EmailTemplateForm/types.d.ts +17 -0
- package/dist/elements/public/EmailTemplateForm/types.js +2 -0
- package/dist/elements/public/EmailTemplateForm/types.js.map +1 -0
- package/dist/elements/public/ItemsForm/ItemsForm.js +2 -2
- package/dist/elements/public/ItemsForm/ItemsForm.js.map +1 -1
- package/dist/elements/public/ItemsForm/private/Picture.d.ts +1 -0
- package/dist/elements/public/ItemsForm/private/Picture.js +2 -0
- package/dist/elements/public/ItemsForm/private/Picture.js.map +1 -1
- package/dist/elements/public/NucleonElement/serveFromCache.js +1 -0
- package/dist/elements/public/NucleonElement/serveFromCache.js.map +1 -1
- package/dist/elements/public/SubscriptionForm/SubscriptionForm.js +12 -4
- package/dist/elements/public/SubscriptionForm/SubscriptionForm.js.map +1 -1
- package/dist/elements/public/TaxForm/TaxForm.js +8 -4
- package/dist/elements/public/TaxForm/TaxForm.js.map +1 -1
- package/dist/elements/public/TemplateConfigForm/CountriesList.d.ts +23 -0
- package/dist/elements/public/TemplateConfigForm/CountriesList.js +138 -0
- package/dist/elements/public/TemplateConfigForm/CountriesList.js.map +1 -0
- package/dist/elements/public/TemplateConfigForm/CountryCard.d.ts +22 -0
- package/dist/elements/public/TemplateConfigForm/CountryCard.js +157 -0
- package/dist/elements/public/TemplateConfigForm/CountryCard.js.map +1 -0
- package/dist/elements/public/TemplateConfigForm/TemplateConfigForm.d.ts +88 -0
- package/dist/elements/public/TemplateConfigForm/TemplateConfigForm.js +1343 -0
- package/dist/elements/public/TemplateConfigForm/TemplateConfigForm.js.map +1 -0
- package/dist/elements/public/TemplateConfigForm/defaults.d.ts +2 -0
- package/dist/elements/public/TemplateConfigForm/defaults.js +95 -0
- package/dist/elements/public/TemplateConfigForm/defaults.js.map +1 -0
- package/dist/elements/public/TemplateConfigForm/index.d.ts +9 -0
- package/dist/elements/public/TemplateConfigForm/index.js +11 -0
- package/dist/elements/public/TemplateConfigForm/index.js.map +1 -0
- package/dist/elements/public/TemplateConfigForm/types.d.ts +150 -0
- package/dist/elements/public/TemplateConfigForm/types.js +2 -0
- package/dist/elements/public/TemplateConfigForm/types.js.map +1 -0
- package/dist/elements/public/TemplateForm/TemplateForm.d.ts +45 -0
- package/dist/elements/public/TemplateForm/TemplateForm.js +343 -0
- package/dist/elements/public/TemplateForm/TemplateForm.js.map +1 -0
- package/dist/elements/public/TemplateForm/index.d.ts +9 -0
- package/dist/elements/public/TemplateForm/index.js +11 -0
- package/dist/elements/public/TemplateForm/index.js.map +1 -0
- package/dist/elements/public/TemplateForm/types.d.ts +17 -0
- package/dist/elements/public/TemplateForm/types.js +2 -0
- package/dist/elements/public/TemplateForm/types.js.map +1 -0
- package/dist/elements/public/index.d.ts +3 -0
- package/dist/elements/public/index.defined.d.ts +3 -0
- package/dist/elements/public/index.defined.js +3 -0
- package/dist/elements/public/index.defined.js.map +1 -1
- package/dist/elements/public/index.js +3 -0
- package/dist/elements/public/index.js.map +1 -1
- package/dist/mixins/themeable.js +143 -24
- package/dist/mixins/themeable.js.map +1 -1
- package/package.json +2 -7
- package/dist/cdn/shared-296637c5.js +0 -1
- package/dist/cdn/shared-4a990126.js +0 -1
- package/dist/cdn/shared-50744508.js +0 -15
- package/dist/cdn/shared-b98f88c9.js +0 -369
- package/dist/cdn/shared-bf09e011.js +0 -572
- package/dist/cdn/shared-c0161e6a.js +0 -1
- package/dist/cdn/shared-c1e0e11f.js +0 -1
- package/dist/cdn/shared-dbcffd8e.js +0 -1
- package/dist/cdn/shared-e21a2aac.js +0 -1
- package/dist/cdn/shared-e55b6bb7.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ItemsForm.js","sourceRoot":"","sources":["../../../../src/elements/public/ItemsForm/ItemsForm.ts"],"names":[],"mappings":"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","sourcesContent":["import '@vaadin/vaadin-button';\nimport { html, PropertyDeclarations, TemplateResult } from 'lit-element';\nimport { parseDuration } from '../../../utils/parse-duration';\nimport { Dropdown, ErrorScreen } from '../../private/index';\nimport { ItemsFormChangeEvent, ItemsFormSubmitEvent } from './events';\nimport { Item } from './private/Item';\nimport { ItemInterface } from './types';\nimport { SignableFields } from './private/SignableFields';\n\nexport { Item };\n\n/**\n * A custom element providing a customizable donation form.\n *\n * @fires ItemsForm#change - changed form data.\n * @fires ItemsForm#submit - submitted form data\n * @fires ItemsForm#load - ProgressEvent instance with server response\n *\n * @slot items - items to be added to the form.\n *\n * @element foxy-items-form\n *\n */\nexport class ItemsForm extends SignableFields {\n /** @readonly */\n public static get scopedElements(): Record<string, unknown> {\n return {\n 'x-error-screen': ErrorScreen,\n 'vaadin-button': customElements.get('vaadin-button'),\n 'x-dropdown': Dropdown,\n 'x-item': Item,\n };\n }\n\n /** @readonly */\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n currency: { type: String },\n readonly: { type: Boolean },\n cart: {\n type: String, // only accepts checkout or add\n converter: value => {\n if (value && !['checkout', 'add'].includes(value)) {\n return null;\n }\n return value;\n },\n },\n target: { type: String },\n store: { type: String, attribute: 'store' },\n sub_frequency: { type: String },\n sub_startdate: {\n type: String,\n converter: value => {\n if (!ItemsForm.__validDate(value)) {\n console.error('Invalid start date', value);\n return '';\n }\n return value;\n },\n },\n sub_enddate: {\n type: String,\n converter: value => {\n if (!ItemsForm.__validDateFuture(value)) {\n console.error('Invalid end date', value);\n return '';\n }\n return value;\n },\n },\n sub_token: { type: String },\n sub_modify: {\n type: String,\n converter: value => {\n if (value === '' || value === 'append') {\n return '';\n } else {\n return 'replace';\n }\n },\n },\n sub_restart: {\n type: String,\n converter: value => {\n if (value === 'true') {\n return value;\n } else {\n return 'auto';\n }\n },\n },\n frequencies: {\n converter: (value, type) => {\n if (!value) {\n return [];\n }\n const freqArray = JSON.parse(value);\n if (!Array.isArray(freqArray)) {\n console.error('Invalid frequency', `Frequency options must be an array.`);\n return [];\n }\n for (const f of freqArray) {\n if (!ItemsForm.__validFrequency(f)) {\n console.error(\n 'Invalid frequency',\n `Invalid frequency option.\n Please, check https://wiki.foxycart.com/v/2.0/products#subscription_product_options for possible values.\n Each frequency must be a in the format:\n - 1d (a number followed by d, for day)\n - 1w (a number followed by w, for week)\n - 1m (a number followed by m, for month)\n - 1y (a number followed by y, for year)\n or .5m (no other decimals are allowed, and this is only for months)\n `,\n f\n );\n return [];\n }\n }\n return freqArray.filter(ItemsForm.__validFrequency);\n },\n },\n items: { type: Array },\n __hasValidItems: { attribute: false },\n __total: { attribute: false },\n __data: { attribute: false },\n };\n }\n\n /**\n * **Required** store subdomain, It is similar to mystore.foxycart.com,\n * unless you use a custom subdomain.\n *\n * **Examples:** `\"mystore.foxycart.com\"` `\"custom.mycoolstore.com\"`\n */\n public store?: string;\n\n /**\n * **Required** 3-letter lowercase currency code.\n *\n * **Example:** `\"usd\"`\n */\n public currency?: string;\n\n /**\n * Makes the entire form readonly.\n */\n public readonly = false;\n\n /**\n * Defines target of the form\n *\n * This attribute controls the destination window of the form submission.\n */\n public target = '_top';\n\n /**\n * Defines the next cart step\n *\n * It can only be either add or checkout.\n * If \"add\" is chosen, this form will add items to the cart and the user will\n * be directed to the cart with these products added upon submission.\n *\n * If set to \"checkout\" (this is the default) the user will be directed to\n * checkout.\n */\n public cart = 'checkout';\n\n /**\n * Optional frequency string encoded as count (integer) + units (one of: `d`\n * for days, `w` for weeks, `m` for months, `y` for years). A special value\n * for twice a month is also supported: `.5m`. If set, the form will create a\n * subscription with the specified frequency in the cart.\n *\n * **Example:** `\"1m\"`\n */\n public sub_frequency?: string;\n\n /**\n * Optional subscription start date encoded as four integer for the year, two\n * for the month and two for the day. If only two or one digits are provided,\n * it is assumed to be next occurence of that day of the month, from the\n * current date.\n *\n * See [Products wiki for more details](https://wiki.foxycart.com/v/2.0/products#a_complete_list_of_product_parameters)\n *\n * ** Example:** `\"10\"`\n */\n public sub_startdate?: string;\n\n /**\n * Optional subscription token, unique URL of a subscription, retrieved from\n * the API, XML datafeeds or Admin interface.\n */\n public sub_token?: string;\n\n /**\n * Optional. Allows the “add to cart” link or form to completely replace the\n * existing subscription loaded\n *\n * Can be either \"replace\", \"append\" or \"\" (a blank string).\n * Using \"append\" or \"\" will result in adding these items to an existing\n * subscription in addition to the existing ones.\n *\n * The \"append\" value is set for convenience, as it describes the behaviour.\n * The submitted value, in this case, will be \"\". The submitted value, in\n * this case, will be \"\".\n *\n * Using \"replace\" results in replacing the existing subscription with the\n * current itmes.\n * See [Products subscription options](https://wiki.foxycart.com/v/2.0/products/subscriptions#subscription-related_product_options)\n */\n public sub_modify = 'replace';\n\n /**\n * Set to \"true\" to indicate that payment is collectable right now.\n * Set to \"auto\" to indicate that payment is collectable right now if the\n * subscription's past-due amount is greater than 0\n */\n public sub_restart = 'auto';\n\n /**\n * Optional subscription end date encoded as four integer for the year, two\n * for the month and two for the day.\n *\n * The absence of a sub_enddate, together with a sub_frequency, means a\n * subscription with indefinite and date.\n *\n * See [Products wiki for more details](https://wiki.foxycart.com/v/2.0/products#a_complete_list_of_product_parameters)\n *\n * ** Example:** `\"20221010\"`\n */\n public sub_enddate?: string;\n\n /**\n * Optional frequency variants in the same format as `frequency`. If this property is set,\n * the form will render the frequency selection interface. If this array includes\n * the value of the `frequency` property, it will be pre-selected in the form.\n *\n * **Example:** `[\"7d\", \".5m\", \"1y\"]`\n */\n public frequencies: string[] = [];\n\n /**\n * Handles the submission of the form\n *\n * - creates a FormData\n * - fill the FormData with item values\n * - add order wide fields to the FormData\n * - submits the form\n */\n private handleSubmit = {\n handleEvent: () => {\n if (this.__data !== null) {\n if (this.dispatchEvent(new ItemsFormSubmitEvent(this.__data!))) {\n this.shadowRoot!.querySelector('form')!.submit();\n }\n }\n },\n };\n\n private __childItemsObserver?: MutationObserver;\n\n private __hasValidItems = false;\n\n private __total = 0;\n\n /**\n * Handles the user input for frequenty field\n * - converts week, year, day and month into first letter only\n * - removes spaces\n * - removes leading zeroes\n * - validates input as propper frequency option\n **/\n private __handleFrequency = {\n handleEvent: (ev: CustomEvent) => {\n const newfrequency = (ev as CustomEvent).detail\n .replace(/([wydm])\\w*/, '$1')\n .replace(/ /g, '')\n .replace(/^0/, '');\n if (ItemsForm.__validFrequency(newfrequency)) {\n this.sub_frequency = newfrequency;\n } else {\n this.sub_frequency = '';\n }\n this.__updateData();\n },\n };\n\n private __data: FormData | null = new FormData();\n\n constructor() {\n super('items-form');\n this.__childItemsObserver = new MutationObserver(this.__observeChildren.bind(this));\n this.__childItemsObserver.observe(this, {\n childList: true,\n attributes: false,\n subtree: true,\n });\n this.updateComplete.then(() => {\n this.__acknowledgeItemElements();\n this.__computeTotalPrice();\n this.__updateData();\n });\n }\n\n public get items(): ItemInterface[] {\n const temp: ItemInterface[] = [];\n this.__itemElements.forEach(e => {\n const proxy = new Proxy(e, {\n set: function (target: Item, property: string | number | symbol, value) {\n const allowedAttributes = Object.keys(target.value);\n if (typeof property === 'string' && allowedAttributes.includes(property)) {\n (target as unknown as ItemInterface)[property] = value;\n return true;\n } else {\n return false;\n }\n },\n get: function (target: Item, property: string | number) {\n return target.value[property];\n },\n });\n temp.push(proxy as unknown as ItemInterface);\n });\n return temp;\n }\n\n /**\n * Optional an array of ItemInterface objects with at least the following properties:\n * - name: the name of the item\n * - price: the price of each of this item\n * The following optional properties will be used:\n * - quantity: (defaults to 1) how many of each item are added to the form\n * - image: an image url to be displayed in the form for this item\n * - items: an array of other items that are to be treated as bundled with this item\n * - signatures: an object containing a key value list of previously generated HMAC validation codes\n *\n * Other item properties are accepted and sent to foxy cart\n * See [Products wiki for more details](https://wiki.foxycart.com/v/2.0/products#a_complete_list_of_product_parameters)\n */\n public set items(value: ItemInterface[]) {\n this.__removeItems();\n this.__createItemsFromItemArray(value);\n }\n\n /**\n * The total value of the items to be submitted.\n */\n public get total(): number {\n return this.__total;\n }\n\n public render(): TemplateResult {\n if (!this.store || !this.currency) {\n return html`<x-error-screen type=\"setup_needed\" class=\"relative\"></x-error-screen>`;\n }\n\n return html`\n <div>\n <form\n class=\"overflow-hidden\"\n method=\"POST\"\n target=\"${this.target}\"\n action=\"https://${this.store}/cart\"\n data-testid=\"form\"\n class=\"hidden\"\n hidden\n >\n ${this.__data\n ? html` ${[...this.__data.entries()].map(\n ([name, value]) => html`<input type=\"hidden\" name=${name} value=${value} />`\n )}`\n : ''}\n </form>\n\n <section class=\"items\">\n <slot></slot>\n </section>\n\n ${!this.readonly\n ? html`\n <section class=\"actions flex flex-wrap justify-end m-m\">\n ${this.frequencies && this.frequencies.length\n ? html`\n <x-dropdown\n type=\"text\"\n name=\"frequency\"\n class=\"subscription m-s w-full sm-w-auto\"\n lang=${this.lang}\n .value=${this.sub_frequency ?? '0'}\n .items=${this.frequencies.concat(['0'])}\n .getText=${this.__translateFrequency.bind(this)}\n @change=${this.__handleFrequency}\n >\n </x-dropdown>\n `\n : ''}\n\n <vaadin-button\n class=\"m-s w-full sm-w-auto\"\n theme=\"primary\"\n data-testid=\"submit\"\n ?disabled=${!this.__hasValidItems}\n @click=${this.handleSubmit}\n >\n <span class=\"total\">\n ${this.__submitBtnText(this.__translateAmount(this.total))}\n </span>\n </vaadin-button>\n </section>\n `\n : ''}\n </div>\n `;\n }\n\n /** Add new items */\n public addItems(newItems: ItemInterface[]): void {\n for (const p of newItems) {\n const newItem = this.createItem(p);\n this.appendChild(newItem);\n this.__acknowledgeItemElement(newItem as Item);\n }\n }\n\n /** Remove items */\n public removeItems(itemIds: number[]): void {\n this.__removeItems((p: Item) => itemIds.includes(p.pid));\n }\n\n public updated(): void {\n this.dispatchEvent(new ItemsFormChangeEvent(this.__data!));\n }\n\n public createItem(p: ItemInterface): Element {\n const scopedItem = (this.constructor as any).getScopedTagName('x-item');\n const newItem = document.createElement(scopedItem);\n newItem.value = p;\n newItem.currency = this.currency;\n newItem.readonly = this.readonly;\n return newItem;\n }\n\n private __submitBtnText(value: string): string {\n if (!this.sub_frequency || this.sub_frequency == '0') {\n return this._t('checkout.buy', { value });\n } else {\n const duration = parseDuration(this.sub_frequency);\n if (duration.count === 1) {\n return this._t('checkout.subscribe_single_unit', {\n value,\n period: this._t(duration.units).toLowerCase(),\n });\n } else {\n return this._t('checkout.subscribe_muiltiple_units', {\n value,\n period: this.__translateFrequency(this.sub_frequency).toLowerCase(),\n });\n }\n }\n }\n\n /**\n * An array with both items created as elements and created parameter\n */\n private get __itemElements(): NodeListOf<Item> {\n return this.querySelectorAll('[data-item]');\n }\n\n /** Create child Items from items array\n */\n private __createItemsFromItemArray(itemsArray: ItemInterface[]) {\n this.addItems(itemsArray);\n }\n\n /** Removes item from the form based on a condition */\n private __removeItems(condition = (e: Item) => true) {\n this.__itemElements.forEach(p => {\n if (condition(p)) {\n p.remove();\n }\n });\n }\n\n /**\n * Adds a signature to a post field\n *\n * This method does not compute the signature. It must be provided.\n *\n * @argument string name The name of the field\n * @argument string signature The computed signature to add to the field\n * @argument string open Whether the field value is customized by the user\n * @return string signedName the name of the field with the signature\n */\n private __addSignature(name: string, signature: string, open?: string | boolean): string {\n return `${name}||${signature}${open ? '||open' : ''}`;\n }\n\n /**\n * Add all items from this.__itemElements to a FormData\n *\n * - Iterate of items in itemElements\n * - Add valid items to Form Data\n *\n * @argument FormData fd the FormData instance to fill\n * @return number the number of items added\n **/\n private __formDataFill(fd: FormData): number {\n let added = 0;\n this.__itemElements.forEach(e => {\n added += this.__formDataAddItem(fd, e);\n });\n this.__formDataAddCartWideSubscriptionFields(fd);\n return added;\n }\n\n /**\n * Add custom user provided fields\n */\n private __formDataCustomInputs(fd: FormData) {\n this.querySelectorAll(`[name]`).forEach(e => {\n const el = e as HTMLInputElement;\n if (el.tagName == 'INPUT' && ['checkbox', 'radio'].includes(el.type)) {\n if (!el.checked) return;\n }\n if (el.tagName == 'OPTION') {\n return;\n }\n if (el.value && ['number', 'string'].includes(typeof el.value)) {\n fd.set(el.name, el.value);\n }\n });\n }\n\n // Reserved attributes are not to be submitted\n // other attributes, included custom attributes added by the user, will be submitted\n private __isAttributeReserved(attribute: string): boolean {\n const reservedAttributes = [\n 'alt',\n 'currency',\n 'description',\n 'isChildren',\n 'isItem',\n 'items',\n 'open',\n 'pid',\n 'signatures',\n 'slot',\n 'total',\n ];\n return reservedAttributes.includes(attribute);\n }\n\n /**\n * Adds a item to a form data\n *\n * @argument {FormData} fd the FormData to which the item will be added\n * @argument {Item} the item to add\n **/\n private __formDataAddItem(fd: FormData, itemEl: Item, parent: Item | null = null): number {\n let added = 0;\n if (this.__validItem(itemEl)) {\n if (!itemEl.value['pid']) {\n throw new Error('Attempt to convert a item without a propper ID');\n }\n if (parent && parent.getAttribute('code')) {\n itemEl.setAttribute('parent_code', parent.getAttribute('code')!);\n }\n for (let i = 0; i < itemEl.attributes.length; i++) {\n const field = itemEl.attributes[i];\n if (!this.__isAttributeReserved(field.name) && !field.name.startsWith('data-')) {\n let fieldValue: unknown = (itemEl as any)[field.name];\n // Adds a signature if possible\n if (itemEl.code && ['string', 'number'].includes(typeof fieldValue)) {\n if (parent && field.name == 'quantity') {\n fieldValue = Number(field.value) * parent.quantity;\n }\n fd.set(itemEl.signedName(field.name), (fieldValue as string | number).toString());\n }\n }\n }\n added += 1;\n this.__formDataAddSubscriptionFields(fd, itemEl);\n }\n const childItems = itemEl.querySelectorAll('[data-bundled]');\n if (childItems && itemEl.quantity > 0) {\n for (const child of childItems) {\n added += this.__formDataAddItem(fd, child as Item, itemEl);\n }\n }\n return added;\n }\n\n /**\n * Adds subscription fields to a FormData\n *\n * @argument {FormData} fd the FormData to which subscription fields will be added\n **/\n private __formDataAddSubscriptionFields(fd: FormData, itemEl: Item): void {\n // added if sub_frequency is set\n if (this.sub_frequency) {\n for (const s of ['sub_frequency', 'sub_startdate', 'sub_enddate']) {\n if ((this as any)[s]) {\n fd.set(itemEl.signedName(s), (this as any)[s]);\n }\n }\n }\n }\n\n /**\n * Adds cart wide subscription fields to a FormData\n *\n * @argument {FormData} fd the FormData to which subscription fields will be added\n */\n private __formDataAddCartWideSubscriptionFields(fd: FormData): void {\n if (this.sub_frequency) {\n // added if itself is set\n if (this.sub_token) fd.set(this.signedName('sub_token'), this.sub_token);\n // added regardless\n fd.set(this.signedName('sub_modify'), this.sub_modify);\n fd.set(this.signedName('sub_restart'), this.sub_restart);\n }\n }\n\n /**\n * Adds cart related fields to a FormData\n *\n * @argument {FormData} fd the FormData to which the cart fields will be added.\n */\n private __formDataAddCartFields(fd: FormData): void {\n if (this.cart) {\n fd.set('cart', this.cart!);\n } else {\n fd.delete('cart');\n }\n }\n\n /**\n * Validates a string for subscription start date or end date according to\n *\n * @argument string strDate the date as a string to be used as start or end date.\n *\n * https://wiki.foxycart.com/v/2.0/products#subscription_product_options\n * See [Products subscription options for more details](https://wiki.foxycart.com/v/2.0/products#subscription_product_options)\n */\n private static __validDate(strDate: string | null | undefined): boolean {\n if (strDate === null || strDate === undefined) {\n return false;\n }\n if (strDate.match(/^(\\d{1,2}|\\d{8})$/)) {\n if (strDate.match(/^\\d{2}$/)) {\n if (Number(strDate) > 31) {\n return false;\n }\n }\n return true;\n }\n if (!strDate.match(/^\\.5m/) && ItemsForm.__validFrequency(strDate)) {\n return true;\n }\n return false;\n }\n\n /**\n * Checks if a string date is in the future.\n *\n * @argument string strdate the date, as a string, to be checked.\n * @returns boolean the date is a valid future date.\n */\n private static __validDateFuture(strDate: string | null | undefined): boolean {\n let valid = false;\n if (ItemsForm.__validDate(strDate)) {\n if (strDate!.match(/^\\d{8}/)) {\n const now = new Date();\n valid = now.toISOString().replace(/(-|T.*)/g, '') <= strDate!;\n } else {\n valid = true;\n }\n }\n return valid;\n }\n\n /**\n * Checks if a frequency complies with possible values\n *\n * @argument string strFrequency the frequency string to be validated.\n * @returns boolean the string is a foxy cart frequency string.\n */\n private static __validFrequency(strFrequency: string | null | undefined): boolean {\n if (!strFrequency) {\n return false;\n } else {\n return !!strFrequency.match(/^(\\.5m|\\d+[dwmy])$/);\n }\n }\n\n /** Subscribe to late inserted items.\n *\n * @argument MutationRecord[] the list of changes occurred.\n **/\n private __observeChildren(mutationList: MutationRecord[]): void {\n mutationList.forEach(m => {\n if (m.type == 'childList') {\n m.addedNodes.forEach(n => {\n const e = n as HTMLElement;\n e.addEventListener('change', this.__itemChange.bind(this));\n });\n }\n });\n this.__acknowledgeItemElements();\n this.__computeTotalPrice();\n this.__updateData();\n }\n\n /** Updates the form on item change */\n private __itemChange(): void {\n this.__computeTotalPrice();\n this.__updateData();\n }\n\n /** Compute the total price of all items in the form */\n private __computeTotalPrice(): void {\n let total = 0;\n this.__itemElements.forEach(e => {\n const item = e as Item;\n if (item.total) {\n total += Number(item.total);\n }\n });\n this.__total = Number(total.toFixed(2));\n }\n\n /** Go through all pcroduct elements and executes acknoledges each one */\n private __acknowledgeItemElements(): void {\n this.__itemElements.forEach((e: Element) => {\n const i = e as Item;\n this.__acknowledgeItemElement(i);\n });\n }\n\n /**\n * Treat this item item element as part of the form:\n *\n * - listen to its change events\n * - set its currency to be the forms currency\n */\n private __acknowledgeItemElement(item: Item) {\n item.addEventListener('change', this.__itemChange.bind(this));\n item.currency = this.currency!;\n }\n\n /**\n * Checks if item has quantity and price\n *\n * @argument Item the item to be validated\n * @returns boolean the item is valid\n **/\n private __validItem(item: Item): boolean {\n const pid = item.getAttribute('pid');\n const qty = Number(item.getAttribute('quantity'));\n const price = Number(item.getAttribute('price'));\n return !!(pid && qty > 0 && price >= 0);\n }\n\n /**\n * Translates a frequency string\n *\n * @argument string the frequency string to be translated\n * @returns string the translated string\n */\n private __translateFrequency(frequency: string) {\n if (frequency.startsWith('0')) return this._t('frequency_once');\n if (frequency === '.5m') return this._t('frequency_0_5m');\n const { count, units } = parseDuration(frequency);\n return this._t('frequency', {\n units: this._t(units, { count }),\n count,\n });\n }\n\n /**\n * Translate a given amount\n *\n * @argument number the amount to be translated\n * @returns string the translated amount\n */\n private __translateAmount(amount: number) {\n return amount.toLocaleString(this.lang, {\n minimumFractionDigits: 2,\n currency: this.currency!,\n style: 'currency',\n });\n }\n\n private __updateData() {\n this.__data = null;\n const form = this.shadowRoot!.querySelector('form');\n if (!form) return;\n const data = new FormData();\n const itemsAdded = this.__formDataFill(data);\n this.__hasValidItems = !!itemsAdded;\n this.__formDataAddCartFields(data);\n this.__formDataCustomInputs(data);\n this.__data = data;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ItemsForm.js","sourceRoot":"","sources":["../../../../src/elements/public/ItemsForm/ItemsForm.ts"],"names":[],"mappings":"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","sourcesContent":["import '@vaadin/vaadin-button';\nimport { html, PropertyDeclarations, TemplateResult } from 'lit-element';\nimport { parseDuration } from '../../../utils/parse-duration';\nimport { Dropdown, ErrorScreen } from '../../private/index';\nimport { ItemsFormChangeEvent, ItemsFormSubmitEvent } from './events';\nimport { Item } from './private/Item';\nimport { ItemInterface } from './types';\nimport { SignableFields } from './private/SignableFields';\n\nexport { Item };\n\n/**\n * A custom element providing a customizable donation form.\n *\n * @fires ItemsForm#change - changed form data.\n * @fires ItemsForm#submit - submitted form data\n * @fires ItemsForm#load - ProgressEvent instance with server response\n *\n * @slot items - items to be added to the form.\n *\n * @element foxy-items-form\n *\n */\nexport class ItemsForm extends SignableFields {\n /** @readonly */\n public static get scopedElements(): Record<string, unknown> {\n return {\n 'x-error-screen': ErrorScreen,\n 'vaadin-button': customElements.get('vaadin-button'),\n 'x-dropdown': Dropdown,\n 'x-item': Item,\n };\n }\n\n /** @readonly */\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n currency: { type: String },\n readonly: { type: Boolean },\n cart: {\n type: String, // only accepts checkout or add\n converter: value => {\n if (value && !['checkout', 'add'].includes(value)) {\n return null;\n }\n return value;\n },\n },\n target: { type: String },\n store: { type: String, attribute: 'store' },\n sub_frequency: { type: String },\n sub_startdate: {\n type: String,\n converter: value => {\n if (!ItemsForm.__validDate(value)) {\n console.error('Invalid start date', value);\n return '';\n }\n return value;\n },\n },\n sub_enddate: {\n type: String,\n converter: value => {\n if (!ItemsForm.__validDateFuture(value)) {\n console.error('Invalid end date', value);\n return '';\n }\n return value;\n },\n },\n sub_token: { type: String },\n sub_modify: {\n type: String,\n converter: value => {\n if (value === '' || value === 'append') {\n return '';\n } else {\n return 'replace';\n }\n },\n },\n sub_restart: {\n type: String,\n converter: value => {\n if (value === 'true') {\n return value;\n } else {\n return 'auto';\n }\n },\n },\n frequencies: {\n converter: value => {\n if (!value) {\n return [];\n }\n const freqArray = JSON.parse(value);\n if (!Array.isArray(freqArray)) {\n console.error('Invalid frequency', `Frequency options must be an array.`);\n return [];\n }\n for (const f of freqArray) {\n if (!ItemsForm.__validFrequency(f)) {\n console.error(\n 'Invalid frequency',\n `Invalid frequency option.\n Please, check https://wiki.foxycart.com/v/2.0/products#subscription_product_options for possible values.\n Each frequency must be a in the format:\n - 1d (a number followed by d, for day)\n - 1w (a number followed by w, for week)\n - 1m (a number followed by m, for month)\n - 1y (a number followed by y, for year)\n or .5m (no other decimals are allowed, and this is only for months)\n `,\n f\n );\n return [];\n }\n }\n return freqArray.filter(ItemsForm.__validFrequency);\n },\n },\n items: { type: Array },\n __hasValidItems: { attribute: false },\n __total: { attribute: false },\n __data: { attribute: false },\n };\n }\n\n /**\n * **Required** store subdomain, It is similar to mystore.foxycart.com,\n * unless you use a custom subdomain.\n *\n * **Examples:** `\"mystore.foxycart.com\"` `\"custom.mycoolstore.com\"`\n */\n public store?: string;\n\n /**\n * **Required** 3-letter lowercase currency code.\n *\n * **Example:** `\"usd\"`\n */\n public currency?: string;\n\n /**\n * Makes the entire form readonly.\n */\n public readonly = false;\n\n /**\n * Defines target of the form\n *\n * This attribute controls the destination window of the form submission.\n */\n public target = '_top';\n\n /**\n * Defines the next cart step\n *\n * It can only be either add or checkout.\n * If \"add\" is chosen, this form will add items to the cart and the user will\n * be directed to the cart with these products added upon submission.\n *\n * If set to \"checkout\" (this is the default) the user will be directed to\n * checkout.\n */\n public cart = 'checkout';\n\n /**\n * Optional frequency string encoded as count (integer) + units (one of: `d`\n * for days, `w` for weeks, `m` for months, `y` for years). A special value\n * for twice a month is also supported: `.5m`. If set, the form will create a\n * subscription with the specified frequency in the cart.\n *\n * **Example:** `\"1m\"`\n */\n public sub_frequency?: string;\n\n /**\n * Optional subscription start date encoded as four integer for the year, two\n * for the month and two for the day. If only two or one digits are provided,\n * it is assumed to be next occurence of that day of the month, from the\n * current date.\n *\n * See [Products wiki for more details](https://wiki.foxycart.com/v/2.0/products#a_complete_list_of_product_parameters)\n *\n * ** Example:** `\"10\"`\n */\n public sub_startdate?: string;\n\n /**\n * Optional subscription token, unique URL of a subscription, retrieved from\n * the API, XML datafeeds or Admin interface.\n */\n public sub_token?: string;\n\n /**\n * Optional. Allows the “add to cart” link or form to completely replace the\n * existing subscription loaded\n *\n * Can be either \"replace\", \"append\" or \"\" (a blank string).\n * Using \"append\" or \"\" will result in adding these items to an existing\n * subscription in addition to the existing ones.\n *\n * The \"append\" value is set for convenience, as it describes the behaviour.\n * The submitted value, in this case, will be \"\". The submitted value, in\n * this case, will be \"\".\n *\n * Using \"replace\" results in replacing the existing subscription with the\n * current itmes.\n * See [Products subscription options](https://wiki.foxycart.com/v/2.0/products/subscriptions#subscription-related_product_options)\n */\n public sub_modify = 'replace';\n\n /**\n * Set to \"true\" to indicate that payment is collectable right now.\n * Set to \"auto\" to indicate that payment is collectable right now if the\n * subscription's past-due amount is greater than 0\n */\n public sub_restart = 'auto';\n\n /**\n * Optional subscription end date encoded as four integer for the year, two\n * for the month and two for the day.\n *\n * The absence of a sub_enddate, together with a sub_frequency, means a\n * subscription with indefinite and date.\n *\n * See [Products wiki for more details](https://wiki.foxycart.com/v/2.0/products#a_complete_list_of_product_parameters)\n *\n * ** Example:** `\"20221010\"`\n */\n public sub_enddate?: string;\n\n /**\n * Optional frequency variants in the same format as `frequency`. If this property is set,\n * the form will render the frequency selection interface. If this array includes\n * the value of the `frequency` property, it will be pre-selected in the form.\n *\n * **Example:** `[\"7d\", \".5m\", \"1y\"]`\n */\n public frequencies: string[] = [];\n\n /**\n * Handles the submission of the form\n *\n * - creates a FormData\n * - fill the FormData with item values\n * - add order wide fields to the FormData\n * - submits the form\n */\n private handleSubmit = {\n handleEvent: () => {\n if (this.__data !== null) {\n if (this.dispatchEvent(new ItemsFormSubmitEvent(this.__data!))) {\n this.shadowRoot!.querySelector('form')!.submit();\n }\n }\n },\n };\n\n private __childItemsObserver?: MutationObserver;\n\n private __hasValidItems = false;\n\n private __total = 0;\n\n /**\n * Handles the user input for frequenty field\n * - converts week, year, day and month into first letter only\n * - removes spaces\n * - removes leading zeroes\n * - validates input as propper frequency option\n **/\n private __handleFrequency = {\n handleEvent: (ev: CustomEvent) => {\n const newfrequency = (ev as CustomEvent).detail\n .replace(/([wydm])\\w*/, '$1')\n .replace(/ /g, '')\n .replace(/^0/, '');\n if (ItemsForm.__validFrequency(newfrequency)) {\n this.sub_frequency = newfrequency;\n } else {\n this.sub_frequency = '';\n }\n this.__updateData();\n },\n };\n\n private __data: FormData | null = new FormData();\n\n constructor() {\n super('items-form');\n this.__childItemsObserver = new MutationObserver(this.__observeChildren.bind(this));\n this.__childItemsObserver.observe(this, {\n childList: true,\n attributes: false,\n subtree: true,\n });\n this.updateComplete.then(() => {\n this.__acknowledgeItemElements();\n this.__computeTotalPrice();\n this.__updateData();\n });\n }\n\n public get items(): ItemInterface[] {\n const temp: ItemInterface[] = [];\n this.__itemElements.forEach(e => {\n const proxy = new Proxy(e, {\n set: function (target: Item, property: string | number | symbol, value) {\n const allowedAttributes = Object.keys(target.value);\n if (typeof property === 'string' && allowedAttributes.includes(property)) {\n (target as unknown as ItemInterface)[property] = value;\n return true;\n } else {\n return false;\n }\n },\n get: function (target: Item, property: string | number) {\n return target.value[property];\n },\n });\n temp.push(proxy as unknown as ItemInterface);\n });\n return temp;\n }\n\n /**\n * Optional an array of ItemInterface objects with at least the following properties:\n * - name: the name of the item\n * - price: the price of each of this item\n * The following optional properties will be used:\n * - quantity: (defaults to 1) how many of each item are added to the form\n * - image: an image url to be displayed in the form for this item\n * - items: an array of other items that are to be treated as bundled with this item\n * - signatures: an object containing a key value list of previously generated HMAC validation codes\n *\n * Other item properties are accepted and sent to foxy cart\n * See [Products wiki for more details](https://wiki.foxycart.com/v/2.0/products#a_complete_list_of_product_parameters)\n */\n public set items(value: ItemInterface[]) {\n this.__removeItems();\n this.__createItemsFromItemArray(value);\n }\n\n /**\n * The total value of the items to be submitted.\n */\n public get total(): number {\n return this.__total;\n }\n\n public render(): TemplateResult {\n if (!this.store || !this.currency) {\n return html`<x-error-screen type=\"setup_needed\" class=\"relative\"></x-error-screen>`;\n }\n\n return html`\n <div>\n <form\n class=\"overflow-hidden\"\n method=\"POST\"\n target=\"${this.target}\"\n action=\"https://${this.store}/cart\"\n data-testid=\"form\"\n class=\"hidden\"\n hidden\n >\n ${this.__data\n ? html` ${[...this.__data.entries()].map(\n ([name, value]) => html`<input type=\"hidden\" name=${name} value=${value} />`\n )}`\n : ''}\n </form>\n\n <section class=\"items\">\n <slot></slot>\n </section>\n\n ${!this.readonly\n ? html`\n <section class=\"actions flex flex-wrap justify-end m-m\">\n ${this.frequencies && this.frequencies.length\n ? html`\n <x-dropdown\n type=\"text\"\n name=\"frequency\"\n class=\"subscription m-s w-full sm-w-auto\"\n lang=${this.lang}\n .value=${this.sub_frequency ?? '0'}\n .items=${this.frequencies.concat(['0'])}\n .getText=${this.__translateFrequency.bind(this)}\n @change=${this.__handleFrequency}\n >\n </x-dropdown>\n `\n : ''}\n\n <vaadin-button\n class=\"m-s w-full sm-w-auto\"\n theme=\"primary\"\n data-testid=\"submit\"\n ?disabled=${!this.__hasValidItems}\n @click=${this.handleSubmit}\n >\n <span class=\"total\">\n ${this.__submitBtnText(this.__translateAmount(this.total))}\n </span>\n </vaadin-button>\n </section>\n `\n : ''}\n </div>\n `;\n }\n\n /** Add new items */\n public addItems(newItems: ItemInterface[]): void {\n for (const p of newItems) {\n const newItem = this.createItem(p);\n this.appendChild(newItem);\n this.__acknowledgeItemElement(newItem as Item);\n }\n }\n\n /** Remove items */\n public removeItems(itemIds: number[]): void {\n this.__removeItems((p: Item) => itemIds.includes(p.pid));\n }\n\n public updated(): void {\n this.dispatchEvent(new ItemsFormChangeEvent(this.__data!));\n }\n\n public createItem(p: ItemInterface): Element {\n const scopedItem = (this.constructor as any).getScopedTagName('x-item');\n const newItem = document.createElement(scopedItem);\n newItem.value = p;\n newItem.currency = this.currency;\n newItem.readonly = this.readonly;\n return newItem;\n }\n\n private __submitBtnText(value: string): string {\n if (!this.sub_frequency || this.sub_frequency == '0') {\n return this._t('checkout.buy', { value });\n } else {\n const duration = parseDuration(this.sub_frequency);\n if (duration.count === 1) {\n return this._t('checkout.subscribe_single_unit', {\n value,\n period: this._t(duration.units).toLowerCase(),\n });\n } else {\n return this._t('checkout.subscribe_muiltiple_units', {\n value,\n period: this.__translateFrequency(this.sub_frequency).toLowerCase(),\n });\n }\n }\n }\n\n /**\n * An array with both items created as elements and created parameter\n */\n private get __itemElements(): NodeListOf<Item> {\n return this.querySelectorAll('[data-item]');\n }\n\n /** Create child Items from items array\n */\n private __createItemsFromItemArray(itemsArray: ItemInterface[]) {\n this.addItems(itemsArray);\n }\n\n /** Removes item from the form based on a condition */\n private __removeItems(condition: (e: Item) => boolean = () => true) {\n this.__itemElements.forEach(p => {\n if (condition(p)) {\n p.remove();\n }\n });\n }\n\n /**\n * Adds a signature to a post field\n *\n * This method does not compute the signature. It must be provided.\n *\n * @argument string name The name of the field\n * @argument string signature The computed signature to add to the field\n * @argument string open Whether the field value is customized by the user\n * @return string signedName the name of the field with the signature\n */\n private __addSignature(name: string, signature: string, open?: string | boolean): string {\n return `${name}||${signature}${open ? '||open' : ''}`;\n }\n\n /**\n * Add all items from this.__itemElements to a FormData\n *\n * - Iterate of items in itemElements\n * - Add valid items to Form Data\n *\n * @argument FormData fd the FormData instance to fill\n * @return number the number of items added\n **/\n private __formDataFill(fd: FormData): number {\n let added = 0;\n this.__itemElements.forEach(e => {\n added += this.__formDataAddItem(fd, e);\n });\n this.__formDataAddCartWideSubscriptionFields(fd);\n return added;\n }\n\n /**\n * Add custom user provided fields\n */\n private __formDataCustomInputs(fd: FormData) {\n this.querySelectorAll(`[name]`).forEach(e => {\n const el = e as HTMLInputElement;\n if (el.tagName == 'INPUT' && ['checkbox', 'radio'].includes(el.type)) {\n if (!el.checked) return;\n }\n if (el.tagName == 'OPTION') {\n return;\n }\n if (el.value && ['number', 'string'].includes(typeof el.value)) {\n fd.set(el.name, el.value);\n }\n });\n }\n\n // Reserved attributes are not to be submitted\n // other attributes, included custom attributes added by the user, will be submitted\n private __isAttributeReserved(attribute: string): boolean {\n const reservedAttributes = [\n 'alt',\n 'currency',\n 'description',\n 'isChildren',\n 'isItem',\n 'items',\n 'open',\n 'pid',\n 'signatures',\n 'slot',\n 'total',\n ];\n return reservedAttributes.includes(attribute);\n }\n\n /**\n * Adds a item to a form data\n *\n * @argument {FormData} fd the FormData to which the item will be added\n * @argument {Item} the item to add\n **/\n private __formDataAddItem(fd: FormData, itemEl: Item, parent: Item | null = null): number {\n let added = 0;\n if (this.__validItem(itemEl)) {\n if (!itemEl.value['pid']) {\n throw new Error('Attempt to convert a item without a propper ID');\n }\n if (parent && parent.getAttribute('code')) {\n itemEl.setAttribute('parent_code', parent.getAttribute('code')!);\n }\n for (let i = 0; i < itemEl.attributes.length; i++) {\n const field = itemEl.attributes[i];\n if (!this.__isAttributeReserved(field.name) && !field.name.startsWith('data-')) {\n let fieldValue: unknown = (itemEl as any)[field.name];\n // Adds a signature if possible\n if (itemEl.code && ['string', 'number'].includes(typeof fieldValue)) {\n if (parent && field.name == 'quantity') {\n fieldValue = Number(field.value) * parent.quantity;\n }\n fd.set(itemEl.signedName(field.name), (fieldValue as string | number).toString());\n }\n }\n }\n added += 1;\n this.__formDataAddSubscriptionFields(fd, itemEl);\n }\n const childItems = itemEl.querySelectorAll('[data-bundled]');\n if (childItems && itemEl.quantity > 0) {\n for (const child of childItems) {\n added += this.__formDataAddItem(fd, child as Item, itemEl);\n }\n }\n return added;\n }\n\n /**\n * Adds subscription fields to a FormData\n *\n * @argument {FormData} fd the FormData to which subscription fields will be added\n **/\n private __formDataAddSubscriptionFields(fd: FormData, itemEl: Item): void {\n // added if sub_frequency is set\n if (this.sub_frequency) {\n for (const s of ['sub_frequency', 'sub_startdate', 'sub_enddate']) {\n if ((this as any)[s]) {\n fd.set(itemEl.signedName(s), (this as any)[s]);\n }\n }\n }\n }\n\n /**\n * Adds cart wide subscription fields to a FormData\n *\n * @argument {FormData} fd the FormData to which subscription fields will be added\n */\n private __formDataAddCartWideSubscriptionFields(fd: FormData): void {\n if (this.sub_frequency) {\n // added if itself is set\n if (this.sub_token) fd.set(this.signedName('sub_token'), this.sub_token);\n // added regardless\n fd.set(this.signedName('sub_modify'), this.sub_modify);\n fd.set(this.signedName('sub_restart'), this.sub_restart);\n }\n }\n\n /**\n * Adds cart related fields to a FormData\n *\n * @argument {FormData} fd the FormData to which the cart fields will be added.\n */\n private __formDataAddCartFields(fd: FormData): void {\n if (this.cart) {\n fd.set('cart', this.cart!);\n } else {\n fd.delete('cart');\n }\n }\n\n /**\n * Validates a string for subscription start date or end date according to\n *\n * @argument string strDate the date as a string to be used as start or end date.\n *\n * https://wiki.foxycart.com/v/2.0/products#subscription_product_options\n * See [Products subscription options for more details](https://wiki.foxycart.com/v/2.0/products#subscription_product_options)\n */\n private static __validDate(strDate: string | null | undefined): boolean {\n if (strDate === null || strDate === undefined) {\n return false;\n }\n if (strDate.match(/^(\\d{1,2}|\\d{8})$/)) {\n if (strDate.match(/^\\d{2}$/)) {\n if (Number(strDate) > 31) {\n return false;\n }\n }\n return true;\n }\n if (!strDate.match(/^\\.5m/) && ItemsForm.__validFrequency(strDate)) {\n return true;\n }\n return false;\n }\n\n /**\n * Checks if a string date is in the future.\n *\n * @argument string strdate the date, as a string, to be checked.\n * @returns boolean the date is a valid future date.\n */\n private static __validDateFuture(strDate: string | null | undefined): boolean {\n let valid = false;\n if (ItemsForm.__validDate(strDate)) {\n if (strDate!.match(/^\\d{8}/)) {\n const now = new Date();\n valid = now.toISOString().replace(/(-|T.*)/g, '') <= strDate!;\n } else {\n valid = true;\n }\n }\n return valid;\n }\n\n /**\n * Checks if a frequency complies with possible values\n *\n * @argument string strFrequency the frequency string to be validated.\n * @returns boolean the string is a foxy cart frequency string.\n */\n private static __validFrequency(strFrequency: string | null | undefined): boolean {\n if (!strFrequency) {\n return false;\n } else {\n return !!strFrequency.match(/^(\\.5m|\\d+[dwmy])$/);\n }\n }\n\n /** Subscribe to late inserted items.\n *\n * @argument MutationRecord[] the list of changes occurred.\n **/\n private __observeChildren(mutationList: MutationRecord[]): void {\n mutationList.forEach(m => {\n if (m.type == 'childList') {\n m.addedNodes.forEach(n => {\n const e = n as HTMLElement;\n e.addEventListener('change', this.__itemChange.bind(this));\n });\n }\n });\n this.__acknowledgeItemElements();\n this.__computeTotalPrice();\n this.__updateData();\n }\n\n /** Updates the form on item change */\n private __itemChange(): void {\n this.__computeTotalPrice();\n this.__updateData();\n }\n\n /** Compute the total price of all items in the form */\n private __computeTotalPrice(): void {\n let total = 0;\n this.__itemElements.forEach(e => {\n const item = e as Item;\n if (item.total) {\n total += Number(item.total);\n }\n });\n this.__total = Number(total.toFixed(2));\n }\n\n /** Go through all pcroduct elements and executes acknoledges each one */\n private __acknowledgeItemElements(): void {\n this.__itemElements.forEach((e: Element) => {\n const i = e as Item;\n this.__acknowledgeItemElement(i);\n });\n }\n\n /**\n * Treat this item item element as part of the form:\n *\n * - listen to its change events\n * - set its currency to be the forms currency\n */\n private __acknowledgeItemElement(item: Item) {\n item.addEventListener('change', this.__itemChange.bind(this));\n item.currency = this.currency!;\n }\n\n /**\n * Checks if item has quantity and price\n *\n * @argument Item the item to be validated\n * @returns boolean the item is valid\n **/\n private __validItem(item: Item): boolean {\n const pid = item.getAttribute('pid');\n const qty = Number(item.getAttribute('quantity'));\n const price = Number(item.getAttribute('price'));\n return !!(pid && qty > 0 && price >= 0);\n }\n\n /**\n * Translates a frequency string\n *\n * @argument string the frequency string to be translated\n * @returns string the translated string\n */\n private __translateFrequency(frequency: string) {\n if (frequency.startsWith('0')) return this._t('frequency_once');\n if (frequency === '.5m') return this._t('frequency_0_5m');\n const { count, units } = parseDuration(frequency);\n return this._t('frequency', {\n units: this._t(units, { count }),\n count,\n });\n }\n\n /**\n * Translate a given amount\n *\n * @argument number the amount to be translated\n * @returns string the translated amount\n */\n private __translateAmount(amount: number) {\n return amount.toLocaleString(this.lang, {\n minimumFractionDigits: 2,\n currency: this.currency!,\n style: 'currency',\n });\n }\n\n private __updateData() {\n this.__data = null;\n const form = this.shadowRoot!.querySelector('form');\n if (!form) return;\n const data = new FormData();\n const itemsAdded = this.__formDataFill(data);\n this.__hasValidItems = !!itemsAdded;\n this.__formDataAddCartFields(data);\n this.__formDataCustomInputs(data);\n this.__data = data;\n }\n}\n"]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { CSSResultArray, LitElement, PropertyDeclarations, TemplateResult } from 'lit-element';
|
|
2
2
|
import { PreviewItem } from './Preview';
|
|
3
3
|
export declare class Picture extends LitElement {
|
|
4
|
+
static readonly placeholder = "data:image/svg+xml,%3Csvg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"%3E%3Crect width=\"40\" height=\"40\" fill=\"%23E8E8E8\"/%3E%3Cpath d=\"M31.5143 0H24.5476L0 24.5476V31.5143L11.7046 19.8097L11.9841 17.0782C12.0983 15.9624 13.0131 15.1154 14.1038 15.1154H15.7373V12.1923C15.7373 10.9815 16.6915 10 17.8687 10H21.5143L31.5143 0Z\" fill=\"white\"/%3E%3Cpath d=\"M11.5434 21.3852L0 32.9285V39.8953L11.5822 28.3131C11.172 27.8663 10.9438 27.2444 11.012 26.5782L11.5434 21.3852Z\" fill=\"white\"/%3E%3Cpath d=\"M12.4305 28.879L1.30951 40H8.27631L19.2763 29H13.1316C12.8853 29 12.6495 28.9573 12.4305 28.879Z\" fill=\"white\"/%3E%3Cpath d=\"M28.3113 19.965L28.0159 17.0782C27.9116 16.0591 27.1395 15.2642 26.1754 15.1341L40 1.3095V8.27627L28.3113 19.965Z\" fill=\"white\"/%3E%3Cpath d=\"M20.6905 29L9.69049 40H16.6572L27.9755 28.6817C27.6541 28.8832 27.2756 29 26.8684 29H20.6905Z\" fill=\"white\"/%3E%3Cpath d=\"M28.6572 28C28.9128 27.5952 29.0415 27.1003 28.988 26.5782L28.4426 21.2479L40 9.69053V16.6572L28.6572 28Z\" fill=\"white\"/%3E%3Cpath d=\"M25.0381 40H18.0715L40 18.0715V25.0381L25.0381 40Z\" fill=\"white\"/%3E%3Cpath d=\"M26.4524 40H33.4191L40 33.4191V26.4524L26.4524 40Z\" fill=\"white\"/%3E%3Cpath d=\"M40 40H34.8333L40 34.8333V40Z\" fill=\"white\"/%3E%3Cpath d=\"M16.1666 0H23.1334L0 23.1334V16.1666L16.1666 0Z\" fill=\"white\"/%3E%3Cpath d=\"M14.7524 0H7.78571L0 7.78573V14.7524L14.7524 0Z\" fill=\"white\"/%3E%3Cpath d=\"M0 0H6.37152L0 6.37151V0Z\" fill=\"white\"/%3E%3Cpath d=\"M21.467 11.4615H17.8687C17.4763 11.4615 17.1582 11.7887 17.1582 12.1923V15.1154H22.8418V12.1923C22.8418 11.7887 22.5237 11.4615 22.1313 11.4615H21.467Z\" fill=\"white\"/%3E%3Cpath d=\"M24.7798 15.1154H24.2627V12.1923C24.2627 11.227 23.6562 10.4075 22.8138 10.1148L32.9286 0H39.89L24.7798 15.1154Z\" fill=\"white\"/%3E%3C/svg%3E";
|
|
4
5
|
static get properties(): PropertyDeclarations;
|
|
5
6
|
static get styles(): CSSResultArray;
|
|
6
7
|
quantity: number;
|
|
@@ -141,6 +141,7 @@ export class Picture extends LitElement {
|
|
|
141
141
|
const image = new Image();
|
|
142
142
|
image.src = this.image;
|
|
143
143
|
image.setAttribute('part', 'picture');
|
|
144
|
+
image.addEventListener('error', () => (image.src = Picture.placeholder));
|
|
144
145
|
this.__setImageState(image, state);
|
|
145
146
|
this.__container.insertBefore(image, refChild);
|
|
146
147
|
return image;
|
|
@@ -158,4 +159,5 @@ export class Picture extends LitElement {
|
|
|
158
159
|
image.className = [shared, states[state]].join(' ');
|
|
159
160
|
}
|
|
160
161
|
}
|
|
162
|
+
Picture.placeholder = 'data:image/svg+xml,%3Csvg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg"%3E%3Crect width="40" height="40" fill="%23E8E8E8"/%3E%3Cpath d="M31.5143 0H24.5476L0 24.5476V31.5143L11.7046 19.8097L11.9841 17.0782C12.0983 15.9624 13.0131 15.1154 14.1038 15.1154H15.7373V12.1923C15.7373 10.9815 16.6915 10 17.8687 10H21.5143L31.5143 0Z" fill="white"/%3E%3Cpath d="M11.5434 21.3852L0 32.9285V39.8953L11.5822 28.3131C11.172 27.8663 10.9438 27.2444 11.012 26.5782L11.5434 21.3852Z" fill="white"/%3E%3Cpath d="M12.4305 28.879L1.30951 40H8.27631L19.2763 29H13.1316C12.8853 29 12.6495 28.9573 12.4305 28.879Z" fill="white"/%3E%3Cpath d="M28.3113 19.965L28.0159 17.0782C27.9116 16.0591 27.1395 15.2642 26.1754 15.1341L40 1.3095V8.27627L28.3113 19.965Z" fill="white"/%3E%3Cpath d="M20.6905 29L9.69049 40H16.6572L27.9755 28.6817C27.6541 28.8832 27.2756 29 26.8684 29H20.6905Z" fill="white"/%3E%3Cpath d="M28.6572 28C28.9128 27.5952 29.0415 27.1003 28.988 26.5782L28.4426 21.2479L40 9.69053V16.6572L28.6572 28Z" fill="white"/%3E%3Cpath d="M25.0381 40H18.0715L40 18.0715V25.0381L25.0381 40Z" fill="white"/%3E%3Cpath d="M26.4524 40H33.4191L40 33.4191V26.4524L26.4524 40Z" fill="white"/%3E%3Cpath d="M40 40H34.8333L40 34.8333V40Z" fill="white"/%3E%3Cpath d="M16.1666 0H23.1334L0 23.1334V16.1666L16.1666 0Z" fill="white"/%3E%3Cpath d="M14.7524 0H7.78571L0 7.78573V14.7524L14.7524 0Z" fill="white"/%3E%3Cpath d="M0 0H6.37152L0 6.37151V0Z" fill="white"/%3E%3Cpath d="M21.467 11.4615H17.8687C17.4763 11.4615 17.1582 11.7887 17.1582 12.1923V15.1154H22.8418V12.1923C22.8418 11.7887 22.5237 11.4615 22.1313 11.4615H21.467Z" fill="white"/%3E%3Cpath d="M24.7798 15.1154H24.2627V12.1923C24.2627 11.227 23.6562 10.4075 22.8138 10.1148L32.9286 0H39.89L24.7798 15.1154Z" fill="white"/%3E%3C/svg%3E';
|
|
161
163
|
//# sourceMappingURL=Picture.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Picture.js","sourceRoot":"","sources":["../../../../../src/elements/public/ItemsForm/private/Picture.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n CSSResultArray,\n LitElement,\n PropertyDeclarations,\n TemplateResult,\n css,\n html,\n} from 'lit-element';\n\nimport { PreviewItem } from './Preview';\nimport { Themeable } from '../../../../mixins/themeable';\n\nenum ImageState {\n Excluded = 0,\n BeforeEnter = 1,\n Default = 2,\n Previous = 3,\n BeforeExit = 4,\n}\n\nexport class Picture extends LitElement {\n public static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n quantity: { attribute: false },\n image: { attribute: false },\n };\n }\n\n public static get styles(): CSSResultArray {\n return [\n Themeable.styles,\n css`\n .ease-out-back {\n transition-timing-function: cubic-bezier(0.34, 1.56, 0.64, 1);\n }\n\n .blur-1 {\n filter: blur(1px);\n }\n\n .blur-2 {\n filter: blur(2px);\n }\n\n .grayscale {\n filter: grayscale();\n }\n\n .rotate-12 {\n --tw-rotate: 12deg;\n }\n\n .-rotate-12 {\n --tw-rotate: -12deg;\n }\n\n .-rotate-24 {\n --tw-rotate: -24deg;\n }\n\n .translate-y-half {\n --tw-translate-y: 50%;\n }\n `,\n ];\n }\n\n public quantity = 0;\n\n public image = '';\n\n public set empty(newValue: boolean) {\n this.updateComplete.then(() => {\n if (newValue) {\n const [, ...bottomImages] = this.__stack;\n bottomImages.forEach(image => image.remove());\n } else if (this.quantity > 1 && this.__stack.length < 2) {\n this.__insertImage(ImageState.Previous, this.__stack[0]);\n }\n });\n }\n\n public set data({ quantity, image }: PreviewItem) {\n this.quantity = quantity;\n this.image = image;\n }\n\n public render(): TemplateResult {\n return html`<div id=\"image\" class=\"w-full h-full relative\"></div>`;\n }\n\n public firstUpdated(): void {\n const top = this.__insertImage(ImageState.Default);\n if (this.quantity > 1) this.__insertImage(ImageState.Previous, top);\n }\n\n public updated(changedProperties: Map<keyof Picture, unknown>): void {\n if (changedProperties.has('quantity')) {\n const oldValue = changedProperties.get('quantity') as number | undefined;\n if (oldValue !== undefined) this.quantity > oldValue ? this.__add() : this.__remove();\n }\n\n if (changedProperties.has('image')) {\n this.__stack.forEach(image => (image.src = this.image));\n }\n }\n\n private get __container() {\n return this.shadowRoot!.getElementById('image')!;\n }\n\n private get __stack() {\n const list = this.__container?.querySelectorAll(':not(.opacity-0)') ?? [];\n return [...list].reverse() as HTMLImageElement[];\n }\n\n private __add() {\n const [current, previous] = this.__stack;\n\n if (this.quantity > 1) {\n if (current) this.__setImageState(current, ImageState.Previous);\n\n if (previous) {\n this.__setImageState(previous, ImageState.BeforeExit);\n previous.ontransitionend = /* istanbul ignore next */ () => previous.remove();\n }\n\n this.__setImageState(this.__insertImage(ImageState.BeforeEnter), ImageState.Default);\n } else {\n if (current) this.__setImageState(current, ImageState.Default);\n }\n }\n\n private __remove() {\n const [current, previous] = this.__stack;\n let imageToRemove: HTMLImageElement;\n\n if (this.quantity > 0) {\n if (previous) this.__setImageState(previous, ImageState.Default);\n imageToRemove = current;\n } else {\n if (current) this.__setImageState(current, ImageState.Excluded);\n imageToRemove = previous;\n }\n\n if (imageToRemove) {\n this.__setImageState(imageToRemove, ImageState.BeforeEnter);\n imageToRemove.ontransitionend = /* istanbul ignore next */ () => imageToRemove!.remove();\n }\n\n if (this.quantity > 1) {\n const last = this.__insertImage(ImageState.BeforeExit, this.__container.firstElementChild);\n this.__setImageState(last, ImageState.Previous);\n }\n }\n\n private __insertImage(state: ImageState, refChild: Node | null = null) {\n const image = new Image();\n image.src = this.image;\n image.setAttribute('part', 'picture');\n this.__setImageState(image, state);\n this.__container.insertBefore(image, refChild);\n return image;\n }\n\n private __setImageState(image: HTMLImageElement, state: ImageState) {\n const shared =\n 'absolute inset-0 w-full h-full object-cover rounded transform transition duration-700 ease-out-back';\n\n const states = [\n 'grayscale',\n 'shadow-m translate-y-half scale-110 rotate-12 opacity-0',\n 'shadow-m',\n 'blur-1 -rotate-12 opacity-25',\n 'blur-2 -rotate-24 opacity-0',\n ];\n\n void image.offsetHeight; // reflow\n image.className = [shared, states[state]].join(' ');\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"Picture.js","sourceRoot":"","sources":["../../../../../src/elements/public/ItemsForm/private/Picture.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n CSSResultArray,\n LitElement,\n PropertyDeclarations,\n TemplateResult,\n css,\n html,\n} from 'lit-element';\n\nimport { PreviewItem } from './Preview';\nimport { Themeable } from '../../../../mixins/themeable';\n\nenum ImageState {\n Excluded = 0,\n BeforeEnter = 1,\n Default = 2,\n Previous = 3,\n BeforeExit = 4,\n}\n\nexport class Picture extends LitElement {\n public static readonly placeholder =\n 'data:image/svg+xml,%3Csvg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"%3E%3Crect width=\"40\" height=\"40\" fill=\"%23E8E8E8\"/%3E%3Cpath d=\"M31.5143 0H24.5476L0 24.5476V31.5143L11.7046 19.8097L11.9841 17.0782C12.0983 15.9624 13.0131 15.1154 14.1038 15.1154H15.7373V12.1923C15.7373 10.9815 16.6915 10 17.8687 10H21.5143L31.5143 0Z\" fill=\"white\"/%3E%3Cpath d=\"M11.5434 21.3852L0 32.9285V39.8953L11.5822 28.3131C11.172 27.8663 10.9438 27.2444 11.012 26.5782L11.5434 21.3852Z\" fill=\"white\"/%3E%3Cpath d=\"M12.4305 28.879L1.30951 40H8.27631L19.2763 29H13.1316C12.8853 29 12.6495 28.9573 12.4305 28.879Z\" fill=\"white\"/%3E%3Cpath d=\"M28.3113 19.965L28.0159 17.0782C27.9116 16.0591 27.1395 15.2642 26.1754 15.1341L40 1.3095V8.27627L28.3113 19.965Z\" fill=\"white\"/%3E%3Cpath d=\"M20.6905 29L9.69049 40H16.6572L27.9755 28.6817C27.6541 28.8832 27.2756 29 26.8684 29H20.6905Z\" fill=\"white\"/%3E%3Cpath d=\"M28.6572 28C28.9128 27.5952 29.0415 27.1003 28.988 26.5782L28.4426 21.2479L40 9.69053V16.6572L28.6572 28Z\" fill=\"white\"/%3E%3Cpath d=\"M25.0381 40H18.0715L40 18.0715V25.0381L25.0381 40Z\" fill=\"white\"/%3E%3Cpath d=\"M26.4524 40H33.4191L40 33.4191V26.4524L26.4524 40Z\" fill=\"white\"/%3E%3Cpath d=\"M40 40H34.8333L40 34.8333V40Z\" fill=\"white\"/%3E%3Cpath d=\"M16.1666 0H23.1334L0 23.1334V16.1666L16.1666 0Z\" fill=\"white\"/%3E%3Cpath d=\"M14.7524 0H7.78571L0 7.78573V14.7524L14.7524 0Z\" fill=\"white\"/%3E%3Cpath d=\"M0 0H6.37152L0 6.37151V0Z\" fill=\"white\"/%3E%3Cpath d=\"M21.467 11.4615H17.8687C17.4763 11.4615 17.1582 11.7887 17.1582 12.1923V15.1154H22.8418V12.1923C22.8418 11.7887 22.5237 11.4615 22.1313 11.4615H21.467Z\" fill=\"white\"/%3E%3Cpath d=\"M24.7798 15.1154H24.2627V12.1923C24.2627 11.227 23.6562 10.4075 22.8138 10.1148L32.9286 0H39.89L24.7798 15.1154Z\" fill=\"white\"/%3E%3C/svg%3E';\n\n public static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n quantity: { attribute: false },\n image: { attribute: false },\n };\n }\n\n public static get styles(): CSSResultArray {\n return [\n Themeable.styles,\n css`\n .ease-out-back {\n transition-timing-function: cubic-bezier(0.34, 1.56, 0.64, 1);\n }\n\n .blur-1 {\n filter: blur(1px);\n }\n\n .blur-2 {\n filter: blur(2px);\n }\n\n .grayscale {\n filter: grayscale();\n }\n\n .rotate-12 {\n --tw-rotate: 12deg;\n }\n\n .-rotate-12 {\n --tw-rotate: -12deg;\n }\n\n .-rotate-24 {\n --tw-rotate: -24deg;\n }\n\n .translate-y-half {\n --tw-translate-y: 50%;\n }\n `,\n ];\n }\n\n public quantity = 0;\n\n public image = '';\n\n public set empty(newValue: boolean) {\n this.updateComplete.then(() => {\n if (newValue) {\n const [, ...bottomImages] = this.__stack;\n bottomImages.forEach(image => image.remove());\n } else if (this.quantity > 1 && this.__stack.length < 2) {\n this.__insertImage(ImageState.Previous, this.__stack[0]);\n }\n });\n }\n\n public set data({ quantity, image }: PreviewItem) {\n this.quantity = quantity;\n this.image = image;\n }\n\n public render(): TemplateResult {\n return html`<div id=\"image\" class=\"w-full h-full relative\"></div>`;\n }\n\n public firstUpdated(): void {\n const top = this.__insertImage(ImageState.Default);\n if (this.quantity > 1) this.__insertImage(ImageState.Previous, top);\n }\n\n public updated(changedProperties: Map<keyof Picture, unknown>): void {\n if (changedProperties.has('quantity')) {\n const oldValue = changedProperties.get('quantity') as number | undefined;\n if (oldValue !== undefined) this.quantity > oldValue ? this.__add() : this.__remove();\n }\n\n if (changedProperties.has('image')) {\n this.__stack.forEach(image => (image.src = this.image));\n }\n }\n\n private get __container() {\n return this.shadowRoot!.getElementById('image')!;\n }\n\n private get __stack() {\n const list = this.__container?.querySelectorAll(':not(.opacity-0)') ?? [];\n return [...list].reverse() as HTMLImageElement[];\n }\n\n private __add() {\n const [current, previous] = this.__stack;\n\n if (this.quantity > 1) {\n if (current) this.__setImageState(current, ImageState.Previous);\n\n if (previous) {\n this.__setImageState(previous, ImageState.BeforeExit);\n previous.ontransitionend = /* istanbul ignore next */ () => previous.remove();\n }\n\n this.__setImageState(this.__insertImage(ImageState.BeforeEnter), ImageState.Default);\n } else {\n if (current) this.__setImageState(current, ImageState.Default);\n }\n }\n\n private __remove() {\n const [current, previous] = this.__stack;\n let imageToRemove: HTMLImageElement;\n\n if (this.quantity > 0) {\n if (previous) this.__setImageState(previous, ImageState.Default);\n imageToRemove = current;\n } else {\n if (current) this.__setImageState(current, ImageState.Excluded);\n imageToRemove = previous;\n }\n\n if (imageToRemove) {\n this.__setImageState(imageToRemove, ImageState.BeforeEnter);\n imageToRemove.ontransitionend = /* istanbul ignore next */ () => imageToRemove!.remove();\n }\n\n if (this.quantity > 1) {\n const last = this.__insertImage(ImageState.BeforeExit, this.__container.firstElementChild);\n this.__setImageState(last, ImageState.Previous);\n }\n }\n\n private __insertImage(state: ImageState, refChild: Node | null = null) {\n const image = new Image();\n\n image.src = this.image;\n image.setAttribute('part', 'picture');\n image.addEventListener('error', () => (image.src = Picture.placeholder));\n\n this.__setImageState(image, state);\n this.__container.insertBefore(image, refChild);\n return image;\n }\n\n private __setImageState(image: HTMLImageElement, state: ImageState) {\n const shared =\n 'absolute inset-0 w-full h-full object-cover rounded transform transition duration-700 ease-out-back';\n\n const states = [\n 'grayscale',\n 'shadow-m translate-y-half scale-110 rotate-12 opacity-0',\n 'shadow-m',\n 'blur-1 -rotate-12 opacity-25',\n 'blur-2 -rotate-24 opacity-0',\n ];\n\n void image.offsetHeight; // reflow\n image.className = [shared, states[state]].join(' ');\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serveFromCache.js","sourceRoot":"","sources":["../../../../src/elements/public/NucleonElement/serveFromCache.ts"],"names":[],"mappings":"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","sourcesContent":["import traverse from 'traverse';\n\nexport function serveFromCache(requestUrl: string, data: any): Response {\n let body: string | null = null;\n\n traverse(data).forEach(function () {\n // looking for a standalone resource in the data first\n if (this.node?._links?.self?.href) {\n const fullHref = this.node?._links?.self?.href;\n const noZoomURL = new URL(this.node?._links?.self?.href);\n noZoomURL.searchParams.delete('zoom');\n\n if (requestUrl === fullHref || requestUrl === noZoomURL.toString()) {\n body = JSON.stringify(this.node);\n this.stop();\n return;\n }\n }\n\n // alternatively, looking for an embedded collection in the data\n Object.entries(this.node?._links ?? {}).some(([curie, link]) => {\n if ((link as any).href !== requestUrl) return false;\n\n // one of the related collection's href matches requested url, let's see if it's embedded...\n const embed = this.node?._embedded?.[curie];\n if (!embed || !Array.isArray(embed)) return false;\n\n // we found an embed, now let's build a response body\n // assuming that there's more than 20 items in the collection if 20 was returned\n\n const totalItems = embed.length < 20 ? embed.length : 21;\n const next = new URL(requestUrl);\n const last = new URL(requestUrl);\n\n next.searchParams.set('offset', embed.length.toString());\n last.searchParams.set('offset', totalItems.toString());\n\n body = JSON.stringify({\n returned_items: embed.length,\n total_items: totalItems,\n offset: 0,\n limit: 20,\n _embedded: { [curie]: embed },\n _links: {\n curies: this.node._links.curies,\n first: { href: requestUrl },\n last: { href: last.toString() },\n prev: { href: requestUrl },\n next: { href: next.toString() },\n self: { href: requestUrl },\n },\n });\n\n this.stop();\n return true;\n });\n });\n\n return new Response(body, { status: body ? 200 : 404 });\n}\n"]}
|
|
1
|
+
{"version":3,"file":"serveFromCache.js","sourceRoot":"","sources":["../../../../src/elements/public/NucleonElement/serveFromCache.ts"],"names":[],"mappings":"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","sourcesContent":["import traverse from 'traverse';\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function serveFromCache(requestUrl: string, data: any): Response {\n let body: string | null = null;\n\n traverse(data).forEach(function () {\n // looking for a standalone resource in the data first\n if (this.node?._links?.self?.href) {\n const fullHref = this.node?._links?.self?.href;\n const noZoomURL = new URL(this.node?._links?.self?.href);\n noZoomURL.searchParams.delete('zoom');\n\n if (requestUrl === fullHref || requestUrl === noZoomURL.toString()) {\n body = JSON.stringify(this.node);\n this.stop();\n return;\n }\n }\n\n // alternatively, looking for an embedded collection in the data\n Object.entries(this.node?._links ?? {}).some(([curie, link]) => {\n if ((link as any).href !== requestUrl) return false;\n\n // one of the related collection's href matches requested url, let's see if it's embedded...\n const embed = this.node?._embedded?.[curie];\n if (!embed || !Array.isArray(embed)) return false;\n\n // we found an embed, now let's build a response body\n // assuming that there's more than 20 items in the collection if 20 was returned\n\n const totalItems = embed.length < 20 ? embed.length : 21;\n const next = new URL(requestUrl);\n const last = new URL(requestUrl);\n\n next.searchParams.set('offset', embed.length.toString());\n last.searchParams.set('offset', totalItems.toString());\n\n body = JSON.stringify({\n returned_items: embed.length,\n total_items: totalItems,\n offset: 0,\n limit: 20,\n _embedded: { [curie]: embed },\n _links: {\n curies: this.node._links.curies,\n first: { href: requestUrl },\n last: { href: last.toString() },\n prev: { href: requestUrl },\n next: { href: next.toString() },\n self: { href: requestUrl },\n },\n });\n\n this.stop();\n return true;\n });\n });\n\n return new Response(body, { status: body ? 200 : 404 });\n}\n"]}
|
|
@@ -466,20 +466,28 @@ export class SubscriptionForm extends Base {
|
|
|
466
466
|
get __isNextTransactionDateVisible() {
|
|
467
467
|
if (this.hiddenSelector.matches('next-transaction-date', true))
|
|
468
468
|
return false;
|
|
469
|
-
if (this.settings === null)
|
|
470
|
-
return true;
|
|
471
469
|
if (this.data === null)
|
|
472
470
|
return false;
|
|
471
|
+
if (this.data.end_date && new Date(this.data.end_date).getTime() <= Date.now())
|
|
472
|
+
return false;
|
|
473
|
+
if (this.data.is_active === false)
|
|
474
|
+
return false;
|
|
475
|
+
if (this.settings === null)
|
|
476
|
+
return true;
|
|
473
477
|
const rules = this.settings.subscriptions.allow_next_date_modification;
|
|
474
478
|
return !!getNextTransactionDateConstraints(this.data, rules);
|
|
475
479
|
}
|
|
476
480
|
get __isFrequencyVisible() {
|
|
477
481
|
if (this.hiddenSelector.matches('frequency', true))
|
|
478
482
|
return false;
|
|
479
|
-
if (this.settings === null)
|
|
480
|
-
return true;
|
|
481
483
|
if (this.data === null)
|
|
482
484
|
return false;
|
|
485
|
+
if (this.data.end_date && new Date(this.data.end_date).getTime() <= Date.now())
|
|
486
|
+
return false;
|
|
487
|
+
if (this.data.is_active === false)
|
|
488
|
+
return false;
|
|
489
|
+
if (this.settings === null)
|
|
490
|
+
return true;
|
|
483
491
|
const allowedFrequencies = getAllowedFrequencies({
|
|
484
492
|
subscription: this.data,
|
|
485
493
|
settings: this.settings,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SubscriptionForm.js","sourceRoot":"","sources":["../../../../src/elements/public/SubscriptionForm/SubscriptionForm.ts"],"names":[],"mappings":"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","sourcesContent":["import { Choice, Group, Skeleton } from '../../private/index';\nimport { Data, Item, Settings, Templates } from './types';\nimport { ScopedElementsMap, ScopedElementsMixin } from '@open-wc/scoped-elements';\nimport { TemplateResult, html } from 'lit-html';\nimport {\n getAllowedFrequencies,\n getNextTransactionDateConstraints,\n isNextTransactionDate,\n} from '@foxy.io/sdk/customer';\n\nimport { ButtonElement } from '@vaadin/vaadin-button';\nimport { CellContext } from '../Table/types';\nimport { ConfigurableMixin } from '../../../mixins/configurable';\nimport { FormDialog } from '../FormDialog';\nimport { InternalCalendar } from '../../internal/InternalCalendar';\nimport { NucleonElement } from '../NucleonElement/index';\nimport { PageRendererContext } from '../CollectionPages/types';\nimport { Preview } from '../ItemsForm/private/Preview';\nimport { PropertyDeclarations } from 'lit-element';\nimport { ThemeableMixin } from '../../../mixins/themeable';\nimport { TransactionsTable } from '../TransactionsTable/TransactionsTable';\nimport { Data as TransactionsTableData } from '../TransactionsTable/types';\nimport { TranslatableMixin } from '../../../mixins/translatable';\nimport { classMap } from '../../../utils/class-map';\nimport { ifDefined } from 'lit-html/directives/if-defined';\nimport { parseFrequency } from '../../../utils/parse-frequency';\nimport { serializeDate } from '../../../utils/serialize-date';\n\nconst NS = 'subscription-form';\nconst Base = ScopedElementsMixin(\n ThemeableMixin(ConfigurableMixin(TranslatableMixin(NucleonElement, NS)))\n);\n\n/**\n * Form element for creating or editing subscriptions.\n *\n * @slot header:before - **new in v1.4.0**\n * @slot header:after - **new in v1.4.0**\n *\n * @slot items:before - **new in v1.4.0**\n * @slot items:after - **new in v1.4.0**\n * @slot items:actions:before - **new in v1.4.0**\n * @slot items:actions:after - **new in v1.4.0**\n *\n * @slot end-date:before - **new in v1.4.0**\n * @slot end-date:after - **new in v1.4.0**\n *\n * @slot next-transaction-date:before - **new in v1.4.0**\n * @slot next-transaction-date:after - **new in v1.4.0**\n *\n * @slot frequency:before - **new in v1.4.0**\n * @slot frequency:after - **new in v1.4.0**\n *\n * @slot transactions:before - **new in v1.4.0**\n * @slot transactions:after - **new in v1.4.0**\n *\n * @element foxy-subscription-form\n * @since 1.2.0\n */\nexport class SubscriptionForm extends Base<Data> {\n static get scopedElements(): ScopedElementsMap {\n return {\n 'foxy-internal-calendar': customElements.get('foxy-internal-calendar'),\n 'foxy-collection-pages': customElements.get('foxy-collection-pages'),\n 'foxy-internal-sandbox': customElements.get('foxy-internal-sandbox'),\n 'vaadin-combo-box': customElements.get('vaadin-combo-box'),\n 'foxy-form-dialog': customElements.get('foxy-form-dialog'),\n 'vaadin-button': customElements.get('vaadin-button'),\n 'foxy-spinner': customElements.get('foxy-spinner'),\n 'vcf-tooltip': customElements.get('vcf-tooltip'),\n 'foxy-table': customElements.get('foxy-table'),\n 'foxy-i18n': customElements.get('foxy-i18n'),\n 'iron-icon': customElements.get('iron-icon'),\n 'x-skeleton': Skeleton,\n 'x-preview': Preview,\n 'x-choice': Choice,\n 'x-group': Group,\n };\n }\n\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n settings: { type: Object },\n };\n }\n\n settings: Settings | null = null;\n\n templates: Templates = {};\n\n private readonly __renderHeaderSubtitle = () => {\n const { data, lang, ns } = this;\n\n if (data) {\n let color = 'text-secondary';\n let date: string;\n let key: string;\n\n if (data.first_failed_transaction_date) {\n color = 'text-error';\n date = data.first_failed_transaction_date;\n key = 'subscription_failed';\n } else if (data.end_date) {\n date = data.end_date;\n const hasEnded = new Date(date).getTime() > Date.now();\n key = hasEnded ? 'subscription_will_be_cancelled' : 'subscription_cancelled';\n } else {\n date = data.next_transaction_date ?? new Date().toISOString();\n key = `subscription_${data.is_active ? 'active' : 'inactive'}`;\n }\n\n const text = html`\n <foxy-i18n\n data-testid=\"header-subtitle\"\n options=${JSON.stringify({ date })}\n class=${color}\n lang=${lang}\n key=${key}\n ns=${ns}\n >\n </foxy-i18n>\n `;\n\n if (data.first_failed_transaction_date) {\n return html`\n <span id=\"status\" class=\"flex items-center space-x-xs ${color}\">\n ${text}<iron-icon icon=\"icons:info-outline\" class=\"icon-inline\"></iron-icon>\n </span>\n <vcf-tooltip for=\"status\" position=\"bottom\">\n <span class=\"text-s\">${data.error_message}</span>\n </vcf-tooltip>\n `;\n }\n\n return text;\n }\n\n return html`<x-skeleton class=\"w-full\" variant=\"static\"> </x-skeleton>`;\n };\n\n private readonly __renderHeaderTitle = () => {\n const { data, lang, ns } = this;\n\n if (data) {\n const frequency = parseFrequency(data.frequency);\n const currency = data._embedded['fx:last_transaction'].currency_code;\n const total = data._embedded['fx:last_transaction'].total_order;\n\n return html`\n <foxy-i18n\n data-testid=\"header-title\"\n options=${JSON.stringify({ ...frequency, amount: `${total} ${currency}` })}\n lang=${lang}\n key=\"price_${data.frequency === '.5m' ? 'twice_a_month' : 'recurring'}\"\n ns=${ns}\n >\n </foxy-i18n>\n `;\n }\n\n return html`<x-skeleton class=\"w-full\" variant=\"static\"> </x-skeleton>`;\n };\n\n private readonly __renderHeader = () => {\n return html`\n <div data-testid=\"header\">\n ${this.renderTemplateOrSlot('header:before')}\n <div class=\"leading-xs text-xxl font-bold\">${this.__renderHeaderTitle()}</div>\n <div class=\"leading-xs text-l\">${this.__renderHeaderSubtitle()}</div>\n ${this.renderTemplateOrSlot('header:after')}\n </div>\n `;\n };\n\n private readonly __renderItemsActions = () => {\n return html`\n <div class=\"flex\" data-testid=\"items:actions\">\n ${this.renderTemplateOrSlot('items:actions:before')}\n\n <foxy-i18n\n data-testid=\"items:actions-label\"\n class=\"flex-1\"\n lang=${this.lang}\n key=\"item_plural\"\n ns=${this.ns}\n >\n </foxy-i18n>\n\n ${this.renderTemplateOrSlot('items:actions:after')}\n </div>\n `;\n };\n\n private readonly __renderItemsItem = (item: Item) => {\n const price = item.price.toLocaleString(this.lang || 'en', {\n style: 'currency',\n currency: this.data!._embedded['fx:last_transaction'].currency_code,\n });\n\n let quantity: TemplateResult;\n\n if (item.quantity > 1) {\n quantity = html`\n <div\n data-testclass=\"item-quantity\"\n class=\"px-s h-xs rounded bg-contrast-5 flex items-center font-tnum text-contrast text-s font-bold\"\n >\n ${item.quantity}\n </div>\n `;\n } else {\n quantity = html``;\n }\n\n return html`\n <figure class=\"flex items-center space-x-m py-s pr-m\" data-testclass=\"item\">\n <x-preview\n data-testclass=\"item-preview\"\n class=\"w-l h-l\"\n .quantity=${item.quantity}\n .image=${item.image}\n >\n </x-preview>\n\n <figcaption class=\"leading-s flex-1 flex justify-between items-center\">\n <div class=\"flex flex-col\">\n <span class=\"font-medium\" data-testclass=\"item-name\">${item.name}</span>\n <span class=\"text-secondary text-s\" data-testclass=\"item-price\">${price}</span>\n </div>\n\n ${quantity}\n </figcaption>\n </figure>\n `;\n };\n\n private readonly __renderItems = () => {\n const hiddenSelector = this.hiddenSelector;\n const items = this.data?._embedded['fx:transaction_template']._embedded['fx:items'] ?? [];\n const label = hiddenSelector.matches('items:actions', true) ? '' : this.__renderItemsActions();\n\n return html`\n <div data-testid=\"items\">\n ${this.renderTemplateOrSlot('items:before')}\n <x-group frame>\n <div slot=\"header\">${label}</div>\n <div class=\"divide-y divide-contrast-10 pl-s\">${items.map(this.__renderItemsItem)}</div>\n </x-group>\n ${this.renderTemplateOrSlot('items:after')}\n </div>\n `;\n };\n\n private readonly __renderEndDate = () => {\n const { disabledSelector, lang, ns } = this;\n const formHiddenSelector = this.hiddenSelector.zoom('end-date:form').toString();\n\n return html`\n <div>\n ${this.renderTemplateOrSlot('end-date:before')}\n\n <foxy-form-dialog\n readonlycontrols=${this.readonlySelector.zoom('end-date:form').toString()}\n disabledcontrols=${disabledSelector.zoom('end-date:form').toString()}\n hiddencontrols=\"save-button ${formHiddenSelector}\"\n data-testid=\"cancellation-form\"\n parent=${this.parent}\n header=\"end_subscription\"\n alert\n form=\"foxy-cancellation-form\"\n href=${this.href}\n lang=${lang}\n id=\"end-date-form\"\n ns=${ns}\n .templates=${this.getNestedTemplates('end-date:form')}\n >\n </foxy-form-dialog>\n\n <vaadin-button\n data-testid=\"end-date\"\n theme=\"error\"\n class=\"w-full\"\n ?disabled=${!this.data || disabledSelector.matches('end-date', true)}\n @click=${(evt: Event) => {\n const form = this.renderRoot.querySelector('#end-date-form') as FormDialog;\n form.show(evt.currentTarget as ButtonElement);\n }}\n >\n <foxy-i18n key=\"end_subscription\" ns=${ns} lang=${lang}></foxy-i18n>\n </vaadin-button>\n\n ${this.renderTemplateOrSlot('end-date:after')}\n </div>\n `;\n };\n\n private readonly __checkNextTransactionDateAvailability = (date: Date) => {\n const { settings, data: subscription } = this;\n\n if (settings && subscription) {\n const value = serializeDate(date);\n return isNextTransactionDate({ value, settings, subscription });\n }\n\n return date.getTime() >= Date.now();\n };\n\n private readonly __renderNextTransactionDate = () => {\n const { data, lang, ns } = this;\n const isActive = !!data?.is_active;\n\n return html`\n <div data-testid=\"next-transaction-date\">\n ${this.renderTemplateOrSlot('next-transaction-date:before')}\n\n <x-group frame>\n <foxy-i18n key=\"next_transaction_date\" ns=${ns} lang=${lang} slot=\"header\"></foxy-i18n>\n <foxy-internal-calendar\n start=${ifDefined(data?.next_transaction_date.substr(0, 10))}\n value=${ifDefined(data?.next_transaction_date)}\n lang=${lang}\n ?readonly=${!isActive || this.readonlySelector.matches('next-transaction-date', true)}\n ?disabled=${!data || this.disabledSelector.matches('next-transaction-date', true)}\n .checkAvailability=${this.__checkNextTransactionDateAvailability}\n @change=${(evt: Event) => {\n const target = evt.target as InternalCalendar;\n this.edit({ next_transaction_date: target.value });\n }}\n >\n </foxy-internal-calendar>\n </x-group>\n\n ${this.renderTemplateOrSlot('next-transaction-date:after')}\n </div>\n `;\n };\n\n private readonly __renderFrequencyAsDropdown = () => {\n const { data } = this;\n const active = !!data?.is_active;\n const items = this.__frequencies.map(v => ({\n label: this.t(v === '.5m' ? 'twice_a_month' : 'frequency', parseFrequency(v)),\n value: v,\n }));\n\n return html`\n <vaadin-combo-box\n item-value-path=\"value\"\n item-label-path=\"label\"\n data-testid=\"frequency\"\n ?disabled=${!data || this.disabledSelector.matches('frequency', true)}\n ?readonly=${data && (!active || this.readonlySelector.matches('frequency', true))}\n class=\"w-full\"\n label=${this.t('frequency_label').toString()}\n value=${ifDefined(this.form.frequency)}\n .items=${items}\n @change=${(evt: Event) => {\n this.edit({ frequency: (evt.target as HTMLInputElement).value });\n }}\n >\n </vaadin-combo-box>\n `;\n };\n\n private readonly __renderFrequencyAsRadioList = () => {\n const { data, lang, ns } = this;\n\n return html`\n <x-group frame>\n <foxy-i18n key=\"frequency_label\" ns=${ns} lang=${lang} slot=\"header\"></foxy-i18n>\n\n <x-choice\n default-custom-value=\"1d\"\n data-testid=\"frequency\"\n type=\"frequency\"\n ns=${SubscriptionForm.defaultNS}\n ?custom=${this.settings === null}\n .items=${this.__frequencies}\n .value=${this.form.frequency ?? null}\n ?disabled=${!data || this.disabledSelector.matches('frequency', true)}\n ?readonly=${data && (!data.is_active || this.readonlySelector.matches('frequency', true))}\n @change=${(evt: Event) => {\n this.edit({ frequency: (evt.target as HTMLInputElement).value });\n }}\n >\n ${this.__frequencies.map(\n frequency => html`\n <foxy-i18n\n options=${JSON.stringify(parseFrequency(frequency))}\n slot=\"${frequency}-label\"\n lang=${lang}\n key=${frequency === '.5m' ? 'twice_a_month' : 'frequency'}\n ns=${ns}\n >\n </foxy-i18n>\n `\n )}\n </x-choice>\n </x-group>\n `;\n };\n\n private readonly __renderFrequency = () => {\n return html`\n <div>\n ${this.renderTemplateOrSlot('frequency:before')}\n ${this.settings && this.__frequencies.length > 4\n ? this.__renderFrequencyAsDropdown()\n : this.__renderFrequencyAsRadioList()}\n ${this.renderTemplateOrSlot('frequency:after')}\n </div>\n `;\n };\n\n private readonly __transactionsTableColumns = [\n {\n cell(ctx: CellContext<TransactionsTableData>) {\n const colors: Record<string, string> = {\n declined: 'text-error',\n rejected: 'text-error',\n };\n\n const status = TransactionsTable.statusColumn.cell!(ctx);\n const price = TransactionsTable.priceColumn.cell!(ctx);\n const color = colors[ctx.data.status] ?? 'text-body';\n\n return ctx.html`\n <span class=\"sr-only\">${status}</span>\n <span class=\"${color} text-s\">${price}</span>\n `;\n },\n },\n { cell: TransactionsTable.idColumn.cell, hideBelow: 'sm' },\n { cell: TransactionsTable.dateColumn.cell },\n { cell: TransactionsTable.receiptColumn.cell },\n ];\n\n private readonly __renderTransactionsPage = ({ html, ...ctx }: PageRendererContext) => {\n return html`\n <foxy-table\n group=${ctx.group}\n lang=${ctx.lang}\n href=${ctx.href}\n ns=\"${ctx.ns} ${customElements.get('foxy-transactions-table')?.defaultNS ?? ''}\"\n .columns=${this.__transactionsTableColumns}\n >\n </foxy-table>\n `;\n };\n\n private readonly __renderTransactions = () => {\n const { lang, ns } = this;\n\n return html`\n <div data-testid=\"transactions\">\n ${this.renderTemplateOrSlot('transactions:before')}\n\n <x-group frame>\n <foxy-i18n lang=${lang} slot=\"header\" key=\"transaction_plural\" ns=${ns}></foxy-i18n>\n <foxy-collection-pages\n group=${this.group}\n class=\"block divide-y divide-contrast-10 px-m\"\n first=${this.data?._links['fx:transactions'].href ?? ''}\n lang=${lang}\n ns=${ns}\n .page=${this.__renderTransactionsPage}\n >\n </foxy-collection-pages>\n </x-group>\n\n ${this.renderTemplateOrSlot('transactions:after')}\n </div>\n `;\n };\n\n render(): TemplateResult {\n const isBusy = this.in('busy');\n const isFail = this.in('fail');\n\n return html`\n <div\n data-testid=\"wrapper\"\n aria-busy=${isBusy}\n aria-live=\"polite\"\n class=\"relative space-y-l text-body font-lumo text-m leading-m\"\n >\n ${this.hiddenSelector.matches('header', true) ? '' : this.__renderHeader()}\n ${this.hiddenSelector.matches('items', true) ? '' : this.__renderItems()}\n ${this.hiddenSelector.matches('end-date', true) ? '' : this.__renderEndDate()}\n ${this.__isNextTransactionDateVisible ? this.__renderNextTransactionDate() : ''}\n ${this.__isFrequencyVisible ? this.__renderFrequency() : ''}\n ${this.hiddenSelector.matches('transactions', true) ? '' : this.__renderTransactions()}\n\n <div\n data-testid=\"spinner\"\n class=${classMap({\n 'transition duration-500 ease-in-out absolute inset-0 flex': true,\n 'opacity-0 pointer-events-none': !isBusy && !isFail,\n })}\n >\n <foxy-spinner\n layout=\"vertical\"\n class=\"m-auto p-m bg-base shadow-xs rounded-t-l rounded-b-l\"\n state=${isFail ? 'error' : isBusy ? 'busy' : 'empty'}\n lang=${this.lang}\n ns=\"${this.ns} ${customElements.get('foxy-spinner')?.defaultNS ?? ''}\"\n >\n </foxy-spinner>\n </div>\n </div>\n `;\n }\n\n private get __isNextTransactionDateVisible() {\n if (this.hiddenSelector.matches('next-transaction-date', true)) return false;\n if (this.settings === null) return true;\n if (this.data === null) return false;\n\n const rules = this.settings.subscriptions.allow_next_date_modification;\n return !!getNextTransactionDateConstraints(this.data, rules);\n }\n\n private get __isFrequencyVisible() {\n if (this.hiddenSelector.matches('frequency', true)) return false;\n if (this.settings === null) return true;\n if (this.data === null) return false;\n\n const allowedFrequencies = getAllowedFrequencies({\n subscription: this.data,\n settings: this.settings,\n });\n\n return !allowedFrequencies.next().done;\n }\n\n private get __frequencies() {\n if (!this.settings || !this.data) return ['.5m', '1m', '1y'];\n\n const allowedFrequencies = getAllowedFrequencies({\n subscription: this.data,\n settings: this.settings,\n });\n\n return Array.from(allowedFrequencies);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"SubscriptionForm.js","sourceRoot":"","sources":["../../../../src/elements/public/SubscriptionForm/SubscriptionForm.ts"],"names":[],"mappings":"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","sourcesContent":["import { Choice, Group, Skeleton } from '../../private/index';\nimport { Data, Item, Settings, Templates } from './types';\nimport { ScopedElementsMap, ScopedElementsMixin } from '@open-wc/scoped-elements';\nimport { TemplateResult, html } from 'lit-html';\nimport {\n getAllowedFrequencies,\n getNextTransactionDateConstraints,\n isNextTransactionDate,\n} from '@foxy.io/sdk/customer';\n\nimport { ButtonElement } from '@vaadin/vaadin-button';\nimport { CellContext } from '../Table/types';\nimport { ConfigurableMixin } from '../../../mixins/configurable';\nimport { FormDialog } from '../FormDialog';\nimport { InternalCalendar } from '../../internal/InternalCalendar';\nimport { NucleonElement } from '../NucleonElement/index';\nimport { PageRendererContext } from '../CollectionPages/types';\nimport { Preview } from '../ItemsForm/private/Preview';\nimport { PropertyDeclarations } from 'lit-element';\nimport { ThemeableMixin } from '../../../mixins/themeable';\nimport { TransactionsTable } from '../TransactionsTable/TransactionsTable';\nimport { Data as TransactionsTableData } from '../TransactionsTable/types';\nimport { TranslatableMixin } from '../../../mixins/translatable';\nimport { classMap } from '../../../utils/class-map';\nimport { ifDefined } from 'lit-html/directives/if-defined';\nimport { parseFrequency } from '../../../utils/parse-frequency';\nimport { serializeDate } from '../../../utils/serialize-date';\n\nconst NS = 'subscription-form';\nconst Base = ScopedElementsMixin(\n ThemeableMixin(ConfigurableMixin(TranslatableMixin(NucleonElement, NS)))\n);\n\n/**\n * Form element for creating or editing subscriptions.\n *\n * @slot header:before - **new in v1.4.0**\n * @slot header:after - **new in v1.4.0**\n *\n * @slot items:before - **new in v1.4.0**\n * @slot items:after - **new in v1.4.0**\n * @slot items:actions:before - **new in v1.4.0**\n * @slot items:actions:after - **new in v1.4.0**\n *\n * @slot end-date:before - **new in v1.4.0**\n * @slot end-date:after - **new in v1.4.0**\n *\n * @slot next-transaction-date:before - **new in v1.4.0**\n * @slot next-transaction-date:after - **new in v1.4.0**\n *\n * @slot frequency:before - **new in v1.4.0**\n * @slot frequency:after - **new in v1.4.0**\n *\n * @slot transactions:before - **new in v1.4.0**\n * @slot transactions:after - **new in v1.4.0**\n *\n * @element foxy-subscription-form\n * @since 1.2.0\n */\nexport class SubscriptionForm extends Base<Data> {\n static get scopedElements(): ScopedElementsMap {\n return {\n 'foxy-internal-calendar': customElements.get('foxy-internal-calendar'),\n 'foxy-collection-pages': customElements.get('foxy-collection-pages'),\n 'foxy-internal-sandbox': customElements.get('foxy-internal-sandbox'),\n 'vaadin-combo-box': customElements.get('vaadin-combo-box'),\n 'foxy-form-dialog': customElements.get('foxy-form-dialog'),\n 'vaadin-button': customElements.get('vaadin-button'),\n 'foxy-spinner': customElements.get('foxy-spinner'),\n 'vcf-tooltip': customElements.get('vcf-tooltip'),\n 'foxy-table': customElements.get('foxy-table'),\n 'foxy-i18n': customElements.get('foxy-i18n'),\n 'iron-icon': customElements.get('iron-icon'),\n 'x-skeleton': Skeleton,\n 'x-preview': Preview,\n 'x-choice': Choice,\n 'x-group': Group,\n };\n }\n\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n settings: { type: Object },\n };\n }\n\n settings: Settings | null = null;\n\n templates: Templates = {};\n\n private readonly __renderHeaderSubtitle = () => {\n const { data, lang, ns } = this;\n\n if (data) {\n let color = 'text-secondary';\n let date: string;\n let key: string;\n\n if (data.first_failed_transaction_date) {\n color = 'text-error';\n date = data.first_failed_transaction_date;\n key = 'subscription_failed';\n } else if (data.end_date) {\n date = data.end_date;\n const hasEnded = new Date(date).getTime() > Date.now();\n key = hasEnded ? 'subscription_will_be_cancelled' : 'subscription_cancelled';\n } else {\n date = data.next_transaction_date ?? new Date().toISOString();\n key = `subscription_${data.is_active ? 'active' : 'inactive'}`;\n }\n\n const text = html`\n <foxy-i18n\n data-testid=\"header-subtitle\"\n options=${JSON.stringify({ date })}\n class=${color}\n lang=${lang}\n key=${key}\n ns=${ns}\n >\n </foxy-i18n>\n `;\n\n if (data.first_failed_transaction_date) {\n return html`\n <span id=\"status\" class=\"flex items-center space-x-xs ${color}\">\n ${text}<iron-icon icon=\"icons:info-outline\" class=\"icon-inline\"></iron-icon>\n </span>\n <vcf-tooltip for=\"status\" position=\"bottom\">\n <span class=\"text-s\">${data.error_message}</span>\n </vcf-tooltip>\n `;\n }\n\n return text;\n }\n\n return html`<x-skeleton class=\"w-full\" variant=\"static\"> </x-skeleton>`;\n };\n\n private readonly __renderHeaderTitle = () => {\n const { data, lang, ns } = this;\n\n if (data) {\n const frequency = parseFrequency(data.frequency);\n const currency = data._embedded['fx:last_transaction'].currency_code;\n const total = data._embedded['fx:last_transaction'].total_order;\n\n return html`\n <foxy-i18n\n data-testid=\"header-title\"\n options=${JSON.stringify({ ...frequency, amount: `${total} ${currency}` })}\n lang=${lang}\n key=\"price_${data.frequency === '.5m' ? 'twice_a_month' : 'recurring'}\"\n ns=${ns}\n >\n </foxy-i18n>\n `;\n }\n\n return html`<x-skeleton class=\"w-full\" variant=\"static\"> </x-skeleton>`;\n };\n\n private readonly __renderHeader = () => {\n return html`\n <div data-testid=\"header\">\n ${this.renderTemplateOrSlot('header:before')}\n <div class=\"leading-xs text-xxl font-bold\">${this.__renderHeaderTitle()}</div>\n <div class=\"leading-xs text-l\">${this.__renderHeaderSubtitle()}</div>\n ${this.renderTemplateOrSlot('header:after')}\n </div>\n `;\n };\n\n private readonly __renderItemsActions = () => {\n return html`\n <div class=\"flex\" data-testid=\"items:actions\">\n ${this.renderTemplateOrSlot('items:actions:before')}\n\n <foxy-i18n\n data-testid=\"items:actions-label\"\n class=\"flex-1\"\n lang=${this.lang}\n key=\"item_plural\"\n ns=${this.ns}\n >\n </foxy-i18n>\n\n ${this.renderTemplateOrSlot('items:actions:after')}\n </div>\n `;\n };\n\n private readonly __renderItemsItem = (item: Item) => {\n const price = item.price.toLocaleString(this.lang || 'en', {\n style: 'currency',\n currency: this.data!._embedded['fx:last_transaction'].currency_code,\n });\n\n let quantity: TemplateResult;\n\n if (item.quantity > 1) {\n quantity = html`\n <div\n data-testclass=\"item-quantity\"\n class=\"px-s h-xs rounded bg-contrast-5 flex items-center font-tnum text-contrast text-s font-bold\"\n >\n ${item.quantity}\n </div>\n `;\n } else {\n quantity = html``;\n }\n\n return html`\n <figure class=\"flex items-center space-x-m py-s pr-m\" data-testclass=\"item\">\n <x-preview\n data-testclass=\"item-preview\"\n class=\"w-l h-l\"\n .quantity=${item.quantity}\n .image=${item.image}\n >\n </x-preview>\n\n <figcaption class=\"leading-s flex-1 flex justify-between items-center\">\n <div class=\"flex flex-col\">\n <span class=\"font-medium\" data-testclass=\"item-name\">${item.name}</span>\n <span class=\"text-secondary text-s\" data-testclass=\"item-price\">${price}</span>\n </div>\n\n ${quantity}\n </figcaption>\n </figure>\n `;\n };\n\n private readonly __renderItems = () => {\n const hiddenSelector = this.hiddenSelector;\n const items = this.data?._embedded['fx:transaction_template']._embedded['fx:items'] ?? [];\n const label = hiddenSelector.matches('items:actions', true) ? '' : this.__renderItemsActions();\n\n return html`\n <div data-testid=\"items\">\n ${this.renderTemplateOrSlot('items:before')}\n <x-group frame>\n <div slot=\"header\">${label}</div>\n <div class=\"divide-y divide-contrast-10 pl-s\">${items.map(this.__renderItemsItem)}</div>\n </x-group>\n ${this.renderTemplateOrSlot('items:after')}\n </div>\n `;\n };\n\n private readonly __renderEndDate = () => {\n const { disabledSelector, lang, ns } = this;\n const formHiddenSelector = this.hiddenSelector.zoom('end-date:form').toString();\n\n return html`\n <div>\n ${this.renderTemplateOrSlot('end-date:before')}\n\n <foxy-form-dialog\n readonlycontrols=${this.readonlySelector.zoom('end-date:form').toString()}\n disabledcontrols=${disabledSelector.zoom('end-date:form').toString()}\n hiddencontrols=\"save-button ${formHiddenSelector}\"\n data-testid=\"cancellation-form\"\n parent=${this.parent}\n header=\"end_subscription\"\n alert\n form=\"foxy-cancellation-form\"\n href=${this.href}\n lang=${lang}\n id=\"end-date-form\"\n ns=${ns}\n .templates=${this.getNestedTemplates('end-date:form')}\n >\n </foxy-form-dialog>\n\n <vaadin-button\n data-testid=\"end-date\"\n theme=\"error\"\n class=\"w-full\"\n ?disabled=${!this.data || disabledSelector.matches('end-date', true)}\n @click=${(evt: Event) => {\n const form = this.renderRoot.querySelector('#end-date-form') as FormDialog;\n form.show(evt.currentTarget as ButtonElement);\n }}\n >\n <foxy-i18n key=\"end_subscription\" ns=${ns} lang=${lang}></foxy-i18n>\n </vaadin-button>\n\n ${this.renderTemplateOrSlot('end-date:after')}\n </div>\n `;\n };\n\n private readonly __checkNextTransactionDateAvailability = (date: Date) => {\n const { settings, data: subscription } = this;\n\n if (settings && subscription) {\n const value = serializeDate(date);\n return isNextTransactionDate({ value, settings, subscription });\n }\n\n return date.getTime() >= Date.now();\n };\n\n private readonly __renderNextTransactionDate = () => {\n const { data, lang, ns } = this;\n const isActive = !!data?.is_active;\n\n return html`\n <div data-testid=\"next-transaction-date\">\n ${this.renderTemplateOrSlot('next-transaction-date:before')}\n\n <x-group frame>\n <foxy-i18n key=\"next_transaction_date\" ns=${ns} lang=${lang} slot=\"header\"></foxy-i18n>\n <foxy-internal-calendar\n start=${ifDefined(data?.next_transaction_date.substr(0, 10))}\n value=${ifDefined(data?.next_transaction_date)}\n lang=${lang}\n ?readonly=${!isActive || this.readonlySelector.matches('next-transaction-date', true)}\n ?disabled=${!data || this.disabledSelector.matches('next-transaction-date', true)}\n .checkAvailability=${this.__checkNextTransactionDateAvailability}\n @change=${(evt: Event) => {\n const target = evt.target as InternalCalendar;\n this.edit({ next_transaction_date: target.value });\n }}\n >\n </foxy-internal-calendar>\n </x-group>\n\n ${this.renderTemplateOrSlot('next-transaction-date:after')}\n </div>\n `;\n };\n\n private readonly __renderFrequencyAsDropdown = () => {\n const { data } = this;\n const active = !!data?.is_active;\n const items = this.__frequencies.map(v => ({\n label: this.t(v === '.5m' ? 'twice_a_month' : 'frequency', parseFrequency(v)),\n value: v,\n }));\n\n return html`\n <vaadin-combo-box\n item-value-path=\"value\"\n item-label-path=\"label\"\n data-testid=\"frequency\"\n ?disabled=${!data || this.disabledSelector.matches('frequency', true)}\n ?readonly=${data && (!active || this.readonlySelector.matches('frequency', true))}\n class=\"w-full\"\n label=${this.t('frequency_label').toString()}\n value=${ifDefined(this.form.frequency)}\n .items=${items}\n @change=${(evt: Event) => {\n this.edit({ frequency: (evt.target as HTMLInputElement).value });\n }}\n >\n </vaadin-combo-box>\n `;\n };\n\n private readonly __renderFrequencyAsRadioList = () => {\n const { data, lang, ns } = this;\n\n return html`\n <x-group frame>\n <foxy-i18n key=\"frequency_label\" ns=${ns} lang=${lang} slot=\"header\"></foxy-i18n>\n\n <x-choice\n default-custom-value=\"1d\"\n data-testid=\"frequency\"\n type=\"frequency\"\n ns=${SubscriptionForm.defaultNS}\n ?custom=${this.settings === null}\n .items=${this.__frequencies}\n .value=${this.form.frequency ?? null}\n ?disabled=${!data || this.disabledSelector.matches('frequency', true)}\n ?readonly=${data && (!data.is_active || this.readonlySelector.matches('frequency', true))}\n @change=${(evt: Event) => {\n this.edit({ frequency: (evt.target as HTMLInputElement).value });\n }}\n >\n ${this.__frequencies.map(\n frequency => html`\n <foxy-i18n\n options=${JSON.stringify(parseFrequency(frequency))}\n slot=\"${frequency}-label\"\n lang=${lang}\n key=${frequency === '.5m' ? 'twice_a_month' : 'frequency'}\n ns=${ns}\n >\n </foxy-i18n>\n `\n )}\n </x-choice>\n </x-group>\n `;\n };\n\n private readonly __renderFrequency = () => {\n return html`\n <div>\n ${this.renderTemplateOrSlot('frequency:before')}\n ${this.settings && this.__frequencies.length > 4\n ? this.__renderFrequencyAsDropdown()\n : this.__renderFrequencyAsRadioList()}\n ${this.renderTemplateOrSlot('frequency:after')}\n </div>\n `;\n };\n\n private readonly __transactionsTableColumns = [\n {\n cell(ctx: CellContext<TransactionsTableData>) {\n const colors: Record<string, string> = {\n declined: 'text-error',\n rejected: 'text-error',\n };\n\n const status = TransactionsTable.statusColumn.cell!(ctx);\n const price = TransactionsTable.priceColumn.cell!(ctx);\n const color = colors[ctx.data.status] ?? 'text-body';\n\n return ctx.html`\n <span class=\"sr-only\">${status}</span>\n <span class=\"${color} text-s\">${price}</span>\n `;\n },\n },\n { cell: TransactionsTable.idColumn.cell, hideBelow: 'sm' },\n { cell: TransactionsTable.dateColumn.cell },\n { cell: TransactionsTable.receiptColumn.cell },\n ];\n\n private readonly __renderTransactionsPage = ({ html, ...ctx }: PageRendererContext) => {\n return html`\n <foxy-table\n group=${ctx.group}\n lang=${ctx.lang}\n href=${ctx.href}\n ns=\"${ctx.ns} ${customElements.get('foxy-transactions-table')?.defaultNS ?? ''}\"\n .columns=${this.__transactionsTableColumns}\n >\n </foxy-table>\n `;\n };\n\n private readonly __renderTransactions = () => {\n const { lang, ns } = this;\n\n return html`\n <div data-testid=\"transactions\">\n ${this.renderTemplateOrSlot('transactions:before')}\n\n <x-group frame>\n <foxy-i18n lang=${lang} slot=\"header\" key=\"transaction_plural\" ns=${ns}></foxy-i18n>\n <foxy-collection-pages\n group=${this.group}\n class=\"block divide-y divide-contrast-10 px-m\"\n first=${this.data?._links['fx:transactions'].href ?? ''}\n lang=${lang}\n ns=${ns}\n .page=${this.__renderTransactionsPage}\n >\n </foxy-collection-pages>\n </x-group>\n\n ${this.renderTemplateOrSlot('transactions:after')}\n </div>\n `;\n };\n\n render(): TemplateResult {\n const isBusy = this.in('busy');\n const isFail = this.in('fail');\n\n return html`\n <div\n data-testid=\"wrapper\"\n aria-busy=${isBusy}\n aria-live=\"polite\"\n class=\"relative space-y-l text-body font-lumo text-m leading-m\"\n >\n ${this.hiddenSelector.matches('header', true) ? '' : this.__renderHeader()}\n ${this.hiddenSelector.matches('items', true) ? '' : this.__renderItems()}\n ${this.hiddenSelector.matches('end-date', true) ? '' : this.__renderEndDate()}\n ${this.__isNextTransactionDateVisible ? this.__renderNextTransactionDate() : ''}\n ${this.__isFrequencyVisible ? this.__renderFrequency() : ''}\n ${this.hiddenSelector.matches('transactions', true) ? '' : this.__renderTransactions()}\n\n <div\n data-testid=\"spinner\"\n class=${classMap({\n 'transition duration-500 ease-in-out absolute inset-0 flex': true,\n 'opacity-0 pointer-events-none': !isBusy && !isFail,\n })}\n >\n <foxy-spinner\n layout=\"vertical\"\n class=\"m-auto p-m bg-base shadow-xs rounded-t-l rounded-b-l\"\n state=${isFail ? 'error' : isBusy ? 'busy' : 'empty'}\n lang=${this.lang}\n ns=\"${this.ns} ${customElements.get('foxy-spinner')?.defaultNS ?? ''}\"\n >\n </foxy-spinner>\n </div>\n </div>\n `;\n }\n\n private get __isNextTransactionDateVisible() {\n if (this.hiddenSelector.matches('next-transaction-date', true)) return false;\n if (this.data === null) return false;\n if (this.data.end_date && new Date(this.data.end_date).getTime() <= Date.now()) return false;\n if (this.data.is_active === false) return false;\n if (this.settings === null) return true;\n\n const rules = this.settings.subscriptions.allow_next_date_modification;\n return !!getNextTransactionDateConstraints(this.data, rules);\n }\n\n private get __isFrequencyVisible() {\n if (this.hiddenSelector.matches('frequency', true)) return false;\n if (this.data === null) return false;\n if (this.data.end_date && new Date(this.data.end_date).getTime() <= Date.now()) return false;\n if (this.data.is_active === false) return false;\n if (this.settings === null) return true;\n\n const allowedFrequencies = getAllowedFrequencies({\n subscription: this.data,\n settings: this.settings,\n });\n\n return !allowedFrequencies.next().done;\n }\n\n private get __frequencies() {\n if (!this.settings || !this.data) return ['.5m', '1m', '1y'];\n\n const allowedFrequencies = getAllowedFrequencies({\n subscription: this.data,\n settings: this.settings,\n });\n\n return Array.from(allowedFrequencies);\n }\n}\n"]}
|
|
@@ -648,10 +648,14 @@ export class TaxForm extends Base {
|
|
|
648
648
|
|
|
649
649
|
<x-property-table
|
|
650
650
|
data-testid="timestamps"
|
|
651
|
-
.items=${['date_modified', 'date_created'].map(field =>
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
651
|
+
.items=${['date_modified', 'date_created'].map(field => {
|
|
652
|
+
var _a;
|
|
653
|
+
return ({
|
|
654
|
+
name: this.t(field),
|
|
655
|
+
value: ((_a = this.data) === null || _a === void 0 ? void 0 : _a[field]) ? this.t('date', { value: new Date(this.data[field]) })
|
|
656
|
+
: '',
|
|
657
|
+
});
|
|
658
|
+
})}
|
|
655
659
|
>
|
|
656
660
|
</x-property-table>
|
|
657
661
|
|