Skip to main content
Glama
use-data-processor.ts2.54 kB
import { useCallback, useRef, useState } from 'react'; import { useComputeWorkerCached } from '@/src/hooks/use-compute-worker-cached'; import { TaskType } from '@/src/workers/compute-worker'; interface CachedData { displayString: string; truncated: boolean; } interface PreviewResult { displayString: string; truncated: boolean; bytes: number; } interface SchemaResult { schema: any; displayString: string; truncated: boolean; } interface UseDataProcessorResult { preview: CachedData | null; schema: CachedData | null; bytes: number; isComputingPreview: boolean; isComputingSchema: boolean; error: string | null; computeSchema: () => void; } export function useDataProcessor( data: any, isActive: boolean ): UseDataProcessorResult { const [schemaTriggered, setSchemaTriggered] = useState(false); const schemaComputedRef = useRef(false); const previewCompute = useComputeWorkerCached<PreviewResult>( TaskType.COMPUTE_PREVIEW, data, true // Always compute preview ); const schemaCompute = useComputeWorkerCached<SchemaResult>( TaskType.COMPUTE_SCHEMA, data, schemaTriggered && isActive ); // Lazy schema computation callback const computeSchema = useCallback(() => { if (schemaComputedRef.current || schemaCompute.isComputing) { return; } setSchemaTriggered(true); schemaComputedRef.current = true; }, [schemaCompute.isComputing]); // Reset schema trigger when data changes const lastDataRef = useRef<any>(null); if (lastDataRef.current !== data) { lastDataRef.current = data; setSchemaTriggered(false); schemaComputedRef.current = false; } const preview: CachedData | null = previewCompute.result ? { displayString: previewCompute.result.displayString, truncated: previewCompute.result.truncated, } : null; const schema: CachedData | null = schemaCompute.result ? { displayString: schemaCompute.result.displayString, truncated: schemaCompute.result.truncated, } : null; const bytes = previewCompute.result?.bytes || 0; return { preview, schema, bytes, isComputingPreview: previewCompute.isComputing, isComputingSchema: schemaCompute.isComputing, error: previewCompute.error || schemaCompute.error, computeSchema, }; }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/superglue-ai/superglue'

If you have feedback or need assistance with the MCP directory API, please join our Discord server