2023-01-26 10:30:26 -08:00
|
|
|
import React from 'react';
|
|
|
|
|
2023-02-02 11:06:27 -08:00
|
|
|
import Blurhash from 'soapbox/components/blurhash';
|
2023-01-26 10:30:26 -08:00
|
|
|
import { Icon } from 'soapbox/components/ui';
|
|
|
|
|
|
|
|
import type { Attachment } from 'soapbox/types/entities';
|
|
|
|
|
|
|
|
interface IChatUpload {
|
|
|
|
attachment: Attachment,
|
|
|
|
onDelete?(): void,
|
|
|
|
}
|
|
|
|
|
|
|
|
/** An attachment uploaded to the chat composer, before sending. */
|
|
|
|
const ChatUpload: React.FC<IChatUpload> = ({ attachment, onDelete }) => {
|
|
|
|
return (
|
2023-02-02 11:06:27 -08:00
|
|
|
<div className='relative inline-block rounded-lg overflow-hidden isolate'>
|
|
|
|
<Blurhash hash={attachment.blurhash} className='absolute inset-0 w-full h-full -z-10' />
|
|
|
|
|
2023-01-26 10:30:26 -08:00
|
|
|
<div className='absolute right-[6px] top-[6px]'>
|
|
|
|
<RemoveButton onClick={onDelete} />
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<img
|
2023-02-02 11:06:27 -08:00
|
|
|
className='w-24 h-24'
|
2023-01-26 10:30:26 -08:00
|
|
|
key={attachment.id}
|
|
|
|
src={attachment.url}
|
|
|
|
alt=''
|
|
|
|
/>
|
|
|
|
</div>
|
|
|
|
);
|
|
|
|
};
|
|
|
|
|
|
|
|
interface IRemoveButton {
|
|
|
|
onClick?: React.MouseEventHandler<HTMLButtonElement>
|
|
|
|
}
|
|
|
|
|
|
|
|
/** Floating button to remove an attachment. */
|
|
|
|
const RemoveButton: React.FC<IRemoveButton> = ({ onClick }) => {
|
|
|
|
return (
|
|
|
|
<button
|
|
|
|
type='button'
|
|
|
|
onClick={onClick}
|
|
|
|
className='bg-secondary-500 w-5 h-5 p-1 rounded-full flex items-center justify-center'
|
|
|
|
>
|
|
|
|
<Icon
|
2023-02-02 11:33:18 -08:00
|
|
|
className='w-4 h-4 text-white'
|
2023-01-26 10:30:26 -08:00
|
|
|
src={require('@tabler/icons/x.svg')}
|
|
|
|
/>
|
|
|
|
</button>
|
|
|
|
);
|
|
|
|
};
|
|
|
|
|
|
|
|
export default ChatUpload;
|