Files
discord-decomp/modules/search/SearchAutocompleteStore.tsx
T
2026-11-01 12:12:55 +02:00

347 lines
12 KiB
TypeScript

// Metro module 10105 (f10106).
import ChannelStore from "../../stores/ChannelStore";
import GuildMemberStore from "../../stores/GuildMemberStore";
import GuildStore from "../../stores/GuildStore";
import SelectedChannelStore from "../../stores/SelectedChannelStore";
import StreamerModeStore from "../../stores/StreamerModeStore";
import UserStore from "../../stores/UserStore";
import { ME, SearchPopoutModes, SearchTokenTypes } from "../../Constants";
import { AutocompleterResultTypes } from "../autocompleter/AutocompleterConstants";
import { getSearchContextId, isGuildLikeSearchContext, clearTokenCache, getQueryFromTokens, getAutocompleteMode, getGuildIdFromSearchContext } from "./SearchUtils";
import UserSearchManager from "../autocompleter/UserSearchManager";
import UserUtils from "../../utils/UserUtils";
import isEqual from "../../_bundle/isEqual_4349";
import GuildUtils from "../../utils/GuildUtils";
import { getBoosterMap } from "../../utils/AutocompleteUtils";
import * as _SearchTokens from "./tokens/SearchTokens";
import SearchTokens from "./tokens/SearchTokens";
import Module589 from "../../_bundle/Module589";
import Dispatcher from "../../Dispatcher";
let searchContext, c6725_14, c6725_15, c6725_16, c6725_17, getAutocompleteList, rebuildAutocompleteResults, c6725_21;
const handleUserSearchResults = function handleUserSearchResults(a0, { results }) {
const searchContextId = getSearchContextId(a0);
const r13 = c6725_16.get(searchContextId);
const r29 = c6725_15.get(searchContextId);
if (r13 != null && r29 != null) {
const mode = r29.mode;
let r2 = mode.type === SearchPopoutModes.FILTER;
if (r2) {
const filter = mode.filter;
r2 = filter != null && (filter === SearchTokenTypes.FILTER_FROM || filter === SearchTokenTypes.FILTER_MENTIONS);
}
if (r2) {
r13.results = (function fixUserResults(a0, r5) {
const r0 = [];
for (const item of a0) {
if (!(r0.length >= r5)) {
const user = UserStore.getUser(item.id);
const user2 = user;
if (user == null) {
continue;
}
const userTag = UserUtils.getUserTag(user2);
const text = userTag;
if (userTag == null) {
continue;
}
r0.push({
text,
user: user2
});
continue;
}
break;
}
return r0;
})(results, r29.mode.type === SearchPopoutModes.FILTER ? 10 : 3);
const { query, mode: mode2, tokens, cursorScope } = r29;
const autocompleteList = getAutocompleteList(a0, mode2, tokens);
const searchContextId2 = getSearchContextId(a0);
let r51 = c6725_16.get(searchContextId2);
if (r51 == null) {
r51 = {
results: [],
context: UserSearchManager.getUserSearchContext(handleUserSearchResults.bind(null, a0))
};
}
c6725_16.set(searchContextId2, r51);
c6725_15.set(searchContextId, {
searchContext: a0,
query,
mode: mode2,
tokens,
cursorScope,
autocompletes: autocompleteList
});
c6725_21.emitChange();
}
}
};
getAutocompleteList = function getAutocompleteList(searchContext2, a1, a2) {
let results;
const type = a1.type;
if (SearchPopoutModes.FILTER === type) {
const { filter, token } = a1;
let maxResults = c6725_17;
if (c6725_17 === void 0) {
maxResults = 10;
}
let currentUser;
currentUser = void 0;
const r1 = filter == null;
let r29 = null;
if (!r1) {
const r30 = token == null;
let query = void 0;
if (!r30) {
const fullMatch = token.getFullMatch();
query = fullMatch == null ? void 0 : fullMatch.trim();
}
if (query == null) {
query = "";
}
const length = query.length;
if (isGuildLikeSearchContext(searchContext2) && (filter != null && (filter === SearchTokenTypes.FILTER_FROM || filter === SearchTokenTypes.FILTER_MENTIONS) && length !== 0)) {
const searchContextId = getSearchContextId(searchContext2);
let r48 = c6725_16.get(searchContextId);
if (r48 == null) {
r48 = {
results: [],
context: UserSearchManager.getUserSearchContext(handleUserSearchResults.bind(null, searchContext2))
};
}
c6725_16.set(searchContextId, r48);
results = r48.results;
} else {
const getAutocompletions = SearchTokens[filter]?.getAutocompletions;
results = getAutocompletions != null ? getAutocompletions({
query,
searchContext: searchContext2,
maxResults,
tokens: a2
}) : [];
}
let results2 = results;
if (results2 != null) {
const r68 = filter != null && (filter === SearchTokenTypes.FILTER_FROM || filter === SearchTokenTypes.FILTER_MENTIONS);
results2 = results;
if (r68) {
const isMeAutcompleteAnswer = _SearchTokens.isMeAutcompleteAnswer(query);
results2 = results;
if (isMeAutcompleteAnswer) {
currentUser = UserStore.getCurrentUser();
results2 = results;
if (currentUser != null) {
const r82 = results.filter((result) => result.user?.id !== currentUser.id);
r82.unshift({
text: ME,
user: currentUser
});
results2 = r82;
}
}
}
}
r29 = results2 == null ? null : results2.length !== 0 ? {
group: filter,
results: results2
} : null;
}
return r29 != null ? [r29] : c6725_14;
}
if (SearchPopoutModes.FILTER_ALL !== type && SearchPopoutModes.EMPTY !== type) {
return void 0;
}
return c6725_14;
};
const handleChannelCreateOrDelete = function handleChannelCreateOrDelete() {
clearTokenCache();
};
rebuildAutocompleteResults = function rebuildAutocompleteResults(a0) {
const searchContextId = getSearchContextId(a0);
const r21 = c6725_15.get(searchContextId);
if (r21 == null) {
return false;
}
const { query, mode, tokens, cursorScope } = r21;
const autocompleteList = getAutocompleteList(a0, mode, tokens);
const searchContextId2 = getSearchContextId(a0);
let r28 = c6725_16.get(searchContextId2);
if (r28 == null) {
r28 = {
results: [],
context: UserSearchManager.getUserSearchContext(handleUserSearchResults.bind(null, a0))
};
}
c6725_16.set(searchContextId2, r28);
c6725_15.set(searchContextId, {
searchContext: a0,
query,
mode,
tokens,
cursorScope,
autocompletes: autocompleteList
});
};
searchContext = null;
c6725_14 = [];
c6725_15 = new Map();
c6725_16 = new Map();
c6725_17 = 10;
new Set([SearchTokenTypes.FILTER_FROM, SearchTokenTypes.FILTER_IN, SearchTokenTypes.FILTER_MENTIONS]);
class SearchAutocompleteStoreClass extends Module589.Store {
static displayName = "SearchAutocompleteStore";
initialize() {
this.waitFor(ChannelStore, GuildMemberStore, GuildStore, SelectedChannelStore, StreamerModeStore, UserStore);
}
getState(a0) {
let r11 = c6725_15.get(getSearchContextId(a0));
if (r11 == null) {
r11 = {
searchContext: a0,
query: "",
mode: {
type: SearchPopoutModes.EMPTY,
filter: null,
token: null
},
tokens: [],
cursorScope: null,
autocompletes: []
};
}
return r11;
}
getSelectedSearchContext() {
return searchContext;
}
}
c6725_21 = new SearchAutocompleteStoreClass(Dispatcher, {
SEARCH_AUTOCOMPLETE_INITIALIZE: function handleSearchAutocompleteInitialize({ searchContext: searchContext2 }) {
if (!isEqual(searchContext, searchContext2)) {
searchContext = searchContext2;
clearTokenCache();
}
rebuildAutocompleteResults(searchContext2);
},
SEARCH_AUTOCOMPLETE_QUERY_UPDATE: function handleSearchAutocompleteQueryUpdate({ searchContext: searchContext2, tokens, cursorScope }) {
let r46, r66, autocompleteMode, autocompletes, queryFromTokens, searchContextId;
if (!isEqual(searchContext, searchContext2)) {
searchContext = searchContext2;
clearTokenCache();
}
L34: {
L6: {
queryFromTokens = getQueryFromTokens(tokens);
autocompleteMode = getAutocompleteMode(cursorScope, tokens);
searchContextId = getSearchContextId(searchContext2);
r46 = c6725_15.get(searchContextId);
if (r46 != null && queryFromTokens === r46.query) {
if (r46.mode != null && r46.mode.filter !== autocompleteMode.filter) {
break L6;
}
autocompletes = r46.autocompletes;
r66 = false;
break L34;
}
}
let r1 = autocompleteMode.type === SearchPopoutModes.FILTER;
if (r1) {
const filter = autocompleteMode.filter;
r1 = filter != null && (filter === SearchTokenTypes.FILTER_FROM || filter === SearchTokenTypes.FILTER_MENTIONS);
}
if (r1) {
const searchContextId2 = getSearchContextId(searchContext2);
let r71 = c6725_16.get(searchContextId2);
if (r71 == null) {
r71 = {
results: [],
context: UserSearchManager.getUserSearchContext(handleUserSearchResults.bind(null, searchContext2))
};
}
c6725_16.set(searchContextId2, r71);
const token = autocompleteMode.token;
const r80 = token == null;
let query = void 0;
if (!r80) {
const fullMatch = token.getFullMatch();
query = fullMatch == null ? void 0 : fullMatch.trim();
}
if (query != null && query.length > 0) {
const guildIdFromSearchContext = getGuildIdFromSearchContext(searchContext2);
if (guildIdFromSearchContext != null) {
GuildUtils.requestMembers(guildIdFromSearchContext, query, c6725_17);
}
const context = r71.context;
let guild = guildIdFromSearchContext;
if (guild == null) {
guild = void 0;
}
context.setQuery({
query,
filters: {
guild
},
boosters: getBoosterMap(AutocompleterResultTypes.USER)
});
let r115 = r46?.autocompletes;
if (r115 == null) {
r115 = [];
}
r66 = false;
autocompletes = r115;
break L34;
}
r71.context.clearQuery();
autocompletes = getAutocompleteList(searchContext2, autocompleteMode, tokens);
r66 = true;
} else {
const r59 = c6725_16.get(searchContextId);
if (r59 != null) {
r59.context.clearQuery();
r59.results = [];
}
autocompletes = getAutocompleteList(searchContext2, autocompleteMode, tokens);
r66 = true;
}
}
const searchContextId3 = getSearchContextId(searchContext2);
let r122 = c6725_16.get(searchContextId3);
if (r122 == null) {
r122 = {
results: [],
context: UserSearchManager.getUserSearchContext(handleUserSearchResults.bind(null, searchContext2))
};
}
c6725_16.set(searchContextId3, r122);
c6725_15.set(searchContextId, {
searchContext: searchContext2,
query: queryFromTokens,
mode: autocompleteMode,
tokens,
cursorScope,
autocompletes
});
return r66;
},
SEARCH_QUERY_TEXT_CLEAR: function handleSearchQueryTextClear({ id }) {
const r5 = c6725_16.get(id);
if (r5 != null) {
r5.context.destroy();
r5.results = [];
c6725_16.delete(id);
}
c6725_15.delete(id);
searchContext = null;
},
CHANNEL_CREATE: handleChannelCreateOrDelete,
CHANNEL_DELETE: handleChannelCreateOrDelete,
STREAMER_MODE_UPDATE: function handleStreamerModeUpdate() {
return searchContext != null && rebuildAutocompleteResults(searchContext);
},
CHANNEL_SELECT: function handleChannelSelect() {
return searchContext != null && rebuildAutocompleteResults(searchContext);
}
});
export default c6725_21;