import { ActionIcon, Button, Card, Divider, Grid, GridCol, Group, Highlight, Modal, Popover, Stack, Text, TextInput, } from '@mantine/core'; import { useDebouncedValue, useDisclosure } from '@mantine/hooks'; import { useCommonHooks, useMutationAPI, useQueryAPI } from 'hooks'; import DebouncedMessage from 'pages/settings/components/Messages/DebouncedMessage'; import { useEffect, useState } from 'react'; import { FiHelpCircle, FiPlus } from 'react-icons/fi'; import { actionIconClasses, buttonClasses, cardClasses, modalClasses, textClasses, textInputClasses, } from 'styles'; import type { Message } from 'types'; const MessageSettings = () => { const endpoint = 'api/messages'; const { data: messageData, isFetched: isMessagesFetched } = useQueryAPI({ endpoint: endpoint, }); const { theme, isMobile, modalStyle } = useCommonHooks(); const { mutateAsync } = useMutationAPI(); const [messages, setMessages] = useState([]); const [newMessage, setNewMessage] = useState(''); const [newMessageError, setNewMessageError] = useState(''); const [message, setMessage] = useState({}); const [debounced] = useDebouncedValue(message, 1000); const [searchValue, setSearchValue] = useState(''); const [debouncedSearch] = useDebouncedValue(searchValue, 500); const [modalOpened, { open: openModal, close: closeModal }] = useDisclosure(false); useEffect(() => { if (messageData && isMessagesFetched) { setMessages( messageData.filter((m: Message) => m.message.toLowerCase().includes(debouncedSearch.toLowerCase()), ), ); } }, [messageData, isMessagesFetched, debouncedSearch]); useEffect(() => { if (Object.keys(debounced).length) { mutateAsync({ method: 'PATCH', endpoint: endpoint, body: debounced }); } }, [debounced]); return ( { closeModal(); }} style={modalStyle} closeOnEscape closeOnClickOutside > Add a new message { setNewMessage(event.target.value); }} error={newMessageError} /> Messages { 'These custom messages will be displayed in the header on the homepage.' } { 'Built-in variables include $firstName and $lastName. To force the text to upper case, use a carat (^), ie, $^firstName. Messages may contain any unicode text.' } { setSearchValue(event.target.value); }} /> {messages?.map((message: Message) => ( ))} ); }; export default MessageSettings;