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

577 lines
17 KiB
TypeScript

// Metro module 10103 (f10104).
import ChannelStore from "../../stores/ChannelStore";
import GuildChannelStore from "../../stores/GuildChannelStore";
import GuildNSFWAgreeStore from "../../stores/GuildNSFWAgreeStore";
import RelationshipStore from "../../stores/RelationshipStore";
import "../../stores/SelectedChannelStore";
import UserStore from "../../stores/UserStore";
import { SearchTabs } from "./SearchConstants";
import { IS_SEARCH_ANSWER_TOKEN, IS_SEARCH_FILTER_TOKEN, SearchModes, SearchPopoutModes, SearchTokenTypes, SearchTypes, ME } from "../../Constants";
import Module3771 from "../../_bundle/Module3771";
import { intl, t } from "../../intl/index.native";
import SearchTokens, { isSearchFilterTokenType, rebuildSearchTokenConfigs, buildCrossDMSearchTokensConfig } from "./tokens/SearchTokens";
import SnowflakeUtils from "../../utils/SnowflakeUtils";
import QueryTokenizer from "../../lib/QueryTokenizer";
import Module12 from "../../_bundle/Module12";
import SearchActionCreators from "./SearchActionCreators";
import { computeChannelName } from "../channel/useChannelName";
import UserUtils from "../../utils/UserUtils";
function $mk83946() {
return (a0, a1) => `\\${a1}`;
}
ME;
let c6723_16 = 2592000;
let c6723_17 = 31536000;
const r45 = {};
r45[SearchTokenTypes.FILTER_BEFORE] = true;
r45[SearchTokenTypes.FILTER_AFTER] = true;
r45[SearchTokenTypes.FILTER_ON] = true;
let c6723_18 = r45;
let c6723_19 = new QueryTokenizer();
let c6723_20 = new QueryTokenizer();
export function getSearchContextId(a0) {
const type = a0.type;
if (SearchTypes.GUILD === type) {
return a0.guildId;
}
if (SearchTypes.GUILD_CHANNEL !== type && SearchTypes.CHANNEL !== type && SearchTypes.THREAD !== type) {
if (SearchTypes.DMS === type) {
return a0.type;
}
return void 0;
}
return a0.channelId;
}
export function getSearchHistoryStateId(a0) {
let guildId;
L8: {
const type = a0.type;
if (SearchTypes.GUILD === type) {
guildId = a0.guildId;
} else {
if (SearchTypes.GUILD_CHANNEL !== type && SearchTypes.CHANNEL !== type && SearchTypes.THREAD !== type) {
const DMS = SearchTypes.DMS;
guildId = void 0;
if (DMS !== type) {
break L8;
}
guildId = a0.type;
break L8;
}
guildId = a0.channelId;
}
}
return guildId;
}
export function getSearchTabFetchId(a0, a1, a2) {
let guildId;
L8: {
const type = a0.type;
if (SearchTypes.GUILD === type) {
guildId = a0.guildId;
} else {
if (SearchTypes.GUILD_CHANNEL !== type && SearchTypes.CHANNEL !== type && SearchTypes.THREAD !== type) {
const DMS = SearchTypes.DMS;
guildId = void 0;
if (DMS !== type) {
break L8;
}
guildId = a0.type;
break L8;
}
guildId = a0.channelId;
}
}
return `${guildId}-${a1}-${a2}`;
}
export function getChannelActiveAgoTimestamp(a0) {
const r19 = Module3771().diff(Module3771(a0), "s");
if (r19 > c6723_17) {
return intl.formatToPlainString(t["7th+Mf"], {
count: Math.round(r19 / c6723_17)
});
}
if (r19 > c6723_16) {
return intl.formatToPlainString(t.g2uHTD, {
count: Math.round(r19 / c6723_16)
});
}
if (r19 > 172800) {
return intl.formatToPlainString(t.HNgi95, {
count: Math.round(r19 / 86400)
});
}
if (r19 > 86400) {
return intl.string(t.uNkIhT);
}
if (r19 > 3600) {
return intl.formatToPlainString(t.WJBWP1, {
count: Math.round(r19 / 3600)
});
}
if (r19 > 60) {
return intl.formatToPlainString(t.CbRfwg, {
count: Math.round(r19 / 60)
});
}
return intl.string(t["5Ldpkc"]);
}
export function getIndexingErrorText({ type }) {
if (SearchTypes.CHANNEL === type) {
return intl.string(t.Q0JJjv);
}
if (SearchTypes.DMS === type) {
return intl.string(t.Br0xJA);
}
if (SearchTypes.GUILD_CHANNEL !== type && SearchTypes.GUILD !== type && SearchTypes.THREAD !== type) {
return void 0;
}
return intl.string(t.AXPbZr);
}
export function getGuildIdFromSearchContext(a0) {
const type = a0.type;
if (SearchTypes.GUILD_CHANNEL !== type && SearchTypes.GUILD !== type && SearchTypes.THREAD !== type) {
if (SearchTypes.CHANNEL === type) {
let r15 = ChannelStore.getChannel(a0.channelId)?.guild_id;
if (r15 == null) {
r15 = null;
}
return r15;
}
return null;
}
return a0.guildId;
}
export function isGuildLikeSearchContext(a0) {
return a0.type === SearchTypes.GUILD || a0.type === SearchTypes.GUILD_CHANNEL || a0.type === SearchTypes.THREAD;
}
export function getChannelIdFromSearchContext(a0) {
const type = a0.type;
if (SearchTypes.GUILD_CHANNEL !== type && SearchTypes.CHANNEL !== type && SearchTypes.THREAD !== type) {
return null;
}
return a0.channelId;
}
export function getTabTitle(a0) {
if (SearchTabs.RECENT === a0) {
return intl.string(t.tWnHcL);
}
if (SearchTabs.MESSAGES === a0) {
return intl.string(t.dvZAkp);
}
if (SearchTabs.PEOPLE === a0) {
return intl.string(t["GFd/I5"]);
}
if (SearchTabs.MEDIA === a0) {
return intl.string(t["Aw9+/M"]);
}
if (SearchTabs.PINS === a0) {
return intl.string(t["/MoGoB"]);
}
if (SearchTabs.LINKS === a0) {
return intl.string(t.DFSvTt);
}
if (SearchTabs.FILES === a0) {
return intl.string(t["WgVYR/"]);
}
if (SearchTabs.GUILD_CHANNELS === a0) {
return intl.string(t.OGiMXJ);
}
if (SearchTabs.MEMBERS === a0) {
return intl.string(t["9Oq93m"]);
}
if (SearchTabs.THREADS === a0) {
return intl.string(t.B2panI);
}
}
export function searchModeToSearchQueryParams(a0) {
if (SearchModes.MOST_RELEVANT === a0) {
return {
sort_by: "relevance",
sort_order: "desc"
};
}
if (SearchModes.OLDEST === a0) {
return {
sort_by: "timestamp",
sort_order: "asc"
};
}
SearchModes.NEWEST;
return {
sort_by: "timestamp",
sort_order: "desc"
};
}
export function searchQueryParamsToSearchMode(a0) {
let MOST_RELEVANT;
L10: {
if (a0.sort_by != null && a0.sort_order != null) {
if (a0.sort_by === "relevance") {
MOST_RELEVANT = SearchModes.MOST_RELEVANT;
break L10;
}
if (a0.sort_order === "asc") {
MOST_RELEVANT = SearchModes.OLDEST;
break L10;
}
MOST_RELEVANT = SearchModes.NEWEST;
} else {
MOST_RELEVANT = SearchModes.NEWEST;
}
}
return MOST_RELEVANT;
}
export function getSearchOptionAnswer(a0) {
if (SearchTokenTypes.FILTER_FROM === a0) {
return intl.string(t.E466pL);
}
if (SearchTokenTypes.FILTER_MENTIONS === a0) {
return intl.string(t.BYvFWl);
}
if (SearchTokenTypes.FILTER_HAS === a0) {
return intl.string(t.bhSYbc);
}
if (SearchTokenTypes.FILTER_BEFORE !== a0 && SearchTokenTypes.FILTER_ON !== a0 && SearchTokenTypes.FILTER_AFTER !== a0) {
if (SearchTokenTypes.FILTER_IN === a0) {
return intl.string(t["GpM+/7"]);
}
if (SearchTokenTypes.FILTER_LINK_FROM === a0) {
return intl.string(t.FdDTni);
}
if (SearchTokenTypes.FILTER_FILE_TYPE === a0) {
return intl.string(t.FXcAFe);
}
if (SearchTokenTypes.FILTER_FILE_NAME === a0) {
return intl.string(t.uAbFDM);
}
if (SearchTokenTypes.FILTER_PINNED === a0) {
return intl.string(t.UJxL3V);
}
if (SearchTokenTypes.FILTER_AUTHOR_TYPE === a0) {
return intl.string(t.qCQzBl);
}
return void 0;
}
return intl.string(t.Zbbc1E);
}
export { c6723_18 as ShowDatePicker };
export function setIncludeNSFW(a0, a1) {
if (GuildNSFWAgreeStore.didAgree(a1)) {
const currentUser = UserStore.getCurrentUser();
if (currentUser == null) {
return void 0;
}
a0.include_nsfw = currentUser.nsfwAllowed == null || currentUser.nsfwAllowed;
}
}
export function getSearchQueryFromTokens(a0) {
const r0 = {};
let c17687_0 = r0;
a0.forEach((a0) => {
L32: {
const type = a0.type;
if (!IS_SEARCH_FILTER_TOKEN.test(type)) {
if (SearchTokenTypes.ANSWER_BEFORE !== type && SearchTokenTypes.ANSWER_ON !== type && SearchTokenTypes.ANSWER_AFTER !== type) {
const r7 = (function getQueryKey(a0) {
const r8 = SearchTokens[a0];
let r10 = r8 != null ? r8.queryKey : null;
if (r10 == null) {
r10 = "content";
}
return r10;
})(type);
if (c17687_0[r7] == null) {
c17687_0[r7] = new Set();
}
const r33 = c17687_0[r7];
if (SearchTokenTypes.ANSWER_USERNAME_FROM !== type && SearchTokenTypes.ANSWER_USERNAME_MENTIONS !== type) {
if (SearchTokenTypes.ANSWER_LINK_FROM !== type && SearchTokenTypes.ANSWER_FILE_TYPE !== type && SearchTokenTypes.ANSWER_FILE_NAME !== type) {
if (SearchTokenTypes.ANSWER_IN !== type) {
if (SearchTokenTypes.ANSWER_HAS === type) {
r33.add(a0.getData("has"));
break L32;
}
if (SearchTokenTypes.ANSWER_PINNED === type) {
r33.add(a0.getData("pinned"));
break L32;
}
if (SearchTokenTypes.ANSWER_AUTHOR_TYPE === type) {
r33.add(a0.getData("author_type"));
break L32;
}
r33.add(a0.getFullMatch().trim());
break L32;
}
let r66 = a0.getData("channelIds");
if (r66 == null) {
r66 = [];
}
for (const item of r66) {
r33.add(item);
}
break L32;
}
r33.add(a0.getMatch(1));
break L32;
}
r33.add(a0.getData("userId"));
break L32;
}
const data = a0.getData("start");
const data2 = a0.getData("end");
if (data) {
c17687_0.min_id = SnowflakeUtils.fromTimestamp(data);
}
if (data2) {
c17687_0.max_id = SnowflakeUtils.fromTimestamp(data2);
}
return void 0;
}
}
});
for (const item of Object.entries(r0)) {
const [r37, r38] = item;
if (r38 instanceof Set) {
r0[r37] = Array.from(r38);
}
}
if (r0.content) {
delete r0["contents"];
r0.content = r0.content.join(" ").trim();
if (!r0.content) {
delete r0["content"];
}
}
return r0;
}
export function getQueryContentString(a0) {
let r12;
if (a0?.contents != null && a0.contents.length > 0) {
const r13 = a0 == null;
let r5 = void 0;
if (!r13) {
const contents = a0.contents;
r5 = contents == null ? void 0 : contents.map((content) => content.split("|").slice(1).join("|")).join(" ");
}
r12 = r5;
} else {
r12 = a0?.content;
}
return r12;
}
export function getNonTokenQuery(a0) {
return a0.map((item) => item.type === QueryTokenizer.NON_TOKEN_TYPE ? item.getFullMatch() : "").join(" ").trim();
}
export function getSelectionScope(a0, a1, a2) {
let previousToken, nextToken;
const currentToken = a0.find((item, index) => {
let r1;
L7: {
if (a1 >= item.start && a1 <= item.end) {
if (a2 >= item.start && a2 <= item.end) {
const r3 = a0[index + 1] != null;
r1 = true;
if (!r3) {
break L7;
}
nextToken = a0[index + 1];
r1 = true;
} else {
previousToken = item;
r1 = false;
}
} else {
previousToken = item;
r1 = false;
}
}
return r1;
});
return currentToken != null ? {
previousToken,
currentToken,
nextToken,
focusOffset: a1,
anchorOffset: a2
} : null;
}
export function getAutocompleteMode(a0, a1) {
const r7 = a0 == null ? {} : a0;
const { currentToken, nextToken: nextToken2, previousToken: previousToken2 } = r7;
if (a1.length === 0) {
return {
type: SearchPopoutModes.EMPTY,
filter: null,
token: null
};
}
if (currentToken == null) {
return {
type: SearchPopoutModes.FILTER_ALL,
filter: null,
token: null
};
}
L10: {
if (isSearchFilterTokenType(currentToken.type)) {
if (nextToken2 != null && nextToken2.type !== QueryTokenizer.NON_TOKEN_TYPE) {
if (nextToken2 == null) {
break L10;
}
if (IS_SEARCH_ANSWER_TOKEN.test(nextToken2.type)) {
break L10;
}
return {
type: SearchPopoutModes.FILTER,
filter: currentToken.type,
token: null
};
}
return {
type: SearchPopoutModes.FILTER,
filter: currentToken.type,
token: nextToken2
};
}
}
return currentToken.type === QueryTokenizer.NON_TOKEN_TYPE && (previousToken2 != null && isSearchFilterTokenType(previousToken2.type)) ? {
type: SearchPopoutModes.FILTER,
filter: previousToken2.type,
token: currentToken
} : {
type: SearchPopoutModes.FILTER_ALL,
filter: null,
token: currentToken.type === QueryTokenizer.NON_TOKEN_TYPE ? currentToken : void 0
};
}
export function quoteChannelName(a0) {
return a0.match(/([\\" ])/g) != null ? `"${a0.replaceAll.call(a0, /([\\"])/g, $mk83946())}"` : a0;
}
export function getFlattenedAutocompleteResults(a0, c17689_0) {
let c17689_1 = [];
Module12(a0).forEach((item) => {
let group;
if (item != null && item.results.length !== 0) {
group = item.group;
c17689_1 = c17689_1.concat(item.results.map((a0) => {
const text = a0.text;
const r10 = a0.channel != null ? text.match(/([\\" ])/g) != null ? `"${text.replaceAll(/([\\"])/g, $mk83946())}"` : text : text;
const type = c17689_0.type;
const FILTER_ALL = SearchPopoutModes.FILTER_ALL;
let resultText = r10;
if (type === FILTER_ALL) {
let group2 = a0.group;
if (group2 == null) {
group2 = group;
}
group = group2;
const r34 = SearchTokens[group];
resultText = r34?.key != null && r34?.key !== "" ? `${r34.key} ${r10}` : r10;
}
return {
result: a0,
group: item.group,
resultText
};
}));
}
});
return c17689_1.filter((item) => item.resultText !== "");
}
export function getQueryFromTokens(a0) {
return a0 == null ? "" : a0.map((item) => item.getFullMatch()).join("");
}
export function queryHasFilter(a0, c17690_0) {
return c6723_19.tokenize(a0).some((item) => item.type === c17690_0);
}
export function tokenizeQuery(a0) {
return c6723_19.tokenize(a0);
}
export function clearTokenCache() {
c6723_19.clearCache();
c6723_20.clearCache();
}
export function showDatePicker(a0) {
return a0 != null ? c6723_18[a0] : null;
}
export function filterHasAnswer(a0, a1) {
const r7 = IS_SEARCH_FILTER_TOKEN.test(a0.type);
return !(a1 == null && r7 || a1 != null && r7 && !IS_SEARCH_ANSWER_TOKEN.test(a1.type));
}
export function refreshSearchTokens() {
rebuildSearchTokenConfigs();
c6723_19.reset();
Module12(SearchTokens).forOwn((a0, a1) => c6723_19.addRule({
type: a1,
...a0
}));
c6723_20.reset();
Module12(buildCrossDMSearchTokensConfig()).forOwn((a0, a1) => c6723_20.addRule({
type: a1,
...a0
}));
SearchActionCreators.markSearchTokensRefreshed();
}
export function getChannelDisplayName(a0) {
let r0, r20;
const r12 = computeChannelName(a0, UserStore, RelationshipStore);
if (a0.isDM()) {
const userTag = UserUtils.getUserTag(UserStore.getUser(a0.getRecipientId()));
const r40 = userTag == null;
r0 = false;
r20 = userTag;
if (r40) {
return null;
}
} else {
const isGroupDM = a0.isGroupDM();
r0 = false;
r20 = r12;
if (!isGroupDM) {
const r2 = !a0.isThread();
const r28 = GuildChannelStore.getTextChannelNameDisambiguations(a0.getGuildId())[a0.id];
const name = r28?.name;
r0 = r2;
r20 = r12;
if (name != null) {
r20 = r28.name;
r0 = r2;
}
}
}
const r43 = r20.match(/([\\" ])/g);
const r45 = r20;
const r46 = r43 != null ? `"${r45.replaceAll(/([\\"])/g, $mk83946())}"` : r45;
return r0 ? `#${r46}` : r46;
}
export function getChannelPlaceholderName(a0) {
if (a0.isGroupDM()) {
return computeChannelName(a0, UserStore, RelationshipStore);
}
if (a0.isDM()) {
return UserUtils.getUserTag(UserStore.getUser(a0.getRecipientId()));
}
let r18 = GuildChannelStore.getTextChannelNameDisambiguations(a0.getGuildId())[a0.id]?.name;
if (r18 == null) {
r18 = computeChannelName(a0, UserStore, RelationshipStore);
}
return r18;
}
export function removeInvalidPrivateChannelSearchTokens(a0) {
let c17691_1;
const r4 = c6723_20.tokenize(a0);
const r6 = [];
let c17691_0 = r6;
r4.forEach((item) => {
if (!(item.type === SearchTokenTypes.FILTER_IN || item.type === SearchTokenTypes.ANSWER_IN)) {
c17691_0.push(item);
}
});
c17691_1 = "";
r6.forEach((item) => {
c17691_1 = c17691_1 + item.getFullMatch();
});
return c17691_1.trim();
}