Radish alpha
r
rad:z4V1sjrXqjvFdnCUbxPFqd5p4DtH5
Radicle web interface
Radicle
Git
Change node param with seedingPolicies
Sebastian Martinez committed 1 year ago
commit 166934514e76aec14a407c7202e4638a9c67dfc6
parent b8171e3
12 files changed +124 -89
modified src/components/ScopePolicyExplainer.svelte
@@ -1,9 +1,11 @@
<script lang="ts">
-
  import type { DefaultSeedingPolicy } from "@http-client";
+
  import type { DefaultSeedingPolicy, SeedingPolicy } from "@http-client";

  import { capitalize } from "lodash";

-
  export let seedingPolicy: DefaultSeedingPolicy;
+
  export let seedingPolicy: DefaultSeedingPolicy | SeedingPolicy;
+

+
  $: [policy, scope] = Object.values(seedingPolicy);
</script>

<style>
@@ -15,15 +17,15 @@
  }
</style>

-
{#if seedingPolicy.default === "allow"}
+
{#if policy === "allow"}
  <div class="section">
    Scope:
-
    <span class="txt-bold">{capitalize(seedingPolicy.scope)}</span>
+
    <span class="txt-bold">{capitalize(scope)}</span>
  </div>
  <div class="txt-missing">
-
    {#if seedingPolicy.scope === "all"}
+
    {#if scope === "all"}
      All changes in seeded repositories, made by any peer, will be synced.
-
    {:else if seedingPolicy.scope === "followed"}
+
    {:else if scope === "followed"}
      Only changes made by explicitly followed peers will be synced.
    {/if}
  </div>
@@ -31,12 +33,12 @@

<div class="section">
  Policy:
-
  <span class="txt-bold">{capitalize(seedingPolicy.default)}</span>
+
  <span class="txt-bold">{capitalize(policy)}</span>
</div>
<div class="txt-missing">
-
  {#if seedingPolicy.default === "allow"}
+
  {#if policy === "allow"}
    All discovered repositories will get seeded.
-
  {:else if seedingPolicy.default === "block"}
+
  {:else if policy === "block"}
    Only repositories marked as such will get seeded.
  {/if}
</div>
modified src/views/projects/Commit.svelte
@@ -1,5 +1,5 @@
<script lang="ts">
-
  import type { BaseUrl, Commit, Node, Project } from "@http-client";
+
  import type { BaseUrl, Commit, Project, SeedingPolicy } from "@http-client";

  import Button from "@app/components/Button.svelte";
  import Changeset from "@app/views/projects/Changeset.svelte";
@@ -12,7 +12,7 @@
  import Id from "@app/components/Id.svelte";

  export let baseUrl: BaseUrl;
-
  export let node: Node;
+
  export let seedingPolicy: SeedingPolicy;
  export let commit: Commit;
  export let project: Project;

@@ -45,7 +45,7 @@
  }
</style>

-
<Layout {node} {baseUrl} {project}>
+
<Layout {seedingPolicy} {baseUrl} {project}>
  <div class="commit">
    <div class="header">
      <div style="display:flex; flex-direction: column; gap: 0.5rem;">
modified src/views/projects/History.svelte
@@ -4,8 +4,8 @@
    CommitHeader,
    Project,
    Remote,
-
    Node,
    Tree,
+
    SeedingPolicy,
  } from "@http-client";
  import type { ProjectRoute } from "./router";

@@ -24,7 +24,7 @@
  import ProjectNameHeader from "./Source/ProjectNameHeader.svelte";

  export let baseUrl: BaseUrl;
-
  export let node: Node;
+
  export let seedingPolicy: SeedingPolicy;
  export let commit: string;
  export let commitHeaders: CommitHeader[];
  export let peer: string | undefined;
@@ -90,7 +90,7 @@
  }
</style>

-
<Layout {node} {baseUrl} {project} activeTab="source">
+
<Layout {seedingPolicy} {baseUrl} {project} activeTab="source">
  <ProjectNameHeader {project} {baseUrl} {seeding} slot="header" />

  <div style:margin="1rem" slot="subheader">
modified src/views/projects/Issue.svelte
@@ -7,7 +7,7 @@
    Issue,
    IssueState,
    Project,
-
    Node,
+
    SeedingPolicy,
  } from "@http-client";
  import type { Session } from "@app/lib/httpd";

@@ -49,7 +49,7 @@
  import ThreadComponent from "@app/components/Thread.svelte";

  export let baseUrl: BaseUrl;
-
  export let node: Node;
+
  export let seedingPolicy: SeedingPolicy;
  export let issue: Issue;
  export let project: Project;
  export let rawPath: (commit?: string) => string;
@@ -484,7 +484,12 @@
  }
</style>

-
<Layout {node} {baseUrl} {project} activeTab="issues" stylePaddingBottom="0">
+
<Layout
+
  {seedingPolicy}
+
  {baseUrl}
+
  {project}
+
  activeTab="issues"
+
  stylePaddingBottom="0">
  <div class="issue">
    <div class="main">
      <CobHeader>
modified src/views/projects/Issue/New.svelte
@@ -1,5 +1,11 @@
<script lang="ts">
-
  import type { BaseUrl, Embed, Node, Project, Reaction } from "@http-client";
+
  import type {
+
    BaseUrl,
+
    Embed,
+
    Project,
+
    Reaction,
+
    SeedingPolicy,
+
  } from "@http-client";

  import * as modal from "@app/lib/modal";
  import * as router from "@app/lib/router";
@@ -17,7 +23,7 @@
  import TextInput from "@app/components/TextInput.svelte";

  export let baseUrl: BaseUrl;
-
  export let node: Node;
+
  export let seedingPolicy: SeedingPolicy;
  export let project: Project;
  export let rawPath: (commit?: string) => string;

@@ -100,7 +106,7 @@
  }
