import { isRoomFederated } from '@rocket.chat/core-typings'; import type { IRoom, RoomAdminFieldsType } from '@rocket.chat/core-typings'; import { css } from '@rocket.chat/css-in-js'; import { Box, Button, ButtonGroup } from '@rocket.chat/fuselage'; import { useStableCallback } from '@rocket.chat/fuselage-hooks'; import { RoomAvatar } from '@rocket.chat/ui-avatar'; import { useToastMessageDispatch } from '@rocket.chat/ui-contexts'; import { useEffect } from 'react'; import { useTranslation } from 'react-i18next'; import { useSingleFileInput } from '../../hooks/useSingleFileInput'; import { getAvatarURL } from '../../lib/getAvatarURL'; import { isValidImageFormat } from '../../lib/utils/isValidImageFormat'; export type RoomAvatarEditorProps = { room: Pick; disabled?: boolean; roomAvatar?: string; onChangeAvatar: (url: string | null) => void; }; const RoomAvatarEditor = ({ disabled = false, room, roomAvatar, onChangeAvatar }: RoomAvatarEditorProps) => { const { t } = useTranslation(); const dispatchToastMessage = useToastMessageDispatch(); const handleChangeAvatar = useStableCallback(async (file: File) => { const reader = new FileReader(); reader.readAsDataURL(file); reader.onloadend = async (): Promise => { const { result } = reader; if (typeof result === 'string' && (await isValidImageFormat(result))) { onChangeAvatar(result); return; } dispatchToastMessage({ type: 'error', message: t('Avatar_format_invalid') }); }; }); const [clickUpload, reset] = useSingleFileInput(handleChangeAvatar); const clickReset = useStableCallback(() => { reset(); onChangeAvatar(null); }); useEffect(() => { !roomAvatar && reset(); }, [roomAvatar, reset]); const defaultUrl = room.prid ? getAvatarURL({ roomId: room.prid }) : getAvatarURL({ username: `@${room.name}` }); // Discussions inherit avatars from the parent room return (