@applicaster/zapp-react-native-ui-components
Version:
Applicaster Zapp React Native ui components for the Quick Brick App
45 lines (35 loc) • 1.14 kB
text/typescript
import {
toFiniteNumberWithDefault,
toNumber,
} from "@applicaster/zapp-react-native-utils/numberUtils";
import { isNil } from "ramda";
const dimensionRegex = /\b(width|height)=(\d+)\b/gi;
export const withDimensions = (
url: Option<string>,
width: Option<number | string>,
height: Option<number | string>
) => {
if (isNil(url)) {
return url;
}
if (!url.toString().startsWith("http")) {
return url;
}
const newWidth = Math.trunc(toFiniteNumberWithDefault(0, width));
const newHeight = Math.trunc(toFiniteNumberWithDefault(0, height));
return url.replace(dimensionRegex, (match, name, originalValue) => {
if (name.toLocaleLowerCase() === "width" && newWidth > 0) {
const originalWidth = toNumber(originalValue);
if (originalWidth > 0 && originalWidth > newWidth) {
return `${name}=${newWidth}`;
}
}
if (name.toLocaleLowerCase() === "height" && newHeight > 0) {
const originalHeight = toNumber(originalValue);
if (originalHeight > 0 && originalHeight > newHeight) {
return `${name}=${newHeight}`;
}
}
return match;
});
};