stream-chat-react-native-core
Version:
The official React Native and Expo components for Stream Chat, a service for building chat applications
83 lines (65 loc) • 1.81 kB
text/typescript
export const BOTTOM_SHEET_HANDLE_HEIGHT = 4;
export const BOTTOM_SHEET_HANDLE_MARGIN_VERTICAL = 8;
export const BOTTOM_SHEET_HANDLE_TOTAL_HEIGHT =
BOTTOM_SHEET_HANDLE_HEIGHT + BOTTOM_SHEET_HANDLE_MARGIN_VERTICAL * 2;
type GetBottomSheetBaseHeightParams = {
contentHeight: number | undefined;
enableDynamicSizing: boolean;
height: number;
maxHeight: number;
};
export const getBottomSheetBaseHeight = ({
contentHeight,
enableDynamicSizing,
height,
maxHeight,
}: GetBottomSheetBaseHeightParams) => {
'worklet';
const cappedHeight = Math.min(height, maxHeight);
if (!enableDynamicSizing || contentHeight === undefined) {
return cappedHeight;
}
const measuredHeight = Math.max(0, contentHeight) + BOTTOM_SHEET_HANDLE_TOTAL_HEIGHT;
return Math.min(measuredHeight, cappedHeight);
};
type GetBottomSheetSnapPointsParams = {
baseHeight: number;
maxHeight: number;
};
export const getBottomSheetSnapPoints = ({
baseHeight,
maxHeight,
}: GetBottomSheetSnapPointsParams) => {
'worklet';
if (baseHeight === maxHeight) {
return [baseHeight];
}
return [baseHeight, maxHeight];
};
type GetBottomSheetTopSnapIndexParams = {
baseHeight: number;
maxHeight: number;
};
export const getBottomSheetTopSnapIndex = ({
baseHeight,
maxHeight,
}: GetBottomSheetTopSnapIndexParams) => {
'worklet';
return baseHeight === maxHeight ? 0 : 1;
};
type GetBottomSheetSnapPointTranslateYParams = {
baseHeight: number;
maxHeight: number;
snapIndex: number;
};
export const getBottomSheetSnapPointTranslateY = ({
baseHeight,
maxHeight,
snapIndex,
}: GetBottomSheetSnapPointTranslateYParams) => {
'worklet';
if (getBottomSheetTopSnapIndex({ baseHeight, maxHeight }) === 0) {
return 0;
}
return snapIndex <= 0 ? maxHeight - baseHeight : 0;
};