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…
	
	Add table
		Add a link
		
	
		Reference in a new issue