forked from abner/for-legacy-web
Add permissions / roles settings.
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
import Tip from "../../../components/ui/Tip";
|
||||
import { Servers } from "revolt.js/dist/api/objects";
|
||||
import { useContext, useEffect, useState } from "preact/hooks";
|
||||
import { AppContext } from "../../../context/revoltjs/RevoltClient";
|
||||
@@ -17,6 +18,7 @@ export function Bans({ server }: Props) {
|
||||
|
||||
return (
|
||||
<div>
|
||||
<Tip warning>This section is under construction.</Tip>
|
||||
{ bans?.map(x => <div>{x._id.user}: {x.reason ?? 'no reason'} <button onClick={() => client.servers.unbanUser(server._id, x._id.user)}>unban</button></div>) }
|
||||
</div>
|
||||
);
|
||||
|
||||
@@ -1,13 +1,17 @@
|
||||
import { useEffect, useState } from "preact/hooks";
|
||||
import { Servers } from "revolt.js/dist/api/objects";
|
||||
import Checkbox from "../../../components/ui/Checkbox";
|
||||
import Tip from "../../../components/ui/Tip";
|
||||
import { useForceUpdate, useUsers } from "../../../context/revoltjs/hooks";
|
||||
|
||||
interface Props {
|
||||
server: Servers.Server;
|
||||
}
|
||||
|
||||
// ! FIXME: bad code :)
|
||||
export function Members({ server }: Props) {
|
||||
const [members, setMembers] = useState<Servers.Member[] | undefined>(undefined);
|
||||
|
||||
const ctx = useForceUpdate();
|
||||
const users = useUsers(members?.map(x => x._id.user) ?? [], ctx);
|
||||
|
||||
@@ -18,7 +22,36 @@ export function Members({ server }: Props) {
|
||||
|
||||
return (
|
||||
<div>
|
||||
{ members && members.length > 0 && users?.map(x => x && <div>@{x.username}</div>) }
|
||||
<Tip warning>This section is under construction.</Tip>
|
||||
{ members && members.length > 0 && users?.map(x => x && <div>
|
||||
<br/>
|
||||
<br/>
|
||||
<br/>
|
||||
|
||||
<span>@{x.username}</span>
|
||||
{ server.roles && Object.keys(server.roles).map(id => {
|
||||
let role = server.roles?.[id]!;
|
||||
let member = members.find(y => x._id === y._id.user)!;
|
||||
|
||||
return (
|
||||
<Checkbox checked={member.roles?.includes(id) ?? false} onChange={selected => {
|
||||
let roles = (member.roles ?? []).filter(z => z !== id);
|
||||
if (selected) roles.push(id);
|
||||
|
||||
ctx.client.servers.members.editMember(server._id, x._id, { roles });
|
||||
setMembers(
|
||||
[
|
||||
...members.filter(e => e._id.user !== x._id),
|
||||
{
|
||||
...member,
|
||||
roles
|
||||
}
|
||||
]
|
||||
);
|
||||
}}>{ role.name }</Checkbox>
|
||||
)
|
||||
}) }
|
||||
</div>) }
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -76,9 +76,11 @@ export function Overview({ server }: Props) {
|
||||
if (!changed) setChanged(true)
|
||||
}}
|
||||
/>
|
||||
<Button onClick={save} contrast disabled={!changed}>
|
||||
<Text id="app.special.modals.actions.save" />
|
||||
</Button>
|
||||
<p>
|
||||
<Button onClick={save} contrast disabled={!changed}>
|
||||
<Text id="app.special.modals.actions.save" />
|
||||
</Button>
|
||||
</p>
|
||||
|
||||
<h3>
|
||||
<Text id="app.main.servers.custom_banner" />
|
||||
|
||||
@@ -1,15 +1,20 @@
|
||||
import { useEffect, useState } from "preact/hooks";
|
||||
import Tip from "../../../components/ui/Tip";
|
||||
import Button from "../../../components/ui/Button";
|
||||
import { Servers } from "revolt.js/dist/api/objects";
|
||||
import InputBox from "../../../components/ui/InputBox";
|
||||
import Checkbox from "../../../components/ui/Checkbox";
|
||||
import { useContext, useEffect, useState } from "preact/hooks";
|
||||
import { AppContext } from "../../../context/revoltjs/RevoltClient";
|
||||
import { ChannelPermission, ServerPermission } from "revolt.js/dist/api/permissions";
|
||||
|
||||
interface Props {
|
||||
server: Servers.Server;
|
||||
}
|
||||
|
||||
// ! FIXME: bad code :)
|
||||
export function Roles({ server }: Props) {
|
||||
const [ selected, setSelected ] = useState('default');
|
||||
const client = useContext(AppContext);
|
||||
|
||||
const roles = server.roles ?? {};
|
||||
const keys = [ 'default', ...Object.keys(roles) ];
|
||||
@@ -21,10 +26,26 @@ export function Roles({ server }: Props) {
|
||||
useEffect(() => setSelected('default'), [ ]);
|
||||
return null;
|
||||
}
|
||||
|
||||
const [ p, setPerm ] = useState([
|
||||
selectedRole.permissions[0] >>> 0,
|
||||
selectedRole.permissions[1] >>> 0,
|
||||
]);
|
||||
|
||||
useEffect(() => {
|
||||
setPerm([
|
||||
selectedRole.permissions[0] >>> 0,
|
||||
selectedRole.permissions[1] >>> 0,
|
||||
]);
|
||||
}, [ selected, selectedRole.permissions ]);
|
||||
|
||||
const [ name, setName ] = useState('');
|
||||
|
||||
return (
|
||||
<div>
|
||||
<Tip warning>This section is under construction.</Tip>
|
||||
<h2>select role</h2>
|
||||
{ selected }
|
||||
{ keys
|
||||
.map(id => {
|
||||
let role: Servers.Role = id === 'default' ? defaultRole : roles[id];
|
||||
@@ -36,14 +57,21 @@ export function Roles({ server }: Props) {
|
||||
)
|
||||
})
|
||||
}
|
||||
<Button disabled={selected === 'default'} error onClick={() => {}}>delete role</Button>
|
||||
<h2>server permmissions</h2>
|
||||
<Button disabled={selected === 'default'} error onClick={() => {
|
||||
setSelected('default');
|
||||
client.servers.deleteRole(server._id, selected);
|
||||
}}>delete role</Button><br/>
|
||||
<InputBox placeholder="role name" value={name} onChange={e => setName(e.currentTarget.value)} />
|
||||
<Button contrast onClick={() => {
|
||||
client.servers.createRole(server._id, name);
|
||||
}}>create</Button>
|
||||
<h2>serverm permmissions</h2>
|
||||
{ Object.keys(ServerPermission)
|
||||
.map(perm => {
|
||||
let value = ServerPermission[perm as keyof typeof ServerPermission];
|
||||
|
||||
return (
|
||||
<Checkbox checked={((selectedRole.permissions[0] >>> 0) & value) > 0} onChange={() => {}}>
|
||||
<Checkbox checked={(p[0] & value) > 0} onChange={c => setPerm([ c ? (p[0] | value) : (p[0] ^ value), p[1] ])}>
|
||||
{ perm }
|
||||
</Checkbox>
|
||||
)
|
||||
@@ -55,12 +83,15 @@ export function Roles({ server }: Props) {
|
||||
let value = ChannelPermission[perm as keyof typeof ChannelPermission];
|
||||
|
||||
return (
|
||||
<Checkbox checked={((selectedRole.permissions[1] >>> 0) & value) > 0} onChange={() => {}}>
|
||||
<Checkbox checked={((p[1] >>> 0) & value) > 0} onChange={c => setPerm([ p[0], c ? (p[1] | value) : (p[1] ^ value) ])}>
|
||||
{ perm }
|
||||
</Checkbox>
|
||||
)
|
||||
})
|
||||
}
|
||||
<Button contrast onClick={() => {
|
||||
client.servers.setPermissions(server._id, selected, { server: p[0], channel: p[1] });
|
||||
}}>click here to save permissions for role</Button>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user