import { Text as RNText, TextProps as RNTextProps } from 'react-native';
import { useConfigContext } from '../../config';
import {
FontsPaletteType,
FontStyles,
FontsType,
usePaletteContext,
} from '../../theme';
import type { Undefinable } from '../../types';
export type TextProps = RNTextProps & {
textType?: FontsType;
paletteType?: FontsPaletteType;
};
/**
* Added theme support based on the native component `Text`.
*/
export function Text(props: TextProps) {
const { textType, paletteType, children, style, ...others } = props;
const presetTextStyle = useGetTextStyle({ textType, paletteType });
const { fontFamily } = useConfigContext();
return (
{children}
);
}
const useGetTextStyle = (props: TextProps): Undefinable => {
const { textType, paletteType } = props;
const { fonts } = usePaletteContext();
switch (textType) {
case 'extraSmall':
switch (paletteType) {
case 'headline':
return fonts.headline.extraSmall;
case 'title':
return fonts.title.extraSmall;
case 'label':
return fonts.label.extraSmall;
case 'body':
return fonts.body.extraSmall;
default:
break;
}
break;
case 'small':
switch (paletteType) {
case 'headline':
return fonts.headline.small;
case 'title':
return fonts.title.small;
case 'label':
return fonts.label.small;
case 'body':
return fonts.body.small;
default:
break;
}
break;
case 'medium':
switch (paletteType) {
case 'headline':
return fonts.headline.medium;
case 'title':
return fonts.title.medium;
case 'label':
return fonts.label.medium;
case 'body':
return fonts.body.medium;
default:
break;
}
break;
case 'large':
switch (paletteType) {
case 'headline':
return fonts.headline.large;
case 'title':
return fonts.title.large;
case 'label':
return fonts.label.large;
case 'body':
return fonts.body.large;
default:
break;
}
break;
default:
break;
}
return undefined;
};