mirror of
https://github.com/getredash/redash.git
synced 2025-12-25 01:03:20 -05:00
94 lines
2.8 KiB
JavaScript
94 lines
2.8 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 { react2angular } from 'react2angular';
|
|
|
|
import QueryResultsLink from './QueryResultsLink';
|
|
|
|
|
|
export 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
|
|
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="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: '',
|
|
};
|
|
|
|
export default function init(ngModule) {
|
|
ngModule.component('queryControlDropdown', react2angular(QueryControlDropdown));
|
|
}
|
|
|
|
init.init = true;
|