TelegramPWA/src/global/actions/ui/globalSearch.ts

76 lines
2.3 KiB
TypeScript

import type { ActionReturnType } from '../../types';
import { GlobalSearchContent } from '../../../types';
import { getCurrentTabId } from '../../../util/establishMultitabRole';
import { addActionHandler } from '../../index';
import { updateGlobalSearch, updateGlobalSearchContent } from '../../reducers';
import { selectTabState } from '../../selectors';
const MAX_RECENTLY_FOUND_IDS = 10;
addActionHandler('setGlobalSearchQuery', (global, actions, payload): ActionReturnType => {
const { query, tabId = getCurrentTabId() } = payload;
const { chatId, currentContent } = selectTabState(global, tabId).globalSearch;
const fetchingStatus = query
&& currentContent !== GlobalSearchContent.BotApps && currentContent !== GlobalSearchContent.PublicPosts
? { chats: !chatId, messages: true } : undefined;
return updateGlobalSearch(global, {
globalResults: {},
localResults: {},
resultsByType: undefined,
fetchingStatus,
query,
}, tabId);
});
addActionHandler('setGlobalSearchClosing', (global, actions, payload): ActionReturnType => {
const { tabId = getCurrentTabId(), isClosing } = payload || {};
return updateGlobalSearch(global, {
isClosing,
}, tabId);
});
addActionHandler('addRecentlyFoundChatId', (global, actions, payload): ActionReturnType => {
const { id } = payload;
const { recentlyFoundChatIds } = global;
if (!recentlyFoundChatIds) {
return {
...global,
recentlyFoundChatIds: [id],
};
}
const newRecentIds = recentlyFoundChatIds.filter((chatId) => chatId !== id);
newRecentIds.unshift(id);
if (newRecentIds.length > MAX_RECENTLY_FOUND_IDS) {
newRecentIds.pop();
}
return {
...global,
recentlyFoundChatIds: newRecentIds,
};
});
addActionHandler('clearRecentlyFoundChats', (global): ActionReturnType => {
return {
...global,
recentlyFoundChatIds: undefined,
};
});
addActionHandler('setGlobalSearchContent', (global, actions, payload): ActionReturnType => {
const { content, tabId = getCurrentTabId() } = payload;
return updateGlobalSearchContent(global, content, tabId);
});
addActionHandler('setGlobalSearchChatId', (global, actions, payload): ActionReturnType => {
const { id, tabId = getCurrentTabId() } = payload;
return updateGlobalSearch(global, { chatId: id, query: undefined, resultsByType: undefined }, tabId);
});