@foxy.io/elements 1.9.0-beta.1 → 1.11.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cdn/foxy-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-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-customer-form.js +1 -1
- package/dist/cdn/foxy-customer-portal-settings.js +1 -1
- package/dist/cdn/foxy-customer-portal.js +1 -1
- package/dist/cdn/foxy-customer.js +1 -1
- package/dist/cdn/foxy-customers-table.js +1 -1
- package/dist/cdn/foxy-error-entry-card.js +1 -1
- package/dist/cdn/foxy-nucleon-element.js +1 -1
- package/dist/cdn/foxy-payment-method-card.js +1 -1
- package/dist/cdn/foxy-sign-in-form.js +1 -1
- package/dist/cdn/foxy-subscription-card.js +1 -1
- package/dist/cdn/foxy-subscription-form.js +1 -1
- package/dist/cdn/foxy-subscriptions-table.js +1 -1
- package/dist/cdn/foxy-table.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-77bdf956.js → shared-1e8cda7a.js} +1 -1
- package/dist/cdn/{shared-6f84ea16.js → shared-43316b66.js} +1 -1
- package/dist/cdn/{shared-8f34ce95.js → shared-5ad54678.js} +1 -1
- package/dist/cdn/{shared-92d03925.js → shared-750035db.js} +1 -1
- package/dist/cdn/{shared-1d0ef57d.js → shared-9ba229fb.js} +1 -1
- package/dist/cdn/shared-a110de43.js +1 -0
- package/dist/cdn/{shared-4b33c6d2.js → shared-b0c39c37.js} +1 -1
- package/dist/cdn/translations/country/de.json +251 -0
- package/dist/cdn/translations/customer-portal-settings/en.json +4 -0
- package/dist/cdn/translations/region/de.json +66 -0
- package/dist/cdn/translations/shared/de.json +117 -0
- package/dist/elements/public/CollectionPages/CollectionPages.js +6 -11
- package/dist/elements/public/CollectionPages/CollectionPages.js.map +1 -1
- package/dist/elements/public/CustomerPortalSettings/CustomerPortalSettings.js +17 -3
- package/dist/elements/public/CustomerPortalSettings/CustomerPortalSettings.js.map +1 -1
- package/dist/elements/public/CustomerPortalSettings/machine.js +8 -0
- package/dist/elements/public/CustomerPortalSettings/machine.js.map +1 -1
- package/dist/elements/public/CustomerPortalSettings/private/SSOSwitch/SSOSwitch.d.ts +13 -0
- package/dist/elements/public/CustomerPortalSettings/private/SSOSwitch/SSOSwitch.js +53 -0
- package/dist/elements/public/CustomerPortalSettings/private/SSOSwitch/SSOSwitch.js.map +1 -0
- package/dist/elements/public/CustomerPortalSettings/private/SSOSwitch/SSOSwitchChangeEvent.d.ts +3 -0
- package/dist/elements/public/CustomerPortalSettings/private/SSOSwitch/SSOSwitchChangeEvent.js +6 -0
- package/dist/elements/public/CustomerPortalSettings/private/SSOSwitch/SSOSwitchChangeEvent.js.map +1 -0
- package/dist/elements/public/CustomerPortalSettings/types.d.ts +5 -1
- package/dist/elements/public/CustomerPortalSettings/types.js.map +1 -1
- package/dist/elements/public/NucleonElement/NucleonElement.js +6 -11
- package/dist/elements/public/NucleonElement/NucleonElement.js.map +1 -1
- package/dist/elements/public/NucleonElement/serveFromCache.d.ts +1 -0
- package/dist/elements/public/NucleonElement/serveFromCache.js +49 -0
- package/dist/elements/public/NucleonElement/serveFromCache.js.map +1 -0
- package/package.json +1 -1
- package/dist/cdn/shared-b13a5ed3.js +0 -1
|
@@ -11,6 +11,7 @@ import { FrequencyModification } from "./private/FrequencyModification/Frequency
|
|
|
11
11
|
import { LoadingScreen } from "../../private/LoadingScreen/LoadingScreen.js";
|
|
12
12
|
import { NextDateModification } from "./private/NextDateModification/NextDateModification.js";
|
|
13
13
|
import { OriginsList } from "./private/OriginsList/OriginsList.js";
|
|
14
|
+
import { SSOSwitch } from "./private/SSOSwitch/SSOSwitch.js";
|
|
14
15
|
import { Translatable } from "../../../mixins/translatable.js";
|
|
15
16
|
import cloneDeep from 'lodash-es/cloneDeep';
|
|
16
17
|
import { interpret } from 'xstate';
|
|
@@ -56,6 +57,7 @@ export class CustomerPortalSettings extends Translatable {
|
|
|
56
57
|
'x-loading-screen': LoadingScreen,
|
|
57
58
|
'x-error-screen': ErrorScreen,
|
|
58
59
|
'x-origins-list': OriginsList,
|
|
60
|
+
'x-sso-switch': SSOSwitch,
|
|
59
61
|
'x-skeleton': Skeleton,
|
|
60
62
|
'x-section': Section,
|
|
61
63
|
'x-switch': Switch,
|
|
@@ -76,7 +78,7 @@ export class CustomerPortalSettings extends Translatable {
|
|
|
76
78
|
this.__service.send({ type: 'SET_HREF', data });
|
|
77
79
|
}
|
|
78
80
|
render() {
|
|
79
|
-
var _a, _b, _c, _d, _e;
|
|
81
|
+
var _a, _b, _c, _d, _e, _f;
|
|
80
82
|
if (this.__service.state.matches('error')) {
|
|
81
83
|
return html `
|
|
82
84
|
<x-error-screen
|
|
@@ -164,6 +166,18 @@ export class CustomerPortalSettings extends Translatable {
|
|
|
164
166
|
>
|
|
165
167
|
</x-next-date-modification>
|
|
166
168
|
|
|
169
|
+
<x-sso-switch
|
|
170
|
+
data-testid="sso"
|
|
171
|
+
.lang=${this.lang}
|
|
172
|
+
.ns=${this.ns}
|
|
173
|
+
.value=${(_d = newResource === null || newResource === void 0 ? void 0 : newResource.sso) !== null && _d !== void 0 ? _d : false}
|
|
174
|
+
.disabled=${!newResource}
|
|
175
|
+
@change=${(evt) => {
|
|
176
|
+
this.__service.send({ type: 'SET_SSO', value: evt.detail });
|
|
177
|
+
}}
|
|
178
|
+
>
|
|
179
|
+
</x-sso-switch>
|
|
180
|
+
|
|
167
181
|
<x-section>
|
|
168
182
|
<x-i18n slot="title" key="advanced.title" .ns=${this.ns} .lang=${this.lang}></x-i18n>
|
|
169
183
|
<x-i18n slot="subtitle" key="advanced.subtitle" .ns=${this.ns} .lang=${this.lang}>
|
|
@@ -172,7 +186,7 @@ export class CustomerPortalSettings extends Translatable {
|
|
|
172
186
|
<x-session-duration
|
|
173
187
|
data-testid="session"
|
|
174
188
|
.disabled=${!newResource || !this._isI18nReady}
|
|
175
|
-
.value=${(
|
|
189
|
+
.value=${(_e = newResource === null || newResource === void 0 ? void 0 : newResource.sessionLifespanInMinutes) !== null && _e !== void 0 ? _e : 1}
|
|
176
190
|
.lang=${this.lang}
|
|
177
191
|
.ns=${this.ns}
|
|
178
192
|
@change=${({ detail }) => {
|
|
@@ -184,7 +198,7 @@ export class CustomerPortalSettings extends Translatable {
|
|
|
184
198
|
<x-session-secret
|
|
185
199
|
data-testid="secret"
|
|
186
200
|
.disabled=${!newResource || !this._isI18nReady}
|
|
187
|
-
.value=${(
|
|
201
|
+
.value=${(_f = newResource === null || newResource === void 0 ? void 0 : newResource.jwtSharedSecret) !== null && _f !== void 0 ? _f : ''}
|
|
188
202
|
.lang=${this.lang}
|
|
189
203
|
.ns=${this.ns}
|
|
190
204
|
@change=${({ detail }) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomerPortalSettings.js","sourceRoot":"","sources":["../../../../src/elements/public/CustomerPortalSettings/CustomerPortalSettings.ts"],"names":[],"mappings":"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","sourcesContent":["import '@polymer/iron-icon';\nimport '@vaadin/vaadin-button';\n\nimport { ErrorScreen, FriendlyError } from '../../private/ErrorScreen/ErrorScreen';\nimport { FxBookmark, FxCustomerPortalSettings, FxStore } from '../../../types/hapi';\nimport { I18N, Page, Section, Skeleton } from '../../private/index';\nimport { PropertyDeclarations, TemplateResult, html } from 'lit-element';\nimport { RequestEvent, UnhandledRequestError } from '../../../events/request';\nimport {\n SessionDuration,\n SessionDurationChangeEvent,\n} from './private/SessionDuration/SessionDuration';\nimport { SessionSecret, SessionSecretChangeEvent } from './private/SessionSecret/SessionSecret';\nimport { Switch, SwitchChangeEvent } from '../../private/Switch/Switch';\n\nimport { CustomerPortalSettingsLoadSuccessEvent } from './types';\nimport { FrequencyModification } from './private/FrequencyModification/FrequencyModification';\nimport { FrequencyModificationChangeEvent } from './private/FrequencyModification/FrequencyModificationChangeEvent';\nimport { LoadingScreen } from '../../private/LoadingScreen/LoadingScreen';\nimport { NextDateModification } from './private/NextDateModification/NextDateModification';\nimport { NextDateModificationChangeEvent } from './private/NextDateModification/NextDateModificationChangeEvent';\nimport { OriginsList } from './private/OriginsList/OriginsList';\nimport { OriginsListChangeEvent } from './private/OriginsList/OriginsListChangeEvent';\nimport { ScopedElementsMap } from '@open-wc/scoped-elements';\nimport { Translatable } from '../../../mixins/translatable';\nimport cloneDeep from 'lodash-es/cloneDeep';\nimport { interpret } from 'xstate';\nimport { machine } from './machine';\n\nfunction throwIfNotOk(response: Response) {\n if (response.ok) return;\n throw new FriendlyError(response.status === 401 ? 'unauthorized' : 'unknown');\n}\n\nexport class CustomerPortalSettingsReadyEvent extends CustomEvent<void> {\n constructor() {\n super('ready');\n }\n}\n\nexport class CustomerPortalSettingsUpdateEvent extends CustomEvent<void> {\n constructor() {\n super('update');\n }\n}\n\nexport class CustomerPortalSettings extends Translatable {\n public static get scopedElements(): ScopedElementsMap {\n return {\n 'iron-icon': customElements.get('iron-icon'),\n 'vaadin-button': customElements.get('vaadin-button'),\n 'x-frequency-modification': FrequencyModification,\n 'x-next-date-modification': NextDateModification,\n 'x-session-duration': SessionDuration,\n 'x-session-secret': SessionSecret,\n 'x-loading-screen': LoadingScreen,\n 'x-error-screen': ErrorScreen,\n 'x-origins-list': OriginsList,\n 'x-skeleton': Skeleton,\n 'x-section': Section,\n 'x-switch': Switch,\n 'x-i18n': I18N,\n 'x-page': Page,\n };\n }\n\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n href: { type: String, noAccessor: true },\n };\n }\n\n public readonly rel = 'customer_portal_settings';\n\n private __machine = machine.withConfig({\n services: {\n load: () => this.__load(),\n save: () => this.__save(),\n },\n });\n\n private __service = interpret(this.__machine)\n .onTransition(({ changed }) => changed && this.requestUpdate())\n .onChange(() => this.requestUpdate())\n .start();\n\n public constructor() {\n super('customer-portal-settings');\n }\n\n public get href(): string | null {\n return this.__service.state.context.href;\n }\n\n public set href(data: string | null) {\n this.__service.send({ type: 'SET_HREF', data });\n }\n\n public render(): TemplateResult {\n if (this.__service.state.matches('error')) {\n return html`\n <x-error-screen\n data-testid=\"error\"\n lang=${this.lang}\n type=${this.__service.state.context.error!}\n reload\n @reload=${this.__reload}\n >\n </x-error-screen>\n `;\n }\n\n const { newResource } = this.__service.state.context;\n\n const matchesCreated = this.__service.state.matches('idle.dirty.created');\n const matchesDeleted = this.__service.state.matches('idle.dirty.deleted');\n const matchesUpdated = this.__service.state.matches('idle.dirty.updated');\n const matchesEnabled = this.__service.state.matches('idle.clean.enabled');\n const matchesInvalid =\n this.__service.state.matches('idle.dirty.updated.invalid') ||\n this.__service.state.matches('idle.dirty.created.invalid');\n\n return html`\n <x-page class=\"relative\">\n <x-switch\n slot=\"title\"\n data-testid=\"switch\"\n .disabled=${!this.__service.state.matches('idle') || !this._isI18nReady}\n .checked=${matchesEnabled || matchesCreated || matchesUpdated}\n @change=${(evt: SwitchChangeEvent) => {\n this.__service.send(evt.detail ? 'ENABLE' : 'DISABLE');\n }}\n >\n <x-i18n key=\"title\" class=\"text-xxl\" .ns=${this.ns} .lang=${this.lang}>\n <sup class=\"text-tertiary\">\n <x-i18n key=\"beta\" .ns=${this.ns} .lang=${this.lang}> </x-i18n>\n </sup>\n </x-i18n>\n </x-switch>\n\n <x-i18n\n class=\"block mr-xl\"\n slot=\"subtitle\"\n key=\"subtitle\"\n .ns=${this.ns}\n .lang=${this.lang}\n >\n </x-i18n>\n\n <x-section>\n <x-i18n slot=\"title\" key=\"origins.title\" .ns=${this.ns} .lang=${this.lang}></x-i18n>\n <x-i18n slot=\"subtitle\" key=\"origins.subtitle\" .ns=${this.ns} .lang=${this.lang}></x-i18n>\n\n <x-origins-list\n data-testid=\"origins\"\n .lang=${this.lang}\n .ns=${this.ns}\n .value=${newResource?.allowedOrigins ?? []}\n .disabled=${!newResource}\n @change=${(evt: OriginsListChangeEvent) => {\n this.__service.send({ type: 'SET_ORIGINS', value: evt.detail });\n }}\n >\n </x-origins-list>\n </x-section>\n\n <x-frequency-modification\n data-testid=\"fmod\"\n .lang=${this.lang}\n .ns=${this.ns}\n .value=${newResource?.subscriptions.allowFrequencyModification ?? []}\n ?disabled=${!newResource}\n @change=${(evt: FrequencyModificationChangeEvent) => {\n this.__service.send({ type: 'SET_FREQUENCY_MODIFICATION', value: evt.detail });\n }}\n >\n </x-frequency-modification>\n\n <x-next-date-modification\n data-testid=\"ndmod\"\n .lang=${this.lang}\n .ns=${this.ns}\n .value=${newResource?.subscriptions.allowNextDateModification ?? false}\n .disabled=${!newResource}\n @change=${(evt: NextDateModificationChangeEvent) => {\n this.__service.send({ type: 'SET_NEXT_DATE_MODIFICATION', value: evt.detail });\n }}\n >\n </x-next-date-modification>\n\n <x-section>\n <x-i18n slot=\"title\" key=\"advanced.title\" .ns=${this.ns} .lang=${this.lang}></x-i18n>\n <x-i18n slot=\"subtitle\" key=\"advanced.subtitle\" .ns=${this.ns} .lang=${this.lang}>\n </x-i18n>\n\n <x-session-duration\n data-testid=\"session\"\n .disabled=${!newResource || !this._isI18nReady}\n .value=${newResource?.sessionLifespanInMinutes ?? 1}\n .lang=${this.lang}\n .ns=${this.ns}\n @change=${({ detail }: SessionDurationChangeEvent) => {\n this.__service.send({ type: 'SET_SESSION', ...detail });\n }}\n >\n </x-session-duration>\n\n <x-session-secret\n data-testid=\"secret\"\n .disabled=${!newResource || !this._isI18nReady}\n .value=${newResource?.jwtSharedSecret ?? ''}\n .lang=${this.lang}\n .ns=${this.ns}\n @change=${({ detail }: SessionSecretChangeEvent) => {\n this.__service.send({ type: 'SET_SECRET', ...detail });\n }}\n >\n </x-session-secret>\n </x-section>\n\n ${this.__service.state.matches('idle.dirty')\n ? html`\n <div\n class=\"sticky flex justify-between rounded-t-l rounded-b-l shadow-m -mx-s p-s bg-contrast\"\n style=\"bottom: var(--lumo-space-m)\"\n >\n <vaadin-button\n data-testid=\"save\"\n theme=\"primary ${matchesDeleted ? 'error' : 'success'}\"\n .disabled=${matchesInvalid}\n @click=${() => this.__service.send('SAVE')}\n >\n <x-i18n\n lang=${this.lang}\n ns=${this.ns}\n key=\"save_${matchesCreated ? 'create' : matchesDeleted ? 'delete' : 'update'}\"\n >\n </x-i18n>\n </vaadin-button>\n\n <vaadin-button\n style=\"--lumo-contrast: var(--lumo-base-color)\"\n data-testid=\"reset\"\n theme=\"contrast tertiary\"\n @click=${() => this.__service.send('RESET')}\n >\n <x-i18n lang=${this.lang} key=\"undo_all\"></x-i18n>\n <iron-icon icon=\"lumo:reload\" slot=\"suffix\"></iron-icon>\n </vaadin-button>\n </div>\n `\n : this.__service.state.matches('busy')\n ? html`<x-loading-screen data-testid=\"loading\" class=\"mt-0\"></x-loading-screen>`\n : ''}\n </x-page>\n `;\n }\n\n private async __reload() {\n this.__service.stop();\n this.__service\n .onTransition(({ changed }) => changed && this.requestUpdate())\n .onChange(() => this.requestUpdate())\n .start();\n }\n\n private async __load(): Promise<CustomerPortalSettingsLoadSuccessEvent['data']> {\n if (this.href === null) throw new FriendlyError('setup_needed');\n\n try {\n await this.updateComplete;\n\n const resourceResponse = await RequestEvent.emit({ source: this, init: [this.href] });\n let resource: FxCustomerPortalSettings | null;\n let store: FxStore;\n\n if (resourceResponse.status.toString().startsWith('4')) {\n resource = null;\n\n const bookmarkResponse = await RequestEvent.emit({ source: this, init: ['/'] });\n throwIfNotOk(bookmarkResponse);\n\n const bookmark = (await bookmarkResponse.json()) as FxBookmark;\n const storeHref = bookmark._links['fx:store'].href;\n const storeResponse = await RequestEvent.emit({ source: this, init: [storeHref] });\n throwIfNotOk(storeResponse);\n\n store = (await storeResponse.json()) as FxStore;\n } else {\n throwIfNotOk(resourceResponse);\n resource = (await resourceResponse.json()) as FxCustomerPortalSettings;\n\n const storeHref = resource._links['fx:store'].href;\n const storeResponse = await RequestEvent.emit({ source: this, init: [storeHref] });\n throwIfNotOk(storeResponse);\n\n store = (await storeResponse.json()) as FxStore;\n }\n\n return { store, resource };\n } catch (err) {\n if (err instanceof FriendlyError) throw err;\n if (err instanceof UnhandledRequestError) throw new FriendlyError('setup_needed');\n throw new FriendlyError('unknown');\n } finally {\n await this.updateComplete;\n this.dispatchEvent(new CustomerPortalSettingsReadyEvent());\n }\n }\n\n private async __save(): Promise<void> {\n try {\n const context = this.__service.state.context;\n const payload = cloneDeep(context.newResource) as Record<string, unknown> | null;\n const method = payload ? 'PUT' : 'DELETE';\n\n if (payload) {\n delete payload._links;\n delete payload.date_created;\n delete payload.date_modified;\n }\n\n const options: RequestInit = { method, body: payload ? JSON.stringify(payload) : undefined };\n const response = await RequestEvent.emit({ source: this, init: [this.href!, options] });\n\n throwIfNotOk(response);\n } catch (err) {\n if (err instanceof FriendlyError) throw err;\n if (err instanceof UnhandledRequestError) throw new FriendlyError('setup_needed');\n throw new FriendlyError('unknown');\n } finally {\n await this.updateComplete;\n this.dispatchEvent(new CustomerPortalSettingsUpdateEvent());\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"CustomerPortalSettings.js","sourceRoot":"","sources":["../../../../src/elements/public/CustomerPortalSettings/CustomerPortalSettings.ts"],"names":[],"mappings":"AAAA,OAAO,oBAAoB,CAAC;AAC5B,OAAO,uBAAuB,CAAC;AAE/B,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,iDAA8C;AAEnF,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,+BAA4B;AACpE,OAAO,EAAwC,IAAI,EAAE,MAAM,aAAa,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,mCAAgC;AAC9E,OAAO,EACL,eAAe,GAEhB,qDAAkD;AACnD,OAAO,EAAE,aAAa,EAA4B,iDAA8C;AAChG,OAAO,EAAE,MAAM,EAAqB,uCAAoC;AAGxE,OAAO,EAAE,qBAAqB,EAAE,iEAA8D;AAE9F,OAAO,EAAE,aAAa,EAAE,qDAAkD;AAC1E,OAAO,EAAE,oBAAoB,EAAE,+DAA4D;AAE3F,OAAO,EAAE,WAAW,EAAE,6CAA0C;AAEhE,OAAO,EAAE,SAAS,EAAE,yCAAsC;AAG1D,OAAO,EAAE,YAAY,EAAE,wCAAqC;AAC5D,OAAO,SAAS,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,qBAAkB;AAEpC,SAAS,YAAY,CAAC,QAAkB;IACtC,IAAI,QAAQ,CAAC,EAAE;QAAE,OAAO;IACxB,MAAM,IAAI,aAAa,CAAC,QAAQ,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;AAChF,CAAC;AAED,MAAM,OAAO,gCAAiC,SAAQ,WAAiB;IACrE;QACE,KAAK,CAAC,OAAO,CAAC,CAAC;IACjB,CAAC;CACF;AAED,MAAM,OAAO,iCAAkC,SAAQ,WAAiB;IACtE;QACE,KAAK,CAAC,QAAQ,CAAC,CAAC;IAClB,CAAC;CACF;AAED,MAAM,OAAO,sBAAuB,SAAQ,YAAY;IA0CtD;QACE,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAfpB,QAAG,GAAG,0BAA0B,CAAC;QAEzC,cAAS,GAAG,OAAO,CAAC,UAAU,CAAC;YACrC,QAAQ,EAAE;gBACR,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE;gBACzB,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE;aAC1B;SACF,CAAC,CAAC;QAEK,cAAS,GAAG,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC;aAC1C,YAAY,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;aAC9D,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;aACpC,KAAK,EAAE,CAAC;IAIX,CAAC;IA3CM,MAAM,KAAK,cAAc;QAC9B,OAAO;YACL,WAAW,EAAE,cAAc,CAAC,GAAG,CAAC,WAAW,CAAC;YAC5C,eAAe,EAAE,cAAc,CAAC,GAAG,CAAC,eAAe,CAAC;YACpD,0BAA0B,EAAE,qBAAqB;YACjD,0BAA0B,EAAE,oBAAoB;YAChD,oBAAoB,EAAE,eAAe;YACrC,kBAAkB,EAAE,aAAa;YACjC,kBAAkB,EAAE,aAAa;YACjC,gBAAgB,EAAE,WAAW;YAC7B,gBAAgB,EAAE,WAAW;YAC7B,cAAc,EAAE,SAAS;YACzB,YAAY,EAAE,QAAQ;YACtB,WAAW,EAAE,OAAO;YACpB,UAAU,EAAE,MAAM;YAClB,QAAQ,EAAE,IAAI;YACd,QAAQ,EAAE,IAAI;SACf,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,UAAU;QACnB,OAAO;YACL,GAAG,KAAK,CAAC,UAAU;YACnB,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE;SACzC,CAAC;IACJ,CAAC;IAoBD,IAAW,IAAI;QACb,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;IAC3C,CAAC;IAED,IAAW,IAAI,CAAC,IAAmB;QACjC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC;IAEM,MAAM;;QACX,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YACzC,OAAO,IAAI,CAAA;;;iBAGA,IAAI,CAAC,IAAI;iBACT,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,KAAM;;oBAEhC,IAAI,CAAC,QAAQ;;;OAG1B,CAAC;SACH;QAED,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC;QAErD,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;QAC1E,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;QAC1E,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;QAC1E,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;QAC1E,MAAM,cAAc,GAClB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,4BAA4B,CAAC;YAC1D,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC;QAE7D,OAAO,IAAI,CAAA;;;;;sBAKO,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY;qBAC5D,cAAc,IAAI,cAAc,IAAI,cAAc;oBACnD,CAAC,GAAsB,EAAE,EAAE;YACnC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACzD,CAAC;;qDAE0C,IAAI,CAAC,EAAE,UAAU,IAAI,CAAC,IAAI;;uCAExC,IAAI,CAAC,EAAE,UAAU,IAAI,CAAC,IAAI;;;;;;;;;gBASjD,IAAI,CAAC,EAAE;kBACL,IAAI,CAAC,IAAI;;;;;yDAK8B,IAAI,CAAC,EAAE,UAAU,IAAI,CAAC,IAAI;+DACpB,IAAI,CAAC,EAAE,UAAU,IAAI,CAAC,IAAI;;;;oBAIrE,IAAI,CAAC,IAAI;kBACX,IAAI,CAAC,EAAE;qBACJ,MAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,cAAc,mCAAI,EAAE;wBAC9B,CAAC,WAAW;sBACd,CAAC,GAA2B,EAAE,EAAE;YACxC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QAClE,CAAC;;;;;;;kBAOK,IAAI,CAAC,IAAI;gBACX,IAAI,CAAC,EAAE;mBACJ,MAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,aAAa,CAAC,0BAA0B,mCAAI,EAAE;sBACxD,CAAC,WAAW;oBACd,CAAC,GAAqC,EAAE,EAAE;YAClD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,4BAA4B,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QACjF,CAAC;;;;;;kBAMO,IAAI,CAAC,IAAI;gBACX,IAAI,CAAC,EAAE;mBACJ,MAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,aAAa,CAAC,yBAAyB,mCAAI,KAAK;sBAC1D,CAAC,WAAW;oBACd,CAAC,GAAoC,EAAE,EAAE;YACjD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,4BAA4B,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QACjF,CAAC;;;;;;kBAMO,IAAI,CAAC,IAAI;gBACX,IAAI,CAAC,EAAE;mBACJ,MAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,GAAG,mCAAI,KAAK;sBACtB,CAAC,WAAW;oBACd,CAAC,GAAyB,EAAE,EAAE;YACtC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QAC9D,CAAC;;;;;0DAK+C,IAAI,CAAC,EAAE,UAAU,IAAI,CAAC,IAAI;gEACpB,IAAI,CAAC,EAAE,UAAU,IAAI,CAAC,IAAI;;;;;wBAKlE,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,YAAY;qBACrC,MAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,wBAAwB,mCAAI,CAAC;oBAC3C,IAAI,CAAC,IAAI;kBACX,IAAI,CAAC,EAAE;sBACH,CAAC,EAAE,MAAM,EAA8B,EAAE,EAAE;YACnD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;QAC1D,CAAC;;;;;;wBAMW,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,YAAY;qBACrC,MAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,eAAe,mCAAI,EAAE;oBACnC,IAAI,CAAC,IAAI;kBACX,IAAI,CAAC,EAAE;sBACH,CAAC,EAAE,MAAM,EAA4B,EAAE,EAAE;YACjD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;QACzD,CAAC;;;;;UAKH,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC;YAC1C,CAAC,CAAC,IAAI,CAAA;;;;;;;mCAOmB,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;8BACzC,cAAc;2BACjB,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;;;2BAGjC,IAAI,CAAC,IAAI;yBACX,IAAI,CAAC,EAAE;gCACA,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ;;;;;;;;;2BASrE,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;;iCAE5B,IAAI,CAAC,IAAI;;;;aAI7B;YACH,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;gBACtC,CAAC,CAAC,IAAI,CAAA,0EAA0E;gBAChF,CAAC,CAAC,EAAE;;KAET,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,QAAQ;QACpB,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QACtB,IAAI,CAAC,SAAS;aACX,YAAY,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;aAC9D,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;aACpC,KAAK,EAAE,CAAC;IACb,CAAC;IAEO,KAAK,CAAC,MAAM;QAClB,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI;YAAE,MAAM,IAAI,aAAa,CAAC,cAAc,CAAC,CAAC;QAEhE,IAAI;YACF,MAAM,IAAI,CAAC,cAAc,CAAC;YAE1B,MAAM,gBAAgB,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACtF,IAAI,QAAyC,CAAC;YAC9C,IAAI,KAAc,CAAC;YAEnB,IAAI,gBAAgB,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;gBACtD,QAAQ,GAAG,IAAI,CAAC;gBAEhB,MAAM,gBAAgB,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChF,YAAY,CAAC,gBAAgB,CAAC,CAAC;gBAE/B,MAAM,QAAQ,GAAG,CAAC,MAAM,gBAAgB,CAAC,IAAI,EAAE,CAAe,CAAC;gBAC/D,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC;gBACnD,MAAM,aAAa,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;gBACnF,YAAY,CAAC,aAAa,CAAC,CAAC;gBAE5B,KAAK,GAAG,CAAC,MAAM,aAAa,CAAC,IAAI,EAAE,CAAY,CAAC;aACjD;iBAAM;gBACL,YAAY,CAAC,gBAAgB,CAAC,CAAC;gBAC/B,QAAQ,GAAG,CAAC,MAAM,gBAAgB,CAAC,IAAI,EAAE,CAA6B,CAAC;gBAEvE,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC;gBACnD,MAAM,aAAa,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;gBACnF,YAAY,CAAC,aAAa,CAAC,CAAC;gBAE5B,KAAK,GAAG,CAAC,MAAM,aAAa,CAAC,IAAI,EAAE,CAAY,CAAC;aACjD;YAED,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;SAC5B;QAAC,OAAO,GAAG,EAAE;YACZ,IAAI,GAAG,YAAY,aAAa;gBAAE,MAAM,GAAG,CAAC;YAC5C,IAAI,GAAG,YAAY,qBAAqB;gBAAE,MAAM,IAAI,aAAa,CAAC,cAAc,CAAC,CAAC;YAClF,MAAM,IAAI,aAAa,CAAC,SAAS,CAAC,CAAC;SACpC;gBAAS;YACR,MAAM,IAAI,CAAC,cAAc,CAAC;YAC1B,IAAI,CAAC,aAAa,CAAC,IAAI,gCAAgC,EAAE,CAAC,CAAC;SAC5D;IACH,CAAC;IAEO,KAAK,CAAC,MAAM;QAClB,IAAI;YACF,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC;YAC7C,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,WAAW,CAAmC,CAAC;YACjF,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;YAE1C,IAAI,OAAO,EAAE;gBACX,OAAO,OAAO,CAAC,MAAM,CAAC;gBACtB,OAAO,OAAO,CAAC,YAAY,CAAC;gBAC5B,OAAO,OAAO,CAAC,aAAa,CAAC;aAC9B;YAED,MAAM,OAAO,GAAgB,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;YAC7F,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,IAAK,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;YAExF,YAAY,CAAC,QAAQ,CAAC,CAAC;SACxB;QAAC,OAAO,GAAG,EAAE;YACZ,IAAI,GAAG,YAAY,aAAa;gBAAE,MAAM,GAAG,CAAC;YAC5C,IAAI,GAAG,YAAY,qBAAqB;gBAAE,MAAM,IAAI,aAAa,CAAC,cAAc,CAAC,CAAC;YAClF,MAAM,IAAI,aAAa,CAAC,SAAS,CAAC,CAAC;SACpC;gBAAS;YACR,MAAM,IAAI,CAAC,cAAc,CAAC;YAC1B,IAAI,CAAC,aAAa,CAAC,IAAI,iCAAiC,EAAE,CAAC,CAAC;SAC7D;IACH,CAAC;CACF","sourcesContent":["import '@polymer/iron-icon';\nimport '@vaadin/vaadin-button';\n\nimport { ErrorScreen, FriendlyError } from '../../private/ErrorScreen/ErrorScreen';\nimport { FxBookmark, FxCustomerPortalSettings, FxStore } from '../../../types/hapi';\nimport { I18N, Page, Section, Skeleton } from '../../private/index';\nimport { PropertyDeclarations, TemplateResult, html } from 'lit-element';\nimport { RequestEvent, UnhandledRequestError } from '../../../events/request';\nimport {\n SessionDuration,\n SessionDurationChangeEvent,\n} from './private/SessionDuration/SessionDuration';\nimport { SessionSecret, SessionSecretChangeEvent } from './private/SessionSecret/SessionSecret';\nimport { Switch, SwitchChangeEvent } from '../../private/Switch/Switch';\n\nimport { CustomerPortalSettingsLoadSuccessEvent } from './types';\nimport { FrequencyModification } from './private/FrequencyModification/FrequencyModification';\nimport { FrequencyModificationChangeEvent } from './private/FrequencyModification/FrequencyModificationChangeEvent';\nimport { LoadingScreen } from '../../private/LoadingScreen/LoadingScreen';\nimport { NextDateModification } from './private/NextDateModification/NextDateModification';\nimport { NextDateModificationChangeEvent } from './private/NextDateModification/NextDateModificationChangeEvent';\nimport { OriginsList } from './private/OriginsList/OriginsList';\nimport { OriginsListChangeEvent } from './private/OriginsList/OriginsListChangeEvent';\nimport { SSOSwitch } from './private/SSOSwitch/SSOSwitch';\nimport { SSOSwitchChangeEvent } from './private/SSOSwitch/SSOSwitchChangeEvent';\nimport { ScopedElementsMap } from '@open-wc/scoped-elements';\nimport { Translatable } from '../../../mixins/translatable';\nimport cloneDeep from 'lodash-es/cloneDeep';\nimport { interpret } from 'xstate';\nimport { machine } from './machine';\n\nfunction throwIfNotOk(response: Response) {\n if (response.ok) return;\n throw new FriendlyError(response.status === 401 ? 'unauthorized' : 'unknown');\n}\n\nexport class CustomerPortalSettingsReadyEvent extends CustomEvent<void> {\n constructor() {\n super('ready');\n }\n}\n\nexport class CustomerPortalSettingsUpdateEvent extends CustomEvent<void> {\n constructor() {\n super('update');\n }\n}\n\nexport class CustomerPortalSettings extends Translatable {\n public static get scopedElements(): ScopedElementsMap {\n return {\n 'iron-icon': customElements.get('iron-icon'),\n 'vaadin-button': customElements.get('vaadin-button'),\n 'x-frequency-modification': FrequencyModification,\n 'x-next-date-modification': NextDateModification,\n 'x-session-duration': SessionDuration,\n 'x-session-secret': SessionSecret,\n 'x-loading-screen': LoadingScreen,\n 'x-error-screen': ErrorScreen,\n 'x-origins-list': OriginsList,\n 'x-sso-switch': SSOSwitch,\n 'x-skeleton': Skeleton,\n 'x-section': Section,\n 'x-switch': Switch,\n 'x-i18n': I18N,\n 'x-page': Page,\n };\n }\n\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n href: { type: String, noAccessor: true },\n };\n }\n\n public readonly rel = 'customer_portal_settings';\n\n private __machine = machine.withConfig({\n services: {\n load: () => this.__load(),\n save: () => this.__save(),\n },\n });\n\n private __service = interpret(this.__machine)\n .onTransition(({ changed }) => changed && this.requestUpdate())\n .onChange(() => this.requestUpdate())\n .start();\n\n public constructor() {\n super('customer-portal-settings');\n }\n\n public get href(): string | null {\n return this.__service.state.context.href;\n }\n\n public set href(data: string | null) {\n this.__service.send({ type: 'SET_HREF', data });\n }\n\n public render(): TemplateResult {\n if (this.__service.state.matches('error')) {\n return html`\n <x-error-screen\n data-testid=\"error\"\n lang=${this.lang}\n type=${this.__service.state.context.error!}\n reload\n @reload=${this.__reload}\n >\n </x-error-screen>\n `;\n }\n\n const { newResource } = this.__service.state.context;\n\n const matchesCreated = this.__service.state.matches('idle.dirty.created');\n const matchesDeleted = this.__service.state.matches('idle.dirty.deleted');\n const matchesUpdated = this.__service.state.matches('idle.dirty.updated');\n const matchesEnabled = this.__service.state.matches('idle.clean.enabled');\n const matchesInvalid =\n this.__service.state.matches('idle.dirty.updated.invalid') ||\n this.__service.state.matches('idle.dirty.created.invalid');\n\n return html`\n <x-page class=\"relative\">\n <x-switch\n slot=\"title\"\n data-testid=\"switch\"\n .disabled=${!this.__service.state.matches('idle') || !this._isI18nReady}\n .checked=${matchesEnabled || matchesCreated || matchesUpdated}\n @change=${(evt: SwitchChangeEvent) => {\n this.__service.send(evt.detail ? 'ENABLE' : 'DISABLE');\n }}\n >\n <x-i18n key=\"title\" class=\"text-xxl\" .ns=${this.ns} .lang=${this.lang}>\n <sup class=\"text-tertiary\">\n <x-i18n key=\"beta\" .ns=${this.ns} .lang=${this.lang}> </x-i18n>\n </sup>\n </x-i18n>\n </x-switch>\n\n <x-i18n\n class=\"block mr-xl\"\n slot=\"subtitle\"\n key=\"subtitle\"\n .ns=${this.ns}\n .lang=${this.lang}\n >\n </x-i18n>\n\n <x-section>\n <x-i18n slot=\"title\" key=\"origins.title\" .ns=${this.ns} .lang=${this.lang}></x-i18n>\n <x-i18n slot=\"subtitle\" key=\"origins.subtitle\" .ns=${this.ns} .lang=${this.lang}></x-i18n>\n\n <x-origins-list\n data-testid=\"origins\"\n .lang=${this.lang}\n .ns=${this.ns}\n .value=${newResource?.allowedOrigins ?? []}\n .disabled=${!newResource}\n @change=${(evt: OriginsListChangeEvent) => {\n this.__service.send({ type: 'SET_ORIGINS', value: evt.detail });\n }}\n >\n </x-origins-list>\n </x-section>\n\n <x-frequency-modification\n data-testid=\"fmod\"\n .lang=${this.lang}\n .ns=${this.ns}\n .value=${newResource?.subscriptions.allowFrequencyModification ?? []}\n ?disabled=${!newResource}\n @change=${(evt: FrequencyModificationChangeEvent) => {\n this.__service.send({ type: 'SET_FREQUENCY_MODIFICATION', value: evt.detail });\n }}\n >\n </x-frequency-modification>\n\n <x-next-date-modification\n data-testid=\"ndmod\"\n .lang=${this.lang}\n .ns=${this.ns}\n .value=${newResource?.subscriptions.allowNextDateModification ?? false}\n .disabled=${!newResource}\n @change=${(evt: NextDateModificationChangeEvent) => {\n this.__service.send({ type: 'SET_NEXT_DATE_MODIFICATION', value: evt.detail });\n }}\n >\n </x-next-date-modification>\n\n <x-sso-switch\n data-testid=\"sso\"\n .lang=${this.lang}\n .ns=${this.ns}\n .value=${newResource?.sso ?? false}\n .disabled=${!newResource}\n @change=${(evt: SSOSwitchChangeEvent) => {\n this.__service.send({ type: 'SET_SSO', value: evt.detail });\n }}\n >\n </x-sso-switch>\n\n <x-section>\n <x-i18n slot=\"title\" key=\"advanced.title\" .ns=${this.ns} .lang=${this.lang}></x-i18n>\n <x-i18n slot=\"subtitle\" key=\"advanced.subtitle\" .ns=${this.ns} .lang=${this.lang}>\n </x-i18n>\n\n <x-session-duration\n data-testid=\"session\"\n .disabled=${!newResource || !this._isI18nReady}\n .value=${newResource?.sessionLifespanInMinutes ?? 1}\n .lang=${this.lang}\n .ns=${this.ns}\n @change=${({ detail }: SessionDurationChangeEvent) => {\n this.__service.send({ type: 'SET_SESSION', ...detail });\n }}\n >\n </x-session-duration>\n\n <x-session-secret\n data-testid=\"secret\"\n .disabled=${!newResource || !this._isI18nReady}\n .value=${newResource?.jwtSharedSecret ?? ''}\n .lang=${this.lang}\n .ns=${this.ns}\n @change=${({ detail }: SessionSecretChangeEvent) => {\n this.__service.send({ type: 'SET_SECRET', ...detail });\n }}\n >\n </x-session-secret>\n </x-section>\n\n ${this.__service.state.matches('idle.dirty')\n ? html`\n <div\n class=\"sticky flex justify-between rounded-t-l rounded-b-l shadow-m -mx-s p-s bg-contrast\"\n style=\"bottom: var(--lumo-space-m)\"\n >\n <vaadin-button\n data-testid=\"save\"\n theme=\"primary ${matchesDeleted ? 'error' : 'success'}\"\n .disabled=${matchesInvalid}\n @click=${() => this.__service.send('SAVE')}\n >\n <x-i18n\n lang=${this.lang}\n ns=${this.ns}\n key=\"save_${matchesCreated ? 'create' : matchesDeleted ? 'delete' : 'update'}\"\n >\n </x-i18n>\n </vaadin-button>\n\n <vaadin-button\n style=\"--lumo-contrast: var(--lumo-base-color)\"\n data-testid=\"reset\"\n theme=\"contrast tertiary\"\n @click=${() => this.__service.send('RESET')}\n >\n <x-i18n lang=${this.lang} key=\"undo_all\"></x-i18n>\n <iron-icon icon=\"lumo:reload\" slot=\"suffix\"></iron-icon>\n </vaadin-button>\n </div>\n `\n : this.__service.state.matches('busy')\n ? html`<x-loading-screen data-testid=\"loading\" class=\"mt-0\"></x-loading-screen>`\n : ''}\n </x-page>\n `;\n }\n\n private async __reload() {\n this.__service.stop();\n this.__service\n .onTransition(({ changed }) => changed && this.requestUpdate())\n .onChange(() => this.requestUpdate())\n .start();\n }\n\n private async __load(): Promise<CustomerPortalSettingsLoadSuccessEvent['data']> {\n if (this.href === null) throw new FriendlyError('setup_needed');\n\n try {\n await this.updateComplete;\n\n const resourceResponse = await RequestEvent.emit({ source: this, init: [this.href] });\n let resource: FxCustomerPortalSettings | null;\n let store: FxStore;\n\n if (resourceResponse.status.toString().startsWith('4')) {\n resource = null;\n\n const bookmarkResponse = await RequestEvent.emit({ source: this, init: ['/'] });\n throwIfNotOk(bookmarkResponse);\n\n const bookmark = (await bookmarkResponse.json()) as FxBookmark;\n const storeHref = bookmark._links['fx:store'].href;\n const storeResponse = await RequestEvent.emit({ source: this, init: [storeHref] });\n throwIfNotOk(storeResponse);\n\n store = (await storeResponse.json()) as FxStore;\n } else {\n throwIfNotOk(resourceResponse);\n resource = (await resourceResponse.json()) as FxCustomerPortalSettings;\n\n const storeHref = resource._links['fx:store'].href;\n const storeResponse = await RequestEvent.emit({ source: this, init: [storeHref] });\n throwIfNotOk(storeResponse);\n\n store = (await storeResponse.json()) as FxStore;\n }\n\n return { store, resource };\n } catch (err) {\n if (err instanceof FriendlyError) throw err;\n if (err instanceof UnhandledRequestError) throw new FriendlyError('setup_needed');\n throw new FriendlyError('unknown');\n } finally {\n await this.updateComplete;\n this.dispatchEvent(new CustomerPortalSettingsReadyEvent());\n }\n }\n\n private async __save(): Promise<void> {\n try {\n const context = this.__service.state.context;\n const payload = cloneDeep(context.newResource) as Record<string, unknown> | null;\n const method = payload ? 'PUT' : 'DELETE';\n\n if (payload) {\n delete payload._links;\n delete payload.date_created;\n delete payload.date_modified;\n }\n\n const options: RequestInit = { method, body: payload ? JSON.stringify(payload) : undefined };\n const response = await RequestEvent.emit({ source: this, init: [this.href!, options] });\n\n throwIfNotOk(response);\n } catch (err) {\n if (err instanceof FriendlyError) throw err;\n if (err instanceof UnhandledRequestError) throw new FriendlyError('setup_needed');\n throw new FriendlyError('unknown');\n } finally {\n await this.updateComplete;\n this.dispatchEvent(new CustomerPortalSettingsUpdateEvent());\n }\n }\n}\n"]}
|
|
@@ -119,8 +119,15 @@ const setHref = actions.assign({
|
|
|
119
119
|
error: null,
|
|
120
120
|
href: (_, evt) => evt.data,
|
|
121
121
|
});
|
|
122
|
+
const setSSO = actions.assign({
|
|
123
|
+
newResource: ({ newResource }, evt) => {
|
|
124
|
+
const sso = evt.value;
|
|
125
|
+
return { ...newResource, sso };
|
|
126
|
+
},
|
|
127
|
+
});
|
|
122
128
|
// #endregion actions
|
|
123
129
|
const setters = {
|
|
130
|
+
SET_SSO: { target: '#cps.idle', actions: 'setSSO' },
|
|
124
131
|
SET_SECRET: { target: '#cps.idle', actions: 'setSecret' },
|
|
125
132
|
SET_ORIGINS: { target: '#cps.idle', actions: 'setOrigins' },
|
|
126
133
|
SET_SESSION: { target: '#cps.idle', actions: 'setSession' },
|
|
@@ -246,6 +253,7 @@ export const machine = Machine({
|
|
|
246
253
|
setSession,
|
|
247
254
|
setSecret,
|
|
248
255
|
setHref,
|
|
256
|
+
setSSO,
|
|
249
257
|
handleLoadingSuccess,
|
|
250
258
|
handleSavingSuccess,
|
|
251
259
|
handleError,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"machine.js","sourceRoot":"","sources":["../../../../src/elements/public/CustomerPortalSettings/machine.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAE1C,OAAO,OAAO,MAAM,mBAAmB,CAAC;AACxC,OAAO,MAAM,MAAM,kBAAkB,CAAC;AACtC,OAAO,KAAK,MAAM,iBAAiB,CAAC;AAEpC,iBAAiB;AAEjB,MAAM,OAAO,GAAG,CAAC,GAAkC,EAAW,EAAE;IAC9D,OAAO,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;AACnD,CAAC,CAAC;AAEF,MAAM,QAAQ,GAAG,CAAC,GAAkC,EAAW,EAAE;IAC/D,OAAO,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC;AAC5B,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,GAAkC,EAAW,EAAE;IAChE,OAAO,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;AAChC,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,GAAkC,EAAW,EAAE;IAChE,OAAO,GAAG,CAAC,WAAW,KAAK,IAAI,CAAC;AAClC,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,GAAkC,EAAW,EAAE;IAChE,OAAO,GAAG,CAAC,WAAW,KAAK,IAAI,IAAI,GAAG,CAAC,WAAW,KAAK,IAAI,CAAC;AAC9D,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,GAAkC,EAAW,EAAE;IAChE,OAAO,GAAG,CAAC,WAAW,KAAK,IAAI,IAAI,GAAG,CAAC,WAAW,KAAK,IAAI,CAAC;AAC9D,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,GAAkC,EAAW,EAAE;IACpE,OAAO,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC;AAC3B,CAAC,CAAC;AAEF,oBAAoB;AAEpB,kBAAkB;AAElB,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAgC;IAChE,KAAK,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAE,GAA4C,CAAC,IAAI,CAAC,IAAI;CAC3E,CAAC,CAAC;AAEH,MAAM,oBAAoB,GAAG,OAAO,CAAC,MAAM,CAAgC;IACzE,WAAW,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAE,GAA8C,CAAC,IAAI,CAAC,QAAQ;IACtF,WAAW,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAE,GAA8C,CAAC,IAAI,CAAC,QAAQ;IACtF,KAAK,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAE,GAA8C,CAAC,IAAI,CAAC,KAAK;CAC9E,CAAC,CAAC;AAEH,MAAM,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAgC;IACxE,WAAW,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,WAAW;CACpC,CAAC,CAAC;AAEH,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAgC;IAC1D,OAAO,EAAE,EAAE;IACX,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,WAAW;CAC9C,CAAC,CAAC;AAEH,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAgC;IAC3D,OAAO,EAAE,EAAE;IACX,WAAW,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QACnB,cAAc,EAAE,EAAE;QAClB,aAAa,EAAE,EAAE,0BAA0B,EAAE,EAAE,EAAE,yBAAyB,EAAE,KAAK,EAAE;QACnF,eAAe,EAAE,KAAK,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QAClE,wBAAwB,EAAE,KAAK;QAC/B,GAAG,EAAE,KAAK;QACV,YAAY,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACtC,aAAa,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACvC,MAAM,EAAE;YACN,UAAU,EAAE,GAAG,CAAC,KAAM,CAAC,MAAM,CAAC,IAAI;YAClC,QAAQ,EAAE,GAAG,CAAC,KAAM,CAAC,MAAM,CAAC,MAAM;YAClC,MAAM,EAAE,GAAG,CAAC,KAAM,CAAC,MAAM,CAAC,6BAA6B,CAAC;SACzD;KACF,CAAC;CACH,CAAC,CAAC;AAEH,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAgC;IAC3D,WAAW,EAAE,IAAI;CAClB,CAAC,CAAC;AAEH,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAgC;IACjE,KAAK,EAAE,cAAc;CACtB,CAAC,CAAC;AAEH,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAgC;IAC/D,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE,EAAE;QACpC,MAAM,cAAc,GAAI,GAA6C,CAAC,KAAK,CAAC;QAC5E,OAAO,EAAE,GAAG,WAAY,EAAE,cAAc,EAAE,CAAC;IAC7C,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,wBAAwB,GAAG,OAAO,CAAC,MAAM,CAAgC;IAC7E,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE,EAAE;QACpC,MAAM,QAAQ,GAAG,GAA0D,CAAC;QAC5E,MAAM,0BAA0B,GAAG,QAAQ,CAAC,KAAK,CAAC;QAClD,OAAO;YACL,GAAG,WAAY;YACf,aAAa,EAAE,EAAE,GAAG,WAAY,CAAC,aAAa,EAAE,0BAA0B,EAAE;SAC7E,CAAC;IACJ,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,uBAAuB,GAAG,OAAO,CAAC,MAAM,CAAgC;IAC5E,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE,EAAE;QACpC,MAAM,QAAQ,GAAG,GAAyD,CAAC;QAC3E,MAAM,yBAAyB,GAAG,QAAQ,CAAC,KAAK,CAAC;QACjD,OAAO;YACL,GAAG,WAAY;YACf,aAAa,EAAE,EAAE,GAAG,WAAY,CAAC,aAAa,EAAE,yBAAyB,EAAE;SAC5E,CAAC;IACJ,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAgC;IAC/D,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACpB,MAAM,GAAG,GAAG,0BAA0B,CAAC;QACvC,MAAM,OAAO,GAAI,GAA4C,CAAC,OAAO,CAAC;QACtE,OAAO,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,GAAG,CAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACzF,CAAC;IACD,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE,EAAE;QACpC,MAAM,wBAAwB,GAAI,GAA6C,CAAC,KAAK,CAAC;QACtF,OAAO,EAAE,GAAG,WAAY,EAAE,wBAAwB,EAAE,CAAC;IACvD,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAgC;IAC9D,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACpB,MAAM,GAAG,GAAG,iBAAiB,CAAC;QAC9B,MAAM,OAAO,GAAI,GAA4C,CAAC,OAAO,CAAC;QACtE,OAAO,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,GAAG,CAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACzF,CAAC;IACD,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE,EAAE;QACpC,MAAM,eAAe,GAAI,GAA4C,CAAC,KAAK,CAAC;QAC5E,OAAO,EAAE,GAAG,WAAY,EAAE,eAAe,EAAE,CAAC;IAC9C,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAgC;IAC5D,WAAW,EAAE,IAAI;IACjB,WAAW,EAAE,IAAI;IACjB,KAAK,EAAE,IAAI;IACX,KAAK,EAAE,IAAI;IACX,IAAI,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAE,GAA0C,CAAC,IAAI;CACnE,CAAC,CAAC;AAEH,qBAAqB;AAErB,MAAM,OAAO,GAAG;IACd,UAAU,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE;IACzD,WAAW,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE;IAC3D,WAAW,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE;IAC3D,0BAA0B,EAAE;QAC1B,MAAM,EAAE,WAAW;QACnB,OAAO,EAAE,0BAA0B;KACpC;IACD,0BAA0B,EAAE;QAC1B,MAAM,EAAE,WAAW;QACnB,OAAO,EAAE,yBAAyB;KACnC;CACF,CAAC;AAEF,MAAM,QAAQ,GAAG;IACf,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE;QACN,OAAO,EAAE;YACP,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;SACxE;QACD,OAAO,EAAE,EAAE;QACX,KAAK,EAAE,EAAE;KACV;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAC5B;IACE,EAAE,EAAE,KAAK;IACT,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE;QACP,WAAW,EAAE,IAAI;QACjB,WAAW,EAAE,IAAI;QACjB,OAAO,EAAE,EAAE;QACX,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,IAAI;QACX,IAAI,EAAE,IAAI;KACX;IACD,MAAM,EAAE;QACN,OAAO,EAAE;YACP,MAAM,EAAE;gBACN,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,cAAc,EAAE;gBACnE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE;gBACpC,EAAE,MAAM,EAAE,MAAM,EAAE;aACnB;SACF;QACD,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,EAAE,EAAE;QACrD,IAAI,EAAE;YACJ,OAAO,EAAE,SAAS;YAClB,MAAM,EAAE;gBACN,OAAO,EAAE;oBACP,MAAM,EAAE;wBACN,GAAG,EAAE,MAAM;wBACX,MAAM,EAAE;4BACN,MAAM,EAAE,iBAAiB;4BACzB,OAAO,EAAE,sBAAsB;yBAChC;wBACD,OAAO,EAAE;4BACP,MAAM,EAAE,YAAY;4BACpB,OAAO,EAAE,aAAa;yBACvB;qBACF;iBACF;gBACD,MAAM,EAAE;oBACN,MAAM,EAAE;wBACN,GAAG,EAAE,MAAM;wBACX,MAAM,EAAE;4BACN,MAAM,EAAE,iBAAiB;4BACzB,OAAO,EAAE,qBAAqB;yBAC/B;wBACD,OAAO,EAAE;4BACP,MAAM,EAAE,YAAY;4BACpB,OAAO,EAAE,aAAa;yBACvB;qBACF;iBACF;aACF;SACF;QACD,IAAI,EAAE;YACJ,OAAO,EAAE,SAAS;YAClB,EAAE,EAAE;gBACF,OAAO,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE;gBACnD,MAAM,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE;gBAClD,KAAK,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE;aACjD;YACD,MAAM,EAAE;gBACN,OAAO,EAAE;oBACP,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;iBACpE;gBACD,KAAK,EAAE;oBACL,OAAO,EAAE,SAAS;oBAClB,MAAM,EAAE;wBACN,OAAO,EAAE;4BACP,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;yBAC3E;wBACD,OAAO,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE;wBACxB,QAAQ,EAAE,EAAE;qBACb;iBACF;gBACD,KAAK,EAAE;oBACL,EAAE,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE;oBAChC,OAAO,EAAE,SAAS;oBAClB,MAAM,EAAE;wBACN,OAAO,EAAE;4BACP,MAAM,EAAE;gCACN,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE;gCACxC,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE;gCACxC,EAAE,MAAM,EAAE,SAAS,EAAE;6BACtB;yBACF;wBACD,OAAO,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,QAAQ,EAAE;wBACrC,OAAO,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,QAAQ,EAAE;wBACrC,OAAO,EAAE,EAAE;qBACZ;iBACF;aACF;SACF;KACF;IACD,EAAE,EAAE;QACF,QAAQ,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE;KACpD;CACF,EACD;IACE,MAAM,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE;IACxF,OAAO,EAAE;QACP,wBAAwB;QACxB,uBAAuB;QACvB,UAAU;QACV,UAAU;QACV,SAAS;QACT,OAAO;QACP,oBAAoB;QACpB,mBAAmB;QACnB,WAAW;QACX,MAAM;QACN,KAAK;QACL,MAAM;QACN,YAAY;KACb;CACF,CACF,CAAC","sourcesContent":["import {\n CustomerPortalSettingsContext,\n CustomerPortalSettingsLoadErrorEvent,\n CustomerPortalSettingsLoadSuccessEvent,\n CustomerPortalSettingsSetFrequencyModificationEvent,\n CustomerPortalSettingsSetHrefEvent,\n CustomerPortalSettingsSetNextDateModificationEvent,\n CustomerPortalSettingsSetOriginsEvent,\n CustomerPortalSettingsSetSecretEvent,\n CustomerPortalSettingsSetSessionEvent,\n} from './types';\nimport { Machine, actions } from 'xstate';\n\nimport isEqual from 'lodash-es/isEqual';\nimport random from 'lodash-es/random';\nimport times from 'lodash-es/times';\n\n// #region guards\n\nconst isClean = (ctx: CustomerPortalSettingsContext): boolean => {\n return isEqual(ctx.newResource, ctx.oldResource);\n};\n\nconst isLoaded = (ctx: CustomerPortalSettingsContext): boolean => {\n return ctx.store !== null;\n};\n\nconst isInvalid = (ctx: CustomerPortalSettingsContext): boolean => {\n return ctx.invalid.length > 0;\n};\n\nconst isEnabled = (ctx: CustomerPortalSettingsContext): boolean => {\n return ctx.oldResource !== null;\n};\n\nconst isCreated = (ctx: CustomerPortalSettingsContext): boolean => {\n return ctx.oldResource === null && ctx.newResource !== null;\n};\n\nconst isDeleted = (ctx: CustomerPortalSettingsContext): boolean => {\n return ctx.oldResource !== null && ctx.newResource === null;\n};\n\nconst isSetupNeeded = (ctx: CustomerPortalSettingsContext): boolean => {\n return ctx.href === null;\n};\n\n// #endregion guards\n\n// #region actions\n\nconst handleError = actions.assign<CustomerPortalSettingsContext>({\n error: (_, evt) => (evt as CustomerPortalSettingsLoadErrorEvent).data.type,\n});\n\nconst handleLoadingSuccess = actions.assign<CustomerPortalSettingsContext>({\n oldResource: (_, evt) => (evt as CustomerPortalSettingsLoadSuccessEvent).data.resource,\n newResource: (_, evt) => (evt as CustomerPortalSettingsLoadSuccessEvent).data.resource,\n store: (_, evt) => (evt as CustomerPortalSettingsLoadSuccessEvent).data.store,\n});\n\nconst handleSavingSuccess = actions.assign<CustomerPortalSettingsContext>({\n oldResource: ctx => ctx.newResource,\n});\n\nconst reset = actions.assign<CustomerPortalSettingsContext>({\n invalid: [],\n newResource: ({ oldResource }) => oldResource,\n});\n\nconst create = actions.assign<CustomerPortalSettingsContext>({\n invalid: [],\n newResource: ctx => ({\n allowedOrigins: [],\n subscriptions: { allowFrequencyModification: [], allowNextDateModification: false },\n jwtSharedSecret: times(72, () => random(35).toString(36)).join(''),\n sessionLifespanInMinutes: 40320,\n sso: false,\n date_created: new Date().toISOString(),\n date_modified: new Date().toISOString(),\n _links: {\n 'fx:store': ctx.store!._links.self,\n 'curies': ctx.store!._links.curies,\n 'self': ctx.store!._links['fx:customer_portal_settings'],\n },\n }),\n});\n\nconst remove = actions.assign<CustomerPortalSettingsContext>({\n newResource: null,\n});\n\nconst requireSetup = actions.assign<CustomerPortalSettingsContext>({\n error: 'setup_needed',\n});\n\nconst setOrigins = actions.assign<CustomerPortalSettingsContext>({\n newResource: ({ newResource }, evt) => {\n const allowedOrigins = (evt as CustomerPortalSettingsSetOriginsEvent).value;\n return { ...newResource!, allowedOrigins };\n },\n});\n\nconst setFrequencyModification = actions.assign<CustomerPortalSettingsContext>({\n newResource: ({ newResource }, evt) => {\n const typedEvt = evt as CustomerPortalSettingsSetFrequencyModificationEvent;\n const allowFrequencyModification = typedEvt.value;\n return {\n ...newResource!,\n subscriptions: { ...newResource!.subscriptions, allowFrequencyModification },\n };\n },\n});\n\nconst setNextDateModification = actions.assign<CustomerPortalSettingsContext>({\n newResource: ({ newResource }, evt) => {\n const typedEvt = evt as CustomerPortalSettingsSetNextDateModificationEvent;\n const allowNextDateModification = typedEvt.value;\n return {\n ...newResource!,\n subscriptions: { ...newResource!.subscriptions, allowNextDateModification },\n };\n },\n});\n\nconst setSession = actions.assign<CustomerPortalSettingsContext>({\n invalid: (ctx, evt) => {\n const key = 'sessionLifespanInMinutes';\n const invalid = (evt as CustomerPortalSettingsSetSecretEvent).invalid;\n return ctx.invalid.filter(v => v !== key).concat(...(invalid ? ([key] as const) : []));\n },\n newResource: ({ newResource }, evt) => {\n const sessionLifespanInMinutes = (evt as CustomerPortalSettingsSetSessionEvent).value;\n return { ...newResource!, sessionLifespanInMinutes };\n },\n});\n\nconst setSecret = actions.assign<CustomerPortalSettingsContext>({\n invalid: (ctx, evt) => {\n const key = 'jwtSharedSecret';\n const invalid = (evt as CustomerPortalSettingsSetSecretEvent).invalid;\n return ctx.invalid.filter(v => v !== key).concat(...(invalid ? ([key] as const) : []));\n },\n newResource: ({ newResource }, evt) => {\n const jwtSharedSecret = (evt as CustomerPortalSettingsSetSecretEvent).value;\n return { ...newResource!, jwtSharedSecret };\n },\n});\n\nconst setHref = actions.assign<CustomerPortalSettingsContext>({\n oldResource: null,\n newResource: null,\n store: null,\n error: null,\n href: (_, evt) => (evt as CustomerPortalSettingsSetHrefEvent).data,\n});\n\n// #endregion actions\n\nconst setters = {\n SET_SECRET: { target: '#cps.idle', actions: 'setSecret' },\n SET_ORIGINS: { target: '#cps.idle', actions: 'setOrigins' },\n SET_SESSION: { target: '#cps.idle', actions: 'setSession' },\n SET_FREQUENCY_MODIFICATION: {\n target: '#cps.idle',\n actions: 'setFrequencyModification',\n },\n SET_NEXT_DATE_MODIFICATION: {\n target: '#cps.idle',\n actions: 'setNextDateModification',\n },\n};\n\nconst validity = {\n initial: 'unknown',\n states: {\n unknown: {\n always: [{ target: 'invalid', cond: 'isInvalid' }, { target: 'valid' }],\n },\n invalid: {},\n valid: {},\n },\n};\n\nexport const machine = Machine<CustomerPortalSettingsContext>(\n {\n id: 'cps',\n initial: 'unknown',\n context: {\n oldResource: null,\n newResource: null,\n invalid: [],\n store: null,\n error: null,\n href: null,\n },\n states: {\n unknown: {\n always: [\n { target: 'error', cond: 'isSetupNeeded', actions: 'requireSetup' },\n { target: 'idle', cond: 'isLoaded' },\n { target: 'busy' },\n ],\n },\n error: { on: { RELOAD: { target: 'busy.loading' } } },\n busy: {\n initial: 'loading',\n states: {\n loading: {\n invoke: {\n src: 'load',\n onDone: {\n target: '#cps.idle.clean',\n actions: 'handleLoadingSuccess',\n },\n onError: {\n target: '#cps.error',\n actions: 'handleError',\n },\n },\n },\n saving: {\n invoke: {\n src: 'save',\n onDone: {\n target: '#cps.idle.clean',\n actions: 'handleSavingSuccess',\n },\n onError: {\n target: '#cps.error',\n actions: 'handleError',\n },\n },\n },\n },\n },\n idle: {\n initial: 'unknown',\n on: {\n DISABLE: { target: '#cps.idle', actions: 'remove' },\n ENABLE: { target: '#cps.idle', actions: 'create' },\n RESET: { target: '#cps.idle', actions: 'reset' },\n },\n states: {\n unknown: {\n always: [{ target: 'clean', cond: 'isClean' }, { target: 'dirty' }],\n },\n clean: {\n initial: 'unknown',\n states: {\n unknown: {\n always: [{ target: 'enabled', cond: 'isEnabled' }, { target: 'disabled' }],\n },\n enabled: { on: setters },\n disabled: {},\n },\n },\n dirty: {\n on: { SAVE: '#cps.busy.saving' },\n initial: 'unknown',\n states: {\n unknown: {\n always: [\n { target: 'created', cond: 'isCreated' },\n { target: 'deleted', cond: 'isDeleted' },\n { target: 'updated' },\n ],\n },\n created: { on: setters, ...validity },\n updated: { on: setters, ...validity },\n deleted: {},\n },\n },\n },\n },\n },\n on: {\n SET_HREF: { actions: 'setHref', target: 'unknown' },\n },\n },\n {\n guards: { isClean, isLoaded, isInvalid, isEnabled, isCreated, isDeleted, isSetupNeeded },\n actions: {\n setFrequencyModification,\n setNextDateModification,\n setOrigins,\n setSession,\n setSecret,\n setHref,\n handleLoadingSuccess,\n handleSavingSuccess,\n handleError,\n create,\n reset,\n remove,\n requireSetup,\n },\n }\n);\n"]}
|
|
1
|
+
{"version":3,"file":"machine.js","sourceRoot":"","sources":["../../../../src/elements/public/CustomerPortalSettings/machine.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n CustomerPortalSettingsContext,\n CustomerPortalSettingsLoadErrorEvent,\n CustomerPortalSettingsLoadSuccessEvent,\n CustomerPortalSettingsSetFrequencyModificationEvent,\n CustomerPortalSettingsSetHrefEvent,\n CustomerPortalSettingsSetNextDateModificationEvent,\n CustomerPortalSettingsSetOriginsEvent,\n CustomerPortalSettingsSetSSOEvent,\n CustomerPortalSettingsSetSecretEvent,\n CustomerPortalSettingsSetSessionEvent,\n} from './types';\nimport { Machine, actions } from 'xstate';\n\nimport isEqual from 'lodash-es/isEqual';\nimport random from 'lodash-es/random';\nimport times from 'lodash-es/times';\n\n// #region guards\n\nconst isClean = (ctx: CustomerPortalSettingsContext): boolean => {\n return isEqual(ctx.newResource, ctx.oldResource);\n};\n\nconst isLoaded = (ctx: CustomerPortalSettingsContext): boolean => {\n return ctx.store !== null;\n};\n\nconst isInvalid = (ctx: CustomerPortalSettingsContext): boolean => {\n return ctx.invalid.length > 0;\n};\n\nconst isEnabled = (ctx: CustomerPortalSettingsContext): boolean => {\n return ctx.oldResource !== null;\n};\n\nconst isCreated = (ctx: CustomerPortalSettingsContext): boolean => {\n return ctx.oldResource === null && ctx.newResource !== null;\n};\n\nconst isDeleted = (ctx: CustomerPortalSettingsContext): boolean => {\n return ctx.oldResource !== null && ctx.newResource === null;\n};\n\nconst isSetupNeeded = (ctx: CustomerPortalSettingsContext): boolean => {\n return ctx.href === null;\n};\n\n// #endregion guards\n\n// #region actions\n\nconst handleError = actions.assign<CustomerPortalSettingsContext>({\n error: (_, evt) => (evt as CustomerPortalSettingsLoadErrorEvent).data.type,\n});\n\nconst handleLoadingSuccess = actions.assign<CustomerPortalSettingsContext>({\n oldResource: (_, evt) => (evt as CustomerPortalSettingsLoadSuccessEvent).data.resource,\n newResource: (_, evt) => (evt as CustomerPortalSettingsLoadSuccessEvent).data.resource,\n store: (_, evt) => (evt as CustomerPortalSettingsLoadSuccessEvent).data.store,\n});\n\nconst handleSavingSuccess = actions.assign<CustomerPortalSettingsContext>({\n oldResource: ctx => ctx.newResource,\n});\n\nconst reset = actions.assign<CustomerPortalSettingsContext>({\n invalid: [],\n newResource: ({ oldResource }) => oldResource,\n});\n\nconst create = actions.assign<CustomerPortalSettingsContext>({\n invalid: [],\n newResource: ctx => ({\n allowedOrigins: [],\n subscriptions: { allowFrequencyModification: [], allowNextDateModification: false },\n jwtSharedSecret: times(72, () => random(35).toString(36)).join(''),\n sessionLifespanInMinutes: 40320,\n sso: false,\n date_created: new Date().toISOString(),\n date_modified: new Date().toISOString(),\n _links: {\n 'fx:store': ctx.store!._links.self,\n 'curies': ctx.store!._links.curies,\n 'self': ctx.store!._links['fx:customer_portal_settings'],\n },\n }),\n});\n\nconst remove = actions.assign<CustomerPortalSettingsContext>({\n newResource: null,\n});\n\nconst requireSetup = actions.assign<CustomerPortalSettingsContext>({\n error: 'setup_needed',\n});\n\nconst setOrigins = actions.assign<CustomerPortalSettingsContext>({\n newResource: ({ newResource }, evt) => {\n const allowedOrigins = (evt as CustomerPortalSettingsSetOriginsEvent).value;\n return { ...newResource!, allowedOrigins };\n },\n});\n\nconst setFrequencyModification = actions.assign<CustomerPortalSettingsContext>({\n newResource: ({ newResource }, evt) => {\n const typedEvt = evt as CustomerPortalSettingsSetFrequencyModificationEvent;\n const allowFrequencyModification = typedEvt.value;\n return {\n ...newResource!,\n subscriptions: { ...newResource!.subscriptions, allowFrequencyModification },\n };\n },\n});\n\nconst setNextDateModification = actions.assign<CustomerPortalSettingsContext>({\n newResource: ({ newResource }, evt) => {\n const typedEvt = evt as CustomerPortalSettingsSetNextDateModificationEvent;\n const allowNextDateModification = typedEvt.value;\n return {\n ...newResource!,\n subscriptions: { ...newResource!.subscriptions, allowNextDateModification },\n };\n },\n});\n\nconst setSession = actions.assign<CustomerPortalSettingsContext>({\n invalid: (ctx, evt) => {\n const key = 'sessionLifespanInMinutes';\n const invalid = (evt as CustomerPortalSettingsSetSecretEvent).invalid;\n return ctx.invalid.filter(v => v !== key).concat(...(invalid ? ([key] as const) : []));\n },\n newResource: ({ newResource }, evt) => {\n const sessionLifespanInMinutes = (evt as CustomerPortalSettingsSetSessionEvent).value;\n return { ...newResource!, sessionLifespanInMinutes };\n },\n});\n\nconst setSecret = actions.assign<CustomerPortalSettingsContext>({\n invalid: (ctx, evt) => {\n const key = 'jwtSharedSecret';\n const invalid = (evt as CustomerPortalSettingsSetSecretEvent).invalid;\n return ctx.invalid.filter(v => v !== key).concat(...(invalid ? ([key] as const) : []));\n },\n newResource: ({ newResource }, evt) => {\n const jwtSharedSecret = (evt as CustomerPortalSettingsSetSecretEvent).value;\n return { ...newResource!, jwtSharedSecret };\n },\n});\n\nconst setHref = actions.assign<CustomerPortalSettingsContext>({\n oldResource: null,\n newResource: null,\n store: null,\n error: null,\n href: (_, evt) => (evt as CustomerPortalSettingsSetHrefEvent).data,\n});\n\nconst setSSO = actions.assign<CustomerPortalSettingsContext>({\n newResource: ({ newResource }, evt) => {\n const sso = (evt as CustomerPortalSettingsSetSSOEvent).value;\n return { ...newResource!, sso };\n },\n});\n\n// #endregion actions\n\nconst setters = {\n SET_SSO: { target: '#cps.idle', actions: 'setSSO' },\n SET_SECRET: { target: '#cps.idle', actions: 'setSecret' },\n SET_ORIGINS: { target: '#cps.idle', actions: 'setOrigins' },\n SET_SESSION: { target: '#cps.idle', actions: 'setSession' },\n SET_FREQUENCY_MODIFICATION: {\n target: '#cps.idle',\n actions: 'setFrequencyModification',\n },\n SET_NEXT_DATE_MODIFICATION: {\n target: '#cps.idle',\n actions: 'setNextDateModification',\n },\n};\n\nconst validity = {\n initial: 'unknown',\n states: {\n unknown: {\n always: [{ target: 'invalid', cond: 'isInvalid' }, { target: 'valid' }],\n },\n invalid: {},\n valid: {},\n },\n};\n\nexport const machine = Machine<CustomerPortalSettingsContext>(\n {\n id: 'cps',\n initial: 'unknown',\n context: {\n oldResource: null,\n newResource: null,\n invalid: [],\n store: null,\n error: null,\n href: null,\n },\n states: {\n unknown: {\n always: [\n { target: 'error', cond: 'isSetupNeeded', actions: 'requireSetup' },\n { target: 'idle', cond: 'isLoaded' },\n { target: 'busy' },\n ],\n },\n error: { on: { RELOAD: { target: 'busy.loading' } } },\n busy: {\n initial: 'loading',\n states: {\n loading: {\n invoke: {\n src: 'load',\n onDone: {\n target: '#cps.idle.clean',\n actions: 'handleLoadingSuccess',\n },\n onError: {\n target: '#cps.error',\n actions: 'handleError',\n },\n },\n },\n saving: {\n invoke: {\n src: 'save',\n onDone: {\n target: '#cps.idle.clean',\n actions: 'handleSavingSuccess',\n },\n onError: {\n target: '#cps.error',\n actions: 'handleError',\n },\n },\n },\n },\n },\n idle: {\n initial: 'unknown',\n on: {\n DISABLE: { target: '#cps.idle', actions: 'remove' },\n ENABLE: { target: '#cps.idle', actions: 'create' },\n RESET: { target: '#cps.idle', actions: 'reset' },\n },\n states: {\n unknown: {\n always: [{ target: 'clean', cond: 'isClean' }, { target: 'dirty' }],\n },\n clean: {\n initial: 'unknown',\n states: {\n unknown: {\n always: [{ target: 'enabled', cond: 'isEnabled' }, { target: 'disabled' }],\n },\n enabled: { on: setters },\n disabled: {},\n },\n },\n dirty: {\n on: { SAVE: '#cps.busy.saving' },\n initial: 'unknown',\n states: {\n unknown: {\n always: [\n { target: 'created', cond: 'isCreated' },\n { target: 'deleted', cond: 'isDeleted' },\n { target: 'updated' },\n ],\n },\n created: { on: setters, ...validity },\n updated: { on: setters, ...validity },\n deleted: {},\n },\n },\n },\n },\n },\n on: {\n SET_HREF: { actions: 'setHref', target: 'unknown' },\n },\n },\n {\n guards: { isClean, isLoaded, isInvalid, isEnabled, isCreated, isDeleted, isSetupNeeded },\n actions: {\n setFrequencyModification,\n setNextDateModification,\n setOrigins,\n setSession,\n setSecret,\n setHref,\n setSSO,\n handleLoadingSuccess,\n handleSavingSuccess,\n handleError,\n create,\n reset,\n remove,\n requireSetup,\n },\n }\n);\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { PropertyDeclarations, TemplateResult } from 'lit-element';
|
|
2
|
+
import { ScopedElementsMap } from '@open-wc/scoped-elements';
|
|
3
|
+
import { Translatable } from '../../../../../mixins/translatable';
|
|
4
|
+
export declare class SSOSwitch extends Translatable {
|
|
5
|
+
static get scopedElements(): ScopedElementsMap;
|
|
6
|
+
static get properties(): PropertyDeclarations;
|
|
7
|
+
disabled: boolean;
|
|
8
|
+
value: boolean;
|
|
9
|
+
constructor();
|
|
10
|
+
render(): TemplateResult;
|
|
11
|
+
private __toggleValue;
|
|
12
|
+
private __sendChange;
|
|
13
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { I18N, Section } from "../../../../private/index.js";
|
|
2
|
+
import { html } from 'lit-element';
|
|
3
|
+
import { SSOSwitchChangeEvent } from "./SSOSwitchChangeEvent.js";
|
|
4
|
+
import { Switch } from "../../../../private/Switch/Switch.js";
|
|
5
|
+
import { Translatable } from "../../../../../mixins/translatable.js";
|
|
6
|
+
export class SSOSwitch extends Translatable {
|
|
7
|
+
constructor() {
|
|
8
|
+
super('customer-portal-settings');
|
|
9
|
+
this.disabled = false;
|
|
10
|
+
this.value = false;
|
|
11
|
+
}
|
|
12
|
+
static get scopedElements() {
|
|
13
|
+
return {
|
|
14
|
+
'x-section': Section,
|
|
15
|
+
'x-switch': Switch,
|
|
16
|
+
'x-i18n': I18N,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
static get properties() {
|
|
20
|
+
return {
|
|
21
|
+
...super.properties,
|
|
22
|
+
disabled: { type: Boolean },
|
|
23
|
+
value: { type: Array },
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
render() {
|
|
27
|
+
return html `
|
|
28
|
+
<x-section>
|
|
29
|
+
<x-switch
|
|
30
|
+
slot="title"
|
|
31
|
+
class="-my-xs"
|
|
32
|
+
data-testid="toggle"
|
|
33
|
+
.checked=${Boolean(this.value)}
|
|
34
|
+
.disabled=${this.disabled || !this._isI18nReady}
|
|
35
|
+
@change=${this.__toggleValue}
|
|
36
|
+
>
|
|
37
|
+
<x-i18n .ns=${this.ns} .lang=${this.lang} key="sso.title" class="text-l"></x-i18n>
|
|
38
|
+
</x-switch>
|
|
39
|
+
|
|
40
|
+
<x-i18n .ns=${this.ns} .lang=${this.lang} key="sso.subtitle" slot="subtitle" class="mr-xl">
|
|
41
|
+
</x-i18n>
|
|
42
|
+
</x-section>
|
|
43
|
+
`;
|
|
44
|
+
}
|
|
45
|
+
__toggleValue() {
|
|
46
|
+
this.value = !this.value;
|
|
47
|
+
this.__sendChange();
|
|
48
|
+
}
|
|
49
|
+
__sendChange() {
|
|
50
|
+
this.dispatchEvent(new SSOSwitchChangeEvent(this.value));
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=SSOSwitch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SSOSwitch.js","sourceRoot":"","sources":["../../../../../../src/elements/public/CustomerPortalSettings/private/SSOSwitch/SSOSwitch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,qCAAkC;AAC1D,OAAO,EAAwC,IAAI,EAAE,MAAM,aAAa,CAAC;AAEzE,OAAO,EAAE,oBAAoB,EAAE,kCAA+B;AAE9D,OAAO,EAAE,MAAM,EAAE,6CAA0C;AAC3D,OAAO,EAAE,YAAY,EAAE,8CAA2C;AAElE,MAAM,OAAO,SAAU,SAAQ,YAAY;IAqBzC;QACE,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAL7B,aAAQ,GAAG,KAAK,CAAC;QAEjB,UAAK,GAAG,KAAK,CAAC;IAIrB,CAAC;IAtBM,MAAM,KAAK,cAAc;QAC9B,OAAO;YACL,WAAW,EAAE,OAAO;YACpB,UAAU,EAAE,MAAM;YAClB,QAAQ,EAAE,IAAI;SACf,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,UAAU;QACnB,OAAO;YACL,GAAG,KAAK,CAAC,UAAU;YACnB,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;YAC3B,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;SACvB,CAAC;IACJ,CAAC;IAUM,MAAM;QACX,OAAO,IAAI,CAAA;;;;;;qBAMM,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;sBAClB,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,YAAY;oBACrC,IAAI,CAAC,aAAa;;wBAEd,IAAI,CAAC,EAAE,UAAU,IAAI,CAAC,IAAI;;;sBAG5B,IAAI,CAAC,EAAE,UAAU,IAAI,CAAC,IAAI;;;KAG3C,CAAC;IACJ,CAAC;IAEO,aAAa;QACnB,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;QACzB,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAEO,YAAY;QAClB,IAAI,CAAC,aAAa,CAAC,IAAI,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3D,CAAC;CACF","sourcesContent":["import { I18N, Section } from '../../../../private/index';\nimport { PropertyDeclarations, TemplateResult, html } from 'lit-element';\n\nimport { SSOSwitchChangeEvent } from './SSOSwitchChangeEvent';\nimport { ScopedElementsMap } from '@open-wc/scoped-elements';\nimport { Switch } from '../../../../private/Switch/Switch';\nimport { Translatable } from '../../../../../mixins/translatable';\n\nexport class SSOSwitch extends Translatable {\n public static get scopedElements(): ScopedElementsMap {\n return {\n 'x-section': Section,\n 'x-switch': Switch,\n 'x-i18n': I18N,\n };\n }\n\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n disabled: { type: Boolean },\n value: { type: Array },\n };\n }\n\n public disabled = false;\n\n public value = false;\n\n public constructor() {\n super('customer-portal-settings');\n }\n\n public render(): TemplateResult {\n return html`\n <x-section>\n <x-switch\n slot=\"title\"\n class=\"-my-xs\"\n data-testid=\"toggle\"\n .checked=${Boolean(this.value)}\n .disabled=${this.disabled || !this._isI18nReady}\n @change=${this.__toggleValue}\n >\n <x-i18n .ns=${this.ns} .lang=${this.lang} key=\"sso.title\" class=\"text-l\"></x-i18n>\n </x-switch>\n\n <x-i18n .ns=${this.ns} .lang=${this.lang} key=\"sso.subtitle\" slot=\"subtitle\" class=\"mr-xl\">\n </x-i18n>\n </x-section>\n `;\n }\n\n private __toggleValue() {\n this.value = !this.value;\n this.__sendChange();\n }\n\n private __sendChange() {\n this.dispatchEvent(new SSOSwitchChangeEvent(this.value));\n }\n}\n"]}
|
package/dist/elements/public/CustomerPortalSettings/private/SSOSwitch/SSOSwitchChangeEvent.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SSOSwitchChangeEvent.js","sourceRoot":"","sources":["../../../../../../src/elements/public/CustomerPortalSettings/private/SSOSwitch/SSOSwitchChangeEvent.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,oBAAqB,SAAQ,WAAoB;IAC5D,YAAY,KAAc;QACxB,KAAK,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IACrC,CAAC;CACF","sourcesContent":["export class SSOSwitchChangeEvent extends CustomEvent<boolean> {\n constructor(value: boolean) {\n super('change', { detail: value });\n }\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { FxCustomerPortalSettings, FxStore } from '../../../types/hapi';
|
|
2
1
|
import { ErrorType, FriendlyError } from '../../private/ErrorScreen/ErrorScreen';
|
|
2
|
+
import { FxCustomerPortalSettings, FxStore } from '../../../types/hapi';
|
|
3
3
|
export interface CustomerPortalSettingsContext {
|
|
4
4
|
oldResource: FxCustomerPortalSettings | null;
|
|
5
5
|
newResource: FxCustomerPortalSettings | null;
|
|
@@ -26,6 +26,10 @@ export interface CustomerPortalSettingsSetHrefEvent {
|
|
|
26
26
|
type: 'SET_HREF';
|
|
27
27
|
data: string | null;
|
|
28
28
|
}
|
|
29
|
+
export interface CustomerPortalSettingsSetSSOEvent {
|
|
30
|
+
type: 'SET_SSO';
|
|
31
|
+
value: boolean;
|
|
32
|
+
}
|
|
29
33
|
export interface CustomerPortalSettingsSaveEvent {
|
|
30
34
|
type: 'SAVE';
|
|
31
35
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/elements/public/CustomerPortalSettings/types.ts"],"names":[],"mappings":"","sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/elements/public/CustomerPortalSettings/types.ts"],"names":[],"mappings":"","sourcesContent":["import { ErrorType, FriendlyError } from '../../private/ErrorScreen/ErrorScreen';\nimport { FxCustomerPortalSettings, FxStore } from '../../../types/hapi';\n\nexport interface CustomerPortalSettingsContext {\n oldResource: FxCustomerPortalSettings | null;\n newResource: FxCustomerPortalSettings | null;\n invalid: ('sessionLifespanInMinutes' | 'jwtSharedSecret')[];\n store: FxStore | null;\n error: ErrorType | null;\n href: string | null;\n}\n\nexport interface CustomerPortalSettingsLoadSuccessEvent {\n type: 'done.invoke.load';\n data: {\n resource: FxCustomerPortalSettings | null;\n store: FxStore;\n };\n}\n\nexport interface CustomerPortalSettingsLoadErrorEvent {\n type: 'error.execution';\n data: FriendlyError;\n}\n\nexport interface CustomerPortalSettingsResetEvent {\n type: 'RESET';\n}\n\nexport interface CustomerPortalSettingsSetHrefEvent {\n type: 'SET_HREF';\n data: string | null;\n}\n\nexport interface CustomerPortalSettingsSetSSOEvent {\n type: 'SET_SSO';\n value: boolean;\n}\n\nexport interface CustomerPortalSettingsSaveEvent {\n type: 'SAVE';\n}\n\nexport interface CustomerPortalSettingsSetOriginsEvent {\n type: 'SET_ORIGINS';\n value: string[];\n}\n\nexport interface CustomerPortalSettingsSetFrequencyModificationEvent {\n type: 'SET_FREQUENCY_MODIFICATION';\n value: FxCustomerPortalSettings['subscriptions']['allowFrequencyModification'];\n}\n\nexport interface CustomerPortalSettingsSetNextDateModificationEvent {\n type: 'SET_NEXT_DATE_MODIFICATION';\n value: FxCustomerPortalSettings['subscriptions']['allowNextDateModification'];\n}\n\nexport interface CustomerPortalSettingsSetSecretEvent {\n type: 'SET_SECRET';\n value: string;\n invalid: boolean;\n}\n\nexport interface CustomerPortalSettingsSetSessionEvent {\n type: 'SET_SESSION';\n value: number;\n invalid: boolean;\n}\n"]}
|
|
@@ -5,7 +5,7 @@ import { API } from "./API.js";
|
|
|
5
5
|
import { FetchEvent } from "./FetchEvent.js";
|
|
6
6
|
import { UpdateEvent } from "./UpdateEvent.js";
|
|
7
7
|
import memoize from 'lodash-es/memoize';
|
|
8
|
-
import
|
|
8
|
+
import { serveFromCache } from "./serveFromCache.js";
|
|
9
9
|
/**
|
|
10
10
|
* Base class for custom elements working with remote HAL+JSON resources.
|
|
11
11
|
*
|
|
@@ -296,16 +296,11 @@ export class NucleonElement extends LitElement {
|
|
|
296
296
|
return;
|
|
297
297
|
if (event.request.method !== 'GET')
|
|
298
298
|
return;
|
|
299
|
-
const
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
const body = JSON.stringify(this.node);
|
|
305
|
-
event.respondWith(Promise.resolve(new Response(body)));
|
|
306
|
-
this.stop();
|
|
307
|
-
}
|
|
308
|
-
});
|
|
299
|
+
const cacheResponse = serveFromCache(event.request.url, this.data);
|
|
300
|
+
if (!cacheResponse.ok)
|
|
301
|
+
return;
|
|
302
|
+
event.respondWith(Promise.resolve(cacheResponse));
|
|
303
|
+
console.debug(`%c@foxy.io/elements::${this.localName}\n%c200%c GET ${event.request.url}`, 'color: gray', `background: gray; padding: 0 .2em; border-radius: .2em; color: white;`, '');
|
|
309
304
|
}
|
|
310
305
|
}
|
|
311
306
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NucleonElement.js","sourceRoot":"","sources":["../../../../src/elements/public/NucleonElement/NucleonElement.ts"],"names":[],"mappings":"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","sourcesContent":["import { ComputedElementProperties, HALJSONResource, NucleonMachine, NucleonV8N } from './types';\nimport { LitElement, PropertyDeclarations } from 'lit-element';\nimport { Nucleon, Rumour } from '@foxy.io/sdk/core';\nimport { assign, interpret } from 'xstate';\n\nimport { API } from './API';\nimport { FetchEvent } from './FetchEvent';\nimport { UpdateEvent } from './UpdateEvent';\nimport memoize from 'lodash-es/memoize';\nimport traverse from 'traverse';\n\n/**\n * Base class for custom elements working with remote HAL+JSON resources.\n *\n * @fires NucleonElement#update - Instance of `NucleonElement.UpdateEvent`. Dispatched on an element whenever it changes its state.\n * @fires NucleonElement#fetch - Instance of `NucleonElement.API.FetchEvent`. Emitted before each API request.\n *\n * @element foxy-nucleon\n * @since 1.1.0\n */\nexport class NucleonElement<TData extends HALJSONResource> extends LitElement {\n /**\n * Instances of this event are dispatched on an element whenever it changes its\n * state (e.g. when going from `busy` to `idle` or on `form` data change).\n * This event isn't cancelable, and it does not bubble.\n * @readonly\n */\n static readonly UpdateEvent = UpdateEvent;\n\n /**\n * Creates a tagged [Rumour](https://sdk.foxy.dev/classes/_core_index_.rumour.html)\n * instance if it doesn't exist or returns cached one otherwise. NucleonElements\n * use empty Rumour group by default.\n * @readonly\n */\n static readonly Rumour = memoize<(group: string) => Rumour>(() => new Rumour());\n\n /**\n * Universal [API](https://sdk.foxy.dev/classes/_core_index_.api.html) client\n * that dispatches cancellable `FetchEvent` on an element before each request.\n * @readonly\n */\n static readonly API = API;\n\n /** @readonly */\n static get properties(): PropertyDeclarations {\n return {\n parent: { type: String },\n group: { type: String, noAccessor: true },\n href: { type: String, noAccessor: true },\n lang: { type: String },\n };\n }\n\n /**\n * Array of validation functions. Each function accepts `element.form` and must return\n * either an error code string if form data fails the check or `true` otherwise.\n * Error codes are collected in `element.errors`. Empty by default.\n */\n static get v8n(): NucleonV8N<any> {\n return [];\n }\n\n /**\n * Optional ISO 639-1 code describing the language element content is written in.\n * Changing the `lang` attribute will update the value of this property.\n */\n lang = '';\n\n /**\n * Optional URL of the collection this element's resource belongs to.\n * Changing the `parent` attribute will update the value of this property.\n */\n parent = '';\n\n private __href = '';\n\n private __group = '';\n\n private __unsubscribeFromRumour!: () => void;\n\n private __fetchEventHandler!: (evt: Event) => void;\n\n private readonly __service = interpret(\n (Nucleon.machine as NucleonMachine<TData>).withConfig({\n services: {\n sendDelete: () => this._sendDelete(),\n sendPatch: ({ edits }) => this._sendPatch(edits!),\n sendPost: ({ edits }) => this._sendPost(edits!),\n sendGet: () => this._sendGet(),\n },\n\n actions: {\n validate: assign<Nucleon.Context<TData, string>, Nucleon.Event<TData>>({\n errors: context => {\n const rules = (this.constructor as typeof NucleonElement).v8n;\n const form = { ...context.data, ...context.edits };\n\n return rules\n .map(validate => validate(form))\n .filter(v8nResult => typeof v8nResult === 'string')\n .filter((err, errIndex, errs) => errs.indexOf(err) === errIndex) as string[];\n },\n }),\n },\n })\n );\n\n /**\n * If network request returns non-2XX code, the entire error response\n * will be available via this getter.\n *\n * This property is readonly. Changing failure records via this property is\n * not guaranteed to work. NucleonElement does not provide a way to override error status.\n *\n * @since 1.4.0\n */\n get failure(): Response | null {\n return this.__service.state.context.failure;\n }\n\n /**\n * Array of validation errors returned from `NucleonElement.v8n` checks.\n *\n * This property is readonly. Adding or removing error codes via this property is\n * not guaranteed to work. NucleonElement does not provide a way to override validity status.\n */\n get errors(): string[] {\n return this.__service.state.context.errors;\n }\n\n /**\n * Resource snapshot with edits applied. Empty object if unavailable.\n *\n * This property and its value are readonly. Assignments like `element.data.foo = 'bar'`\n * are not guaranteed to work. Please use `element.edit({ foo: 'bar' })` instead.\n * If you need to replace the entire data object, consider using `element.data`.\n */\n get form(): Partial<TData> {\n const { data, edits } = this.__service.state.context;\n return { ...data, ...edits } as Partial<TData>;\n }\n\n /**\n * Resource snapshot as-is, no edits applied. Null if unavailable.\n *\n * Returned value is not reactive. Assignments like `element.data.foo = 'bar'`\n * are not guaranteed to work. Please set the property instead: `element.data = { ...element.data, foo: 'bar' }`.\n * If you're processing user input, consider using `element.form` and `element.edit()` instead.\n */\n get data(): TData | null {\n return this.__service.state.context.data;\n }\n\n set data(data: TData | null) {\n this.__service.send({ type: 'SET_DATA', data });\n this.__href = data?._links.self.href ?? '';\n }\n\n /**\n * Rumour group. Elements in different groups will not share updates. Empty by default.\n * @example element.group = 'my-group'\n */\n get group(): string {\n return this.__group;\n }\n\n set group(value: string) {\n this.__group = value;\n this.__destroyRumour();\n this.__createRumour();\n }\n\n /**\n * Optional URL of the resource to load. Switches element to `idle.template` state if empty (default).\n * @example element.href = 'https://demo.foxycart.com/s/customer/attributes/0'\n */\n get href(): string {\n return this.__href;\n }\n\n set href(value: string) {\n this.__href = value;\n\n if (value) {\n this.__service.send({ type: 'FETCH' });\n } else {\n this.__service.send({ type: 'SET_DATA', data: null });\n }\n }\n\n /**\n * Checks if this element is in the given state.\n * @example element.in({ idle: 'snapshot' })\n */\n in<TStateValue extends Nucleon.State<TData, string>['value']>(\n stateValue: TStateValue\n ): this is this & ComputedElementProperties<TData, TStateValue> {\n return this.__service.state.matches(stateValue);\n }\n\n /**\n * Clears all edits and emits the `update` event.\n * @example element.undo()\n */\n undo(): void {\n this.__service.send({ type: 'UNDO' });\n }\n\n /**\n * Applies an edit to the local resource snapshot or its template and emits the `update` event.\n * @example element.edit({ first_name: 'Alex' })\n */\n edit(data: Partial<TData>): void {\n this.__service.send({ type: 'EDIT', data });\n }\n\n /**\n * Submits the form, updating the resource if href isn't empty or creating it otherwise.\n * Emits multiple `update` events as element state changes. Has no effect on invalid forms.\n * @example element.submit()\n */\n submit(): void {\n this.__service.send({ type: 'SUBMIT' });\n }\n\n /**\n * Sends a DELETE request to `element.href` and clears local data on success.\n * Emits multiple update events as element state changes.\n * @example element.delete()\n */\n delete(): void {\n this.__service.send({ type: 'DELETE' });\n }\n\n /** @readonly */\n connectedCallback(): void {\n super.connectedCallback();\n\n this.__createService();\n this.__createRumour();\n this.__createServer();\n }\n\n /** @readonly */\n disconnectedCallback(): void {\n super.disconnectedCallback();\n\n this.__destroyService();\n this.__destroyRumour();\n this.__destroyServer();\n }\n\n /** Sends API request. Throws an error on non-2XX response. */\n protected async _fetch(...args: Parameters<Window['fetch']>): Promise<TData> {\n const response = await new API(this).fetch(...args);\n if (!response.ok) throw response;\n return response.json();\n }\n\n /** POSTs to `element.parent`, shares response with the Rumour group and returns parsed JSON. */\n protected async _sendPost(edits: Partial<TData>): Promise<TData> {\n const body = JSON.stringify(edits);\n const data = await this._fetch(this.parent, { body, method: 'POST' });\n const rumour = NucleonElement.Rumour(this.group);\n\n this.__destroyRumour();\n rumour.share({ data, related: [this.parent], source: data._links.self.href });\n this.__createRumour();\n\n return data;\n }\n\n /** GETs `element.href`, shares response with the Rumour group and returns parsed JSON. */\n protected async _sendGet(): Promise<TData> {\n const data = await this._fetch(this.href);\n const rumour = NucleonElement.Rumour(this.group);\n\n this.__destroyRumour();\n rumour.share({ data, source: this.href });\n this.__createRumour();\n\n return data;\n }\n\n /** PATCHes `element.href`, shares response with the Rumour group and returns parsed JSON. */\n protected async _sendPatch(edits: Partial<TData>): Promise<TData> {\n const body = JSON.stringify(edits);\n const data = await this._fetch(this.href, { body, method: 'PATCH' });\n const rumour = NucleonElement.Rumour(this.group);\n\n this.__destroyRumour();\n rumour.share({ data, source: this.href });\n this.__createRumour();\n\n return data;\n }\n\n /** DELETEs `element.href`, shares response with the Rumour group and returns parsed JSON. */\n protected async _sendDelete(): Promise<TData> {\n const data = await this._fetch(this.href, { method: 'DELETE' });\n const rumour = NucleonElement.Rumour(this.group);\n\n this.__destroyRumour();\n rumour.share({ data: null, source: this.href, related: [this.parent] });\n this.__createRumour();\n\n return data;\n }\n\n private __createService() {\n this.__service.onTransition(state => {\n if (!state.changed) return;\n\n const flags = state.toStrings().reduce((p, c) => [...p, ...c.split('.')], [] as string[]);\n this.setAttribute('state', [...new Set(flags)].join(' '));\n\n this.requestUpdate();\n this.dispatchEvent(new UpdateEvent());\n });\n\n this.__service.onChange(() => {\n this.requestUpdate();\n this.dispatchEvent(new UpdateEvent());\n });\n\n this.__service.start();\n }\n\n private __destroyService() {\n this.__service.stop();\n }\n\n private __createRumour() {\n const rumour = NucleonElement.Rumour(this.group);\n this.__unsubscribeFromRumour = rumour.track(update => this.__handleRumourUpdate(update));\n }\n\n private __destroyRumour() {\n this.__unsubscribeFromRumour?.();\n }\n\n private __createServer() {\n this.__fetchEventHandler = this.__handleFetchEvent.bind(this);\n this.addEventListener('fetch', this.__fetchEventHandler);\n }\n\n private __destroyServer() {\n this.removeEventListener('fetch', this.__fetchEventHandler);\n }\n\n private __handleRumourUpdate(update: (oldData: TData) => TData | null) {\n try {\n const oldData = this.__service.state?.context.data;\n if (!oldData) return;\n\n const newData = update(oldData);\n if (newData !== oldData) this.__service.send({ data: newData, type: 'SET_DATA' });\n } catch (err) {\n if (err instanceof Rumour.UpdateError) {\n this.__service.send({ type: 'FETCH' });\n } else {\n throw err;\n }\n }\n }\n\n private __handleFetchEvent(event: Event) {\n if (!(event instanceof FetchEvent)) return;\n if (event.request.method !== 'GET') return;\n\n const localName = this.localName;\n\n traverse(this.__service.state.context.data).forEach(function () {\n if (this.node?._links?.self?.href === event.request.url) {\n console.debug(\n `%c@foxy.io/elements::${localName}\\n%c200%c GET ${event.request.url}`,\n 'color: gray',\n `background: gray; padding: 0 .2em; border-radius: .2em; color: white;`,\n ''\n );\n\n const body = JSON.stringify(this.node);\n event.respondWith(Promise.resolve(new Response(body)));\n this.stop();\n }\n });\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"NucleonElement.js","sourceRoot":"","sources":["../../../../src/elements/public/NucleonElement/NucleonElement.ts"],"names":[],"mappings":"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","sourcesContent":["import { ComputedElementProperties, HALJSONResource, NucleonMachine, NucleonV8N } from './types';\nimport { LitElement, PropertyDeclarations } from 'lit-element';\nimport { Nucleon, Rumour } from '@foxy.io/sdk/core';\nimport { assign, interpret } from 'xstate';\n\nimport { API } from './API';\nimport { FetchEvent } from './FetchEvent';\nimport { UpdateEvent } from './UpdateEvent';\nimport memoize from 'lodash-es/memoize';\nimport { serveFromCache } from './serveFromCache';\n\n/**\n * Base class for custom elements working with remote HAL+JSON resources.\n *\n * @fires NucleonElement#update - Instance of `NucleonElement.UpdateEvent`. Dispatched on an element whenever it changes its state.\n * @fires NucleonElement#fetch - Instance of `NucleonElement.API.FetchEvent`. Emitted before each API request.\n *\n * @element foxy-nucleon\n * @since 1.1.0\n */\nexport class NucleonElement<TData extends HALJSONResource> extends LitElement {\n /**\n * Instances of this event are dispatched on an element whenever it changes its\n * state (e.g. when going from `busy` to `idle` or on `form` data change).\n * This event isn't cancelable, and it does not bubble.\n * @readonly\n */\n static readonly UpdateEvent = UpdateEvent;\n\n /**\n * Creates a tagged [Rumour](https://sdk.foxy.dev/classes/_core_index_.rumour.html)\n * instance if it doesn't exist or returns cached one otherwise. NucleonElements\n * use empty Rumour group by default.\n * @readonly\n */\n static readonly Rumour = memoize<(group: string) => Rumour>(() => new Rumour());\n\n /**\n * Universal [API](https://sdk.foxy.dev/classes/_core_index_.api.html) client\n * that dispatches cancellable `FetchEvent` on an element before each request.\n * @readonly\n */\n static readonly API = API;\n\n /** @readonly */\n static get properties(): PropertyDeclarations {\n return {\n parent: { type: String },\n group: { type: String, noAccessor: true },\n href: { type: String, noAccessor: true },\n lang: { type: String },\n };\n }\n\n /**\n * Array of validation functions. Each function accepts `element.form` and must return\n * either an error code string if form data fails the check or `true` otherwise.\n * Error codes are collected in `element.errors`. Empty by default.\n */\n static get v8n(): NucleonV8N<any> {\n return [];\n }\n\n /**\n * Optional ISO 639-1 code describing the language element content is written in.\n * Changing the `lang` attribute will update the value of this property.\n */\n lang = '';\n\n /**\n * Optional URL of the collection this element's resource belongs to.\n * Changing the `parent` attribute will update the value of this property.\n */\n parent = '';\n\n private __href = '';\n\n private __group = '';\n\n private __unsubscribeFromRumour!: () => void;\n\n private __fetchEventHandler!: (evt: Event) => void;\n\n private readonly __service = interpret(\n (Nucleon.machine as NucleonMachine<TData>).withConfig({\n services: {\n sendDelete: () => this._sendDelete(),\n sendPatch: ({ edits }) => this._sendPatch(edits!),\n sendPost: ({ edits }) => this._sendPost(edits!),\n sendGet: () => this._sendGet(),\n },\n\n actions: {\n validate: assign<Nucleon.Context<TData, string>, Nucleon.Event<TData>>({\n errors: context => {\n const rules = (this.constructor as typeof NucleonElement).v8n;\n const form = { ...context.data, ...context.edits };\n\n return rules\n .map(validate => validate(form))\n .filter(v8nResult => typeof v8nResult === 'string')\n .filter((err, errIndex, errs) => errs.indexOf(err) === errIndex) as string[];\n },\n }),\n },\n })\n );\n\n /**\n * If network request returns non-2XX code, the entire error response\n * will be available via this getter.\n *\n * This property is readonly. Changing failure records via this property is\n * not guaranteed to work. NucleonElement does not provide a way to override error status.\n *\n * @since 1.4.0\n */\n get failure(): Response | null {\n return this.__service.state.context.failure;\n }\n\n /**\n * Array of validation errors returned from `NucleonElement.v8n` checks.\n *\n * This property is readonly. Adding or removing error codes via this property is\n * not guaranteed to work. NucleonElement does not provide a way to override validity status.\n */\n get errors(): string[] {\n return this.__service.state.context.errors;\n }\n\n /**\n * Resource snapshot with edits applied. Empty object if unavailable.\n *\n * This property and its value are readonly. Assignments like `element.data.foo = 'bar'`\n * are not guaranteed to work. Please use `element.edit({ foo: 'bar' })` instead.\n * If you need to replace the entire data object, consider using `element.data`.\n */\n get form(): Partial<TData> {\n const { data, edits } = this.__service.state.context;\n return { ...data, ...edits } as Partial<TData>;\n }\n\n /**\n * Resource snapshot as-is, no edits applied. Null if unavailable.\n *\n * Returned value is not reactive. Assignments like `element.data.foo = 'bar'`\n * are not guaranteed to work. Please set the property instead: `element.data = { ...element.data, foo: 'bar' }`.\n * If you're processing user input, consider using `element.form` and `element.edit()` instead.\n */\n get data(): TData | null {\n return this.__service.state.context.data;\n }\n\n set data(data: TData | null) {\n this.__service.send({ type: 'SET_DATA', data });\n this.__href = data?._links.self.href ?? '';\n }\n\n /**\n * Rumour group. Elements in different groups will not share updates. Empty by default.\n * @example element.group = 'my-group'\n */\n get group(): string {\n return this.__group;\n }\n\n set group(value: string) {\n this.__group = value;\n this.__destroyRumour();\n this.__createRumour();\n }\n\n /**\n * Optional URL of the resource to load. Switches element to `idle.template` state if empty (default).\n * @example element.href = 'https://demo.foxycart.com/s/customer/attributes/0'\n */\n get href(): string {\n return this.__href;\n }\n\n set href(value: string) {\n this.__href = value;\n\n if (value) {\n this.__service.send({ type: 'FETCH' });\n } else {\n this.__service.send({ type: 'SET_DATA', data: null });\n }\n }\n\n /**\n * Checks if this element is in the given state.\n * @example element.in({ idle: 'snapshot' })\n */\n in<TStateValue extends Nucleon.State<TData, string>['value']>(\n stateValue: TStateValue\n ): this is this & ComputedElementProperties<TData, TStateValue> {\n return this.__service.state.matches(stateValue);\n }\n\n /**\n * Clears all edits and emits the `update` event.\n * @example element.undo()\n */\n undo(): void {\n this.__service.send({ type: 'UNDO' });\n }\n\n /**\n * Applies an edit to the local resource snapshot or its template and emits the `update` event.\n * @example element.edit({ first_name: 'Alex' })\n */\n edit(data: Partial<TData>): void {\n this.__service.send({ type: 'EDIT', data });\n }\n\n /**\n * Submits the form, updating the resource if href isn't empty or creating it otherwise.\n * Emits multiple `update` events as element state changes. Has no effect on invalid forms.\n * @example element.submit()\n */\n submit(): void {\n this.__service.send({ type: 'SUBMIT' });\n }\n\n /**\n * Sends a DELETE request to `element.href` and clears local data on success.\n * Emits multiple update events as element state changes.\n * @example element.delete()\n */\n delete(): void {\n this.__service.send({ type: 'DELETE' });\n }\n\n /** @readonly */\n connectedCallback(): void {\n super.connectedCallback();\n\n this.__createService();\n this.__createRumour();\n this.__createServer();\n }\n\n /** @readonly */\n disconnectedCallback(): void {\n super.disconnectedCallback();\n\n this.__destroyService();\n this.__destroyRumour();\n this.__destroyServer();\n }\n\n /** Sends API request. Throws an error on non-2XX response. */\n protected async _fetch(...args: Parameters<Window['fetch']>): Promise<TData> {\n const response = await new API(this).fetch(...args);\n if (!response.ok) throw response;\n return response.json();\n }\n\n /** POSTs to `element.parent`, shares response with the Rumour group and returns parsed JSON. */\n protected async _sendPost(edits: Partial<TData>): Promise<TData> {\n const body = JSON.stringify(edits);\n const data = await this._fetch(this.parent, { body, method: 'POST' });\n const rumour = NucleonElement.Rumour(this.group);\n\n this.__destroyRumour();\n rumour.share({ data, related: [this.parent], source: data._links.self.href });\n this.__createRumour();\n\n return data;\n }\n\n /** GETs `element.href`, shares response with the Rumour group and returns parsed JSON. */\n protected async _sendGet(): Promise<TData> {\n const data = await this._fetch(this.href);\n const rumour = NucleonElement.Rumour(this.group);\n\n this.__destroyRumour();\n rumour.share({ data, source: this.href });\n this.__createRumour();\n\n return data;\n }\n\n /** PATCHes `element.href`, shares response with the Rumour group and returns parsed JSON. */\n protected async _sendPatch(edits: Partial<TData>): Promise<TData> {\n const body = JSON.stringify(edits);\n const data = await this._fetch(this.href, { body, method: 'PATCH' });\n const rumour = NucleonElement.Rumour(this.group);\n\n this.__destroyRumour();\n rumour.share({ data, source: this.href });\n this.__createRumour();\n\n return data;\n }\n\n /** DELETEs `element.href`, shares response with the Rumour group and returns parsed JSON. */\n protected async _sendDelete(): Promise<TData> {\n const data = await this._fetch(this.href, { method: 'DELETE' });\n const rumour = NucleonElement.Rumour(this.group);\n\n this.__destroyRumour();\n rumour.share({ data: null, source: this.href, related: [this.parent] });\n this.__createRumour();\n\n return data;\n }\n\n private __createService() {\n this.__service.onTransition(state => {\n if (!state.changed) return;\n\n const flags = state.toStrings().reduce((p, c) => [...p, ...c.split('.')], [] as string[]);\n this.setAttribute('state', [...new Set(flags)].join(' '));\n\n this.requestUpdate();\n this.dispatchEvent(new UpdateEvent());\n });\n\n this.__service.onChange(() => {\n this.requestUpdate();\n this.dispatchEvent(new UpdateEvent());\n });\n\n this.__service.start();\n }\n\n private __destroyService() {\n this.__service.stop();\n }\n\n private __createRumour() {\n const rumour = NucleonElement.Rumour(this.group);\n this.__unsubscribeFromRumour = rumour.track(update => this.__handleRumourUpdate(update));\n }\n\n private __destroyRumour() {\n this.__unsubscribeFromRumour?.();\n }\n\n private __createServer() {\n this.__fetchEventHandler = this.__handleFetchEvent.bind(this);\n this.addEventListener('fetch', this.__fetchEventHandler);\n }\n\n private __destroyServer() {\n this.removeEventListener('fetch', this.__fetchEventHandler);\n }\n\n private __handleRumourUpdate(update: (oldData: TData) => TData | null) {\n try {\n const oldData = this.__service.state?.context.data;\n if (!oldData) return;\n\n const newData = update(oldData);\n if (newData !== oldData) this.__service.send({ data: newData, type: 'SET_DATA' });\n } catch (err) {\n if (err instanceof Rumour.UpdateError) {\n this.__service.send({ type: 'FETCH' });\n } else {\n throw err;\n }\n }\n }\n\n private __handleFetchEvent(event: Event) {\n if (!(event instanceof FetchEvent)) return;\n if (event.request.method !== 'GET') return;\n\n const cacheResponse = serveFromCache(event.request.url, this.data);\n if (!cacheResponse.ok) return;\n\n event.respondWith(Promise.resolve(cacheResponse));\n console.debug(\n `%c@foxy.io/elements::${this.localName}\\n%c200%c GET ${event.request.url}`,\n 'color: gray',\n `background: gray; padding: 0 .2em; border-radius: .2em; color: white;`,\n ''\n );\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function serveFromCache(requestUrl: string, data: any): Response;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import traverse from 'traverse';
|
|
2
|
+
export function serveFromCache(requestUrl, data) {
|
|
3
|
+
let body = null;
|
|
4
|
+
traverse(data).forEach(function () {
|
|
5
|
+
var _a, _b, _c, _d, _e;
|
|
6
|
+
// looking for a standalone resource in the data first
|
|
7
|
+
if (((_c = (_b = (_a = this.node) === null || _a === void 0 ? void 0 : _a._links) === null || _b === void 0 ? void 0 : _b.self) === null || _c === void 0 ? void 0 : _c.href) === requestUrl) {
|
|
8
|
+
body = JSON.stringify(this.node);
|
|
9
|
+
this.stop();
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
// alternatively, looking for an embedded collection in the data
|
|
13
|
+
Object.entries((_e = (_d = this.node) === null || _d === void 0 ? void 0 : _d._links) !== null && _e !== void 0 ? _e : {}).some(([curie, link]) => {
|
|
14
|
+
var _a, _b;
|
|
15
|
+
if (link.href !== requestUrl)
|
|
16
|
+
return false;
|
|
17
|
+
// one of the related collection's href matches requested url, let's see if it's embedded...
|
|
18
|
+
const embed = (_b = (_a = this.node) === null || _a === void 0 ? void 0 : _a._embedded) === null || _b === void 0 ? void 0 : _b[curie];
|
|
19
|
+
if (!embed || !Array.isArray(embed))
|
|
20
|
+
return false;
|
|
21
|
+
// we found an embed, now let's build a response body
|
|
22
|
+
// assuming that there's more than 20 items in the collection if 20 was returned
|
|
23
|
+
const totalItems = embed.length < 20 ? embed.length : 21;
|
|
24
|
+
const next = new URL(requestUrl);
|
|
25
|
+
const last = new URL(requestUrl);
|
|
26
|
+
next.searchParams.set('offset', embed.length.toString());
|
|
27
|
+
last.searchParams.set('offset', totalItems.toString());
|
|
28
|
+
body = JSON.stringify({
|
|
29
|
+
returned_items: embed.length,
|
|
30
|
+
total_items: totalItems,
|
|
31
|
+
offset: 0,
|
|
32
|
+
limit: 20,
|
|
33
|
+
_embedded: { [curie]: embed },
|
|
34
|
+
_links: {
|
|
35
|
+
curies: this.node._links.curies,
|
|
36
|
+
first: { href: requestUrl },
|
|
37
|
+
last: { href: last.toString() },
|
|
38
|
+
prev: { href: requestUrl },
|
|
39
|
+
next: { href: next.toString() },
|
|
40
|
+
self: { href: requestUrl },
|
|
41
|
+
},
|
|
42
|
+
});
|
|
43
|
+
this.stop();
|
|
44
|
+
return true;
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
return new Response(body, { status: body ? 200 : 404 });
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=serveFromCache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serveFromCache.js","sourceRoot":"","sources":["../../../../src/elements/public/NucleonElement/serveFromCache.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAEhC,MAAM,UAAU,cAAc,CAAC,UAAkB,EAAE,IAAS;IAC1D,IAAI,IAAI,GAAkB,IAAI,CAAC;IAE/B,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;;QACrB,sDAAsD;QACtD,IAAI,mBAAA,IAAI,CAAC,IAAI,0CAAE,MAAM,0CAAE,IAAI,0CAAE,IAAI,MAAK,UAAU,EAAE;YAChD,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjC,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,OAAO;SACR;QAED,gEAAgE;QAChE,MAAM,CAAC,OAAO,aAAC,IAAI,CAAC,IAAI,0CAAE,MAAM,mCAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE;;YAC7D,IAAK,IAAY,CAAC,IAAI,KAAK,UAAU;gBAAE,OAAO,KAAK,CAAC;YAEpD,4FAA4F;YAC5F,MAAM,KAAK,eAAG,IAAI,CAAC,IAAI,0CAAE,SAAS,0CAAG,KAAK,CAAC,CAAC;YAC5C,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;gBAAE,OAAO,KAAK,CAAC;YAElD,qDAAqD;YACrD,gFAAgF;YAEhF,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;YACzD,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;YACjC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;YAEjC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;YACzD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;YAEvD,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;gBACpB,cAAc,EAAE,KAAK,CAAC,MAAM;gBAC5B,WAAW,EAAE,UAAU;gBACvB,MAAM,EAAE,CAAC;gBACT,KAAK,EAAE,EAAE;gBACT,SAAS,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE;gBAC7B,MAAM,EAAE;oBACN,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM;oBAC/B,KAAK,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;oBAC3B,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE;oBAC/B,IAAI,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;oBAC1B,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE;oBAC/B,IAAI,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;iBAC3B;aACF,CAAC,CAAC;YAEH,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;AAC1D,CAAC","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 === requestUrl) {\n body = JSON.stringify(this.node);\n this.stop();\n return;\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"]}
|