<VirtualizedMessageList separateGiphyPreview />Giphy Preview
This example demonstrates how to build a custom component to override the default GiphyPreviewMessage component that is rendered optionally in the
VirtualizedMessageList.
separateGiphyPreview Prop
When the separateGiphyPreview prop on the list is set to true, the Giphy preview is rendered in a separate component above the MessageInput rather than inline with the other messages in the list.
This separate component makes it so the preview doesn’t scroll away in the large channel.
Implementation
Our custom preview component will render an Attachment component with a custom AttachmentActions UI component, which handles the onClick functionality.
This functionality is handled with the handleAction method via the Message component’s useActionHandler hook.
const CustomAttachmentActions: React.FC<AttachmentActionsProps> = (props) => {
const { actionHandler, actions } = props;
const handleClick = async (
event: React.MouseEvent<HTMLButtonElement, MouseEvent>,
value?: string,
name?: string,
) => {
try {
if (actionHandler) await actionHandler(name, value, event);
} catch (err) {
console.log(err);
}
};
return (
<>
{actions.map((action) => (
<button onClick={(event) => handleClick(event, action.value, action.name)}>
{action.value}
</button>
))}
</>
);
};
const CustomGiphyPreview: React.FC<GiphyPreviewMessageProps> = (props) => {
const { message } = props;
const handleAction = useActionHandler(message);
if (!message.attachments) return null;
return (
<Attachment
actionHandler={handleAction}
AttachmentActions={CustomAttachmentActions}
attachments={message.attachments}
/>
);
};
<Chat client={chatClient}>
<Channel GiphyPreviewMessage={CustomGiphyPreview}>
<ChannelHeader />
<VirtualizedMessageList separateGiphyPreview />
<MessageInput />
</Channel>
</Chat>;The Result
