import React, { FC, memo } from 'react'; import { css } from 'emotion'; import { useTheme, CustomScrollbar, stylesFactory, IconButton } from '@grafana/ui'; import { GrafanaTheme } from '@grafana/data'; import { useSearchQuery } from '../hooks/useSearchQuery'; import { useDashboardSearch } from '../hooks/useDashboardSearch'; import { SearchField } from './SearchField'; import { SearchResults } from './SearchResults'; import { ActionRow } from './ActionRow'; import { connectWithRouteParams, ConnectProps, DispatchProps } from '../connect'; export interface OwnProps { onCloseSearch: () => void; } export type Props = OwnProps & ConnectProps & DispatchProps; export const DashboardSearch: FC = memo(({ onCloseSearch, params, updateLocation }) => { const { query, onQueryChange, onTagFilterChange, onTagAdd, onSortChange, onLayoutChange } = useSearchQuery( params, updateLocation ); const { results, loading, onToggleSection, onKeyDown } = useDashboardSearch(query, onCloseSearch); const theme = useTheme(); const styles = getStyles(theme); return (
); }); DashboardSearch.displayName = 'DashboardSearch'; export default connectWithRouteParams(DashboardSearch); const getStyles = stylesFactory((theme: GrafanaTheme) => { return { overlay: css` left: 0; top: 0; right: 0; bottom: 0; z-index: ${theme.zIndex.sidemenu}; position: fixed; background: ${theme.colors.dashboardBg}; @media only screen and (min-width: ${theme.breakpoints.md}) { left: 60px; z-index: ${theme.zIndex.navbarFixed + 1}; } `, container: css` max-width: 1400px; margin: 0 auto; padding: ${theme.spacing.md}; height: 100%; @media only screen and (min-width: ${theme.breakpoints.md}) { padding: 32px; } `, closeBtn: css` right: -5px; top: 2px; z-index: 1; position: absolute; `, searchField: css` position: relative; `, search: css` display: flex; flex-direction: column; height: 100%; `, }; });