Skip to content
Snippets Groups Projects
Roles.tsx 2.34 KiB
Newer Older
insert's avatar
insert committed
import { useEffect, useState } from "preact/hooks";
import Button from "../../../components/ui/Button";
import { Servers } from "revolt.js/dist/api/objects";
import Checkbox from "../../../components/ui/Checkbox";
insert's avatar
insert committed
import { ChannelPermission, ServerPermission } from "revolt.js/dist/api/permissions";
insert's avatar
insert committed

interface Props {
    server: Servers.Server;
}

export function Roles({ server }: Props) {
    const [ selected, setSelected ] = useState('default');

    const roles = server.roles ?? {};
    const keys = [ 'default', ...Object.keys(roles) ];

    const defaultRole = { name: 'Default', permissions: server.default_permissions };
    const selectedRole: Servers.Role = selected === 'default' ? defaultRole : roles[selected];

    if (!selectedRole) {
        useEffect(() => setSelected('default'), [ ]);
        return null;
    }
    
    return (
        <div>
            <h2>select role</h2>
            { keys
                .map(id => {
                    let role: Servers.Role = id === 'default' ? defaultRole : roles[id];

                    return (
                        <Checkbox checked={selected === id} onChange={selected => selected && setSelected(id)}>
                            { role.name }
                        </Checkbox>
                    )
                })
            }
            <Button disabled={selected === 'default'} error onClick={() => {}}>delete role</Button>
insert's avatar
insert committed
            <h2>server permmissions</h2>
insert's avatar
insert committed
            { Object.keys(ServerPermission)
                .map(perm => {
                    let value = ServerPermission[perm as keyof typeof ServerPermission];

                    return (
insert's avatar
insert committed
                        <Checkbox checked={((selectedRole.permissions[0] >>> 0) & value) > 0} onChange={() => {}}>
                            { perm }
                        </Checkbox>
                    )
                })
            }
            <h2>channel permmissions</h2>
            { Object.keys(ChannelPermission)
                .map(perm => {
                    let value = ChannelPermission[perm as keyof typeof ChannelPermission];

                    return (
                        <Checkbox checked={((selectedRole.permissions[1] >>> 0) & value) > 0} onChange={() => {}}>
insert's avatar
insert committed
                            { perm }
                        </Checkbox>
                    )
                })
            }
        </div>
    );
}