2024-04-07 06:08:34 +01:00
|
|
|
import { goto } from '$app/navigation';
|
2025-11-24 01:00:50 +01:00
|
|
|
import { resolve } from '$app/paths';
|
2024-04-07 06:08:34 +01:00
|
|
|
|
2023-09-11 11:47:30 +01:00
|
|
|
export function genQuizPin(): number {
|
2025-11-01 15:49:29 +01:00
|
|
|
const minm = 100000;
|
|
|
|
|
const maxm = 999999;
|
2023-09-11 11:47:30 +01:00
|
|
|
return Math.floor(Math.random() * (maxm - minm + 1)) + minm;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export function generateSitename(orgName: string): string {
|
|
|
|
|
return orgName
|
|
|
|
|
.toLowerCase()
|
|
|
|
|
.replace(/\s+/g, '-')
|
|
|
|
|
.replace(/[^a-zA-Z0-9-]/g, '');
|
|
|
|
|
}
|
2024-04-07 06:08:34 +01:00
|
|
|
|
2026-07-12 11:33:04 +01:00
|
|
|
function navigateToUpgradeModal(removeParams: string[]) {
|
2024-04-07 06:08:34 +01:00
|
|
|
const url = new URL(window.location.href);
|
|
|
|
|
|
2026-07-12 11:33:04 +01:00
|
|
|
for (const param of removeParams) {
|
|
|
|
|
url.searchParams.delete(param);
|
|
|
|
|
}
|
|
|
|
|
|
2024-04-07 06:08:34 +01:00
|
|
|
url.searchParams.set('upgrade', 'true');
|
|
|
|
|
|
2026-07-12 11:33:04 +01:00
|
|
|
goto(resolve(url.pathname + `?${url.searchParams.toString()}`, {}));
|
|
|
|
|
}
|
2024-04-07 06:08:34 +01:00
|
|
|
|
2026-07-12 11:33:04 +01:00
|
|
|
/** Opens the in-app upgrade modal by setting `?upgrade=true`. Safe to use directly as an event handler. */
|
|
|
|
|
export function openUpgradeModal() {
|
|
|
|
|
navigateToUpgradeModal([]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Opens the upgrade modal while dropping query params that keep another modal
|
|
|
|
|
* open (e.g. `['add']` for the invite modal), so the upgrade modal isn't
|
|
|
|
|
* stacked behind it — done in a single navigation to avoid a read-after-goto race.
|
|
|
|
|
*/
|
|
|
|
|
export function openUpgradeModalOver(removeParams: string[]) {
|
|
|
|
|
navigateToUpgradeModal(removeParams);
|
2025-11-24 01:00:50 +01:00
|
|
|
}
|