timelines: add createControlsForLookup
This commit is contained in:
parent
acde7609ba
commit
ad729f4f34
1 changed files with 26 additions and 28 deletions
|
@ -18,6 +18,30 @@ type Timeline<T extends mastodon.DefaultPaginationParams> = {
|
||||||
|
|
||||||
type TimelineParamsOf<T> = T extends Timeline<infer P> ? P : never;
|
type TimelineParamsOf<T> = T extends Timeline<infer P> ? P : never;
|
||||||
|
|
||||||
|
function createControlsForLookup(
|
||||||
|
lookup: ReactiveMap<string, TreeNode<mastodon.v1.Status>>,
|
||||||
|
) {
|
||||||
|
return {
|
||||||
|
get(id: string) {
|
||||||
|
return lookup.get(id);
|
||||||
|
},
|
||||||
|
getPath(id: string) {
|
||||||
|
const node = lookup.get(id);
|
||||||
|
if (!node) return;
|
||||||
|
const path = collectPath(node);
|
||||||
|
for (const sym of path) {
|
||||||
|
lookup.get(sym.value.id); // Track every node on the path
|
||||||
|
}
|
||||||
|
return path;
|
||||||
|
},
|
||||||
|
set(id: string, value: mastodon.v1.Status) {
|
||||||
|
const node = untrack(() => lookup.get(id));
|
||||||
|
if (!node) return;
|
||||||
|
lookup.set(id, {...node, value});
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
export function createTimelineControlsForArray(
|
export function createTimelineControlsForArray(
|
||||||
status: () => mastodon.v1.Status[] | undefined,
|
status: () => mastodon.v1.Status[] | undefined,
|
||||||
): TimelineControls {
|
): TimelineControls {
|
||||||
|
@ -68,20 +92,7 @@ export function createTimelineControlsForArray(
|
||||||
|
|
||||||
return {
|
return {
|
||||||
list: threads,
|
list: threads,
|
||||||
get(id: string) {
|
...createControlsForLookup(lookup),
|
||||||
return lookup.get(id);
|
|
||||||
},
|
|
||||||
getPath(id: string) {
|
|
||||||
const node = lookup.get(id);
|
|
||||||
if (!node) return;
|
|
||||||
return collectPath(node);
|
|
||||||
},
|
|
||||||
set(id: string, value: mastodon.v1.Status) {
|
|
||||||
const node = untrack(() => lookup.get(id));
|
|
||||||
if (!node) return;
|
|
||||||
node.value = value;
|
|
||||||
lookup.set(id, node);
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -307,20 +318,7 @@ export function createTimeline<
|
||||||
return [
|
return [
|
||||||
{
|
{
|
||||||
list: threads,
|
list: threads,
|
||||||
get(id: string) {
|
...createControlsForLookup(lookup),
|
||||||
return lookup.get(id);
|
|
||||||
},
|
|
||||||
getPath(id: string) {
|
|
||||||
const node = lookup.get(id);
|
|
||||||
if (!node) return;
|
|
||||||
return collectPath(node);
|
|
||||||
},
|
|
||||||
set(id: string, value: mastodon.v1.Status) {
|
|
||||||
const node = untrack(() => lookup.get(id));
|
|
||||||
if (!node) return;
|
|
||||||
node.value = value;
|
|
||||||
lookup.set(id, node);
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
chunk,
|
chunk,
|
||||||
{ refetch },
|
{ refetch },
|
||||||
|
|
Loading…
Reference in a new issue