2026-05-22 01:28:18 +01:00
|
|
|
import { dev } from '$app/environment';
|
|
|
|
|
import { get } from 'svelte/store';
|
|
|
|
|
import { globalStore } from '$lib/utils/store/app';
|
|
|
|
|
|
|
|
|
|
const USERJOT_APP_ID = 'cm4a6vcmp00jpmdb5n66rmkzz';
|
|
|
|
|
|
|
|
|
|
let isInitialized = false;
|
|
|
|
|
|
|
|
|
|
function isWidgetAllowed(): boolean {
|
|
|
|
|
if (dev) return false;
|
|
|
|
|
if (get(globalStore).isOrgSite) return false;
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function ensureSdkLoaded(): void {
|
|
|
|
|
if (window.uj) return;
|
|
|
|
|
|
|
|
|
|
window.$ujq = window.$ujq || [];
|
|
|
|
|
window.uj =
|
|
|
|
|
window.uj ||
|
|
|
|
|
(new Proxy({} as Window['uj'], {
|
|
|
|
|
get:
|
|
|
|
|
(_, prop) =>
|
|
|
|
|
(...args: unknown[]) =>
|
|
|
|
|
window.$ujq.push([prop, ...args])
|
|
|
|
|
}) as Window['uj']);
|
|
|
|
|
|
|
|
|
|
const script = document.createElement('script');
|
|
|
|
|
script.type = 'module';
|
|
|
|
|
script.async = true;
|
|
|
|
|
script.src = 'https://cdn.userjot.com/sdk/v2/uj.js';
|
|
|
|
|
const nonce = document.querySelector('script[nonce]')?.getAttribute('nonce');
|
|
|
|
|
if (nonce) script.setAttribute('nonce', nonce);
|
|
|
|
|
document.head.appendChild(script);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export function initUserJot(): void {
|
|
|
|
|
if (isInitialized) return;
|
|
|
|
|
if (!isWidgetAllowed()) return;
|
|
|
|
|
|
|
|
|
|
ensureSdkLoaded();
|
|
|
|
|
|
|
|
|
|
window.uj.init(USERJOT_APP_ID, {
|
2026-06-07 18:43:05 +01:00
|
|
|
trigger: 'custom',
|
2026-05-22 01:28:18 +01:00
|
|
|
position: 'right',
|
|
|
|
|
theme: 'auto'
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
isInitialized = true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type UserJotIdentity = {
|
|
|
|
|
id: string;
|
|
|
|
|
email?: string;
|
|
|
|
|
fullname?: string | null;
|
|
|
|
|
avatarUrl?: string | null;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export function identifyUserJotUser({ id, email, fullname, avatarUrl }: UserJotIdentity): void {
|
|
|
|
|
if (!isWidgetAllowed()) return;
|
|
|
|
|
|
|
|
|
|
ensureSdkLoaded();
|
|
|
|
|
|
|
|
|
|
const [firstName, ...rest] = (fullname ?? '').trim().split(/\s+/);
|
|
|
|
|
const lastName = rest.join(' ');
|
|
|
|
|
|
|
|
|
|
window.uj.identify({
|
|
|
|
|
id,
|
|
|
|
|
email,
|
|
|
|
|
firstName: firstName || undefined,
|
|
|
|
|
lastName: lastName || undefined,
|
|
|
|
|
avatar: avatarUrl ?? undefined
|
|
|
|
|
});
|
|
|
|
|
}
|
2026-06-07 18:43:05 +01:00
|
|
|
|
|
|
|
|
export function clearUserJotUser(): void {
|
|
|
|
|
if (!isWidgetAllowed()) return;
|
|
|
|
|
|
|
|
|
|
ensureSdkLoaded();
|
|
|
|
|
|
|
|
|
|
window.uj.identify(null);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export type UserJotWidgetSection = 'feedback' | 'roadmap' | 'updates';
|
|
|
|
|
|
|
|
|
|
export function showUserJotWidget(section: UserJotWidgetSection): void {
|
|
|
|
|
if (!isWidgetAllowed()) return;
|
|
|
|
|
|
|
|
|
|
ensureSdkLoaded();
|
|
|
|
|
|
|
|
|
|
window.uj.showWidget({ section });
|
|
|
|
|
}
|