@ozen-ui/kit
Version:
React component library
57 lines (56 loc) • 2.14 kB
JavaScript
import { __read, __spreadArray } from "tslib";
import { logger } from '@ozen-ui/logger';
import { cn } from '../../../utils/classname';
import { isFunction } from '../../../utils/isFunction';
import { clamp } from '../../../utils/math';
import { isNaN, isNumber } from '../../../utils/number';
export var cnBottomSheetBase = cn('BottomSheetBase');
export var bottomSheetCalculateSnaps = function (_a) {
var minHeight = _a.minHeight, maxHeight = _a.maxHeight, snapsProp = _a.snaps, isReady = _a.isReady, defaultSnapProp = _a.defaultSnap;
var getSnapParams = {
minHeight: minHeight,
maxHeight: maxHeight,
};
var snapsRaw = (function () {
if (!isReady) {
return [0];
}
if (isFunction(snapsProp)) {
return snapsProp(getSnapParams);
}
return snapsProp;
})();
var snapsSet = snapsRaw.reduce(function (acc, snapPoint) {
if (isNaN(snapPoint)) {
logger.error('Компонент "BottomSheetBase" имеет NaN в prop "snaps"');
return acc;
}
acc.add(clamp(snapPoint, 0, maxHeight));
return acc;
}, new Set());
var snaps = __spreadArray([], __read(snapsSet), false);
var minSnap = Math.min.apply(Math, __spreadArray([], __read(snaps), false));
var maxSnap = Math.min(maxHeight, Math.max.apply(Math, __spreadArray([], __read(snaps), false)));
var findClosestSnap = function (point) {
return snaps.reduce(function (prev, curr) {
return Math.abs(curr - point) < Math.abs(prev - point) ? curr : prev;
}, minSnap);
};
var defaultSnapRaw = (function () {
if (isFunction(defaultSnapProp)) {
return defaultSnapProp(getSnapParams);
}
if (isNumber(defaultSnapProp)) {
return defaultSnapProp;
}
return minSnap;
})();
var defaultSnap = findClosestSnap(clamp(defaultSnapRaw, minSnap, maxSnap));
return {
minSnap: minSnap,
maxSnap: maxSnap,
snaps: snaps,
defaultSnap: defaultSnap,
findClosestSnap: findClosestSnap,
};
};