Files
discord-decomp/modules/fastest_list/FastestListChildren.android.tsx
T
2026-11-01 12:12:55 +02:00

240 lines
8.8 KiB
TypeScript

// Metro module 9252 (f9253).
import * as Module19 from "react";
import { forwardRef, useMemo, useState, useImperativeHandle, useRef, isValidElement, useEffect } from "react";
import { View } from "react-native";
import { createStyles } from "../../design/components/Styles/native/createStyles";
import getFastestListVisibleItemsDefault from "./getFastestListVisibleItemsDefault";
import shallowEqual from "../../_bundle/shallowEqual";
import getFastestListVisibleItemsWithErrorChecking_native from "./utils/getFastestListVisibleItemsWithErrorChecking.native";
import PortalToNativeView_native from "../portals/PortalToNativeView.native";
const useStyles = createStyles({
portal: {
position: "absolute",
opacity: 0,
height: 0,
top: 0
}
});
let c6084_7 = {
items: [],
keys: new Map(),
keyIndex: 0
};
const r43 = Module19.memo(forwardRef(function(a0, a1) {
let state, setState, ref, memo;
const { estimatedListSize, horizontal = false } = a0;
let c17092_1 = horizontal;
const { listFooterAlwaysMounted, listHeaderAlwaysMounted, placeholdersForceEnabled = false } = a0;
let c17092_4 = placeholdersForceEnabled;
const { marginEnd, marginStart, sectionsVersioned, renderItem, renderListFooter, renderListHeader, renderSectionFooter, renderSectionHeader, wrapChildren = false } = a0;
let c17092_13 = wrapChildren;
state = void 0;
setState = void 0;
ref = void 0;
memo = void 0;
const styles = useStyles();
const memo2 = useMemo(() => [styles.portal, {
left: marginStart,
right: marginEnd
}], [styles.portal, marginStart, marginEnd]);
[state, setState] = useState(() => getFastestListVisibleItemsDefault({
estimatedListSize,
sectionsVersioned
}));
useImperativeHandle(a1, () => ({
setVisibleItems: (c30071_0) => {
setState((prevState) => {
let r8 = c30071_0;
if (shallowEqual(prevState, r8)) {
r8 = prevState;
}
return r8;
});
}
}), []);
ref = useRef(c6084_7);
memo = useMemo(() => {
let sectionStart, sectionEnd, itemStart, itemEnd;
const { keysAreUniform, listId, itemKeys, itemSizes, itemSizeIsUniform, listFooterKey, listFooterSize, listHeaderKey, listHeaderSize, sectionsId, sections, sectionFooterKeys, sectionFooterSizeIsUniform, sectionFooterSizes, sectionHeaderKeys, sectionHeaderSizeIsUniform, sectionHeaderSizes } = sectionsVersioned;
if (sectionsId !== state.sectionsId) {
return ref.current;
}
const fastestListChildJSX = function fastestListChildJSX(a0, a1) {
if (c17092_13) {
return <View style={{
width: c17092_1 ? a1 : void 0,
height: c17092_1 ? void 0 : a1,
overflow: "hidden"
}} collapsable={false}>
{a0}
</View>;
}
if (isValidElement(a0)) {
return a0;
}
throw new Error("Must return a single child element.");
};
let keyIndex = ref.current.keyIndex;
const map = new Map(ref.current.keys);
const map2 = new Map();
const items = [];
const r25 = [];
const fastestListVisibleItemsWithErrorChecking_native = getFastestListVisibleItemsWithErrorChecking_native(listId, state, sections);
let sectionStart2 = fastestListVisibleItemsWithErrorChecking_native.sectionStart;
sectionStart = sectionStart2;
sectionEnd = fastestListVisibleItemsWithErrorChecking_native.sectionEnd;
itemStart = fastestListVisibleItemsWithErrorChecking_native.itemStart;
itemEnd = fastestListVisibleItemsWithErrorChecking_native.itemEnd;
let r26 = sectionStart;
while (r26 <= sectionEnd) {
const r42 = r26;
if (!c17092_4) {
let r44 = r42 === sectionStart ? itemStart : 0;
const r87 = r42 !== sectionEnd ? sections[r42] - 1 : itemEnd;
while (r44 <= r87) {
const item3 = renderItem(r42, r44);
const r89 = r44;
const itemSize2 = itemSizeIsUniform ? itemSizes[0].sizes[0] : itemSizes[r42].sizes[r89];
let r48 = keysAreUniform ? itemKeys[0].keys[0] : itemKeys[r42].keys[r89];
if (r48 === "") {
r48 = `s${r42}-i${r89}`;
}
const portalId = `${listId}-${r48}`;
const r51 = map.get(portalId);
if (r51 != null) {
map2.set(portalId, r51);
map.delete(portalId);
items.push(<PortalToNativeView_native key={`${r51}`} portalId={portalId}>
{fastestListChildJSX(item3, itemSize2)}
</PortalToNativeView_native>);
} else {
r25.push({
keyId: portalId,
item: item3,
itemSize: itemSize2
});
}
r44 = r89 + 1;
}
}
r26 = r42 + 1;
}
for (const item of r25) {
const { keyId, item: item2, itemSize } = item;
if (map.size > 0) {
const value = map.keys().next().value;
const r158 = map.get(value);
map2.set(keyId, r158);
map.delete(value);
items.push(<PortalToNativeView_native key={`${r158}`} portalId={keyId}>
{fastestListChildJSX(item2, itemSize)}
</PortalToNativeView_native>);
} else {
const r132 = +keyIndex;
keyIndex = r132 + 1;
const r133 = "key-" + r132;
map2.set(keyId, r133);
items.push(<PortalToNativeView_native key={`${r133}`} portalId={keyId}>
{fastestListChildJSX(item2, itemSize)}
</PortalToNativeView_native>);
}
}
L35: {
if (renderListHeader != null && listHeaderSize > 0) {
if (!listHeaderAlwaysMounted && !(function() {
if (c17092_4) {
return false;
}
if (itemStart !== 0) {
return false;
}
let r0 = sectionStart - 1;
while (0 <= r0) {
const r11 = sections[r0];
const r1 = r0;
if (r11 > 0) {
return false;
}
r0 = r1 - 1;
}
return true;
})()) {
break L35;
}
const key = listHeaderKey !== "" ? listHeaderKey : "lh";
items.push(<PortalToNativeView_native key={key} portalId={`${listId}-${key}`}>
{fastestListChildJSX(renderListHeader(), listHeaderSize)}
</PortalToNativeView_native>);
}
}
L42: {
if (renderListFooter != null && listFooterSize > 0) {
if (!listFooterAlwaysMounted && !(function() {
if (c17092_4) {
return false;
}
if (itemEnd !== Math.max(sections[sectionEnd] - 1, 0)) {
return false;
}
let r15 = sectionEnd + 1;
while (r15 < sections.length) {
const r18 = sections[r15];
const r19 = r15;
if (r18 > 0) {
return false;
}
r15 = r19 + 1;
}
return true;
})()) {
break L42;
}
const key2 = `${listId}-${listFooterKey !== "" ? listFooterKey : "lf"}`;
items.push(<PortalToNativeView_native key={key2} portalId={key2}>
{fastestListChildJSX(renderListFooter(), listFooterSize)}
</PortalToNativeView_native>);
}
}
if (sectionStart <= sectionEnd) {
do {
const r221 = sectionStart2;
if (!c17092_4) {
const r222 = sectionFooterSizeIsUniform ? sectionFooterSizes[0] : sectionFooterSizes[r221];
if (r222 > 0 && renderSectionFooter != null) {
let r224 = keysAreUniform ? sectionFooterKeys[0] : sectionFooterKeys[r221];
if (r224 === "") {
r224 = `sf${r221}`;
}
const key3 = `${listId}-${r224}`;
items.push(<PortalToNativeView_native key={key3} portalId={key3}>
{fastestListChildJSX(renderSectionFooter(r221), r222)}
</PortalToNativeView_native>);
}
const r241 = sectionHeaderSizeIsUniform ? sectionHeaderSizes[0] : sectionHeaderSizes[r221];
if (r241 > 0 && renderSectionHeader != null) {
let r243 = keysAreUniform ? sectionHeaderKeys[0] : sectionHeaderKeys[r221];
if (r243 === "") {
r243 = `sh${r221}`;
}
const key4 = `${listId}-${r243}`;
items.push(<PortalToNativeView_native key={key4} portalId={key4}>
{fastestListChildJSX(renderSectionHeader(r221), r241)}
</PortalToNativeView_native>);
}
}
sectionStart2 = r221 + 1;
} while (sectionStart2 <= sectionEnd);
}
return {
items,
keys: map2,
keyIndex
};
}, [horizontal, listFooterAlwaysMounted, listHeaderAlwaysMounted, placeholdersForceEnabled, renderItem, renderListFooter, renderListHeader, renderSectionFooter, renderSectionHeader, sectionsVersioned, state, wrapChildren]);
useEffect(() => {
ref.current = memo;
}, [memo]);
return <View pointerEvents="none" style={memo2}>{memo.items}</View>;
}));
export default r43;