feat: add install guide share tokens and animations

This commit is contained in:
3252a8
2026-05-22 23:20:25 +03:00
parent d3925cad22
commit d9a4a007e2
14 changed files with 403 additions and 150 deletions
+5 -1
View File
@@ -606,9 +606,13 @@ export async function mockApi(path, options = {}, context = {}) {
if (path === "/me") return clone(DEV_MOCK.data);
if (path === "/subscription-guides") return clone(DEV_MOCK.data.subscription_guides);
if (cleanPath.startsWith("/subscription-guides/public/")) {
const shareToken = decodeURIComponent(cleanPath.split("/").pop() || "");
const subscription = clone(DEV_MOCK.data.subscription);
subscription.install_share_token = shareToken;
subscription.share_url = `${window.location.origin}/s/${shareToken}`;
return {
...clone(DEV_MOCK.data.subscription_guides),
subscription: clone(DEV_MOCK.data.subscription),
subscription,
};
}
if (path === "/auth/email/request") return { ok: true };
+2 -1
View File
@@ -276,7 +276,8 @@ export const DEV_MOCK = {
config_link: "https://sub.example.com/sub/preview-token",
connect_url: "https://sub.example.com/connect/preview-token",
panel_short_uuid: "preview-token",
install_share_url: "https://app.example.com/install/share/preview-token",
install_share_token: "8f559061460e8fede78ef18dce887236",
install_share_url: "https://app.example.com/s/8f559061460e8fede78ef18dce887236",
traffic_used: "18.4 GB",
traffic_limit: "100 GB",
traffic_used_bytes: 19756849561,
+3 -3
View File
@@ -29,10 +29,10 @@ export function sectionFromPath(pathname) {
return normalizeSection(section);
}
export function publicInstallShortUuidFromPath(pathname) {
export function publicInstallTokenFromPath(pathname) {
const normalized = String(pathname || "").trim().replace(/\/+$/, "");
const match = normalized.match(/^\/install\/share\/([A-Za-z0-9_-]{8,128})$/);
return match ? match[1] : "";
const match = normalized.match(/^\/s\/([a-f0-9]{32})$/i);
return match ? match[1].toLowerCase() : "";
}
export function adminSectionFromPath(pathname) {
@@ -62,8 +62,8 @@ export function createInstallGuidesStore({ api, t, showToast }) {
return fetchGuides("/subscription-guides", force);
}
async function loadPublic(shortUuid, force = false) {
const encoded = encodeURIComponent(String(shortUuid || ""));
async function loadPublic(shareToken, force = false) {
const encoded = encodeURIComponent(String(shareToken || ""));
return fetchGuides(`/subscription-guides/public/${encoded}`, force);
}