UNPKG

@clusterio/web_ui

Version:

Clusterio web interface implementation

24 lines (19 loc) 808 B
import { useCallback, useContext, useSyncExternalStore } from "react"; import ControlContext from "../components/ControlContext"; import * as lib from "@clusterio/lib"; export function useRolesOfUser(user?: lib.User) { const [roles, synced] = useRoles(); return [ user !== undefined ? new Map([...user.roleIds].map(roleId => [roleId, roles.get(roleId)])) : new Map(), synced, ] as const; } export function useRole(id?: number) { const [roles, synced] = useRoles(); return [id !== undefined ? roles.get(id) : undefined, synced] as const; } export function useRoles() { const control = useContext(ControlContext); const subscribe = useCallback((callback: () => void) => control.roles.subscribe(callback), [control]); return useSyncExternalStore(subscribe, () => control.roles.getSnapshot()); }