+ dispatch<any>(searchGroups(searchValue));
+ if (currentView === SearchView.BASIC) {
+ dispatch(searchBarActions.CLOSE_SEARCH_VIEW());
+ dispatch(navigateToSearchResults);
+ }
+
+ };
+
+export const searchAdvanceData = (data: SearchBarAdvanceFormData) =>
+ async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => {
+ const searchValue = getState().searchBar.searchValue;
+ dispatch<any>(saveQuery(data));
+ dispatch<any>(searchGroups(searchValue, 100, data.type));
+ dispatch(searchBarActions.SET_CURRENT_VIEW(SearchView.BASIC));
+ dispatch(searchBarActions.CLOSE_SEARCH_VIEW());
+ dispatch(navigateToSearchResults);
+ };
+
+// Todo: create ids for particular searchQuery
+const saveQuery = (data: SearchBarAdvanceFormData) =>
+ (dispatch: Dispatch<any>, getState: () => RootState, services: ServiceRepository) => {
+ const savedSearchQueries = services.searchService.getSavedQueries();
+ const filteredQuery = savedSearchQueries.find(query => query.searchQuery === data.searchQuery);
+ if (data.saveQuery && data.searchQuery) {
+ if (filteredQuery) {
+ services.searchService.editSavedQueries(data);
+ dispatch(searchBarActions.UPDATE_SAVED_QUERY(savedSearchQueries));
+ dispatch(snackbarActions.OPEN_SNACKBAR({ message: 'Query has been sucessfully updated', hideDuration: 2000, kind: SnackbarKind.SUCCESS }));
+ } else {
+ services.searchService.saveQuery(data);
+ dispatch(searchBarActions.SET_SAVED_QUERIES(savedSearchQueries));
+ dispatch(snackbarActions.OPEN_SNACKBAR({ message: 'Query has been sucessfully saved', hideDuration: 2000, kind: SnackbarKind.SUCCESS }));
+ }
+ }
+ };
+
+export const deleteSavedQuery = (id: number) =>
+ (dispatch: Dispatch<any>, getState: () => RootState, services: ServiceRepository) => {
+ services.searchService.deleteSavedQuery(id);
+ const savedSearchQueries = services.searchService.getSavedQueries();
+ dispatch(searchBarActions.SET_SAVED_QUERIES(savedSearchQueries));
+ return savedSearchQueries || [];
+ };
+
+export const editSavedQuery = (data: SearchBarAdvanceFormData) =>
+ (dispatch: Dispatch<any>, getState: () => RootState, services: ServiceRepository) => {
+ dispatch(searchBarActions.SET_CURRENT_VIEW(SearchView.ADVANCED));
+ dispatch(searchBarActions.SET_SEARCH_VALUE(data.searchQuery));
+ dispatch<any>(initialize(SEARCH_BAR_ADVANCE_FORM_NAME, data));
+ };
+
+export const openSearchView = () =>
+ (dispatch: Dispatch<any>, getState: () => RootState, services: ServiceRepository) => {
+ dispatch(searchBarActions.OPEN_SEARCH_VIEW());
+ const savedSearchQueries = services.searchService.getSavedQueries();
+ dispatch(searchBarActions.SET_SAVED_QUERIES(savedSearchQueries));
+ };
+
+export const closeSearchView = () =>
+ (dispatch: Dispatch<any>, getState: () => RootState, services: ServiceRepository) => {
+ const isOpen = getState().searchBar.open;
+ if (isOpen) {
+ dispatch(searchBarActions.CLOSE_SEARCH_VIEW());
+ dispatch(searchBarActions.SET_CURRENT_VIEW(SearchView.BASIC));
+ }
+ };
+
+export const closeAdvanceView = () =>
+ (dispatch: Dispatch<any>, getState: () => RootState, services: ServiceRepository) => {
+ dispatch(searchBarActions.SET_SEARCH_VALUE(''));
+ dispatch(searchBarActions.SET_CURRENT_VIEW(SearchView.BASIC));
+ };
+
+export const navigateToItem = (uuid: string) =>
+ (dispatch: Dispatch<any>, getState: () => RootState, services: ServiceRepository) => {
+ dispatch(searchBarActions.CLOSE_SEARCH_VIEW());
+ dispatch(navigateTo(uuid));
+ };
+
+export const changeData = (searchValue: string) =>
+ (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => {
+ dispatch(searchBarActions.SET_SEARCH_VALUE(searchValue));
+ const currentView = getState().searchBar.currentView;
+ const searchValuePresent = searchValue.length > 0;
+
+ if (currentView === SearchView.ADVANCED) {
+
+ } else if (searchValuePresent) {
+ dispatch<any>(goToView(SearchView.AUTOCOMPLETE));
+ debounceStartSearch(dispatch);
+ } else {
+ dispatch<any>(goToView(SearchView.BASIC));
+ dispatch(searchBarActions.SET_SEARCH_VALUE(searchValue));
+ dispatch(searchBarActions.SET_SEARCH_RESULTS([]));
+ }
+ };
+
+export const submitData = (event: React.FormEvent<HTMLFormElement>) =>
+ (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => {
+ event.preventDefault();
+ const searchValue = getState().searchBar.searchValue;
+ dispatch<any>(saveRecentQuery(searchValue));
+ dispatch<any>(searchDataOnEnter(searchValue));
+ dispatch<any>(loadRecentQueries());
+ };
+
+const searchDataOnEnter = (searchValue: string) =>
+ (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => {
+ dispatch(searchBarActions.CLOSE_SEARCH_VIEW());
+ dispatch(searchBarActions.SET_SEARCH_VALUE(searchValue));
+ dispatch(searchBarActions.SET_SEARCH_RESULTS([]));
+ dispatch<any>(searchGroups(searchValue, 100));
+ dispatch(navigateToSearchResults);
+ };
+
+const debounceStartSearch = debounce((dispatch: Dispatch) => dispatch<any>(startSearch()), DEFAULT_SEARCH_DEBOUNCE);
+
+const startSearch = () =>
+ (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => {
+ const searchValue = getState().searchBar.searchValue;
+ dispatch<any>(searchData(searchValue));
+ };
+
+const searchGroups = (searchValue: string, limit = 5, resourceKind?: ResourceKind) =>
+ async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => {
+ const currentView = getState().searchBar.currentView;
+
+ if (searchValue || currentView === SearchView.ADVANCED) {
+ const filters = getFilters('name', searchValue, resourceKind);