UNPKG

react-native-sortables

Version:

Powerful Sortable Components for Flexible Content Reordering in React Native

62 lines (57 loc) 1.84 kB
"use strict"; import { getCrossIndex, getMainIndex } from './helpers'; export const calculateLayout = ({ gaps, indexToKey, isVertical, itemDimensions, mainGroupSize, numGroups }) => { 'worklet'; if (!mainGroupSize) { return null; } const crossAxisOffsets = [0]; const itemPositions = {}; let crossDimension; let mainCoordinate; let crossCoordinate; if (isVertical) { // grid with specified number of columns (vertical orientation) crossDimension = 'height'; // items can grow vertically mainCoordinate = 'x'; crossCoordinate = 'y'; } else { // grid with specified number of rows (horizontal orientation) crossDimension = 'width'; // items can grow horizontally mainCoordinate = 'y'; crossCoordinate = 'x'; } for (const [itemIndex, itemKey] of indexToKey.entries()) { const crossItemSize = itemDimensions[itemKey]?.[crossDimension]; // Return if the item is not yet measured if (crossItemSize === undefined) { return null; } const mainIndex = getMainIndex(itemIndex, numGroups); const crossIndex = getCrossIndex(itemIndex, numGroups); const crossAxisOffset = crossAxisOffsets[crossIndex] ?? 0; // Update offset of the next group crossAxisOffsets[crossIndex + 1] = Math.max(crossAxisOffsets[crossIndex + 1] ?? 0, crossAxisOffset + crossItemSize + gaps.cross); // Update item position itemPositions[itemKey] = { [crossCoordinate]: crossAxisOffset, [mainCoordinate]: mainIndex * (mainGroupSize + gaps.main) }; } const lastCrossOffset = crossAxisOffsets[crossAxisOffsets.length - 1]; return { calculatedDimensions: { [crossDimension]: lastCrossOffset ? Math.max(lastCrossOffset - gaps.cross, 0) : 0 }, crossAxisOffsets, itemPositions }; }; //# sourceMappingURL=layout.js.map