import { PayloadAction, createAsyncThunk, createSlice } from '@reduxjs/toolkit'; import { Logger } from '../../utils/Log'; import { ISearchResult, ISearchState, SearchType } from './types'; import { searchService } from '../../services/search'; import { IContact } from '../contacts/types'; const logger = new Logger('invitationsSlice'); const initialState: ISearchState = { executingSearch: false, contactsSearchResult: [], rosterContacts: [], directoryColleagueContacts: [], enterpriseContacts: [], localPhoneContacts: [] } export const executeSearch = createAsyncThunk( 'search/executeSearch', async (queryData :{ query: string,searchType: SearchType} ) => { logger.info(`executeSearch, ${queryData.searchType}`) if (queryData.searchType === SearchType.Contacts) { searchService.searchContacts(queryData.query); } } ); const searchSlice = createSlice({ name: 'search', initialState, reducers: { setSearchQuery(state, action: PayloadAction){ logger.info(`setSearchQuery, ${action.payload}`) state.query = action.payload; }, getSearchResult(state, action: PayloadAction){ logger.info(`getSearchResult,${action.payload.length}`) state.executingSearch = false; state.contactsSearchResult = action.payload; }, searchFinished(state){ state.executingSearch = false; } }, extraReducers: builder => { builder.addCase(executeSearch.fulfilled, (state) => { state.executingSearch = true; }); }, }); // Export action creators and reducer export const { setSearchQuery, getSearchResult, searchFinished } = searchSlice.actions; export default searchSlice.reducer;