Radish alpha
r
rad:z4V1sjrXqjvFdnCUbxPFqd5p4DtH5
Radicle web interface
Radicle
Git
radicle-explorer src lib router definitions.ts
import type { BaseUrl } from "@http-client";
import type {
  ResponseError,
  ResponseParseError,
} from "@http-client/lib/fetcher";
import type { RepoLoadedRoute, RepoRoute } from "@app/views/repos/router";
import type { UserLoadedRoute, UserRoute } from "@app/views/users/router";
import type { NodesRoute, NodesLoadedRoute } from "@app/views/nodes/router";
import type { ComponentProps } from "svelte";
import type IconLarge from "@app/components/IconLarge.svelte";

import { loadRepoRoute } from "@app/views/repos/router";
import { loadUserRoute } from "@app/views/users/router";
import { loadNodeRoute } from "@app/views/nodes/router";

interface BootingRoute {
  resource: "booting";
}

export interface NotFoundRoute {
  resource: "notFound";
  params: { title: string; description?: string; baseUrl?: BaseUrl };
}

export type ErrorParam = Error | ResponseParseError | ResponseError | undefined;

export interface ErrorRoute {
  resource: "error";
  params: {
    title: string;
    description: string;
    error?: ErrorParam;
    icon?: ComponentProps<IconLarge>["name"];
  };
}

export type Route =
  | BootingRoute
  | UserRoute
  | ErrorRoute
  | NotFoundRoute
  | RepoRoute
  | NodesRoute;

export type LoadedRoute =
  | BootingRoute
  | UserLoadedRoute
  | ErrorRoute
  | NotFoundRoute
  | RepoLoadedRoute
  | NodesLoadedRoute;

export async function loadRoute(
  route: Route,
  previousLoaded: LoadedRoute,
): Promise<LoadedRoute> {
  if (route.resource === "nodes") {
    return await loadNodeRoute(route.params);
  } else if (route.resource === "users") {
    return await loadUserRoute(route);
  } else if (
    route.resource === "repo.source" ||
    route.resource === "repo.history" ||
    route.resource === "repo.commit" ||
    route.resource === "repo.issues" ||
    route.resource === "repo.issue" ||
    route.resource === "repo.patches" ||
    route.resource === "repo.patch"
  ) {
    return await loadRepoRoute(route, previousLoaded);
  } else {
    return route;
  }
}