export function useSchemaSync()

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]
  );
}