diff --git a/src/Umbraco.Web.UI.Client/src/apps/preview/apps/preview-exit.element.ts b/src/Umbraco.Web.UI.Client/src/apps/preview/apps/preview-exit.element.ts index 26af65490b..c1a45b753d 100644 --- a/src/Umbraco.Web.UI.Client/src/apps/preview/apps/preview-exit.element.ts +++ b/src/Umbraco.Web.UI.Client/src/apps/preview/apps/preview-exit.element.ts @@ -6,7 +6,7 @@ import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; export class UmbPreviewExitElement extends UmbLitElement { async #onClick() { const previewContext = await this.getContext(UMB_PREVIEW_CONTEXT); - await previewContext?.exitPreview(0); + await previewContext?.exitPreview(); } override render() { diff --git a/src/Umbraco.Web.UI.Client/src/apps/preview/preview.context.ts b/src/Umbraco.Web.UI.Client/src/apps/preview/preview.context.ts index 2acbd754de..f3f13c9fde 100644 --- a/src/Umbraco.Web.UI.Client/src/apps/preview/preview.context.ts +++ b/src/Umbraco.Web.UI.Client/src/apps/preview/preview.context.ts @@ -1,17 +1,15 @@ import { tryExecute } from '@umbraco-cms/backoffice/resources'; -import { umbConfirmModal } from '@umbraco-cms/backoffice/modal'; import { DocumentService } from '@umbraco-cms/backoffice/external/backend-api'; +import { HubConnectionBuilder } from '@umbraco-cms/backoffice/external/signalr'; import { UmbBooleanState, UmbStringState } from '@umbraco-cms/backoffice/observable-api'; import { UmbContextBase } from '@umbraco-cms/backoffice/class-api'; import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; import { UmbDocumentPreviewRepository } from '@umbraco-cms/backoffice/document'; -import { UMB_SERVER_CONTEXT } from '@umbraco-cms/backoffice/server'; -import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; -import { HubConnectionBuilder, type HubConnection } from '@umbraco-cms/backoffice/external/signalr'; -import { UMB_NOTIFICATION_CONTEXT } from '@umbraco-cms/backoffice/notification'; import { UmbLocalizationController } from '@umbraco-cms/backoffice/localization-api'; - -const UMB_LOCALSTORAGE_SESSION_KEY = 'umb:previewSessions'; +import { UMB_NOTIFICATION_CONTEXT } from '@umbraco-cms/backoffice/notification'; +import { UMB_SERVER_CONTEXT } from '@umbraco-cms/backoffice/server'; +import type { HubConnection } from '@umbraco-cms/backoffice/external/signalr'; +import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; interface UmbPreviewIframeArgs { className?: string; @@ -133,10 +131,6 @@ export class UmbPreviewContext extends UmbContextBase { return urlInfo.url.startsWith('/') ? `${this.#serverUrl}${urlInfo.url}` : urlInfo.url; } - #getSessionCount(): number { - return Math.max(Number(localStorage.getItem(UMB_LOCALSTORAGE_SESSION_KEY)), 0) || 0; - } - #setPreviewUrl(args?: UmbPreviewUrlArgs) { const host = args?.serverUrl || this.#serverUrl; const unique = args?.unique || this.#unique; @@ -179,35 +173,8 @@ export class UmbPreviewContext extends UmbContextBase { this.#previewUrl.setValue(previewUrlString); } - #setSessionCount(sessions: number) { - localStorage.setItem(UMB_LOCALSTORAGE_SESSION_KEY, sessions.toString()); - } - - checkSession() { - const sessions = this.#getSessionCount(); - if (sessions > 0) return; - - umbConfirmModal(this._host, { - headline: `Preview website?`, - content: `You have ended preview mode, do you want to enable it again to view the latest saved version of your website?`, - cancelLabel: 'View published version', - confirmLabel: 'Preview latest version', - }) - .then(() => { - this.restartSession(); - }) - .catch(() => { - this.exitSession(); - }); - } - - async exitPreview(sessions: number = 0) { - this.#setSessionCount(sessions); - - // We are good to end preview mode. - if (sessions <= 0) { - await this.#documentPreviewRepository.exit(); - } + async exitPreview() { + await this.#documentPreviewRepository.exit(); if (this.#connection) { await this.#connection.stop(); @@ -223,12 +190,6 @@ export class UmbPreviewContext extends UmbContextBase { window.location.replace(url); } - async exitSession() { - let sessions = this.#getSessionCount(); - sessions--; - this.exitPreview(sessions); - } - iframeLoaded(iframe: HTMLIFrameElement) { if (!iframe) return; this.#iframeReady.setValue(true); @@ -255,17 +216,6 @@ export class UmbPreviewContext extends UmbContextBase { document.location.reload(); } - async restartSession() { - await this.#documentPreviewRepository.enter(); - this.startSession(); - } - - startSession() { - let sessions = this.#getSessionCount(); - sessions++; - this.#setSessionCount(sessions); - } - #currentArgs: UmbPreviewIframeArgs = {}; async updateIFrame(args?: UmbPreviewIframeArgs) { const mergedArgs = { ...this.#currentArgs, ...args }; diff --git a/src/Umbraco.Web.UI.Client/src/apps/preview/preview.element.ts b/src/Umbraco.Web.UI.Client/src/apps/preview/preview.element.ts index 4897f21190..b2d0db0da7 100644 --- a/src/Umbraco.Web.UI.Client/src/apps/preview/preview.element.ts +++ b/src/Umbraco.Web.UI.Client/src/apps/preview/preview.element.ts @@ -22,23 +22,6 @@ export class UmbPreviewElement extends UmbLitElement { this.observe(this.#context.previewUrl, (previewUrl) => (this._previewUrl = previewUrl)); } - override connectedCallback() { - super.connectedCallback(); - this.addEventListener('visibilitychange', this.#onVisibilityChange); - window.addEventListener('beforeunload', () => this.#context.exitSession()); - this.#context.startSession(); - } - - override disconnectedCallback() { - super.disconnectedCallback(); - this.removeEventListener('visibilitychange', this.#onVisibilityChange); - // NOTE: Unsure how we remove an anonymous function from 'beforeunload' event listener. - // The reason for the anonymous function is that if we used a named function, - // `this` would be the `window` and would not have context to the class instance. [LK] - //window.removeEventListener('beforeunload', () => this.#context.exitSession()); - this.#context.exitSession(); - } - @state() private _iframeReady?: boolean; @@ -49,10 +32,6 @@ export class UmbPreviewElement extends UmbLitElement { this.#context.iframeLoaded(event.target); } - #onVisibilityChange() { - this.#context.checkSession(); - } - override render() { if (!this._previewUrl) return nothing; return html`