UNPKG

react-native-sortables

Version:

Powerful Sortable Components for Flexible Content Reordering in React Native

71 lines (64 loc) 2.09 kB
"use strict"; import { gt, lt } from './equality'; import { error } from './logs'; const getOffsetDistance = (providedOffset, distance) => { 'worklet'; if (typeof providedOffset === 'number') { return providedOffset; } const match = providedOffset.match(/-?\d+(.\d+)?%$/); if (!match) { throw error(`Invalid offset: ${providedOffset}`); } const percentage = parseFloat(match[0]) / 100; return distance * percentage; }; export const calculateSnapOffset = (snapOffsetX, snapOffsetY, snapItemDimensions, snapItemOffset) => { 'worklet'; return { x: (snapItemOffset?.x ?? 0) + getOffsetDistance(snapOffsetX, snapItemDimensions.width), y: (snapItemOffset?.y ?? 0) + getOffsetDistance(snapOffsetY, snapItemDimensions.height) }; }; export const reorderInsert = (indexToKey, fromIndex, toIndex, fixedItemKeys) => { 'worklet'; toIndex = Math.min(toIndex, indexToKey.length - 1); const direction = toIndex > fromIndex ? -1 : 1; const fromKey = indexToKey[fromIndex]; const op = direction < 0 ? lt : gt; const result = [...indexToKey]; if (fixedItemKeys) { let k = fromIndex; for (let i = fromIndex; op(i, toIndex); i -= direction) { const itemKey = result[i - direction]; if (!fixedItemKeys[itemKey]) { result[k] = itemKey; k = i - direction; } } } else { for (let i = fromIndex; op(i, toIndex); i -= direction) { result[i] = result[i - direction]; } } result[toIndex] = fromKey; return result; }; export const reorderSwap = (indexToKey, fromIndex, toIndex) => { 'worklet'; if (toIndex > indexToKey.length - 1) { return indexToKey; } const result = [...indexToKey]; [result[fromIndex], result[toIndex]] = [result[toIndex], result[fromIndex]]; return result; }; const isValidCoordinate = coordinate => { 'worklet'; return !isNaN(coordinate) && coordinate > -Infinity && coordinate < Infinity; }; export const isValidVector = vector => { 'worklet'; return isValidCoordinate(vector.x) && isValidCoordinate(vector.y); }; //# sourceMappingURL=layout.js.map