@ethora/chat-component-rn 26.4.1

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 (273) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +148 -0
  3. package/empty-shim.js +15 -0
  4. package/index.js +13 -0
  5. package/metro.js +72 -0
  6. package/package.json +99 -0
  7. package/src/api.config.ts +34 -0
  8. package/src/assets/BG.png +0 -0
  9. package/src/assets/BG.tsx +56 -0
  10. package/src/assets/File.svg +4 -0
  11. package/src/assets/ForzaCare.png +0 -0
  12. package/src/assets/ForzaCare.tsx +27 -0
  13. package/src/assets/icons.tsx +685 -0
  14. package/src/assets/images.tsx +41 -0
  15. package/src/assets/test.xml +243 -0
  16. package/src/components/AuthForms/Login.tsx +295 -0
  17. package/src/components/AuthForms/LoginAnonym.tsx +68 -0
  18. package/src/components/AuthForms/Register.tsx +8 -0
  19. package/src/components/ContextMenu/ContextMenuComponents.tsx +87 -0
  20. package/src/components/DropdownMenu/DropdownMenu.tsx +244 -0
  21. package/src/components/ExampleComponents/CustomMessage.tsx +92 -0
  22. package/src/components/ExampleComponents/CustomTypingIndicatorExamples.tsx +239 -0
  23. package/src/components/Header/HeaderRoomList.tsx +104 -0
  24. package/src/components/InputComponents/AudioInput.tsx +24 -0
  25. package/src/components/InputComponents/AudioRecorder.tsx +100 -0
  26. package/src/components/InputComponents/MediaInput.tsx +114 -0
  27. package/src/components/InputComponents/RecordingIndicator.tsx +77 -0
  28. package/src/components/InputComponents/Search.tsx +135 -0
  29. package/src/components/InputComponents/TextInput.tsx +66 -0
  30. package/src/components/MainComponents/ChatHeader.tsx +163 -0
  31. package/src/components/MainComponents/ChatRoom.tsx +392 -0
  32. package/src/components/MainComponents/ChatWrapper.tsx +318 -0
  33. package/src/components/MainComponents/ChooseChatMessage.tsx +44 -0
  34. package/src/components/MainComponents/ConnectionBanner.tsx +33 -0
  35. package/src/components/MainComponents/EditWrapper.tsx +72 -0
  36. package/src/components/MainComponents/LoginWrapper.tsx +134 -0
  37. package/src/components/MainComponents/MediaMessage.tsx +55 -0
  38. package/src/components/MainComponents/MessageContainer.tsx +122 -0
  39. package/src/components/MainComponents/MessageList.tsx +429 -0
  40. package/src/components/MainComponents/NoMessagesPlaceholder.tsx +49 -0
  41. package/src/components/MainComponents/ProfileImagePlaceholder.tsx +143 -0
  42. package/src/components/MainComponents/RNStyled.tsx +34 -0
  43. package/src/components/MainComponents/ReduxWrapper.tsx +40 -0
  44. package/src/components/MainComponents/RoomList.tsx +246 -0
  45. package/src/components/MainComponents/Select.tsx +165 -0
  46. package/src/components/MainComponents/Switch.tsx +73 -0
  47. package/src/components/MainComponents/SystemMessage.tsx +42 -0
  48. package/src/components/Menu/HeaderRoomListMenu.tsx +169 -0
  49. package/src/components/MenuRoom/MenuRoom.tsx +46 -0
  50. package/src/components/MessageBubble/Avatar.tsx +84 -0
  51. package/src/components/MessageBubble/BottomReplyContainer.tsx +117 -0
  52. package/src/components/MessageBubble/CustomDivider.tsx +10 -0
  53. package/src/components/MessageBubble/DeletedMessage.tsx +36 -0
  54. package/src/components/MessageBubble/Message.tsx +400 -0
  55. package/src/components/MessageBubble/MessageInteractions.tsx +247 -0
  56. package/src/components/MessageBubble/MessageReaction.tsx +149 -0
  57. package/src/components/MessageBubble/MessageReply.tsx +50 -0
  58. package/src/components/MessageBubble/MessageTranslations.tsx +30 -0
  59. package/src/components/Modals/AddMembersModal/AddMembersModal.tsx +142 -0
  60. package/src/components/Modals/ChatProfileModal/ChatProfileModal.tsx +471 -0
  61. package/src/components/Modals/ChatProfileModal/DeleteChatModal.tsx +91 -0
  62. package/src/components/Modals/FilePreviewModal/FilePreviewModal.tsx +298 -0
  63. package/src/components/Modals/Modal/Modal.tsx +52 -0
  64. package/src/components/Modals/ModalHeaderComponent.tsx +41 -0
  65. package/src/components/Modals/ModalSelectMedia/ModalSelectMedia.tsx +285 -0
  66. package/src/components/Modals/ModalWrapper/ModalWrapper.tsx +103 -0
  67. package/src/components/Modals/NewChatModal/ModalContent.tsx +151 -0
  68. package/src/components/Modals/NewChatModal/NewChatModal.tsx +391 -0
  69. package/src/components/Modals/NewChatModal/UpdNewChatModal.tsx +136 -0
  70. package/src/components/Modals/SelectUsersModal/SelectUsersModal.tsx +134 -0
  71. package/src/components/Modals/SettingsModals/BlockedUsers/BlockedUsersModal.tsx +63 -0
  72. package/src/components/Modals/SettingsModals/DocumentShares/DocumentSharesModal.tsx +115 -0
  73. package/src/components/Modals/SettingsModals/ManageDataModal/ManageDataModal.tsx +121 -0
  74. package/src/components/Modals/SettingsModals/ManageDataModal/StyledComponents.ts +0 -0
  75. package/src/components/Modals/SettingsModals/ProfileShares/ProfileShares.tsx +65 -0
  76. package/src/components/Modals/SettingsModals/Referrals/Referrals.tsx +90 -0
  77. package/src/components/Modals/SettingsModals/SharedStyledComponents.ts +74 -0
  78. package/src/components/Modals/SettingsModals/Visibility/RadioInput.tsx +59 -0
  79. package/src/components/Modals/SettingsModals/Visibility/StyledComponents.ts +32 -0
  80. package/src/components/Modals/SettingsModals/Visibility/VisibilityModal.tsx +146 -0
  81. package/src/components/Modals/UserProfileModal/EditUserModal.tsx +163 -0
  82. package/src/components/Modals/UserProfileModal/UserProfileModal.tsx +410 -0
  83. package/src/components/Modals/UserSettingsModal/UserSettingsModal.tsx +85 -0
  84. package/src/components/Modals/styledModalComponents.tsx +181 -0
  85. package/src/components/OperationalModal/OperationalModal.tsx +78 -0
  86. package/src/components/RoomComponents/ChatRoomItem.tsx +219 -0
  87. package/src/components/RoomComponents/LastMessageItem.tsx +47 -0
  88. package/src/components/RoomComponents/styled/LastAudioMessage.tsx +62 -0
  89. package/src/components/RoomComponents/styled/LastMessageEmoji.tsx +26 -0
  90. package/src/components/RoomComponents/styled/LastMessageFile.tsx +54 -0
  91. package/src/components/RoomComponents/styled/LastMessagePhoto.tsx +54 -0
  92. package/src/components/RoomComponents/styled/LastMessageVideo.tsx +70 -0
  93. package/src/components/RoomComponents/styled/LastTextMessage.tsx +65 -0
  94. package/src/components/RoomComponents/styled/StyledRoomComponents.ts +53 -0
  95. package/src/components/SortDropDown/index.tsx +76 -0
  96. package/src/components/Thread/ThreadHeader.tsx +41 -0
  97. package/src/components/Thread/ThreadWrapper.tsx +270 -0
  98. package/src/components/Toast/Toast.tsx +128 -0
  99. package/src/components/Toast/index.ts +13 -0
  100. package/src/components/UsersList/StyledComponents.ts +30 -0
  101. package/src/components/UsersList/UsersList.tsx +112 -0
  102. package/src/components/styled/ActionButton.tsx +40 -0
  103. package/src/components/styled/AudioMessage.tsx +82 -0
  104. package/src/components/styled/Button.tsx +107 -0
  105. package/src/components/styled/ChatWrapperBox.tsx +9 -0
  106. package/src/components/styled/DateLabel.tsx +77 -0
  107. package/src/components/styled/Loader.tsx +65 -0
  108. package/src/components/styled/MediaFilePreview.tsx +42 -0
  109. package/src/components/styled/MediaModal.tsx +54 -0
  110. package/src/components/styled/MessageImage.tsx +54 -0
  111. package/src/components/styled/NewMessageLabel.tsx +50 -0
  112. package/src/components/styled/RoomListComponents/index.tsx +164 -0
  113. package/src/components/styled/SendInput.tsx +297 -0
  114. package/src/components/styled/StyledComponents.ts +320 -0
  115. package/src/components/styled/StyledInput.tsx +101 -0
  116. package/src/components/styled/StyledInputComponents/AudioComponents.tsx +1 -0
  117. package/src/components/styled/StyledInputComponents/Composing.tsx +97 -0
  118. package/src/components/styled/StyledInputComponents/CustomTypingIndicator.tsx +261 -0
  119. package/src/components/styled/StyledInputComponents/MediaComponents.tsx +90 -0
  120. package/src/components/styled/StyledInputComponents/StyledInputComponents.tsx +131 -0
  121. package/src/components/styled/StyledInputComponents/VideoComponents.tsx +49 -0
  122. package/src/components/styled/TreadLabel.tsx +50 -0
  123. package/src/components/styled/UnsupportedType.tsx +95 -0
  124. package/src/components/styled/VideoMessage.tsx +68 -0
  125. package/src/context/MessageNotificationContext.tsx +335 -0
  126. package/src/context/PushNotificationProvider.tsx +78 -0
  127. package/src/context/ToastContext.tsx +63 -0
  128. package/src/context/toastProvider.tsx +0 -0
  129. package/src/context/xmppProvider.tsx +364 -0
  130. package/src/helpers/block_scroll.ts +95 -0
  131. package/src/helpers/chatAutoEnterer.ts +46 -0
  132. package/src/helpers/checkUniqueUsers.tsx +31 -0
  133. package/src/helpers/constants/CHAT_TYPES.ts +6 -0
  134. package/src/helpers/constants/LANGUAGE_OPTIONS.ts +14 -0
  135. package/src/helpers/constants/LOCAL_STORAGE.ts +3 -0
  136. package/src/helpers/constants/MESSAGE_INTERACTIONS.ts +29 -0
  137. package/src/helpers/constants/MODAL_TYPES.ts +57 -0
  138. package/src/helpers/constants/PLATFORM_CONSTANTS.ts +3 -0
  139. package/src/helpers/createMainMessageForThread.ts +23 -0
  140. package/src/helpers/createMessageFromXml.ts +118 -0
  141. package/src/helpers/createRoomFromApi.tsx +27 -0
  142. package/src/helpers/createUserNameFromSetUser.ts +15 -0
  143. package/src/helpers/dateComparison.ts +12 -0
  144. package/src/helpers/debounce.ts +10 -0
  145. package/src/helpers/ensureScopedChatCache.ts +61 -0
  146. package/src/helpers/extractUniqueMembersFromRooms.ts +45 -0
  147. package/src/helpers/formatNumberWithCommas.ts +3 -0
  148. package/src/helpers/getBooleanFromString.ts +7 -0
  149. package/src/helpers/getDataFromXml.ts +80 -0
  150. package/src/helpers/getNumberFromString.ts +5 -0
  151. package/src/helpers/getRoomsWithRetry.ts +45 -0
  152. package/src/helpers/getTintedColor.ts +28 -0
  153. package/src/helpers/getUnnamedUsers.ts +39 -0
  154. package/src/helpers/handleCopyClick.ts +3 -0
  155. package/src/helpers/handleXmppError.ts +14 -0
  156. package/src/helpers/hashcolor.ts +34 -0
  157. package/src/helpers/historyPreloadScheduler.ts +264 -0
  158. package/src/helpers/initRoomsPresence.ts +32 -0
  159. package/src/helpers/initXmppRooms.tsx +71 -0
  160. package/src/helpers/insertMessageWithDelimiter.ts +96 -0
  161. package/src/helpers/isChatIdPresentInArray.ts +54 -0
  162. package/src/helpers/localStorageUser.ts +9 -0
  163. package/src/helpers/markdownParser.tsx +295 -0
  164. package/src/helpers/nanoToMs.ts +3 -0
  165. package/src/helpers/parseMessageBody.tsx +516 -0
  166. package/src/helpers/parseUrls.tsx +42 -0
  167. package/src/helpers/resolveInitBeforeLoadUser.ts +240 -0
  168. package/src/helpers/storeConsole.ts +26 -0
  169. package/src/helpers/transformTranslatations.ts +16 -0
  170. package/src/helpers/updateMessagesTillLast.tsx +104 -0
  171. package/src/helpers/updatedChatLastTimestamps.ts +29 -0
  172. package/src/helpers/validator.ts +20 -0
  173. package/src/helpers/walletUsername.ts +12 -0
  174. package/src/hooks/hooks.ts +6 -0
  175. package/src/hooks/useChatSettingState.tsx +38 -0
  176. package/src/hooks/useChatWrapperInit.ts +266 -0
  177. package/src/hooks/useComposing.tsx +59 -0
  178. package/src/hooks/useCustomTypingIndicator.tsx +193 -0
  179. package/src/hooks/useEventHandlers.tsx +81 -0
  180. package/src/hooks/useGetNewArchRoom.tsx +57 -0
  181. package/src/hooks/useHeapSender.tsx +88 -0
  182. package/src/hooks/useLocalStorage.tsx +53 -0
  183. package/src/hooks/useLogout.tsx +31 -0
  184. package/src/hooks/useMessageHeapState.tsx +11 -0
  185. package/src/hooks/useMessageLoaderQueue.tsx +90 -0
  186. package/src/hooks/useMessageQueue.ts +146 -0
  187. package/src/hooks/usePendingNotification.ts +49 -0
  188. package/src/hooks/usePrevious.tsx +15 -0
  189. package/src/hooks/usePushNotifications.ts +106 -0
  190. package/src/hooks/useQRCodeChatHandler.ts +58 -0
  191. package/src/hooks/useRoomInitialization.tsx +160 -0
  192. package/src/hooks/useRoomState.tsx +47 -0
  193. package/src/hooks/useRoomUrl.tsx +41 -0
  194. package/src/hooks/useSendMessage.tsx +306 -0
  195. package/src/hooks/useUnreadMessagesCounter.ts +55 -0
  196. package/src/hooks/useXmppInitialization.ts +148 -0
  197. package/src/main.ts +45 -0
  198. package/src/networking/api-requests/auth.api.ts +140 -0
  199. package/src/networking/api-requests/push.api.ts +55 -0
  200. package/src/networking/api-requests/roomMembers.api.ts +20 -0
  201. package/src/networking/api-requests/rooms.api.ts +142 -0
  202. package/src/networking/api-requests/user.api.ts +65 -0
  203. package/src/networking/apiClient.ts +149 -0
  204. package/src/networking/helpers/refreshChecker.ts +13 -0
  205. package/src/networking/stanzaHandlers.ts +418 -0
  206. package/src/networking/xmpp/actionSetTimestampToPrivateStore.xmpp.ts +37 -0
  207. package/src/networking/xmpp/allRoomPresences.xmpp.ts +10 -0
  208. package/src/networking/xmpp/createPrivateRoom.xmpp.ts +26 -0
  209. package/src/networking/xmpp/createRoom.xmpp.ts +35 -0
  210. package/src/networking/xmpp/createRoomPresence.xmpp.ts +74 -0
  211. package/src/networking/xmpp/createTimeoutPromise.xmpp.ts +15 -0
  212. package/src/networking/xmpp/deleteMessage.xmpp.ts +19 -0
  213. package/src/networking/xmpp/editMessage.xmpp.ts +46 -0
  214. package/src/networking/xmpp/getChatsPrivateStoreRequest.xmpp.ts +57 -0
  215. package/src/networking/xmpp/getHistory.xmpp.ts +140 -0
  216. package/src/networking/xmpp/getLastMessageArchive.xmpp.ts +24 -0
  217. package/src/networking/xmpp/getRoomInfo.xmpp.ts +15 -0
  218. package/src/networking/xmpp/getRoomMembers.xmpp.ts +13 -0
  219. package/src/networking/xmpp/getRooms.xmpp.ts +43 -0
  220. package/src/networking/xmpp/getRoomsPaged.xmpp.ts +59 -0
  221. package/src/networking/xmpp/handlePong.xmpp.ts +7 -0
  222. package/src/networking/xmpp/handleStanzas.xmpp.ts +55 -0
  223. package/src/networking/xmpp/inviteRoomRequest.xmpp.ts +25 -0
  224. package/src/networking/xmpp/leaveTheRoom.xmpp.ts +15 -0
  225. package/src/networking/xmpp/listenerManager.ts +116 -0
  226. package/src/networking/xmpp/presenceInRoom.xmpp.ts +57 -0
  227. package/src/networking/xmpp/roomConfig.xmpp.ts +71 -0
  228. package/src/networking/xmpp/sendMediaMessage.xmpp.ts +97 -0
  229. package/src/networking/xmpp/sendMessageReaction.xmpp.ts +41 -0
  230. package/src/networking/xmpp/sendPing.xmpp.ts +21 -0
  231. package/src/networking/xmpp/sendTextMessage.xmpp.ts +99 -0
  232. package/src/networking/xmpp/sendTextMessageWithTranslateTag.xmpp.ts +44 -0
  233. package/src/networking/xmpp/sendTypingRequest.xmpp.ts +26 -0
  234. package/src/networking/xmpp/setChatsPrivateStoreRequest.xmpp.ts +48 -0
  235. package/src/networking/xmpp/setMeAsOwner.xmpp.ts +52 -0
  236. package/src/networking/xmpp/setRoomImage.xmpp.ts +26 -0
  237. package/src/networking/xmpp/setVCard.xmpp.ts +19 -0
  238. package/src/networking/xmpp/subscribeToRoomMessages.xmpp.ts +75 -0
  239. package/src/networking/xmppClient.ts +603 -0
  240. package/src/roomStore/Middleware/logoutMiddleware.tsx +24 -0
  241. package/src/roomStore/Middleware/newMessageMidlleware.tsx +87 -0
  242. package/src/roomStore/Middleware/reactionsMiddleware.tsx +77 -0
  243. package/src/roomStore/Middleware/testMiddleware.tsx +20 -0
  244. package/src/roomStore/Middleware/unreadMidlleware.tsx +58 -0
  245. package/src/roomStore/chatSettingsSlice.ts +178 -0
  246. package/src/roomStore/index.ts +68 -0
  247. package/src/roomStore/persistence.ts +152 -0
  248. package/src/roomStore/roomHeapSlice.ts +37 -0
  249. package/src/roomStore/roomsSlice.ts +353 -0
  250. package/src/services/pushNotifications.ts +170 -0
  251. package/src/services/pushSubscriptionService.ts +145 -0
  252. package/src/types/messages.ts +61 -0
  253. package/src/types/models/action.model.ts +30 -0
  254. package/src/types/models/config.model.ts +16 -0
  255. package/src/types/models/customComponents.model.ts +53 -0
  256. package/src/types/models/language.model.ts +11 -0
  257. package/src/types/models/media.model.ts +5 -0
  258. package/src/types/models/message.model.ts +69 -0
  259. package/src/types/models/modal.model.ts +9 -0
  260. package/src/types/models/room.model.ts +120 -0
  261. package/src/types/models/user.model.ts +90 -0
  262. package/src/types/models/xmpp.model.ts +155 -0
  263. package/src/types/types.ts +505 -0
  264. package/src/utils/PriorityQueue.ts +47 -0
  265. package/src/utils/actionHelpers.ts +40 -0
  266. package/src/utils/actionLogger.ts +64 -0
  267. package/src/utils/clientRegistry.ts +80 -0
  268. package/src/utils/devLogger.ts +197 -0
  269. package/src/utils/messageNotificationManager.ts +108 -0
  270. package/src/utils/resendMessage.ts +87 -0
  271. package/src/utils/toastEmitter.ts +27 -0
  272. package/src/utils/xmppMemoryMonitor.ts +63 -0
  273. package/src/version.ts +1 -0
