UNPKG

@applicaster/zapp-react-native-ui-components

Version:

Applicaster Zapp React Native ui components for the Quick Brick App

72 lines (63 loc) 1.91 kB
import { Image as RNImage } from "react-native"; import memoizee from "memoizee"; import { quickBrickLogger } from "@applicaster/zapp-react-native-utils/logger"; import { noop } from "@applicaster/zapp-react-native-utils/functionUtils"; import { toFiniteNumberWithDefault } from "@applicaster/zapp-react-native-utils/numberUtils"; type Size = { width: number; height: number; }; const logger = quickBrickLogger .addSubsystem("zapp-react-native-ui-components") .addSubsystem("Components") .addSubsystem("MasterCell") .addSubsystem("DefaultComponents") .addSubsystem("Image.android"); const THRESHOLD = 2; // in how many times size should be BIGGER than expected const isSizeTooBig = (realSize: number, expectedSize: number): boolean => toFiniteNumberWithDefault(0, realSize / expectedSize) >= THRESHOLD; const getImageSize = (uri: string): Promise<Size> => { return new Promise((resolve, reject) => { RNImage.getSize( uri, (width: number, height: number) => { const size: Size = { width, height }; resolve(size); }, reject ); }); }; const checkTooBigImageSize = ( uri: string, expectedWidth: number, expectedHeight: number ): void => { getImageSize(uri) .then(({ width, height }) => { if (isSizeTooBig(width, expectedWidth)) { logger.warning({ message: "Width of image is much bigger than expected", data: { uri, width, expectedWidth, }, }); } if (isSizeTooBig(height, expectedHeight)) { logger.warning({ message: "Height of image is much bigger than expected", data: { uri, height, expectedHeight, }, }); } }) .catch(noop); }; export const runOnceCheckTooBigImageSize = memoizee(checkTooBigImageSize, { primitive: true, });