mirror of
https://seed.radicle.dev/rad:z4V1sjrXqjvFdnCUbxPFqd5p4DtH5.git
synced 2026-11-15 19:30:38 +08:00
Decouple project route types from loaded types
We remove the requirement that `LoadedSourceBrowsingView` needs to be assignable to `ProjectParams["view"]`. This decouples `ProjectRoute` and `ProjectLoadedRoute` and lets us modify them independently. I did not use a common `routeParamsView` function because I prefer the flexibility of being able to modify them independently while this area of code changes a lot. Signed-off-by: Thomas Scholtes <geigerzaehler@axiom.fm>
This commit is contained in:
@@ -1,6 +1,9 @@
|
||||
<script lang="ts">
|
||||
import type { BaseUrl } from "@httpd-client";
|
||||
import type { LoadedSourceBrowsingView } from "@app/views/projects/router";
|
||||
import type {
|
||||
LoadedSourceBrowsingView,
|
||||
ProjectsParams,
|
||||
} from "@app/views/projects/router";
|
||||
|
||||
import * as utils from "@app/lib/utils";
|
||||
import { closeFocused } from "@app/components/Floating.svelte";
|
||||
@@ -23,6 +26,27 @@
|
||||
.map(b => ({ key: b, value: b, title: `Switch to ${b}`, badge: null }));
|
||||
$: showSelector = branchList.length > 1;
|
||||
$: selectedCommitShortId = utils.formatCommit(selectedCommitId);
|
||||
|
||||
function routeParamsView(
|
||||
view: LoadedSourceBrowsingView,
|
||||
): ProjectsParams["view"] {
|
||||
if (view.resource === "tree") {
|
||||
return {
|
||||
resource: "tree",
|
||||
};
|
||||
} else if (view.resource === "history") {
|
||||
return {
|
||||
resource: "history",
|
||||
};
|
||||
} else if (view.resource === "commits") {
|
||||
return {
|
||||
resource: "commits",
|
||||
commitId: view.commit.commit.id,
|
||||
};
|
||||
} else {
|
||||
return utils.unreachable(view);
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
@@ -88,7 +112,7 @@
|
||||
baseUrl,
|
||||
peer,
|
||||
revision: item.value,
|
||||
view,
|
||||
view: routeParamsView(view),
|
||||
},
|
||||
}}
|
||||
on:afterNavigate={() => closeFocused()}>
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
<script lang="ts">
|
||||
import type { BaseUrl, Remote } from "@httpd-client";
|
||||
import type { LoadedSourceBrowsingView } from "@app/views/projects/router";
|
||||
import type {
|
||||
LoadedSourceBrowsingView,
|
||||
ProjectsParams,
|
||||
} from "@app/views/projects/router";
|
||||
|
||||
import { closeFocused } from "@app/components/Floating.svelte";
|
||||
import { formatNodeId, truncateId } from "@app/lib/utils";
|
||||
import { formatNodeId, truncateId, unreachable } from "@app/lib/utils";
|
||||
import { pluralize } from "@app/lib/pluralize";
|
||||
|
||||
import Avatar from "@app/components/Avatar.svelte";
|
||||
@@ -28,6 +31,27 @@
|
||||
? `${nodeId} is a delegate of this project`
|
||||
: `${nodeId} is a peer tracked by this node`;
|
||||
}
|
||||
|
||||
function routeParamsView(
|
||||
view: LoadedSourceBrowsingView,
|
||||
): ProjectsParams["view"] {
|
||||
if (view.resource === "tree") {
|
||||
return {
|
||||
resource: "tree",
|
||||
};
|
||||
} else if (view.resource === "history") {
|
||||
return {
|
||||
resource: "history",
|
||||
};
|
||||
} else if (view.resource === "commits") {
|
||||
return {
|
||||
resource: "commits",
|
||||
commitId: view.commit.commit.id,
|
||||
};
|
||||
} else {
|
||||
return unreachable(view);
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
@@ -116,7 +140,7 @@
|
||||
baseUrl,
|
||||
peer: item.id,
|
||||
revision: undefined,
|
||||
view,
|
||||
view: routeParamsView(view),
|
||||
},
|
||||
}}>
|
||||
<DropdownItem
|
||||
|
||||
@@ -91,8 +91,6 @@ export type LoadedSourceBrowsingView =
|
||||
| {
|
||||
resource: "commits";
|
||||
params: LoadedSourceBrowsingParams;
|
||||
// FIXME: We need the ID so that `updateProjectRoute()` type checks.
|
||||
commitId: string;
|
||||
commit: Commit;
|
||||
}
|
||||
| {
|
||||
@@ -308,7 +306,6 @@ export async function loadProjectRoute(
|
||||
view: {
|
||||
resource: params.view.resource,
|
||||
params: viewParams,
|
||||
commitId: params.view.commitId,
|
||||
commit: loadedCommit,
|
||||
},
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user