MCPcopy Create free account
hub / github.com/block/buzz / useResolvedLinkPreviews

Function useResolvedLinkPreviews

desktop/src/shared/lib/useResolvedLinkPreviews.ts:46–92  ·  view source on GitHub ↗
(
  previews: SupportedLinkPreview[],
)

Source from the content-addressed store, hash-verified

44}
45
46export function useResolvedLinkPreviews(
47 previews: SupportedLinkPreview[],
48): SupportedLinkPreview[] {
49 const [resolvedTitles, setResolvedTitles] = React.useState<
50 Record<string, string>
51 >({});
52
53 React.useEffect(() => {
54 let cancelled = false;
55 const pending = previews.filter(shouldResolveTitle);
56 if (pending.length === 0) return undefined;
57
58 for (const preview of pending) {
59 const cached = titleCache.get(preview.href);
60 if (typeof cached === "string" && cached) {
61 setResolvedTitles((current) =>
62 current[preview.href] === cached
63 ? current
64 : { ...current, [preview.href]: cached },
65 );
66 continue;
67 }
68
69 void cacheTitle(preview.href).then((title) => {
70 if (cancelled || !title) return;
71 setResolvedTitles((current) =>
72 current[preview.href] === title
73 ? current
74 : { ...current, [preview.href]: title },
75 );
76 });
77 }
78
79 return () => {
80 cancelled = true;
81 };
82 }, [previews]);
83
84 return React.useMemo(
85 () =>
86 previews.map((preview) => {
87 const title = resolvedTitles[preview.href];
88 return title ? { ...preview, title } : preview;
89 }),
90 [previews, resolvedTitles],
91 );
92}

Callers 1

MarkdownInnerFunction · 0.90

Calls 2

cacheTitleFunction · 0.85
getMethod · 0.45

Tested by

no test coverage detected