Skip to content

Commit baef233

Browse files
authored
Merge pull request #8452 from Couchers-org/web/feature/profile-message-form
Web/profile: One-shot message form on user profile
2 parents d383262 + 513adbe commit baef233

23 files changed

Lines changed: 260 additions & 78 deletions

app/web/features/messages/groupchats/CreateGroupChat.tsx

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import {
33
ListItemButton,
44
ListItemText,
55
styled,
6-
Typography,
76
} from "@mui/material";
87
import { useMutation, useQueryClient } from "@tanstack/react-query";
98
import Alert from "components/Alert";
@@ -22,7 +21,7 @@ import useFriendList from "features/connections/friends/useFriendList";
2221
import { groupChatsListKey } from "features/queryKeys";
2322
import useUserByUsername from "features/userQueries/useUserByUsername";
2423
import { RpcError } from "grpc-web";
25-
import { Trans, useTranslation } from "i18n";
24+
import { useTranslation } from "i18n";
2625
import { MESSAGES } from "i18n/namespaces";
2726
import { useRouter } from "next/router";
2827
import { LiteUser, User } from "proto/api_pb";
@@ -249,17 +248,6 @@ export default function CreateGroupChat({ className }: { className?: string }) {
249248
</Button>
250249
)}
251250
</DialogActions>
252-
{createMessageToUsername && (
253-
<Typography
254-
variant="body2"
255-
sx={{ px: 3, pb: 2, textAlign: "center" }}
256-
>
257-
<Trans
258-
i18nKey="messages:create_chat.hosting_request_hint"
259-
components={{ back: <strong />, request: <strong /> }}
260-
/>
261-
</Typography>
262-
)}
263251
</form>
264252
</Dialog>
265253
</>

