react-native-screens
Version:
Native navigation primitives for your React Native app.
95 lines (93 loc) • 3.76 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.SHEET_FIT_TO_CONTENTS = exports.SHEET_DIMMED_ALWAYS = exports.SHEET_COMPAT_MEDIUM = exports.SHEET_COMPAT_LARGE = exports.SHEET_COMPAT_ALL = void 0;
exports.assertDetentsArrayIsSorted = assertDetentsArrayIsSorted;
exports.resolveSheetAllowedDetents = resolveSheetAllowedDetents;
exports.resolveSheetInitialDetentIndex = resolveSheetInitialDetentIndex;
exports.resolveSheetLargestUndimmedDetent = resolveSheetLargestUndimmedDetent;
var _reactNative = require("react-native");
// This value must be kept in sync with native side.
const SHEET_FIT_TO_CONTENTS = exports.SHEET_FIT_TO_CONTENTS = [-1];
const SHEET_COMPAT_LARGE = exports.SHEET_COMPAT_LARGE = [1.0];
const SHEET_COMPAT_MEDIUM = exports.SHEET_COMPAT_MEDIUM = [0.5];
const SHEET_COMPAT_ALL = exports.SHEET_COMPAT_ALL = [0.5, 1.0];
const SHEET_DIMMED_ALWAYS = exports.SHEET_DIMMED_ALWAYS = -1;
function assertDetentsArrayIsSorted(array) {
for (let i = 1; i < array.length; i++) {
if (array[i - 1] > array[i]) {
throw new Error('[RNScreens] The detent array is not sorted in ascending order!');
}
}
}
// These exist to transform old 'legacy' values used by the formsheet API to the new API shape.
// We can get rid of it, once we get rid of support for legacy values: 'large', 'medium', 'all'.
function resolveSheetAllowedDetents(allowedDetentsCompat) {
if (Array.isArray(allowedDetentsCompat)) {
if (_reactNative.Platform.OS === 'android' && allowedDetentsCompat.length > 3) {
if (__DEV__) {
console.warn('[RNScreens] Sheets API on Android do accept only up to 3 values. Any surplus value are ignored.');
}
allowedDetentsCompat = allowedDetentsCompat.slice(0, 3);
}
if (__DEV__) {
assertDetentsArrayIsSorted(allowedDetentsCompat);
}
return allowedDetentsCompat;
} else if (allowedDetentsCompat === 'fitToContents') {
return SHEET_FIT_TO_CONTENTS;
} else if (allowedDetentsCompat === 'large') {
return SHEET_COMPAT_LARGE;
} else if (allowedDetentsCompat === 'medium') {
return SHEET_COMPAT_MEDIUM;
} else if (allowedDetentsCompat === 'all') {
return SHEET_COMPAT_ALL;
} else {
// Safe default, only large detent is allowed.
return SHEET_COMPAT_LARGE;
}
}
function resolveSheetLargestUndimmedDetent(lud, lastDetentIndex) {
if (typeof lud === 'number') {
if (!isIndexInClosedRange(lud, SHEET_DIMMED_ALWAYS, lastDetentIndex)) {
if (__DEV__) {
throw new Error("[RNScreens] Provided value of 'sheetLargestUndimmedDetentIndex' prop is out of bounds of 'sheetAllowedDetents' array.");
}
// Return default in production
return SHEET_DIMMED_ALWAYS;
}
return lud;
} else if (lud === 'last') {
return lastDetentIndex;
} else if (lud === 'none' || lud === 'all') {
return SHEET_DIMMED_ALWAYS;
} else if (lud === 'large') {
return 1;
} else if (lud === 'medium') {
return 0;
} else {
// Safe default, every detent is dimmed
return SHEET_DIMMED_ALWAYS;
}
}
function resolveSheetInitialDetentIndex(index, lastDetentIndex) {
if (index === 'last') {
index = lastDetentIndex;
} else if (index == null) {
// Intentional check for undefined & null ^
index = 0;
}
if (!isIndexInClosedRange(index, 0, lastDetentIndex)) {
if (__DEV__) {
throw new Error("[RNScreens] Provided value of 'sheetInitialDetentIndex' prop is out of bounds of 'sheetAllowedDetents' array.");
}
// Return default in production
return 0;
}
return index;
}
function isIndexInClosedRange(value, lowerBound, upperBound) {
return Number.isInteger(value) && value >= lowerBound && value <= upperBound;
}
//# sourceMappingURL=sheet.js.map
;