61a1f008d0
- i18next 23->26 + react-i18next 15->17 - prettier 2->3, reformat all files - replace @fontsource/inter with @fontsource-variable/inter 5, update import path - domhandler 5->6 (aligns with transitive deps) - lint-staged 16->17
61 lines
1.9 KiB
TypeScript
61 lines
1.9 KiB
TypeScript
import { useMemo } from 'react';
|
|
import {
|
|
IPowerLevels,
|
|
PowerLevelActions,
|
|
PowerLevelNotificationsAction,
|
|
readPowerLevel,
|
|
} from './usePowerLevels';
|
|
|
|
export type RoomPermissionsAPI = {
|
|
event: (type: string, userId: string) => boolean;
|
|
stateEvent: (type: string, userId: string) => boolean;
|
|
action: (action: PowerLevelActions, userId: string) => boolean;
|
|
notificationAction: (action: PowerLevelNotificationsAction, userId: string) => boolean;
|
|
};
|
|
|
|
export const getRoomPermissionsAPI = (
|
|
creators: Set<string>,
|
|
powerLevels: IPowerLevels,
|
|
): RoomPermissionsAPI => {
|
|
const api: RoomPermissionsAPI = {
|
|
event: (type, userId) => {
|
|
if (creators.has(userId)) return true;
|
|
const userPower = readPowerLevel.user(powerLevels, userId);
|
|
const requiredPL = readPowerLevel.event(powerLevels, type);
|
|
return userPower >= requiredPL;
|
|
},
|
|
stateEvent: (type, userId) => {
|
|
if (creators.has(userId)) return true;
|
|
const userPower = readPowerLevel.user(powerLevels, userId);
|
|
const requiredPL = readPowerLevel.state(powerLevels, type);
|
|
return userPower >= requiredPL;
|
|
},
|
|
action: (action, userId) => {
|
|
if (creators.has(userId)) return true;
|
|
const userPower = readPowerLevel.user(powerLevels, userId);
|
|
const requiredPL = readPowerLevel.action(powerLevels, action);
|
|
return userPower >= requiredPL;
|
|
},
|
|
notificationAction: (action, userId) => {
|
|
if (creators.has(userId)) return true;
|
|
const userPower = readPowerLevel.user(powerLevels, userId);
|
|
const requiredPL = readPowerLevel.notification(powerLevels, action);
|
|
return userPower >= requiredPL;
|
|
},
|
|
};
|
|
|
|
return api;
|
|
};
|
|
|
|
export const useRoomPermissions = (
|
|
creators: Set<string>,
|
|
powerLevels: IPowerLevels,
|
|
): RoomPermissionsAPI => {
|
|
const api: RoomPermissionsAPI = useMemo(
|
|
() => getRoomPermissionsAPI(creators, powerLevels),
|
|
[creators, powerLevels],
|
|
);
|
|
|
|
return api;
|
|
};
|