import { useState, useEffect } from "react"; import { invoke } from "lodash"; function getQueryResultData(queryResult) { return { columns: invoke(queryResult, "getColumns") || [], rows: invoke(queryResult, "getData") || [], filters: invoke(queryResult, "getFilters") || [], }; } export default function useQueryResult(queryResult) { const [data, setData] = useState(getQueryResultData(queryResult)); useEffect(() => { let isCancelled = false; if (queryResult) { queryResult.toPromise().then(() => { if (!isCancelled) { setData(getQueryResultData(queryResult)); } }); } else { setData(getQueryResultData(queryResult)); } return () => { isCancelled = true; }; }, [queryResult]); return data; }