mirror of
https://github.com/getredash/redash.git
synced 2025-12-23 20:01:59 -05:00
* Migrate Query Source View page to React: skeleton
* Sync QueryView and QuerySource (#4430)
* Migrate schema browser to react (#4432)
* Restyle code with Prettier
* Migrate Query page to React: Save changes (#4452)
* Migrate query source to React: Set of updates (#4457)
* Migrate Query page to React: Visualization Tabs (#4453)
Co-Authored-By: Levko Kravets <levko.ne@gmail.com>
* Migrate Query Source page to React: Visualizations area (#4463)
* Migrate Query page to React: Delete visualization button (#4461)
* Migrate Query Source page to React: Visualization actions (#4467)
* Migrate Query pages to React: Execute query hook (#4470)
* Migrate Query Source page to React: Editor area (#4468)
* Migrate Query Source page to React: metadata, schedule and description blocks (#4476)
* Migrate Query page to React: Cancel query execution (#4496)
* Migrate Query Source page to React: refine code (#4499)
* Migrate Query Source page to React: alerts (#4504)
* Migrate Query Source page to React: unsaved changes alert (#4505)
* Migrate Query Source to React: resizable areas (v2) (#4503)
* Migrate Query page to React: Query View (#4455)
Co-authored-by: Levko Kravets <levko.ne@gmail.com>
* Switch React and Angular versions of pages (until Angular version removed)
* Migrate Query pages to React: fix permissions (#4506)
* Migrate Query Source page to React: don't reload when saving new query (#4507)
* Migrate Query pages to React: fix tests (#4509)
* Use skipParametersDirtyFlag in executeQuery
* Fix: cannot fork query from Query View page
* Optimize query editor: handle query text changes faster
* Revert "Optimize query editor: handle query text changes faster"
This reverts commit 2934e53be6.
* Reduce debounced time to 100
* Migrate Query pages to React: cleanup (#4512)
* Migrate Query pages to React: cleanup
* Further cleanup
* Remove unused dependencies
* Fix embed pages
* Attempt to fix flaky test
* Cleanup: explicitly register the last Angular component
* Move contents of /filters folder to /lib
* Remove unnecessary import
* Remove cy.wait from Parameters spec
Co-authored-by: Gabriel Dutra <nesk.frz@gmail.com>
Co-authored-by: Levko Kravets <levko.ne@gmail.com>
89 lines
2.9 KiB
JavaScript
89 lines
2.9 KiB
JavaScript
import React from "react";
|
|
import PropTypes from "prop-types";
|
|
import Dropdown from "antd/lib/dropdown";
|
|
import Menu from "antd/lib/menu";
|
|
import Button from "antd/lib/button";
|
|
import Icon from "antd/lib/icon";
|
|
|
|
import QueryResultsLink from "./QueryResultsLink";
|
|
|
|
export default function QueryControlDropdown(props) {
|
|
const menu = (
|
|
<Menu>
|
|
{!props.query.isNew() && (!props.query.is_draft || !props.query.is_archived) && (
|
|
<Menu.Item>
|
|
<a target="_self" onClick={() => props.openAddToDashboardForm(props.selectedTab)}>
|
|
<Icon type="plus-circle" theme="filled" /> Add to Dashboard
|
|
</a>
|
|
</Menu.Item>
|
|
)}
|
|
{!props.query.isNew() && (
|
|
<Menu.Item>
|
|
<a onClick={() => props.showEmbedDialog(props.query, props.selectedTab)} data-test="ShowEmbedDialogButton">
|
|
<Icon type="share-alt" /> Embed Elsewhere
|
|
</a>
|
|
</Menu.Item>
|
|
)}
|
|
<Menu.Item>
|
|
<QueryResultsLink
|
|
fileType="csv"
|
|
disabled={props.queryExecuting || !props.queryResult.getData || !props.queryResult.getData()}
|
|
query={props.query}
|
|
queryResult={props.queryResult}
|
|
embed={props.embed}
|
|
apiKey={props.apiKey}>
|
|
<Icon type="file" /> Download as CSV File
|
|
</QueryResultsLink>
|
|
</Menu.Item>
|
|
<Menu.Item>
|
|
<QueryResultsLink
|
|
fileType="tsv"
|
|
disabled={props.queryExecuting || !props.queryResult.getData || !props.queryResult.getData()}
|
|
query={props.query}
|
|
queryResult={props.queryResult}
|
|
embed={props.embed}
|
|
apiKey={props.apiKey}>
|
|
<Icon type="file" /> Download as TSV File
|
|
</QueryResultsLink>
|
|
</Menu.Item>
|
|
<Menu.Item>
|
|
<QueryResultsLink
|
|
fileType="xlsx"
|
|
disabled={props.queryExecuting || !props.queryResult.getData || !props.queryResult.getData()}
|
|
query={props.query}
|
|
queryResult={props.queryResult}
|
|
embed={props.embed}
|
|
apiKey={props.apiKey}>
|
|
<Icon type="file-excel" /> Download as Excel File
|
|
</QueryResultsLink>
|
|
</Menu.Item>
|
|
</Menu>
|
|
);
|
|
|
|
return (
|
|
<Dropdown trigger={["click"]} overlay={menu} overlayClassName="query-control-dropdown-overlay">
|
|
<Button data-test="QueryControlDropdownButton">
|
|
<Icon type="ellipsis" rotate={90} />
|
|
</Button>
|
|
</Dropdown>
|
|
);
|
|
}
|
|
|
|
QueryControlDropdown.propTypes = {
|
|
query: PropTypes.object.isRequired, // eslint-disable-line react/forbid-prop-types
|
|
queryResult: PropTypes.object, // eslint-disable-line react/forbid-prop-types
|
|
queryExecuting: PropTypes.bool.isRequired,
|
|
showEmbedDialog: PropTypes.func.isRequired,
|
|
embed: PropTypes.bool,
|
|
apiKey: PropTypes.string,
|
|
selectedTab: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
|
|
openAddToDashboardForm: PropTypes.func.isRequired,
|
|
};
|
|
|
|
QueryControlDropdown.defaultProps = {
|
|
queryResult: {},
|
|
embed: false,
|
|
apiKey: "",
|
|
selectedTab: "",
|
|
};
|