// Group setting enums, types and permission utilities. // Decoupled from GroupSettingState — safe to import anywhere without triggering // the legacy state watcher or vue reactivity side-effects. import { GroupType, GroupMemberRole } from 'tuikit-atomicx-react/chat'; // Re-export core enums so callers only need one import path export { GroupType, GroupMemberRole }; // GroupPermission is UI-layer concept not tracked by atomicxcore core enum GroupPermission { VIEW_GROUP_INFO = 'VIEW_GROUP_INFO', VIEW_MEMBER_LIST = 'VIEW_MEMBER_LIST', EDIT_GROUP_PROFILE_NAME = 'EDIT_GROUP_PROFILE_NAME', EDIT_GROUP_PROFILE_AVATAR = 'EDIT_GROUP_PROFILE_AVATAR', EDIT_GROUP_PROFILE_INTRODUCTION = 'EDIT_GROUP_PROFILE_INTRODUCTION', EDIT_GROUP_PROFILE_NOTIFICATION = 'EDIT_GROUP_PROFILE_NOTIFICATION', EDIT_GROUP_PROFILE_ELSE = 'EDIT_GROUP_PROFILE_ELSE', REMOVE_MEMBER = 'REMOVE_MEMBER', SET_MEMBER_ROLE = 'SET_MEMBER_ROLE', MUTE_MEMBER = 'MUTE_MEMBER', MUTE_ALL_MEMBERS = 'MUTE_ALL_MEMBERS', TRANSFER_OWNERSHIP = 'TRANSFER_OWNERSHIP', DISMISS_GROUP = 'DISMISS_GROUP', QUIT_GROUP = 'QUIT_GROUP', } export { GroupPermission }; // Complete permission matrix type type PermissionMap = Record; type RolePermissionMap = Record; type CompletePermissionMatrix = Record; const FULL_PERMISSION_MATRIX: CompletePermissionMatrix = { [GroupType.Work]: { [GroupMemberRole.Owner]: { [GroupPermission.VIEW_GROUP_INFO]: true, [GroupPermission.VIEW_MEMBER_LIST]: true, [GroupPermission.EDIT_GROUP_PROFILE_NAME]: true, [GroupPermission.EDIT_GROUP_PROFILE_AVATAR]: true, [GroupPermission.EDIT_GROUP_PROFILE_INTRODUCTION]: true, [GroupPermission.EDIT_GROUP_PROFILE_NOTIFICATION]: true, [GroupPermission.EDIT_GROUP_PROFILE_ELSE]: true, [GroupPermission.REMOVE_MEMBER]: true, [GroupPermission.SET_MEMBER_ROLE]: false, [GroupPermission.MUTE_MEMBER]: false, [GroupPermission.MUTE_ALL_MEMBERS]: false, [GroupPermission.TRANSFER_OWNERSHIP]: true, [GroupPermission.DISMISS_GROUP]: false, [GroupPermission.QUIT_GROUP]: true, }, [GroupMemberRole.Admin]: { [GroupPermission.VIEW_GROUP_INFO]: true, [GroupPermission.VIEW_MEMBER_LIST]: true, [GroupPermission.EDIT_GROUP_PROFILE_NAME]: true, [GroupPermission.EDIT_GROUP_PROFILE_AVATAR]: true, [GroupPermission.EDIT_GROUP_PROFILE_INTRODUCTION]: true, [GroupPermission.EDIT_GROUP_PROFILE_NOTIFICATION]: true, [GroupPermission.EDIT_GROUP_PROFILE_ELSE]: false, [GroupPermission.REMOVE_MEMBER]: false, [GroupPermission.SET_MEMBER_ROLE]: false, [GroupPermission.MUTE_MEMBER]: false, [GroupPermission.MUTE_ALL_MEMBERS]: false, [GroupPermission.TRANSFER_OWNERSHIP]: false, [GroupPermission.DISMISS_GROUP]: false, [GroupPermission.QUIT_GROUP]: true, }, [GroupMemberRole.Member]: { [GroupPermission.VIEW_GROUP_INFO]: true, [GroupPermission.VIEW_MEMBER_LIST]: true, [GroupPermission.EDIT_GROUP_PROFILE_NAME]: true, [GroupPermission.EDIT_GROUP_PROFILE_AVATAR]: true, [GroupPermission.EDIT_GROUP_PROFILE_INTRODUCTION]: true, [GroupPermission.EDIT_GROUP_PROFILE_NOTIFICATION]: true, [GroupPermission.EDIT_GROUP_PROFILE_ELSE]: false, [GroupPermission.REMOVE_MEMBER]: false, [GroupPermission.SET_MEMBER_ROLE]: false, [GroupPermission.MUTE_MEMBER]: false, [GroupPermission.MUTE_ALL_MEMBERS]: false, [GroupPermission.TRANSFER_OWNERSHIP]: false, [GroupPermission.DISMISS_GROUP]: false, [GroupPermission.QUIT_GROUP]: true, }, }, [GroupType.Public]: { [GroupMemberRole.Owner]: { [GroupPermission.VIEW_GROUP_INFO]: true, [GroupPermission.VIEW_MEMBER_LIST]: true, [GroupPermission.EDIT_GROUP_PROFILE_NAME]: true, [GroupPermission.EDIT_GROUP_PROFILE_AVATAR]: true, [GroupPermission.EDIT_GROUP_PROFILE_INTRODUCTION]: true, [GroupPermission.EDIT_GROUP_PROFILE_NOTIFICATION]: true, [GroupPermission.EDIT_GROUP_PROFILE_ELSE]: true, [GroupPermission.REMOVE_MEMBER]: true, [GroupPermission.SET_MEMBER_ROLE]: true, [GroupPermission.MUTE_MEMBER]: true, [GroupPermission.MUTE_ALL_MEMBERS]: true, [GroupPermission.TRANSFER_OWNERSHIP]: true, [GroupPermission.DISMISS_GROUP]: true, [GroupPermission.QUIT_GROUP]: false, }, [GroupMemberRole.Admin]: { [GroupPermission.VIEW_GROUP_INFO]: true, [GroupPermission.VIEW_MEMBER_LIST]: true, [GroupPermission.EDIT_GROUP_PROFILE_NAME]: true, [GroupPermission.EDIT_GROUP_PROFILE_AVATAR]: true, [GroupPermission.EDIT_GROUP_PROFILE_INTRODUCTION]: true, [GroupPermission.EDIT_GROUP_PROFILE_NOTIFICATION]: true, [GroupPermission.EDIT_GROUP_PROFILE_ELSE]: false, [GroupPermission.REMOVE_MEMBER]: true, [GroupPermission.SET_MEMBER_ROLE]: false, [GroupPermission.MUTE_MEMBER]: true, [GroupPermission.MUTE_ALL_MEMBERS]: false, [GroupPermission.TRANSFER_OWNERSHIP]: false, [GroupPermission.DISMISS_GROUP]: false, [GroupPermission.QUIT_GROUP]: true, }, [GroupMemberRole.Member]: { [GroupPermission.VIEW_GROUP_INFO]: true, [GroupPermission.VIEW_MEMBER_LIST]: true, [GroupPermission.EDIT_GROUP_PROFILE_NAME]: false, [GroupPermission.EDIT_GROUP_PROFILE_AVATAR]: false, [GroupPermission.EDIT_GROUP_PROFILE_INTRODUCTION]: false, [GroupPermission.EDIT_GROUP_PROFILE_NOTIFICATION]: false, [GroupPermission.EDIT_GROUP_PROFILE_ELSE]: false, [GroupPermission.REMOVE_MEMBER]: false, [GroupPermission.SET_MEMBER_ROLE]: false, [GroupPermission.MUTE_MEMBER]: false, [GroupPermission.MUTE_ALL_MEMBERS]: false, [GroupPermission.TRANSFER_OWNERSHIP]: false, [GroupPermission.DISMISS_GROUP]: false, [GroupPermission.QUIT_GROUP]: true, }, }, [GroupType.Meeting]: { [GroupMemberRole.Owner]: { [GroupPermission.VIEW_GROUP_INFO]: true, [GroupPermission.VIEW_MEMBER_LIST]: true, [GroupPermission.EDIT_GROUP_PROFILE_NAME]: true, [GroupPermission.EDIT_GROUP_PROFILE_AVATAR]: true, [GroupPermission.EDIT_GROUP_PROFILE_INTRODUCTION]: true, [GroupPermission.EDIT_GROUP_PROFILE_NOTIFICATION]: true, [GroupPermission.EDIT_GROUP_PROFILE_ELSE]: true, [GroupPermission.REMOVE_MEMBER]: true, [GroupPermission.SET_MEMBER_ROLE]: true, [GroupPermission.MUTE_MEMBER]: true, [GroupPermission.MUTE_ALL_MEMBERS]: true, [GroupPermission.TRANSFER_OWNERSHIP]: true, [GroupPermission.DISMISS_GROUP]: true, [GroupPermission.QUIT_GROUP]: false, }, [GroupMemberRole.Admin]: { [GroupPermission.VIEW_GROUP_INFO]: true, [GroupPermission.VIEW_MEMBER_LIST]: true, [GroupPermission.EDIT_GROUP_PROFILE_NAME]: true, [GroupPermission.EDIT_GROUP_PROFILE_AVATAR]: true, [GroupPermission.EDIT_GROUP_PROFILE_INTRODUCTION]: true, [GroupPermission.EDIT_GROUP_PROFILE_NOTIFICATION]: true, [GroupPermission.EDIT_GROUP_PROFILE_ELSE]: false, [GroupPermission.REMOVE_MEMBER]: true, [GroupPermission.SET_MEMBER_ROLE]: false, [GroupPermission.MUTE_MEMBER]: true, [GroupPermission.MUTE_ALL_MEMBERS]: true, [GroupPermission.TRANSFER_OWNERSHIP]: false, [GroupPermission.DISMISS_GROUP]: false, [GroupPermission.QUIT_GROUP]: true, }, [GroupMemberRole.Member]: { [GroupPermission.VIEW_GROUP_INFO]: true, [GroupPermission.VIEW_MEMBER_LIST]: true, [GroupPermission.EDIT_GROUP_PROFILE_NAME]: false, [GroupPermission.EDIT_GROUP_PROFILE_AVATAR]: false, [GroupPermission.EDIT_GROUP_PROFILE_INTRODUCTION]: false, [GroupPermission.EDIT_GROUP_PROFILE_NOTIFICATION]: false, [GroupPermission.EDIT_GROUP_PROFILE_ELSE]: false, [GroupPermission.REMOVE_MEMBER]: false, [GroupPermission.SET_MEMBER_ROLE]: false, [GroupPermission.MUTE_MEMBER]: false, [GroupPermission.MUTE_ALL_MEMBERS]: false, [GroupPermission.TRANSFER_OWNERSHIP]: false, [GroupPermission.DISMISS_GROUP]: false, [GroupPermission.QUIT_GROUP]: true, }, }, [GroupType.Community]: { [GroupMemberRole.Owner]: { [GroupPermission.VIEW_GROUP_INFO]: true, [GroupPermission.VIEW_MEMBER_LIST]: true, [GroupPermission.EDIT_GROUP_PROFILE_NAME]: true, [GroupPermission.EDIT_GROUP_PROFILE_AVATAR]: true, [GroupPermission.EDIT_GROUP_PROFILE_INTRODUCTION]: true, [GroupPermission.EDIT_GROUP_PROFILE_NOTIFICATION]: true, [GroupPermission.EDIT_GROUP_PROFILE_ELSE]: true, [GroupPermission.REMOVE_MEMBER]: true, [GroupPermission.SET_MEMBER_ROLE]: true, [GroupPermission.MUTE_MEMBER]: true, [GroupPermission.MUTE_ALL_MEMBERS]: true, [GroupPermission.TRANSFER_OWNERSHIP]: true, [GroupPermission.DISMISS_GROUP]: true, [GroupPermission.QUIT_GROUP]: false, }, [GroupMemberRole.Admin]: { [GroupPermission.VIEW_GROUP_INFO]: true, [GroupPermission.VIEW_MEMBER_LIST]: true, [GroupPermission.EDIT_GROUP_PROFILE_NAME]: true, [GroupPermission.EDIT_GROUP_PROFILE_AVATAR]: true, [GroupPermission.EDIT_GROUP_PROFILE_INTRODUCTION]: true, [GroupPermission.EDIT_GROUP_PROFILE_NOTIFICATION]: true, [GroupPermission.EDIT_GROUP_PROFILE_ELSE]: false, [GroupPermission.REMOVE_MEMBER]: true, [GroupPermission.SET_MEMBER_ROLE]: false, [GroupPermission.MUTE_MEMBER]: true, [GroupPermission.MUTE_ALL_MEMBERS]: true, [GroupPermission.TRANSFER_OWNERSHIP]: false, [GroupPermission.DISMISS_GROUP]: false, [GroupPermission.QUIT_GROUP]: true, }, [GroupMemberRole.Member]: { [GroupPermission.VIEW_GROUP_INFO]: true, [GroupPermission.VIEW_MEMBER_LIST]: true, [GroupPermission.EDIT_GROUP_PROFILE_NAME]: false, [GroupPermission.EDIT_GROUP_PROFILE_AVATAR]: false, [GroupPermission.EDIT_GROUP_PROFILE_INTRODUCTION]: false, [GroupPermission.EDIT_GROUP_PROFILE_NOTIFICATION]: false, [GroupPermission.EDIT_GROUP_PROFILE_ELSE]: false, [GroupPermission.REMOVE_MEMBER]: false, [GroupPermission.SET_MEMBER_ROLE]: false, [GroupPermission.MUTE_MEMBER]: false, [GroupPermission.MUTE_ALL_MEMBERS]: false, [GroupPermission.TRANSFER_OWNERSHIP]: false, [GroupPermission.DISMISS_GROUP]: false, [GroupPermission.QUIT_GROUP]: true, }, }, [GroupType.AVChatRoom]: { [GroupMemberRole.Owner]: { [GroupPermission.VIEW_GROUP_INFO]: true, [GroupPermission.VIEW_MEMBER_LIST]: true, [GroupPermission.EDIT_GROUP_PROFILE_NAME]: true, [GroupPermission.EDIT_GROUP_PROFILE_AVATAR]: true, [GroupPermission.EDIT_GROUP_PROFILE_INTRODUCTION]: true, [GroupPermission.EDIT_GROUP_PROFILE_NOTIFICATION]: true, [GroupPermission.EDIT_GROUP_PROFILE_ELSE]: true, [GroupPermission.REMOVE_MEMBER]: false, [GroupPermission.SET_MEMBER_ROLE]: false, [GroupPermission.MUTE_MEMBER]: true, [GroupPermission.MUTE_ALL_MEMBERS]: true, [GroupPermission.TRANSFER_OWNERSHIP]: false, [GroupPermission.DISMISS_GROUP]: false, [GroupPermission.QUIT_GROUP]: true, }, [GroupMemberRole.Admin]: { [GroupPermission.VIEW_GROUP_INFO]: true, [GroupPermission.VIEW_MEMBER_LIST]: true, [GroupPermission.EDIT_GROUP_PROFILE_NAME]: false, [GroupPermission.EDIT_GROUP_PROFILE_AVATAR]: false, [GroupPermission.EDIT_GROUP_PROFILE_INTRODUCTION]: false, [GroupPermission.EDIT_GROUP_PROFILE_NOTIFICATION]: false, [GroupPermission.EDIT_GROUP_PROFILE_ELSE]: false, [GroupPermission.REMOVE_MEMBER]: false, [GroupPermission.SET_MEMBER_ROLE]: false, [GroupPermission.MUTE_MEMBER]: false, [GroupPermission.MUTE_ALL_MEMBERS]: false, [GroupPermission.TRANSFER_OWNERSHIP]: false, [GroupPermission.DISMISS_GROUP]: false, [GroupPermission.QUIT_GROUP]: true, }, [GroupMemberRole.Member]: { [GroupPermission.VIEW_GROUP_INFO]: true, [GroupPermission.VIEW_MEMBER_LIST]: true, [GroupPermission.EDIT_GROUP_PROFILE_NAME]: false, [GroupPermission.EDIT_GROUP_PROFILE_AVATAR]: false, [GroupPermission.EDIT_GROUP_PROFILE_INTRODUCTION]: false, [GroupPermission.EDIT_GROUP_PROFILE_NOTIFICATION]: false, [GroupPermission.EDIT_GROUP_PROFILE_ELSE]: false, [GroupPermission.REMOVE_MEMBER]: false, [GroupPermission.SET_MEMBER_ROLE]: false, [GroupPermission.MUTE_MEMBER]: false, [GroupPermission.MUTE_ALL_MEMBERS]: false, [GroupPermission.TRANSFER_OWNERSHIP]: false, [GroupPermission.DISMISS_GROUP]: false, [GroupPermission.QUIT_GROUP]: true, }, }, }; /** * Check whether the given role has the specified permission in the given group type. * Falls back to false when any argument is absent. */ function hasGroupPermission( permission: GroupPermission, role?: GroupMemberRole, groupType?: GroupType, ): boolean { if (!role || !groupType) { return false; } return FULL_PERMISSION_MATRIX[groupType]?.[role]?.[permission] ?? false; } export { hasGroupPermission, FULL_PERMISSION_MATRIX }; export type { CompletePermissionMatrix };