Files
discord-decomp/_bundle/elementsThatOverlapOffsets.js
T
2026-11-01 12:12:55 +02:00

175 lines
4.9 KiB
JavaScript

// Metro module 313 (f314).
import { fixVirtualizeListCollapseWindowSize } from "./Module27";
const elementsThatOverlapOffsets = function elementsThatOverlapOffsets(a0, a1, a2, r15 = 1) {
let r35, r37;
const itemCount = a1.getItemCount(a1.data);
const r22 = [];
const r24 = 0 < a0.length;
let r4 = 0;
if (r24) {
do {
const r17 = a0[r4];
let r1 = itemCount - 1;
const r5 = r4;
let r25 = 0;
while (r25 <= r1) {
L12: {
const r20 = r25 + Math.floor((r1 - r25) / 2);
const cellMetricsApprox = a2.getCellMetricsApprox(r20, a1);
const r21 = cellMetricsApprox.offset * r15;
const r34 = (cellMetricsApprox.offset + cellMetricsApprox.length) * r15;
r35 = r1;
const r36 = r25;
if (!(r20 === 0 && r17 < r21) && !(r20 !== 0 && r17 <= r21)) {
if (r17 > r34) {
r37 = r20 + 1;
break L12;
}
r22[r5] = r20;
break;
}
r35 = r20 - 1;
r37 = r36;
}
r1 = r35;
r25 = r37;
}
r4 = r5 + 1;
} while (r4 < a0.length);
}
return r22;
};
export { elementsThatOverlapOffsets };
export function newRangeCount(a0, a1) {
return a1.last - a1.first + 1 - Math.max(0, 1 + Math.min(a1.last, a0.last) - Math.max(a1.first, a0.first));
}
export function computeWindowedRenderLimits(a0, a1, a2, a3, a4, a5) {
let r9, r10, first2, last2;
const itemCount = a0.getItemCount(a0.data);
if (itemCount === 0) {
return {
first: 0,
last: -1
};
}
const { offset, velocity, visibleLength, zoomScale = 1 } = a5;
const r29 = Math.max(0, offset);
const r28 = r29 + visibleLength;
const r0 = (a2 - 1) * visibleLength;
const r45 = velocity > 1 ? "after" : velocity < -1 ? "before" : "none";
const r51 = Math;
const r54 = 0.5 * r0;
const r30 = r51.max(0, r29 - r54);
const r27 = Math.max(0, r28 + r54);
if (a4.getCellMetricsApprox(itemCount - 1, a0).offset * zoomScale < r30) {
return {
first: Math.max(0, itemCount - 1 - a1),
last: itemCount - 1
};
}
let [r70, first, last, overscanLast] = elementsThatOverlapOffsets([r30, r29, r28, r27], a0, a4, zoomScale);
const overscanFirst = r70 == null ? 0 : r70;
if (overscanLast == null) {
overscanLast = itemCount - 1;
}
if (first == null) {
first = Math.max(0, overscanFirst);
}
const visible = {
first,
last: null
};
if (last == null) {
last = Math.min(overscanLast, first + a1 - 1);
}
L58: {
visible.last = last;
const r99 = visible.last - visible.first + 1 - Math.max(0, 1 + Math.min(visible.last, a3.last) - Math.max(visible.first, a3.first));
const r101 = r45 === "before";
const r102 = r45 === "after";
let r103 = r99;
let r104 = last;
let r105 = first;
if (first <= overscanFirst) {
r103 = r99;
r104 = last;
r105 = first;
first2 = r105;
last2 = r104;
if (last2 >= overscanLast) {
break L58;
}
}
while (true) {
const r8 = r103 >= a1;
const r113 = fixVirtualizeListCollapseWindowSize();
const r6 = r105 <= a3.first;
const r3 = r103;
const r115 = r104;
const r116 = r105;
if (r113) {
r9 = r115 >= a3.last;
r10 = r6;
} else {
r10 = r6 ? r6 : r116 > a3.last;
r9 = r115 >= a3.last || r115 < a3.first;
}
const r11 = r116 > overscanFirst && (r8 ? !r10 : !r8);
const r122 = r115 < overscanLast && (r8 ? !r9 : !r8);
if (r8 && !r11) {
last2 = r115;
first2 = r116;
if (!r122) {
break;
}
}
const r123 = r11 ? r102 && r122 && r9 : !r11;
let r2 = r3;
let r125 = r116;
if (!r123) {
const r126 = r10 ? r3 + 1 : r3;
r125 = r116 - 1;
r2 = r126;
}
const r127 = r122 ? r101 && r11 && r10 : !r122;
let r129 = r2;
let r130 = r115;
if (!r127) {
const r131 = r9 ? r2 + 1 : r2;
r130 = r115 + 1;
r129 = r131;
}
r103 = r129;
r104 = r130;
r105 = r125;
if (r125 <= overscanFirst) {
r103 = r129;
r104 = r130;
r105 = r125;
first2 = r105;
last2 = r104;
if (last2 >= overscanLast) {
break;
}
}
}
}
if (last2 >= first2 && first2 >= 0 && last2 < itemCount && first2 >= overscanFirst && last2 <= overscanLast && first2 <= visible.first && last2 >= visible.last) {
return {
first: first2,
last: last2
};
}
throw new Error("Bad window calculation " + JSON.stringify({
first: first2,
last: last2,
itemCount,
overscanFirst,
overscanLast,
visible
}));
}
export function keyExtractor(a0, a1) {
return typeof a0 === "object" && a0?.key != null ? a0.key : typeof a0 === "object" ? a0?.id != null ? a0.id : String(a1) : String(a1);
}