@@ -0,0 +1,136 @@
1
+ import React, { useState, useMemo } from 'react';
2
+ import Button from '../../styled/Button';
3
+ import { AddNewIcon } from '../../../assets/icons';
4
+ import { useDispatch, useSelector } from 'react-redux';
5
+ import { RootState } from '../../../roomStore';
6
+ import { useXmppClient } from '../../../context/xmppProvider';
7
+ import { ApiRoom, ChatAccessOption } from '../../../types/types';
8
+ import { uploadFile } from '../../../networking/api-requests/auth.api';
9
+ import { createRoomFromApi } from '../../../helpers/createRoomFromApi';
10
+ import { postRoom } from '../../../networking/api-requests/rooms.api';
11
+ import { RoomMember } from '../../../types/types';
12
+
13
+ import ModalContent from './ModalContent';
14
+ import { ModalBackground } from '../styledModalComponents';
15
+ import { addRoom, setCurrentRoom } from '../../../roomStore/roomsSlice';
16
+
17
+ const NewChatModal: React.FC = () => {
18
+ const config = useSelector(
19
+ (state: RootState) => state.chatSettingStore.config
20
+ );
21
+ const dispatch = useDispatch();
22
+ const { client } = useXmppClient();
23
+
24
+ const [isModalOpen, setIsModalOpen] = useState<boolean>(false);
25
+ const [activeTab, setActiveTab] = useState<'0' | '1' | null>('0');
26
+ const [roomName, setRoomName] = useState<string>('');
27
+ const [roomDescription, setRoomDescription] = useState<string>('');
28
+ const [chatType, setChatType] = useState<ChatAccessOption>({
29
+ name: 'Public',
30
+ id: 'public',
31
+ });
32
+ const [profileImage, setProfileImage] = useState<string | File | null>(null);
33
+ const [errors, setErrors] = useState({ name: '', description: '' });
34
+ const [selectedUsers, setSelectedUsers] = useState<RoomMember[]>([]);
35
+
36
+ const options: ChatAccessOption[] = [
37
+ { name: 'Public', id: 'public' },
38
+ { name: 'Members-only', id: 'group' },
39
+ ];
40
+
41
+ const isValid = useMemo(() => roomName.length >= 3, [roomName]);
42
+
43
+ const handleOpenModal = () => setIsModalOpen(true);
44
+ const handleCloseModal = () => {
45
+ setActiveTab('0');
46
+ setIsModalOpen(false);
47
+ setRoomName('');
48
+ setSelectedUsers([]);
49
+ };
50
+
51
+ const validateRoomName = (name: string) => {
52
+ if (name.trim().length < 3) {
53
+ return 'Room name must be at least 3 characters.';
54
+ }
55
+ return '';
56
+ };
57
+
58
+ const handleRoomNameChange = (e: string) => {
59
+ const name = e;
60
+ setRoomName(name);
61
+ setErrors((prevErrors) => ({
62
+ ...prevErrors,
63
+ name: validateRoomName(name),
64
+ }));
65
+ };
66
+
67
+ const handleCreateRoom = async () => {
68
+ if (isValid) {
69
+ let mediaData: FormData | null = new FormData();
70
+ mediaData.append('files', profileImage);
71
+
72
+ const uploadResult = await uploadFile(mediaData);
73
+ const location = uploadResult?.data?.results?.[0]?.location;
74
+
75
+ const namesArray = selectedUsers.map((user) => user.xmppUsername);
76
+ const newChat: ApiRoom = await postRoom({
77
+ title: roomName,
78
+ description: roomDescription || 'No description',
79
+ picture: location || '',
80
+ type: chatType.id || 'public',
81
+ members: namesArray,
82
+ });
83
+
84
+ // Create room
85
+ const normalizedChat = createRoomFromApi(
86
+ newChat,
87
+ config?.xmppSettings?.conference,
88
+ namesArray.length
89
+ );
90
+ dispatch(addRoom({ roomData: normalizedChat }));
91
+ dispatch(setCurrentRoom({ roomJID: normalizedChat.jid }));
92
+ client.presenceInRoomStanza(normalizedChat.jid);
93
+ }
94
+ };
95
+
96
+ return (
97
+ <>
98
+ <Button
99
+ style={{
100
+ color: 'black',
101
+ padding: 8,
102
+ borderRadius: '16px',
103
+ backgroundColor: 'transparent',
104
+ }}
105
+ unstyled
106
+ EndIcon={<AddNewIcon color={config?.colors?.primary} />}
107
+ onPre={handleOpenModal}
108
+ />
109
+ {isModalOpen && (
110
+ <ModalBackground>
111
+ <ModalContent
112
+ activeTab={activeTab}
113
+ roomName={roomName}
114
+ roomDescription={roomDescription}
115
+ chatType={chatType}
116
+ profileImage={profileImage}
117
+ setActiveTab={setActiveTab}
118
+ handleRoomNameChange={handleRoomNameChange}
119
+ setRoomDescription={setRoomDescription}
120
+ setChatType={setChatType}
121
+ setProfileImage={setProfileImage}
122
+ selectedUsers={selectedUsers}
123
+ setSelectedUsers={setSelectedUsers}
124
+ handleCreateRoom={handleCreateRoom}
125
+ handleCloseModal={handleCloseModal}
126
+ errors={errors}
127
+ setErrors={setErrors}
128
+ options={options}
129
+ />
130
+ </ModalBackground>
131
+ )}
132
+ </>
133
+ );
134
+ };
135
+
136
+ export default NewChatModal;
@@ -0,0 +1,134 @@
1
+ import React, { useState } from 'react';
2
+ import { useDispatch, useSelector } from 'react-redux';
3
+ import { getActiveRoom, RootState } from '../../../roomStore';
4
+ import {
5
+ ActionButton,
6
+ CloseButton,
7
+ GroupContainer,
8
+ ModalBackground,
9
+ ModalContainer,
10
+ } from '../styledModalComponents';
11
+ import Button from '../../styled/Button';
12
+ import { RoomMember } from '../../../types/types';
13
+ import UsersList from '../../UsersList/UsersList';
14
+ import Loader from '../../styled/Loader';
15
+ import { postAddRoomMember } from '../../../networking/api-requests/rooms.api';
16
+ import { useToast } from '../../../context/ToastContext';
17
+ import { updateRoom } from '../../../roomStore/roomsSlice';
18
+ import { Text } from 'react-native';
19
+
20
+ const SelectUsersModal: React.FC = () => {
21
+ const { showToast } = useToast();
22
+ const dispatch = useDispatch();
23
+
24
+ const [loading, setIsLoading] = useState<boolean>(false);
25
+ const [isModalOpen, setIsModalOpen] = useState(false);
26
+ const [selectedUsers, setSelectedUsers] = useState<RoomMember[]>([]);
27
+ const activeRoom = useSelector((state: RootState) => getActiveRoom(state));
28
+
29
+ const handleOpenModal = () => setIsModalOpen(true);
30
+ const handleCloseModal = () => {
31
+ setIsModalOpen(false);
32
+ setSelectedUsers([]);
33
+ };
34
+
35
+ const handleAdd = async () => {
36
+ setIsLoading(true);
37
+ const existingXmppUsernames = activeRoom?.members?.map(
38
+ (member) => member.xmppUsername
39
+ );
40
+
41
+ const usersArray = selectedUsers
42
+ .filter((user) => !existingXmppUsernames?.includes(user.xmppUsername))
43
+ .map((user) => user.xmppUsername);
44
+
45
+ try {
46
+ const newMembers = await postAddRoomMember({
47
+ chatName: activeRoom?.jid?.split('@')[0] || '',
48
+ members: usersArray,
49
+ });
50
+ dispatch(
51
+ updateRoom({
52
+ jid: activeRoom?.jid || '',
53
+ updates: {
54
+ members: [...newMembers, ...activeRoom?.members || []],
55
+ usersCnt: (activeRoom?.members?.length || 0) + newMembers.length,
56
+ },
57
+ })
58
+ );
59
+ showToast({
60
+ id: Date.now().toString(),
61
+ title: 'Success!',
62
+ message: 'Room created succusfully!',
63
+ type: 'success',
64
+ duration: 3000,
65
+ });
66
+ } catch (error) {
67
+ console.error('Error adding users:', error);
68
+ setIsLoading(false);
69
+ }
70
+
71
+ handleCloseModal();
72
+ setIsLoading(false);
73
+ };
74
+
75
+ return (
76
+ <>
77
+ <ActionButton variant="filled" unstyled onPress={handleOpenModal}>
78
+ Add more Users
79
+ </ActionButton>
80
+
81
+ {isModalOpen && (
82
+ <ModalBackground>
83
+ <ModalContainer>
84
+ <CloseButton onPress={handleCloseModal}>
85
+ <Text style={{ fontSize: 24 }}>&times;</Text>
86
+ &times;
87
+ </CloseButton>
88
+ <GroupContainer
89
+ style={{
90
+ flexDirection: 'column',
91
+ position: 'relative',
92
+ width: '100%',
93
+ minHeight: 400,
94
+ }}
95
+ >
96
+ <UsersList
97
+ selectedUsers={selectedUsers}
98
+ setSelectedUsers={setSelectedUsers}
99
+ style={{
100
+ minWidth: '100%',
101
+ width: '100%',
102
+ maxHeight: '340px',
103
+ }}
104
+ headerElement={false}
105
+ />
106
+ </GroupContainer>
107
+ <GroupContainer>
108
+ <Button
109
+ onPress={handleCloseModal}
110
+ text="Cancel"
111
+ style={{ width: '100%' }}
112
+ unstyled
113
+ variant="outlined"
114
+ />
115
+ {loading ? (
116
+ <Loader />
117
+ ) : (
118
+ <Button
119
+ onPress={handleAdd}
120
+ text="Add"
121
+ style={{ width: '100%' }}
122
+ unstyled
123
+ variant="filled"
124
+ />
125
+ )}
126
+ </GroupContainer>
127
+ </ModalContainer>
128
+ </ModalBackground>
129
+ )}
130
+ </>
131
+ );
132
+ };
133
+
134
+ export default SelectUsersModal;
@@ -0,0 +1,63 @@
1
+ import React from 'react';
2
+ import {
3
+ EmptySection,
4
+ CenterContainer,
5
+ UserInfo,
6
+ UserName,
7
+ UserStatus,
8
+ ModalContainerFullScreen,
9
+ ActionButton,
10
+ Label,
11
+ BorderedContainer,
12
+ LabelData,
13
+ } from '../../styledModalComponents';
14
+ import { ChatIcon } from '../../../../assets/icons';
15
+ import ModalHeaderComponent from '../../ModalHeaderComponent';
16
+ import { useSelector } from 'react-redux';
17
+ import { RootState } from '../../../../roomStore';
18
+ import { ProfileImagePlaceholder } from '../../../MainComponents/ProfileImagePlaceholder';
19
+ import {
20
+ SharedSettingsSectionContainer,
21
+ SharedSettingsStyledLabel,
22
+ SharedSettingsLabelData,
23
+ SharedSettingsInfoPanel,
24
+ SharedSettingsInfoText,
25
+ } from '../SharedStyledComponents';
26
+
27
+ interface BlockedUsersModalProps {
28
+ handleCloseModal: any;
29
+ }
30
+
31
+ const BlockedUsersModal: React.FC<BlockedUsersModalProps> = ({
32
+ handleCloseModal,
33
+ }) => {
34
+ const { config } = useSelector((state: RootState) => state.chatSettingStore);
35
+
36
+ return (
37
+ <ModalContainerFullScreen>
38
+ <ModalHeaderComponent
39
+ handleCloseModal={handleCloseModal}
40
+ headerTitle={'Blocke Users'}
41
+ />
42
+ <SharedSettingsSectionContainer>
43
+ <SharedSettingsStyledLabel>
44
+ Current Document Shares
45
+ </SharedSettingsStyledLabel>
46
+ <SharedSettingsLabelData>
47
+ Listed below are your currently active document sharing links. You can
48
+ share or delete them.
49
+ </SharedSettingsLabelData>
50
+ <BorderedContainer>
51
+ <SharedSettingsInfoPanel bgColor={config?.colors?.secondary}>
52
+ <SharedSettingsInfoText>
53
+ There are no shares yet, or you can add them by clicking the “Add
54
+ New Share” button
55
+ </SharedSettingsInfoText>
56
+ </SharedSettingsInfoPanel>
57
+ </BorderedContainer>
58
+ </SharedSettingsSectionContainer>
59
+ </ModalContainerFullScreen>
60
+ );
61
+ };
62
+
63
+ export default BlockedUsersModal;
@@ -0,0 +1,115 @@
1
+ /** @format */
2
+
3
+ import React from 'react';
4
+ import {
5
+ EmptySection,
6
+ CenterContainer,
7
+ UserInfo,
8
+ UserName,
9
+ UserStatus,
10
+ ModalContainerFullScreen,
11
+ ActionButton,
12
+ Label,
13
+ BorderedContainer,
14
+ LabelData,
15
+ } from '../../styledModalComponents';
16
+ import {
17
+ AddNewIcon,
18
+ ChatIcon,
19
+ PlusIcon,
20
+ SearchIcon,
21
+ } from '../../../../assets/icons';
22
+ import ModalHeaderComponent from '../../ModalHeaderComponent';
23
+ import { useSelector } from 'react-redux';
24
+ import { RootState } from '../../../../roomStore';
25
+ import { ProfileImagePlaceholder } from '../../../MainComponents/ProfileImagePlaceholder';
26
+ import {
27
+ SharedSettingsSectionContainer,
28
+ SharedSettingsStyledLabel,
29
+ SharedSettingsLabelData,
30
+ SharedSettingsInfoPanel,
31
+ SharedSettingsInfoText,
32
+ SharedSettingsColumnContainer,
33
+ } from '../SharedStyledComponents';
34
+ import { SearchInput } from '../../../InputComponents/Search';
35
+ import Button from '../../../styled/Button';
36
+ import DropdownMenu from '../../../SortDropDown';
37
+ import { View } from 'react-native';
38
+
39
+ interface DocumentSharesModalProps {
40
+ handleCloseModal: any;
41
+ }
42
+
43
+ const DocumentSharesModal: React.FC<DocumentSharesModalProps> = ({
44
+ handleCloseModal,
45
+ }) => {
46
+ const { config } = useSelector((state: RootState) => state.chatSettingStore);
47
+
48
+ return (
49
+ <ModalContainerFullScreen>
50
+ <ModalHeaderComponent
51
+ handleCloseModal={handleCloseModal}
52
+ headerTitle={'Document Shares'}
53
+ />
54
+ <CenterContainer>
55
+ <SharedSettingsColumnContainer>
56
+ <SharedSettingsSectionContainer>
57
+ <SharedSettingsStyledLabel>
58
+ Current Document Shares
59
+ </SharedSettingsStyledLabel>
60
+ <SharedSettingsLabelData>
61
+ Listed below are your currently active document sharing links. You
62
+ can share or delete them.
63
+ </SharedSettingsLabelData>
64
+ <BorderedContainer>
65
+ <View
66
+ style={{
67
+ display: 'flex',
68
+ padding: 8,
69
+ width: '100%',
70
+ justifyContent: 'space-between',
71
+ alignItems: 'center',
72
+ }}
73
+ >
74
+ <View>List of shares</View>
75
+ <View style={{ display: 'flex', flexDirection: 'row' }}>
76
+ <View>
77
+ {/* <SearchInput
78
+ animated
79
+ icon={<SearchIcon />}
80
+ direction="right"
81
+ /> */}
82
+ </View>
83
+ <View>
84
+ <DropdownMenu
85
+ sortFunction={function (value: string): void {
86
+ throw new Error('Function not implemented.');
87
+ }}
88
+ icon={''}
89
+ values={['Name', 'Surname']}
90
+ />
91
+ </View>
92
+ <Button
93
+ variant="filled"
94
+ StartIcon={<PlusIcon />}
95
+ style={{ width: '100%' }}
96
+ >
97
+ Add New Share
98
+ </Button>
99
+ </View>
100
+ </View>
101
+ <SharedSettingsInfoPanel bgColor={config?.colors?.secondary}>
102
+ <SharedSettingsInfoText>
103
+ There are no shares yet, or you can add them by clicking the
104
+ “Add New Share” button
105
+ </SharedSettingsInfoText>
106
+ </SharedSettingsInfoPanel>
107
+ </BorderedContainer>
108
+ </SharedSettingsSectionContainer>
109
+ </SharedSettingsColumnContainer>
110
+ </CenterContainer>
111
+ </ModalContainerFullScreen>
112
+ );
113
+ };
114
+
115
+ export default DocumentSharesModal;
@@ -0,0 +1,121 @@
1
+ import React from 'react';
2
+ import {
3
+ LabelData,
4
+ ModalContainerFullScreen,
5
+ } from '../../styledModalComponents';
6
+ import ModalHeaderComponent from '../../ModalHeaderComponent';
7
+ import { useSelector } from 'react-redux';
8
+ import { RootState } from '../../../../roomStore';
9
+ import styled from 'styled-components/native';
10
+ import { InfoIcon } from '../../../../assets/icons';
11
+ import { getExportMyData } from '../../../../networking/api-requests/user.api';
12
+ import {
13
+ SharedSettingsCenterContainer,
14
+ SharedSettingsColumnContainer,
15
+ SharedSettingsInfoPanel,
16
+ SharedSettingsInfoText,
17
+ SharedSettingsLabelData,
18
+ SharedSettingsSectionContainer,
19
+ SharedSettingsStyledButton,
20
+ SharedSettingsStyledLabel,
21
+ } from '../SharedStyledComponents';
22
+ import { View } from 'react-native';
23
+
24
+ interface ManageDataModalProps {
25
+ handleCloseModal: any;
26
+ }
27
+
28
+ const InfoPanel = styled.View`
29
+ background-color: "#F3F6FC";
30
+ display: flex;
31
+ gap: 8px;
32
+ border-radius: 8px;
33
+ padding: 8px;
34
+ `;
35
+
36
+ const ManageDataModal: React.FC<ManageDataModalProps> = ({
37
+ handleCloseModal,
38
+ }) => {
39
+ const { config } = useSelector((state: RootState) => state.chatSettingStore);
40
+
41
+ const handleDownloadClick = async () => {
42
+ // const exportedData = await getExportMyData();
43
+ // const binaryData = exportedData.data;
44
+ // console.log(binaryData);
45
+ // const blob = new Blob([binaryData], { type: "text/plain" });
46
+ // const url = URL.createObjectURL(blob);
47
+ // const a = document.createElement("a");
48
+ // a.href = url;
49
+ // a.download = "mydata.json";
50
+ // document.body.appendChild(a);
51
+ // a.click();
52
+ // document.body.removeChild(a);
53
+ // URL.revokeObjectURL(url);
54
+ };
55
+
56
+ return (
57
+ <ModalContainerFullScreen>
58
+ <ModalHeaderComponent
59
+ handleCloseModal={handleCloseModal}
60
+ headerTitle={'Manage Data'}
61
+ />
62
+ <SharedSettingsCenterContainer>
63
+ <SharedSettingsColumnContainer>
64
+ <SharedSettingsSectionContainer>
65
+ <SharedSettingsStyledLabel>
66
+ Download your data
67
+ </SharedSettingsStyledLabel>
68
+ <LabelData
69
+ style={{
70
+ fontSize: 12,
71
+ textAlign: 'left',
72
+ }}
73
+ >
74
+ You own your data. Tap the button below to download a copy of your
75
+ data
76
+ </LabelData>
77
+ </SharedSettingsSectionContainer>
78
+ <SharedSettingsStyledButton
79
+ borderColor={config?.colors?.primary || '#0052CD'}
80
+ onPress={handleDownloadClick}
81
+ text="Download your data"
82
+ color={config?.colors?.primary || '#0052CD'}
83
+ />
84
+ </SharedSettingsColumnContainer>
85
+ <SharedSettingsColumnContainer>
86
+ <SharedSettingsSectionContainer>
87
+ <SharedSettingsStyledLabel>
88
+ Download your data
89
+ </SharedSettingsStyledLabel>
90
+ <SharedSettingsLabelData>
91
+ Use this only if you want to permanently delete your account &
92
+ data from our system.
93
+ </SharedSettingsLabelData>
94
+ </SharedSettingsSectionContainer>
95
+ <SharedSettingsInfoPanel
96
+ bgColor={config?.colors?.secondary || '#F3F6FC'}
97
+ >
98
+ <View>
99
+ <InfoIcon color={config?.colors?.primary || '#0052CD'} />
100
+ </View>
101
+ <SharedSettingsInfoText>
102
+ Due to the immutable nature of distributed ledger technology,
103
+ network nodes operated by the community may still retain
104
+ historical transactions generated by your account, however your
105
+ personally identifiable information such as your name, e-mail,
106
+ your key-value storage etc will be removed. Any of your digital
107
+ assets will be lost.
108
+ </SharedSettingsInfoText>
109
+ </SharedSettingsInfoPanel>
110
+ <SharedSettingsStyledButton
111
+ borderColor="#E53935"
112
+ text="Delete My Account"
113
+ color="#E53935"
114
+ />
115
+ </SharedSettingsColumnContainer>
116
+ </SharedSettingsCenterContainer>
117
+ </ModalContainerFullScreen>
118
+ );
119
+ };
120
+
121
+ export default ManageDataModal;
@@ -0,0 +1,65 @@
1
+ import React from 'react';
2
+ import {
3
+ EmptySection,
4
+ CenterContainer,
5
+ UserInfo,
6
+ UserName,
7
+ UserStatus,
8
+ ModalContainerFullScreen,
9
+ ActionButton,
10
+ Label,
11
+ BorderedContainer,
12
+ LabelData,
13
+ } from '../../styledModalComponents';
14
+ import { ChatIcon } from '../../../../assets/icons';
15
+ import ModalHeaderComponent from '../../ModalHeaderComponent';
16
+ import { useSelector } from 'react-redux';
17
+ import { RootState } from '../../../../roomStore';
18
+ import { ProfileImagePlaceholder } from '../../../MainComponents/ProfileImagePlaceholder';
19
+ import {
20
+ SharedSettingsInfoPanel,
21
+ SharedSettingsInfoText,
22
+ SharedSettingsLabelData,
23
+ SharedSettingsSectionContainer,
24
+ SharedSettingsStyledLabel,
25
+ } from '../SharedStyledComponents';
26
+
27
+ interface ProfileSharesModalProps {
28
+ handleCloseModal: any;
29
+ }
30
+
31
+ const ProfileSharesModal: React.FC<ProfileSharesModalProps> = ({
32
+ handleCloseModal,
33
+ }) => {
34
+ const { config } = useSelector((state: RootState) => state.chatSettingStore);
35
+
36
+ return (
37
+ <ModalContainerFullScreen>
38
+ <ModalHeaderComponent
39
+ handleCloseModal={handleCloseModal}
40
+ headerTitle={'Profile Shares'}
41
+ />
42
+ <CenterContainer>
43
+ <SharedSettingsSectionContainer>
44
+ <SharedSettingsStyledLabel>
45
+ Current Profile Shares
46
+ </SharedSettingsStyledLabel>
47
+ <SharedSettingsLabelData>
48
+ Listed below are your currently active profile sharing links. You
49
+ can share or delete them.
50
+ </SharedSettingsLabelData>
51
+ <BorderedContainer>
52
+ <SharedSettingsInfoPanel bgColor={config?.colors?.secondary}>
53
+ <SharedSettingsInfoText>
54
+ There are no shares yet, or you can add them by clicking the
55
+ “Add New Share” button
56
+ </SharedSettingsInfoText>
57
+ </SharedSettingsInfoPanel>
58
+ </BorderedContainer>
59
+ </SharedSettingsSectionContainer>
60
+ </CenterContainer>
61
+ </ModalContainerFullScreen>
62
+ );
63
+ };
64
+
65
+ export default ProfileSharesModal;