helloya20's picture
Upload 2345 files
f0743f4 verified
import { useMemo } from 'react';
import { useAtomValue } from 'jotai';
import { useRecoilValue } from 'recoil';
import { useAuthContext, useLocalize } from '~/hooks';
import type { TMessageProps, TMessageIcon } from '~/common';
import MinimalHoverButtons from '~/components/Chat/Messages/MinimalHoverButtons';
import Icon from '~/components/Chat/Messages/MessageIcon';
import SearchContent from './Content/SearchContent';
import { fontSizeAtom } from '~/store/fontSize';
import SearchButtons from './SearchButtons';
import SubRow from './SubRow';
import { cn } from '~/utils';
import store from '~/store';
const MessageAvatar = ({ iconData }: { iconData: TMessageIcon }) => (
<div className="relative flex flex-shrink-0 flex-col items-end">
<div className="pt-0.5">
<div className="flex h-6 w-6 items-center justify-center overflow-hidden rounded-full">
<Icon iconData={iconData} />
</div>
</div>
</div>
);
const MessageBody = ({ message, messageLabel, fontSize }) => (
<div
className={cn('relative flex w-11/12 flex-col', message.isCreatedByUser ? '' : 'agent-turn')}
>
<div className={cn('select-none font-semibold', fontSize)}>{messageLabel}</div>
<SearchContent message={message} />
<SubRow classes="text-xs">
<MinimalHoverButtons message={message} />
<SearchButtons message={message} />
</SubRow>
</div>
);
export default function SearchMessage({ message }: Pick<TMessageProps, 'message'>) {
const fontSize = useAtomValue(fontSizeAtom);
const UsernameDisplay = useRecoilValue<boolean>(store.UsernameDisplay);
const { user } = useAuthContext();
const localize = useLocalize();
const iconData: TMessageIcon = useMemo(
() => ({
endpoint: message?.endpoint ?? '',
model: message?.model ?? '',
iconURL: message?.iconURL ?? '',
isCreatedByUser: message?.isCreatedByUser ?? false,
}),
[message?.endpoint, message?.model, message?.iconURL, message?.isCreatedByUser],
);
const messageLabel = useMemo(() => {
if (message?.isCreatedByUser) {
return UsernameDisplay
? (user?.name ?? '') || (user?.username ?? '')
: localize('com_user_message');
}
return message?.sender ?? '';
}, [
message?.isCreatedByUser,
message?.sender,
UsernameDisplay,
user?.name,
user?.username,
localize,
]);
if (!message) {
return null;
}
return (
<div className="text-token-text-primary w-full bg-transparent">
<div className="m-auto p-4 py-2 md:gap-6">
<div className="final-completion group mx-auto flex flex-1 gap-3 md:max-w-3xl md:px-5 lg:max-w-[40rem] lg:px-1 xl:max-w-[48rem] xl:px-5">
<MessageAvatar iconData={iconData} />
<MessageBody message={message} messageLabel={messageLabel} fontSize={fontSize} />
</div>
</div>
</div>
);
}