import isEqual from "lodash.isequal"; import { observer } from "mobx-react-lite"; import { Server } from "revolt.js/dist/maps/Servers"; import styles from "./Panes.module.scss"; import { Text } from "preact-i18n"; import { useEffect, useState } from "preact/hooks"; import TextAreaAutoSize from "../../../lib/TextAreaAutoSize"; import { FileUploader } from "../../../context/revoltjs/FileUploads"; import { getChannelName } from "../../../context/revoltjs/util"; import Button from "../../../components/ui/Button"; import ComboBox from "../../../components/ui/ComboBox"; import InputBox from "../../../components/ui/InputBox"; interface Props { server: Server; } export const Overview = observer(({ server }: Props) => { const [name, setName] = useState(server.name); const [description, setDescription] = useState(server.description ?? ""); const [systemMessages, setSystemMessages] = useState( server.system_messages, ); useEffect(() => setName(server.name), [server.name]); useEffect( () => setDescription(server.description ?? ""), [server.description], ); useEffect( () => setSystemMessages(server.system_messages), [server.system_messages], ); const [changed, setChanged] = useState(false); function save() { const changes: Record = {}; if (name !== server.name) changes.name = name; if (description !== server.description) changes.description = description; if (!isEqual(systemMessages, server.system_messages)) changes.system_messages = systemMessages ?? undefined; server.edit(changes); setChanged(false); } return (
server.edit({ icon })} previewURL={server.generateIconURL({ max_side: 256 }, true)} remove={() => server.edit({ remove: "Icon" })} />

{ setName(e.currentTarget.value); if (!changed) setChanged(true); }} />

{ setDescription(ev.currentTarget.value); if (!changed) setChanged(true); }} />

server.edit({ banner })} previewURL={server.generateBannerURL({ width: 1000 }, true)} remove={() => server.edit({ remove: "Banner" })} />

{[ ["User Joined", "user_joined"], ["User Left", "user_left"], ["User Kicked", "user_kicked"], ["User Banned", "user_banned"], ].map(([i18n, key]) => ( // ! FIXME: temporary code just so we can expose the options

{i18n} { if (!changed) setChanged(true); const v = e.currentTarget.value; if (v === "disabled") { const { [key as keyof typeof systemMessages]: _, ...other } = systemMessages; setSystemMessages(other); } else { setSystemMessages({ ...systemMessages, [key]: v, }); } }}> {server.channels .filter( (x) => typeof x !== "undefined" && x.channel_type === "TextChannel", ) .map((channel) => ( ))}

))}

); });