@foxy.io/elements 1.39.0-beta.5 → 1.39.0-beta.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cdn/foxy-item-card.js +1 -1
- package/dist/cdn/foxy-store-form.js +1 -1
- package/dist/cdn/translations/store-form/en.json +40 -4
- package/dist/elements/public/ItemCard/ItemCard.js +6 -3
- package/dist/elements/public/ItemCard/ItemCard.js.map +1 -1
- package/dist/elements/public/StoreForm/StoreForm.d.ts +3 -0
- package/dist/elements/public/StoreForm/StoreForm.js +76 -23
- package/dist/elements/public/StoreForm/StoreForm.js.map +1 -1
- package/dist/elements/public/StoreForm/index.d.ts +1 -0
- package/dist/elements/public/StoreForm/index.js +1 -0
- package/dist/elements/public/StoreForm/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -114,32 +114,34 @@
|
|
|
114
114
|
"placeholder": "None",
|
|
115
115
|
"helper_text": "",
|
|
116
116
|
"v8n_required": "Please create a universal store secret.",
|
|
117
|
-
"v8n_too_long": "Please shorten this value to
|
|
117
|
+
"v8n_too_long": "Please shorten this value to 100 characters or less."
|
|
118
118
|
},
|
|
119
119
|
"webhook-key-api-legacy": {
|
|
120
120
|
"label": "Legacy API key",
|
|
121
121
|
"placeholder": "None",
|
|
122
122
|
"helper_text": "",
|
|
123
|
+
"v8n_required": "Please create a legacy API key.",
|
|
123
124
|
"v8n_too_long": "Please shorten this value to 100 characters or less."
|
|
124
125
|
},
|
|
125
126
|
"webhook-key-xml-datafeed": {
|
|
126
127
|
"label": "Legacy XML datafeed encryption key",
|
|
127
128
|
"placeholder": "None",
|
|
128
129
|
"helper_text": "",
|
|
129
|
-
"v8n_required": "
|
|
130
|
+
"v8n_required": "Please create a legacy XML datafeed encryption key.",
|
|
130
131
|
"v8n_too_long": "Please shorten this value to 100 characters or less."
|
|
131
132
|
},
|
|
132
133
|
"webhook-key-sso": {
|
|
133
134
|
"label": "SSO secret",
|
|
134
135
|
"placeholder": "None",
|
|
135
136
|
"helper_text": "",
|
|
137
|
+
"v8n_required": "Please create an SSO secret.",
|
|
136
138
|
"v8n_too_long": "Please shorten this value to 100 characters or less."
|
|
137
139
|
},
|
|
138
140
|
"webhook-key-cart-signing": {
|
|
139
141
|
"label": "Cart signing key",
|
|
140
142
|
"placeholder": "None",
|
|
141
143
|
"helper_text": "",
|
|
142
|
-
"v8n_required": "
|
|
144
|
+
"v8n_required": "Please create a cart signing key.",
|
|
143
145
|
"v8n_too_long": "Please shorten this value to 100 characters or less."
|
|
144
146
|
}
|
|
145
147
|
},
|
|
@@ -243,6 +245,17 @@
|
|
|
243
245
|
"helper_text": "All products added to the cart for your store will need to contain the expires property to ensure stale products can't be purchased.",
|
|
244
246
|
"checked": "Yes",
|
|
245
247
|
"unchecked": "No"
|
|
248
|
+
},
|
|
249
|
+
"webhook-key-cart-signing": {
|
|
250
|
+
"label": "Cart signing key",
|
|
251
|
+
"helper_text": "You can edit this key in ",
|
|
252
|
+
"link_text": "Store Secrets settings",
|
|
253
|
+
"copy-to-clipboard": {
|
|
254
|
+
"failed_to_copy": "Failed to copy",
|
|
255
|
+
"click_to_copy": "Copy",
|
|
256
|
+
"copying": "Copying...",
|
|
257
|
+
"done": "Copied"
|
|
258
|
+
}
|
|
246
259
|
}
|
|
247
260
|
},
|
|
248
261
|
"checkout": {
|
|
@@ -269,7 +282,8 @@
|
|
|
269
282
|
"label": "Enable SSO",
|
|
270
283
|
"helper_text": "When enabled, Foxy will redirect customers to your SSO endpoint prior to hitting the checkout page. You can use this to validate items or to log customers in via your own auth provider.",
|
|
271
284
|
"checked": "Yes",
|
|
272
|
-
"unchecked": "No"
|
|
285
|
+
"unchecked": "No",
|
|
286
|
+
"v8n_webhook_key_required": "Please create an SSO secret or a universal store secret to enable this feature."
|
|
273
287
|
},
|
|
274
288
|
"single-sign-on-url": {
|
|
275
289
|
"label": "SSO endpoint",
|
|
@@ -277,6 +291,17 @@
|
|
|
277
291
|
"helper_text": "",
|
|
278
292
|
"v8n_required": "Please enter your SSO endpoint URL",
|
|
279
293
|
"v8n_too_long": "Please shorten this URL to 300 characters or less"
|
|
294
|
+
},
|
|
295
|
+
"webhook-key-sso": {
|
|
296
|
+
"label": "SSO secret",
|
|
297
|
+
"helper_text": "You can edit this secret in ",
|
|
298
|
+
"link_text": "Store Secrets settings",
|
|
299
|
+
"copy-to-clipboard": {
|
|
300
|
+
"failed_to_copy": "Failed to copy",
|
|
301
|
+
"click_to_copy": "Copy",
|
|
302
|
+
"copying": "Copying...",
|
|
303
|
+
"done": "Copied"
|
|
304
|
+
}
|
|
280
305
|
}
|
|
281
306
|
},
|
|
282
307
|
"receipt": {
|
|
@@ -378,6 +403,17 @@
|
|
|
378
403
|
"helper_text": "",
|
|
379
404
|
"v8n_too_long": "Please shorten this URL to 300 characters or less.",
|
|
380
405
|
"v8n_required": "Please enter a URL."
|
|
406
|
+
},
|
|
407
|
+
"webhook-key-xml-datafeed": {
|
|
408
|
+
"label": "Encryption key",
|
|
409
|
+
"helper_text": "You can edit this key in ",
|
|
410
|
+
"link_text": "Store Secrets settings",
|
|
411
|
+
"copy-to-clipboard": {
|
|
412
|
+
"failed_to_copy": "Failed to copy",
|
|
413
|
+
"click_to_copy": "Copy",
|
|
414
|
+
"copying": "Copying...",
|
|
415
|
+
"done": "Copied"
|
|
416
|
+
}
|
|
381
417
|
}
|
|
382
418
|
},
|
|
383
419
|
"hcaptcha": {
|
|
@@ -346,9 +346,12 @@ export class ItemCard extends Base {
|
|
|
346
346
|
return `subinfo_${frequency === '.5m' ? 'twice_a_month' : 'recurring'}`;
|
|
347
347
|
}
|
|
348
348
|
get __filteredOptions() {
|
|
349
|
-
var _a, _b, _c, _d
|
|
350
|
-
const
|
|
351
|
-
|
|
349
|
+
var _a, _b, _c, _d;
|
|
350
|
+
const config = (_a = this.settings) === null || _a === void 0 ? void 0 : _a.cart_display_config;
|
|
351
|
+
if ((config === null || config === void 0 ? void 0 : config.show_product_options) === false)
|
|
352
|
+
return [];
|
|
353
|
+
const allOptions = (_c = (_b = this.data) === null || _b === void 0 ? void 0 : _b._embedded) === null || _c === void 0 ? void 0 : _c['fx:item_options'];
|
|
354
|
+
const hiddenOptions = (_d = config === null || config === void 0 ? void 0 : config.hidden_product_options) !== null && _d !== void 0 ? _d : [];
|
|
352
355
|
return allOptions === null || allOptions === void 0 ? void 0 : allOptions.filter(option => !hiddenOptions.includes(option.name));
|
|
353
356
|
}
|
|
354
357
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ItemCard.js","sourceRoot":"","sources":["../../../../src/elements/public/ItemCard/ItemCard.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PropertyDeclarations } from 'lit-element';\nimport type { NucleonElement } from '../NucleonElement/NucleonElement';\nimport type { TemplateResult } from 'lit-html';\nimport type { Data, Settings } from './types';\nimport type { Resource } from '@foxy.io/sdk/core';\nimport type { Rels } from '@foxy.io/sdk/backend';\n\nimport { TranslatableMixin } from '../../../mixins/translatable';\nimport { ConfigurableMixin } from '../../../mixins/configurable';\nimport { parseFrequency } from '../../../utils/parse-frequency';\nimport { InternalCard } from '../../internal/InternalCard/InternalCard';\nimport { ifDefined } from 'lit-html/directives/if-defined';\nimport { decode } from 'html-entities';\nimport { html } from 'lit-html';\n\nconst NS = 'item-card';\nconst Base = ConfigurableMixin(TranslatableMixin(InternalCard, NS));\n\n/**\n * Basic card displaying an item.\n *\n * @element foxy-item-card\n * @since 1.17.0\n */\nexport class ItemCard extends Base<Data> {\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n localeCodes: { type: String, attribute: 'locale-codes' },\n settings: { type: Object },\n };\n }\n\n localeCodes: string | null = null;\n\n settings: Settings | null = null;\n\n private 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 private readonly __transactionTemplateLoaderId = 'transactionTemplateLoader';\n\n private readonly __defaultTemplateSetLoaderId = 'defaultTemplateSetLoader';\n\n private readonly __localeCodesHelperLoaderId = 'localeCodesLoader';\n\n private readonly __transactionLoaderId = 'transactionLoader';\n\n private readonly __templateSetLoaderId = 'templateSetLoader';\n\n private readonly __storeLoaderId = 'storeLoader';\n\n private readonly __cartLoaderId = 'cartLoader';\n\n renderBody(): TemplateResult {\n const displayConfig = this.settings?.cart_display_config;\n const quantity = this.data?.quantity ?? 0;\n const options = this.__filteredOptions;\n const price = this.data?.price ?? 0;\n const code = this.data?.code ?? '';\n\n const displayedCode = displayConfig ? (displayConfig.show_product_code ? code : '') : code;\n const currencyDisplay = this.__currencyDisplay;\n const currencyCode = this.__currencyCode;\n\n return html`\n <foxy-nucleon\n class=\"hidden\"\n infer=\"\"\n href=${ifDefined(this.__transactionTemplateHref)}\n id=${this.__transactionTemplateLoaderId}\n @update=${() => this.requestUpdate()}\n >\n </foxy-nucleon>\n\n <foxy-nucleon\n class=\"hidden\"\n infer=\"\"\n href=${ifDefined(this.__defaultTemplateSetHref)}\n id=${this.__defaultTemplateSetLoaderId}\n @update=${() => this.requestUpdate()}\n >\n </foxy-nucleon>\n\n <foxy-nucleon\n class=\"hidden\"\n infer=\"\"\n href=${ifDefined(this.__localeCodesHelperHref)}\n id=${this.__localeCodesHelperLoaderId}\n @update=${() => this.requestUpdate()}\n >\n </foxy-nucleon>\n\n <foxy-nucleon\n class=\"hidden\"\n infer=\"\"\n href=${ifDefined(this.__transactionHref)}\n id=${this.__transactionLoaderId}\n @update=${() => this.requestUpdate()}\n >\n </foxy-nucleon>\n\n <foxy-nucleon\n class=\"hidden\"\n infer=\"\"\n href=${ifDefined(this.__templateSetHref)}\n id=${this.__templateSetLoaderId}\n @update=${() => this.requestUpdate()}\n >\n </foxy-nucleon>\n\n <foxy-nucleon\n class=\"hidden\"\n infer=\"\"\n href=${ifDefined(this.__storeHref)}\n id=${this.__storeLoaderId}\n @update=${() => this.requestUpdate()}\n >\n </foxy-nucleon>\n\n <foxy-nucleon\n class=\"hidden\"\n infer=\"\"\n href=${ifDefined(this.__cartHref)}\n id=${this.__cartLoaderId}\n @update=${() => this.requestUpdate()}\n >\n </foxy-nucleon>\n\n <div\n class=\"flex items-start leading-xs\"\n style=\"gap: calc(0.625em + (var(--lumo-border-radius) / 4) - 1px)\"\n >\n <img\n class=\"relative h-s w-s object-cover rounded-s bg-contrast-20 flex-shrink-0 shadow-xs\"\n src=${ifDefined(this.data?.image)}\n alt=\"\"\n @error=${(evt: Event) => {\n const img = evt.currentTarget as HTMLImageElement;\n img.src = ItemCard.__placeholder;\n }}\n />\n\n <div class=\"flex-1 min-w-0\">\n <div class=\"h-s flex items-center\">\n <div class=\"min-w-0 flex-1 leading-s\">\n <div class=\"flex items-center justify-between\">\n <div class=\"truncate text-m font-medium\">\n ${decode(this.data?.name) || html`<foxy-i18n infer=\"\" key=\"no_code\"></foxy-i18n>`}\n </div>\n <span class=\"text-s text-tertiary whitespace-nowrap\">\n ${quantity} ×\n <foxy-i18n\n .options=${{ amount: `${price} ${currencyCode}`, currencyDisplay }}\n key=\"price\"\n infer=\"\"\n >\n </foxy-i18n>\n </span>\n </div>\n\n <div class=\"truncate text-secondary text-s\">\n ${displayedCode}\n ${(displayConfig?.show_sub_frequency ?? true) &&\n this.data?.subscription_frequency &&\n !this.hiddenSelector.matches('autorenew-icon', true)\n ? html`\n ${displayedCode ? html`<span> • </span>` : ''}\n <foxy-i18n\n infer=\"\"\n key=${this.__subinfoKey}\n .options=${this.__subinfoOptions}\n >\n </foxy-i18n>\n `\n : ''}\n ​\n </div>\n </div>\n </div>\n\n ${options && options.length > 0\n ? html`\n <div class=\"mt-m\">\n ${options.map(\n option => html`\n <div data-testclass=\"option\" class=\"flex items-center gap-s text-s leading-s\">\n <div class=\"truncate text-secondary\">\n ${option.name}: <span class=\"font-medium text-body\">${option.value}</span>\n </div>\n\n ${option.price_mod\n ? html`\n <div class=\"border-t border-dashed border-contrast-10 flex-1\"></div>\n <div class=\"whitespace-nowrap text-tertiary\">\n <foxy-i18n\n options=${JSON.stringify({\n amount: `${option.price_mod} ${currencyCode}`,\n signDisplay: 'exceptZero',\n currencyDisplay: currencyDisplay,\n })}\n key=\"price\"\n infer=\"\"\n >\n </foxy-i18n>\n </div>\n `\n : ''}\n </div>\n `\n )}\n </div>\n `\n : ''}\n </div>\n </div>\n `;\n }\n\n get isBodyReady(): boolean {\n const isLoaded = !!this.__currencyDisplay && !!this.__currencyCode;\n return super.isBodyReady && isLoaded;\n }\n\n private get __transactionTemplateHref() {\n try {\n const links = this.data?._links as Partial<Record<string, { href: string }>> | undefined;\n const url = new URL(links?.['fx:subscription']?.href ?? '');\n url.searchParams.set('zoom', 'transaction_template');\n return url.toString();\n } catch {\n //\n }\n }\n\n private get __defaultTemplateSetHref() {\n const templateSetUri = (this.__cart ?? this.__transactionTemplate)?.template_set_uri;\n\n if (templateSetUri === '') {\n try {\n const url = new URL(this.__store?._links['fx:template_sets'].href ?? '');\n url.searchParams.set('code', 'DEFAULT');\n return url.toString();\n } catch {\n //\n }\n }\n }\n\n private get __localeCodesHelperHref() {\n if (this.__defaultTemplateSetHref || this.__templateSetHref) {\n return this.localeCodes ?? void 0;\n }\n }\n\n private get __transactionHref() {\n return this.data?._links['fx:transaction']?.href;\n }\n\n private get __templateSetHref() {\n const cart = this.__cart ?? this.__transactionTemplate;\n if (!cart?.currency_code) return cart?.template_set_uri || void 0;\n }\n\n private get __storeHref() {\n return this.data?._links['fx:store']?.href;\n }\n\n private get __cartHref() {\n const links = this.data?._links as Partial<Record<string, { href: string }>> | undefined;\n return links?.['fx:cart']?.href;\n }\n\n private get __transactionTemplate() {\n type Loader = NucleonElement<Resource<Rels.Subscription, { zoom: 'transaction_template' }>>;\n const selector = `#${this.__transactionTemplateLoaderId}`;\n const loader = this.renderRoot.querySelector<Loader>(selector);\n return loader?.data?._embedded['fx:transaction_template'] ?? null;\n }\n\n private get __defaultTemplateSet() {\n type Loader = NucleonElement<Resource<Rels.TemplateSets>>;\n const selector = `#${this.__defaultTemplateSetLoaderId}`;\n const loader = this.renderRoot.querySelector<Loader>(selector);\n return loader?.data?._embedded['fx:template_sets'][0] ?? null;\n }\n\n private get __localeCodesHelper() {\n type Loader = NucleonElement<Resource<Rels.LocaleCodes>>;\n const selector = `#${this.__localeCodesHelperLoaderId}`;\n return this.renderRoot.querySelector<Loader>(selector)?.data ?? null;\n }\n\n private get __transaction() {\n type Loader = NucleonElement<Resource<Rels.Transaction>>;\n const selector = `#${this.__transactionLoaderId}`;\n return this.renderRoot.querySelector<Loader>(selector)?.data ?? null;\n }\n\n private get __templateSet() {\n type Loader = NucleonElement<Resource<Rels.TemplateSet>>;\n const selector = `#${this.__templateSetLoaderId}`;\n return this.renderRoot.querySelector<Loader>(selector)?.data ?? null;\n }\n\n private get __store() {\n type Loader = NucleonElement<Resource<Rels.Store>>;\n const selector = `#${this.__storeLoaderId}`;\n return this.renderRoot.querySelector<Loader>(selector)?.data ?? null;\n }\n\n private get __cart() {\n type Loader = NucleonElement<Resource<Rels.Cart>>;\n const selector = `#${this.__cartLoaderId}`;\n return this.renderRoot.querySelector<Loader>(selector)?.data ?? null;\n }\n\n private get __currencyDisplay() {\n const useCode = this.__store?.use_international_currency_symbol;\n\n if (useCode === true) return 'code';\n if (useCode === false) return 'symbol';\n if (this.data && !this.data._links['fx:store']) return 'symbol';\n }\n\n private get __currencyCode() {\n const transaction = this.__transaction;\n\n if (transaction) {\n return transaction.currency_code;\n } else {\n const cart = this.__cart ?? this.__transactionTemplate;\n\n if (cart?.currency_code) {\n return cart.currency_code;\n } else {\n const allLocaleCodes = this.__localeCodesHelper;\n const localeCode = (this.__templateSet ?? this.__defaultTemplateSet)?.locale_code;\n const localeInfo = localeCode ? allLocaleCodes?.values[localeCode] : void 0;\n\n if (localeInfo) return /Currency: ([A-Z]{3})/g.exec(localeInfo)?.[1];\n }\n }\n }\n\n private get __subinfoOptions() {\n const currencyDisplay = this.__currencyDisplay;\n if (currencyDisplay === undefined) return;\n\n const currencyCode = this.__currencyCode;\n if (currencyCode === undefined) return;\n\n const totalOrder = this.__transactionTemplate?.total_order;\n if (totalOrder === undefined) return;\n\n const frequency = this.data?.subscription_frequency;\n if (frequency === undefined) return;\n\n const startDate = this.data?.subscription_start_date;\n if (startDate === undefined) return;\n\n return {\n ...parseFrequency(frequency),\n amount: `${totalOrder} ${currencyCode}`,\n currencyDisplay,\n startDate,\n };\n }\n\n private get __subinfoKey() {\n const frequency = this.data?.subscription_frequency;\n if (frequency) return `subinfo_${frequency === '.5m' ? 'twice_a_month' : 'recurring'}`;\n }\n\n private get __filteredOptions() {\n const allOptions = this.data?._embedded?.['fx:item_options'];\n const hiddenOptions = this.settings?.cart_display_config?.hidden_product_options ?? [];\n return allOptions?.filter(option => !hiddenOptions.includes(option.name));\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ItemCard.js","sourceRoot":"","sources":["../../../../src/elements/public/ItemCard/ItemCard.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PropertyDeclarations } from 'lit-element';\nimport type { NucleonElement } from '../NucleonElement/NucleonElement';\nimport type { TemplateResult } from 'lit-html';\nimport type { Data, Settings } from './types';\nimport type { Resource } from '@foxy.io/sdk/core';\nimport type { Rels } from '@foxy.io/sdk/backend';\n\nimport { TranslatableMixin } from '../../../mixins/translatable';\nimport { ConfigurableMixin } from '../../../mixins/configurable';\nimport { parseFrequency } from '../../../utils/parse-frequency';\nimport { InternalCard } from '../../internal/InternalCard/InternalCard';\nimport { ifDefined } from 'lit-html/directives/if-defined';\nimport { decode } from 'html-entities';\nimport { html } from 'lit-html';\n\nconst NS = 'item-card';\nconst Base = ConfigurableMixin(TranslatableMixin(InternalCard, NS));\n\n/**\n * Basic card displaying an item.\n *\n * @element foxy-item-card\n * @since 1.17.0\n */\nexport class ItemCard extends Base<Data> {\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n localeCodes: { type: String, attribute: 'locale-codes' },\n settings: { type: Object },\n };\n }\n\n localeCodes: string | null = null;\n\n settings: Settings | null = null;\n\n private 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 private readonly __transactionTemplateLoaderId = 'transactionTemplateLoader';\n\n private readonly __defaultTemplateSetLoaderId = 'defaultTemplateSetLoader';\n\n private readonly __localeCodesHelperLoaderId = 'localeCodesLoader';\n\n private readonly __transactionLoaderId = 'transactionLoader';\n\n private readonly __templateSetLoaderId = 'templateSetLoader';\n\n private readonly __storeLoaderId = 'storeLoader';\n\n private readonly __cartLoaderId = 'cartLoader';\n\n renderBody(): TemplateResult {\n const displayConfig = this.settings?.cart_display_config;\n const quantity = this.data?.quantity ?? 0;\n const options = this.__filteredOptions;\n const price = this.data?.price ?? 0;\n const code = this.data?.code ?? '';\n\n const displayedCode = displayConfig ? (displayConfig.show_product_code ? code : '') : code;\n const currencyDisplay = this.__currencyDisplay;\n const currencyCode = this.__currencyCode;\n\n return html`\n <foxy-nucleon\n class=\"hidden\"\n infer=\"\"\n href=${ifDefined(this.__transactionTemplateHref)}\n id=${this.__transactionTemplateLoaderId}\n @update=${() => this.requestUpdate()}\n >\n </foxy-nucleon>\n\n <foxy-nucleon\n class=\"hidden\"\n infer=\"\"\n href=${ifDefined(this.__defaultTemplateSetHref)}\n id=${this.__defaultTemplateSetLoaderId}\n @update=${() => this.requestUpdate()}\n >\n </foxy-nucleon>\n\n <foxy-nucleon\n class=\"hidden\"\n infer=\"\"\n href=${ifDefined(this.__localeCodesHelperHref)}\n id=${this.__localeCodesHelperLoaderId}\n @update=${() => this.requestUpdate()}\n >\n </foxy-nucleon>\n\n <foxy-nucleon\n class=\"hidden\"\n infer=\"\"\n href=${ifDefined(this.__transactionHref)}\n id=${this.__transactionLoaderId}\n @update=${() => this.requestUpdate()}\n >\n </foxy-nucleon>\n\n <foxy-nucleon\n class=\"hidden\"\n infer=\"\"\n href=${ifDefined(this.__templateSetHref)}\n id=${this.__templateSetLoaderId}\n @update=${() => this.requestUpdate()}\n >\n </foxy-nucleon>\n\n <foxy-nucleon\n class=\"hidden\"\n infer=\"\"\n href=${ifDefined(this.__storeHref)}\n id=${this.__storeLoaderId}\n @update=${() => this.requestUpdate()}\n >\n </foxy-nucleon>\n\n <foxy-nucleon\n class=\"hidden\"\n infer=\"\"\n href=${ifDefined(this.__cartHref)}\n id=${this.__cartLoaderId}\n @update=${() => this.requestUpdate()}\n >\n </foxy-nucleon>\n\n <div\n class=\"flex items-start leading-xs\"\n style=\"gap: calc(0.625em + (var(--lumo-border-radius) / 4) - 1px)\"\n >\n <img\n class=\"relative h-s w-s object-cover rounded-s bg-contrast-20 flex-shrink-0 shadow-xs\"\n src=${ifDefined(this.data?.image)}\n alt=\"\"\n @error=${(evt: Event) => {\n const img = evt.currentTarget as HTMLImageElement;\n img.src = ItemCard.__placeholder;\n }}\n />\n\n <div class=\"flex-1 min-w-0\">\n <div class=\"h-s flex items-center\">\n <div class=\"min-w-0 flex-1 leading-s\">\n <div class=\"flex items-center justify-between\">\n <div class=\"truncate text-m font-medium\">\n ${decode(this.data?.name) || html`<foxy-i18n infer=\"\" key=\"no_code\"></foxy-i18n>`}\n </div>\n <span class=\"text-s text-tertiary whitespace-nowrap\">\n ${quantity} ×\n <foxy-i18n\n .options=${{ amount: `${price} ${currencyCode}`, currencyDisplay }}\n key=\"price\"\n infer=\"\"\n >\n </foxy-i18n>\n </span>\n </div>\n\n <div class=\"truncate text-secondary text-s\">\n ${displayedCode}\n ${(displayConfig?.show_sub_frequency ?? true) &&\n this.data?.subscription_frequency &&\n !this.hiddenSelector.matches('autorenew-icon', true)\n ? html`\n ${displayedCode ? html`<span> • </span>` : ''}\n <foxy-i18n\n infer=\"\"\n key=${this.__subinfoKey}\n .options=${this.__subinfoOptions}\n >\n </foxy-i18n>\n `\n : ''}\n ​\n </div>\n </div>\n </div>\n\n ${options && options.length > 0\n ? html`\n <div class=\"mt-m\">\n ${options.map(\n option => html`\n <div data-testclass=\"option\" class=\"flex items-center gap-s text-s leading-s\">\n <div class=\"truncate text-secondary\">\n ${option.name}: <span class=\"font-medium text-body\">${option.value}</span>\n </div>\n\n ${option.price_mod\n ? html`\n <div class=\"border-t border-dashed border-contrast-10 flex-1\"></div>\n <div class=\"whitespace-nowrap text-tertiary\">\n <foxy-i18n\n options=${JSON.stringify({\n amount: `${option.price_mod} ${currencyCode}`,\n signDisplay: 'exceptZero',\n currencyDisplay: currencyDisplay,\n })}\n key=\"price\"\n infer=\"\"\n >\n </foxy-i18n>\n </div>\n `\n : ''}\n </div>\n `\n )}\n </div>\n `\n : ''}\n </div>\n </div>\n `;\n }\n\n get isBodyReady(): boolean {\n const isLoaded = !!this.__currencyDisplay && !!this.__currencyCode;\n return super.isBodyReady && isLoaded;\n }\n\n private get __transactionTemplateHref() {\n try {\n const links = this.data?._links as Partial<Record<string, { href: string }>> | undefined;\n const url = new URL(links?.['fx:subscription']?.href ?? '');\n url.searchParams.set('zoom', 'transaction_template');\n return url.toString();\n } catch {\n //\n }\n }\n\n private get __defaultTemplateSetHref() {\n const templateSetUri = (this.__cart ?? this.__transactionTemplate)?.template_set_uri;\n\n if (templateSetUri === '') {\n try {\n const url = new URL(this.__store?._links['fx:template_sets'].href ?? '');\n url.searchParams.set('code', 'DEFAULT');\n return url.toString();\n } catch {\n //\n }\n }\n }\n\n private get __localeCodesHelperHref() {\n if (this.__defaultTemplateSetHref || this.__templateSetHref) {\n return this.localeCodes ?? void 0;\n }\n }\n\n private get __transactionHref() {\n return this.data?._links['fx:transaction']?.href;\n }\n\n private get __templateSetHref() {\n const cart = this.__cart ?? this.__transactionTemplate;\n if (!cart?.currency_code) return cart?.template_set_uri || void 0;\n }\n\n private get __storeHref() {\n return this.data?._links['fx:store']?.href;\n }\n\n private get __cartHref() {\n const links = this.data?._links as Partial<Record<string, { href: string }>> | undefined;\n return links?.['fx:cart']?.href;\n }\n\n private get __transactionTemplate() {\n type Loader = NucleonElement<Resource<Rels.Subscription, { zoom: 'transaction_template' }>>;\n const selector = `#${this.__transactionTemplateLoaderId}`;\n const loader = this.renderRoot.querySelector<Loader>(selector);\n return loader?.data?._embedded['fx:transaction_template'] ?? null;\n }\n\n private get __defaultTemplateSet() {\n type Loader = NucleonElement<Resource<Rels.TemplateSets>>;\n const selector = `#${this.__defaultTemplateSetLoaderId}`;\n const loader = this.renderRoot.querySelector<Loader>(selector);\n return loader?.data?._embedded['fx:template_sets'][0] ?? null;\n }\n\n private get __localeCodesHelper() {\n type Loader = NucleonElement<Resource<Rels.LocaleCodes>>;\n const selector = `#${this.__localeCodesHelperLoaderId}`;\n return this.renderRoot.querySelector<Loader>(selector)?.data ?? null;\n }\n\n private get __transaction() {\n type Loader = NucleonElement<Resource<Rels.Transaction>>;\n const selector = `#${this.__transactionLoaderId}`;\n return this.renderRoot.querySelector<Loader>(selector)?.data ?? null;\n }\n\n private get __templateSet() {\n type Loader = NucleonElement<Resource<Rels.TemplateSet>>;\n const selector = `#${this.__templateSetLoaderId}`;\n return this.renderRoot.querySelector<Loader>(selector)?.data ?? null;\n }\n\n private get __store() {\n type Loader = NucleonElement<Resource<Rels.Store>>;\n const selector = `#${this.__storeLoaderId}`;\n return this.renderRoot.querySelector<Loader>(selector)?.data ?? null;\n }\n\n private get __cart() {\n type Loader = NucleonElement<Resource<Rels.Cart>>;\n const selector = `#${this.__cartLoaderId}`;\n return this.renderRoot.querySelector<Loader>(selector)?.data ?? null;\n }\n\n private get __currencyDisplay() {\n const useCode = this.__store?.use_international_currency_symbol;\n\n if (useCode === true) return 'code';\n if (useCode === false) return 'symbol';\n if (this.data && !this.data._links['fx:store']) return 'symbol';\n }\n\n private get __currencyCode() {\n const transaction = this.__transaction;\n\n if (transaction) {\n return transaction.currency_code;\n } else {\n const cart = this.__cart ?? this.__transactionTemplate;\n\n if (cart?.currency_code) {\n return cart.currency_code;\n } else {\n const allLocaleCodes = this.__localeCodesHelper;\n const localeCode = (this.__templateSet ?? this.__defaultTemplateSet)?.locale_code;\n const localeInfo = localeCode ? allLocaleCodes?.values[localeCode] : void 0;\n\n if (localeInfo) return /Currency: ([A-Z]{3})/g.exec(localeInfo)?.[1];\n }\n }\n }\n\n private get __subinfoOptions() {\n const currencyDisplay = this.__currencyDisplay;\n if (currencyDisplay === undefined) return;\n\n const currencyCode = this.__currencyCode;\n if (currencyCode === undefined) return;\n\n const totalOrder = this.__transactionTemplate?.total_order;\n if (totalOrder === undefined) return;\n\n const frequency = this.data?.subscription_frequency;\n if (frequency === undefined) return;\n\n const startDate = this.data?.subscription_start_date;\n if (startDate === undefined) return;\n\n return {\n ...parseFrequency(frequency),\n amount: `${totalOrder} ${currencyCode}`,\n currencyDisplay,\n startDate,\n };\n }\n\n private get __subinfoKey() {\n const frequency = this.data?.subscription_frequency;\n if (frequency) return `subinfo_${frequency === '.5m' ? 'twice_a_month' : 'recurring'}`;\n }\n\n private get __filteredOptions() {\n const config = this.settings?.cart_display_config;\n if (config?.show_product_options === false) return [];\n\n const allOptions = this.data?._embedded?.['fx:item_options'];\n const hiddenOptions = config?.hidden_product_options ?? [];\n return allOptions?.filter(option => !hiddenOptions.includes(option.name));\n }\n}\n"]}
|
|
@@ -21,6 +21,8 @@ export declare class StoreForm extends Base<Data> {
|
|
|
21
21
|
customerPasswordHashTypes: string | null;
|
|
22
22
|
/** URL of the `fx:shipping_address_types` property helper resource. */
|
|
23
23
|
shippingAddressTypes: string | null;
|
|
24
|
+
/** URL of the Store Secrets settings page if you are using this form on multiple pages. */
|
|
25
|
+
storeSecretsPageUrl: string | null;
|
|
24
26
|
/** hCaptcha site key for signup verification. If provided, requires users to complete a captcha before creating a store. */
|
|
25
27
|
hCaptchaSiteKey: string | null;
|
|
26
28
|
/**
|
|
@@ -93,5 +95,6 @@ export declare class StoreForm extends Base<Data> {
|
|
|
93
95
|
private __getSmtpConfig;
|
|
94
96
|
private __setSmtpConfig;
|
|
95
97
|
private __renderLoader;
|
|
98
|
+
private __renderReadonlyWebhookKey;
|
|
96
99
|
}
|
|
97
100
|
export {};
|
|
@@ -30,6 +30,8 @@ export class StoreForm extends Base {
|
|
|
30
30
|
this.customerPasswordHashTypes = null;
|
|
31
31
|
/** URL of the `fx:shipping_address_types` property helper resource. */
|
|
32
32
|
this.shippingAddressTypes = null;
|
|
33
|
+
/** URL of the Store Secrets settings page if you are using this form on multiple pages. */
|
|
34
|
+
this.storeSecretsPageUrl = null;
|
|
33
35
|
/** hCaptcha site key for signup verification. If provided, requires users to complete a captcha before creating a store. */
|
|
34
36
|
this.hCaptchaSiteKey = null;
|
|
35
37
|
/**
|
|
@@ -220,8 +222,8 @@ export class StoreForm extends Base {
|
|
|
220
222
|
{ label: 'option_tls', value: 'tls' },
|
|
221
223
|
{ label: 'option_none', value: '' },
|
|
222
224
|
];
|
|
223
|
-
this.__singleWebhookKeyGeneratorOptions = { length:
|
|
224
|
-
this.__jsonWebhookKeyGeneratorOptions = { length:
|
|
225
|
+
this.__singleWebhookKeyGeneratorOptions = { length: 90, separator: '' };
|
|
226
|
+
this.__jsonWebhookKeyGeneratorOptions = { length: 90, separator: '' };
|
|
225
227
|
this.__useSingleWebhookKeyGetValue = () => {
|
|
226
228
|
var _a;
|
|
227
229
|
try {
|
|
@@ -254,6 +256,7 @@ export class StoreForm extends Base {
|
|
|
254
256
|
reportingStoreDomainExists: { attribute: 'reporting-store-domain-exists' },
|
|
255
257
|
customerPasswordHashTypes: { attribute: 'customer-password-hash-types' },
|
|
256
258
|
shippingAddressTypes: { attribute: 'shipping-address-types' },
|
|
259
|
+
storeSecretsPageUrl: { attribute: 'store-secrets-page-url' },
|
|
257
260
|
hCaptchaSiteKey: { attribute: 'h-captcha-site-key' },
|
|
258
261
|
storeVersions: { attribute: 'store-versions' },
|
|
259
262
|
checkoutTypes: { attribute: 'checkout-types' },
|
|
@@ -310,29 +313,37 @@ export class StoreForm extends Base {
|
|
|
310
313
|
// TODO remove the line below when API limit is corrected to match the legacy admin
|
|
311
314
|
if (((_a = host.data) === null || _a === void 0 ? void 0 : _a.webhook_key) === v)
|
|
312
315
|
return true;
|
|
313
|
-
return !v || v.length <=
|
|
316
|
+
return !v || v.length <= 100 || 'webhook-key:v8n_too_long';
|
|
314
317
|
},
|
|
315
|
-
|
|
316
|
-
'use-webhook:v8n_webhook_key_required',
|
|
317
|
-
'webhook-key-xml-datafeed:v8n_required',
|
|
318
|
-
'webhook-key:v8n_required',
|
|
319
|
-
].map(code => ({ webhook_key: v, use_webhook: on }) => {
|
|
318
|
+
({ webhook_key: v, use_webhook: on }) => {
|
|
320
319
|
const parsedV = parseWebhookKey(v !== null && v !== void 0 ? v : '');
|
|
320
|
+
const code = 'use-webhook:v8n_webhook_key_required';
|
|
321
321
|
return !on || !!(parsedV ? parsedV.xml_datafeed : v) || code;
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
'use-cart-validation:v8n_webhook_key_required',
|
|
325
|
-
'webhook-key-cart-signing:v8n_required',
|
|
326
|
-
'webhook-key:v8n_required',
|
|
327
|
-
].map(code => ({ webhook_key: v, use_cart_validation: on }) => {
|
|
322
|
+
},
|
|
323
|
+
({ webhook_key: v, use_cart_validation: on }) => {
|
|
328
324
|
const parsedV = parseWebhookKey(v !== null && v !== void 0 ? v : '');
|
|
325
|
+
const code = 'use-cart-validation:v8n_webhook_key_required';
|
|
329
326
|
return !on || !!(parsedV ? parsedV.cart_signing : v) || code;
|
|
330
|
-
}
|
|
331
|
-
|
|
327
|
+
},
|
|
328
|
+
({ webhook_key: v, use_single_sign_on: on }) => {
|
|
332
329
|
const parsedV = parseWebhookKey(v !== null && v !== void 0 ? v : '');
|
|
333
|
-
const code =
|
|
334
|
-
return !
|
|
335
|
-
}
|
|
330
|
+
const code = 'use-single-sign-on:v8n_webhook_key_required';
|
|
331
|
+
return !on || !!(parsedV ? parsedV.sso : v) || code;
|
|
332
|
+
},
|
|
333
|
+
...['xml_datafeed', 'cart_signing', 'api_legacy', 'sso']
|
|
334
|
+
.map(prop => [
|
|
335
|
+
({ webhook_key: v }) => {
|
|
336
|
+
const parsedV = parseWebhookKey(v !== null && v !== void 0 ? v : '');
|
|
337
|
+
const code = `webhook-key-${prop.replace(/_/g, '-')}:v8n_required`;
|
|
338
|
+
return !parsedV || !!parsedV[prop] || code;
|
|
339
|
+
},
|
|
340
|
+
({ webhook_key: v }) => {
|
|
341
|
+
const parsedV = parseWebhookKey(v !== null && v !== void 0 ? v : '');
|
|
342
|
+
const code = `webhook-key-${prop.replace(/_/g, '-')}:v8n_too_long`;
|
|
343
|
+
return !parsedV || parsedV[prop].length <= 100 || code;
|
|
344
|
+
},
|
|
345
|
+
])
|
|
346
|
+
.flat(),
|
|
336
347
|
({ single_sign_on_url: v, use_single_sign_on: on }) => {
|
|
337
348
|
return !on || !!v || 'single-sign-on-url:v8n_required';
|
|
338
349
|
},
|
|
@@ -352,7 +363,7 @@ export class StoreForm extends Base {
|
|
|
352
363
|
return { context: ((_a = this.data) === null || _a === void 0 ? void 0 : _a.is_active) ? 'active' : 'inactive' };
|
|
353
364
|
}
|
|
354
365
|
renderBody() {
|
|
355
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
|
|
366
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u;
|
|
356
367
|
const storeDomainHelperText = this.t(this.form.use_remote_domain && !((_a = this.data) === null || _a === void 0 ? void 0 : _a.use_remote_domain)
|
|
357
368
|
? 'essentials.store-domain.custom_domain_note'
|
|
358
369
|
: 'essentials.store-domain.helper_text');
|
|
@@ -386,7 +397,7 @@ export class StoreForm extends Base {
|
|
|
386
397
|
regionsURL.searchParams.set('country_code', country);
|
|
387
398
|
regionsUrl = regionsURL.toString();
|
|
388
399
|
}
|
|
389
|
-
catch (
|
|
400
|
+
catch (_v) {
|
|
390
401
|
regionsUrl = undefined;
|
|
391
402
|
}
|
|
392
403
|
const customDisplayIdConfig = this.__getCustomDisplayIdConfig();
|
|
@@ -394,6 +405,11 @@ export class StoreForm extends Base {
|
|
|
394
405
|
const logDetailRequestTypes = transactionJournalEntriesConfig.log_detail_request_types;
|
|
395
406
|
const displayIdExamples = this.__displayIdExamples;
|
|
396
407
|
const journalIdExamples = this.__journalIdExamples;
|
|
408
|
+
const rawWebhookKey = (_p = (_o = this.data) === null || _o === void 0 ? void 0 : _o.webhook_key) !== null && _p !== void 0 ? _p : '';
|
|
409
|
+
const parsedWebhookKey = parseWebhookKey(rawWebhookKey);
|
|
410
|
+
const cartSigningKey = (_q = parsedWebhookKey === null || parsedWebhookKey === void 0 ? void 0 : parsedWebhookKey.cart_signing) !== null && _q !== void 0 ? _q : rawWebhookKey;
|
|
411
|
+
const xmlDatafeedKey = (_r = parsedWebhookKey === null || parsedWebhookKey === void 0 ? void 0 : parsedWebhookKey.xml_datafeed) !== null && _r !== void 0 ? _r : rawWebhookKey;
|
|
412
|
+
const ssoKey = (_s = parsedWebhookKey === null || parsedWebhookKey === void 0 ? void 0 : parsedWebhookKey.sso) !== null && _s !== void 0 ? _s : rawWebhookKey;
|
|
397
413
|
return html `
|
|
398
414
|
${this.renderHeader()}
|
|
399
415
|
|
|
@@ -480,7 +496,7 @@ export class StoreForm extends Base {
|
|
|
480
496
|
</foxy-internal-select-control>
|
|
481
497
|
</foxy-internal-summary-control>
|
|
482
498
|
|
|
483
|
-
<foxy-internal-summary-control infer="store-secrets">
|
|
499
|
+
<foxy-internal-summary-control infer="store-secrets" id="store-secrets">
|
|
484
500
|
<foxy-internal-switch-control
|
|
485
501
|
infer="use-single-secret"
|
|
486
502
|
.getValue=${this.__useSingleWebhookKeyGetValue}
|
|
@@ -545,7 +561,7 @@ export class StoreForm extends Base {
|
|
|
545
561
|
<foxy-internal-text-control
|
|
546
562
|
layout="summary-item"
|
|
547
563
|
infer="from-email"
|
|
548
|
-
placeholder=${(
|
|
564
|
+
placeholder=${(_u = (_t = this.__getStoreEmailValue()[0]) === null || _t === void 0 ? void 0 : _t.value) !== null && _u !== void 0 ? _u : this.t('emails.from-email.placeholder')}
|
|
549
565
|
>
|
|
550
566
|
</foxy-internal-text-control>
|
|
551
567
|
|
|
@@ -641,6 +657,10 @@ export class StoreForm extends Base {
|
|
|
641
657
|
|
|
642
658
|
<foxy-internal-switch-control infer="use-cart-validation" helper-text-as-tooltip>
|
|
643
659
|
</foxy-internal-switch-control>
|
|
660
|
+
|
|
661
|
+
${cartSigningKey && this.form.use_cart_validation
|
|
662
|
+
? this.__renderReadonlyWebhookKey('webhook-key-cart-signing', cartSigningKey)
|
|
663
|
+
: ''}
|
|
644
664
|
</foxy-internal-summary-control>
|
|
645
665
|
|
|
646
666
|
<foxy-internal-summary-control infer="checkout">
|
|
@@ -691,6 +711,7 @@ export class StoreForm extends Base {
|
|
|
691
711
|
? html `
|
|
692
712
|
<foxy-internal-text-control layout="summary-item" infer="single-sign-on-url">
|
|
693
713
|
</foxy-internal-text-control>
|
|
714
|
+
${ssoKey ? this.__renderReadonlyWebhookKey('webhook-key-sso', ssoKey) : ''}
|
|
694
715
|
`
|
|
695
716
|
: ''}
|
|
696
717
|
</foxy-internal-summary-control>
|
|
@@ -879,6 +900,9 @@ export class StoreForm extends Base {
|
|
|
879
900
|
? html `
|
|
880
901
|
<foxy-internal-text-control layout="summary-item" infer="webhook-url">
|
|
881
902
|
</foxy-internal-text-control>
|
|
903
|
+
${xmlDatafeedKey
|
|
904
|
+
? this.__renderReadonlyWebhookKey('webhook-key-xml-datafeed', xmlDatafeedKey)
|
|
905
|
+
: ''}
|
|
882
906
|
`
|
|
883
907
|
: ''}
|
|
884
908
|
</foxy-internal-summary-control>
|
|
@@ -1076,5 +1100,34 @@ export class StoreForm extends Base {
|
|
|
1076
1100
|
`,
|
|
1077
1101
|
};
|
|
1078
1102
|
}
|
|
1103
|
+
__renderReadonlyWebhookKey(scope, key) {
|
|
1104
|
+
var _a;
|
|
1105
|
+
return html `
|
|
1106
|
+
<div class="leading-xs">
|
|
1107
|
+
<div class="flex items-center gap-s">
|
|
1108
|
+
<p class="flex-1">
|
|
1109
|
+
<foxy-i18n infer=${scope} key="label"></foxy-i18n>
|
|
1110
|
+
</p>
|
|
1111
|
+
<p class="text-tertiary">${'*'.repeat(8)}${key.substr(-4)}</p>
|
|
1112
|
+
<foxy-copy-to-clipboard
|
|
1113
|
+
layout="complete"
|
|
1114
|
+
infer="${scope} copy-to-clipboard"
|
|
1115
|
+
theme="contrast tertiary-inline"
|
|
1116
|
+
text=${key}
|
|
1117
|
+
>
|
|
1118
|
+
</foxy-copy-to-clipboard>
|
|
1119
|
+
</div>
|
|
1120
|
+
<p class="text-xs text-secondary">
|
|
1121
|
+
<foxy-i18n infer=${scope} key="helper_text"></foxy-i18n>
|
|
1122
|
+
<a
|
|
1123
|
+
class="text-body font-medium rounded-s hover-underline focus-outline-none focus-ring-2 focus-ring-primary-50"
|
|
1124
|
+
href=${(_a = this.storeSecretsPageUrl) !== null && _a !== void 0 ? _a : '#store-secrets'}
|
|
1125
|
+
>
|
|
1126
|
+
<foxy-i18n infer=${scope} key="link_text"></foxy-i18n>
|
|
1127
|
+
</a>
|
|
1128
|
+
</p>
|
|
1129
|
+
</div>
|
|
1130
|
+
`;
|
|
1131
|
+
}
|
|
1079
1132
|
}
|
|
1080
1133
|
//# sourceMappingURL=StoreForm.js.map
|