Radish alpha
r
Radicle web interface
Radicle
Git (anonymous pull)
Log in to clone via SSH
Lift branch/peer selector data into main views
Thomas Scholtes committed 2 years ago
commit 1b6bed73a61e399371e3230988477ebe88eef68c
parent 9c1392598a59b39ea9f8501103dfc80a2cba55b0
5 files changed +71 -95
modified src/views/projects/Browser.svelte
@@ -1,7 +1,7 @@
<script lang="ts">
  import type { BaseUrl, Project, Remote, Tree } from "@httpd-client";
  import type { BlobResult } from "./router";
-
  import type { LoadedSourceBrowsingView } from "@app/views/projects/router";
+
  import type { Route } from "@app/lib/router";

  import * as utils from "@app/lib/utils";
  import { HttpdClient } from "@httpd-client";
@@ -23,7 +23,6 @@
  export let project: Project;
  export let revision: string | undefined;
  export let tree: Tree;
-
  export let view: LoadedSourceBrowsingView;

  export let blobResult: BlobResult;

@@ -46,6 +45,28 @@
        return undefined;
      });
  };
+

+
  $: peersWithRoute = peers.map(remote => ({
+
    remote,
+
    selected: remote.id === peer,
+
    route: {
+
      resource: "project.tree",
+
      seed: baseUrl,
+
      project: project.id,
+
      peer: remote.id,
+
    } as Route,
+
  }));
+

+
  $: branchesWithRoute = Object.keys(branches || {}).map(name => ({
+
    name,
+
    route: {
+
      resource: "project.tree",
+
      seed: baseUrl,
+
      project: project.id,
+
      peer,
+
      revision: name,
+
    } as Route,
+
  }));
</script>

<style>
@@ -132,13 +153,12 @@
  defaultBranch={project.defaultBranch}
  projectId={project.id}
  {baseUrl}
-
  {branches}
+
  branches={branchesWithRoute}
  {commitCount}
  {contributorCount}
-
  {peers}
-
  {peer}
+
  peers={peersWithRoute}
  {revision}
-
  {view} />
+
  historyLinkActive={false} />

<main>
  <!-- Mobile navigation -->
modified src/views/projects/History.svelte
@@ -1,6 +1,6 @@
<script lang="ts">
  import type { BaseUrl, CommitHeader, Project, Remote } from "@httpd-client";
-
  import type { LoadedSourceBrowsingView } from "@app/views/projects/router";
+
  import type { Route } from "@app/lib/router";

  import { HttpdClient } from "@httpd-client";
  import { groupCommits } from "@app/lib/commit";
@@ -22,7 +22,6 @@
  export let project: Project;
  export let revision: string | undefined;
  export let totalCommitCount: number;
-
  export let view: LoadedSourceBrowsingView;

  const api = new HttpdClient(baseUrl);

@@ -55,6 +54,28 @@
    }
    loading = false;
  }
+

+
  $: peersWithRoute = peers.map(remote => ({
+
    remote,
+
    selected: remote.id === peer,
+
    route: {
+
      resource: "project.history",
+
      seed: baseUrl,
+
      project: project.id,
+
      peer: remote.id,
+
    } as Route,
+
  }));
+

+
  $: branchesWithRoute = Object.keys(branches || {}).map(name => ({
+
    name,
+
    route: {
+
      resource: "project.history",
+
      seed: baseUrl,
+
      project: project.id,
+
      peer,
+
      revision: name,
+
    } as Route,
+
  }));
</script>

<style>
@@ -87,13 +108,12 @@
  projectId={project.id}
  commitId={commitHeaders[0].id}
  {baseUrl}
-
  {branches}
+
  branches={branchesWithRoute}
  {commitCount}
  {contributorCount}
-
  {peers}
-
  {peer}
+
  peers={peersWithRoute}
  {revision}
-
  {view} />
+
  historyLinkActive={true} />

<div class="history">
  {#each groupCommits(allCommitHeaders) as group (group.time)}
modified src/views/projects/SourceBrowsingHeader.svelte
@@ -1,7 +1,6 @@
<script lang="ts">
  import type { BaseUrl, Remote } from "@httpd-client";
  import { type Route } from "@app/lib/router";
-
  import type { LoadedSourceBrowsingView } from "@app/views/projects/router";

  import { pluralize } from "@app/lib/pluralize";

@@ -9,17 +8,15 @@
  import PeerSelector from "@app/views/projects/PeerSelector.svelte";
  import Link from "@app/components/Link.svelte";
  import SquareButton from "@app/components/SquareButton.svelte";
-
  import { unreachable } from "@app/lib/utils";

  export let baseUrl: BaseUrl;
-
  export let branches: Record<string, string> | undefined;
+
  export let branches: Array<{ name: string; route: Route }>;
  export let commitCount: number;
  export let contributorCount: number;
  export let defaultBranch: string;
-
  export let peer: string | undefined;
-
  export let peers: Remote[];
+
  export let peers: Array<{ remote: Remote; selected: boolean; route: Route }>;
  export let projectId: string;
-
  export let view: LoadedSourceBrowsingView;
+
  export let historyLinkActive: boolean;
  export let revision: string | undefined;
  export let commitId: string;

@@ -35,61 +32,7 @@
    selectedBranch = revision || defaultBranch;
  }

