import { Button, Divider, Grid, GridCol, Group, Stack, TextInput } from '@mantine/core'; import { useDebouncedValue, useDisclosure } from '@mantine/hooks'; import { useCommonHooks, useMutationAPI, useQueryAPI } from 'hooks'; import { useEffect, useState } from 'react'; import { textInputClasses } from 'styles'; import type { Message } from 'types'; import AddItemModal from '../Shared/AddItemModal'; import NoItemsFound from '../Shared/NoItemsFound'; import SettingsHeader from '../Shared/SettingsHeader'; import DebouncedMessage from './DebouncedMessage'; const MessageSettings = () => { const endpoint = 'api/messages'; const { data: messageData, isFetched: isMessagesFetched } = useQueryAPI({ endpoint: endpoint, }); const { isMobile } = 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); const [isLoading, setIsLoading] = useState(false); const handleClose = () => { setNewMessage(''); setNewMessageError(''); closeModal(); }; useEffect(() => { if (messageData && isMessagesFetched) { setMessages( messageData.filter((m: Message) => m.message.toLowerCase().includes(debouncedSearch.toLowerCase()), ), ); } if (debouncedSearch === searchValue) { setIsLoading(false); } }, [messageData, isMessagesFetched, debouncedSearch]); useEffect(() => { if (Object.keys(debounced).length) { mutateAsync({ method: 'PATCH', endpoint: endpoint, body: debounced }); } }, [debounced]); return ( { setNewMessage(event.target.value); }} error={newMessageError} /> } /> {messages.length > 0 ? ( messages?.map((message: Message) => ( )) ) : ( )} ); }; export default MessageSettings;