Viewing File: /home/maglabs/marco/wp-content/plugins/extendify/src/Chat/Chat.jsx

import { createSlotFill } from '@wordpress/components';
import { useEffect, useState } from '@wordpress/element';
import { registerPlugin, unregisterPlugin } from '@wordpress/plugins';
import { motion, AnimatePresence } from 'framer-motion';
import { ChatSettings } from '@chat/ChatSettings';
import { ChatButton } from '@chat/components/ChatButton';
import { ChatDialog } from '@chat/components/ChatDialog';

export const Chat = () => {
	const [showChat, setShowChat] = useState(window.extChatData?.showChat);
	const [showDialog, setShowDialog] = useState(false);

	useEffect(() => {
		const { Fill } = createSlotFill('Extendify/Assist/Settings');
		registerPlugin('extendify-chat-settings', {
			render: () => (
				<Fill>
					<ChatSettings showChat={showChat} setShowChat={setShowChat} />
				</Fill>
			),
		});
		return () => unregisterPlugin('extendify-chat-settings');
	}, [showChat]);

	if (!showChat) return null;

	return (
		<>
			<ChatButton
				showDialog={showDialog}
				onClick={() => setShowDialog(!showDialog)}
			/>
			<AnimatePresence>
				{showDialog && (
					<motion.div
						key="chat-dialog"
						className="fixed bottom-0 right-0 z-high"
						initial={{ y: 15, opacity: 0 }}
						exit={{ y: 15, opacity: 0 }}
						transition={{
							y: { duration: 0.25 },
							opacity: { duration: 0.1 },
						}}
						animate={{ y: 0, opacity: 1 }}>
						<ChatDialog setShowChat={setShowChat} />
					</motion.div>
				)}
			</AnimatePresence>
		</>
	);
};
Back to Directory File Manager