import { createFormControl, createFormGroup } from "solid-forms"; import { For, Show, createMemo, createSignal } from "solid-js"; import { Trans, useLingui } from "@lingui-solid/solid/macro"; import { API, Server, ServerRole } from "stoat.js"; import { styled } from "styled-system/jsx"; import { useModals } from "@revolt/modal"; import { Button, CategoryButton, CircularProgress, Column, Form2, IconButton, Row, Text, } from "@revolt/ui"; import MdContentCopy from "@material-design-icons/svg/outlined/content_copy.svg?component-solid"; import MdDelete from "@material-design-icons/svg/outlined/delete.svg?component-solid"; import MDPalette from "@material-design-icons/svg/outlined/palette.svg?component-solid"; import { useSettingsNavigation } from "../../Settings"; import { ChannelPermissionsEditor } from "../../channel/permissions/ChannelPermissionsEditor"; /** * Role editor */ export function ServerRoleEditor(props: { context: Server; roleId: string }) { const { t } = useLingui(); const { openModal } = useModals(); const { navigate } = useSettingsNavigation(); const role = createMemo( () => props.context.orderedRoles.find( (r) => r.id == props.roleId, ) as ServerRole, ); /* eslint-disable solid/reactivity */ const editGroup = createFormGroup({ name: createFormControl(role()?.name || ""), colour: createFormControl(role()?.colour || null), hoist: createFormControl(role()?.hoist == true), }); /* eslint-enable solid/reactivity */ const [pickerRef, setPickerRef] = createSignal(); async function onSubmit() { const changes: API.DataEditRole = {}; if (editGroup.controls.name.isDirty) { changes.name = editGroup.controls.name.value.trim(); } if (editGroup.controls.hoist.isDirty) { changes.hoist = editGroup.controls.hoist.value; } if (editGroup.controls.colour.isDirty) { changes.colour = editGroup.controls.colour.value ?? null; } await props.context.editRole(props.roleId, changes); } function onReset() { editGroup.controls.name.setValue(role()?.name || ""); editGroup.controls.hoist.setValue(role()?.hoist || false); editGroup.controls.colour.setValue(role()?.colour || null); } const submit = Form2.useSubmitHandler(editGroup, onSubmit, onReset); return (
pickerRef()?.click()} > { const colour = (e.currentTarget as HTMLInputElement).value; editGroup.controls.colour.setValue(colour); editGroup.controls.colour.markDirty(true); }} style={{ position: "absolute", opacity: 0, width: "0px", height: "0px", padding: 0, border: "none", }} /> {(colour) => (