import React from 'react'; import PropTypes from 'prop-types'; import { DropdownButton, MenuItem } from 'react-bootstrap'; import CssEditor from './CssEditor'; import RefreshIntervalModal from './RefreshIntervalModal'; import SaveModal from './SaveModal'; import SliceAdder from './SliceAdder'; import { t } from '../../locales'; import InfoTooltipWithTrigger from '../../components/InfoTooltipWithTrigger'; const $ = window.$ = require('jquery'); const propTypes = { dashboard: PropTypes.object.isRequired, filters: PropTypes.object.isRequired, slices: PropTypes.array, userId: PropTypes.string.isRequired, addSlicesToDashboard: PropTypes.func, onSave: PropTypes.func, onChange: PropTypes.func, renderSlices: PropTypes.func, serialize: PropTypes.func, startPeriodicRender: PropTypes.func, editMode: PropTypes.bool, }; function MenuItemContent({ faIcon, text, tooltip, children }) { return ( {text} {''} {children} ); } MenuItemContent.propTypes = { faIcon: PropTypes.string.isRequired, text: PropTypes.string, tooltip: PropTypes.string, children: PropTypes.node, }; function ActionMenuItem(props) { return ( ); } ActionMenuItem.propTypes = { onClick: PropTypes.func, }; class Controls extends React.PureComponent { constructor(props) { super(props); this.state = { css: props.dashboard.css || '', cssTemplates: [], }; this.refresh = this.refresh.bind(this); this.toggleModal = this.toggleModal.bind(this); } componentWillMount() { $.get('/csstemplateasyncmodelview/api/read', (data) => { const cssTemplates = data.result.map(row => ({ value: row.template_name, css: row.css, label: row.template_name, })); this.setState({ cssTemplates }); }); } refresh() { // Force refresh all slices this.props.renderSlices(true); } toggleModal(modal) { let currentModal; if (modal !== this.state.currentModal) { currentModal = modal; } this.setState({ currentModal }); } changeCss(css) { this.setState({ css }); this.props.onChange(); } render() { const { dashboard, userId, filters, addSlicesToDashboard, startPeriodicRender, serialize, onSave, editMode } = this.props; const emailBody = t('Checkout this dashboard: %s', window.location.href); const emailLink = 'mailto:?Subject=Superset%20Dashboard%20' + `${dashboard.dashboard_title}&Body=${emailBody}`; let saveText = t('Save as'); if (editMode) { saveText = t('Save'); } return ( startPeriodicRender(refreshInterval * 1000)} triggerNode={ } /> } /> {editMode && { window.location = `/dashboardmodelview/edit/${dashboard.id}`; }} /> } {editMode && { window.location = emailLink; }} faIcon="envelope" /> } {editMode && } /> } {editMode && } initialCss={dashboard.css} templates={this.state.cssTemplates} onChange={this.changeCss.bind(this)} /> } ); } } Controls.propTypes = propTypes; export default Controls;