Fix bug in add existing rooms
authorAjay Bura <ajbura@gmail.com>
Wed, 23 Feb 2022 14:49:56 +0000 (20:19 +0530)
committerAjay Bura <ajbura@gmail.com>
Wed, 23 Feb 2022 14:49:56 +0000 (20:19 +0530)
Signed-off-by: Ajay Bura <ajbura@gmail.com>
src/app/molecules/space-add-existing/SpaceAddExisting.jsx

index 01de3b1c429f712d8162b9c808dba8161f185a0f..58604c7efdea17be64992967b0c0254c308ce266 100644 (file)
@@ -29,6 +29,7 @@ function SpaceAddExistingContent({ roomId }) {
   const mountStore = useStore(roomId);
   const [debounce] = useState(new Debounce());
   const [process, setProcess] = useState(null);
+  const [allRoomIds, setAllRoomIds] = useState([]);
   const [selected, setSelected] = useState([]);
   const [searchIds, setSearchIds] = useState(null);
   const mx = initMatrix.matrixClient;
@@ -36,11 +37,12 @@ function SpaceAddExistingContent({ roomId }) {
     spaces, rooms, directs, roomIdToParents,
   } = initMatrix.roomList;
 
-  let allRoomIds = [...spaces, ...rooms, ...directs];
-  allRoomIds = allRoomIds.filter((rId) => (
-    rId !== roomId
-    && !roomIdToParents.get(rId)?.has(roomId)
-  ));
+  useEffect(() => {
+    const allIds = [...spaces, ...rooms, ...directs].filter((rId) => (
+      rId !== roomId && !roomIdToParents.get(rId)?.has(roomId)
+    ));
+    setAllRoomIds(allIds);
+  }, [roomId]);
 
   const toggleSelection = (rId) => {
     if (process !== null) return;
@@ -56,26 +58,6 @@ function SpaceAddExistingContent({ roomId }) {
     setSelected(newSelected);
   };
 
-  const handleSearch = (ev) => {
-    const term = ev.target.value.toLocaleLowerCase().replaceAll(' ', '');
-    if (term === '') {
-      setSearchIds(null);
-      return;
-    }
-
-    debounce._(() => {
-      const searchedIds = allRoomIds.filter((rId) => {
-        let name = mx.getRoom(rId)?.name;
-        if (!name) return false;
-        name = name.normalize('NFKC')
-          .toLocaleLowerCase()
-          .replaceAll(' ', '');
-        return name.includes(term);
-      });
-      setSearchIds(searchedIds);
-    }, 400)();
-  };
-
   const handleAdd = async () => {
     setProcess(`Adding ${selected.length} items...`);
 
@@ -96,20 +78,43 @@ function SpaceAddExistingContent({ roomId }) {
     mountStore.setItem(true);
     await Promise.allSettled(promises);
     if (mountStore.getItem() !== true) return;
-    setSelected([]);
+
+    const allIds = [...spaces, ...rooms, ...directs].filter((rId) => (
+      rId !== roomId && !roomIdToParents.get(rId)?.has(roomId) && !selected.includes(rId)
+    ));
+    setAllRoomIds(allIds);
     setProcess(null);
+    setSelected([]);
+  };
+
+  const handleSearch = (ev) => {
+    const term = ev.target.value.toLocaleLowerCase().replaceAll(' ', '');
+    if (term === '') {
+      setSearchIds(null);
+      return;
+    }
+
+    debounce._(() => {
+      const searchedIds = allRoomIds.filter((rId) => {
+        let name = mx.getRoom(rId)?.name;
+        if (!name) return false;
+        name = name.normalize('NFKC')
+          .toLocaleLowerCase()
+          .replaceAll(' ', '');
+        return name.includes(term);
+      });
+      setSearchIds(searchedIds);
+    }, 200)();
+  };
+  const handleSearchClear = (ev) => {
+    const btn = ev.currentTarget;
+    btn.parentElement.searchInput.value = '';
+    setSearchIds(null);
   };
 
   return (
     <>
-      <form
-        onSubmit={(ev) => {
-          ev.preventDefault();
-          const { target } = ev;
-          target.searchInput.value = '';
-          setSearchIds(null);
-        }}
-      >
+      <form onSubmit={(ev) => { ev.preventDefault(); }}>
         <RawIcon size="small" src={SearchIC} />
         <Input
           name="searchInput"
@@ -117,7 +122,7 @@ function SpaceAddExistingContent({ roomId }) {
           placeholder="Search room"
           autoFocus
         />
-        <IconButton size="small" type="submit" src={CrossIC} />
+        <IconButton size="small" type="button" onClick={handleSearchClear} src={CrossIC} />
       </form>
       {searchIds?.length === 0 && <Text>No result found</Text>}
       {