Skip to content

Commit fd00d26

Browse files
Web/profile: Address review comments on message form
- Extract MessageUserButton mutation logic into useMessageUser hook - Inline single-use types in NewMessage - Make Overview's setIsRequesting/setIsMessaging optional and drop the TODO no-op stubs from ProfilePage Co-authored-by: Aapeli <aapeliv@users.noreply.github.com>
1 parent 63aaa42 commit fd00d26

5 files changed

Lines changed: 52 additions & 47 deletions

File tree

app/web/features/profile/actions/MessageUserButton.tsx

Lines changed: 5 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,11 @@
1-
import { useMutation } from "@tanstack/react-query";
21
import Button from "components/Button";
32
import ProfileIncompleteDialog from "components/ProfileIncompleteDialog/ProfileIncompleteDialog";
43
import useAccountInfo from "features/auth/useAccountInfo";
4+
import useMessageUser from "features/profile/hooks/useMessageUser";
55
import { useTranslation } from "i18n";
66
import { PROFILE } from "i18n/namespaces";
7-
import { useRouter } from "next/router";
87
import { User } from "proto/api_pb";
98
import { useState } from "react";
10-
import { service } from "service";
11-
12-
import { routeToGroupChat } from "../../../routes";
139

1410
export default function MessageUserButton({
1511
user,
@@ -21,25 +17,10 @@ export default function MessageUserButton({
2117
setIsMessaging: (value: boolean) => void;
2218
}) {
2319
const { t } = useTranslation(PROFILE);
24-
const router = useRouter();
25-
const { mutate, isPending } = useMutation<number | false, Error>({
26-
mutationFn: () => service.conversations.getDirectMessage(user.userId),
27-
28-
onMutate() {
29-
setMutationError("");
30-
},
31-
onError(e) {
32-
setMutationError(e.message);
33-
},
34-
onSuccess(data) {
35-
if (!data) {
36-
//no existing thread — open inline form
37-
setIsMessaging(true);
38-
} else {
39-
//has thread
40-
router.push(routeToGroupChat(data));
41-
}
42-
},
20+
const { mutate, isPending } = useMessageUser({
21+
userId: user.userId,
22+
setMutationError,
23+
setIsMessaging,
4324
});
4425

4526
const [showCantMessageDialog, setShowCantMessageDialog] =
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import { useMutation } from "@tanstack/react-query";
2+
import { useRouter } from "next/router";
3+
import { routeToGroupChat } from "routes";
4+
import { service } from "service";
5+
6+
interface UseMessageUserParams {
7+
userId: number;
8+
setMutationError: (value: string) => void;
9+
setIsMessaging: (value: boolean) => void;
10+
}
11+
12+
export default function useMessageUser({
13+
userId,
14+
setMutationError,
15+
setIsMessaging,
16+
}: UseMessageUserParams) {
17+
const router = useRouter();
18+
return useMutation<number | false, Error>({
19+
mutationFn: () => service.conversations.getDirectMessage(userId),
20+
onMutate() {
21+
setMutationError("");
22+
},
23+
onError(e) {
24+
setMutationError(e.message);
25+
},
26+
onSuccess(groupChatId) {
27+
if (!groupChatId) {
28+
// no existing thread — open inline form
29+
setIsMessaging(true);
30+
} else {
31+
// has thread
32+
router.push(routeToGroupChat(groupChatId));
33+
}
34+
},
35+
});
36+
}

app/web/features/profile/view/NewMessage.tsx

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -28,15 +28,11 @@ const StyledSendActions = styled(CardActions)(() => ({
2828
marginTop: theme.spacing(2),
2929
}));
3030

31-
interface NewMessageProps {
31+
export default function NewMessage({
32+
setIsMessaging,
33+
}: {
3234
setIsMessaging: (value: boolean) => void;
33-
}
34-
35-
interface MessageFormData {
36-
text: string;
37-
}
38-
39-
export default function NewMessage({ setIsMessaging }: NewMessageProps) {
35+
}) {
4036
const { t } = useTranslation([GLOBAL, PROFILE]);
4137
const user = useProfileUser();
4238
const router = useRouter();
@@ -46,12 +42,12 @@ export default function NewMessage({ setIsMessaging }: NewMessageProps) {
4642
register,
4743
reset,
4844
formState: { errors },
49-
} = useForm<MessageFormData>();
45+
} = useForm<{ text: string }>();
5046

5147
const { error, mutate, isPending } = useMutation<
5248
number,
5349
Error,
54-
MessageFormData
50+
{ text: string }
5551
>({
5652
mutationFn: (data) =>
5753
service.conversations.sendDirectMessage(user.userId, data.text),

app/web/features/profile/view/Overview.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -127,8 +127,8 @@ function DefaultActions({
127127
}
128128

129129
interface OverviewProps {
130-
setIsRequesting: (value: boolean) => void;
131-
setIsMessaging: (value: boolean) => void;
130+
setIsRequesting?: (value: boolean) => void;
131+
setIsMessaging?: (value: boolean) => void;
132132
tab: UserTab;
133133
}
134134

@@ -150,8 +150,8 @@ export default function Overview({
150150
<LoggedInUserActions tab={tab} />
151151
) : (
152152
<DefaultActions
153-
setIsRequesting={setIsRequesting}
154-
setIsMessaging={setIsMessaging}
153+
setIsRequesting={setIsRequesting ?? (() => {})}
154+
setIsMessaging={setIsMessaging ?? (() => {})}
155155
/>
156156
)
157157
}

app/web/features/profile/view/ProfilePage.tsx

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -45,15 +45,7 @@ export default function ProfilePage({ tab = "about" }: { tab?: UserTab }) {
4545
) : user ? (
4646
<ProfileUserProvider user={user}>
4747
<StyledWrapper>
48-
<Overview
49-
setIsRequesting={() => {
50-
/* TODO: not needed here*/
51-
}}
52-
setIsMessaging={() => {
53-
/* TODO: not needed here*/
54-
}}
55-
tab={tab}
56-
/>
48+
<Overview tab={tab} />
5749
<UserCard
5850
tab={tab}
5951
onTabChange={(newTab) => {

0 commit comments

Comments
 (0)