@ozen-ui/kit
Version:
React component library
61 lines (60 loc) • 2.49 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.bottomSheetCalculateSnaps = exports.cnBottomSheetBase = void 0;
var tslib_1 = require("tslib");
var logger_1 = require("@ozen-ui/logger");
var classname_1 = require("../../../utils/classname");
var isFunction_1 = require("../../../utils/isFunction");
var math_1 = require("../../../utils/math");
var number_1 = require("../../../utils/number");
exports.cnBottomSheetBase = (0, classname_1.cn)('BottomSheetBase');
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 ((0, isFunction_1.isFunction)(snapsProp)) {
return snapsProp(getSnapParams);
}
return snapsProp;
})();
var snapsSet = snapsRaw.reduce(function (acc, snapPoint) {
if ((0, number_1.isNaN)(snapPoint)) {
logger_1.logger.error('Компонент "BottomSheetBase" имеет NaN в prop "snaps"');
return acc;
}
acc.add((0, math_1.clamp)(snapPoint, 0, maxHeight));
return acc;
}, new Set());
var snaps = tslib_1.__spreadArray([], tslib_1.__read(snapsSet), false);
var minSnap = Math.min.apply(Math, tslib_1.__spreadArray([], tslib_1.__read(snaps), false));
var maxSnap = Math.min(maxHeight, Math.max.apply(Math, tslib_1.__spreadArray([], tslib_1.__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 ((0, isFunction_1.isFunction)(defaultSnapProp)) {
return defaultSnapProp(getSnapParams);
}
if ((0, number_1.isNumber)(defaultSnapProp)) {
return defaultSnapProp;
}
return minSnap;
})();
var defaultSnap = findClosestSnap((0, math_1.clamp)(defaultSnapRaw, minSnap, maxSnap));
return {
minSnap: minSnap,
maxSnap: maxSnap,
snaps: snaps,
defaultSnap: defaultSnap,
findClosestSnap: findClosestSnap,
};
};
exports.bottomSheetCalculateSnaps = bottomSheetCalculateSnaps;