* fix repo in api client Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org> * web: re-organise files to match their interface Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org> * core: include version in script tags Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org> * cleanup maybe broken Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org> * revert rename Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org> * web: get rid of Client.ts Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org> * move more to common Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org> * more moving Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org> * format Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org> * unfuck files that vscode fucked, thanks Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org> * move more Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org> * finish moving (maybe) Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org> * ok more moving Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org> * fix more stuff that vs code destroyed Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org> * get rid "web" prefix for virtual package Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org> * fix locales Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org> * use custom base element Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org> * fix css file Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org> * don't run autoDetectLanguage when importing locale Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org> * fix circular dependencies Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org> * web: fix build Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org> Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>
		
			
				
	
	
		
			67 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			67 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import "@goauthentik/elements/EmptyState";
 | 
						|
 | 
						|
import { TemplateResult, html } from "lit";
 | 
						|
import { until } from "lit/directives/until.js";
 | 
						|
 | 
						|
export const SLUG_REGEX = "[-a-zA-Z0-9_]+";
 | 
						|
export const ID_REGEX = "\\d+";
 | 
						|
export const UUID_REGEX = "[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}";
 | 
						|
 | 
						|
export interface RouteArgs {
 | 
						|
    [key: string]: string;
 | 
						|
}
 | 
						|
 | 
						|
export class Route {
 | 
						|
    url: RegExp;
 | 
						|
 | 
						|
    private element?: TemplateResult;
 | 
						|
    private callback?: (args: RouteArgs) => Promise<TemplateResult>;
 | 
						|
 | 
						|
    constructor(url: RegExp, callback?: (args: RouteArgs) => Promise<TemplateResult>) {
 | 
						|
        this.url = url;
 | 
						|
        this.callback = callback;
 | 
						|
    }
 | 
						|
 | 
						|
    redirect(to: string, raw = false): Route {
 | 
						|
        this.callback = async () => {
 | 
						|
            console.debug(`authentik/router: redirecting ${to}`);
 | 
						|
            if (!raw) {
 | 
						|
                window.location.hash = `#${to}`;
 | 
						|
            } else {
 | 
						|
                window.location.hash = to;
 | 
						|
            }
 | 
						|
            return html``;
 | 
						|
        };
 | 
						|
        return this;
 | 
						|
    }
 | 
						|
 | 
						|
    then(render: (args: RouteArgs) => TemplateResult): Route {
 | 
						|
        this.callback = async (args) => {
 | 
						|
            return render(args);
 | 
						|
        };
 | 
						|
        return this;
 | 
						|
    }
 | 
						|
 | 
						|
    thenAsync(render: (args: RouteArgs) => Promise<TemplateResult>): Route {
 | 
						|
        this.callback = render;
 | 
						|
        return this;
 | 
						|
    }
 | 
						|
 | 
						|
    render(args: RouteArgs): TemplateResult {
 | 
						|
        if (this.callback) {
 | 
						|
            return html`${until(
 | 
						|
                this.callback(args),
 | 
						|
                html`<ak-empty-state ?loading=${true}></ak-empty-state>`,
 | 
						|
            )}`;
 | 
						|
        }
 | 
						|
        if (this.element) {
 | 
						|
            return this.element;
 | 
						|
        }
 | 
						|
        throw new Error("Route does not have callback or element");
 | 
						|
    }
 | 
						|
 | 
						|
    toString(): string {
 | 
						|
        return `<Route url=${this.url} callback=${this.callback ? "true" : "false"}>`;
 | 
						|
    }
 | 
						|
}
 |