</style>

-
<Layout {node} {baseUrl} {project} activeTab="issues">
+
<Layout {seedingPolicy} {baseUrl} {project} activeTab="issues">
  {#if session}
    {@const session_ = session}
    <div class="form">
modified src/views/projects/Issues.svelte
@@ -1,5 +1,11 @@
<script lang="ts">
-
  import type { BaseUrl, Issue, IssueState, Node, Project } from "@http-client";
+
  import type {
+
    BaseUrl,
+
    Issue,
+
    IssueState,
+
    Project,
+
    SeedingPolicy,
+
  } from "@http-client";

  import capitalize from "lodash/capitalize";
  import { HttpdClient } from "@http-client";
@@ -24,7 +30,7 @@
  import Share from "./Share.svelte";

  export let baseUrl: BaseUrl;
-
  export let node: Node;
+
  export let seedingPolicy: SeedingPolicy;
  export let issues: Issue[];
  export let project: Project;
  export let state: IssueState["status"];
@@ -106,7 +112,7 @@
  }
</style>

-
<Layout {node} {baseUrl} {project} activeTab="issues">
+
<Layout {seedingPolicy} {baseUrl} {project} activeTab="issues">
  <div slot="header" style:display="flex" style:padding="1rem">
    <Popover
      popoverPadding="0"
modified src/views/projects/Layout.svelte
@@ -1,6 +1,6 @@
<script lang="ts">
  import type { ActiveTab } from "./Header.svelte";
-
  import type { BaseUrl, Node, Project } from "@http-client";
+
  import type { BaseUrl, Project, SeedingPolicy } from "@http-client";

  import AppHeader from "@app/App/Header.svelte";

@@ -11,7 +11,7 @@
  import Sidebar from "@app/views/projects/Sidebar.svelte";

  export let activeTab: ActiveTab | undefined = undefined;
-
  export let node: Node;
+
  export let seedingPolicy: SeedingPolicy;
  export let baseUrl: BaseUrl;
  export let project: Project;
  export let stylePaddingBottom: string = "2.5rem";
@@ -66,11 +66,11 @@
  </div>

  <div class="sidebar global-hide-on-medium-desktop-down">
-
    <Sidebar {node} {activeTab} {baseUrl} {project} />
