Radish alpha
r
Radicle web interface
Radicle
Git (anonymous pull)
Log in to clone via SSH
Move patch loading to router
Rūdolfs Ošiņš committed 2 years ago
commit 833805f7076a30b991738c7bf1d3491322e3d7ac
parent 55fec2f343fe468eb4f98de21405241a1f5bf20a
2 files changed +48 -20
modified src/views/projects/View.svelte
@@ -174,24 +174,17 @@
      state={patchFilter}
      patchCounters={project.patches} />
  {:else if view.resource === "patch"}
-
    {#await api.project.getPatchById(id, view.params.patch)}
-
      <Loading center />
-
    {:then patch}
-
      {@const latestRevision = patch.revisions[patch.revisions.length - 1]}
-
      <Patch
-
        {patch}
-
        {baseUrl}
-
        projectId={id}
-
        projectDefaultBranch={project.defaultBranch}
-
        projectHead={project.head}
-
        revision={view.params.revision ?? latestRevision.id}
-
        currentTab={patchTabFilter}
-
        diff={patchDiffFilter} />
-
    {:catch e}
-
      <div class="message">
-
        <ErrorMessage message="Couldn't load patch." stackTrace={e} />
-
      </div>
-
    {/await}
+
    {@const patch = view.params.loadedPatch}
+
    {@const latestRevision = patch.revisions[patch.revisions.length - 1]}
+
    <Patch
+
      {patch}
+
      {baseUrl}
+
      projectId={id}
+
      projectDefaultBranch={project.defaultBranch}
+
      projectHead={project.head}
+
      revision={view.params.revision ?? latestRevision.id}
+
      currentTab={patchTabFilter}
+
      diff={patchDiffFilter} />
  {:else}
    {unreachable(view)}
  {/if}
modified src/views/projects/router.ts
@@ -1,5 +1,5 @@
import type { LoadError } from "@app/lib/router/definitions";
-
import type { Project, Remote, Tree, Issue } from "@httpd-client";
+
import type { Issue, Patch, Project, Remote, Tree } from "@httpd-client";

import { get } from "svelte/store";

@@ -92,7 +92,10 @@ export type ProjectLoadedView =
        view: { resource: "new" };
      };
    }
-
  | { resource: "patch"; params: { patch: string; revision?: string } };
+
  | {
+
      resource: "patch";
+
      params: { patch: string; revision?: string; loadedPatch: Patch };
+
    };

// We need a SHA1 commit in some places, so we return early if the revision is
// a SHA and else we look into branches.
@@ -231,6 +234,38 @@ export async function loadProjectRoute(
          },
        };
      }
+
    } else if (params.view.resource === "patch") {
+
      try {
+
        const projectPromise = api.project.getById(params.id);
+
        const patchPromise = api.project.getPatchById(
+
          params.id,
+
          params.view.params.patch,
+
        );
+
        const [project, patch] = await Promise.all([
+
          projectPromise,
+
          patchPromise,
+
        ]);
+
        return {
+
          resource: "projects",
+
          params: {
+
            ...params,
+
            project,
+
            view: {
+
              resource: "patch",
+
              params: { ...params.view.params, loadedPatch: patch },
+
            },
+
          },
+
        };
+
      } catch (error: any) {
+
        return {
+
          resource: "loadError",
+
          params: {
+
            title: params.view.params.patch,
+
            errorMessage: "Not able to load this patch.",
+
            stackTrace: error.stack,
+
          },
+
        };
+
      }
    } else {
      const project = await api.project.getById(params.id);
      return {