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 { Button, LineDivider, Tip } from "@revoltchat/ui"; import TextAreaAutoSize from "../../../lib/TextAreaAutoSize"; import { useTranslation } from "../../../lib/i18n"; import AutoComplete, { useAutoComplete, } from "../../../components/common/AutoComplete"; import { useSession } from "../../../controllers/client/ClientController"; import { FileUploader } from "../../../controllers/client/jsx/legacy/FileUploads"; import { UserProfile } from "../../../controllers/modals/components/legacy/UserProfile"; export const Profile = observer(() => { const translate = useTranslation(); const session = useSession()!; const client = session.client!; 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 && session.state === "Online") { refreshProfile(); } }, [profile, session.state, 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.
); });