import { RenderHTML } from '@builder.io/react-native-render-html';
import * as React from 'react';
import { useWindowDimensions } from 'react-native';
import BuilderContext from '../../context/builder.context';
/**
* @typedef {{}} BuilderBlock
*/
/**
* @typedef {{}} BuilderContext
*/
/**
*
* @param {string} string
* @returns {string}
*/
function camelToKebabCase(string) {
return string.replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g, '$1-$2').toLowerCase();
}
/**
*
* @param {object} object
* @param {string[]} keys
* @returns {object}
*/
function pick(object, keys) {
return keys.reduce((obj, key) => {
// eslint-disable-next-line no-prototype-builtins
if (object && object.hasOwnProperty(key)) {
obj[key] = object[key];
}
return obj;
}, {});
}
const PICK_STYLES = ['textAlign'];
/**
* @param {BuilderBlock} block
* @returns
*/
function getBlockStyles(block) {
// TODO: responsive CSS using react native viewport width hooks
const styles = {
...block.responsiveStyles?.large,
...block.styles,
};
if (block.responsiveStyles?.medium) {
Object.assign(styles, block.responsiveStyles.medium);
}
if (block.responsiveStyles?.small) {
Object.assign(styles, block.responsiveStyles.small);
}
return styles;
}
/**
*
* @param {BuilderBlock} block
* @param {any} inheritedStyles
* @returns
*/
function getCss(block, inheritedStyles) {
const styleObject = {
...inheritedStyles,
...pick(getBlockStyles(block), PICK_STYLES),
};
if (!styleObject) {
return '';
}
let str = ``;
for (const key in styleObject) {
const value = styleObject[key];
if (typeof value === 'string') {
str += `${camelToKebabCase(key)}: ${value};`;
}
}
return str;
}
/**
*
* @param {{ text: string; builderBlock: BuilderBlock, builderContext: BuilderContext}} props
* @returns
*/
export default function Text(props) {
const { width } = useWindowDimensions();
const context = React.useContext(BuilderContext);
return (
${props.text?.toString() || ''}`,
}}
/>
);
}