Radish alpha
r
Radicle web interface
Radicle
Git (anonymous pull)
Log in to clone via SSH
Represent issue status filter in route
Thomas Scholtes committed 2 years ago
commit 29e3295f45b9309272b108e4f3c070ddd6c54b92
parent dd7f3a850e7d6bcae0ce4dd8a3a45f8a08be2e20
4 files changed +22 -15
modified src/views/projects/Issues.svelte
@@ -21,13 +21,10 @@
  import Placeholder from "@app/components/Placeholder.svelte";
  import SquareButton from "@app/components/SquareButton.svelte";

-
  export let search: string | undefined = undefined;
  export let projectId: string;
  export let baseUrl: BaseUrl;
  export let issueCounters: { open: number; closed: number };
-

-
  $: searchParams = new URLSearchParams(search || "");
-
  $: state = (searchParams.get("state") as IssueStatus) || "open";
+
  export let state: "open" | "closed";

  const perPage = 10;

@@ -123,7 +120,7 @@
                resource: "project.issues",
                project: projectId,
                seed: baseUrl,
-
                search: `state=${option.value}`,
+
                state: option.value,
              }}>
              <SquareButton
                clickable={option.disabled}
modified src/views/projects/View.svelte
@@ -95,7 +95,7 @@
      {baseUrl}
      projectId={id}
      issueCounters={project.issues}
-
      search={view.search} />
+
      state={view.state} />
  {:else if view.resource === "newIssue"}
    <NewIssue projectId={id} projectHead={project.head} {baseUrl} />
  {:else if view.resource === "issue"}
modified src/views/projects/router.ts
@@ -32,7 +32,7 @@ export type ProjectRoute =
      resource: "project.issues";
      seed: BaseUrl;
      project: string;
-
      search?: string;
+
      state?: "open" | "closed";
    }
  | { resource: "project.newIssue"; seed: BaseUrl; project: string }
  | {
@@ -131,7 +131,7 @@ export type ProjectLoadedView =
      commit: Commit;
    }
  | { resource: "issue"; issue: Issue }
-
  | { resource: "issues"; search: string }
+
  | { resource: "issues"; state: "open" | "closed" }
  | { resource: "newIssue" }
  | { resource: "patches"; search: string }
  | PatchView;
@@ -254,7 +254,7 @@ export async function loadProjectRoute(
          baseUrl: route.seed,
          view: {
            resource: "issues",
-
            search: route.search || "",
+
            state: route.state || "open",
          },
          project,
        },
@@ -618,11 +618,18 @@ export function resolveProjectRoute(
        issue: issueOrAction,
      };
    } else {
+
      const rawState = new URLSearchParams(sanitizeQueryString(urlSearch)).get(
+
        "state",
+
      );
+
      let state: "open" | "closed" | undefined;
+
      if (rawState === "open" || rawState === "closed") {
+
        state = rawState;
+
      }
      return {
        resource: "project.issues",
        seed,
        project,
-
        search: sanitizeQueryString(urlSearch),
+
        state,
      };
    }
  } else if (content === "patches") {
@@ -732,8 +739,12 @@ export function projectRouteToPath(route: ProjectRoute): string {
    return [...pathSegments, "issues", "new"].join("/");
  } else if (route.resource === "project.issues") {
    let url = [...pathSegments, "issues"].join("/");
-
    if (route.search) {
-
      url += `?${route.search}`;
+
    const searchParams = new URLSearchParams();
+
    if (route.state) {
+
      searchParams.set("state", route.state);
+
    }
+
    if (searchParams.size > 0) {
+
      url += `?${searchParams}`;
    }
    return url;
  } else if (route.resource === "project.issue") {
modified tests/unit/router.test.ts
@@ -110,16 +110,15 @@ describe("route invariant when parsed", () => {
      resource: "project.issues",
      seed,
      project: "PROJECT",
-
      search: "",
    });
  });

-
  test("projects.issues with search", () => {
+
  test("projects.issues with state", () => {
    expectParsingInvariant({
      resource: "project.issues",
      seed,
      project: "PROJECT",
-
      search: "SEARCH",
+
      state: "closed",
    });
  });