@tra-tech/react-native-kitra
Version:
UI kit for React Native
77 lines (69 loc) • 2.52 kB
text/typescript
/* eslint-disable no-bitwise */
import type React from 'react';
import type { IconType } from './types';
function hexToRgbA(hex:string, percentage:number) {
let c;
if (/^#([A-Fa-f0-9]{3}){1,2}$/.test(hex)) {
c = hex.substring(1).split('');
if (c.length === 3) {
c = [c[0], c[0], c[1], c[1], c[2], c[2]];
}
c = `0x${c.join('')}`;
// @ts-ignore
return `rgba(${[(c >> 16) & 255, (c >> 8) & 255, c & 255].join(',')},${percentage / 100})`;
}
throw new Error('Bad Hex');
}
export const opacity = (color:string, percentage: number) => hexToRgbA(color, percentage);
const customIcons: any = {};
export const registerCustomIconType = (id: string, customIcon: any) => {
customIcons[id] = customIcon;
};
export const getIconType = (type: IconType): any => {
switch (type) {
case 'zocial':
return require('react-native-vector-icons/Zocial').default;
case 'octicon':
return require('react-native-vector-icons/Octicons').default;
case 'material':
return require('react-native-vector-icons/MaterialIcons').default;
case 'material-community':
return require('react-native-vector-icons/MaterialCommunityIcons')
.default;
case 'ionicon':
return require('react-native-vector-icons/Ionicons').default;
case 'foundation':
return require('react-native-vector-icons/Foundation').default;
case 'evilicon':
return require('react-native-vector-icons/EvilIcons').default;
case 'entypo':
return require('react-native-vector-icons/Entypo').default;
case 'font-awesome':
return require('react-native-vector-icons/FontAwesome').default;
case 'font-awesome-5':
return require('react-native-vector-icons/FontAwesome5').default;
case 'simple-line-icon':
return require('react-native-vector-icons/SimpleLineIcons').default;
case 'feather':
return require('react-native-vector-icons/Feather').default;
case 'antdesign':
case 'ant-design':
return require('react-native-vector-icons/AntDesign').default;
case 'fontisto':
return require('react-native-vector-icons/Fontisto').default;
default:
if (Object.prototype.hasOwnProperty.call(customIcons, type)) {
return customIcons[type];
}
return require('react-native-vector-icons/MaterialIcons').default;
}
};
export const getIconProperties = (node: React.ReactElement) => {
const { type, name, size, color } = node.props;
return {
type,
name,
size,
color,
};
};