File size: 1,678 Bytes
3b6afc0 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
import React, { useEffect } from 'react';
import { useNavigate, useParams } from 'react-router-dom';
import { useRecoilState, useRecoilValue } from 'recoil';
import Messages from '../components/Messages';
import TextChat from '../components/Input';
import store from '~/store';
export default function Search() {
const [searchQuery, setSearchQuery] = useRecoilState(store.searchQuery);
const conversation = useRecoilValue(store.conversation);
const { searchPlaceholderConversation } = store.useConversation();
const { query } = useParams();
const navigate = useNavigate();
// when conversation changed or conversationId (in url) changed
useEffect(() => {
if (conversation === null) {
// no current conversation, we need to do something
if (query) {
// create new
searchPlaceholderConversation();
setSearchQuery(query);
} else {
navigate('/chat/new');
}
} else if (conversation?.conversationId === 'search') {
// jump to search page
if (searchQuery !== query) {
navigate(`/search/${searchQuery}`);
}
} else {
// conversationId (in url) should always follow conversation?.conversationId, unless conversation is null
navigate(`/chat/${conversation?.conversationId}`);
}
}, [conversation, query, searchQuery]);
// if not a search
if (conversation?.conversationId !== 'search') {
return null;
}
// if query not match
if (searchQuery !== query) {
return null;
}
// if query is null
if (!query) {
return null;
}
return (
<>
<Messages isSearchView={true} />
<TextChat isSearchView={true} />
</>
);
}
|