import initMatrix from '../../../client/initMatrix';
import { isRoomAliasAvailable } from '../../../util/matrixUtil';
import * as roomActions from '../../../client/action/room';
+import { selectRoom } from '../../../client/action/navigation';
import Text from '../../atoms/text/Text';
import Button from '../../atoms/button/Button';
import IconButton from '../../atoms/button/IconButton';
import Input from '../../atoms/input/Input';
import Spinner from '../../atoms/spinner/Spinner';
+import SegmentControl from '../../atoms/segmented-controls/SegmentedControls';
import PopupWindow from '../../molecules/popup-window/PopupWindow';
import SettingTile from '../../molecules/setting-tile/SettingTile';
const [titleValue, updateTitleValue] = useState(undefined);
const [topicValue, updateTopicValue] = useState(undefined);
const [addressValue, updateAddressValue] = useState(undefined);
+ const [roleIndex, setRoleIndex] = useState(0);
const addressRef = useRef(null);
const topicRef = useRef(null);
updateTitleValue(undefined);
updateTopicValue(undefined);
updateAddressValue(undefined);
+ setRoleIndex(0);
}
async function createRoom() {
if (roomAlias.trim() === '') roomAlias = undefined;
}
+ const powerLevel = roleIndex === 1 ? 101 : undefined;
+
try {
- await roomActions.create({
- name, topic, isPublic, roomAlias, isEncrypted,
+ const result = await roomActions.create({
+ name, topic, isPublic, roomAlias, isEncrypted, powerLevel,
});
resetForm();
+ selectRoom(result.room_id);
onRequestClose();
} catch (e) {
if (e.message === 'M_UNKNOWN: Invalid characters in room alias') {
content={<Text variant="b3">You can’t disable this later. Bridges & most bots won’t work yet.</Text>}
/>
)}
+ <SettingTile
+ title="Select your role"
+ options={(
+ <SegmentControl
+ selected={roleIndex}
+ segments={[{ text: 'Admin' }, { text: 'Founder' }]}
+ onSelect={setRoleIndex}
+ />
+ )}
+ content={(
+ <Text variant="b3">Override the default (100) power level.</Text>
+ )}
+ />
<Input value={topicValue} onChange={handleTopicChange} forwardRef={topicRef} minHeight={174} resizable label="Topic (optional)" />
<div className="create-room__name-wrapper">
<Input value={titleValue} onChange={handleTitleChange} forwardRef={nameRef} label="Room name" required />
* @param {boolean} [opts.isEncrypted=false] Makes room encrypted
* @param {boolean} [opts.isDirect=false] Makes room as direct message
* @param {string[]} [opts.invite=[]] An array of userId's to invite
+ * @param{number} [opts.powerLevel=100] My power level
*/
async function create(opts) {
const mx = initMatrix.matrixClient;
+ const customPowerLevels = [101];
const options = {
name: opts.name,
topic: opts.topic,
invite: opts.invite || [],
initial_state: [],
preset: opts.isDirect === true ? 'trusted_private_chat' : undefined,
+ power_level_content_override: customPowerLevels.indexOf(opts.powerLevel) === -1 ? undefined : {
+ users: { [initMatrix.matrixClient.getUserId()]: opts.powerLevel },
+ },
};
if (opts.isPublic !== true && opts.isEncrypted === true) {