grafana/public/app/features/search/components/SearchWrapper.tsx
Chi-Hsuan Huang 546f569e0c
Chore: Enable eslint-plugin-react partial rules (#29428)
* Chore: Enable eslint react/display-name

Enable react/display-name and fixed the corresponding linting issue

part of: #29201

* Chore: Enable eslint react/no-deprecated

Enable react/no-deprecated and add the UNSAFE_ prefix for deprected methods

part of: #29201

* Chore: Enable eslint react/no-find-dom-node

Enable react/no-find-dom-node rule and use ref instead

part of: #29201

* Test: Update TeamGroupSync test snapshot

Since we added the displayName for ToolTip compontent and tag name is changed.

* Fix: Fixed ClickOutsideWrapper render

The props.children might contains numbers of nodes which make cloneElement failed. Change to simply use a div to wrapper
the children and assign the ref to div for this feature

* Style: Use shorthand method definition style for inline component

* Fix: Rebase master and fix linting

Rebase from master branch and fix new displayName linting warning
2020-12-01 16:19:52 +01:00

55 lines
1.6 KiB
TypeScript

import React, { FC, memo } from 'react';
import { MapDispatchToProps, MapStateToProps } from 'react-redux';
import { UrlQueryMap } from '@grafana/data';
import { getLocationQuery } from 'app/core/selectors/location';
import { updateLocation } from 'app/core/reducers/location';
import { connectWithStore } from 'app/core/utils/connectWithReduxStore';
import { StoreState } from 'app/types';
import DashboardSearch from './DashboardSearch';
import { defaultQueryParams } from '../reducers/searchQueryReducer';
interface OwnProps {
search?: string | null;
folder?: string;
queryText?: string;
filter?: string;
}
interface DispatchProps {
updateLocation: typeof updateLocation;
}
export type Props = OwnProps & DispatchProps;
export const SearchWrapper: FC<Props> = memo(({ search, folder, updateLocation }) => {
const isOpen = search === 'open';
const closeSearch = () => {
if (isOpen) {
updateLocation({
query: {
search: null,
folder: null,
...defaultQueryParams,
} as UrlQueryMap,
partial: true,
});
}
};
return isOpen ? <DashboardSearch onCloseSearch={closeSearch} folder={folder} /> : null;
});
SearchWrapper.displayName = 'SearchWrapper';
const mapStateToProps: MapStateToProps<{}, OwnProps, StoreState> = (state: StoreState) => {
const { search, folder } = getLocationQuery(state.location);
return { search, folder };
};
const mapDispatchToProps: MapDispatchToProps<DispatchProps, OwnProps> = {
updateLocation,
};
export default connectWithStore(SearchWrapper, mapStateToProps, mapDispatchToProps);