app/web/features/messages/locales/ca.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@
88
"user_load_error_message": "(Error en carregar l'usuari)",
99
"friends_input_label": "Amics",
1010
"create_button": "Crea el xat",
11-
"back_button": "Enrere",
12-
"hosting_request_hint": "Envies una sol·licitud d'allotjament? Torna <back>Enrere</back> i fes servir el botó <request>Sol·licita</request>."
11+
"back_button": "Enrere"
1312
},
1413
"chat_input": {
1514
"label": "Missatge"

app/web/features/messages/locales/de.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,7 @@
5757
"friends_input_label": "Freunde",
5858
"title_label": "Titel",
5959
"create_button": "Chat erstellen",
60-
"back_button": "Zurück",
61-
"hosting_request_hint": "Möchtest du eine Host-Anfrage senden? Gehe <back>Zurück</back> und benutze stattdessen den <request>Anfragen</request>-Button."
60+
"back_button": "Zurück"
6261
},
6362
"admins_dialog": {
6463
"step_down_confirmation_dialog": {

app/web/features/messages/locales/en.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,8 +83,7 @@
8383
"friends_input_label": "Friends",
8484
"title_label": "Title",
8585
"create_button": "Create chat",
86-
"back_button": "Back",
87-
"hosting_request_hint": "Sending a hosting request? Go <back>Back</back> and use the <request>Request</request> button instead."
86+
"back_button": "Back"
8887
},
8988
"chat_input": {
9089
"label": "Message"

app/web/features/messages/locales/es.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,7 @@
5252
"user_load_error_message": "(Error de carga de usuario)",
5353
"title_label": "Título",
5454
"create_button": "Crear chat",
55-
"back_button": "Atrás",
56-
"hosting_request_hint": "¿Enviando una solicitud de alojamiento? Vuelve <back>Atrás</back> y usa el botón <request>Solicitar</request> en su lugar."
55+
"back_button": "Atrás"
5756
},
5857
"chat_input": {
5958
"label": "Mensaje"

app/web/features/messages/locales/nl.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,7 @@
7272
"friends_input_label": "Vrienden",
7373
"title_label": "Titel",
7474
"create_button": "Chat aanmaken",
75-
"back_button": "Terug",
76-
"hosting_request_hint": "Een hosting-verzoek doen? Ga <back>terug</back> en gebruik in plaats daarvan de <request>Verzoek</request> knop."
75+
"back_button": "Terug"
7776
},
7877
"chat_input": {
7978
"label": "Bericht"

app/web/features/messages/locales/pt_BR.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,8 +96,7 @@
9696
"user_load_error_message": "(Erro de carregamento de usuário)",
9797
"friends_input_label": "Amigos",
9898
"create_button": "Criar conversa",
99-
"back_button": "Voltar",
100-
"hosting_request_hint": "Enviando uma solicitação de hospedagem? <back>Volte</back> e use o botão <request>Solicitar</request> em vez disso."
99+
"back_button": "Voltar"
101100
},
102101
"group_chat_settings_dialog": {
103102
"title": "Configurações de conversa em grupo",

app/web/features/messages/locales/ru.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,8 +123,7 @@
123123
"friends_input_label": "Друзья",
124124
"title_label": "Заголовок",
125125
"create_button": "Создать чат",
126-
"back_button": "Назад",
127-
"hosting_request_hint": "Отправляете запрос на хостинг? Вернитесь <back>Назад</back> и используйте кнопку <request>Запрос</request>."
126+
"back_button": "Назад"
128127
},
129128
"leave_chat_dialog": {
130129
"message": "Вы уверены, что хотите покинуть этот чат?",

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

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import userEvent from "@testing-library/user-event";
33
import MessageUserButton from "features/profile/actions/MessageUserButton";
44
import mockRouter from "next-router-mock";
55
import React from "react";
6-
import { routeToCreateMessage, routeToGroupChat } from "routes";
6+
import { routeToGroupChat } from "routes";
77
import { service } from "service";
88
import users from "test/fixtures/users.json";
99
import wrapper from "test/hookWrapper";
@@ -13,6 +13,7 @@ import { MockedService } from "test/utils";
1313
const { t } = i18n;
1414

1515
const setErrorMock = jest.fn();
16+
const setIsMessagingMock = jest.fn();
1617
const getDirectMessageMock = service.conversations
1718
.getDirectMessage as MockedService<
1819
typeof service.conversations.getDirectMessage
@@ -47,14 +48,19 @@ const incompleteAccountInfo = { ...accountInfo, profileComplete: false };
4748
describe("MessageUserButton", () => {
4849
beforeEach(() => {
4950
setErrorMock.mockClear();
51+
setIsMessagingMock.mockClear();
5052
});
5153

5254
it("redirects to thread if dm exists", async () => {
5355
getAccountInfoMock.mockResolvedValue(accountInfo);
5456
getDirectMessageMock.mockResolvedValueOnce(99);
5557
const mockUser = users[0];
5658
render(
57-
<MessageUserButton user={mockUser} setMutationError={setErrorMock} />,
59+
<MessageUserButton
60+
user={mockUser}
61+
setMutationError={setErrorMock}
62+
setIsMessaging={setIsMessagingMock}
63+
/>,
5864
{
5965
wrapper,
6066
},
@@ -73,12 +79,16 @@ describe("MessageUserButton", () => {
7379
await waitFor(() => expect(mockRouter.pathname).toBe(routeToGroupChat(99)));
7480
});
7581

76-
it("redirects to chat tab with state if dm doesn't exist", async () => {
82+
it("opens the inline message form if dm doesn't exist", async () => {
7783
getAccountInfoMock.mockResolvedValue(accountInfo);
7884
getDirectMessageMock.mockResolvedValueOnce(false);
7985
const mockUser = users[0];
8086
render(
81-
<MessageUserButton user={mockUser} setMutationError={setErrorMock} />,
87+
<MessageUserButton
88+
user={mockUser}
89+
setMutationError={setErrorMock}
90+
setIsMessaging={setIsMessagingMock}
91+
/>,
8292
{
8393
wrapper,
8494
},
@@ -94,17 +104,19 @@ describe("MessageUserButton", () => {
94104

95105
await user.click(button);
96106

97-
await waitFor(() =>
98-
expect(mockRouter.asPath).toBe(routeToCreateMessage(mockUser.username)),
99-
);
107+
await waitFor(() => expect(setIsMessagingMock).toHaveBeenCalledWith(true));
100108
});
101109

102110
it("pops up incomplete profile note if profile is incomplete", async () => {
103111
getAccountInfoMock.mockResolvedValue(incompleteAccountInfo);
104112
getDirectMessageMock.mockResolvedValueOnce(false);
105113
const mockUser = users[0];
106114
render(
107-
<MessageUserButton user={mockUser} setMutationError={setErrorMock} />,
115+
<MessageUserButton
116+
user={mockUser}
117+
setMutationError={setErrorMock}
118+
setIsMessaging={setIsMessagingMock}
119+
/>,
108120
{
109121
wrapper,
110122
},

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

Lines changed: 7 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,26 @@
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 { routeToCreateMessage, routeToGroupChat } from "../../../routes";
139

1410
export default function MessageUserButton({
1511
user,
1612
setMutationError,
13+
setIsMessaging,
1714
}: {
1815
user: User.AsObject;
1916
setMutationError: (value: string) => void;
17+
setIsMessaging: (value: boolean) => void;
2018
}) {
2119
const { t } = useTranslation(PROFILE);
22-
const router = useRouter();
23-
const { mutate, isPending } = useMutation<number | false, Error>({
24-
mutationFn: () => service.conversations.getDirectMessage(user.userId),
25-
26-
onMutate() {
27-
setMutationError("");
28-
},
29-
onError(e) {
30-
setMutationError(e.message);
31-
},
32-
onSuccess(data) {
33-
if (!data) {
34-
//no existing thread
35-
router.push(routeToCreateMessage(user.username));
36-
} else {
37-
//has thread
38-
router.push(routeToGroupChat(data));
39-
}
40-
},
20+
const { mutate, isPending } = useMessageUser({
21+
userId: user.userId,
22+
setMutationError,
23+
setIsMessaging,
4124
});
4225

4326
const [showCantMessageDialog, setShowCantMessageDialog] =

0 commit comments

Comments
 (0)