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.
Files changed (35) hide show
  1. package/package.json +1 -1
  2. package/src/components/index.js +4 -2
  3. package/src/components/messageAddon/InputSection/index.jsx +336 -0
  4. package/src/components/messageAddon/assets/images/avatar.jpg +0 -0
  5. package/src/components/messageAddon/assets/svg/bin.jsx +14 -0
  6. package/src/components/messageAddon/assets/svg/check_circle.jsx +25 -0
  7. package/src/components/messageAddon/assets/svg/emoji.jsx +38 -0
  8. package/src/components/messageAddon/assets/svg/gallery.jsx +31 -0
  9. package/src/components/messageAddon/assets/svg/microphone.jsx +38 -0
  10. package/src/components/messageAddon/assets/svg/more.jsx +22 -0
  11. package/src/components/messageAddon/assets/svg/noMessage.jsx +49 -0
  12. package/src/components/messageAddon/assets/svg/send.jsx +24 -0
  13. package/src/components/messageAddon/assets/svg/send_fail.jsx +15 -0
  14. package/src/components/messageAddon/assets/svg/sending_status.jsx +22 -0
  15. package/src/components/messageAddon/assets/svg/warning.jsx +14 -0
  16. package/src/components/messageAddon/hooks/messagesContext.js +19 -0
  17. package/src/components/messageAddon/hooks/useFriends.js +30 -0
  18. package/src/components/messageAddon/hooks/useMedia.js +81 -0
  19. package/src/components/messageAddon/hooks/useMessaging.js +241 -0
  20. package/src/components/messageAddon/hooks/useRooms.js +210 -0
  21. package/src/components/messageAddon/messages/chatheader/index.jsx +94 -0
  22. package/src/components/messageAddon/messages/dropdown/chat-dropdown.jsx +45 -0
  23. package/src/components/messageAddon/messages/index.jsx +17 -0
  24. package/src/components/messageAddon/messages/index.styled.js +988 -0
  25. package/src/components/messageAddon/messages/message-modals/deleteChat-modal.jsx +111 -0
  26. package/src/components/messageAddon/messages/message-modals/index.styled.js +366 -0
  27. package/src/components/messageAddon/messages/message-modals/report-modal.jsx +238 -0
  28. package/src/components/messageAddon/messages/messagebox/messageBubble.jsx +73 -0
  29. package/src/components/messageAddon/messages/messagebox/waveSurferPlayer.jsx +69 -0
  30. package/src/components/messageAddon/messages/messages.jsx +374 -0
  31. package/src/components/messageAddon/utils/helpers.js +41 -0
  32. package/src/components/textEditor/style.scss +1 -1
  33. package/src/components/textEditor/variables/_colors.scss +25 -0
  34. package/src/components/textEditor/variables/_headers.scss +7 -0
  35. 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;