import { APIFetchV1 } from "util/api";
import { FormatDate } from "util/time";
import Navbar from "components/nav/Navbar";
import NavItem from "components/nav/NavItem";
import Divider from "components/util/Divider";
import ExternalLink from "components/util/ExternalLink";
import Icon from "components/util/Icon";
import Muted from "components/util/Muted";
import { UserContext } from "context/UserContext";
import { ClientConfig } from "lib/config";
import React, { useContext, useState } from "react";
import { Button, Form, Modal } from "react-bootstrap";
import { PublicUserDocument } from "tachi-common";
import { SetState } from "types/react";
import ProfileBadges from "./ProfileBadges";
import ProfilePicture from "./ProfilePicture";
export function UserHeaderBody({ reqUser }: { reqUser: PublicUserDocument }) {
function ConditionalSocialMediaRender({
mode,
href,
}: {
mode: "discord" | "twitter" | "github" | "steam" | "youtube" | "twitch";
href?: string;
}) {
if (!reqUser.socialMedia[mode]) {
return null;
}
return (
{" "}
{reqUser.socialMedia[mode]}
);
}
return (
<>
-
UserID: {reqUser.id}
-
Joined: {FormatDate(reqUser.joinDate)}
>
);
}
export function UserBottomNav({
baseUrl,
reqUser,
}: {
baseUrl: string;
reqUser: PublicUserDocument;
}) {
const { user } = useContext(UserContext);
const isRequestedUser = !!(user && user.id === reqUser.id);
const navItems = [
Overview
,
Games
,
];
if (isRequestedUser) {
navItems.push(
Profile Settings
);
navItems.push(
Service Integrations
);
navItems.push(
Imports
);
// If mandates login, assume that we also use invite codes.
// I'm sure we could set up an elaborate way of doing this by
// querying the server, but I just don't care.
if (ClientConfig.MANDATE_LOGIN) {
navItems.push(
Invites
);
}
}
return (
{navItems}
);
}
function StatusComponent({ reqUser }: { reqUser: PublicUserDocument }) {
const { user } = useContext(UserContext);
const isRequestedUser = user?.id === reqUser.id;
const [modalShow, setModalShow] = useState(false);
return (
{reqUser.status ? (
{reqUser.status}
) : (
{isRequestedUser ? "You have" : `${reqUser.username} has`} no status...
)}
{/*
Last Seen: {MillisToSince(reqUser.lastSeen)}
*/}
);
}
function ChangeStatusModal({
modalShow,
setModalShow,
reqUser,
}: {
modalShow: boolean;
setModalShow: SetState;
reqUser: PublicUserDocument;
}) {
const [status, setStatus] = useState(reqUser.status);
const [innerStatus, setInnerStatus] = useState(reqUser.status ?? "");
return (
setModalShow(false)}>
Change Status
);
}