l-min-components 1.0.294 → 1.0.300
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/components/index.js +4 -2
- package/src/components/messageAddon/InputSection/index.jsx +336 -0
- package/src/components/messageAddon/assets/images/avatar.jpg +0 -0
- package/src/components/messageAddon/assets/svg/bin.jsx +14 -0
- package/src/components/messageAddon/assets/svg/check_circle.jsx +25 -0
- package/src/components/messageAddon/assets/svg/emoji.jsx +38 -0
- package/src/components/messageAddon/assets/svg/gallery.jsx +31 -0
- package/src/components/messageAddon/assets/svg/microphone.jsx +38 -0
- package/src/components/messageAddon/assets/svg/more.jsx +22 -0
- package/src/components/messageAddon/assets/svg/noMessage.jsx +49 -0
- package/src/components/messageAddon/assets/svg/send.jsx +24 -0
- package/src/components/messageAddon/assets/svg/send_fail.jsx +15 -0
- package/src/components/messageAddon/assets/svg/sending_status.jsx +22 -0
- package/src/components/messageAddon/assets/svg/warning.jsx +14 -0
- package/src/components/messageAddon/hooks/messagesContext.js +19 -0
- package/src/components/messageAddon/hooks/useFriends.js +30 -0
- package/src/components/messageAddon/hooks/useMedia.js +81 -0
- package/src/components/messageAddon/hooks/useMessaging.js +241 -0
- package/src/components/messageAddon/hooks/useRooms.js +210 -0
- package/src/components/messageAddon/messages/chatheader/index.jsx +94 -0
- package/src/components/messageAddon/messages/dropdown/chat-dropdown.jsx +45 -0
- package/src/components/messageAddon/messages/index.jsx +17 -0
- package/src/components/messageAddon/messages/index.styled.js +988 -0
- package/src/components/messageAddon/messages/message-modals/deleteChat-modal.jsx +111 -0
- package/src/components/messageAddon/messages/message-modals/index.styled.js +366 -0
- package/src/components/messageAddon/messages/message-modals/report-modal.jsx +238 -0
- package/src/components/messageAddon/messages/messagebox/messageBubble.jsx +73 -0
- package/src/components/messageAddon/messages/messagebox/waveSurferPlayer.jsx +69 -0
- package/src/components/messageAddon/messages/messages.jsx +374 -0
- package/src/components/messageAddon/utils/helpers.js +41 -0
- package/src/components/textEditor/style.scss +1 -1
- package/src/components/textEditor/variables/_colors.scss +25 -0
- package/src/components/textEditor/variables/_headers.scss +7 -0
- package/src/components/textEditor/variables/_styles.scss +83 -0
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import useAxios from "axios-hooks";
|
|
2
|
+
|
|
3
|
+
const useFriends = () => {
|
|
4
|
+
//GET List Friends
|
|
5
|
+
|
|
6
|
+
const [{ ...listFriendsData }, listFriends] = useAxios(
|
|
7
|
+
{
|
|
8
|
+
method: "GET",
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
manual: true,
|
|
12
|
+
}
|
|
13
|
+
);
|
|
14
|
+
const handleListFriends = async () => {
|
|
15
|
+
try {
|
|
16
|
+
await listFriends({
|
|
17
|
+
url: `/notify/v1/friends/`,
|
|
18
|
+
});
|
|
19
|
+
} catch (err) {
|
|
20
|
+
console.log(err);
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
return {
|
|
25
|
+
listFriendsData,
|
|
26
|
+
handleListFriends,
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
export default useFriends;
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import useAxios from "axios-hooks";
|
|
2
|
+
|
|
3
|
+
const useMedia = () => {
|
|
4
|
+
//GET List Media
|
|
5
|
+
const [{ ...getMediaFilesData }, getMediaFiles] = useAxios(
|
|
6
|
+
{
|
|
7
|
+
method: "GET",
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
manual: true,
|
|
11
|
+
}
|
|
12
|
+
);
|
|
13
|
+
const handleGetMediaFiles = async () => {
|
|
14
|
+
try {
|
|
15
|
+
await getMediaFiles({
|
|
16
|
+
url: `/media/v1/streams/files`,
|
|
17
|
+
});
|
|
18
|
+
} catch (err) {
|
|
19
|
+
console.log(err);
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
//GET Single Media
|
|
24
|
+
const [{ ...getSingleMediaData }, getSingleMedia] = useAxios(
|
|
25
|
+
{
|
|
26
|
+
method: "GET",
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
manual: true,
|
|
30
|
+
}
|
|
31
|
+
);
|
|
32
|
+
const handleGetSingleMedia = async (id) => {
|
|
33
|
+
try {
|
|
34
|
+
await getSingleMedia({
|
|
35
|
+
url: `/media/v1/streams/files/${id}`,
|
|
36
|
+
});
|
|
37
|
+
} catch (err) {
|
|
38
|
+
console.log(err);
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
//POST Create Media
|
|
43
|
+
const [{ ...uploadMediaData }, uploadMedia] = useAxios(
|
|
44
|
+
{
|
|
45
|
+
method: "POST",
|
|
46
|
+
url: `/media/v1/streams/files/`,
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
manual: true,
|
|
50
|
+
}
|
|
51
|
+
);
|
|
52
|
+
|
|
53
|
+
const handleUploadMedia = async (files) => {
|
|
54
|
+
try {
|
|
55
|
+
if (files) {
|
|
56
|
+
console.log(files);
|
|
57
|
+
// console.log("files", files);
|
|
58
|
+
|
|
59
|
+
// const formdata = new FormData();
|
|
60
|
+
// formdata.append("upload", files.upload);
|
|
61
|
+
// return await uploadMedia({ data: formdata });
|
|
62
|
+
return await uploadMedia({ data: files });
|
|
63
|
+
} else {
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
} catch (err) {
|
|
67
|
+
console.log(err);
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
return {
|
|
72
|
+
getMediaFilesData,
|
|
73
|
+
handleGetMediaFiles,
|
|
74
|
+
getSingleMediaData,
|
|
75
|
+
handleGetSingleMedia,
|
|
76
|
+
uploadMediaData,
|
|
77
|
+
handleUploadMedia,
|
|
78
|
+
};
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
export default useMedia;
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
import { useState } from "react";
|
|
2
|
+
import useAxios from "axios-hooks";
|
|
3
|
+
import useMedia from "./useMedia";
|
|
4
|
+
|
|
5
|
+
const useMessaging = () => {
|
|
6
|
+
const { handleUploadMedia, uploadMediaData } = useMedia();
|
|
7
|
+
const [loading, setLoading] = useState();
|
|
8
|
+
|
|
9
|
+
//GET Retrieve message
|
|
10
|
+
const [{ ...retrieveMessageData }, retrieveMessage] = useAxios(
|
|
11
|
+
{
|
|
12
|
+
method: "GET",
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
manual: true,
|
|
16
|
+
}
|
|
17
|
+
);
|
|
18
|
+
const handleRetrieveMessage = async (id) => {
|
|
19
|
+
try {
|
|
20
|
+
await retrieveMessage({
|
|
21
|
+
url: `/notify/v1/chats/${id}`,
|
|
22
|
+
});
|
|
23
|
+
} catch (err) {
|
|
24
|
+
console.log(err);
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
//GET Read message
|
|
29
|
+
const [{ ...ReadMessageData }, readMessage] = useAxios(
|
|
30
|
+
{
|
|
31
|
+
method: "GET",
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
manual: true,
|
|
35
|
+
}
|
|
36
|
+
);
|
|
37
|
+
const handleReadMessage = async (id) => {
|
|
38
|
+
try {
|
|
39
|
+
await readMessage({
|
|
40
|
+
url: `/notify/v1/chats/${id}/read_message/`,
|
|
41
|
+
});
|
|
42
|
+
} catch (err) {
|
|
43
|
+
console.log(err);
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
//POST Create message
|
|
48
|
+
const [{ ...createMessageData }, createMessage] = useAxios(
|
|
49
|
+
{
|
|
50
|
+
method: "POST",
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
manual: true,
|
|
54
|
+
}
|
|
55
|
+
);
|
|
56
|
+
|
|
57
|
+
const handleCreateMessage = async (user_id, data) => {
|
|
58
|
+
await createMessage({
|
|
59
|
+
url: `/notify/v1/chats/`,
|
|
60
|
+
data: {
|
|
61
|
+
...data,
|
|
62
|
+
},
|
|
63
|
+
params: {
|
|
64
|
+
user_id,
|
|
65
|
+
// room_id,
|
|
66
|
+
},
|
|
67
|
+
});
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
//POST Create message with media
|
|
71
|
+
const [{ ...createMessageWithMediaData }, createMessageMedia] = useAxios(
|
|
72
|
+
{
|
|
73
|
+
method: "POST",
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
manual: true,
|
|
77
|
+
}
|
|
78
|
+
);
|
|
79
|
+
|
|
80
|
+
const handleCreateMessageWithMedia = async (file, user_id) => {
|
|
81
|
+
setLoading(true);
|
|
82
|
+
const newUploaded = [];
|
|
83
|
+
|
|
84
|
+
const formData = new FormData();
|
|
85
|
+
formData.append("upload", file);
|
|
86
|
+
const uploadedData = await handleUploadMedia(formData);
|
|
87
|
+
|
|
88
|
+
newUploaded.push(uploadedData?.data?.results[0]);
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
// if (uploadMediaData?.data) {
|
|
92
|
+
await createMessageMedia({
|
|
93
|
+
url: `/notify/v1/chats/`,
|
|
94
|
+
data: {
|
|
95
|
+
// ...data,
|
|
96
|
+
...(newUploaded?.length && {
|
|
97
|
+
media: newUploaded?.[0],
|
|
98
|
+
}),
|
|
99
|
+
},
|
|
100
|
+
params: {
|
|
101
|
+
user_id,
|
|
102
|
+
},
|
|
103
|
+
});
|
|
104
|
+
// }
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
//GET Room Messages
|
|
108
|
+
const [{ ...roomMessageData }, roomMessage] = useAxios(
|
|
109
|
+
{
|
|
110
|
+
method: "GET",
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
manual: true,
|
|
114
|
+
}
|
|
115
|
+
);
|
|
116
|
+
|
|
117
|
+
const handleRoomMessage = async (room_id, limit, offset) => {
|
|
118
|
+
try {
|
|
119
|
+
await roomMessage({
|
|
120
|
+
url: `/notify/v1/chats/`,
|
|
121
|
+
params: {
|
|
122
|
+
room_id,
|
|
123
|
+
limit,
|
|
124
|
+
offset,
|
|
125
|
+
},
|
|
126
|
+
});
|
|
127
|
+
} catch (err) {
|
|
128
|
+
console.log(err);
|
|
129
|
+
}
|
|
130
|
+
};
|
|
131
|
+
|
|
132
|
+
//GET Room Messages for Recipient
|
|
133
|
+
const [{ ...roomMessageRecipientData }, roomMessageRecipient] = useAxios(
|
|
134
|
+
{
|
|
135
|
+
method: "GET",
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
manual: true,
|
|
139
|
+
}
|
|
140
|
+
);
|
|
141
|
+
|
|
142
|
+
const handleRoomMessageRecipient = async (room_id, recipient_only = true) => {
|
|
143
|
+
try {
|
|
144
|
+
await roomMessageRecipient({
|
|
145
|
+
url: `/notify/v1/chats/`,
|
|
146
|
+
params: {
|
|
147
|
+
room_id,
|
|
148
|
+
recipient_only,
|
|
149
|
+
},
|
|
150
|
+
});
|
|
151
|
+
} catch (err) {
|
|
152
|
+
console.log(err);
|
|
153
|
+
}
|
|
154
|
+
};
|
|
155
|
+
|
|
156
|
+
//DELETE message
|
|
157
|
+
const [{ ...deleteMessageData }, deleteMessage] = useAxios(
|
|
158
|
+
{
|
|
159
|
+
method: "DELETE",
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
manual: true,
|
|
163
|
+
}
|
|
164
|
+
);
|
|
165
|
+
|
|
166
|
+
const handleDeleteMessage = async (id) => {
|
|
167
|
+
try {
|
|
168
|
+
await deleteMessage({
|
|
169
|
+
url: `/notify/v1/chats/${id}/`,
|
|
170
|
+
});
|
|
171
|
+
} catch (err) {
|
|
172
|
+
console.log(err);
|
|
173
|
+
}
|
|
174
|
+
};
|
|
175
|
+
|
|
176
|
+
//Clear chats
|
|
177
|
+
const [{ ...clearChatData }, clearChat] = useAxios(
|
|
178
|
+
{
|
|
179
|
+
method: "DELETE",
|
|
180
|
+
},
|
|
181
|
+
{
|
|
182
|
+
manual: true,
|
|
183
|
+
}
|
|
184
|
+
);
|
|
185
|
+
|
|
186
|
+
const handleClearChat = async (id) => {
|
|
187
|
+
try {
|
|
188
|
+
await clearChat({
|
|
189
|
+
url: `/notify/v1/rooms/${id}/destroy_chats/`,
|
|
190
|
+
});
|
|
191
|
+
} catch (err) {
|
|
192
|
+
console.log(err);
|
|
193
|
+
}
|
|
194
|
+
};
|
|
195
|
+
|
|
196
|
+
//POST report user
|
|
197
|
+
const [{ ...reportUserData }, reportUser] = useAxios(
|
|
198
|
+
{
|
|
199
|
+
method: "POST",
|
|
200
|
+
},
|
|
201
|
+
{
|
|
202
|
+
manual: true,
|
|
203
|
+
}
|
|
204
|
+
);
|
|
205
|
+
|
|
206
|
+
const handleReportUser = async (data) => {
|
|
207
|
+
try {
|
|
208
|
+
await reportUser({
|
|
209
|
+
url: `/notify/v1/chats/reports/`,
|
|
210
|
+
data: {
|
|
211
|
+
...data,
|
|
212
|
+
},
|
|
213
|
+
});
|
|
214
|
+
} catch (err) {
|
|
215
|
+
console.log(err);
|
|
216
|
+
}
|
|
217
|
+
};
|
|
218
|
+
|
|
219
|
+
return {
|
|
220
|
+
retrieveMessageData,
|
|
221
|
+
handleRetrieveMessage,
|
|
222
|
+
ReadMessageData,
|
|
223
|
+
handleReadMessage,
|
|
224
|
+
createMessageData,
|
|
225
|
+
handleCreateMessage,
|
|
226
|
+
deleteMessageData,
|
|
227
|
+
handleDeleteMessage,
|
|
228
|
+
reportUserData,
|
|
229
|
+
handleReportUser,
|
|
230
|
+
roomMessageData,
|
|
231
|
+
handleRoomMessage,
|
|
232
|
+
createMessageWithMediaData,
|
|
233
|
+
handleCreateMessageWithMedia,
|
|
234
|
+
clearChatData,
|
|
235
|
+
handleClearChat,
|
|
236
|
+
roomMessageRecipientData,
|
|
237
|
+
handleRoomMessageRecipient,
|
|
238
|
+
};
|
|
239
|
+
};
|
|
240
|
+
|
|
241
|
+
export default useMessaging;
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
import useAxios from "axios-hooks";
|
|
2
|
+
|
|
3
|
+
const useRooms = () => {
|
|
4
|
+
//GET List My Rooms
|
|
5
|
+
const [{ ...getMyRoomsData }, getMyRooms] = useAxios(
|
|
6
|
+
{
|
|
7
|
+
method: "GET",
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
manual: true,
|
|
11
|
+
}
|
|
12
|
+
);
|
|
13
|
+
const handleGetMyRooms = async () => {
|
|
14
|
+
try {
|
|
15
|
+
await getMyRooms({
|
|
16
|
+
url: `/notify/v1/rooms/`,
|
|
17
|
+
});
|
|
18
|
+
} catch (err) {
|
|
19
|
+
console.log(err);
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
//GET List My Rooms
|
|
24
|
+
const [{ ...getPinnedRoomsData }, getPinnedRooms] = useAxios(
|
|
25
|
+
{
|
|
26
|
+
method: "GET",
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
manual: true,
|
|
30
|
+
}
|
|
31
|
+
);
|
|
32
|
+
const handleGetPinnedRooms = async () => {
|
|
33
|
+
try {
|
|
34
|
+
await getPinnedRooms({
|
|
35
|
+
url: `/notify/v1/rooms/`,
|
|
36
|
+
});
|
|
37
|
+
} catch (err) {
|
|
38
|
+
console.log(err);
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
//GET List My Rooms
|
|
43
|
+
const [{ ...getAllRoomsData }, getAllRooms] = useAxios(
|
|
44
|
+
{
|
|
45
|
+
method: "GET",
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
manual: true,
|
|
49
|
+
}
|
|
50
|
+
);
|
|
51
|
+
const handleGetAllRooms = async () => {
|
|
52
|
+
try {
|
|
53
|
+
await getAllRooms({
|
|
54
|
+
url: `/notify/v1/rooms/`,
|
|
55
|
+
});
|
|
56
|
+
} catch (err) {
|
|
57
|
+
console.log(err);
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
//GET Change Pin Status
|
|
62
|
+
const [{ ...changePinStatusData }, changePinStatus] = useAxios(
|
|
63
|
+
{
|
|
64
|
+
method: "PATCH",
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
manual: true,
|
|
68
|
+
}
|
|
69
|
+
);
|
|
70
|
+
const handleChangePinStatus = async (room_id, data) => {
|
|
71
|
+
try {
|
|
72
|
+
await changePinStatus({
|
|
73
|
+
url: `/notify/v1/rooms/${room_id}/change_pin_status/`,
|
|
74
|
+
data: {
|
|
75
|
+
...data,
|
|
76
|
+
},
|
|
77
|
+
});
|
|
78
|
+
} catch (err) {
|
|
79
|
+
console.log(err);
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
//GET Retrieve Room
|
|
84
|
+
const [{ ...RetrieveRoomData }, retrieveRoom] = useAxios(
|
|
85
|
+
{
|
|
86
|
+
method: "GET",
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
manual: true,
|
|
90
|
+
}
|
|
91
|
+
);
|
|
92
|
+
const handleRetrieveRoom = async (id) => {
|
|
93
|
+
try {
|
|
94
|
+
await retrieveRoom({
|
|
95
|
+
url: `/notify/v1/rooms/${id}/`,
|
|
96
|
+
});
|
|
97
|
+
} catch (err) {
|
|
98
|
+
console.log(err);
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
//POST Create Public Room
|
|
103
|
+
const [{ ...createPublicRoomData }, createPublicRoom] = useAxios(
|
|
104
|
+
{
|
|
105
|
+
method: "POST",
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
manual: true,
|
|
109
|
+
}
|
|
110
|
+
);
|
|
111
|
+
|
|
112
|
+
const handleCreatePublicRoom = async (data) => {
|
|
113
|
+
try {
|
|
114
|
+
await createPublicRoom({
|
|
115
|
+
url: `/notify/v1/rooms/create_public/`,
|
|
116
|
+
data: {
|
|
117
|
+
...data,
|
|
118
|
+
},
|
|
119
|
+
});
|
|
120
|
+
} catch (err) {
|
|
121
|
+
console.log(err);
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
//POST Create Private Room
|
|
126
|
+
const [{ ...createPrivateRoomData }, createPrivateRoom] = useAxios(
|
|
127
|
+
{
|
|
128
|
+
method: "POST",
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
manual: true,
|
|
132
|
+
}
|
|
133
|
+
);
|
|
134
|
+
|
|
135
|
+
const handleCreatePrivateRoom = async (data) => {
|
|
136
|
+
try {
|
|
137
|
+
await createPrivateRoom({
|
|
138
|
+
url: `/notify/v1/rooms/create_private/`,
|
|
139
|
+
data: {
|
|
140
|
+
...data,
|
|
141
|
+
},
|
|
142
|
+
});
|
|
143
|
+
} catch (err) {
|
|
144
|
+
console.log(err);
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
|
|
148
|
+
//PUT Join Group
|
|
149
|
+
const [{ ...joinGroupData }, joinGroup] = useAxios(
|
|
150
|
+
{
|
|
151
|
+
method: "PUT",
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
manual: true,
|
|
155
|
+
}
|
|
156
|
+
);
|
|
157
|
+
|
|
158
|
+
const handleJoinGroup = async () => {
|
|
159
|
+
try {
|
|
160
|
+
await joinGroup({
|
|
161
|
+
url: `/notify/v1/rooms/create_public/`,
|
|
162
|
+
});
|
|
163
|
+
} catch (err) {
|
|
164
|
+
console.log(err);
|
|
165
|
+
}
|
|
166
|
+
};
|
|
167
|
+
|
|
168
|
+
//PUT Leave Group
|
|
169
|
+
const [{ ...leaveGroupData }, leaveGroup] = useAxios(
|
|
170
|
+
{
|
|
171
|
+
method: "PUT",
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
manual: true,
|
|
175
|
+
}
|
|
176
|
+
);
|
|
177
|
+
|
|
178
|
+
const handleLeaveGroup = async (id) => {
|
|
179
|
+
try {
|
|
180
|
+
await leaveGroup({
|
|
181
|
+
url: `/notify/v1/rooms/${id}/leave_group/`,
|
|
182
|
+
});
|
|
183
|
+
} catch (err) {
|
|
184
|
+
console.log(err);
|
|
185
|
+
}
|
|
186
|
+
};
|
|
187
|
+
|
|
188
|
+
return {
|
|
189
|
+
getMyRoomsData,
|
|
190
|
+
handleGetMyRooms,
|
|
191
|
+
getPinnedRoomsData,
|
|
192
|
+
handleGetPinnedRooms,
|
|
193
|
+
RetrieveRoomData,
|
|
194
|
+
handleRetrieveRoom,
|
|
195
|
+
createPublicRoomData,
|
|
196
|
+
handleCreatePublicRoom,
|
|
197
|
+
createPrivateRoomData,
|
|
198
|
+
handleCreatePrivateRoom,
|
|
199
|
+
joinGroupData,
|
|
200
|
+
handleJoinGroup,
|
|
201
|
+
leaveGroupData,
|
|
202
|
+
handleLeaveGroup,
|
|
203
|
+
changePinStatusData,
|
|
204
|
+
handleChangePinStatus,
|
|
205
|
+
getAllRoomsData,
|
|
206
|
+
handleGetAllRooms,
|
|
207
|
+
};
|
|
208
|
+
};
|
|
209
|
+
|
|
210
|
+
export default useRooms;
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { useState, useRef, useEffect } from "react";
|
|
2
|
+
import { MoreIcon } from "../../assets/svg/more";
|
|
3
|
+
import useRooms from "../../hooks/useRooms";
|
|
4
|
+
import Avatar from "../../assets/images/avatar.jpg";
|
|
5
|
+
import { HiUser, HiOfficeBuilding } from "react-icons/hi";
|
|
6
|
+
import { FiMoreVertical } from "react-icons/fi";
|
|
7
|
+
|
|
8
|
+
/** The top green header of an open chat
|
|
9
|
+
*
|
|
10
|
+
*/
|
|
11
|
+
const ChatHeader = ({
|
|
12
|
+
chatOptions,
|
|
13
|
+
setChatOptions,
|
|
14
|
+
openModal,
|
|
15
|
+
chatRecipient,
|
|
16
|
+
roomID,
|
|
17
|
+
handleChangePinStatus,
|
|
18
|
+
deleteChatModal,
|
|
19
|
+
}) => {
|
|
20
|
+
// handle click outside dropdown container
|
|
21
|
+
const dropdownContainer = useRef(null);
|
|
22
|
+
const handleClickOutside = (event) => {
|
|
23
|
+
if (
|
|
24
|
+
dropdownContainer.current &&
|
|
25
|
+
!dropdownContainer.current.contains(event.target)
|
|
26
|
+
) {
|
|
27
|
+
setChatOptions(false);
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
useEffect(() => {
|
|
32
|
+
document.addEventListener("mousedown", handleClickOutside);
|
|
33
|
+
return () => {
|
|
34
|
+
document.removeEventListener("mousedown", handleClickOutside);
|
|
35
|
+
};
|
|
36
|
+
}, []);
|
|
37
|
+
|
|
38
|
+
// handle click outside dropdown container ends here
|
|
39
|
+
|
|
40
|
+
return (
|
|
41
|
+
<>
|
|
42
|
+
<div className="friend-header-section">
|
|
43
|
+
<div className="single-friend">
|
|
44
|
+
<div className="avatar-profile">
|
|
45
|
+
<img
|
|
46
|
+
src={
|
|
47
|
+
!chatRecipient?.profile_picture?.length
|
|
48
|
+
? Avatar
|
|
49
|
+
: chatRecipient?.profile_picture
|
|
50
|
+
}
|
|
51
|
+
alt=""
|
|
52
|
+
/>
|
|
53
|
+
{chatRecipient?.is_online && <span className="online-dot"></span>}
|
|
54
|
+
</div>
|
|
55
|
+
<div className="user-details">
|
|
56
|
+
<h5>
|
|
57
|
+
{chatRecipient?.first_name} {chatRecipient?.last_name}
|
|
58
|
+
</h5>
|
|
59
|
+
<div className="friend-tag">
|
|
60
|
+
<HiUser /> Friend
|
|
61
|
+
</div>
|
|
62
|
+
{/* <div className="instructor-tag">
|
|
63
|
+
<HiUser /> Instructor
|
|
64
|
+
</div> */}
|
|
65
|
+
{/*
|
|
66
|
+
<div className="enterprise-tag">
|
|
67
|
+
<HiOfficeBuilding /> Enterprise
|
|
68
|
+
</div> */}
|
|
69
|
+
</div>
|
|
70
|
+
</div>
|
|
71
|
+
|
|
72
|
+
<span onClick={() => setChatOptions(!chatOptions)}>
|
|
73
|
+
<FiMoreVertical style={{ color: "#636666" }} />
|
|
74
|
+
</span>
|
|
75
|
+
|
|
76
|
+
{chatOptions && (
|
|
77
|
+
<div className="more-options" ref={dropdownContainer}>
|
|
78
|
+
<ul>
|
|
79
|
+
<li
|
|
80
|
+
onClick={() => handleChangePinStatus(roomID, { pinned: false })}
|
|
81
|
+
>
|
|
82
|
+
Pin chat
|
|
83
|
+
</li>
|
|
84
|
+
<li onClick={openModal}> Report User</li>
|
|
85
|
+
<li onClick={deleteChatModal}> Delete chat</li>
|
|
86
|
+
</ul>
|
|
87
|
+
</div>
|
|
88
|
+
)}
|
|
89
|
+
</div>
|
|
90
|
+
</>
|
|
91
|
+
);
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
export default ChatHeader;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { useState, useRef, useEffect } from "react";
|
|
2
|
+
import { FaChevronDown } from "react-icons/fa";
|
|
3
|
+
import { Dropdown } from "../index.styled";
|
|
4
|
+
|
|
5
|
+
const ChatDropdown = ({
|
|
6
|
+
text,
|
|
7
|
+
pinChat,
|
|
8
|
+
openModal,
|
|
9
|
+
deleteChatModal,
|
|
10
|
+
ref,
|
|
11
|
+
setIsBoxOneOpen,
|
|
12
|
+
setIsBoxTwoOpen,
|
|
13
|
+
}) => {
|
|
14
|
+
const dropdownContainer = useRef(null);
|
|
15
|
+
const handleClickOutside = (event) => {
|
|
16
|
+
if (
|
|
17
|
+
dropdownContainer.current &&
|
|
18
|
+
!dropdownContainer.current.contains(event.target)
|
|
19
|
+
) {
|
|
20
|
+
setIsBoxOneOpen(false);
|
|
21
|
+
setIsBoxTwoOpen(false);
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
useEffect(() => {
|
|
26
|
+
document.addEventListener("mousedown", handleClickOutside);
|
|
27
|
+
return () => {
|
|
28
|
+
document.removeEventListener("mousedown", handleClickOutside);
|
|
29
|
+
};
|
|
30
|
+
}, []);
|
|
31
|
+
|
|
32
|
+
return (
|
|
33
|
+
<Dropdown ref={dropdownContainer}>
|
|
34
|
+
<div className="more-options">
|
|
35
|
+
<ul>
|
|
36
|
+
<li onClick={pinChat}> {text}</li>
|
|
37
|
+
<li onClick={openModal}> Report user</li>
|
|
38
|
+
<li onClick={deleteChatModal}> Delete chat</li>
|
|
39
|
+
</ul>
|
|
40
|
+
</div>
|
|
41
|
+
</Dropdown>
|
|
42
|
+
);
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
export default ChatDropdown;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import React, { createContext } from "react";
|
|
2
|
+
|
|
3
|
+
import MessagesContext, {
|
|
4
|
+
useMessagesContext,
|
|
5
|
+
} from "../../../hooks/messagesContext";
|
|
6
|
+
import Messages from "./messages";
|
|
7
|
+
|
|
8
|
+
const MessagesAddon = () => {
|
|
9
|
+
const messagesContextData = useMessagesContext();
|
|
10
|
+
|
|
11
|
+
return (
|
|
12
|
+
<MessagesContext.Provider value={messagesContextData}>
|
|
13
|
+
<Messages />
|
|
14
|
+
</MessagesContext.Provider>
|
|
15
|
+
);
|
|
16
|
+
};
|
|
17
|
+
export default MessagesAddon;
|