UNPKG

@ozen-ui/kit

Version:

React component library

57 lines (56 loc) 2.14 kB
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, }; };