@sendbird/uikit-react-native-foundation
Version:
A foundational UI kit for building chat-enabled React Native apps.
93 lines • 2.29 kB
JavaScript
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
import React from 'react';
import { I18nManager, Image, StyleSheet, View } from 'react-native';
import { convertFileTypeToMessageType, getFileIconFromMessageType } from '@sendbird/uikit-utils';
import IconAssets from '../../assets/icon';
import createStyleSheet from '../../styles/createStyleSheet';
import useUIKitTheme from '../../theme/useUIKitTheme';
const mirroredIcons = {
create: true,
send: true,
reply: true,
'reply-filled': true,
thread: true,
chat: true,
'chat-filled': true,
message: true,
broadcast: true,
'file-audio': true,
'arrow-left': true,
leave: true,
'chevron-right': true
};
const Icon = ({
icon,
color,
size = 24,
containerStyle,
style,
direction = I18nManager.isRTL ? 'rtl' : 'ltr'
}) => {
const sizeStyle = sizeStyles[size] ?? {
width: size,
height: size
};
const {
colors
} = useUIKitTheme();
const shouldMirror = direction === 'rtl' && mirroredIcons[icon];
return /*#__PURE__*/React.createElement(View, {
style: [containerStyle, containerStyles.container]
}, /*#__PURE__*/React.createElement(Image, {
resizeMode: 'contain',
source: IconAssets[icon],
style: [{
tintColor: color ?? colors.primary
}, sizeStyle, shouldMirror && {
transform: [{
scaleX: -1
}]
}, style]
}));
};
const FileIcon = ({
fileType,
...props
}) => {
return /*#__PURE__*/React.createElement(Icon, _extends({
icon: getFileIconFromMessageType(convertFileTypeToMessageType(fileType))
}, props));
};
const containerStyles = StyleSheet.create({
container: {
alignItems: 'center',
justifyContent: 'center'
}
});
const sizeStyles = createStyleSheet({
16: {
width: 16,
height: 16
},
20: {
width: 20,
height: 20
},
24: {
width: 24,
height: 24
},
28: {
width: 28,
height: 28
},
32: {
width: 32,
height: 32
}
});
export default Object.assign(Icon, {
Assets: IconAssets,
File: FileIcon
});
//# sourceMappingURL=index.js.map