import { Markdown } from "@styled-icons/boxicons-logos"; import { observer } from "mobx-react-lite"; import { useHistory } from "react-router-dom"; import { API } from "revolt.js"; import styles from "./Panes.module.scss"; import { Text } from "preact-i18n"; import { useCallback, useContext, useEffect, useState } from "preact/hooks"; import TextAreaAutoSize from "../../../lib/TextAreaAutoSize"; import { useTranslation } from "../../../lib/i18n"; import { UserProfile } from "../../../context/intermediate/popovers/UserProfile"; import { FileUploader } from "../../../context/revoltjs/FileUploads"; import { ClientStatus, StatusContext, useClient, } from "../../../context/revoltjs/RevoltClient"; import AutoComplete, { useAutoComplete, } from "../../../components/common/AutoComplete"; import Button from "../../../components/ui/Button"; import Tip from "../../../components/ui/Tip"; export const Profile = observer(() => { const status = useContext(StatusContext); const translate = useTranslation(); const client = useClient(); const history = useHistory(); const [profile, setProfile] = useState( undefined, ); // ! FIXME: temporary solution // ! we should just announce profile changes through WS const refreshProfile = useCallback(() => { client .user!.fetchProfile() .then((profile) => setProfile(profile ?? {})); }, [client.user, setProfile]); useEffect(() => { if (profile === undefined && status === ClientStatus.ONLINE) { refreshProfile(); } }, [profile, status, refreshProfile]); const [changed, setChanged] = useState(false); function setContent(content?: string) { setProfile({ ...profile, content }); if (!changed) setChanged(true); } function switchPage(to: string) { history.replace(`/settings/${to}`); } const { onChange, onKeyUp, onKeyDown, onFocus, onBlur, ...autoCompleteProps } = useAutoComplete(setContent, { users: { type: "all" }, }); return (

{/*

Badges

a
b
c
*/}

client.users.edit({ avatar })} remove={() => client.users.edit({ remove: ["Avatar"] })} defaultPreview={client.user!.generateAvatarURL( { max_side: 256 }, true, )} previewURL={client.user!.generateAvatarURL( { max_side: 256 }, true, )} />

{ await client.users.edit({ profile: { background }, }); refreshProfile(); }} remove={async () => { await client.users.edit({ remove: ["ProfileBackground"], }); setProfile({ ...profile, background: undefined }); }} previewURL={ profile?.background ? client.generateFileURL( profile.background, { width: 1000 }, true, ) : undefined } />

{ onChange(ev); setContent(ev.currentTarget.value); }} placeholder={translate( `app.settings.pages.profile.${ typeof profile === "undefined" ? "fetching" : "placeholder" }`, )} onKeyUp={onKeyUp} onKeyDown={onKeyDown} onFocus={onFocus} onBlur={onBlur} />
Descriptions support Markdown formatting,{" "} learn more here .

Want to change your username?{" "} switchPage("account")}> Head over to your account settings.
); });