Radish alpha
r
Radicle web interface
Radicle
Git (anonymous pull)
Log in to clone via SSH
Flatten ProjectLoadedRoute type
Rūdolfs Ošiņš committed 2 years ago
commit 3cc485dce22ec48ad6fc10af9f53254b5905db15
parent d39fee871d00d4e87406859db9b5df1fe9bf8078
4 files changed +170 -178
modified src/App.svelte
@@ -68,58 +68,30 @@
<div class="app">
  <Header />
  <div class="wrapper">
-
    {#if $activeRouteStore.resource === "home"}
+
    {#if $activeRouteStore.resource === "booting"}
+
      <Loading />
+
    {:else if $activeRouteStore.resource === "home"}
      <Home {...$activeRouteStore.params} />
    {:else if $activeRouteStore.resource === "nodes"}
      <Nodes {...$activeRouteStore.params} />
    {:else if $activeRouteStore.resource === "session"}
      <Session activeRoute={$activeRouteStore} />
-
    {:else if $activeRouteStore.resource === "projects"}
-
      {#if $activeRouteStore.params.view.resource === "tree"}
-
        <Browser
-
          {...$activeRouteStore.params.view}
-
          baseUrl={$activeRouteStore.params.baseUrl}
-
          project={$activeRouteStore.params.project} />
-
      {:else if $activeRouteStore.params.view.resource === "history"}
-
        <History
-
          {...$activeRouteStore.params.view}
-
          baseUrl={$activeRouteStore.params.baseUrl}
-
          project={$activeRouteStore.params.project} />
-
      {:else if $activeRouteStore.params.view.resource === "commit"}
-
        <Commit
-
          {...$activeRouteStore.params.view}
-
          baseUrl={$activeRouteStore.params.baseUrl}
-
          project={$activeRouteStore.params.project} />
-
      {:else if $activeRouteStore.params.view.resource === "issues"}
-
        <Issues
-
          {...$activeRouteStore.params.view}
-
          baseUrl={$activeRouteStore.params.baseUrl}
-
          project={$activeRouteStore.params.project} />
-
      {:else if $activeRouteStore.params.view.resource === "newIssue"}
-
        <NewIssue
-
          {...$activeRouteStore.params.view}
-
          baseUrl={$activeRouteStore.params.baseUrl}
-
          project={$activeRouteStore.params.project} />
-
      {:else if $activeRouteStore.params.view.resource === "issue"}
-
        <Issue
-
          {...$activeRouteStore.params.view}
-
          baseUrl={$activeRouteStore.params.baseUrl}
-
          project={$activeRouteStore.params.project} />
-
      {:else if $activeRouteStore.params.view.resource === "patches"}
-
        <Patches
-
          {...$activeRouteStore.params.view}
-
          baseUrl={$activeRouteStore.params.baseUrl}
-
          project={$activeRouteStore.params.project} />
-
      {:else if $activeRouteStore.params.view.resource === "patch"}
-
        <Patch
-
          {...$activeRouteStore.params.view}
-
          baseUrl={$activeRouteStore.params.baseUrl}
-
          project={$activeRouteStore.params.project} />
-
      {:else}
-
        {unreachable($activeRouteStore.params.view)}
-
      {/if}
-
    {:else if $activeRouteStore.resource === "booting"}
-
      <Loading />
+
    {:else if $activeRouteStore.resource === "project.tree"}
+
      <Browser {...$activeRouteStore.params} />
+
    {:else if $activeRouteStore.resource === "project.history"}
+
      <History {...$activeRouteStore.params} />
+
    {:else if $activeRouteStore.resource === "project.commit"}
+
      <Commit {...$activeRouteStore.params} />
+
    {:else if $activeRouteStore.resource === "project.issues"}
+
      <Issues {...$activeRouteStore.params} />
+
    {:else if $activeRouteStore.resource === "project.newIssue"}
+
      <NewIssue {...$activeRouteStore.params} />
+
    {:else if $activeRouteStore.resource === "project.issue"}
+
      <Issue {...$activeRouteStore.params} />
+
    {:else if $activeRouteStore.resource === "project.patches"}
+
      <Patches {...$activeRouteStore.params} />
+
    {:else if $activeRouteStore.resource === "project.patch"}
+
      <Patch {...$activeRouteStore.params} />
    {:else if $activeRouteStore.resource === "loadError"}
      <LoadError {...$activeRouteStore.params} />
    {:else if $activeRouteStore.resource === "notFound"}
modified src/lib/router.ts
@@ -126,7 +126,16 @@ function setTitle(loadedRoute: LoadedRoute) {
  } else if (loadedRoute.resource === "notFound") {
    title.push("Page not found");
    title.push("Radicle");
-
  } else if (loadedRoute.resource === "projects") {
+
  } else if (
+
    loadedRoute.resource === "project.tree" ||
+
    loadedRoute.resource === "project.history" ||
+
    loadedRoute.resource === "project.commit" ||
+
    loadedRoute.resource === "project.issue" ||
+
    loadedRoute.resource === "project.issues" ||
+
    loadedRoute.resource === "project.newIssue" ||
+
    loadedRoute.resource === "project.patches" ||
+
    loadedRoute.resource === "project.patch"
+
  ) {
    title.push(...projectTitle(loadedRoute));
  } else if (loadedRoute.resource === "nodes") {
    title.push(loadedRoute.params.baseUrl.hostname);
modified src/views/projects/Patch.svelte
@@ -58,7 +58,7 @@
  export let baseUrl: BaseUrl;
  export let patch: Patch;
  export let project: Project;
-
  export let view: PatchView["view"];
+
  export let view: PatchView;

  $: api = new HttpdClient(baseUrl);

modified src/views/projects/router.ts
@@ -95,77 +95,112 @@ interface ProjectPatchesRoute {
  search?: string;
}

-
export interface ProjectLoadedRoute {
-
  resource: "projects";
-
  params: ProjectLoadedParams;
-
}
+
export type ProjectLoadedRoute =
+
  | {
+
      resource: "project.tree";
+
      params: {
+
        baseUrl: BaseUrl;
+
        project: Project;
+
        peers: Remote[];
+
        peer: string | undefined;
+
        branches: string[];
+
        revision: string | undefined;
+
        tree: Tree;
+
        path: string;
+
        blobResult: BlobResult;
+
      };
+
    }
+
  | {
+
      resource: "project.history";
+
      params: {
+
        baseUrl: BaseUrl;
+
        project: Project;
+
        peers: Remote[];
+
        peer: string | undefined;
+
        branches: string[];
+
        revision: string | undefined;
+
        tree: Tree;
+
        commitHeaders: CommitHeader[];
+
        totalCommitCount: number;
+
      };
+
    }
+
  | {
+
      resource: "project.commit";
+
      params: {
+
        baseUrl: BaseUrl;
+
        project: Project;

-
export interface ProjectLoadedParams {
-
  baseUrl: BaseUrl;
-
  project: Project;
-
  view: ProjectLoadedView;
-
}
+
        commit: Commit;
+
      };
+
    }
+
  | {
+
      resource: "project.issue";
+
      params: {
+
        baseUrl: BaseUrl;
+
        project: Project;

-
export type ProjectLoadedView =
-
  | TreeView
-
  | HistoryView
+
        issue: Issue;
+
      };
+
    }
  | {
-
      resource: "commit";
-
      commit: Commit;
+
      resource: "project.issues";
+
      params: {
+
        baseUrl: BaseUrl;
+
        project: Project;
+

+
        issues: Issue[];
+
        state: IssueState["status"];
+
      };
    }
-
  | { resource: "issue"; issue: Issue }
-
  | { resource: "issues"; issues: Issue[]; state: IssueState["status"] }
-
  | { resource: "newIssue" }
-
  | { resource: "patches"; patches: Patch[]; state: PatchState["status"] }
-
  | PatchView;
-

-
export interface TreeView {
-
  resource: "tree";
-
  peers: Remote[];
-
  peer: string | undefined;
-
  branches: string[];
-
  revision: string | undefined;
-
  tree: Tree;
-
  path: string;
-
  blobResult: BlobResult;
-
}
+
  | {
+
      resource: "project.newIssue";
+
      params: {
+
        baseUrl: BaseUrl;
+
        project: Project;
+
      };
+
    }
+
  | {
+
      resource: "project.patches";
+
      params: {
+
        baseUrl: BaseUrl;
+
        project: Project;
+

+
        patches: Patch[];
+
        state: PatchState["status"];
+
      };
+
    }
+
  | {
+
      resource: "project.patch";
+
      params: {
+
        baseUrl: BaseUrl;
+
        project: Project;
+

+
        patch: Patch;
+
        view: PatchView;
+
      };
+
    };

export type BlobResult =
  | { ok: true; blob: Blob; highlighted: Syntax.Root | undefined }
  | { ok: false; error: { message: string; path: string } };

-
export interface HistoryView {
-
  resource: "history";
-
  peers: Remote[];
-
  peer: string | undefined;
-
  branches: string[];
-
  revision: string | undefined;
-
  tree: Tree;
-
  commitHeaders: CommitHeader[];
-
  totalCommitCount: number;
-
}
-

-
export interface PatchView {
-
  resource: "patch";
-
  patch: Patch;
-
  view:
-
    | {
-
        name: "activity";
-
        revision: string;
-
      }
-
    | {
-
        name: "commits" | "files";
-
        revision: string;
-
        diff: Diff;
-
        commits: CommitHeader[];
-
      }
-
    | {
-
        name: "diff";
-
        diff: Diff;
-
        fromCommit: string;
-
        toCommit: string;
-
      };
-
}
+
export type PatchView =
+
  | {
+
      name: "activity";
+
      revision: string;
+
    }
+
  | {
+
      name: "commits" | "files";
+
      revision: string;
+
      diff: Diff;
+
      commits: CommitHeader[];
+
    }
+
  | {
+
      name: "diff";
+
      diff: Diff;
+
      fromCommit: string;
+
      toCommit: string;
+
    };

// Check whether the input is a SHA1 commit.
function isOid(input: string): boolean {
@@ -209,14 +244,11 @@ export async function loadProjectRoute(
      ]);

      return {
-
        resource: "projects",
+
        resource: "project.commit",
        params: {
          baseUrl: route.node,
          project,
-
          view: {
-
            resource: "commit",
-
            commit,
-
          },
+
          commit,
        },
      };
    } else if (route.resource === "project.issue") {
@@ -226,14 +258,11 @@ export async function loadProjectRoute(
          api.project.getIssueById(route.project, route.issue),
        ]);
        return {
-
          resource: "projects",
+
          resource: "project.issue",
          params: {
            baseUrl: route.node,
            project,
-
            view: {
-
              resource: "issue",
-
              issue,
-
            },
+
            issue,
          },
        };
      } catch (error: any) {
@@ -253,12 +282,9 @@ export async function loadProjectRoute(
    } else if (route.resource === "project.newIssue") {
      const project = await api.project.getById(route.project);
      return {
-
        resource: "projects",
+
        resource: "project.newIssue",
        params: {
          baseUrl: route.node,
-
          view: {
-
            resource: "newIssue",
-
          },
          project,
        },
      };
@@ -296,14 +322,11 @@ async function loadPatchesView(
  ]);

  return {
-
    resource: "projects",
+
    resource: "project.patches",
    params: {
      baseUrl: route.node,
-
      view: {
-
        resource: "patches",
-
        patches,
-
        state,
-
      },
+
      patches,
+
      state,
      project,
    },
  };
@@ -325,14 +348,11 @@ async function loadIssuesView(
  ]);

  return {
-
    resource: "projects",
+
    resource: "project.issues",
    params: {
      baseUrl: route.node,
-
      view: {
-
        resource: "issues",
-
        issues,
-
        state,
-
      },
+
      issues,
+
      state,
      project,
    },
  };
@@ -371,20 +391,17 @@ async function loadTreeView(
    loadBlob(api, project.id, commit, path),
  ]);
  return {
-
    resource: "projects",
+
    resource: "project.tree",
    params: {
      baseUrl: route.node,
      project,
-
      view: {
-
        resource: "tree",
-
        peers,
-
        peer: route.peer,
-
        branches: Object.keys(branchMap || {}),
-
        revision: route.revision,
-
        tree,
-
        path,
-
        blobResult,
-
      },
+
      peers,
+
      peer: route.peer,
+
      branches: Object.keys(branchMap || {}),
+
      revision: route.revision,
+
      tree,
+
      path,
+
      blobResult,
    },
  };
}
@@ -465,20 +482,17 @@ async function loadHistoryView(
  ]);

  return {
-
    resource: "projects",
+
    resource: "project.history",
    params: {
      baseUrl: route.node,
      project,
-
      view: {
-
        resource: "history",
-
        peers,
-
        peer: route.peer,
-
        branches: Object.keys(branchMap || {}),
-
        revision: route.revision,
-
        tree,
-
        commitHeaders: commitsResponse.commits.map(c => c.commit),
-
        totalCommitCount: commitsResponse.stats.commits,
-
      },
+
      peers,
+
      peer: route.peer,
+
      branches: Object.keys(branchMap || {}),
+
      revision: route.revision,
+
      tree,
+
      commitHeaders: commitsResponse.commits.map(c => c.commit),
+
      totalCommitCount: commitsResponse.stats.commits,
    },
  };
}
@@ -493,7 +507,7 @@ async function loadPatchView(
  ]);
  const latestRevision = patch.revisions[patch.revisions.length - 1];

