grafana/public/app/features/search/components/SearchWrapper.tsx
Alex Khomenko 8709c9a8a5
Search: Toggle Search based on search query (#23648)
* Search: Toggle Search based on search query

* Search: Fix types and closed search param

* Search: Remove appEvents from SearchWrapper

* Search: Reset folder on close

Co-Authored-By: Alexander Zobnin <alexanderzobnin@gmail.com>

* Search: Disable reloadOnSearch for manage dashboards urls

Co-authored-by: Alexander Zobnin <alexanderzobnin@gmail.com>
2020-04-20 18:04:51 +03:00

50 lines
1.4 KiB
TypeScript

import React, { FC, memo } from 'react';
import { MapDispatchToProps, MapStateToProps } from 'react-redux';
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';
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 (search === 'open') {
updateLocation({
query: {
search: null,
folder: null,
},
partial: true,
});
}
};
return isOpen ? <DashboardSearch onCloseSearch={closeSearch} folder={folder} /> : null;
});
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);