// @flow import * as React from 'react'; import { FormattedMessage } from 'react-intl'; import classNames from 'classnames'; import MetadataDefaultBadge from '../../../icons/badges/MetadataDefaultBadge'; import MetadataActiveBadge from '../../../icons/badges/MetadataActiveBadge'; import TemplateDropdown from '../../metadata-instance-editor/TemplateDropdown'; import Button from '../../../components/button/Button'; import MenuToggle from '../../../components/dropdown-menu/MenuToggle'; import messages from '../messages'; import LoadingIndicator from '../../../components/loading-indicator'; type State = { isTemplateMenuOpen: boolean, }; type Props = { activeTemplate?: MetadataTemplate, onAdd?: Function, onTemplateChange?: Function, templates?: Array, usedTemplates: Array, }; class TemplateButton extends React.Component { static defaultProps = { usedTemplates: [], }; state = { isTemplateMenuOpen: false, }; toggleTemplateDropdownButton = () => { this.setState({ isTemplateMenuOpen: !this.state.isTemplateMenuOpen }); }; updateActiveTemplate = (template: MetadataTemplate) => { const { onTemplateChange } = this.props; if (onTemplateChange) { onTemplateChange(template); } }; renderEntryButton = () => { const { templates, activeTemplate } = this.props; let icon; let text; const isLoadingTemplates = !templates; const hasTemplates = templates && templates.length > 0; if (isLoadingTemplates) { icon = ; text = ; } else if (!hasTemplates) { text = ; } else if (activeTemplate) { icon = ; text = activeTemplate.displayName; } else if (!activeTemplate) { icon = ; text = ; } const buttonClasses = classNames('query-bar-button', { 'is-active': activeTemplate, }); return ( ); }; renderTitle = () => (
); render() { const { activeTemplate, templates, usedTemplates } = this.props; return ( } title={this.renderTitle()} onAdd={this.updateActiveTemplate} activeTemplate={activeTemplate} activeTemplateIcon={} templates={templates || []} usedTemplates={usedTemplates} entryButton={this.renderEntryButton()} /> ); } } export default TemplateButton;