// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
import React, {useCallback, type ReactNode} from 'react';
import {useIntl} from 'react-intl';
import {Platform, StyleSheet, TouchableOpacity, View} from 'react-native';
import {buildAbsoluteUrl} from '@actions/remote/file';
import CompassIcon from '@components/compass_icon';
import ExpoImage from '@components/expo_image';
import ProfilePicture from '@components/profile_picture';
import {View as ViewConstant} from '@constants';
import {useServerUrl} from '@context/server';
import {useTheme} from '@context/theme';
import {usePreventDoubleTap} from '@hooks/utils';
import {openUserProfileModal} from '@screens/navigation';
import {ensureString} from '@utils/types';
import type PostModel from '@typings/database/models/servers/post';
import type UserModel from '@typings/database/models/servers/user';
import type {AvailableScreens} from '@typings/screens/navigation';
type AvatarProps = {
author?: UserModel;
enablePostIconOverride?: boolean;
isAutoReponse: boolean;
location: AvailableScreens;
post: PostModel;
}
const style = StyleSheet.create({
buffer: {
marginRight: Platform.select({android: 2, ios: 3}),
},
});
const Avatar = ({author, enablePostIconOverride, isAutoReponse, location, post}: AvatarProps) => {
const intl = useIntl();
const theme = useTheme();
const serverUrl = useServerUrl();
const fromWebHook = post.props?.from_webhook === 'true';
const iconOverride = enablePostIconOverride && post.props?.use_user_icon !== 'true';
const propsIconUrl = ensureString(post.props?.override_icon_url);
const propsUsername = ensureString(post.props?.override_username);
if (fromWebHook && iconOverride) {
const isEmoji = Boolean(post.props?.override_icon_emoji);
const frameSize = ViewConstant.PROFILE_PICTURE_SIZE;
const pictureSize = isEmoji ? ViewConstant.PROFILE_PICTURE_EMOJI_SIZE : ViewConstant.PROFILE_PICTURE_SIZE;
const borderRadius = isEmoji ? 0 : ViewConstant.PROFILE_PICTURE_SIZE / 2;
const overrideIconUrl = buildAbsoluteUrl(serverUrl, propsIconUrl);
let iconComponent: ReactNode;
if (overrideIconUrl) {
const source = {uri: overrideIconUrl};
iconComponent = (
);
} else {
iconComponent = (
);
}
return (
{iconComponent}
);
}
const openUserProfile = usePreventDoubleTap(useCallback(() => {
if (!author) {
return;
}
openUserProfileModal(intl, theme, {
location,
userId: author.id,
channelId: post.channelId,
userIconOverride: propsIconUrl,
usernameOverride: propsUsername,
});
}, [author, intl, location, post.channelId, propsIconUrl, propsUsername, theme]));
let component = (
);
if (!fromWebHook) {
component = (
{component}
);
}
return component;
};
export default Avatar;