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 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 16x 1x 48x 48x 48x 48x 48x 6x 42x 14x | import Hidden from "@material-ui/core/Hidden";
import Alert from "components/Alert";
import CircularProgress from "components/CircularProgress";
import { useListAvailableReferences } from "features/profile/hooks/referencesHooks";
import { ProfileUserProvider } from "features/profile/hooks/useProfileUser";
import ReferenceForm from "features/profile/view/leaveReference/ReferenceForm";
import UserOverview from "features/profile/view/UserOverview";
import { useUser } from "features/userQueries/useUsers";
import { useTranslation } from "i18n";
import { GLOBAL, PROFILE } from "i18n/namespaces";
import { User } from "proto/api_pb";
import { ReferenceType } from "proto/references_pb";
import React from "react";
import { ReferenceStep, referenceTypeRoute } from "routes";
import { ReferenceTypeStrings } from "service/references";
import makeStyles from "utils/makeStyles";
const useStyles = makeStyles((theme) => ({
form: {
[theme.breakpoints.down("sm")]: {
margin: 0,
width: "100%",
},
flexGrow: 1,
margin: theme.spacing(2),
padding: theme.spacing(2),
},
root: {
[theme.breakpoints.up("md")]: {
display: "flex",
justifyContent: "space-around",
},
},
}));
export default function LeaveReferencePage({
referenceType,
userId,
hostRequestId,
step = "appropriate",
}: {
referenceType: string;
userId: number;
hostRequestId?: number;
step?: ReferenceStep;
}) {
const { t } = useTranslation([GLOBAL, PROFILE]);
const classes = useStyles();
const {
data: user,
isLoading: isUserLoading,
error: userError,
} = useUser(userId);
const {
data: availableReferences,
isLoading: isAvailableReferencesLoading,
error: availableReferencesError,
} = useListAvailableReferences(userId);
if (!(referenceType in ReferenceTypeStrings)) {
return (
<Alert severity="error">
{t("profile:leave_reference.invalid_reference_type")}
</Alert>
);
}
return (
<>
{(userError || availableReferencesError) && (
<Alert severity="error">
{userError || availableReferencesError?.message || ""}
</Alert>
)}
{(isUserLoading || isAvailableReferencesLoading) && <CircularProgress />}
{availableReferences &&
user &&
((referenceType ===
referenceTypeRoute[ReferenceType.REFERENCE_TYPE_FRIEND] &&
availableReferences.canWriteFriendReference &&
user.friends === User.FriendshipStatus.FRIENDS) ||
(hostRequestId &&
availableReferences.availableWriteReferencesList.find(
({ hostRequestId: availableId }) => availableId === hostRequestId
)) ? (
<div className={classes.root}>
<ProfileUserProvider user={user}>
<Hidden smDown>
<UserOverview showHostAndMeetAvailability={false} />
</Hidden>
<div className={classes.form}>
<ReferenceForm
hostRequestId={hostRequestId}
referenceType={referenceType}
userId={userId}
step={step}
/>
</div>
</ProfileUserProvider>
</div>
) : (
<Alert severity="error">
{t("profile:leave_reference.reference_type_not_available")}
</Alert>
))}
</>
);
}
|