import * as React from 'react'; import styled from '@emotion/styled'; import Feature from 'app/components/acl/feature'; import FeatureDisabled from 'app/components/acl/featureDisabled'; import Button from 'app/components/button'; import ButtonBar from 'app/components/buttonBar'; import Confirm from 'app/components/confirm'; import Hovercard from 'app/components/hovercard'; import {IconEdit} from 'app/icons'; import {t} from 'app/locale'; import space from 'app/styles/space'; import {Organization} from 'app/types'; import {DashboardListItem, DashboardState} from './types'; type Props = { organization: Organization; dashboards: DashboardListItem[]; onEdit: () => void; onCancel: () => void; onCommit: () => void; onDelete: () => void; dashboardState: DashboardState; }; class Controls extends React.Component { render() { const {dashboardState, dashboards, onEdit, onCancel, onCommit, onDelete} = this.props; const cancelButton = ( ); if ([DashboardState.EDIT, DashboardState.PENDING_DELETE].includes(dashboardState)) { return ( {cancelButton} ); } if (dashboardState === 'create') { return ( {cancelButton} ); } return ( {hasFeature => ( )} ); } } const DashboardEditFeature = ({ children, }: { children: (hasFeature: boolean) => React.ReactNode; }) => { const noFeatureMessage = t('Requires dashboard editing.'); const renderDisabled = p => ( } > {p.children(p)} ); return ( {({hasFeature}) => children(hasFeature)} ); }; const StyledButtonBar = styled(ButtonBar)` @media (max-width: ${p => p.theme.breakpoints[0]}) { grid-auto-flow: row; grid-row-gap: ${space(1)}; width: 100%; } `; export default Controls;