175 lines
4.9 KiB
JavaScript
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);
|
|
}
|