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

124 lines
4.4 KiB
TypeScript

// Metro module 9906 (f9907).
import { useMemo, useState, useCallback, useRef, useEffect, useLayoutEffect } from "react";
import GatewayConnectionStore from "../gateway/GatewayConnectionStore";
import AuthenticationStore from "../../stores/AuthenticationStore";
import FrecencyStore from "../../stores/FrecencyStore";
import { ALLOWED_TYPES } from "./ShareConstants";
import { getQuickSwitcherOptions } from "../quickswitcher/QuickSwitcherActionCreators";
import { useStateFromStores } from "../../_bundle/Module589";
import useAutocompleter from "./useAutocompleter";
import { useFrecencySettings } from "../user_settings/FrecencyUserSettingsHooks";
import formatResults from "./formatResults";
export function makeAutocompleterSearchParams(a0) {
const quickSwitcherOptions = getQuickSwitcherOptions(a0);
const { query: query2, queryMode: queryMode2 } = quickSwitcherOptions;
let resultTypes = ALLOWED_TYPES;
const r14 = queryMode2 != null && ALLOWED_TYPES.includes(queryMode2);
let queryMode3 = null;
if (r14) {
const r16 = [queryMode2];
queryMode3 = queryMode2;
resultTypes = r16;
}
return {
query: query2,
queryMode: queryMode3,
resultTypes
};
}
export function useShareSearchResults({ targetDestination, selectedDestinations, originDestination, channelFilter, includeMissingDMs: includeMissingDMs2 = false }) {
let search, query, results, state, setState, queryMode, ref, ref2, current, stateFromStores2, stateFromStores3, hasQuery;
const includeMissingDMs = includeMissingDMs2;
search = void 0;
query = void 0;
results = void 0;
state = void 0;
setState = void 0;
queryMode = void 0;
ref = void 0;
ref2 = void 0;
current = void 0;
stateFromStores2 = void 0;
stateFromStores3 = void 0;
hasQuery = void 0;
const stateFromStores = useStateFromStores([AuthenticationStore], () => AuthenticationStore.getId());
const autocompleter = useAutocompleter(useMemo(() => ({
searchOptions: {
blacklist: new Set([`user:${stateFromStores}`]),
frecencyBoosters: true,
userFilters: null
}
}), [stateFromStores]));
search = autocompleter.search;
query = autocompleter.query;
results = autocompleter.results;
const quickSwitcherOptions = getQuickSwitcherOptions("");
const { query: query2, queryMode: queryMode2 } = quickSwitcherOptions;
let resultTypes = ALLOWED_TYPES;
const r43 = queryMode2 != null && ALLOWED_TYPES.includes(queryMode2);
let queryMode3 = null;
if (r43) {
const r45 = [queryMode2];
queryMode3 = queryMode2;
resultTypes = r45;
}
[state, setState] = useState({
query: query2,
queryMode: queryMode3,
resultTypes
});
const callback = useCallback((a0) => {
const quickSwitcherOptions = getQuickSwitcherOptions(a0);
const { query: query2, queryMode: queryMode2 } = quickSwitcherOptions;
let resultTypes = ALLOWED_TYPES;
const r16 = queryMode2 != null && ALLOWED_TYPES.includes(queryMode2);
let queryMode3 = null;
if (r16) {
const r18 = [queryMode2];
queryMode3 = queryMode2;
resultTypes = r18;
}
return setState({
query: query2,
queryMode: queryMode3,
resultTypes
});
}, [setState]);
queryMode = state.queryMode;
ref = useRef(null);
ref2 = useRef(selectedDestinations);
current = query === ref.current ? ref2.current : selectedDestinations;
useEffect(() => {
if (query !== ref.current) {
ref2.current = selectedDestinations;
}
ref.current = query;
}, [query, selectedDestinations]);
useLayoutEffect(() => {
search({
query: state.query,
resultTypes: state.resultTypes
});
}, [search, state]);
useFrecencySettings();
stateFromStores2 = useStateFromStores([FrecencyStore], () => FrecencyStore.getFrequentlyWithoutFetchingLatest());
stateFromStores3 = useStateFromStores([GatewayConnectionStore], () => GatewayConnectionStore.isConnected());
hasQuery = query !== "";
return {
results: useMemo(() => formatResults({
results,
hasQuery,
queryMode,
targetDestination,
frequentChannels: stateFromStores2,
selectedDestinations,
pinnedDestinations: current,
originDestination,
channelFilter,
includeMissingDMs,
isConnected: stateFromStores3
}), [results, hasQuery, queryMode, targetDestination, stateFromStores2, selectedDestinations, current, originDestination, channelFilter, includeMissingDMs, stateFromStores3]),
updateSearchText: callback
};
}