Files
redash/client/app/lib/hooks/useQueryResult.js
Gabriel Dutra cb654b3f21 Migrate Widget component to React (#4020)
* Improve sizing for Number inputs

Co-Authored-By: Ran Byron <ranbena@gmail.com>

* Migrate WidgetDialog

* Start migrating Widget

* Update textbox to use HtmlContent

* QueryLink migration and some updates

* Add visualization rendering

* Render widget

* Add delete button

* Update AutoHeight

* Add widget bottom

* Add Drodpown button

* Split Widget component

* Update with #4056 and trigger netlify

* In progress: use composition

* Add header and footer

* Update widget actions positioning

* Re-render when refreshing from widget

* Add workaround to force DashboardGrid re-render

* VisualizationWidgetFooter component

* VisualizationWidget menu

* Separate RestrictedWidget

* Update tests

* Update margin for Parameters

* Remove widget files

* Revert "Improve sizing for Number inputs"

This reverts commit a02ce8f0aa.

* Some cleanup

* Move refresh logic to the Dashboard

* Add loadingWidgets logic to the public dashboard

* Add onLoadWidget

* Remove parameter from URL when empty

* Recreate widget array instead of loadingWidgets

* Add comment about re-rendering + whitespace missing

* CR changes

* Use plain html instead of string syntax

Co-Authored-By: Ran Byron <ranbena@gmail.com>
2019-09-20 22:08:42 +03:00

32 lines
807 B
JavaScript

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));
let isCancelled = false;
useEffect(() => {
if (queryResult) {
queryResult.toPromise()
.then(() => {
if (!isCancelled) {
setData(getQueryResultData(queryResult));
}
});
} else {
setData(getQueryResultData(queryResult));
}
return () => {
isCancelled = true;
};
}, [queryResult]);
return data;
}