+
    <Sidebar {seedingPolicy} {activeTab} {baseUrl} {project} />
  </div>

  <div class="sidebar global-hide-on-mobile-down global-hide-on-desktop-up">
-
    <Sidebar {node} {activeTab} {baseUrl} {project} collapsedOnly />
+
    <Sidebar {seedingPolicy} {activeTab} {baseUrl} {project} collapsedOnly />
  </div>

  <div class="content" style:padding-bottom={stylePaddingBottom}>
modified src/views/projects/Patch.svelte
@@ -8,7 +8,7 @@
    PatchState,
    Revision,
    Diff,
-
    Node,
+
    SeedingPolicy,
  } from "@http-client";

  interface Thread {
@@ -92,7 +92,7 @@
  import TextInput from "@app/components/TextInput.svelte";

  export let baseUrl: BaseUrl;
-
  export let node: Node;
+
  export let seedingPolicy: SeedingPolicy;
  export let patch: Patch;
  export let stats: Diff["stats"];
  export let rawPath: (commit?: string) => string;
@@ -708,7 +708,12 @@
  }
</style>

-
<Layout {node} {baseUrl} {project} activeTab="patches" stylePaddingBottom="0">
+
<Layout
+
  {seedingPolicy}
+
  {baseUrl}
+
  {project}
+
  activeTab="patches"
+
  stylePaddingBottom="0">
  <div class="patch">
    <div class="main">
      <CobHeader>
modified src/views/projects/Patches.svelte
@@ -1,5 +1,11 @@
<script lang="ts">
-
  import type { BaseUrl, Node, Patch, PatchState, Project } from "@http-client";
+
  import type {
+
    BaseUrl,
+
    Patch,
+
    PatchState,
+
    Project,
+
    SeedingPolicy,
+
  } from "@http-client";

  import { HttpdClient } from "@http-client";
  import capitalize from "lodash/capitalize";
@@ -25,7 +31,7 @@
  import Command from "@app/components/Command.svelte";

  export let baseUrl: BaseUrl;
-
  export let node: Node;
+
  export let seedingPolicy: SeedingPolicy;
  export let patches: Patch[];
  export let project: Project;
  export let state: PatchState["status"];
@@ -121,7 +127,7 @@
  }
</style>

-
<Layout {node} {baseUrl} {project} activeTab="patches">
+
<Layout {seedingPolicy} {baseUrl} {project} activeTab="patches">
  <div slot="header" style:display="flex" style:padding="1rem">
    <Popover
      popoverPadding="0"
modified src/views/projects/Sidebar.svelte
@@ -1,6 +1,6 @@
<script lang="ts">
  import type { ActiveTab } from "./Header.svelte";
-
  import type { BaseUrl, Node, Project } from "@http-client";
+
  import type { BaseUrl, Project, SeedingPolicy } from "@http-client";

  import Button from "@app/components/Button.svelte";
  import ContextRepo from "@app/views/projects/Sidebar/ContextRepo.svelte";
@@ -13,7 +13,7 @@
  const SIDEBAR_STATE_KEY = "sidebarState";

  export let activeTab: ActiveTab | undefined = undefined;
-
  export let node: Node;
+
  export let seedingPolicy: SeedingPolicy;
  export let baseUrl: BaseUrl;
  export let project: Project;
  export let collapsedOnly = false;
@@ -41,8 +41,6 @@
    expanded = !expanded;
    storeSidebarState(expanded);
  }
-

-
  $: seedingPolicy = formatShortSeedingPolicy(node.config?.seedingPolicy);
</script>

<style>
modified src/views/projects/Source.svelte
@@ -1,5 +1,11 @@
<script lang="ts">
-
  import type { BaseUrl, Node, Project, Remote, Tree } from "@http-client";
+
  import type {
+
    BaseUrl,
+
    Project,
+
    Remote,
+
    SeedingPolicy,
+
    Tree,
+
  } from "@http-client";
  import type { BlobResult, ProjectRoute } from "./router";

  import { HttpdClient } from "@http-client";
@@ -16,11 +22,11 @@
  export let baseUrl: BaseUrl;
  export let blobResult: BlobResult;
  export let commit: string;
