Skip to content

Commit 2f1376a

Browse files
committed
refractor frontend and add pronunciation
1 parent 1ba445c commit 2f1376a

File tree

4 files changed

+79
-28
lines changed

4 files changed

+79
-28
lines changed

csm_web/frontend/src/components/UserProfile.tsx

+62-26
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,54 @@
11
import React, { useState } from "react";
22
import { useUserInfo } from "../utils/queries/base";
3-
import { UserInfo } from "../utils/types";
3+
import { RawUserInfo, UserInfo } from "../utils/types";
44
import { useUserInfoUpdateMutation } from "../utils/queries/profiles";
5+
import { DateTime } from "luxon";
56

67
import "../css/profile.scss";
78

89
export const UserProfile = (): React.ReactElement => {
910
const { data: jsonUserInfo, isSuccess: userInfoLoaded } = useUserInfo();
1011

11-
let userInfo: UserInfo | null;
12-
if (userInfoLoaded) {
13-
let priorityEnrollment = undefined;
14-
if (jsonUserInfo.priorityEnrollment) {
15-
priorityEnrollment = new Date(Date.parse(jsonUserInfo.priorityEnrollment));
16-
}
17-
const convertedUserInfo: UserInfo = {
18-
...jsonUserInfo,
19-
priorityEnrollment
20-
};
21-
userInfo = convertedUserInfo;
22-
} else {
23-
// not done loading yet
24-
userInfo = null;
25-
}
12+
// let userInfo: UserInfo;
13+
// if (userInfoLoaded) {
14+
// let priorityEnrollment = undefined;
15+
// if (jsonUserInfo.priorityEnrollment) {
16+
// priorityEnrollment = DateTime.fromISO(jsonUserInfo.priorityEnrollment);
17+
// }
18+
// const convertedUserInfo: UserInfo = {
19+
// ...jsonUserInfo,
20+
// priorityEnrollment
21+
// };
22+
// userInfo = convertedUserInfo;
23+
// }
24+
// else {
25+
// // not done loading yet
26+
// userInfo = null;
27+
// }
2628

2729
return (
2830
<React.Fragment>
29-
<div>{userInfoLoaded ? <DisplayUser userInfo={userInfo} /> : <></>}</div>
31+
<div>
32+
{userInfoLoaded ? (
33+
<DisplayUser userInfo={jsonUserInfo} priorityEnrollment={jsonUserInfo.priorityEnrollment} />
34+
) : (
35+
<></>
36+
)}
37+
</div>
3038
</React.Fragment>
3139
);
3240
};
3341

3442
interface UserInfoProps {
35-
userInfo: UserInfo | null;
43+
userInfo: RawUserInfo;
44+
priorityEnrollment?: string;
3645
}
3746

