Add categorized spaces in account data
authorAjay Bura <ajbura@gmail.com>
Wed, 2 Mar 2022 15:54:11 +0000 (21:24 +0530)
committerAjay Bura <ajbura@gmail.com>
Wed, 2 Mar 2022 15:54:11 +0000 (21:24 +0530)
Signed-off-by: Ajay Bura <ajbura@gmail.com>
src/client/action/accountData.js
src/client/state/AccountData.js
src/client/state/cons.js

index 00ddf2309bd249a79a154329aa17adf40ba2e8ae..4d2d2e5c67e94e8d140b4617a80895b6d8153bbd 100644 (file)
@@ -14,3 +14,17 @@ export function deleteSpaceShortcut(roomId) {
     roomId,
   });
 }
+
+export function categorizeSpace(roomId) {
+  appDispatcher.dispatch({
+    type: cons.actions.accountData.CATEGORIZE_SPACE,
+    roomId,
+  });
+}
+
+export function unCategorizeSpace(roomId) {
+  appDispatcher.dispatch({
+    type: cons.actions.accountData.UNCATEGORIZE_SPACE,
+    roomId,
+  });
+}
index 88ba0335b37ee5c4559abc7b45dbcaa3c795e214..f20c20e58c9ea9163a1841b32444b67ac66c9ab9 100644 (file)
@@ -12,6 +12,10 @@ class AccountData extends EventEmitter {
 
     this.spaceShortcut = new Set();
     this._populateSpaceShortcut();
+
+    this.categorizedSpaces = new Set();
+    this._populateCategorizedSpaces();
+
     this._listenEvents();
 
     appDispatcher.register(this.accountActions.bind(this));
@@ -43,6 +47,27 @@ class AccountData extends EventEmitter {
     this.matrixClient.setAccountData(cons.IN_CINNY_SPACES, spaceContent);
   }
 
+  _populateCategorizedSpaces() {
+    this.categorizedSpaces.clear();
+    const spaceContent = this._getAccountData();
+
+    if (spaceContent?.categorized === undefined) return;
+
+    spaceContent.categorized.forEach((spaceId) => {
+      if (this.spaces.has(spaceId)) this.categorizedSpaces.add(spaceId);
+    });
+    if (spaceContent.categorized.length !== this.categorizedSpaces.size) {
+      // TODO: we can wait for sync to complete or else we may end up removing valid space id
+      this._updateCategorizedSpacesData([...this.categorizedSpaces]);
+    }
+  }
+
+  _updateCategorizedSpacesData(categorizedSpaceList) {
+    const spaceContent = this._getAccountData();
+    spaceContent.categorized = categorizedSpaceList;
+    this.matrixClient.setAccountData(cons.IN_CINNY_SPACES, spaceContent);
+  }
+
   accountActions(action) {
     const actions = {
       [cons.actions.accountData.CREATE_SPACE_SHORTCUT]: () => {
@@ -57,6 +82,18 @@ class AccountData extends EventEmitter {
         this._updateSpaceShortcutData([...this.spaceShortcut]);
         this.emit(cons.events.accountData.SPACE_SHORTCUT_UPDATED, action.roomId);
       },
+      [cons.actions.accountData.CATEGORIZE_SPACE]: () => {
+        if (this.categorizedSpaces.has(action.roomId)) return;
+        this.categorizedSpaces.add(action.roomId);
+        this._updateCategorizedSpacesData([...this.categorizedSpaces]);
+        this.emit(cons.events.accountData.CATEGORIZE_SPACE_UPDATED, action.roomId);
+      },
+      [cons.actions.accountData.UNCATEGORIZE_SPACE]: () => {
+        if (!this.categorizedSpaces.has(action.roomId)) return;
+        this.categorizedSpaces.delete(action.roomId);
+        this._updateCategorizedSpacesData([...this.categorizedSpaces]);
+        this.emit(cons.events.accountData.CATEGORIZE_SPACE_UPDATED, action.roomId);
+      },
     };
     actions[action.type]?.();
   }
@@ -66,6 +103,8 @@ class AccountData extends EventEmitter {
       if (event.getType() !== cons.IN_CINNY_SPACES) return;
       this._populateSpaceShortcut();
       this.emit(cons.events.accountData.SPACE_SHORTCUT_UPDATED);
+      this._populateCategorizedSpaces();
+      this.emit(cons.events.accountData.CATEGORIZE_SPACE_UPDATED);
     });
 
     this.roomList.on(cons.events.roomList.ROOM_LEAVED, (roomId) => {
@@ -75,6 +114,11 @@ class AccountData extends EventEmitter {
         this._updateSpaceShortcutData([...this.spaceShortcut]);
         this.emit(cons.events.accountData.SPACE_SHORTCUT_UPDATED, roomId);
       }
+      if (this.categorizedSpaces.has(roomId)) {
+        this.categorizedSpaces.delete(roomId);
+        this._updateCategorizedSpacesData([...this.categorizedSpaces]);
+        this.emit(cons.events.accountData.CATEGORIZE_SPACE_UPDATED, roomId);
+      }
     });
   }
 }
index d277ea1f9e0ecf6511e020b381e1640c579584c4..aae179f92f96043abffd240051d072fea8cb32e6 100644 (file)
@@ -55,6 +55,8 @@ const cons = {
     accountData: {
       CREATE_SPACE_SHORTCUT: 'CREATE_SPACE_SHORTCUT',
       DELETE_SPACE_SHORTCUT: 'DELETE_SPACE_SHORTCUT',
+      CATEGORIZE_SPACE: 'CATEGORIZE_SPACE',
+      UNCATEGORIZE_SPACE: 'UNCATEGORIZE_SPACE',
     },
     settings: {
       TOGGLE_SYSTEM_THEME: 'TOGGLE_SYSTEM_THEME',
@@ -97,6 +99,7 @@ const cons = {
     },
     accountData: {
       SPACE_SHORTCUT_UPDATED: 'SPACE_SHORTCUT_UPDATED',
+      CATEGORIZE_SPACE_UPDATED: 'CATEGORIZE_SPACE_UPDATED',
     },
     notifications: {
       NOTI_CHANGED: 'NOTI_CHANGED',