diff --git a/src/app/molecules/room-permissions/RoomPermissions.jsx b/src/app/molecules/room-permissions/RoomPermissions.jsx new file mode 100644 index 0000000..d900197 --- /dev/null +++ b/src/app/molecules/room-permissions/RoomPermissions.jsx @@ -0,0 +1,208 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import './RoomPermissions.scss'; + +import initMatrix from '../../../client/initMatrix'; +import { getPowerLabel } from '../../../util/matrixUtil'; + +import Text from '../../atoms/text/Text'; +import Button from '../../atoms/button/Button'; +import { MenuHeader } from '../../atoms/context-menu/ContextMenu'; +import SettingTile from '../setting-tile/SettingTile'; + +import ChevronBottomIC from '../../../../public/res/ic/outlined/chevron-bottom.svg'; + +const permissionsInfo = { + users_default: { + name: 'Default role', + description: 'Set default role for all members.', + default: 0, + }, + events_default: { + name: 'Send messages', + description: 'Set minimum power level to send messages in room.', + default: 0, + }, + redact: { + name: 'Delete messages sent by others', + description: 'Set minimum power level to delete messages in room.', + default: 50, + }, + notifications: { + name: 'Ping room', + description: 'Set minimum power level to ping room.', + default: { + room: 50, + }, + }, + 'm.space.child': { + parent: 'events', + name: 'Manage rooms in space', + description: 'Set minimum power level to manage rooms in space.', + default: 50, + }, + invite: { + name: 'Invite', + description: 'Set minimum power level to invite members.', + default: 50, + }, + kick: { + name: 'Kick', + description: 'Set minimum power level to kick members.', + default: 50, + }, + ban: { + name: 'Ban', + description: 'Set minimum power level to ban members.', + default: 50, + }, + 'm.room.avatar': { + parent: 'events', + name: 'Change avatar', + description: 'Set minimum power level to change room/space avatar.', + default: 50, + }, + 'm.room.name': { + parent: 'events', + name: 'Change name', + description: 'Set minimum power level to change room/space name.', + default: 50, + }, + 'm.room.topic': { + parent: 'events', + name: 'Change topic', + description: 'Set minimum power level to change room/space topic.', + default: 50, + }, + state_default: { + name: 'Change settings', + description: 'Set minimum power level to change settings.', + default: 50, + }, + 'm.room.canonical_alias': { + parent: 'events', + name: 'Change published address', + description: 'Set minimum power level to publish and set main address.', + default: 50, + }, + 'm.room.power_levels': { + parent: 'events', + name: 'Change permissions', + description: 'Set minimum power level to change permissions.', + default: 50, + }, + 'm.room.encryption': { + parent: 'events', + name: 'Enable room encryption', + description: 'Set minimum power level to enable room encryption.', + default: 50, + }, + 'm.room.history_visibility': { + parent: 'events', + name: 'Change history visibility', + description: 'Set minimum power level to change room messages history visibility.', + default: 50, + }, + 'm.room.tombstone': { + parent: 'events', + name: 'Upgrade room', + description: 'Set minimum power level to upgrade room.', + default: 50, + }, + 'm.room.pinned_events': { + parent: 'events', + name: 'Pin messages', + description: 'Set minimum power level to pin messages in room.', + default: 50, + }, + 'm.room.server_acl': { + parent: 'events', + name: 'Change server ACLs', + description: 'Set minimum power level to change server ACLs.', + default: 50, + }, + 'im.vector.modular.widgets': { + parent: 'events', + name: 'Modify widgets', + description: 'Set minimum power level to modify room widgets.', + default: 50, + }, +}; + +const roomPermsGroups = { + 'General Permissions': ['users_default', 'events_default', 'redact', 'notifications'], + 'Manage members permissions': ['invite', 'kick', 'ban'], + 'Room profile permissions': ['m.room.avatar', 'm.room.name', 'm.room.topic'], + 'Settings permissions': ['state_default', 'm.room.canonical_alias', 'm.room.power_levels', 'm.room.encryption', 'm.room.history_visibility'], + 'Other permissions': ['m.room.tombstone', 'm.room.pinned_events', 'm.room.server_acl', 'im.vector.modular.widgets'], +}; + +const spacePermsGroups = { + 'General Permissions': ['users_default', 'm.space.child'], + 'Manage members permissions': ['invite', 'kick', 'ban'], + 'Space profile permissions': ['m.room.avatar', 'm.room.name', 'm.room.topic'], + 'Settings permissions': ['state_default', 'm.room.canonical_alias', 'm.room.power_levels'], +}; + +function RoomPermissions({ roomId }) { + const mx = initMatrix.matrixClient; + const room = mx.getRoom(roomId); + const pLEvent = room.currentState.getStateEvents('m.room.power_levels')[0]; + const permissions = pLEvent.getContent(); + const canChangePermission = room.currentState.maySendStateEvent('m.room.power_levels', mx.getUserId()); + + return ( +