38-
const DisplayUser = ({ userInfo }: UserInfoProps) => {
47+
const DisplayUser = ({ userInfo, priorityEnrollment }: UserInfoProps) => {
3948
/**
4049
* Mutation to create a new section.
4150
*/
42-
const createSectionMutation = useUserInfoUpdateMutation(userInfo.id);
51+
const createSectionMutation = useUserInfoUpdateMutation(userInfo?.id);
4352

4453
const [editing, setEditing] = useState(false);
4554
/**
@@ -63,6 +72,17 @@ const DisplayUser = ({ userInfo }: UserInfoProps) => {
6372
* User Bio
6473
*/
6574
const [bio, setBio] = useState<string>("");
75+
/**
76+
* Pronunciation
77+
*/
78+
const [pronunciation, setPronunciation] = useState<string>("");
79+
/**
80+
* Pronunciation
81+
*/
82+
let priority: DateTime | undefined;
83+
if (priorityEnrollment) {
84+
priority = DateTime.fromISO(priorityEnrollment);
85+
}
6686

6787
const handleEditing = () => {
6888
setEditing(true);
@@ -79,13 +99,17 @@ const DisplayUser = ({ userInfo }: UserInfoProps) => {
7999
const handleSave = (event: React.MouseEvent<HTMLButtonElement>): void => {
80100
event.preventDefault();
81101
const data = {
82-
userFirstName,
83-
userLastName,
84-
userEmail,
102+
id: userInfo.id,
103+
firstName: userFirstName,
104+
lastName: userLastName,
105+
email: userEmail,
106+
isPrivate: userInfo.isPrivate,
85107
bio,
86-
userPronoun
108+
priorityEnrollment: priority,
109+
pronouns: userPronoun,
110+
pronunciation
87111
};
88-
112+
console.log(data);
89113
createSectionMutation.mutate(data, {
90114
onSuccess: () => {
91115
setEditing(false);
@@ -113,6 +137,9 @@ const DisplayUser = ({ userInfo }: UserInfoProps) => {
113137
case "bio":
114138
setBio(value);
115139
break;
140+
case "pronunciation":
141+
setPronunciation(value);
142+
break;
116143
default:
117144
console.error("Unknown input name: " + name);
118145
break;
@@ -179,7 +206,16 @@ const DisplayUser = ({ userInfo }: UserInfoProps) => {
179206
<label className="formbold-form-label"> Pronouns </label>
180207
</div>
181208
</div>
182-
209+
<div className="formbold-textarea">
210+
<textarea
211+
name="pronunciation"
212+
id="pronunciation"
213+
placeholder="How to pronounce your name"
214+
className="formbold-form-input"
215+
disabled={true}
216+
></textarea>
217+
<label className="formbold-form-label"> Pronunciation </label>
218+
</div>
183219
<div className="formbold-textarea">
184220
<textarea
185221
name="bio"

csm_web/frontend/src/components/section/ProfileModal.tsx

+10
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,16 @@ const ProfileModal = ({ id, closeModal }: ProfileModalProps): React.ReactElement
9191
</div>
9292
</div>
9393

94+
<div className="formbold-textarea">
95+
<textarea
96+
name="pronunciation"
97+
id="pronunciation"
98+
placeholder="How to pronounce your name"
99+
className="formbold-form-input"
100+
disabled={true}
101+
></textarea>
102+
<label className="formbold-form-label"> Pronunciation </label>
103+
</div>
94104
<div className="formbold-textarea">
95105
<textarea
96106
name="bio"

csm_web/frontend/src/utils/queries/profiles.tsx

+6-2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { fetchNormalized, fetchWithMethod, HTTP_METHODS } from "../api";
77
import { handleError, handlePermissionsError, handleRetry, PermissionError, ServerError } from "./helpers";
88
import { DateTime } from "luxon";
99
import { RawUserInfo } from "../types";
10+
import { isNull } from "lodash";
1011

1112
/* ===== Mutation ===== */
1213
/**
@@ -21,6 +22,7 @@ export interface UpdateUserInfo {
2122
isPrivate: boolean;
2223
bio: string;
2324
pronouns: string;
25+
pronunciation: string;
2426
}
2527

2628
/**
@@ -45,11 +47,13 @@ export const useStudentsInfo = (): UseQueryResult<RawUserInfo, Error> => {
4547
return queryResult;
4648
};
4749

48-
export const useUserInfoUpdateMutation = (userId: number): UseMutationResult<void, ServerError, UpdateUserInfo> => {
50+
export const useUserInfoUpdateMutation = (
51+
userId: number | undefined
52+
): UseMutationResult<void, ServerError, UpdateUserInfo> => {
4953
const queryClient = useQueryClient();
5054
const mutationResult = useMutation<void, Error, UpdateUserInfo>(
5155
async (body: UpdateUserInfo) => {
52-
if (isNaN(userId)) {
56+
if (isNull(userId)) {
5357
throw new PermissionError("Invalid user id");
5458
}
5559
const response = await fetchWithMethod(`/user/${userId}/profile`, HTTP_METHODS.PUT, body);

csm_web/frontend/src/utils/types.tsx

+1
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ export interface UserInfo {
3333
isPrivate: boolean;
3434
bio: string;
3535
pronouns: string;
36+
pronunciation: string;
3637
}
3738

3839
/**

0 commit comments

Comments
 (0)