diff --git a/web/src/ui/MainScreen.tsx b/web/src/ui/MainScreen.tsx index eb965a0..3db7601 100644 --- a/web/src/ui/MainScreen.tsx +++ b/web/src/ui/MainScreen.tsx @@ -13,7 +13,7 @@ // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . -import { use, useCallback, useLayoutEffect, useMemo, useState } from "react" +import { use, useCallback, useLayoutEffect, useMemo, useReducer, useState } from "react" import type { RoomID } from "@/api/types" import ClientContext from "./ClientContext.ts" import MainScreenContext, { MainScreenContextFields } from "./MainScreenContext.ts" @@ -23,9 +23,16 @@ import RoomView from "./roomview/RoomView.tsx" import { useResizeHandle } from "./util/useResizeHandle.tsx" import "./MainScreen.css" +const rpReducer = (prevState: RightPanelProps | null, newState: RightPanelProps | null) => { + if (prevState?.type === newState?.type) { + return null + } + return newState +} + const MainScreen = () => { const [activeRoomID, setActiveRoomID] = useState(null) - const [rightPanel, setRightPanel] = useState(null) + const [rightPanel, setRightPanel] = useReducer(rpReducer, null) const client = use(ClientContext)! const activeRoom = activeRoomID ? client.store.rooms.get(activeRoomID) : undefined const setActiveRoom = useCallback((roomID: RoomID) => {