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} />
    </>
  );
}