-
  $: peersWithRoute = peers.map(remote => ({
-
    remote,
-
    selected: remote.id === peer,
-
    route: makePeerRoute(view, remote.id),
-
  }));
-

-
  function makePeerRoute(view: LoadedSourceBrowsingView, peer: string): Route {
-
    if (view.resource === "tree") {
-
      return {
-
        resource: "project.tree",
-
        seed: baseUrl,
-
        project: projectId,
-
        peer,
-
      };
-
    } else if (view.resource === "history") {
-
      return {
-
        resource: "project.history",
-
        seed: baseUrl,
-
        project: projectId,
-
        peer,
-
      };
-
    } else {
-
      return unreachable(view);
-
    }
-
  }
-

-
  $: branchesWithRoute = Object.keys(branches || {}).map(name => ({
-
    name,
-
    route: makeBranchRoute(name, view),
-
  }));
-

-
  function makeBranchRoute(
-
    revision: string,
-
    view: LoadedSourceBrowsingView,
-
  ): Route {
-
    if (view.resource === "tree") {
-
      return {
-
        resource: "project.tree",
-
        seed: baseUrl,
-
        project: projectId,
-
        peer,
-
        revision,
-
      };
-
    } else if (view.resource === "history") {
-
      return {
-
        resource: "project.history",
-
        seed: baseUrl,
-
        project: projectId,
-
        peer,
-
        revision,
-
      };
-
    } else {
-
      return unreachable(view);
-
    }
-
  }
+
  $: peer = peers.find(p => p.selected)?.remote.id;
</script>

<style>
@@ -115,14 +58,11 @@
</style>

<div class="header">
-
  {#if peersWithRoute.length > 0}
-
    <PeerSelector peers={peersWithRoute} />
+
  {#if peers.length > 0}
+
    <PeerSelector {peers} />
  {/if}

-
  <BranchSelector
-
    branches={branchesWithRoute}
-
    selectedCommitId={commitId}
-
    {selectedBranch} />
+
  <BranchSelector {branches} selectedCommitId={commitId} {selectedBranch} />

  <Link
    route={{
@@ -132,7 +72,7 @@
      peer,
      revision,
    }}>
-
    <SquareButton active={view.resource === "history"}>
+
    <SquareButton active={historyLinkActive}>
      <span class="txt-bold">{commitCount}</span>
      {pluralize("commit", commitCount)}
    </SquareButton>
modified src/views/projects/View.svelte
@@ -73,8 +73,7 @@
      {baseUrl}
      {peer}
      {project}
-
      revision={view.revision}
-
      {view} />
+
      revision={view.revision} />
  {:else if view.resource === "history"}
    <History
      branches={view.params.loadedBranches}
@@ -86,8 +85,7 @@
      {baseUrl}
      {peer}
      {project}
-
      revision={view.revision}
-
      {view} />
+
      revision={view.revision} />
  {:else if view.resource === "commit"}
    <Commit commit={view.commit} {baseUrl} {project} />
  {:else if view.resource === "issues"}
modified src/views/projects/router.ts
@@ -100,7 +100,8 @@ export interface ProjectLoadedParams {
  project: Project;
  view: ProjectLoadedView;
}
-
export type LoadedSourceBrowsingView =
+

+
export type ProjectLoadedView =
  | {
      resource: "tree";
      peer: string | undefined;
@@ -116,16 +117,7 @@ export type LoadedSourceBrowsingView =
      params: LoadedSourceBrowsingParams;
      commitHeaders: CommitHeader[];
      totalCommitCount: number;
-
    };
-

-
interface LoadedSourceBrowsingParams {
-
  loadedBranches: Record<string, string> | undefined;
-
  loadedPeers: Remote[];
-
  loadedTree: Tree;
-
}
-

-
export type ProjectLoadedView =
-
  | LoadedSourceBrowsingView
+
    }
  | {
      resource: "commit";
      commit: Commit;
@@ -136,6 +128,12 @@ export type ProjectLoadedView =
  | { resource: "patches"; search: string }
  | PatchView;

+
interface LoadedSourceBrowsingParams {
+
  loadedBranches: Record<string, string> | undefined;
+
  loadedPeers: Remote[];
+
  loadedTree: Tree;
+
}
+

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