in packages/graph-explorer/src/hooks/useSchemaSync.ts [22:55]
export function useSchemaSync() {
const config = useResolvedConfig();
const explorer = useExplorer();
const { replaceSchema, setSyncFailure } = useUpdateSchema();
// Check if the schema has ever been properly synced before providing initial data
const initialData = useMemo(() => {
return config.schema &&
config.schema.lastUpdate &&
config.schema.triedToSync
? config.schema
: undefined;
}, [config]);
const query = useQuery({
...schemaSyncQuery(replaceSchema, explorer),
initialData: initialData,
enabled: !initialData || config.schema?.lastSyncFail === true,
});
const { data, isFetching, status, error, refetch } = query;
// If the schema sync fails, set the schema to a failed state
useEffect(() => {
if (status === "error") {
setSyncFailure();
}
}, [setSyncFailure, status]);
return useMemo(
() => ({ refetch, data, error, isFetching }),
[data, isFetching, refetch, error]
);
}