MCPcopy Index your code
hub / github.com/coder/coder / makeUseEmbeddedMetadata

Function makeUseEmbeddedMetadata

site/src/hooks/useEmbeddedMetadata.ts:223–246  ·  view source on GitHub ↗
(
	manager: MetadataManager,
)

Source from the content-addressed store, hash-verified

221}>;
222
223export function makeUseEmbeddedMetadata(
224 manager: MetadataManager,
225): () => UseEmbeddedMetadataResult {
226 return function useEmbeddedMetadata(): UseEmbeddedMetadataResult {
227 // Hook binds re-renders to the memory reference of the entire exposed
228 // metadata object, meaning that even if you only care about one metadata
229 // property, the hook will cause a component to re-render if the object
230 // changes at all. If this becomes a performance issue down the line, we can
231 // look into selector functions to minimize re-renders, but let's wait
232 const metadata = useSyncExternalStore(
233 manager.subscribe,
234 manager.getMetadata,
235 );
236
237 const stableMetadataResult = useMemo<UseEmbeddedMetadataResult>(() => {
238 return {
239 metadata,
240 clearMetadataByKey: manager.clearMetadataByKey,
241 };
242 }, [metadata]);
243
244 return stableMetadataResult;
245 };
246}
247
248export const defaultMetadataManager = new MetadataManager();
249export const useEmbeddedMetadata = makeUseEmbeddedMetadata(

Callers 2

renderMetadataHookFunction · 0.90

Calls

no outgoing calls

Tested by 1

renderMetadataHookFunction · 0.72