react-native-sortables
Version:
Powerful Sortable Components for Flexible Content Reordering in React Native
63 lines (57 loc) • 1.78 kB
JavaScript
;
import { gt, lt } from './equality';
import { error } from './logs';
export 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 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