-
  let view: PatchView["view"];
+
  let view: PatchView;
  switch (route.view?.name) {
    case "activity":
    case undefined: {
@@ -536,15 +550,12 @@ async function loadPatchView(
    }
  }
  return {
-
    resource: "projects",
+
    resource: "project.patch",
    params: {
      baseUrl: route.node,
      project,
-
      view: {
-
        resource: "patch",
-
        patch,
-
        view,
-
      },
+
      patch,
+
      view,
    },
  };
}
@@ -826,31 +837,31 @@ function patchRouteToPath(route: ProjectPatchRoute): string {
export function projectTitle(loadedRoute: ProjectLoadedRoute) {
  const title: string[] = [];

-
  if (loadedRoute.params.view.resource === "tree") {
+
  if (loadedRoute.resource === "project.tree") {
    title.push(loadedRoute.params.project.name);
    title.push(loadedRoute.params.project.description);
-
  } else if (loadedRoute.params.view.resource === "commit") {
-
    title.push(loadedRoute.params.view.commit.commit.summary);
+
  } else if (loadedRoute.resource === "project.commit") {
+
    title.push(loadedRoute.params.commit.commit.summary);
    title.push("commit");
-
  } else if (loadedRoute.params.view.resource === "history") {
+
  } else if (loadedRoute.resource === "project.history") {
    title.push(loadedRoute.params.project.name);
    title.push("history");
-
  } else if (loadedRoute.params.view.resource === "newIssue") {
+
  } else if (loadedRoute.resource === "project.newIssue") {
    title.push("new issue");
-
  } else if (loadedRoute.params.view.resource === "issue") {
-
    title.push(loadedRoute.params.view.issue.title);
+
  } else if (loadedRoute.resource === "project.issue") {
+
    title.push(loadedRoute.params.issue.title);
    title.push("issue");
-
  } else if (loadedRoute.params.view.resource === "issues") {
+
  } else if (loadedRoute.resource === "project.issues") {
    title.push(loadedRoute.params.project.name);
    title.push("issues");
-
  } else if (loadedRoute.params.view.resource === "patch") {
-
    title.push(loadedRoute.params.view.patch.title);
+
  } else if (loadedRoute.resource === "project.patch") {
+
    title.push(loadedRoute.params.patch.title);
    title.push("patch");
-
  } else if (loadedRoute.params.view.resource === "patches") {
+
  } else if (loadedRoute.resource === "project.patches") {
    title.push(loadedRoute.params.project.name);
    title.push("patches");
  } else {
-
    return unreachable(loadedRoute.params.view);
+
    return unreachable(loadedRoute);
  }

  return title;