Loading packages/client/src/Moderator/Moderator.tsx +36 −2 Original line number Diff line number Diff line import React, { createContext, useContext, useEffect, useReducer } from "react"; import React, { createContext, useCallback, useContext, useEffect, useLayoutEffect, useReducer, } from "react"; import { UserModSidebar } from "./UserModSidebar"; import { KeybindManager } from "../lib/keybinds"; import { ModSidebar } from "./ModSidebar"; import { useHasRole } from "../hooks/useHasRole"; import { ModeratorModule } from "./ModeratorModule"; import { usePanel } from "../contexts/PanelContext"; ModeratorModule.get(); // initialize Loading Loading @@ -40,18 +48,21 @@ export const useModerator = () => useContext(context); export const ModeratorContext = ({ children }: React.PropsWithChildren) => { const isMod = useHasRole("MOD"); const Panel = usePanel(); const [state, dispatch] = useReducer<IModeratorContext, [ModerationActions]>( const [state, reducerDispatch] = useReducer<IModeratorContext, [ModerationActions]>( (state, data) => { switch (data.action) { case "INSPECT_USER": return { ...state, inspectUser: data.user, showMenu: data.user ? false : state.showMenu, }; case "OPEN_MENU": return { ...state, inspectUser: undefined, showMenu: true, }; case "CLOSE_MENU": Loading Loading @@ -105,6 +116,29 @@ export const ModeratorContext = ({ children }: React.PropsWithChildren) => { } ); const dispatch = useCallback( (action: ModerationActions) => { if ( action.action === "OPEN_MENU" || (action.action === "INSPECT_USER" && action.user) ) { Panel.dispatch(["info", undefined]); } reducerDispatch(action); }, [Panel.dispatch], ); useLayoutEffect(() => { if (!Panel.state.info) return; if (state.showMenu) { reducerDispatch({ action: "CLOSE_MENU" }); } else if (state.inspectUser) { reducerDispatch({ action: "INSPECT_USER" }); } }, [Panel.state.info, state.inspectUser, state.showMenu]); useEffect(() => { if (isMod) { ModeratorModule.get().connect(); Loading packages/client/src/assets/reactions/awe.png 0 → 100644 +44.8 KiB Loading image diff... packages/client/src/assets/reactions/bongo.gif 0 → 100644 +90.8 KiB Loading image diff... packages/client/src/assets/reactions/cry.png 0 → 100644 +13 KiB Loading image diff... packages/client/src/assets/reactions/cute.png 0 → 100644 +32.4 KiB Loading image diff... Loading
packages/client/src/Moderator/Moderator.tsx +36 −2 Original line number Diff line number Diff line import React, { createContext, useContext, useEffect, useReducer } from "react"; import React, { createContext, useCallback, useContext, useEffect, useLayoutEffect, useReducer, } from "react"; import { UserModSidebar } from "./UserModSidebar"; import { KeybindManager } from "../lib/keybinds"; import { ModSidebar } from "./ModSidebar"; import { useHasRole } from "../hooks/useHasRole"; import { ModeratorModule } from "./ModeratorModule"; import { usePanel } from "../contexts/PanelContext"; ModeratorModule.get(); // initialize Loading Loading @@ -40,18 +48,21 @@ export const useModerator = () => useContext(context); export const ModeratorContext = ({ children }: React.PropsWithChildren) => { const isMod = useHasRole("MOD"); const Panel = usePanel(); const [state, dispatch] = useReducer<IModeratorContext, [ModerationActions]>( const [state, reducerDispatch] = useReducer<IModeratorContext, [ModerationActions]>( (state, data) => { switch (data.action) { case "INSPECT_USER": return { ...state, inspectUser: data.user, showMenu: data.user ? false : state.showMenu, }; case "OPEN_MENU": return { ...state, inspectUser: undefined, showMenu: true, }; case "CLOSE_MENU": Loading Loading @@ -105,6 +116,29 @@ export const ModeratorContext = ({ children }: React.PropsWithChildren) => { } ); const dispatch = useCallback( (action: ModerationActions) => { if ( action.action === "OPEN_MENU" || (action.action === "INSPECT_USER" && action.user) ) { Panel.dispatch(["info", undefined]); } reducerDispatch(action); }, [Panel.dispatch], ); useLayoutEffect(() => { if (!Panel.state.info) return; if (state.showMenu) { reducerDispatch({ action: "CLOSE_MENU" }); } else if (state.inspectUser) { reducerDispatch({ action: "INSPECT_USER" }); } }, [Panel.state.info, state.inspectUser, state.showMenu]); useEffect(() => { if (isMod) { ModeratorModule.get().connect(); Loading