import Tip from "../../../components/ui/Tip"; import Button from "../../../components/ui/Button"; import { Channels } from "revolt.js/dist/api/objects"; import Checkbox from "../../../components/ui/Checkbox"; import { useServer } from "../../../context/revoltjs/hooks"; import { useContext, useEffect, useState } from "preact/hooks"; import { ChannelPermission } from "revolt.js/dist/api/permissions"; import { AppContext } from "../../../context/revoltjs/RevoltClient"; // ! FIXME: export from revolt.js const DEFAULT_PERMISSION_DM = ChannelPermission.View + ChannelPermission.SendMessage + ChannelPermission.ManageChannel + ChannelPermission.VoiceCall + ChannelPermission.InviteOthers + ChannelPermission.EmbedLinks + ChannelPermission.UploadFiles; interface Props { channel: Channels.GroupChannel | Channels.TextChannel | Channels.VoiceChannel; } // ! FIXME: bad code :) export default function Permissions({ channel }: Props) { const [ selected, setSelected ] = useState('default'); const client = useContext(AppContext); type R = { name: string, permissions: number }; let roles: { [key: string]: R } = {}; if (channel.channel_type !== 'Group') { const server = useServer(channel.server); const a = server?.roles ?? {}; for (let b of Object.keys(a)) { roles[b] = { name: a[b].name, permissions: a[b].permissions[1] }; } } const keys = [ 'default', ...Object.keys(roles) ]; const defaultRole = { name: 'Default', permissions: (channel.channel_type === 'Group' ? channel.permissions : channel.default_permissions) ?? DEFAULT_PERMISSION_DM }; const selectedRole = selected === 'default' ? defaultRole : roles[selected]; if (!selectedRole) { useEffect(() => setSelected('default'), [ ]); return null; } const [ p, setPerm ] = useState(selectedRole.permissions >>> 0); useEffect(() => { setPerm(selectedRole.permissions >>> 0); }, [ selected, selectedRole.permissions ]); return (
This section is under construction.

select role

{ selected } { keys .map(id => { let role: R = id === 'default' ? defaultRole : roles[id]; return ( selected && setSelected(id)}> { role.name } ) }) }

channel per??issions

{ Object.keys(ChannelPermission) .map(perm => { let value = ChannelPermission[perm as keyof typeof ChannelPermission]; if (value & DEFAULT_PERMISSION_DM) { return ( 0} onChange={c => setPerm(c ? (p | value) : (p ^ value))}> { perm } ) } }) }
); }