From 3cc485dce22ec48ad6fc10af9f53254b5905db15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C5=ABdolfs=20O=C5=A1i=C5=86=C5=A1?= Date: Tue, 8 Aug 2023 15:24:26 +0200 Subject: [PATCH] Flatten ProjectLoadedRoute type MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Rūdolfs Ošiņš --- src/App.svelte | 66 +++----- src/lib/router.ts | 11 +- src/views/projects/Patch.svelte | 2 +- src/views/projects/router.ts | 271 +++++++++++++++++--------------- 4 files changed, 171 insertions(+), 179 deletions(-) diff --git a/src/App.svelte b/src/App.svelte index 37ce8fe7c..2a77415c1 100644 --- a/src/App.svelte +++ b/src/App.svelte @@ -68,58 +68,30 @@
- {#if $activeRouteStore.resource === "home"} + {#if $activeRouteStore.resource === "booting"} + + {:else if $activeRouteStore.resource === "home"} {:else if $activeRouteStore.resource === "nodes"} {:else if $activeRouteStore.resource === "session"} - {:else if $activeRouteStore.resource === "projects"} - {#if $activeRouteStore.params.view.resource === "tree"} - - {:else if $activeRouteStore.params.view.resource === "history"} - - {:else if $activeRouteStore.params.view.resource === "commit"} - - {:else if $activeRouteStore.params.view.resource === "issues"} - - {:else if $activeRouteStore.params.view.resource === "newIssue"} - - {:else if $activeRouteStore.params.view.resource === "issue"} - - {:else if $activeRouteStore.params.view.resource === "patches"} - - {:else if $activeRouteStore.params.view.resource === "patch"} - - {:else} - {unreachable($activeRouteStore.params.view)} - {/if} - {:else if $activeRouteStore.resource === "booting"} - + {:else if $activeRouteStore.resource === "project.tree"} + + {:else if $activeRouteStore.resource === "project.history"} + + {:else if $activeRouteStore.resource === "project.commit"} + + {:else if $activeRouteStore.resource === "project.issues"} + + {:else if $activeRouteStore.resource === "project.newIssue"} + + {:else if $activeRouteStore.resource === "project.issue"} + + {:else if $activeRouteStore.resource === "project.patches"} + + {:else if $activeRouteStore.resource === "project.patch"} + {:else if $activeRouteStore.resource === "loadError"} {:else if $activeRouteStore.resource === "notFound"} diff --git a/src/lib/router.ts b/src/lib/router.ts index aabacf050..0883a35d8 100644 --- a/src/lib/router.ts +++ b/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); diff --git a/src/views/projects/Patch.svelte b/src/views/projects/Patch.svelte index e575a5c6d..5c14559d7 100644 --- a/src/views/projects/Patch.svelte +++ b/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); diff --git a/src/views/projects/router.ts b/src/views/projects/router.ts index 6848c5039..c0337bf09 100644 --- a/src/views/projects/router.ts +++ b/src/views/projects/router.ts @@ -95,77 +95,112 @@ interface ProjectPatchesRoute { search?: string; } -export interface ProjectLoadedRoute { - resource: "projects"; - params: ProjectLoadedParams; -} - -export interface ProjectLoadedParams { - baseUrl: BaseUrl; - project: Project; - view: ProjectLoadedView; -} - -export type ProjectLoadedView = - | TreeView - | HistoryView +export type ProjectLoadedRoute = | { - resource: "commit"; - commit: Commit; + 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: "issue"; issue: Issue } - | { resource: "issues"; issues: Issue[]; state: IssueState["status"] } - | { resource: "newIssue" } - | { resource: "patches"; patches: Patch[]; state: PatchState["status"] } - | PatchView; + | { + 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 TreeView { - resource: "tree"; - peers: Remote[]; - peer: string | undefined; - branches: string[]; - revision: string | undefined; - tree: Tree; - path: string; - blobResult: BlobResult; -} + commit: Commit; + }; + } + | { + resource: "project.issue"; + params: { + baseUrl: BaseUrl; + project: Project; + + issue: Issue; + }; + } + | { + resource: "project.issues"; + params: { + baseUrl: BaseUrl; + project: Project; + + issues: Issue[]; + state: IssueState["status"]; + }; + } + | { + 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;