import { Text } from "preact-i18n"; import styles from './Panes.module.scss'; import Button from "../../../components/ui/Button"; import Overline from "../../../components/ui/Overline"; import { Servers } from "revolt.js/dist/api/objects"; 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"; import Tip from "../../../components/ui/Tip"; import IconButton from "../../../components/ui/IconButton"; import ButtonItem from "../../../components/navigation/items/ButtonItem"; import isEqual from 'lodash.isequal'; import InputBox from "../../../components/ui/InputBox"; import { Plus } from "@styled-icons/boxicons-regular"; import { useIntermediate } from "../../../context/intermediate/Intermediate"; interface Props { server: Servers.Server; } const I32ToU32 = (arr: number[]) => arr.map(x => x >>> 0); // ! FIXME: bad code :) export function Roles({ server }: Props) { const [ role, setRole ] = useState('default'); const { openScreen } = useIntermediate(); const client = useContext(AppContext); const roles = server.roles ?? {}; if (role !== 'default' && typeof roles[role] === 'undefined') { useEffect(() => setRole('default')); return; } const v = (id: string) => I32ToU32(id === 'default' ? server.default_permissions : roles[id].permissions) const [ perm, setPerm ] = useState(v(role)); useEffect(() => setPerm(v(role)), [ role, roles[role]?.permissions ]); const modified = !isEqual(perm, v(role)); const save = () => client.servers.setPermissions(server._id, role, { server: perm[0], channel: perm[1] }); const deleteRole = () => { setRole('default'); client.servers.deleteRole(server._id, role); }; return (