// Metro module 9905 (f9906).
import { useRef, useState, useEffect, useCallback, useMemo } from "react";
import { Keyboard, View } from "react-native";
import { NOOP } from "../../../Constants";
import { UserRowModes } from "../../main_tabs_v2/native/shared_components/user_list/UserRowConstants";
import { createStyles } from "../../../design/components/Styles/native/createStyles";
import Module712 from "../../../_bundle/Module712";
import { useShareSearchResults } from "../useShareSearchResults";
import { runAfterInteractions } from "../../../utils/native/RunAfterInteractionsUtils";
import { destinationKey } from "../formatResults";
import { AutocompleterResultTypes } from "../../autocompleter/index";
import { getRelationshipType } from "../../main_tabs_v2/UserSearchUtils";
import { assertNever } from "../../../utils/GlobalUtils";
import useScaledRowHeight from "../../main_tabs_v2/native/shared_components/user_list/useScaledRowHeight";
import { useScaledTextLineHeight } from "../../screen/native/useScaledTextLineHeight.android";
import roundToNearestPixel from "../../voice_panel/native/utils/roundToNearestPixel";
import { UsersFastList } from "../../main_tabs_v2/native/shared_components/user_list/UsersFastList";
import NoResults from "../../main_tabs_v2/native/shared_components/user_list/NoResults";
import { intl, t } from "../../../intl/index.native";
import ThemedGradient from "../../client_themes/native/ThemedGradient";
import { SearchField } from "../../../design/components/TextField/native/SearchField.native";
const useStyles = createStyles({
searchBarContainer: {
paddingHorizontal: Module712.space.PX_16,
paddingBottom: Module712.space.PX_8,
backgroundColor: Module712.colors.MOBILE_ACTIONSHEET_BACKGROUND
},
noResults: {
flex: 1,
backgroundColor: Module712.colors.MOBILE_ACTIONSHEET_BACKGROUND
}
});
export default function SearchableDestinationList(props) {
let r163, r164;
let callback, memo, memo2, callback2, callback3, callback4, callback5, ref4, c17548_23, scaledTextLineHeight;
let initialSelectedDestinations = props.initialSelectedDestinations;
const { disabledDestinations, originDestination, channelFilter, getRowIsUnavailable, onSelectedDestinationChange, onSearchTextChange, rowMode = UserRowModes.NONE } = props;
const NONE = rowMode;
const { insetStart = Module712.space.PX_8, insetEnd = Module712.space.PX_12 } = props;
let autoFocusSearch = props.autoFocusSearch;
if (autoFocusSearch === void 0) {
autoFocusSearch = false;
}
const { hideSearchOnDefaultNoResults = false, defaultNoResultsFound, disableGradient, disableStickySections, disableSelection, disableLongPress } = props;
callback = void 0;
memo = void 0;
memo2 = void 0;
callback2 = void 0;
callback3 = void 0;
callback4 = void 0;
callback5 = void 0;
ref4 = void 0;
c17548_23 = void 0;
scaledTextLineHeight = void 0;
const styles = useStyles();
const ref = useRef(null);
if (initialSelectedDestinations == null) {
initialSelectedDestinations = [];
}
const [state, setState] = useState(initialSelectedDestinations);
const shareSearchResults = useShareSearchResults({
selectedDestinations: state,
originDestination,
channelFilter,
includeMissingDMs: true
});
const { results, updateSearchText } = shareSearchResults;
const ref2 = useRef("");
const [state2, setState2] = useState(false);
const ref3 = useRef(null);
useEffect(() => () => {
const current = ref3.current;
if (current != null) {
current.cancel();
}
}, []);
callback = useCallback(function(a0, r4 = false) {
if (a0 !== ref2.current) {
ref2.current = a0;
if (r4) {
const current = ref.current;
if (current != null) {
current.setText(a0);
}
}
updateSearchText(a0);
if (onSearchTextChange != null) {
onSearchTextChange(a0);
}
setState2(a0.trim().length > 0);
ref3.current = runAfterInteractions(() => {
const current = ref4.current;
if (current != null) {
current.scrollToTop(false);
}
});
}
}, [onSearchTextChange, updateSearchText]);
useEffect(() => {
onSelectedDestinationChange(state);
setTimeout(() => {
Keyboard.dismiss();
}, 0);
setTimeout(() => {
callback("", true);
}, 50);
}, [state, onSelectedDestinationChange, callback]);
const memo3 = useMemo(() => [results.length], [results.length]);
const callback6 = useCallback(() => ({
type: "section",
props: {
hideTitle: true
}
}), []);
memo = useMemo(() => {
let r8 = disabledDestinations == null ? void 0 : disabledDestinations.map(destinationKey);
if (r8 == null) {
r8 = [];
}
return r8;
}, [disabledDestinations]);
memo2 = useMemo(() => {
let r8 = state == null ? void 0 : state.map(destinationKey);
if (r8 == null) {
r8 = [];
}
return r8;
}, [state]);
callback2 = useCallback((c26560_0) => {
setState((prevState) => {
let r9;
const r5 = prevState.findIndex((item) => item.id === c26560_0.id);
if (r5 === -1) {
if (disableSelection) {
return prevState;
}
r9 = [c26560_0, ...prevState];
} else {
r9 = [...prevState];
r9.splice(r5, 1);
}
return r9;
});
}, [disableSelection]);
callback3 = useCallback((a0) => callback2({
type: "user",
id: a0.id
}), [callback2]);
callback4 = useCallback((a0) => callback2({
type: "channel",
id: a0.id
}), [callback2]);
callback5 = useCallback((a0, a1) => {
const r7 = results[a1];
const { type, record } = r7;
const r0 = results.length - 1;
if (type !== AutocompleterResultTypes.HEADER) {
const r16 = type === AutocompleterResultTypes.USER ? destinationKey({
type: "user",
id: record.id
}) : destinationKey({
type: "channel",
id: record.id
});
const r37 = getRowIsUnavailable == null ? void 0 : getRowIsUnavailable(record);
const selected = memo2.includes(r16);
const r43 = memo.includes(r16);
let disabled = disableSelection;
if (disableSelection) {
disabled = !selected;
}
if (!disabled) {
disabled = r43;
}
if (!disabled) {
disabled = r37 != null;
}
const mode = r37 != null ? UserRowModes.NONE : NONE;
const subLabel = r37 != null ? r37.label : void 0;
const r50 = r37 != null;
let subLabelLineClamp = void 0;
if (r50) {
let lineClamp = r37.lineClamp;
if (lineClamp == null) {
lineClamp = 1;
}
subLabelLineClamp = lineClamp;
}
const r45 = {
disabled,
selected,
mode,
subLabel,
subLabelLineClamp,
start: a1 === 0,
end: a1 === r0
};
if (AutocompleterResultTypes.USER === type) {
return {
type: "user",
props: {
...r45,
user: record,
type: getRelationshipType(record.id),
onPress: callback3,
...disableLongPress ? {
onLongPress: NOOP
} : void 0
}
};
}
if (AutocompleterResultTypes.GROUP_DM === type) {
return {
type: "gdm",
props: {
...r45,
channel: record,
onPress: callback4,
...disableLongPress ? {
onLongPress: NOOP
} : void 0
}
};
}
if (AutocompleterResultTypes.TEXT_CHANNEL !== type && AutocompleterResultTypes.VOICE_CHANNEL !== type) {
return assertNever(type);
}
return {
type: "channel",
props: {
...r45,
channel: record,
onPress: callback4,
...disableLongPress ? {
onLongPress: NOOP
} : void 0
}
};
}
}, [results, getRowIsUnavailable, memo2, memo, disableSelection, disableLongPress, NONE, callback3, callback4]);
ref4 = useRef(null);
const scaledRowHeight = useScaledRowHeight();
c17548_23 = scaledRowHeight;
scaledTextLineHeight = useScaledTextLineHeight("text-xs/medium");
const callback7 = useCallback((a0, a1) => {
const r9 = callback5(a0, a1);
const r8 = r9?.type !== "user" && r9?.type !== "gdm" ? r9?.type === "channel" ? r9.props.subLabelLineClamp : void 0 : r9.props.subLabelLineClamp;
return r8 != null && r8 > 1 ? roundToNearestPixel(c17548_23 + (r8 - 1) * scaledTextLineHeight) : c17548_23;
}, [callback5, scaledRowHeight, scaledTextLineHeight]);
const r128 = memo3.some((item) => item > 0);
const r148 = r128 ? :
}} />;
const r159 = disableGradient ? !disableGradient : ;
L29: {
r163 = [r159, , ,];
if (hideSearchOnDefaultNoResults && !r128) {
r164 = null;
if (!state2) {
break L29;
}
}
if (autoFocusSearch) {
autoFocusSearch = r128;
}
r164 =
;
}
r163[1] = r164;
r163[2] = r148;
return <>{r163}>;
};