import { Platform } from 'react-native'; import type VideoFeedConfiguration from '../models/VideoFeedConfiguration'; class VideoFeedUtil { static calculateGridFeedHeight({ videoFeedConfiguration = {}, rows, columns, width, }: { videoFeedConfiguration?: VideoFeedConfiguration; rows: number; columns: number; width: number; }): number { if (Platform.OS === 'ios') { const contentPadding = videoFeedConfiguration.contentPadding ?? { top: 10, right: 10, bottom: 10, left: 10, }; const itemSpacing = videoFeedConfiguration.itemSpacing ?? 10; const aspectRatio = videoFeedConfiguration.aspectRatio ?? 4 / 6; const horizontalMargin = (contentPadding.left ?? 10) + (contentPadding.right ?? 10); const verticalMargin = (contentPadding.top ?? 10) + (contentPadding.bottom ?? 10); const totalHorizontalSpacing = (columns - 1) * itemSpacing; const totalVerticalSpacing = (rows - 1) * itemSpacing; const availableItemWidth = width - (totalHorizontalSpacing + horizontalMargin); const singleItemWidth = availableItemWidth / columns; const singleItemHeight = singleItemWidth / aspectRatio; const feedHeight = singleItemHeight * rows + totalVerticalSpacing + verticalMargin; return Math.ceil(feedHeight); } else { const itemSpacing = videoFeedConfiguration.itemSpacing ?? 8; const contentPadding = { top: itemSpacing / 2, right: itemSpacing / 2, bottom: itemSpacing / 2, left: itemSpacing / 2, }; const aspectRatio = 9 / 16; const horizontalMargin = (contentPadding.left ?? 4) + (contentPadding.right ?? 4); const verticalMargin = (contentPadding.top ?? 4) + (contentPadding.bottom ?? 4); const totalHorizontalSpacing = (columns - 1) * itemSpacing; const totalVerticalSpacing = (rows - 1) * itemSpacing; const availableItemWidth = width - totalHorizontalSpacing - horizontalMargin; const singleItemWidth = availableItemWidth / columns; let singleItemHeight = 0; if (videoFeedConfiguration.titlePosition === 'stacked') { singleItemHeight = singleItemWidth / aspectRatio + 30; } else { singleItemHeight = singleItemWidth / aspectRatio; } const feedHeight = singleItemHeight * rows + totalVerticalSpacing + verticalMargin; return Math.ceil(feedHeight); } } } export default VideoFeedUtil;