-
  export let node: Node;
  export let path: string;
  export let peer: string | undefined;
  export let peers: Remote[];
  export let project: Project;
+
  export let seedingPolicy: SeedingPolicy;
  export let rawPath: (commit?: string) => string;
  export let revision: string | undefined;
  export let seeding: boolean;
@@ -111,7 +117,12 @@
  }
</style>

-
<Layout {node} {baseUrl} {project} activeTab="source" stylePaddingBottom="0">
+
<Layout
+
  {seedingPolicy}
+
  {baseUrl}
+
  {project}
+
  activeTab="source"
+
  stylePaddingBottom="0">
  <ProjectNameHeader {project} {baseUrl} {seeding} slot="header" />

  <div style:margin="1rem" slot="subheader">
modified src/views/projects/router.ts
@@ -13,11 +13,11 @@ import type {
  DiffBlob,
  Issue,
  IssueState,
-
  Node,
  Patch,
  PatchState,
  Project,
  Remote,
+
  SeedingPolicy,
  Tree,
} from "@http-client";

@@ -114,7 +114,7 @@ export type ProjectLoadedRoute =
      resource: "project.source";
      params: {
        baseUrl: BaseUrl;
-
        node: Node;
+
        seedingPolicy: SeedingPolicy;
        commit: string;
        project: Project;
        peers: Remote[];
@@ -131,7 +131,7 @@ export type ProjectLoadedRoute =
      resource: "project.history";
      params: {
        baseUrl: BaseUrl;
-
        node: Node;
+
        seedingPolicy: SeedingPolicy;
        commit: string;
        project: Project;
        peers: Remote[];
@@ -146,7 +146,7 @@ export type ProjectLoadedRoute =
      resource: "project.commit";
      params: {
        baseUrl: BaseUrl;
-
        node: Node;
+
        seedingPolicy: SeedingPolicy;
        project: Project;
        commit: Commit;
      };
@@ -155,7 +155,7 @@ export type ProjectLoadedRoute =
      resource: "project.issue";
      params: {
        baseUrl: BaseUrl;
-
        node: Node;
+
        seedingPolicy: SeedingPolicy;
        project: Project;
        rawPath: (commit?: string) => string;
        issue: Issue;
@@ -165,7 +165,7 @@ export type ProjectLoadedRoute =
      resource: "project.issues";
      params: {
        baseUrl: BaseUrl;
-
        node: Node;
+
        seedingPolicy: SeedingPolicy;
        project: Project;
        issues: Issue[];
        state: IssueState["status"];
@@ -175,7 +175,7 @@ export type ProjectLoadedRoute =
      resource: "project.newIssue";
      params: {
        baseUrl: BaseUrl;
-
        node: Node;
+
        seedingPolicy: SeedingPolicy;
        project: Project;
        rawPath: (commit?: string) => string;
      };
@@ -184,7 +184,7 @@ export type ProjectLoadedRoute =
      resource: "project.patches";
      params: {
        baseUrl: BaseUrl;
-
        node: Node;
+
        seedingPolicy: SeedingPolicy;
        project: Project;
        patches: Patch[];
        state: PatchState["status"];
@@ -194,7 +194,7 @@ export type ProjectLoadedRoute =
      resource: "project.patch";
      params: {
        baseUrl: BaseUrl;
-
        node: Node;
+
        seedingPolicy: SeedingPolicy;
        project: Project;
        rawPath: (commit?: string) => string;
        patch: Patch;
@@ -277,16 +277,6 @@ export async function loadProjectRoute(
  previousLoaded: LoadedRoute,
): Promise<ProjectLoadedRoute | ErrorRoute | NotFoundRoute> {
  const api = new HttpdClient(route.node);
-
  let node: Node | undefined = undefined;
-
  if (
-
    "params" in previousLoaded &&
-
    "node" in previousLoaded.params &&
-
    route.node.hostname === previousLoaded.params.baseUrl.hostname
-
  ) {
-
    node = previousLoaded.params.node;
-
  } else {
-
    node = await api.getNode();
-
  }
  const rawPath = (commit?: string) =>
    `${route.node.scheme}://${route.node.hostname}:${route.node.port}/raw/${
      route.project
@@ -294,43 +284,47 @@ export async function loadProjectRoute(

  try {
    if (route.resource === "project.source") {
-
      return await loadTreeView(route, previousLoaded, node);
+
      return await loadTreeView(route, previousLoaded);
    } else if (route.resource === "project.history") {
-
      return await loadHistoryView(route, node);
+
      return await loadHistoryView(route);
    } else if (route.resource === "project.commit") {
-
      const [project, commit] = await Promise.all([
+
      const [project, commit, seedingPolicy] = await Promise.all([
        api.project.getById(route.project),
        api.project.getCommitBySha(route.project, route.commit),
+
        api.getPoliciesById(route.project),
      ]);

      return {
        resource: "project.commit",
        params: {
          baseUrl: route.node,
-
          node,
+
          seedingPolicy,
          project,
          commit,
        },
      };
    } else if (route.resource === "project.issue") {
-
      return await loadIssueView(route, node);
+
      return await loadIssueView(route);
    } else if (route.resource === "project.patch") {
-
      return await loadPatchView(route, node);
+
      return await loadPatchView(route);
    } else if (route.resource === "project.issues") {
-
      return await loadIssuesView(route, node);
+
      return await loadIssuesView(route);
    } else if (route.resource === "project.newIssue") {
-
      const project = await api.project.getById(route.project);
+
      const [project, seedingPolicy] = await Promise.all([
+
        api.project.getById(route.project),
+
        api.getPoliciesById(route.project),
+
      ]);
      return {
        resource: "project.newIssue",
        params: {
          baseUrl: route.node,
-
          node,
+
          seedingPolicy,
          project,
          rawPath,
        },
      };
    } else if (route.resource === "project.patches") {
-
      return await loadPatchesView(route, node);
+
      return await loadPatchesView(route);
    } else {
      return unreachable(route);
    }
@@ -349,26 +343,26 @@ export async function loadProjectRoute(

async function loadPatchesView(
  route: ProjectPatchesRoute,
-
  node: Node,
): Promise<ProjectLoadedRoute> {
  const api = new HttpdClient(route.node);
  const searchParams = new URLSearchParams(route.search || "");
  const state = (searchParams.get("state") as PatchState["status"]) || "open";

-
  const [project, patches] = await Promise.all([
+
  const [project, patches, seedingPolicy] = await Promise.all([
    api.project.getById(route.project),
    api.project.getAllPatches(route.project, {
      state,
      page: 0,
      perPage: PATCHES_PER_PAGE,
    }),
+
    api.getPoliciesById(route.project),
  ]);

  return {
    resource: "project.patches",
    params: {
      baseUrl: route.node,
-
      node,
+
      seedingPolicy,
      patches,
      state,
      project,
@@ -378,26 +372,25 @@ async function loadPatchesView(

async function loadIssuesView(
  route: ProjectIssuesRoute,
-
  node: Node,
): Promise<ProjectLoadedRoute> {
  const api = new HttpdClient(route.node);
  const state = route.state || "open";

-
  const [project, issues] = await Promise.all([
+
  const [project, issues, seedingPolicy] = await Promise.all([
    api.project.getById(route.project),
    api.project.getAllIssues(route.project, {
      state,
      page: 0,
      perPage: ISSUES_PER_PAGE,
    }),
-
    isLocalNodeSeeding(route),
+
    api.getPoliciesById(route.project),
  ]);

  return {
    resource: "project.issues",
    params: {
      baseUrl: route.node,
-
      node,
+
      seedingPolicy,
      issues,
      state,
      project,
@@ -408,7 +401,6 @@ async function loadIssuesView(
async function loadTreeView(
  route: ProjectTreeRoute,
  previousLoaded: LoadedRoute,
-
  node: Node,
): Promise<ProjectLoadedRoute | NotFoundRoute> {
  const api = new HttpdClient(route.node);
  const rawPath = (commit?: string) =>
@@ -417,6 +409,7 @@ async function loadTreeView(
    }${commit ? `/${commit}` : ""}`;

  let projectPromise: Promise<Project>;
+
  let seedingPolicyPromise: Promise<SeedingPolicy>;
  let peersPromise: Promise<Remote[]>;
  if (
    previousLoaded.resource === "project.source" &&
@@ -425,14 +418,17 @@ async function loadTreeView(
  ) {
    projectPromise = Promise.resolve(previousLoaded.params.project);
    peersPromise = Promise.resolve(previousLoaded.params.peers);
+
    seedingPolicyPromise = Promise.resolve(previousLoaded.params.seedingPolicy);
  } else {
    projectPromise = api.project.getById(route.project);
    peersPromise = api.project.getAllRemotes(route.project);
+
    seedingPolicyPromise = api.getPoliciesById(route.project);
  }

-
  const [project, peers, seeding] = await Promise.all([
+
  const [project, peers, seedingPolicy, seeding] = await Promise.all([
    projectPromise,
    peersPromise,
+
    seedingPolicyPromise,
    isLocalNodeSeeding(route),
  ]);

@@ -471,7 +467,7 @@ async function loadTreeView(
    resource: "project.source",
    params: {
      baseUrl: route.node,
-
      node,
+
      seedingPolicy,
      commit,
      project,
      peers: peers.filter(remote => Object.keys(remote.heads).length > 0),
@@ -537,13 +533,13 @@ async function loadBlob(
}
async function loadHistoryView(
  route: ProjectHistoryRoute,
-
  node: Node,
): Promise<ProjectLoadedRoute> {
  const api = new HttpdClient(route.node);

-
  const [project, peers, branchMap] = await Promise.all([
+
  const [project, peers, seedingPolicy, branchMap] = await Promise.all([
    api.project.getById(route.project),
    api.project.getAllRemotes(route.project),
+
    api.getPoliciesById(route.project),
    getPeerBranches(api, route.project, route.peer),
  ]);

@@ -576,7 +572,7 @@ async function loadHistoryView(
    resource: "project.history",
    params: {
      baseUrl: route.node,
-
      node,
+
      seedingPolicy,
      commit: commitId,
      project,
      peers: peers.filter(remote => Object.keys(remote.heads).length > 0),
@@ -591,7 +587,6 @@ async function loadHistoryView(

async function loadIssueView(
  route: ProjectIssueRoute,
-
  node: Node,
): Promise<ProjectLoadedRoute> {
  const api = new HttpdClient(route.node);
  const rawPath = (commit?: string) =>
@@ -599,15 +594,16 @@ async function loadIssueView(
      route.project
    }${commit ? `/${commit}` : ""}`;

-
  const [project, issue] = await Promise.all([
+
  const [project, issue, seedingPolicy] = await Promise.all([
    api.project.getById(route.project),
    api.project.getIssueById(route.project, route.issue),
+
    api.getPoliciesById(route.project),
  ]);
  return {
    resource: "project.issue",
    params: {
      baseUrl: route.node,
-
      node,
+
      seedingPolicy,
      project,
      rawPath,
      issue,
@@ -617,7 +613,6 @@ async function loadIssueView(

async function loadPatchView(
  route: ProjectPatchRoute,
-
  node: Node,
): Promise<ProjectLoadedRoute> {
  const api = new HttpdClient(route.node);
  const rawPath = (commit?: string) =>
@@ -625,9 +620,10 @@ async function loadPatchView(
      route.project
    }${commit ? `/${commit}` : ""}`;

-
  const [project, patch] = await Promise.all([
+
  const [project, patch, seedingPolicy] = await Promise.all([
    api.project.getById(route.project),
    api.project.getPatchById(route.project, route.patch),
+
    api.getPoliciesById(route.project),
  ]);
  const latestRevision = patch.revisions[patch.revisions.length - 1];
  const { diff } = await api.project.getDiff(
@@ -683,7 +679,7 @@ async function loadPatchView(
    resource: "project.patch",
    params: {
      baseUrl: route.node,
-
      node,
+
      seedingPolicy,
      project,
      rawPath,
      patch,