All files / app/features/profile/view UserPage.tsx

93.1% Statements 27/29
50% Branches 5/10
100% Functions 3/3
93.1% Lines 27/29

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 761x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x   1x   1x   1x             36x 36x 36x   36x   36x 36x   36x 8x           36x                               4x                                  
import { CircularProgress, Collapse } from "@material-ui/core";
import Alert from "components/Alert";
import HtmlMeta from "components/HtmlMeta";
import Snackbar from "components/Snackbar";
import { ProfileUserProvider } from "features/profile/hooks/useProfileUser";
import NewHostRequest from "features/profile/view/NewHostRequest";
import Overview from "features/profile/view/Overview";
import { useProfileStyles } from "features/profile/view/ProfilePage";
import useUserByUsername from "features/userQueries/useUserByUsername";
import { useTranslation } from "i18n";
import { PROFILE } from "i18n/namespaces";
import { useRouter } from "next/router";
import { useLayoutEffect, useState } from "react";
import { routeToUser, UserTab } from "routes";
 
import UserCard from "./UserCard";
 
const REQUEST_ID = "request";
 
export default function UserPage({
  username,
  tab = "about",
}: {
  username: string;
  tab?: UserTab;
}) {
  const { t } = useTranslation(PROFILE);
  const classes = useProfileStyles();
  const router = useRouter();
 
  const { data: user, isLoading, error } = useUserByUsername(username, true);
 
  const [isRequesting, setIsRequesting] = useState(false);
  const [isSuccessRequest, setIsSuccessRequest] = useState(false);
 
  useLayoutEffect(() => {
    Iif (isRequesting) {
      const requestEl = document.getElementById(REQUEST_ID);
      requestEl?.scrollIntoView();
    }
  }, [isRequesting]);
 
  return (
    <>
      <HtmlMeta title={user?.name} />
      {isSuccessRequest && (
        <Snackbar severity="success">{t("request_form.success")}</Snackbar>
      )}
      {error && <Alert severity="error">{error}</Alert>}
      {isLoading ? (
        <CircularProgress />
      ) : user ? (
        <ProfileUserProvider user={user}>
          <div className={classes.root}>
            <Overview setIsRequesting={setIsRequesting} tab={tab} />
            <UserCard
              tab={tab}
              onTabChange={(newTab) => {
                router.push(routeToUser(user.username, newTab));
              }}
              top={
                <Collapse in={isRequesting}>
                  <NewHostRequest
                    setIsRequesting={setIsRequesting}
                    setIsRequestSuccess={setIsSuccessRequest}
                  />
                </Collapse>
              }
            />
          </div>
        </ProfileUserProvider>
      ) : null}
    </>
  );
}