Login
4 branches 0 tags
Ben (Desktop/Arch) Stuff f187e7f 1 month ago 82 Commits
rubhub / frontend / app / app.ts
type SessionUser = {
	id: string;
	username: string;
};

function readSessionUser(): SessionUser | null {
	const cookie = document.cookie
		.split("; ")
		.find((row) => row.startsWith("session_user="));

	if (!cookie) return null;

	try {
		const value = decodeURIComponent(cookie.split("=")[1]);
		const parsed = JSON.parse(value);
		if (parsed?.id && parsed?.username) {
			return { id: parsed.id, username: parsed.username };
		}
	} catch (_) {
		return null;
	}

	return null;
}

const browseLink = document.querySelector<HTMLAnchorElement>("#browse-link");
if (browseLink) {
	const user = readSessionUser();
	browseLink.href = user ? `/${user.username}` : "/login";
}

const initBranchSwitcher = () => {
    for (const ele of document.querySelectorAll<HTMLSelectElement>("select.branch-switcher")) {
        const base = ele.getAttribute("data-base-href");
        if (!base) {
            continue;
        }
        const oldValue = ele.value;
        ele.onchange = e => {
            const newValue = ele.value;
            if (newValue == oldValue) {
                return;
            }
            const url = `${base}${newValue}`;
            document.location = url;
        };
    }
};
setTimeout(initBranchSwitcher, 0);