@sassoftware/va-report-components
Version:
The SAS Visual Analytics SDK is a set of JavaScript APIs and web components that enable SAS Visual Analytics report content to be easily embedded in a third-party application or web page.
1,119 lines (1,041 loc) • 32.2 kB
JavaScript
import "react";
import "react-i18next";
import { A as e, U as t, q as s, n as i, r as a, s as n, t as o, v as r, w as p, x as l, y as c, H as d, z as h, S as u, B as f, C as g, D as m, E as b, F as A, G as v, I as y, J as w, K as M, N as S, Q as T, V as F, W as I } from "./chunk1.mjs";
export { X as SUBSCRIBE_ALL } from "./chunk1.mjs";
import "i18next";
import { b as L } from "./i18n/nova_i18n.mjs";
import "react-dom/client";
import "tslib";
import "rxjs";
import "rxjs/operators";
import "zod";
import "polished";
import "reselect";
import "framer-motion";
import "react/jsx-runtime";
import "react-dom";
import "classnames";
import "react-focus-lock";
import "react-popper";
import "@popperjs/core";
import "axios";
import "@tanstack/react-virtual";
import "cldr-core/supplemental/weekData.json";
import "use-memo-one";
import "memoize-one";
import "@tanstack/react-query";
import "react-cropper";
import "redux-observable";
import "redux";
import "@redux-devtools/extension";
import "react-redux";
const C = "broadcastMessage";
const E = "_sendMessageToApp";
const U = "gotoApp";
const N = "logoff";
const D = "doNovaLogoff";
const H = "removeSplash";
const k = "sendMessageToApp";
const x = "setDirtyMessageEnabled";
const O = "setLogoffUrl";
const j = "timeout";
const P = "updateAppName";
const z = "updateDirtyFlag";
const q = "updateCleanupFn";
const B = window.location.origin;
const R = e => e.children !== void 0;
var $ = class {
constructor(o) {
this.observable = new e;
this.model = {
availableApplications: [],
publicTypeSupportingApplications: new Map
};
this.messageQueue = [];
this.readyForMessages = false;
this.appId = "";
this.dirtyAppNames = "\n";
window.addEventListener("message", this.onMessage.bind(this));
this.observable.subscribe(t, (() => this.updateModel()));
this.observable.subscribe(s, ((e, t) => {
this.dirtyAppNames = t.dirtyAppNames;
}));
this.config = o;
this.updateModel();
i.subscribe(a, ((e, t) => {
if (t?.data.handled) return;
if (t) t.data.handled = true;
if (this.dirtyAppNames !== "\n") i.publish(n, {
data: {
dirtyAppNames: this.dirtyAppNames,
onDiscardAndExit: () => this.doNovaLogoff()
}
}); else this.logoff();
}));
if (!window.onpopstate) window.onpopstate = this.onPopState.bind(this);
}
onPopState() {
if (!this.appId) return;
this.gotoApp(this.appId, window.location.href, true);
}
onMessage(e) {
if (window.location.origin !== e.origin) return;
let t;
if (typeof e.data === "string") try {
t = JSON.parse(e.data);
} catch (e) {
return;
} else t = e.data;
if (t === null || t.version === void 0) return;
switch (t.command) {
case E:
this.processMessage(t);
break;
}
}
processMessage(e) {
if (this.readyForMessages) this.observable.fire(e.type, e.data); else this.messageQueue.push(e);
}
async updateModel() {
this.model.availableApplications = await this.config.applicationService.getAvailableApps();
this.model.publicTypeSupportingApplications = await this.config.applicationService.getPublicTypeSupportingApps();
this.observable.fire(o);
}
gotoApp(e, t, s, i = {}) {
const a = {
version: "5.0",
command: U,
appId: e,
url: t,
isCompliant: s,
options: i
};
this.sendCommandToMain(a);
}
updateAppName(e, t) {
const s = {
version: "5.0",
command: P,
appId: e,
appName: t
};
this.sendCommandToMain(s);
}
sendCommandToMain(e) {
top?.window.postMessage(JSON.stringify(e), B);
}
sendMessageToApp(e, t, s) {
const i = {
version: "5.0",
command: k,
appId: e,
type: t,
data: s
};
this.sendCommandToMain(i);
}
subscribe(e, t, s) {
this.observable.subscribe(e, t, s);
}
unsubscribe(e, t, s) {
this.observable.unsubscribe(e, t, s);
}
broadcastMessage(e, t = {}) {
const s = {
version: "5.0",
command: C,
type: e,
data: t
};
this.sendCommandToMain(s);
}
setLogoffUrl(e) {
const t = {
version: "5.0",
command: O,
logoffUrl: e
};
this.sendCommandToMain(t);
}
logoff() {
const e = {
version: "5.0",
command: N
};
this.sendCommandToMain(e);
}
doNovaLogoff(e) {
const t = {
version: "5.0",
command: D,
alreadyInitiated: e
};
this.sendCommandToMain(t);
}
setDirtyMessageEnabled(e) {
const t = {
version: "5.0",
command: x,
allowDirtyMessage: e
};
this.sendCommandToMain(t);
}
timeout(e) {
const t = {
version: "5.0",
command: j,
url: e
};
this.sendCommandToMain(t);
}
updateDirtyFlag(e, t) {
const s = {
version: "5.0",
command: z,
appId: e,
dirtyFlag: t
};
this.sendCommandToMain(s);
}
updateCleanupFnHandler(e) {
this.cleanupFnHandler = async () => {
i.publish(r);
await e();
this.doNovaLogoff(true);
};
this.observable.subscribe(p, this.cleanupFnHandler);
}
updateCleanupFn(e) {
if (this.cleanupFnHandler) this.observable.unsubscribe(p, this.cleanupFnHandler);
this.updateCleanupFnHandler(e);
const t = {
version: "5.0",
command: q,
appId: this.appId,
hasCleanupFn: true
};
this.sendCommandToMain(t);
}
removeCleanupFn() {
if (this.cleanupFnHandler) {
this.observable.unsubscribe(p, this.cleanupFnHandler);
this.cleanupFnHandler = void 0;
const e = {
version: "5.0",
command: q,
appId: this.appId,
hasCleanupFn: false
};
this.sendCommandToMain(e);
}
}
registerApp(e, t, s) {
this.appId = e;
this.gotoApp(e, t, true);
this.updateAppName(e, s);
this.readyForMessages = true;
this.flushMessageQueue();
}
getModel() {
return this.model;
}
openObject(e, t, s, i) {
const a = this.getAppIdForType(e, i);
if (!a) return;
const n = this.getAvailableApp(a);
if (!n) return;
this.gotoApp(n.appId, n.uri, n.appSwitcherCompliance);
this.sendMessageToApp(n.appId, s, {
...t,
directive: n.directiveId,
targetPublicType: e
});
}
getAppIdForType(e, t) {
const s = this.model.publicTypeSupportingApplications.get(e);
if (!s) return null;
let i = null;
if (t) {
if (s.filter((e => e.appId === t)).length > 0) i = t;
}
if (!i && s.length > 0) i = s[0].appId;
return i;
}
getAvailableApp(e) {
let t = null;
const s = this.model.availableApplications;
for (const i of s) if (R(i)) {
for (const s of i.children) if (s.appId === e) t = s;
} else if (i.appId === e) t = i;
return t;
}
flushMessageQueue() {
for (const e of this.messageQueue) this.observable.fire(e.type, e.data);
this.messageQueue = [];
}
};
var W = class {
constructor(e, t = false) {
this.app = e;
this.loaded = t;
}
getHTMLElement(e) {
let t;
if (!e) t = document.querySelector("body");
if (!t) t = this.createIFrame(this.app.appId);
return t;
}
createIFrame(e) {
const t = document.createElement("iframe");
t.setAttribute("id", `${e}_iframe`);
t.setAttribute("allowfullscreen", "true");
t.setAttribute("title", "SAS");
t.style.top = "0";
t.style.left = "0";
t.style.height = "100%";
t.style.width = "100%";
t.style.border = "0";
t.style.position = "absolute";
return t;
}
initHTMLElement(e, t) {
const s = this.app.getHTMLElement();
if (s instanceof HTMLIFrameElement) {
const i = s;
let a = this.addUrlParameter(e, "launchedFromAppSwitcher=true");
if (t) a = this.addUrlParameter(a, "useTransitionSplash=true");
i.src = a;
i.addEventListener("load", (() => {
this.loaded = true;
}));
} else this.loaded = true;
}
addUrlParameter(e, t) {
let s = "?";
if (e.includes("?")) s = "&";
return e + s + t;
}
getWindow() {
const e = this.app.getHTMLElement();
if (e instanceof HTMLIFrameElement) return e.contentWindow;
return window;
}
isLoaded() {
return this.loaded;
}
queueMessage(e, t) {
const s = this.app.getHTMLElement();
if (!(s instanceof HTMLIFrameElement)) return;
const i = s;
const a = this.getWindow();
i.addEventListener("load", (() => {
t(e, a);
}));
}
hideHTMLElement() {
const e = this.app.getHTMLElement();
if (e instanceof HTMLIFrameElement) this.doHideElement(e); else {
const e = document.querySelector("body")?.childNodes;
for (const t of e) if (!(t instanceof HTMLIFrameElement) && t instanceof HTMLElement) this.doHideElement(t);
}
}
doHideElement(e) {
e.setAttribute("active", "false");
e.style.display = "none";
}
showHTMLElement() {
const e = this.app.getHTMLElement();
if (e instanceof HTMLIFrameElement) this.doShowElement(e); else {
const e = document.querySelector("body")?.childNodes;
for (const t of e) if (!(t instanceof HTMLIFrameElement) && t instanceof HTMLElement && t.id !== "sas-nc-splashscreen") this.doShowElement(t);
}
}
doShowElement(e) {
e.setAttribute("active", "true");
e.focus();
e.style.removeProperty("display");
}
};
var Q = class {
constructor(e, t, s) {
this.appId = e;
this.url = t;
this.appName = "";
this.dirty = false;
this.initialized = false;
this.title = "";
this.stashedUrl = "";
this.cleanupFn = false;
this.appName = e;
this.elementManager = new W(this);
this.htmlElement = this.elementManager.getHTMLElement(s);
}
hide() {
this.elementManager.hideHTMLElement();
}
show() {
this.elementManager.showHTMLElement();
}
init(e) {
this.elementManager.initHTMLElement(this.url, e);
this.initialized = true;
}
isInitialized() {
return this.initialized;
}
isLoaded() {
return this.elementManager.isLoaded();
}
getHTMLElement() {
return this.htmlElement;
}
getWindow() {
return this.elementManager.getWindow();
}
getStashedUrl() {
return this.stashedUrl;
}
setStashedUrl(e) {
this.stashedUrl = e;
}
hasCleanupFn() {
return this.cleanupFn;
}
setCleanupFn(e) {
this.cleanupFn = e;
}
queueMessage(e, t) {
this.elementManager.queueMessage(e, t);
}
};
const G = (e, t) => {
const s = e.split("#");
const i = s[0].split("?");
if (i.length >= 2) {
const e = `${encodeURIComponent(t)}=`;
const a = i[1].split(/[&;]/g);
for (let t = a.length; t-- > 0; ) if (a[t].lastIndexOf(e, 0) !== -1) a.splice(t, 1);
const n = i[0] + (a.length > 0 ? `?${a.join("&")}` : "");
if (s.length >= 2) {
s[0] = n;
return s.join("#");
}
return n;
}
return e;
};
const J = l("ApplicationSwitcherMain");
var _ = class {
constructor(e) {
this.config = e;
this.alreadyShownDirtyMessage = false;
this.applications = new Map;
this.logoffUrl = "";
this.dirtyMessageEnabled = true;
this.dirtyAppNames = "\n";
this.cleanupFns = 0;
this.LOGOFF_TIMEOUT = 2e3;
J.info("Creating ApplicationSwitcherMain instance");
window.addEventListener("message", this.onMessage.bind(this));
this.getLogoffUrl = this.config.getLogoffUrl ? this.config.getLogoffUrl : () => this.logoffUrl;
this.currentApp = void 0;
window.addEventListener("beforeunload", this.showUnsavedChangesDialog.bind(this));
if (!window.onpopstate) window.onpopstate = this.onPopState.bind(this);
this.setupPWAInstallability();
}
setupPWAInstallability() {
const e = c();
if (e !== void 0 && "serviceWorker" in navigator) {
navigator.serviceWorker.register(`${e}pwa/root-service-worker.js`, {
scope: "/"
}).then((function(e) {
J.info(`SAS root service worker registration successful with scope: ${e.scope}`);
}), (function(e) {
J.error(`SAS root service worker registration failed: ${e}`);
}));
const t = window.document;
const s = t.createElement("link");
s.setAttribute("rel", "manifest");
s.setAttribute("id", "sas-manifest");
s.setAttribute("crossOrigin", "use-credentials");
s.setAttribute("href", `${e}pwa/sas-manifest.json`);
t.querySelector("head")?.prepend(s);
}
}
showUnsavedChangesDialog(e) {
if (this.getShowDirtyMessage(this.alreadyShownDirtyMessage)) {
e.preventDefault();
e.returnValue = this.config.getUnsavedChangesLocalizedString(this.dirtyAppNames);
}
}
onPopState(e) {
if (e && e.state && e.state.appId) {
const t = e.state;
this.gotoApp(t.appId, t.url, t.isCompliant, true);
} else {
const e = this.getCurrentApp()?.appId;
if (e) window.history.replaceState({
appId: e,
url: window.location.href,
isCompliant: true
}, document.title, window.location.href);
}
}
getShowDirtyMessage(e) {
if (this.dirtyAppNames !== "\n" && (e === void 0 || e === false) && this.dirtyMessageEnabled) return true;
return false;
}
getAppAddedData() {
const e = [];
this.applications.forEach(((t, s) => {
e.push({
appId: s,
title: t.title,
url: t.url,
isDirty: t.dirty
});
}));
return e;
}
gotoApp(e, t, i, a, n, o) {
let r = false;
if (this.appExists(e) && n) return;
if (this.isCurrentApp(e)) {
this.currentApp.setStashedUrl(window.location.href);
this.updateHistory(e, t, true, false, o);
return;
}
if (!i) {
this.gotoUrl(t);
return;
}
let p = this.getApp(e);
if (!p) {
r = true;
p = this.addApplication(e, t);
}
const l = {
appId: e,
previousAppId: ""
};
const c = this.createAppShowMessageData(e, t);
if (!n) {
if (this.currentApp) {
if (!a) this.currentApp.setStashedUrl(window.location.href);
this.currentApp.hide();
l.previousAppId = this.currentApp.appId;
this.sendMessageToApp(this.currentApp.appId, d, {});
}
this.currentApp = p;
}
if (!p.isInitialized()) {
const t = this.applications.size > 1 ? true : false;
p.init(t);
this.broadcastMessage(h, {
appId: e,
availableApps: this.getAppAddedData()
});
if (!n) {
this.sendMessageToApp(e, u, c);
this.broadcastMessage(f, l);
}
if (this.applications.size === 1) {
const t = new URLSearchParams(window.location.search).get("appSwitcherMessage");
if (t) try {
const s = JSON.parse(t);
this.sendMessageToApp(e, s.type, s.data);
} catch {
J.error("Failed to send ApplicationSwitcher message via URL parameter");
}
} else if (this.dirtyAppNames !== "\n") this.sendMessageToApp(e, s, {
dirtyAppNames: this.dirtyAppNames
});
} else {
this.sendMessageToApp(e, g, c);
this.sendMessageToApp(e, u, c);
this.broadcastMessage(f, l);
}
if (!n) {
p.show();
if (p.appName && !r) this.updateBrowserTabTitle(p.appName);
if (!a) this.updateHistory(e, t, i, this.applications.size !== 1, o);
} else {
p.hide();
this.sendMessageToApp(e, d, {});
}
}
isCurrentApp(e) {
if (this.currentApp && this.appExists(e) === true && this.currentApp.appId === e) return true;
return false;
}
gotoUrl(e) {
window.location.assign(e);
}
appExists(e) {
return this.applications.has(e);
}
addApplication(e, t) {
let s = true;
if (this.applications.size === 0 && !this.config.renderFirstAppInIFrame) s = false;
const i = new Q(e, t, s);
const a = document.querySelector("body");
const n = i.getHTMLElement();
if (n.tagName !== "BODY") a.appendChild(n);
this.applications.set(e, i);
return i;
}
createAppShowMessageData(e, t) {
return {
appId: e,
url: t
};
}
getApp(e) {
if (this.appExists(e)) return this.applications.get(e);
}
updateBrowserTabTitle(e) {
document.title = e;
}
onMessage(e) {
if (window.location.origin !== e.origin) return;
let t = null;
if (typeof e.data === "string") try {
t = JSON.parse(e.data);
} catch (e) {
return;
} else t = e.data;
if (t === null || t.version === void 0) return;
switch (t.command) {
case C:
this.broadcastMessage(t.type, t.data);
break;
case U:
this.gotoApp(t.appId, t.url, t.isCompliant, t.options?.suppressUpdateHistory, t.options?.loadInBackground, t.options?.useStashedUrl);
break;
case N:
this.logoff();
break;
case D:
this.alreadyShownDirtyMessage = true;
this.doLogoff(t?.alreadyInitiated);
break;
case H:
this.removeSplash();
break;
case k:
this.sendMessageToApp(t.appId, t.type, t.data);
break;
case O:
this.setLogoffUrl(t.logoffUrl);
break;
case j:
this.timeout(t.url);
break;
case P:
this.updateAppName(t.appId, t.appName);
break;
case z:
this.updateDirtyFlag(t.appId, t.dirtyFlag);
break;
case q:
const e = this.getApp(t.appId);
if (t.hasCleanupFn && !e?.hasCleanupFn()) this.cleanupFns++; else if (!t.hasCleanupFn && e?.hasCleanupFn()) this.cleanupFns--;
e?.setCleanupFn(t.hasCleanupFn);
break;
}
}
removeSplash() {
const e = document.querySelector("#sas-hc-splash");
if (e) e.remove();
}
updateAppName(e, t) {
const s = this.getApp(e);
if (s) {
s.appName = t;
if (this.currentApp === s) this.updateBrowserTabTitle(s.appName);
}
}
sendMessageToApp(e, t, s = {}) {
const i = this.getApp(e);
if (!i) return;
const a = {
version: "5.0",
command: E,
appId: e,
type: t,
data: s
};
const n = i.getWindow();
if (n) if (i.isLoaded()) this.executePostMessage(a, n); else i.queueMessage(a, this.executePostMessage);
}
executePostMessage(e, t) {
const s = JSON.stringify(e);
t && t.postMessage(s, B);
}
updateHistory(e, t, s, i, a) {
let n = t;
if (a && this.currentApp?.getStashedUrl()) n = this.currentApp?.getStashedUrl();
n = G(n, "launchedFromAppSwitcher");
n = G(n, "useTransitionSplash");
const o = [ {
appId: e,
url: t,
isCompliant: s
}, "", n ];
if (i) window.history.pushState(...o); else window.history.replaceState(...o);
}
broadcastMessage(e, t = {}) {
this.doBroadcast(e, t);
}
doBroadcast(e, t) {
for (const [s] of this.applications) this.sendMessageToApp(s, e, t);
}
setLogoffUrl(e) {
this.logoffUrl = e;
}
getCurrentApp() {
return this.currentApp;
}
logoff() {
if (!this.getShowDirtyMessage()) this.doLogoff(); else if (confirm(this.config.getUnsavedChangesLocalizedString(this.dirtyAppNames))) {
this.alreadyShownDirtyMessage = true;
this.doLogoff();
} else return;
}
getDirtyApps() {
const e = [];
this.dirtyAppNames = "\n";
this.applications.forEach((t => {
if (t.dirty) {
e.push(t);
this.dirtyAppNames += `${t.appName}\n`;
}
}));
return e;
}
doLogoff(e) {
const t = this.logoffUrl ? this.logoffUrl : this.getLogoffUrl();
if (e) {
this.cleanupFns--;
if (this.cleanupFns > 0) return; else window.location.assign(t);
} else {
this.broadcastMessage(p);
setTimeout((() => window.location.assign(t)), this.cleanupFns ? this.LOGOFF_TIMEOUT : 0);
}
}
updateDirtyFlag(e, t) {
const i = this.getApp(e);
if (i) {
i.dirty = t;
this.broadcastMessage(m, {
appId: e,
dirtyFlag: t
});
this.getDirtyApps();
this.broadcastMessage(s, {
dirtyAppNames: this.dirtyAppNames
});
}
}
timeout(e) {
this.dirtyMessageEnabled = false;
window.location.assign(e);
}
};
const V = l("AppRegistryService");
var K = class {
constructor() {
this.favoritesUrl = "/appRegistry/applications/favorites";
}
async getAvailableApps() {
let e = [];
try {
const t = await this.fetchApps();
if (t && t.items) e = this.createAppTreeModel(t.items);
} catch (e) {}
return e;
}
async fetchApps() {
return (await this.doGet("/appRegistry/applications/applicationTree")).data;
}
async doGet(e) {
return await b.get(e);
}
createAppTreeModel(e) {
const t = [];
for (const s of e) t.push(this.createNode(s));
return t;
}
createNode(e) {
if (e.branch === true) return this.createBranchNode(e);
return this.createLeaf(e);
}
createBranchNode(e) {
const t = [];
for (const s of e.children) t.push(this.createLeaf(s));
return {
children: t,
id: e.id,
label: e.label
};
}
createLeaf(e) {
return {
appId: e.appId,
appName: e.appName,
appSwitcherCompliance: e.appSwitcherCompliance,
cdcDocId: e.cdcDocId,
createDefaultShortcut: e.createDefaultShortcut,
directiveId: e.id,
hidden: e.hidden,
label: e.label,
shortcutLabel: e.shortcutLabel,
specialRole: e.specialRole,
uri: e.uri,
favoriteUri: e.links?.find((e => e.rel === "addFavorite" || e.rel === "removeFavorite"))?.uri,
appIcon: e.icon
};
}
async getPublicTypeSupportingApps() {
let e = new Map;
try {
const t = await this.fetchTypes();
if (t && t.items) e = this.createTypesModel(t.items);
} catch (e) {}
return e;
}
async fetchTypes() {
return (await this.doGet("/appRegistry/types")).data;
}
createTypesModel(e) {
const t = new Map;
for (const s of e) t.set(s.id, this.createTypeApps(s.apps));
return t;
}
createTypeApps(e) {
const t = [];
for (const s of e) {
const e = {
appId: s.appId,
directiveId: s.directive,
verbLabel: s.targetVerbLabel,
verbCode: s.targetVerbCode
};
t.push(e);
}
return t;
}
async updateFavorites(e) {
try {
await b.put(this.favoritesUrl, e, {
headers: {
Accept: "application/vnd.sas.collection+json",
"Content-Type": "application/vnd.sas.collection+json"
}
});
} catch (e) {
V.error("Unable to update favorited applications");
}
}
async addFavorite(e) {
try {
await b.put(e, {
headers: {
Accept: "application/vnd.sas.app.registry.favorite+json"
}
});
} catch (e) {
V.error("Unable to add to favorited applications");
}
}
async removeFavorite(e) {
try {
await b.delete(e);
} catch (e) {
V.error("Unable to remove from favorited applications");
}
}
};
var Y = class {
constructor(e) {
this.config = e;
if (window === top?.window) new _(e);
if (new URLSearchParams(window.location.search).get("launchedFromAppSwitcher") !== "false") this.client = new $(e);
}
broadcastMessage(e, t = {}) {
if (!this.client) return;
this.client.broadcastMessage(e, t);
}
getAvailableApps() {
if (!this.client) return [];
return this.client?.getModel().availableApplications;
}
async updateFavorites(e) {
if (!this.client) return;
await this.config.applicationService.updateFavorites(e);
await this.client.updateModel();
this.client.broadcastMessage(t);
}
async addFavorite(e) {
if (!this.client) return;
await this.config.applicationService.addFavorite(e);
await this.client.updateModel();
this.client.broadcastMessage(t);
}
async removeFavorite(e) {
if (!this.client) return;
await this.config.applicationService.removeFavorite(e);
await this.client.updateModel();
this.client.broadcastMessage(t);
}
getPublicTypes() {
if (!this.client) return new Map;
return this.client.getModel().publicTypeSupportingApplications;
}
gotoApp(e, t, s, i) {
if (!this.client) return;
this.client.gotoApp(e, t, s, i);
}
logoff() {
if (!this.client) return;
this.client.logoff();
}
sendMessageToApp(e, t, s) {
if (!this.client) return;
this.client.sendMessageToApp(e, t, s);
}
setDirtyMessageEnabled(e) {
if (!this.client) return;
this.client.setDirtyMessageEnabled(e);
}
setLogoffUrl(e) {
if (!this.client) return;
this.client.setLogoffUrl(e);
}
subscribe(e, t, s) {
if (!this.client) return;
this.client.subscribe(e, t, s);
}
timeout(e) {
if (!this.client) return;
this.client.timeout(e);
}
unsubscribe(e, t, s) {
if (!this.client) return;
this.client.unsubscribe(e, t, s);
}
updateAppName(e, t) {
if (!this.client) return;
this.client.updateAppName(e, t);
}
updateDirtyFlag(e, t) {
if (!this.client) return;
this.client.updateDirtyFlag(e, t);
}
updateCleanupFn(e) {
if (!this.client) return;
this.client.updateCleanupFn(e);
}
removeCleanupFn() {
if (!this.client) return;
this.client.removeCleanupFn();
}
registerApp(e, t, s) {
if (!this.client) return;
this.client.registerApp(e, t, s);
}
openObject(e, t, s) {
if (!this.client) return;
this.client.openObject(e, t, M, s);
}
createObject(e, t, s) {
if (!this.client) return;
this.client.openObject(e, t, S, s);
}
updateModel() {
if (!this.client) return;
this.client.updateModel();
}
setUnsavedChangesLocalizedFn(e) {
this.config.getUnsavedChangesLocalizedString = e;
}
getAvailableApp(e) {
if (!this.client) return null;
return this.client.getAvailableApp(e);
}
};
function Z(e) {
return e && typeof e === "object" && "appId" in e;
}
function ee(e) {
T([ {
id: "sas.drive.logon.lastAppDirective",
value: e
} ]).catch((t => l("appSwitcher").error(`set preference sas.drive.logon.lastAppDirective to ${e} failed.`)));
}
const te = e => {
const t = new Y(e);
let s;
let a;
A();
t.subscribe(v, ((e, t) => {
if (t?.settings) for (const {id: e, newValue: i} of t.settings) {
const n = e === "sas.drive.logon.action";
const o = e === "sas.drive.logon.specificAppDirective";
if (n || o) {
a = n && i === "lastAppDirective" || o && i === "lastAppDirective";
const e = t.broadcaster?.appId && t.broadcaster.appId === s;
if (a && s && e) ee(s);
break;
}
}
}));
t.subscribe(u, ((e, t) => {
i.publish(u, {
data: t
});
if (Z(t) && typeof t.appId === "string") {
s = t.appId;
if (a === true) ee(s); else if (a === void 0) y("sas.drive.logon.action").then((e => {
if (a === void 0) if (e.value === "lastAppDirective" && s) {
a = true;
ee(s);
} else a = false;
})).catch((e => {}));
}
}));
t.subscribe(d, ((e, t) => {
s = void 0;
i.publish("Cache.Reload", {
data: t
});
}));
i.subscribe(w, (() => {
t.setDirtyMessageEnabled(false);
}));
return t;
};
const se = () => {
const e = window.location.origin;
const t = window.location.pathname;
const s = t.indexOf("/", 1);
return e + t.substring(0, s) + "/logout";
};
let ie;
const ae = () => {
if (!ie) ie = te({
applicationService: new K,
getLogoffUrl: se,
getUnsavedChangesLocalizedString: () => ""
});
return ie;
};
F(L);
let ne;
I("NovaComponents-NovaApplicationSwitcher-gui-icu").then((e => {
ne = e;
}));
const oe = e => `${ne("dirtySignOutMessageDialog.followingApplications.msg")}\n${e}\n${ne("dirtySignOutMessageDialog.exitApplications.msg")}`;
const re = ae();
re.setUnsavedChangesLocalizedFn(oe);
export { h as APP_ADDED, o as APP_DATA_LOADED, S as CREATE, m as DIRTY_FLAG_CHANGED, d as HIDE, p as LOGOFF_IMMINENT, M as OPEN, v as PREFERENCE_CHANGED, g as RETURN, u as SHOW, f as SWITCH, t as UPDATE_MODEL, s as USE_NOVA_APPSWITCHER, re as applicationSwitcher };