This repository was archived by the owner on Apr 20, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 8
Expand file tree
/
Copy pathLeaveReferencePage.tsx
More file actions
110 lines (104 loc) · 3.32 KB
/
Copy pathLeaveReferencePage.tsx
File metadata and controls
110 lines (104 loc) · 3.32 KB
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
import Hidden from "@material-ui/core/Hidden";
import Alert from "components/Alert";
import CircularProgress from "components/CircularProgress";
import UserOverview from "components/UserOverview/UserOverview";
import { useListAvailableReferences } from "features/profile/hooks/referencesHooks";
import { ProfileUserProvider } from "features/profile/hooks/useProfileUser";
import ReferenceForm from "features/profile/view/leaveReference/ReferenceForm";
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>
))}
</>
);
}