Files
redash/client/app/pages/queries/hooks/useQuery.js
Gabriel Dutra fa7ecca485 Frontend updates from internal fork (#5259)
* DynamicComponent for QuerySourceAlerts

* General Settings updates

* Dynamic Date[Range] updates

* EmptyState updates

* Query and SchemaBrowser updates

* Adjust page headers and add disablePublish

* Policy updates

* Separate Home FavoritesList component

* Update FormatQuery

* Autolimit frontend fixes

* Misc updates

* Keep registering of QuerySourceDropdown

* Undo changes in DynamicComponent

* Change sql-formatter package.json syntax

* Allow opening help trigger in new tab

* Don't run npm commands as root in Dockerfile

* Cypress: Remove extra execute query
2020-11-10 14:59:15 +02:00

34 lines
1.2 KiB
JavaScript

import { isEmpty } from "lodash";
import { useState, useMemo } from "react";
import useUpdateQuery from "./useUpdateQuery";
import navigateTo from "@/components/ApplicationArea/navigateTo";
export default function useQuery(originalQuery) {
const [query, setQuery] = useState(originalQuery);
const [originalQuerySource, setOriginalQuerySource] = useState(originalQuery.query);
const [originalAutoLimit, setOriginalAutoLimit] = useState(query.options.apply_auto_limit);
const updateQuery = useUpdateQuery(query, updatedQuery => {
// It's important to update URL first, and only then update state
if (updatedQuery.id !== query.id) {
// Don't reload page when saving new query
navigateTo(updatedQuery.getUrl(true), true);
}
setQuery(updatedQuery);
setOriginalQuerySource(updatedQuery.query);
setOriginalAutoLimit(updatedQuery.options.apply_auto_limit);
});
return useMemo(
() => ({
query,
setQuery,
isDirty:
query.query !== originalQuerySource ||
(!isEmpty(query.query) && query.options.apply_auto_limit !== originalAutoLimit),
saveQuery: () => updateQuery(),
}),
[query, originalQuerySource, updateQuery, originalAutoLimit]
);
}