import type { LdoBase, LdSet, ShapeType } from "@ldo/ldo"; import type { QuadMatch } from "@ldo/rdf-utils"; import type { LdoBuilder } from "@ldo/ldo"; import { useCallback } from "react"; import { useTrackingProxy } from "../util/useTrackingProxy.js"; import type { ConnectedLdoDataset, ConnectedPlugin, IConnectedLdoDataset, } from "@ldo/connected"; export interface UseMatchSubjectOptions { dataset?: IConnectedLdoDataset; } /** * @internal * * Creates a useMatchSubject function. */ export function createUseMatchSubject( dataset: ConnectedLdoDataset, ) { /** * Returns an array of matching linked data objects. Triggers a rerender if * the data is updated. */ return function useMatchSubject( shapeType: ShapeType, predicate?: QuadMatch[1] | string, object?: QuadMatch[2] | string, graph?: QuadMatch[3] | string, options?: UseMatchSubjectOptions, ): LdSet { const matchSubject = useCallback( (builder: LdoBuilder) => { return builder.matchSubject(predicate, object, graph); }, [predicate, object, graph], ); return useTrackingProxy( shapeType, matchSubject, options?.dataset ?? dataset, ); }; }