diff --git a/lib/tcmd/Resolver.tsx b/lib/tcmd/Resolver.tsx index 0a3ce26..46ba71b 100644 --- a/lib/tcmd/Resolver.tsx +++ b/lib/tcmd/Resolver.tsx @@ -21,6 +21,7 @@ export function Resolver({ resolver }: { resolver: string }) { return {content}; } +const defaultTemplate = "$x"; export function OnDemandResolver({ resolver, template, @@ -34,16 +35,25 @@ export function OnDemandResolver({ const res = useRef(new TTCQueryResolver(parser)); const [content, setContent] = useState(""); const generateContent = useCallback(() => { - let content = template || "$x"; - const stackIdxs = Array.from(new Set(content.match(/\$(?:\d+|x)/g))); - for (const idx of stackIdxs) { - let thing = res.current.getFromStack(idx); - if (Array.isArray(thing)) thing = thing.at(0); - if (typeof thing.display === "function") - content = content.replaceAll(idx, thing.display() as string); - else content = content.replaceAll(idx, thing.display as string); - } - setContent(content); + setContent(() => { + let content = template || defaultTemplate; + + const stackIdxs = Array.from(new Set(content.match(/\$(?:\d+|x)/g))); + for (const idx of stackIdxs) { + let thing = res.current.getFromStack(idx); + if (Array.isArray(thing)) thing = thing.at(0); + console.log(thing); + if (typeof thing.display === "function") { + const disp = thing.display(); + if (typeof disp === "string" || typeof disp === "number") + content = content.replaceAll(idx, disp.toString()); + else return disp as ReactNode; + } + // else if (idx === defaultTemplate && ) + else content = content.replaceAll(idx, thing.display as string); + return content; + } + }); }, [res, template]); const resolve = useCallback(() => { @@ -52,7 +62,7 @@ export function OnDemandResolver({ }, [res, resolver, generateContent]); return ( -
+