Files
discord-decomp/modules/search/native/components/layout/SearchBar.tsx
T
2026-11-01 12:12:55 +02:00

214 lines
8.7 KiB
TypeScript

// Metro module 15464 (f15465).
import * as Module19 from "react";
import { forwardRef, useMemo, useRef, useImperativeHandle, useEffect, useCallback } from "react";
import { View } from "react-native";
import ChannelStore from "../../../../../stores/ChannelStore";
import GuildStore from "../../../../../stores/GuildStore";
import RelationshipStore from "../../../../../stores/RelationshipStore";
import UserStore from "../../../../../stores/UserStore";
import SearchQueryStore from "../../stores/SearchQueryStore";
import { SEARCH_BAR_HEIGHT, SearchQueryTagTypes } from "../../../SearchConstants";
import { SearchFilterAddLocations } from "../../tracking/TrackingConstants";
import { SearchTypes } from "../../../../../Constants";
import { createStyles } from "../../../../../design/components/Styles/native/createStyles";
import Module712 from "../../../../../_bundle/Module712";
import { intl, t } from "../../../../../intl/index.native";
import { computeChannelName } from "../../../../channel/useChannelName";
import { useStateFromStores } from "../../../../../_bundle/Module589";
import MobileVisualRefreshExperiment from "../../../../themes/experiments/MobileVisualRefreshExperiment";
import { useFontScale } from "../../../../screen/native/useFontScale";
import SearchPlatformUtils, { toSearchBarTag } from "../../SearchPlatformUtils";
import SearchPlatformActionCreators from "../../SearchPlatformActionCreators";
import { AccessibilityAnnouncer } from "../../../../../_bundle/Module3902";
import Tracking from "../../tracking/Tracking";
import { isValidFilterAnswerForSubmit } from "../../../tokens/SearchTokens";
import TagListInput_native from "../../../../../design/components/TagListInput/native/TagListInput.native";
import SearchBarActivityIcon from "./SearchBarActivityIcon";
const useStyles = createStyles((a0, a1) => ({
searchBar: {
...a0 ? {
minHeight: a1 + 2
} : {
borderRadius: Module712.radii.round,
minHeight: a1
}
},
icon: {
width: 32,
minHeight: a1,
justifyContent: "center",
zIndex: 10
}
}));
const r50 = Module19.memo(forwardRef(function({ searchContext, setSuggestionsDismissed }, a1) {
let ref;
let searchContext2;
ref = void 0;
const styles = useStyles(MobileVisualRefreshExperiment("SearchBar"), SEARCH_BAR_HEIGHT * Math.min(2, useFontScale()));
const stateFromStores = useStateFromStores([SearchQueryStore], () => SearchQueryStore.getTags(searchContext), [searchContext]);
const memo2 = useMemo(() => stateFromStores.map(toSearchBarTag), [stateFromStores]);
const memo = useMemo(() => {
if (stateFromStores.length !== 0) {
return intl.formatToPlainString(t["0zoRaK"], {
text: stateFromStores.map((stateFromStore) => stateFromStore.text).join(", ")
});
}
}, [stateFromStores]);
ref = useRef(null);
searchContext2 = searchContext;
const stateFromStores2 = useStateFromStores([SearchQueryStore], () => {
let r89;
const channelIds = SearchQueryStore.getChannelIds(searchContext2);
const type = searchContext2.type;
if (SearchTypes.GUILD_CHANNEL !== type && SearchTypes.GUILD !== type) {
if (SearchTypes.CHANNEL === type) {
const channel = ChannelStore.getChannel(searchContext2.channelId);
return channel == null ? intl.string(t["5h0QOP"]) : intl.formatToPlainString(t.LDpotA, {
guildName: computeChannelName(channel, UserStore, RelationshipStore, true)
});
}
if (SearchTypes.DMS === type) {
return intl.string(t.m7OrlR);
}
return intl.string(t["5h0QOP"]);
}
if (channelIds.size === 0) {
const name = GuildStore.getGuild(searchContext2.guildId)?.name;
r89 = name == null ? intl.string(t["5h0QOP"]) : intl.formatToPlainString(t.LDpotA, {
guildName: name
});
} else {
r89 = intl.string(t["5h0QOP"]);
}
return r89;
}, [searchContext]);
useImperativeHandle(a1, () => ({
setText: (a0) => {
const current = ref.current;
return current == null ? void 0 : current.setText(a0);
},
getText: () => {
const current = ref.current;
let r6 = current == null ? void 0 : current.getText();
if (r6 == null) {
r6 = "";
}
return r6;
},
blur: () => {
const current = ref.current;
return current == null ? void 0 : current.blur();
},
focus: () => {
const current = ref.current;
return current == null ? void 0 : current.focus();
},
isFocused: () => {
const current = ref.current;
let r6 = current == null ? void 0 : current.isFocused();
if (r6 == null) {
r6 = false;
}
return r6;
},
measure: (a0) => {
const current = ref.current;
return current == null ? void 0 : current.measure(a0);
},
measureInWindow: (a0) => {
const current = ref.current;
return current == null ? void 0 : current.measureInWindow(a0);
},
measureLayout: (a0, a1, a2) => {
const current = ref.current;
return current == null ? void 0 : current.measureLayout(a0, a1, a2);
}
}));
useEffect(() => SearchPlatformUtils.subscribeTextInputValue(searchContext, (a0, a1, a2) => {
if (!(a2 ? a2 : a0 == null)) {
const current = ref.current;
if (current != null) {
current.setText(a0);
}
}
}), [searchContext]);
const callback = useCallback((a0) => {
let c28031_0 = a0;
if (SearchQueryStore.getTextInputValue(searchContext) !== a0) {
SearchPlatformActionCreators.updateSearchQuery(searchContext, (a0) => {
a0.setTextInputValue(c28031_0, true);
});
SearchPlatformUtils.syncAutocompleteDebounced(searchContext);
if (!SearchQueryStore.isAutocompleteVisible(searchContext)) {
if (SearchQueryStore.isInitialSearchQuery(searchContext)) {
SearchPlatformUtils.fetchInitialMessages(searchContext);
} else {
SearchPlatformUtils.fetchInitialMessagesDebounced(searchContext);
}
}
}
}, [searchContext]);
const callback2 = useCallback((a0) => {
let c28032_0 = a0;
const r10 = SearchQueryStore.getTags(searchContext)[a0];
let c28032_1 = r10;
if (r10 != null) {
AccessibilityAnnouncer.announce(intl.formatToPlainString(t.srlxB8, {
text: r10.text
}));
if (r10.type === SearchQueryTagTypes.COMPLETE) {
Tracking.trackSearchFilterRemove({
searchContext,
searchTokenType: r10.searchTokenType,
isDefault: r10.location === SearchFilterAddLocations.CLIENT_AUTO_ADD
});
}
SearchPlatformActionCreators.updateSearchQuery(searchContext, (a0) => {
a0.removeTag(c28032_0);
if (c28032_1.type === SearchQueryTagTypes.PREFIX) {
a0.restoreDraftTextInputValue();
}
});
SearchPlatformUtils.syncAutocompleteDebounced(searchContext);
const queryString = SearchQueryStore.getQueryString(searchContext);
const searchResultsQuery = SearchQueryStore.getSearchResultsQuery(searchContext);
const isInitialSearchQuery = SearchQueryStore.isInitialSearchQuery(searchContext);
if (queryString !== searchResultsQuery) {
if (isInitialSearchQuery) {
SearchPlatformUtils.fetchInitialMessages(searchContext);
} else {
SearchPlatformUtils.fetchInitialMessagesDebounced(searchContext);
}
}
}
}, [searchContext]);
const memo3 = useMemo(() => () => {
setSuggestionsDismissed();
const prefixTag = SearchQueryStore.getPrefixTag(searchContext);
const text = SearchQueryStore.getTextInputValue(searchContext).trim();
if (prefixTag != null && text !== "" && isValidFilterAnswerForSubmit(prefixTag.searchTokenType, text)) {
SearchPlatformActionCreators.updateSearchQuery(searchContext, (a0) => {
a0.setTextInputValue("");
a0.addTag({
type: SearchQueryTagTypes.ANSWER,
text
});
a0.restoreDraftTextInputValue();
});
Tracking.trackSearchFilterAdd({
searchContext,
searchTokenType: prefixTag.searchTokenType,
location: prefixTag.location
});
}
if (!SearchQueryStore.isQueryStringEmpty(searchContext)) {
SearchPlatformActionCreators.updateSearchQuery(searchContext, (a0) => a0.markExplicitSearchSubmitted());
SearchPlatformUtils.fetchInitialMessages(searchContext);
}
}, [searchContext, setSuggestionsDismissed]);
return <TagListInput_native ref={ref} accessibilityHint={memo} autoFocus defaultValue={SearchQueryStore.getTextInputValue(searchContext)} style={styles.searchBar} tags={memo2} icon={<View style={styles.icon}>
<SearchBarActivityIcon searchContext={searchContext} />
</View>} onChangeText={callback} onRemove={callback2} placeholder={stateFromStores2} onSubmitEditing={memo3} leadingFade horizontal autoClearInputOnTagAdd={false} />;
}));
export default r50;