quickblox-react-ui-kit 0.1.6 → 0.1.7

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 (454) hide show
  1. package/.prettierignore +4 -0
  2. package/.prettierrc +10 -0
  3. package/README.md +30 -7
  4. package/dist/Data/source/remote/RemoteDataSource.d.ts +1 -1
  5. package/dist/index-ui.d.ts +3 -3
  6. package/dist/index-ui.js +3 -3
  7. package/package.json +2 -26
  8. package/public/favicon.ico +0 -0
  9. package/public/index.html +47 -0
  10. package/public/logo192.png +0 -0
  11. package/public/logo512.png +0 -0
  12. package/public/manifest.json +25 -0
  13. package/public/quickblox.js +54609 -0
  14. package/public/robots.txt +3 -0
  15. package/src/App.scss +0 -0
  16. package/src/App.tsx +236 -0
  17. package/src/CommonTypes/FunctionResult.ts +4 -0
  18. package/src/Data/Stubs.ts +1131 -0
  19. package/src/Data/dto/dialog/LocalDialogDTO.ts +42 -0
  20. package/src/Data/dto/dialog/LocalDialogsDTO.ts +21 -0
  21. package/src/Data/dto/dialog/RemoteDialogDTO.ts +58 -0
  22. package/src/Data/dto/dialog/RemoteDialogsDTO.ts +21 -0
  23. package/src/Data/dto/file/LocalFileDTO.ts +26 -0
  24. package/src/Data/dto/file/RemoteFileDTO.ts +26 -0
  25. package/src/Data/dto/message/LocalMessageDTO.ts +51 -0
  26. package/src/Data/dto/message/LocalMessagesDTO.ts +21 -0
  27. package/src/Data/dto/message/RemoteMessageDTO.ts +51 -0
  28. package/src/Data/dto/message/RemoteMessagesDTO.ts +21 -0
  29. package/src/Data/dto/user/LocalUserDTO.ts +37 -0
  30. package/src/Data/dto/user/LocalUsersDTO.ts +23 -0
  31. package/src/Data/dto/user/RemoteUserDTO.ts +37 -0
  32. package/src/Data/dto/user/RemoteUsersDTO.ts +21 -0
  33. package/src/Data/mapper/DialogLocalDTOMapper.ts +742 -0
  34. package/src/Data/mapper/DialogRemoteDTOMapper.ts +777 -0
  35. package/src/Data/mapper/FileLocalDTOMapper.ts +253 -0
  36. package/src/Data/mapper/FileRemoteDTOMapper.ts +265 -0
  37. package/src/Data/mapper/IMapper.ts +14 -0
  38. package/src/Data/mapper/MessageLocalDTOMapper.ts +425 -0
  39. package/src/Data/mapper/MessageRemoteDTOMapper.ts +431 -0
  40. package/src/Data/mapper/UserLocalDTOMapper.ts +381 -0
  41. package/src/Data/mapper/UserRemoteDTOMapper.ts +393 -0
  42. package/src/Data/repository/ConnectionRepository.ts +144 -0
  43. package/src/Data/repository/DialogsRepository.ts +422 -0
  44. package/src/Data/repository/EventMessagesRepository.ts +291 -0
  45. package/src/Data/repository/FileRepository.ts +110 -0
  46. package/src/Data/repository/MessagesRepository.ts +288 -0
  47. package/src/Data/repository/UsersRepository.ts +324 -0
  48. package/src/Data/source/exception/LocalDataSourceException.ts +17 -0
  49. package/src/Data/source/exception/MapperDTOException.ts +19 -0
  50. package/src/Data/source/exception/RemoteDataSourceException.ts +28 -0
  51. package/src/Data/source/exception/RepositoryException.ts +27 -0
  52. package/src/Data/source/local/ChatLocalStorageDataSource.ts +262 -0
  53. package/src/Data/source/local/ILocalDataSource.ts +45 -0
  54. package/src/Data/source/local/ILocalFileDataSource.ts +11 -0
  55. package/src/Data/source/local/LocalDataSource.ts +377 -0
  56. package/src/Data/source/local/LocalFileDataSource.ts +22 -0
  57. package/src/Data/source/remote/IRemoteDataSource.ts +112 -0
  58. package/src/Data/source/remote/Mapper/DialogDTOMapper.ts +415 -0
  59. package/src/Data/source/remote/Mapper/FileDTOMapper.ts +276 -0
  60. package/src/Data/source/remote/Mapper/IDTOMapper.ts +4 -0
  61. package/src/Data/source/remote/Mapper/MessageDTOMapper.ts +399 -0
  62. package/src/Data/source/remote/Mapper/UserDTOMapper.ts +344 -0
  63. package/src/Data/source/remote/RemoteDataSource.ts +1391 -0
  64. package/src/Domain/entity/Chat.ts +4 -0
  65. package/src/Domain/entity/ChatMessageAttachmentEntity.ts +15 -0
  66. package/src/Domain/entity/CustomDataEntity.ts +3 -0
  67. package/src/Domain/entity/DialogEntity.ts +15 -0
  68. package/src/Domain/entity/DialogEventInfo.ts +15 -0
  69. package/src/Domain/entity/DialogTypes.ts +7 -0
  70. package/src/Domain/entity/EventMessageType.ts +7 -0
  71. package/src/Domain/entity/FileEntity.ts +11 -0
  72. package/src/Domain/entity/FileTypes.ts +9 -0
  73. package/src/Domain/entity/GroupDialogEntity.ts +54 -0
  74. package/src/Domain/entity/LastMessageEntity.ts +5 -0
  75. package/src/Domain/entity/MessageEntity.ts +25 -0
  76. package/src/Domain/entity/NotificationTypes.ts +7 -0
  77. package/src/Domain/entity/PrivateDialogEntity.ts +46 -0
  78. package/src/Domain/entity/PublicDialogEntity.ts +80 -0
  79. package/src/Domain/entity/UserEntity.ts +22 -0
  80. package/src/Domain/exception/domain/DomainExecption.ts +5 -0
  81. package/src/Domain/repository/IDialogsRepository.ts +40 -0
  82. package/src/Domain/repository/IFileRepository.ts +9 -0
  83. package/src/Domain/repository/IMessagesRepository.ts +28 -0
  84. package/src/Domain/repository/IUsersRepository.ts +13 -0
  85. package/src/Domain/repository/Pagination.ts +48 -0
  86. package/src/Domain/use_cases/CreateDialogUseCase.ts +73 -0
  87. package/src/Domain/use_cases/GetAllDialogsUseCase.ts +20 -0
  88. package/src/Domain/use_cases/GetAllDialogsUseCaseWithMock.ts +45 -0
  89. package/src/Domain/use_cases/GetAllMessagesForDialog.ts +61 -0
  90. package/src/Domain/use_cases/GetAllUsersUseCase.ts +34 -0
  91. package/src/Domain/use_cases/GetDialogByIdUseCase.ts +28 -0
  92. package/src/Domain/use_cases/GetUsersByIdsUseCase.ts +22 -0
  93. package/src/Domain/use_cases/LeaveDialogUseCase.ts +109 -0
  94. package/src/Domain/use_cases/RemoveUsersFromTheDialogUseCase.ts +103 -0
  95. package/src/Domain/use_cases/SendTextMessageUseCase.ts +26 -0
  96. package/src/Domain/use_cases/SubscribeToDialogEventsUseCase.ts +141 -0
  97. package/src/Domain/use_cases/SubscribeToDialogsUpdatesUseCase.ts +69 -0
  98. package/src/Domain/use_cases/SubscribeToDialogsUpdatesUseCaseWithMock.ts +61 -0
  99. package/src/Domain/use_cases/SyncDialogsUseCase.ts +246 -0
  100. package/src/Domain/use_cases/UpdateDialogUseCase.ts +65 -0
  101. package/src/Domain/use_cases/UploadFileUseCase.ts +24 -0
  102. package/src/Domain/use_cases/UserTypingMessageUseCase.ts +51 -0
  103. package/src/Domain/use_cases/base/BaseUseCase.ts +77 -0
  104. package/src/Domain/use_cases/base/IUseCase.ts +5 -0
  105. package/src/Domain/use_cases/base/Subscribable/ISubscribable.ts +6 -0
  106. package/src/Domain/use_cases/base/Subscribable/SubscriptionPerformer.ts +151 -0
  107. package/src/Presentation/.gitkeep +0 -0
  108. package/src/Presentation/Views/Base/BaseViewModel.ts +67 -0
  109. package/src/Presentation/Views/CreateDialogFlow/CreateNewDialogFlow.tsx +188 -0
  110. package/src/Presentation/Views/Dialogs/DialogViewModel.ts +25 -0
  111. package/src/Presentation/Views/Dialogs/Dialogs.scss +76 -0
  112. package/src/Presentation/Views/Dialogs/Dialogs.tsx +379 -0
  113. package/src/Presentation/Views/Dialogs/useDialogsViewModel.ts +379 -0
  114. package/src/Presentation/Views/Navigation/More.svg +7 -0
  115. package/src/Presentation/assets/DarkTheme.ts +58 -0
  116. package/src/Presentation/assets/DefaultThemes/CustomTheme.ts +58 -0
  117. package/src/Presentation/assets/DefaultThemes/DefaultTheme.ts +58 -0
  118. package/src/Presentation/assets/LightTheme.ts +58 -0
  119. package/src/Presentation/assets/ThemeScheme.ts +83 -0
  120. package/src/Presentation/assets/UiKitTheme.ts +143 -0
  121. package/src/Presentation/assets/fonts/.gitkeep +0 -0
  122. package/src/Presentation/assets/fonts/Roboto-Bold.eot +0 -0
  123. package/src/Presentation/assets/fonts/Roboto-Bold.ttf +0 -0
  124. package/src/Presentation/assets/fonts/Roboto-Bold.woff +0 -0
  125. package/src/Presentation/assets/fonts/Roboto-Bold.woff2 +0 -0
  126. package/src/Presentation/assets/fonts/Roboto-Medium.eot +0 -0
  127. package/src/Presentation/assets/fonts/Roboto-Medium.ttf +0 -0
  128. package/src/Presentation/assets/fonts/Roboto-Medium.woff +0 -0
  129. package/src/Presentation/assets/fonts/Roboto-Medium.woff2 +0 -0
  130. package/src/Presentation/assets/fonts/Roboto-Regular.eot +0 -0
  131. package/src/Presentation/assets/fonts/Roboto-Regular.ttf +0 -0
  132. package/src/Presentation/assets/fonts/Roboto-Regular.woff +0 -0
  133. package/src/Presentation/assets/fonts/Roboto-Regular.woff2 +0 -0
  134. package/src/Presentation/assets/img/Artem_Koltunov_Selfi.png +0 -0
  135. package/src/Presentation/assets/img/bee-img.png +0 -0
  136. package/src/Presentation/assets/img/web-doc.png +0 -0
  137. package/src/Presentation/assets/styles/_fonts.scss +32 -0
  138. package/src/Presentation/assets/styles/_reset-styles.scss +435 -0
  139. package/src/Presentation/assets/styles/_theme_colors_scheme.scss +56 -0
  140. package/src/Presentation/assets/styles/_theme_colors_scheme_green.scss +57 -0
  141. package/src/Presentation/assets/styles/_theme_colors_scheme_pink.scss +72 -0
  142. package/src/Presentation/assets/styles/_theme_dark.scss +33 -0
  143. package/src/Presentation/assets/styles/_theme_light.scss +33 -0
  144. package/src/Presentation/assets/styles/_variables.scss +2 -0
  145. package/src/Presentation/components/Button.js +5 -0
  146. package/src/Presentation/components/Navbar.tsx +45 -0
  147. package/src/Presentation/components/TextInput.js +10 -0
  148. package/src/Presentation/components/UI/Buttons/ActiveButton/ActiveButton.tsx +40 -0
  149. package/src/Presentation/components/UI/Buttons/MainBoundedButton/MainBoundedButton.scss +0 -0
  150. package/src/Presentation/components/UI/Buttons/MainBoundedButton/MainBoundedButton.tsx +30 -0
  151. package/src/Presentation/components/UI/Buttons/MainButton/MainButton.scss +127 -0
  152. package/src/Presentation/components/UI/Buttons/MainButton/MainButton.tsx +62 -0
  153. package/src/Presentation/components/UI/Dialogs/CreateDialog/CreateDialog.scss +45 -0
  154. package/src/Presentation/components/UI/Dialogs/CreateDialog/CreateDialog.tsx +77 -0
  155. package/src/Presentation/components/UI/Dialogs/DialogInformation/DialogInformation.scss +429 -0
  156. package/src/Presentation/components/UI/Dialogs/DialogInformation/DialogInformation.tsx +565 -0
  157. package/src/Presentation/components/UI/Dialogs/DialogInformation/DialogMemberButton/DialogMembersButton.scss +42 -0
  158. package/src/Presentation/components/UI/Dialogs/DialogInformation/DialogMemberButton/DialogMembersButton.tsx +26 -0
  159. package/src/Presentation/components/UI/Dialogs/DialogInformation/UsersList/SingleUser/SingleUser.scss +95 -0
  160. package/src/Presentation/components/UI/Dialogs/DialogInformation/UsersList/SingleUser/SingleUser.tsx +42 -0
  161. package/src/Presentation/components/UI/Dialogs/DialogInformation/UsersList/UsersList.scss +60 -0
  162. package/src/Presentation/components/UI/Dialogs/DialogInformation/UsersList/UsersList.tsx +65 -0
  163. package/src/Presentation/components/UI/Dialogs/DialogInformation/UsersList/UsersListViewModel.ts +13 -0
  164. package/src/Presentation/components/UI/Dialogs/DialogInformation/UsersList/useUsersListViewModel.ts +81 -0
  165. package/src/Presentation/components/UI/Dialogs/EditDialog/EditDialog.scss +196 -0
  166. package/src/Presentation/components/UI/Dialogs/EditDialog/EditDialog.tsx +277 -0
  167. package/src/Presentation/components/UI/Dialogs/EditDialog/UserAvatar/UserAvatar.scss +32 -0
  168. package/src/Presentation/components/UI/Dialogs/EditDialog/UserAvatar/UserAvatar.tsx +59 -0
  169. package/src/Presentation/components/UI/Dialogs/HeaderDialogs/HeaderDialogs.scss +67 -0
  170. package/src/Presentation/components/UI/Dialogs/HeaderDialogs/HeaderDialogs.tsx +112 -0
  171. package/src/Presentation/components/UI/Dialogs/InviteMembers/InviteMembers.scss +146 -0
  172. package/src/Presentation/components/UI/Dialogs/InviteMembers/InviteMembers.tsx +328 -0
  173. package/src/Presentation/components/UI/Dialogs/InviteMembers/InviteMembersViewModel.ts +18 -0
  174. package/src/Presentation/components/UI/Dialogs/InviteMembers/InviteUsersList/SingleUserWithCheckBox/SingleUserWithCheckBox.scss +113 -0
  175. package/src/Presentation/components/UI/Dialogs/InviteMembers/InviteUsersList/SingleUserWithCheckBox/SingleUserWithCheckBox.tsx +79 -0
  176. package/src/Presentation/components/UI/Dialogs/InviteMembers/InviteUsersResultViewModel.ts +12 -0
  177. package/src/Presentation/components/UI/Dialogs/InviteMembers/NotFoundContent/NotFoundContent.scss +37 -0
  178. package/src/Presentation/components/UI/Dialogs/InviteMembers/NotFoundContent/NotFoundContent.tsx +22 -0
  179. package/src/Presentation/components/UI/Dialogs/InviteMembers/useInviteMembersViewModel.ts +116 -0
  180. package/src/Presentation/components/UI/Dialogs/MembersList/MembersList.scss +128 -0
  181. package/src/Presentation/components/UI/Dialogs/MembersList/MembersList.tsx +93 -0
  182. package/src/Presentation/components/UI/Dialogs/MessagesView/AudioAttachmentComponent/AudioAttachmentComponent.scss +7 -0
  183. package/src/Presentation/components/UI/Dialogs/MessagesView/AudioAttachmentComponent/AudioAttachmentComponent.tsx +27 -0
  184. package/src/Presentation/components/UI/Dialogs/MessagesView/HeaderMessages/HeaderMessages.scss +133 -0
  185. package/src/Presentation/components/UI/Dialogs/MessagesView/HeaderMessages/HeaderMessages.tsx +141 -0
  186. package/src/Presentation/components/UI/Dialogs/MessagesView/HighLightLink/HighLightLink.scss +92 -0
  187. package/src/Presentation/components/UI/Dialogs/MessagesView/HighLightLink/HighLightLink.tsx +128 -0
  188. package/src/Presentation/components/UI/Dialogs/MessagesView/ImageAttachmentComponent/ImageAttachmentComponent.scss +11 -0
  189. package/src/Presentation/components/UI/Dialogs/MessagesView/ImageAttachmentComponent/ImageAttachmentComponent.tsx +25 -0
  190. package/src/Presentation/components/UI/Dialogs/MessagesView/MessagesView.scss +327 -0
  191. package/src/Presentation/components/UI/Dialogs/MessagesView/MessagesView.tsx +906 -0
  192. package/src/Presentation/components/UI/Dialogs/MessagesView/MessagesViewModel.ts +20 -0
  193. package/src/Presentation/components/UI/Dialogs/MessagesView/VideoAttachmentComponent/VideoAttachmentComponent.scss +7 -0
  194. package/src/Presentation/components/UI/Dialogs/MessagesView/VideoAttachmentComponent/VideoAttachmentComponent.tsx +33 -0
  195. package/src/Presentation/components/UI/Dialogs/MessagesView/VoiceRecordingProgress/VoiceRecordingProgress.scss +35 -0
  196. package/src/Presentation/components/UI/Dialogs/MessagesView/VoiceRecordingProgress/VoiceRecordingProgress.tsx +89 -0
  197. package/src/Presentation/components/UI/Dialogs/MessagesView/useMessagesViewModel.ts +463 -0
  198. package/src/Presentation/components/UI/Dialogs/PreviewDialog/PreviewDialog.scss +100 -0
  199. package/src/Presentation/components/UI/Dialogs/PreviewDialog/PreviewDialog.tsx +441 -0
  200. package/src/Presentation/components/UI/Dialogs/PreviewDialog/PreviewDialogViewModel.ts +42 -0
  201. package/src/Presentation/components/UI/Dialogs/YesNoQuestion/YesNoQuestion.scss +35 -0
  202. package/src/Presentation/components/UI/Dialogs/YesNoQuestion/YesNoQuestion.tsx +89 -0
  203. package/src/Presentation/components/UI/Elements/SwitchButton/SwitchButton.scss +61 -0
  204. package/src/Presentation/components/UI/Elements/SwitchButton/SwitchButton.tsx +48 -0
  205. package/src/Presentation/components/UI/Placeholders/ErrorComponent/ErrorComponent.scss +74 -0
  206. package/src/Presentation/components/UI/Placeholders/ErrorComponent/ErrorComponent.tsx +72 -0
  207. package/src/Presentation/components/UI/Placeholders/LoaderComponent/LoaderComponent.scss +21 -0
  208. package/src/Presentation/components/UI/Placeholders/LoaderComponent/LoaderComponent.tsx +41 -0
  209. package/src/Presentation/components/UI/svgs/ActiveSvg/ActiveSvg.scss +3 -0
  210. package/src/Presentation/components/UI/svgs/ActiveSvg/ActiveSvg.tsx +41 -0
  211. package/src/Presentation/components/UI/svgs/Icons/Actions/Add/Add.svg +3 -0
  212. package/src/Presentation/components/UI/svgs/Icons/Actions/Add/index.tsx +22 -0
  213. package/src/Presentation/components/UI/svgs/Icons/Actions/AddContact/Add contact.svg +3 -0
  214. package/src/Presentation/components/UI/svgs/Icons/Actions/AddContact/index.tsx +22 -0
  215. package/src/Presentation/components/UI/svgs/Icons/Actions/Archive/Archive.svg +3 -0
  216. package/src/Presentation/components/UI/svgs/Icons/Actions/Archive/index.tsx +22 -0
  217. package/src/Presentation/components/UI/svgs/Icons/Actions/Copy/Copy.svg +3 -0
  218. package/src/Presentation/components/UI/svgs/Icons/Actions/Copy/index.tsx +22 -0
  219. package/src/Presentation/components/UI/svgs/Icons/Actions/Delete/Delete.svg +3 -0
  220. package/src/Presentation/components/UI/svgs/Icons/Actions/Delete/index.tsx +22 -0
  221. package/src/Presentation/components/UI/svgs/Icons/Actions/Download/Download.svg +3 -0
  222. package/src/Presentation/components/UI/svgs/Icons/Actions/Download/index.tsx +22 -0
  223. package/src/Presentation/components/UI/svgs/Icons/Actions/Edit/Edit.svg +3 -0
  224. package/src/Presentation/components/UI/svgs/Icons/Actions/Edit/index.tsx +22 -0
  225. package/src/Presentation/components/UI/svgs/Icons/Actions/EditDots/EditDots.svg +3 -0
  226. package/src/Presentation/components/UI/svgs/Icons/Actions/EditDots/index.tsx +22 -0
  227. package/src/Presentation/components/UI/svgs/Icons/Actions/Emoji/Emoji.svg +3 -0
  228. package/src/Presentation/components/UI/svgs/Icons/Actions/Emoji/index.tsx +22 -0
  229. package/src/Presentation/components/UI/svgs/Icons/Actions/ForwardFilled/Forward filled.svg +3 -0
  230. package/src/Presentation/components/UI/svgs/Icons/Actions/ForwardFilled/index.tsx +22 -0
  231. package/src/Presentation/components/UI/svgs/Icons/Actions/Hungup/Hungup.svg +3 -0
  232. package/src/Presentation/components/UI/svgs/Icons/Actions/Hungup/index.tsx +22 -0
  233. package/src/Presentation/components/UI/svgs/Icons/Actions/IncomeCall/Income call.svg +3 -0
  234. package/src/Presentation/components/UI/svgs/Icons/Actions/IncomeCall/index.tsx +22 -0
  235. package/src/Presentation/components/UI/svgs/Icons/Actions/Like/Like.svg +3 -0
  236. package/src/Presentation/components/UI/svgs/Icons/Actions/Like/index.tsx +22 -0
  237. package/src/Presentation/components/UI/svgs/Icons/Actions/NewChat/New chat.svg +3 -0
  238. package/src/Presentation/components/UI/svgs/Icons/Actions/NewChat/index.tsx +22 -0
  239. package/src/Presentation/components/UI/svgs/Icons/Actions/OutcomeCall/Outcome call.svg +3 -0
  240. package/src/Presentation/components/UI/svgs/Icons/Actions/OutcomeCall/index.tsx +22 -0
  241. package/src/Presentation/components/UI/svgs/Icons/Actions/Phone/Phone.svg +3 -0
  242. package/src/Presentation/components/UI/svgs/Icons/Actions/Phone/index.tsx +35 -0
  243. package/src/Presentation/components/UI/svgs/Icons/Actions/PhoneFilled/Phone filled.svg +3 -0
  244. package/src/Presentation/components/UI/svgs/Icons/Actions/PhoneFilled/index.tsx +22 -0
  245. package/src/Presentation/components/UI/svgs/Icons/Actions/Remove/Remove.svg +3 -0
  246. package/src/Presentation/components/UI/svgs/Icons/Actions/Remove/index.tsx +22 -0
  247. package/src/Presentation/components/UI/svgs/Icons/Actions/Remove2/Remove2.svg +3 -0
  248. package/src/Presentation/components/UI/svgs/Icons/Actions/Remove2/index.tsx +22 -0
  249. package/src/Presentation/components/UI/svgs/Icons/Actions/ReplyFilled/Reply filled.svg +3 -0
  250. package/src/Presentation/components/UI/svgs/Icons/Actions/ReplyFilled/index.tsx +22 -0
  251. package/src/Presentation/components/UI/svgs/Icons/Actions/Send/Send.svg +3 -0
  252. package/src/Presentation/components/UI/svgs/Icons/Actions/Send/index.tsx +38 -0
  253. package/src/Presentation/components/UI/svgs/Icons/Actions/Share/Share.svg +3 -0
  254. package/src/Presentation/components/UI/svgs/Icons/Actions/Share/index.tsx +22 -0
  255. package/src/Presentation/components/UI/svgs/Icons/Actions/SwapCamera/Swap camera.svg +3 -0
  256. package/src/Presentation/components/UI/svgs/Icons/Actions/SwapCamera/index.tsx +22 -0
  257. package/src/Presentation/components/UI/svgs/Icons/Actions/Unarchive/Unarchive.svg +3 -0
  258. package/src/Presentation/components/UI/svgs/Icons/Actions/Unarchive/index.tsx +22 -0
  259. package/src/Presentation/components/UI/svgs/Icons/Actions/VideoIcon/Video.svg +3 -0
  260. package/src/Presentation/components/UI/svgs/Icons/Actions/VideoIcon/index.tsx +22 -0
  261. package/src/Presentation/components/UI/svgs/Icons/Actions/Voice/Voice.svg +3 -0
  262. package/src/Presentation/components/UI/svgs/Icons/Actions/Voice/index.tsx +35 -0
  263. package/src/Presentation/components/UI/svgs/Icons/Contents/Brodcast/Broadcast.svg +7 -0
  264. package/src/Presentation/components/UI/svgs/Icons/Contents/Brodcast/index.tsx +38 -0
  265. package/src/Presentation/components/UI/svgs/Icons/Contents/Chat/Chat.svg +3 -0
  266. package/src/Presentation/components/UI/svgs/Icons/Contents/Chat/index.tsx +35 -0
  267. package/src/Presentation/components/UI/svgs/Icons/Contents/ChatFilled/Chat filled.svg +3 -0
  268. package/src/Presentation/components/UI/svgs/Icons/Contents/ChatFilled/index.tsx +22 -0
  269. package/src/Presentation/components/UI/svgs/Icons/Contents/Conference/Conference.svg +3 -0
  270. package/src/Presentation/components/UI/svgs/Icons/Contents/Conference/index.tsx +22 -0
  271. package/src/Presentation/components/UI/svgs/Icons/Contents/Contact/Contact.svg +3 -0
  272. package/src/Presentation/components/UI/svgs/Icons/Contents/Contact/index.tsx +22 -0
  273. package/src/Presentation/components/UI/svgs/Icons/Contents/ContactFilled/Contact filled.svg +3 -0
  274. package/src/Presentation/components/UI/svgs/Icons/Contents/ContactFilled/index.tsx +22 -0
  275. package/src/Presentation/components/UI/svgs/Icons/Contents/GroupChat/Group chat.svg +3 -0
  276. package/src/Presentation/components/UI/svgs/Icons/Contents/GroupChat/index.tsx +35 -0
  277. package/src/Presentation/components/UI/svgs/Icons/Contents/Notifications/Notifications.svg +3 -0
  278. package/src/Presentation/components/UI/svgs/Icons/Contents/Notifications/index.tsx +22 -0
  279. package/src/Presentation/components/UI/svgs/Icons/Contents/PrivateChat/Private chat.svg +3 -0
  280. package/src/Presentation/components/UI/svgs/Icons/Contents/PrivateChat/index.tsx +22 -0
  281. package/src/Presentation/components/UI/svgs/Icons/Contents/PublicChannel/Public channel.svg +7 -0
  282. package/src/Presentation/components/UI/svgs/Icons/Contents/PublicChannel/index.tsx +67 -0
  283. package/src/Presentation/components/UI/svgs/Icons/Contents/Stream/Stream.svg +3 -0
  284. package/src/Presentation/components/UI/svgs/Icons/Contents/Stream/index.tsx +22 -0
  285. package/src/Presentation/components/UI/svgs/Icons/Contents/StreamFilled/Stream filled.svg +3 -0
  286. package/src/Presentation/components/UI/svgs/Icons/Contents/StreamFilled/index.tsx +22 -0
  287. package/src/Presentation/components/UI/svgs/Icons/Contents/User/User.svg +3 -0
  288. package/src/Presentation/components/UI/svgs/Icons/Contents/User/index.tsx +35 -0
  289. package/src/Presentation/components/UI/svgs/Icons/IconsCommonTypes.ts +6 -0
  290. package/src/Presentation/components/UI/svgs/Icons/Media/Attachment/Attachment.svg +3 -0
  291. package/src/Presentation/components/UI/svgs/Icons/Media/Attachment/index.tsx +22 -0
  292. package/src/Presentation/components/UI/svgs/Icons/Media/AudioFile/Audio file.svg +3 -0
  293. package/src/Presentation/components/UI/svgs/Icons/Media/AudioFile/index.tsx +22 -0
  294. package/src/Presentation/components/UI/svgs/Icons/Media/BrokenFile/Broken file.svg +3 -0
  295. package/src/Presentation/components/UI/svgs/Icons/Media/BrokenFile/index.tsx +22 -0
  296. package/src/Presentation/components/UI/svgs/Icons/Media/Camera/Camera.svg +3 -0
  297. package/src/Presentation/components/UI/svgs/Icons/Media/Camera/index.tsx +22 -0
  298. package/src/Presentation/components/UI/svgs/Icons/Media/GifFile/GIF file.svg +3 -0
  299. package/src/Presentation/components/UI/svgs/Icons/Media/GifFile/index.tsx +22 -0
  300. package/src/Presentation/components/UI/svgs/Icons/Media/ImageEmpty/Image.svg +3 -0
  301. package/src/Presentation/components/UI/svgs/Icons/Media/ImageEmpty/index.tsx +22 -0
  302. package/src/Presentation/components/UI/svgs/Icons/Media/ImageFile/File.svg +3 -0
  303. package/src/Presentation/components/UI/svgs/Icons/Media/ImageFile/index.tsx +35 -0
  304. package/src/Presentation/components/UI/svgs/Icons/Media/ImageFilled/Image filled.svg +3 -0
  305. package/src/Presentation/components/UI/svgs/Icons/Media/ImageFilled/index.tsx +22 -0
  306. package/src/Presentation/components/UI/svgs/Icons/Media/LinkWeb/Link.svg +3 -0
  307. package/src/Presentation/components/UI/svgs/Icons/Media/LinkWeb/index.tsx +22 -0
  308. package/src/Presentation/components/UI/svgs/Icons/Media/Location/Location.svg +4 -0
  309. package/src/Presentation/components/UI/svgs/Icons/Media/Location/index.tsx +26 -0
  310. package/src/Presentation/components/UI/svgs/Icons/Media/TextDocument/Text document.svg +3 -0
  311. package/src/Presentation/components/UI/svgs/Icons/Media/TextDocument/index.tsx +22 -0
  312. package/src/Presentation/components/UI/svgs/Icons/Media/VideoFile/Video file.svg +3 -0
  313. package/src/Presentation/components/UI/svgs/Icons/Media/VideoFile/index.tsx +22 -0
  314. package/src/Presentation/components/UI/svgs/Icons/Moderation/Admin/Admin.svg +3 -0
  315. package/src/Presentation/components/UI/svgs/Icons/Moderation/Admin/index.tsx +22 -0
  316. package/src/Presentation/components/UI/svgs/Icons/Moderation/Banned/Banned.svg +3 -0
  317. package/src/Presentation/components/UI/svgs/Icons/Moderation/Banned/index.tsx +22 -0
  318. package/src/Presentation/components/UI/svgs/Icons/Moderation/Freeze/Freeze.svg +3 -0
  319. package/src/Presentation/components/UI/svgs/Icons/Moderation/Freeze/index.tsx +22 -0
  320. package/src/Presentation/components/UI/svgs/Icons/Moderation/Moderations/Moderations.svg +3 -0
  321. package/src/Presentation/components/UI/svgs/Icons/Moderation/Moderations/index.tsx +22 -0
  322. package/src/Presentation/components/UI/svgs/Icons/Moderation/Muted/Muted.svg +3 -0
  323. package/src/Presentation/components/UI/svgs/Icons/Moderation/Muted/index.tsx +22 -0
  324. package/src/Presentation/components/UI/svgs/Icons/Navigation/ArrowLeft/Arrow left.svg +3 -0
  325. package/src/Presentation/components/UI/svgs/Icons/Navigation/ArrowLeft/index.tsx +22 -0
  326. package/src/Presentation/components/UI/svgs/Icons/Navigation/ArrowRight/Arrow right.svg +3 -0
  327. package/src/Presentation/components/UI/svgs/Icons/Navigation/ArrowRight/index.tsx +22 -0
  328. package/src/Presentation/components/UI/svgs/Icons/Navigation/Back/Back.svg +3 -0
  329. package/src/Presentation/components/UI/svgs/Icons/Navigation/Back/index.tsx +22 -0
  330. package/src/Presentation/components/UI/svgs/Icons/Navigation/Close/Close.svg +3 -0
  331. package/src/Presentation/components/UI/svgs/Icons/Navigation/Close/index.tsx +35 -0
  332. package/src/Presentation/components/UI/svgs/Icons/Navigation/Down/Down.svg +3 -0
  333. package/src/Presentation/components/UI/svgs/Icons/Navigation/Down/index.tsx +35 -0
  334. package/src/Presentation/components/UI/svgs/Icons/Navigation/Leave/Leave.svg +3 -0
  335. package/src/Presentation/components/UI/svgs/Icons/Navigation/Leave/index.tsx +35 -0
  336. package/src/Presentation/components/UI/svgs/Icons/Navigation/More/More.svg +7 -0
  337. package/src/Presentation/components/UI/svgs/Icons/Navigation/More/index.tsx +22 -0
  338. package/src/Presentation/components/UI/svgs/Icons/Navigation/Next/Next.svg +3 -0
  339. package/src/Presentation/components/UI/svgs/Icons/Navigation/Next/index.tsx +35 -0
  340. package/src/Presentation/components/UI/svgs/Icons/Navigation/Plus/Plus.svg +3 -0
  341. package/src/Presentation/components/UI/svgs/Icons/Navigation/Plus/index.tsx +22 -0
  342. package/src/Presentation/components/UI/svgs/Icons/Navigation/Refresh/Refresh.svg +3 -0
  343. package/src/Presentation/components/UI/svgs/Icons/Navigation/Refresh/index.tsx +36 -0
  344. package/src/Presentation/components/UI/svgs/Icons/Navigation/Search/Search.svg +3 -0
  345. package/src/Presentation/components/UI/svgs/Icons/Navigation/Search/index.tsx +35 -0
  346. package/src/Presentation/components/UI/svgs/Icons/Navigation/Settings/Settings.svg +3 -0
  347. package/src/Presentation/components/UI/svgs/Icons/Navigation/Settings/index.tsx +22 -0
  348. package/src/Presentation/components/UI/svgs/Icons/Navigation/SettingsField/Settings filled.svg +3 -0
  349. package/src/Presentation/components/UI/svgs/Icons/Navigation/SettingsField/index.tsx +22 -0
  350. package/src/Presentation/components/UI/svgs/Icons/Status/Error/Error.svg +3 -0
  351. package/src/Presentation/components/UI/svgs/Icons/Status/Error/index.tsx +36 -0
  352. package/src/Presentation/components/UI/svgs/Icons/Status/Help/Help.svg +3 -0
  353. package/src/Presentation/components/UI/svgs/Icons/Status/Help/index.tsx +22 -0
  354. package/src/Presentation/components/UI/svgs/Icons/Status/Information/Information.svg +3 -0
  355. package/src/Presentation/components/UI/svgs/Icons/Status/Information/index.tsx +22 -0
  356. package/src/Presentation/components/UI/svgs/Icons/Status/InformationFill/index.tsx +35 -0
  357. package/src/Presentation/components/UI/svgs/Icons/Status/Loader/Loader.svg +3 -0
  358. package/src/Presentation/components/UI/svgs/Icons/Status/Loader/index.tsx +22 -0
  359. package/src/Presentation/components/UI/svgs/Icons/Status/Mention/Mention.svg +3 -0
  360. package/src/Presentation/components/UI/svgs/Icons/Status/Mention/index.tsx +22 -0
  361. package/src/Presentation/components/UI/svgs/Icons/Status/Sent/Sent.svg +3 -0
  362. package/src/Presentation/components/UI/svgs/Icons/Status/Sent/index.tsx +22 -0
  363. package/src/Presentation/components/UI/svgs/Icons/Status/ViewedDelivered/Viewed_Delivered.svg +3 -0
  364. package/src/Presentation/components/UI/svgs/Icons/Status/ViewedDelivered/index.tsx +38 -0
  365. package/src/Presentation/components/UI/svgs/Icons/Toggle/CameraOff/Camera off.svg +3 -0
  366. package/src/Presentation/components/UI/svgs/Icons/Toggle/CameraOff/index.tsx +22 -0
  367. package/src/Presentation/components/UI/svgs/Icons/Toggle/CameraOn/Camera on.svg +3 -0
  368. package/src/Presentation/components/UI/svgs/Icons/Toggle/CameraOn/index.tsx +22 -0
  369. package/src/Presentation/components/UI/svgs/Icons/Toggle/CheckOff/Check off.svg +3 -0
  370. package/src/Presentation/components/UI/svgs/Icons/Toggle/CheckOff/index.tsx +22 -0
  371. package/src/Presentation/components/UI/svgs/Icons/Toggle/CheckOn/Check on.svg +3 -0
  372. package/src/Presentation/components/UI/svgs/Icons/Toggle/CheckOn/index.tsx +24 -0
  373. package/src/Presentation/components/UI/svgs/Icons/Toggle/Favourite/Favourite.svg +3 -0
  374. package/src/Presentation/components/UI/svgs/Icons/Toggle/Favourite/index.tsx +22 -0
  375. package/src/Presentation/components/UI/svgs/Icons/Toggle/FavouriteFilled/Favourite filled.svg +3 -0
  376. package/src/Presentation/components/UI/svgs/Icons/Toggle/FavouriteFilled/index.tsx +22 -0
  377. package/src/Presentation/components/UI/svgs/Icons/Toggle/FullScreen/Full screen.svg +3 -0
  378. package/src/Presentation/components/UI/svgs/Icons/Toggle/FullScreen/inex.tsx +22 -0
  379. package/src/Presentation/components/UI/svgs/Icons/Toggle/Hide/Hide.svg +3 -0
  380. package/src/Presentation/components/UI/svgs/Icons/Toggle/Hide/index.tsx +22 -0
  381. package/src/Presentation/components/UI/svgs/Icons/Toggle/ImagePlay/Play.svg +3 -0
  382. package/src/Presentation/components/UI/svgs/Icons/Toggle/ImagePlay/index.tsx +22 -0
  383. package/src/Presentation/components/UI/svgs/Icons/Toggle/Louder/Louder.svg +3 -0
  384. package/src/Presentation/components/UI/svgs/Icons/Toggle/Louder/index.tsx +22 -0
  385. package/src/Presentation/components/UI/svgs/Icons/Toggle/MicOff/Mic off.svg +3 -0
  386. package/src/Presentation/components/UI/svgs/Icons/Toggle/MicOff/index.tsx +22 -0
  387. package/src/Presentation/components/UI/svgs/Icons/Toggle/MicOn/Mic on.svg +4 -0
  388. package/src/Presentation/components/UI/svgs/Icons/Toggle/MicOn/index.tsx +26 -0
  389. package/src/Presentation/components/UI/svgs/Icons/Toggle/Minimize/Minimize.svg +3 -0
  390. package/src/Presentation/components/UI/svgs/Icons/Toggle/Minimize/index.tsx +22 -0
  391. package/src/Presentation/components/UI/svgs/Icons/Toggle/NotifyOff/Notify off.svg +3 -0
  392. package/src/Presentation/components/UI/svgs/Icons/Toggle/NotifyOff/index.tsx +35 -0
  393. package/src/Presentation/components/UI/svgs/Icons/Toggle/NotifyOn/Notify on.svg +3 -0
  394. package/src/Presentation/components/UI/svgs/Icons/Toggle/NotifyOn/index.tsx +35 -0
  395. package/src/Presentation/components/UI/svgs/Icons/Toggle/Pause/Pause.svg +3 -0
  396. package/src/Presentation/components/UI/svgs/Icons/Toggle/Pause/index.tsx +22 -0
  397. package/src/Presentation/components/UI/svgs/Icons/Toggle/Quite/Quite.svg +3 -0
  398. package/src/Presentation/components/UI/svgs/Icons/Toggle/Quite/index.tsx +22 -0
  399. package/src/Presentation/components/UI/svgs/Icons/Toggle/Record/Record.svg +3 -0
  400. package/src/Presentation/components/UI/svgs/Icons/Toggle/Record/index.tsx +22 -0
  401. package/src/Presentation/components/UI/svgs/Icons/Toggle/Screenshare/Screenshare.svg +3 -0
  402. package/src/Presentation/components/UI/svgs/Icons/Toggle/Screenshare/index.tsx +22 -0
  403. package/src/Presentation/components/UI/svgs/Icons/Toggle/Show/Show.svg +3 -0
  404. package/src/Presentation/components/UI/svgs/Icons/Toggle/Show/index.tsx +22 -0
  405. package/src/Presentation/components/UI/svgs/Icons/Toggle/Speaker/Speaker.svg +3 -0
  406. package/src/Presentation/components/UI/svgs/Icons/Toggle/Speaker/index.tsx +22 -0
  407. package/src/Presentation/components/UI/svgs/Icons/Toggle/SpeakerOff/Speaker off.svg +3 -0
  408. package/src/Presentation/components/UI/svgs/Icons/Toggle/SpeakerOff/index.tsx +22 -0
  409. package/src/Presentation/components/UI/svgs/Icons/Toggle/StopRecord/Stop record.svg +3 -0
  410. package/src/Presentation/components/UI/svgs/Icons/Toggle/StopRecord/index.tsx +22 -0
  411. package/src/Presentation/components/UI/svgs/Icons/Toggle/StopShare/Stop share.svg +3 -0
  412. package/src/Presentation/components/UI/svgs/Icons/Toggle/StopShare/index.tsx +22 -0
  413. package/src/Presentation/components/containers/ColumnContainer/ColumnContainer.scss +6 -0
  414. package/src/Presentation/components/containers/ColumnContainer/ColumnContainer.tsx +24 -0
  415. package/src/Presentation/components/containers/RowCenterContainer/RowCenterContainer.scss +45 -0
  416. package/src/Presentation/components/containers/RowCenterContainer/RowCenterContainer.tsx +95 -0
  417. package/src/Presentation/components/containers/RowLeftContainer/RowLeftContainer.scss +45 -0
  418. package/src/Presentation/components/containers/RowLeftContainer/RowLeftContainer.tsx +97 -0
  419. package/src/Presentation/components/containers/RowRightContainer/RowRightContainer.scss +46 -0
  420. package/src/Presentation/components/containers/RowRightContainer/RowRightContainer.tsx +97 -0
  421. package/src/Presentation/components/containers/ScrollableContainer/ScrollableContainer.scss +45 -0
  422. package/src/Presentation/components/containers/ScrollableContainer/ScrollableContainer.tsx +85 -0
  423. package/src/Presentation/components/layouts/Desktop/DesktopLayout.scss +31 -0
  424. package/src/Presentation/components/layouts/Desktop/DesktopLayout.tsx +52 -0
  425. package/src/Presentation/components/layouts/Desktop/QuickBloxUIKitDesktopLayout.tsx +234 -0
  426. package/src/Presentation/components/layouts/LayoutCommonTypes.ts +7 -0
  427. package/src/Presentation/components/layouts/TestStage/LoginView/Login.scss +71 -0
  428. package/src/Presentation/components/layouts/TestStage/LoginView/Login.tsx +95 -0
  429. package/src/Presentation/components/layouts/TestStage/TestStageMarkup.scss +24 -0
  430. package/src/Presentation/components/layouts/TestStage/TestStageMarkup.tsx +1109 -0
  431. package/src/Presentation/components/providers/ModalContextProvider/Modal.scss +71 -0
  432. package/src/Presentation/components/providers/ModalContextProvider/Modal.tsx +131 -0
  433. package/src/Presentation/components/providers/ModalContextProvider/ModalContextProvider.tsx +38 -0
  434. package/src/Presentation/components/providers/ModalContextProvider/useModal.ts +39 -0
  435. package/src/Presentation/components/providers/ProviderProps.ts +5 -0
  436. package/src/Presentation/components/providers/QuickBloxUIKitProvider/QuickBloxUIKitProvider.tsx +343 -0
  437. package/src/Presentation/components/providers/QuickBloxUIKitProvider/useEventMessagesRepository.ts +10 -0
  438. package/src/Presentation/components/providers/QuickBloxUIKitProvider/useQBConnection.ts +38 -0
  439. package/src/Presentation/components/providers/QuickBloxUIKitProvider/useQbDataContext.ts +82 -0
  440. package/src/QBconfig.ts +33 -0
  441. package/src/index-ui.ts +66 -0
  442. package/src/index.scss +18 -0
  443. package/src/index.tsx +25 -0
  444. package/src/logo.svg +1 -0
  445. package/src/package_artan_react_ui.json +87 -0
  446. package/src/package_original.json +111 -0
  447. package/src/qb-api-calls/index.ts +581 -0
  448. package/src/react-app-env.d.ts +1 -0
  449. package/src/setupTests.ts +5 -0
  450. package/src/utils/DateTimeFormatter.ts +35 -0
  451. package/src/utils/parse.ts +74 -0
  452. package/tsconfig.json +33 -0
  453. package/typedoc.json +4 -0
  454. package/webpack.config.js +56 -0
@@ -0,0 +1,1391 @@
1
+ import { RemoteDialogDTO } from '../../dto/dialog/RemoteDialogDTO';
2
+ import {
3
+ INCORRECT_REMOTE_DATASOURCE_DATA_EXCEPTION_CODE,
4
+ INCORRECT_REMOTE_DATASOURCE_DATA_EXCEPTION_MESSAGE,
5
+ NOT_FOUND_REMOTE_DATASOURCE_EXCEPTION_CODE,
6
+ NOT_FOUND_REMOTE_DATASOURCE_EXCEPTION_MESSAGE,
7
+ RemoteDataSourceException,
8
+ } from '../exception/RemoteDataSourceException';
9
+ import { RemoteDialogsDTO } from '../../dto/dialog/RemoteDialogsDTO';
10
+ import { RemoteMessageDTO } from '../../dto/message/RemoteMessageDTO';
11
+ import { RemoteUserDTO } from '../../dto/user/RemoteUserDTO';
12
+ import { RemoteUsersDTO } from '../../dto/user/RemoteUsersDTO';
13
+ import { RemoteMessagesDTO } from '../../dto/message/RemoteMessagesDTO';
14
+ import { RemoteFileDTO } from '../../dto/file/RemoteFileDTO';
15
+ import { Pagination } from '../../../Domain/repository/Pagination';
16
+ import { DialogDTOMapper } from './Mapper/DialogDTOMapper';
17
+ import { IDTOMapper } from './Mapper/IDTOMapper';
18
+ import { Stubs } from '../../Stubs';
19
+ import {
20
+ QBChatConnect,
21
+ QBChatDisconnect,
22
+ qbChatGetMessagesExtended,
23
+ QBChatMarkMessageRead,
24
+ QBChatSendMessage,
25
+ QBChatSendSystemMessage,
26
+ QBCreateAndUploadContent,
27
+ QBCreateGroupDialog,
28
+ QBCreatePrivateDialog,
29
+ QBCreateSession,
30
+ QBDeleteDialog,
31
+ QBGetDialogById,
32
+ QBGetDialogs,
33
+ QBInit,
34
+ QBInitParams,
35
+ QBJoinGroupDialog,
36
+ QBLogout,
37
+ QBSendIsStopTypingStatus,
38
+ QBSendIsTypingStatus,
39
+ QBUpdateDialog,
40
+ QBUsersGet,
41
+ QBUsersGetById,
42
+ } from '../../../qb-api-calls';
43
+ import { UserDTOMapper } from './Mapper/UserDTOMapper';
44
+ import { MessageDTOMapper } from './Mapper/MessageDTOMapper';
45
+ import { IMapper } from '../../mapper/IMapper';
46
+ import { DialogRemoteDTOMapper } from '../../mapper/DialogRemoteDTOMapper';
47
+ import { DialogEntity } from '../../../Domain/entity/DialogEntity';
48
+ import RepositoryException from '../exception/RepositoryException';
49
+ import { MapperDTOException } from '../exception/MapperDTOException';
50
+ import { stringifyError } from '../../../utils/parse';
51
+ import { DialogType } from '../../../Domain/entity/DialogTypes';
52
+ import { NotificationTypes } from '../../../Domain/entity/NotificationTypes';
53
+ import EventMessageType from '../../../Domain/entity/EventMessageType';
54
+ import { SubscriptionPerformer } from '../../../Domain/use_cases/base/Subscribable/SubscriptionPerformer';
55
+ import { CallBackFunction } from '../../../Domain/use_cases/base/IUseCase';
56
+ import { FileDTOMapper } from './Mapper/FileDTOMapper';
57
+ import { DialogEventInfo } from '../../../Domain/entity/DialogEventInfo';
58
+ import { IRemoteDataSource } from './IRemoteDataSource';
59
+ import { QBConfig } from '../../../QBconfig';
60
+
61
+ export type PaginatedDTOResult = {
62
+ // PaginatedList: Record<number, RemoteUserDTO[]>;
63
+ PaginationResult: Pagination;
64
+ ResultData: RemoteUserDTO[];
65
+ };
66
+
67
+ export type LoginData = {
68
+ login: string;
69
+ password: string;
70
+ };
71
+ export type AuthorizationData = {
72
+ sessionToken: string;
73
+ userId: number;
74
+ password: string;
75
+ userName: string;
76
+ };
77
+
78
+ export class RemoteDataSource implements IRemoteDataSource {
79
+ // private dialogDTOMapper: IDTOMapper;
80
+
81
+ private userDTOMapper: IDTOMapper;
82
+
83
+ private messageDTOMapper: IDTOMapper;
84
+
85
+ private fileDTOMapper: IDTOMapper;
86
+
87
+ private _needInit: boolean;
88
+
89
+ private _authProcessed: boolean;
90
+
91
+ get authProcessed(): boolean {
92
+ // return this._authProcessed || QB.chat.isConnected;
93
+ // return this._authProcessed;// work
94
+ const auth = this._authProcessed;
95
+ const chatConnection = QB && QB.chat && QB.chat.isConnected;
96
+
97
+ if (chatConnection) return true;
98
+
99
+ return auth || chatConnection;
100
+ }
101
+
102
+ set authProcessed(value: boolean) {
103
+ this._authProcessed = value;
104
+ }
105
+
106
+ get needInit(): boolean {
107
+ // return this._needInit || QB.chat.isConnected;
108
+ // return this._needInit; // work
109
+ const needed = this._needInit;
110
+ const chatConnection = QB && QB.chat && QB.chat.isConnected;
111
+
112
+ if (chatConnection) return false;
113
+
114
+ return needed;
115
+ }
116
+
117
+ public setAuthProcessedSuccessed() {
118
+ this.authProcessed = true;
119
+ this.setInitSDKSuccessed();
120
+ }
121
+
122
+ public setInitSDKSuccessed() {
123
+ this._needInit = false;
124
+ }
125
+
126
+ private _authInformation: AuthorizationData | undefined;
127
+
128
+ get authInformation(): AuthorizationData | undefined {
129
+ return this._authInformation;
130
+ }
131
+
132
+ set authInformation(value: AuthorizationData | undefined) {
133
+ this._authInformation = value;
134
+ }
135
+
136
+ //
137
+ getCurrentDialogDTOMapper(): IDTOMapper {
138
+ const currentUserId: number = this._authInformation?.userId || -1;
139
+ const dialogDTOMapper: IDTOMapper = new DialogDTOMapper(currentUserId);
140
+
141
+ return dialogDTOMapper;
142
+ }
143
+
144
+ //
145
+ constructor() {
146
+ console.log('CONSTRUCTOR RemoteDataSourceMock');
147
+ this.userDTOMapper = new UserDTOMapper();
148
+ this.messageDTOMapper = new MessageDTOMapper();
149
+ this.fileDTOMapper = new FileDTOMapper();
150
+ this._needInit = true;
151
+ this._authProcessed = false;
152
+ this.subscriptionOnSystemMessages[NotificationTypes.UPDATE_DIALOG] =
153
+ new SubscriptionPerformer<RemoteMessageDTO>();
154
+ this.subscriptionOnSystemMessages[NotificationTypes.DELETE_LEAVE_DIALOG] =
155
+ new SubscriptionPerformer<RemoteMessageDTO>();
156
+ this.subscriptionOnSystemMessages[NotificationTypes.NEW_DIALOG] =
157
+ new SubscriptionPerformer<RemoteMessageDTO>();
158
+ }
159
+
160
+ public async setUpMockStorage(): Promise<void> {
161
+ // const dialogs: RemoteDialogDTO[] = Stubs.createArrayPublicDialogDTO();
162
+ //
163
+ // dialogs.forEach((item) => {
164
+ // // eslint-disable-next-line promise/catch-or-return,promise/always-return,@typescript-eslint/no-unused-vars
165
+ // this.createDialog(item).then((_) => {
166
+ // console.log(`added mock item ${JSON.stringify(item)}`);
167
+ // });
168
+ // });
169
+
170
+ const dialogsDTOtoEntityMapper: IMapper = new DialogRemoteDTOMapper();
171
+ const dialogsEntities = Stubs.createDialogsForTest();
172
+
173
+ // eslint-disable-next-line no-restricted-syntax
174
+ for (const item of dialogsEntities) {
175
+ const dialogDTO: RemoteDialogDTO =
176
+ // eslint-disable-next-line no-await-in-loop
177
+ await dialogsDTOtoEntityMapper.fromEntity<
178
+ DialogEntity,
179
+ RemoteDialogDTO
180
+ >(item);
181
+
182
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars,promise/catch-or-return,promise/always-return
183
+ this.createDialog(dialogDTO)
184
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars,promise/always-return
185
+ .then((_) => {
186
+ console.log(`added mock item ${JSON.stringify(dialogDTO)}`);
187
+ })
188
+ .catch((e) => {
189
+ console.log('EXCEPTION:', (e as RepositoryException).message);
190
+ });
191
+ }
192
+ }
193
+
194
+ // eslint-disable-next-line class-methods-use-this
195
+ private async createUserSession(loginData: QBLoginParams) {
196
+ const session: QBSession = await QBCreateSession(loginData);
197
+
198
+ return session;
199
+ }
200
+
201
+ // eslint-disable-next-line class-methods-use-this
202
+ public static initSDK(sdkParams: QBInitParams): boolean {
203
+ console.log('2. call initSDK in RemoteDataSourceMock');
204
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
205
+ // @ts-ignore
206
+ if (!window.QB) {
207
+ throw new Error('HAVE NO SDK');
208
+ } else {
209
+ console.log('2. start init actions');
210
+ QBInit({
211
+ appIdOrToken: sdkParams.appIdOrToken,
212
+ authKeyOrAppId: sdkParams.authKeyOrAppId,
213
+ authSecret: sdkParams.authSecret,
214
+ accountKey: sdkParams.accountKey,
215
+ config: sdkParams.config,
216
+ });
217
+ const QuickBloxVersion = `CALL initData: Init SDK was success: version ${QB.version} build ${QB.buildNumber}`;
218
+
219
+ console.log(QuickBloxVersion);
220
+
221
+ return true;
222
+ }
223
+ }
224
+
225
+ public async initSDKWithUser(
226
+ sdkParams: QBInitParams,
227
+ authData: LoginData,
228
+ ): Promise<void> {
229
+ console.log('2. call initSDK in RemoteDataSourceMock');
230
+ if (this.needInit) {
231
+ console.log('2. start init actions');
232
+ QBInit({
233
+ appIdOrToken: sdkParams.appIdOrToken,
234
+ authKeyOrAppId: sdkParams.authKeyOrAppId,
235
+ authSecret: sdkParams.authSecret,
236
+ accountKey: sdkParams.accountKey,
237
+ config: sdkParams.config,
238
+ });
239
+ const QuickBloxVersion = `CALL initData: Init SDK was success: version ${QB.version} build ${QB.buildNumber}`;
240
+
241
+ console.log(QuickBloxVersion);
242
+ //
243
+ this._needInit = false;
244
+ await this.loginWithUser(authData);
245
+ }
246
+ }
247
+
248
+ public async disconnectAndLogoutUser() {
249
+ if (this.authProcessed) {
250
+ QBChatDisconnect();
251
+ await QBLogout();
252
+ this.authProcessed = false;
253
+ this.releaseSubscriptions();
254
+ this.releaseEventsHandlers();
255
+ }
256
+ }
257
+
258
+ releaseSubscriptions(): void {
259
+ Object.entries(this.subscriptionOnSystemMessages).map((x) => {
260
+ const eventName = x[0];
261
+
262
+ return this.subscriptionOnSystemMessages[eventName].release();
263
+ });
264
+ }
265
+
266
+ subscribeOnSystemMessaging(
267
+ notificationType: NotificationTypes,
268
+ callback: CallBackFunction<RemoteMessageDTO>,
269
+ ): void {
270
+ let SystemMessageType: string = NotificationTypes.NEW_DIALOG;
271
+
272
+ switch (notificationType) {
273
+ case NotificationTypes.DELETE_LEAVE_DIALOG:
274
+ SystemMessageType = NotificationTypes.DELETE_LEAVE_DIALOG;
275
+ break;
276
+ case NotificationTypes.UPDATE_DIALOG:
277
+ SystemMessageType = NotificationTypes.UPDATE_DIALOG;
278
+ break;
279
+ default:
280
+ SystemMessageType = NotificationTypes.NEW_DIALOG;
281
+ break;
282
+ }
283
+
284
+ this.subscriptionOnSystemMessages[SystemMessageType].subscribe(
285
+ callback,
286
+ EventMessageType.SystemMessage,
287
+ );
288
+ }
289
+
290
+ protected subscriptionOnSystemMessages: Dictionary<
291
+ SubscriptionPerformer<RemoteMessageDTO>
292
+ > = {};
293
+
294
+ subscribeOnMessaging(callback: CallBackFunction<RemoteMessageDTO>): void {
295
+ this.subscriptionOnChatMessages.subscribe(
296
+ callback,
297
+ EventMessageType.RegularMessage,
298
+ );
299
+ }
300
+
301
+ protected subscriptionOnChatMessages: SubscriptionPerformer<RemoteMessageDTO> =
302
+ new SubscriptionPerformer<RemoteMessageDTO>();
303
+
304
+ protected subscriptionOnMessageStatus: SubscriptionPerformer<DialogEventInfo> =
305
+ new SubscriptionPerformer<DialogEventInfo>();
306
+
307
+ protected subscriptionOnSessionExpiredListener: SubscriptionPerformer<boolean> =
308
+ new SubscriptionPerformer<boolean>();
309
+
310
+ subscribeOnSessionExpiredListener(callback: CallBackFunction<boolean>): void {
311
+ console.log('subscribe On Session Expired Event');
312
+ this.subscriptionOnSessionExpiredListener.subscribe(
313
+ callback,
314
+ EventMessageType.LocalMessage,
315
+ );
316
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
317
+ const sessionTimeOut = QBConfig.appConfig.sessionTimeOut || 122;
318
+
319
+ setTimeout(() => {
320
+ console.log('NEED LOGOUT');
321
+ if (this.authProcessed) {
322
+ this.subscriptionOnSessionExpiredListener.informSubscribers(
323
+ true,
324
+ EventMessageType.LocalMessage,
325
+ );
326
+ }
327
+ }, sessionTimeOut * 60 * 1000);
328
+ }
329
+
330
+ subscribeOnUpdateMessageStatus(
331
+ callback: CallBackFunction<DialogEventInfo>,
332
+ ): void {
333
+ this.subscriptionOnMessageStatus.subscribe(
334
+ callback,
335
+ EventMessageType.LocalMessage,
336
+ );
337
+ }
338
+
339
+ public initEventsHandlers() {
340
+ console.log('CALL--initEventsHandlers--CALL');
341
+ QB.chat.onSystemMessageListener = (message) => {
342
+ console.log(`EVENT: receive system message: ${JSON.stringify(message)}`);
343
+ const resultMessage = new RemoteMessageDTO();
344
+
345
+ resultMessage.sender_id = message.userId;
346
+ resultMessage.message = message.body || 'system message';
347
+ resultMessage.notification_type =
348
+ message.extension.notification_type || NotificationTypes.UPDATE_DIALOG;
349
+ resultMessage.dialogId = message?.extension?.dialog_id || '';
350
+
351
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
352
+ function getEventNameFromNotification(notification_type: string) {
353
+ let EventName = SubscriptionPerformer.DEFAULT_SUBSCRIPTION_NAME;
354
+
355
+ if (
356
+ notification_type === NotificationTypes.UPDATE_DIALOG ||
357
+ notification_type === NotificationTypes.NEW_DIALOG
358
+ ) {
359
+ EventName = 'UPDATE_DIALOG_LIST_INFO';
360
+ }
361
+
362
+ return EventName;
363
+ }
364
+
365
+ this.subscriptionOnSystemMessages[
366
+ resultMessage.notification_type
367
+ ].informSubscribers(resultMessage, EventMessageType.SystemMessage);
368
+ };
369
+
370
+ function ToRemoteMessageDTO(message: QBChatXMPPMessage) {
371
+ const resultMessage = new RemoteMessageDTO();
372
+
373
+ resultMessage.id = message.id;
374
+ resultMessage.message = message.body;
375
+ resultMessage.markable = message.markable
376
+ ? message.markable.toString()
377
+ : '0';
378
+ resultMessage.dialogId = message?.extension?.dialog_id || '';
379
+ // eslint-disable-next-line no-nested-ternary
380
+ resultMessage.recipient_id = message?.recipient_id
381
+ ? parseInt(message?.recipient_id, 10)
382
+ : message?.extension?.sender_id
383
+ ? message?.extension?.sender_id
384
+ : 0;
385
+ resultMessage.sender_id = message?.extension?.sender_id
386
+ ? message?.extension?.sender_id
387
+ : 0;
388
+ resultMessage.notification_type =
389
+ message.notification_type || message.extension.notification_type;
390
+ resultMessage.date_sent = message.extension.date_sent
391
+ ? parseInt(message.extension.date_sent, 10)
392
+ : 0;
393
+ resultMessage.delivered_ids = [];
394
+
395
+ // resultMessage.attachments = message.extension.attachments || [];
396
+ resultMessage.attachments = MessageDTOMapper.transformAttachment(
397
+ message.extension.attachments ? message.extension.attachments : [],
398
+ );
399
+
400
+ return resultMessage;
401
+ }
402
+
403
+ QB.chat.onMessageListener = (
404
+ userId: number,
405
+ message: QBChatXMPPMessage,
406
+ ) => {
407
+ console.log(
408
+ `EVENT: receive message for userid: ${userId}, message: ${stringifyError(
409
+ message,
410
+ )}`,
411
+ );
412
+ // нужно получить реализовать так как при обработке onDeliveredStatusListener
413
+ const dialogId = message.dialog_id || message.extension.dialog_id || '-1';
414
+
415
+ // eslint-disable-next-line promise/catch-or-return,@typescript-eslint/no-unused-vars,promise/always-return
416
+ QBGetDialogById(dialogId).then((result) => {
417
+ // const dialogs: QBChatDialog[] | undefined = result?.items.filter(
418
+ // (v) => v._id === dialogId,
419
+ // );
420
+ // const current = dialogs && dialogs.length > 0 ? dialogs[0] : undefined;
421
+
422
+ // eslint-disable-next-line promise/always-return
423
+ // if (current && current.type === DialogType.group)
424
+ // eslint-disable-next-line no-lone-blocks
425
+ {
426
+ // const messageId = message.id;
427
+ const resultMessage = ToRemoteMessageDTO(message);
428
+
429
+ this.subscriptionOnChatMessages.informSubscribers(
430
+ resultMessage,
431
+ EventMessageType.RegularMessage,
432
+ );
433
+ }
434
+
435
+ //
436
+ });
437
+ };
438
+ QB.chat.onMessageTypingListener = (isTyping, userId, dialogId) => {
439
+ console.log(
440
+ `EVENT: receive typing: ${
441
+ isTyping ? 'true' : 'false'
442
+ }, dialog id: ${dialogId} userid: ${userId}`,
443
+ );
444
+ if (this.authProcessed && this.authInformation?.userId === userId) return;
445
+
446
+ const resultMessage: DialogEventInfo = {
447
+ eventMessageType: EventMessageType.LocalMessage,
448
+ messageInfo: undefined,
449
+ messageStatus: { isTyping, userId, dialogId },
450
+ notificationTypes: undefined,
451
+ };
452
+
453
+ this.subscriptionOnMessageStatus.informSubscribers(
454
+ resultMessage,
455
+ EventMessageType.LocalMessage,
456
+ );
457
+ };
458
+ QB.chat.onSessionExpiredListener = (error) => {
459
+ console.log('call onSessionExpiredListener');
460
+ console.timeLog('onSessionExpiredListener');
461
+ let result = true;
462
+
463
+ if (error) {
464
+ console.log(
465
+ 'EVENT:onSessionExpiredListener - error: ',
466
+ stringifyError(error),
467
+ );
468
+ result = false;
469
+ } else {
470
+ console.log(
471
+ 'EVENT: Hello from SessionExpiredListener. session is expired.',
472
+ );
473
+ result = true;
474
+ }
475
+ this.subscriptionOnSessionExpiredListener.informSubscribers(
476
+ result,
477
+ EventMessageType.LocalMessage,
478
+ );
479
+ };
480
+ QB.chat.onDisconnectedListener = () => {
481
+ console.log('EVENT: disconnect');
482
+ };
483
+ QB.chat.onReconnectListener = () => {
484
+ console.log('EVENT: reconnect');
485
+ };
486
+ QB.chat.onMessageErrorListener = (messageId: string, error: unknown) => {
487
+ console.log(
488
+ `EVENT: receive error messageid: ${messageId}, error: ${stringifyError(
489
+ error,
490
+ )}`,
491
+ );
492
+ };
493
+
494
+ QB.chat.onDeliveredStatusListener = (messageId, dialogId, userId) => {
495
+ console.log(
496
+ `EVENT: receive delivered message id: ${messageId}, dialogid: ${dialogId} userid: ${userId}`,
497
+ );
498
+
499
+ QBGetDialogById(dialogId)
500
+ .then((result) => {
501
+ //
502
+ const dialogs: QBChatDialog[] | undefined = result?.items.filter(
503
+ (v) => v._id === dialogId,
504
+ );
505
+ const current =
506
+ dialogs && dialogs.length > 0 ? dialogs[0] : undefined;
507
+
508
+ // eslint-disable-next-line promise/always-return
509
+ if (current && current.type === DialogType.private) {
510
+ //
511
+ qbChatGetMessagesExtended(dialogId, {
512
+ _id: messageId,
513
+ })
514
+ // eslint-disable-next-line promise/always-return
515
+ .then((qbMessages: GetMessagesResult) => {
516
+ ///
517
+ qbMessages.items.map(async (currentItem) => {
518
+ const dtoMessage: RemoteMessageDTO =
519
+ await this.messageDTOMapper.toTDO<
520
+ QBChatMessage,
521
+ RemoteMessageDTO
522
+ >(currentItem);
523
+
524
+ dtoMessage.dialogId = dialogId;
525
+
526
+ this.subscriptionOnChatMessages.informSubscribers(
527
+ dtoMessage,
528
+ EventMessageType.RegularMessage,
529
+ );
530
+
531
+ return dtoMessage;
532
+ });
533
+
534
+ ///
535
+ })
536
+ .catch();
537
+ //
538
+ }
539
+ })
540
+ .catch();
541
+ };
542
+ QB.chat.onReadStatusListener = (messageId, dialogId, userId) => {
543
+ console.log(
544
+ `EVENT: receive read message id: ${messageId}, dialogid: ${dialogId} userid: ${userId}`,
545
+ );
546
+ };
547
+
548
+ //
549
+ }
550
+
551
+ // eslint-disable-next-line class-methods-use-this
552
+ public releaseEventsHandlers() {
553
+ QB.chat.onSessionExpiredListener = undefined;
554
+ QB.chat.onReconnectListener = undefined;
555
+ QB.chat.onDisconnectedListener = undefined;
556
+ QB.chat.onSystemMessageListener = undefined;
557
+ QB.chat.onMessageListener = undefined;
558
+ QB.chat.onMessageErrorListener = undefined;
559
+ QB.chat.onDeliveredStatusListener = undefined;
560
+ QB.chat.onReadStatusListener = undefined;
561
+ QB.chat.onMessageTypingListener = undefined;
562
+ }
563
+
564
+ public async loginWithUser(authParams: LoginData) {
565
+ if (this.needInit) return;
566
+ if (this.authProcessed) return;
567
+ //
568
+ console.log('CALL createUserSession....');
569
+ const userRequiredParams = {
570
+ login: authParams.login,
571
+ password: authParams.password,
572
+ };
573
+ const sessionResult = await this.createUserSession(
574
+ userRequiredParams,
575
+ ).catch((e) => {
576
+ this._needInit = true;
577
+ this.authProcessed = false;
578
+ console.log(
579
+ `EXCEPTION IN CREATE USER SESSION (${
580
+ userRequiredParams.login
581
+ }) : ${stringifyError(e)}`,
582
+ );
583
+ });
584
+
585
+ if (!sessionResult) return;
586
+ //
587
+ //
588
+ this.initEventsHandlers();
589
+ //
590
+ //
591
+ console.log('USER DATA : ', userRequiredParams);
592
+ console.log('USER SESSION DATA : ', sessionResult);
593
+ console.log('Session token : ', sessionResult.token);
594
+
595
+ const session = sessionResult;
596
+ const sessionDataTmp = JSON.stringify(session);
597
+
598
+ const sessionData = JSON.parse(sessionDataTmp);
599
+
600
+ // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
601
+ console.log(`user_id = ${sessionData.user_id}`);
602
+ // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
603
+ console.log(`session token to chat init = ${sessionData.token}`);
604
+ const authInformation = {
605
+ userName: authParams.login,
606
+ userId: sessionData.user_id,
607
+ sessionToken: sessionData.token,
608
+ password: sessionData.token,
609
+ };
610
+
611
+ const paramsConnect = {
612
+ userId: authInformation.userId,
613
+ password: authInformation.password,
614
+ };
615
+
616
+ console.log(paramsConnect);
617
+ //
618
+ const connectResult = await QBChatConnect(paramsConnect);
619
+
620
+ if (connectResult) {
621
+ //
622
+ this._authInformation = authInformation;
623
+ this.setAuthProcessedSuccessed();
624
+ console.log('CHAT CONNECTED. CAN WORK!');
625
+ console.log('CONNECTION DATA: ', JSON.stringify(authInformation));
626
+ // //
627
+ // this.initEventsHandlers();
628
+ // //
629
+ } else {
630
+ console.log('could not connect to chat');
631
+ }
632
+
633
+ //
634
+ }
635
+
636
+ async getDialogs(pagination?: Pagination): Promise<RemoteDialogsDTO> {
637
+ let currentPagination: Pagination = pagination || new Pagination();
638
+
639
+ console.log(
640
+ 'call getDialogs in RemoteDataSourceMock param pagination: ',
641
+ JSON.stringify(pagination),
642
+ );
643
+ console.log(
644
+ 'call getDialogs in RemoteDataSourceMock with result pagination: ',
645
+ JSON.stringify(currentPagination),
646
+ );
647
+ const pageNumber = currentPagination.getCurrentPage() || 1;
648
+
649
+ console.log('pageNumber: ', pageNumber);
650
+ const perPage = currentPagination.perPage || 100;
651
+
652
+ console.log('perPage: ', perPage);
653
+ const params = {
654
+ created_at: {
655
+ lt: Date.now() / 1000,
656
+ },
657
+ sort_desc: 'created_at',
658
+ page: pageNumber,
659
+ // per_page: perPage,
660
+ limit: perPage,
661
+ type: {
662
+ in: [2, 3],
663
+ },
664
+ };
665
+ // filter['type[in]'] = [3, 2].join(',');
666
+
667
+ console.log(
668
+ 'call getDialogs in RemoteDataSourceMock with params: ',
669
+ JSON.stringify(params),
670
+ );
671
+ const dialogsDTO: Array<RemoteDialogDTO> = [];
672
+ const qbDialogs: QBGetDialogResult | undefined = await QBGetDialogs(params);
673
+
674
+ if (qbDialogs) {
675
+ console.log(
676
+ `request completed. have: total_entries ${
677
+ qbDialogs.total_entries
678
+ }, limit: ${qbDialogs.limit}, skip: ${
679
+ qbDialogs.skip
680
+ } items: ${JSON.stringify(qbDialogs.items)}`,
681
+ );
682
+ currentPagination = new Pagination(0, perPage);
683
+ currentPagination.totalPages = qbDialogs.total_entries / perPage;
684
+ currentPagination.setCurrentPage(pageNumber);
685
+
686
+ // eslint-disable-next-line no-restricted-syntax
687
+ for (const item of qbDialogs.items) {
688
+ const qbEntity: QBChatDialog = item;
689
+
690
+ const newDTO: RemoteDialogDTO =
691
+ // eslint-disable-next-line no-await-in-loop
692
+ await this.getCurrentDialogDTOMapper().toTDO(qbEntity);
693
+
694
+ // artan 27/06/23
695
+ if (newDTO.type === DialogType.group) {
696
+ // eslint-disable-next-line no-await-in-loop
697
+ await QBJoinGroupDialog(newDTO.id).catch(() => {
698
+ throw new RemoteDataSourceException(
699
+ INCORRECT_REMOTE_DATASOURCE_DATA_EXCEPTION_MESSAGE,
700
+ INCORRECT_REMOTE_DATASOURCE_DATA_EXCEPTION_CODE,
701
+ );
702
+ });
703
+ }
704
+
705
+ //
706
+
707
+ dialogsDTO.push(newDTO);
708
+ }
709
+ }
710
+ /*
711
+ await Promise.all(
712
+ fromRemote.ResultData.map(async (entity) => {
713
+ // eslint-disable-next-line no-return-await
714
+ return await this.dialogRepository.saveDialogToLocal(entity);
715
+ }),
716
+ );
717
+ */
718
+
719
+ return Promise.resolve(new RemoteDialogsDTO(dialogsDTO, currentPagination));
720
+ }
721
+
722
+ // eslint-disable-next-line class-methods-use-this
723
+ async createDialog(dto: RemoteDialogDTO): Promise<RemoteDialogDTO> {
724
+ console.log(
725
+ 'call createDialog in remote with params: ',
726
+ JSON.stringify(dto),
727
+ );
728
+ const qbEntity: QBChatDialog =
729
+ await this.getCurrentDialogDTOMapper().fromDTO(dto);
730
+
731
+ let qbDialog: QBChatDialog | undefined | null;
732
+
733
+ if (qbEntity.type === DialogType.private) {
734
+ const participantId = qbEntity.occupants_ids[0];
735
+
736
+ qbDialog = await QBCreatePrivateDialog(participantId, qbEntity.name);
737
+ } else if (qbEntity.type === DialogType.group) {
738
+ const participants = qbEntity.occupants_ids;
739
+
740
+ const data = { photo: qbEntity.photo };
741
+
742
+ qbDialog = await QBCreateGroupDialog(participants, qbEntity.name, data);
743
+ }
744
+
745
+ if (qbDialog === null || qbDialog === undefined) {
746
+ return Promise.reject(
747
+ new RemoteDataSourceException(
748
+ INCORRECT_REMOTE_DATASOURCE_DATA_EXCEPTION_MESSAGE,
749
+ INCORRECT_REMOTE_DATASOURCE_DATA_EXCEPTION_CODE,
750
+ ),
751
+ );
752
+ }
753
+
754
+ const newDTO: RemoteDialogDTO =
755
+ await this.getCurrentDialogDTOMapper().toTDO(qbDialog);
756
+
757
+ console.log(
758
+ 'have result in createDialog in remote ds: ',
759
+ JSON.stringify(newDTO),
760
+ );
761
+
762
+ return Promise.resolve(newDTO);
763
+ }
764
+
765
+ async updateDialog(dto: RemoteDialogDTO): Promise<RemoteDialogDTO> {
766
+ const qbEntity: QBChatDialog =
767
+ await this.getCurrentDialogDTOMapper().fromDTO(dto);
768
+
769
+ let data = {};
770
+
771
+ if (qbEntity.name && qbEntity.name.length > 0) {
772
+ data = {
773
+ name: qbEntity.name,
774
+ // photo: qbEntity.photo,
775
+ // photo: 'null',
776
+ ...data,
777
+ };
778
+ }
779
+ if (qbEntity.photo) {
780
+ data = {
781
+ ...data,
782
+ photo: qbEntity.photo,
783
+ };
784
+ }
785
+ if (qbEntity.new_occupants_ids?.length > 0) {
786
+ data = {
787
+ ...data,
788
+ push_all: { occupants_ids: qbEntity.new_occupants_ids },
789
+ };
790
+ }
791
+
792
+ const qbDialogs: QBChatDialog = await QBUpdateDialog(qbEntity._id, data);
793
+
794
+ if (qbDialogs === null || qbDialogs === undefined) {
795
+ return Promise.reject(
796
+ new RemoteDataSourceException(
797
+ INCORRECT_REMOTE_DATASOURCE_DATA_EXCEPTION_MESSAGE,
798
+ INCORRECT_REMOTE_DATASOURCE_DATA_EXCEPTION_CODE,
799
+ ),
800
+ );
801
+ }
802
+
803
+ const newDTO: RemoteDialogDTO =
804
+ await this.getCurrentDialogDTOMapper().toTDO(qbDialogs);
805
+
806
+ return Promise.resolve(newDTO);
807
+ }
808
+
809
+ // eslint-disable-next-line class-methods-use-this
810
+ async getDialog(dto: RemoteDialogDTO): Promise<RemoteDialogDTO> {
811
+ const qbEntity: QBChatDialog =
812
+ await this.getCurrentDialogDTOMapper().fromDTO(dto);
813
+
814
+ const qbDialog: QBGetDialogResult | undefined = await QBGetDialogById(
815
+ qbEntity._id,
816
+ );
817
+
818
+ if (qbDialog === null || qbDialog === undefined) {
819
+ return Promise.reject(
820
+ new RemoteDataSourceException(
821
+ INCORRECT_REMOTE_DATASOURCE_DATA_EXCEPTION_MESSAGE,
822
+ INCORRECT_REMOTE_DATASOURCE_DATA_EXCEPTION_CODE,
823
+ ),
824
+ );
825
+ }
826
+ const qbEntityFromDB: QBChatDialog = qbDialog.items[0];
827
+
828
+ const resultDTO: RemoteDialogDTO =
829
+ await this.getCurrentDialogDTOMapper().toTDO(qbEntityFromDB);
830
+
831
+ return Promise.resolve(resultDTO);
832
+ }
833
+
834
+ // eslint-disable-next-line class-methods-use-this
835
+ async deleteDialog(dto: RemoteDialogDTO): Promise<void> {
836
+ const qbEntity: QBChatDialog =
837
+ await this.getCurrentDialogDTOMapper().fromDTO(dto);
838
+
839
+ await QBDeleteDialog([qbEntity._id]).catch(() => {
840
+ throw new RemoteDataSourceException(
841
+ INCORRECT_REMOTE_DATASOURCE_DATA_EXCEPTION_MESSAGE,
842
+ INCORRECT_REMOTE_DATASOURCE_DATA_EXCEPTION_CODE,
843
+ );
844
+ });
845
+
846
+ return Promise.resolve();
847
+ }
848
+
849
+ async deleteUsersFromDialog(
850
+ dialogDTO: RemoteDialogDTO,
851
+ usersDTO: Array<RemoteUserDTO>,
852
+ ): Promise<void> {
853
+ const qbEntity: QBChatDialog =
854
+ await this.getCurrentDialogDTOMapper().fromDTO(dialogDTO);
855
+ const usersIds: string[] = [];
856
+
857
+ usersDTO.forEach((item) => {
858
+ usersIds.push(item.id);
859
+ });
860
+
861
+ let data = {};
862
+
863
+ if (usersIds.length > 0) {
864
+ data = {
865
+ pull_all: { occupants_ids: usersIds },
866
+ };
867
+ }
868
+ const qbDialogs: QBChatDialog = await QBUpdateDialog(qbEntity._id, data);
869
+
870
+ if (qbDialogs === null || qbDialogs === undefined) {
871
+ return Promise.reject(
872
+ new RemoteDataSourceException(
873
+ INCORRECT_REMOTE_DATASOURCE_DATA_EXCEPTION_MESSAGE,
874
+ INCORRECT_REMOTE_DATASOURCE_DATA_EXCEPTION_CODE,
875
+ ),
876
+ );
877
+ }
878
+
879
+ return Promise.resolve();
880
+ }
881
+
882
+ // eslint-disable-next-line @typescript-eslint/require-await,class-methods-use-this,@typescript-eslint/no-unused-vars
883
+ async getUser(dto: RemoteUserDTO): Promise<RemoteUserDTO> {
884
+ const currentItem: QBUser | undefined = await QBUsersGetById(
885
+ parseInt(dto.id, 10),
886
+ );
887
+
888
+ if (currentItem === null || currentItem === undefined) {
889
+ return Promise.reject(
890
+ new RemoteDataSourceException(
891
+ INCORRECT_REMOTE_DATASOURCE_DATA_EXCEPTION_MESSAGE,
892
+ INCORRECT_REMOTE_DATASOURCE_DATA_EXCEPTION_CODE,
893
+ ),
894
+ );
895
+ }
896
+ let dtoUser: RemoteUserDTO | undefined;
897
+
898
+ try {
899
+ dtoUser = await this.userDTOMapper.toTDO<QBUser, RemoteUserDTO>(
900
+ currentItem,
901
+ );
902
+ } catch (e) {
903
+ console.log('problem with:');
904
+ console.log(JSON.stringify(currentItem));
905
+ console.log((e as MapperDTOException).message);
906
+ console.log((e as MapperDTOException)._description);
907
+ }
908
+
909
+ if (dtoUser !== null || dtoUser !== undefined) {
910
+ return Promise.resolve(dtoUser as RemoteUserDTO);
911
+ }
912
+
913
+ return Promise.reject(
914
+ new RemoteDataSourceException(
915
+ NOT_FOUND_REMOTE_DATASOURCE_EXCEPTION_MESSAGE,
916
+ NOT_FOUND_REMOTE_DATASOURCE_EXCEPTION_CODE,
917
+ `not found user with id: ${dto.id} (${dto.full_name})`,
918
+ ),
919
+ );
920
+ }
921
+
922
+ // eslint-disable-next-line @typescript-eslint/require-await,class-methods-use-this,@typescript-eslint/no-unused-vars
923
+ async getUsers(remoteUsersDTO: RemoteUsersDTO): Promise<RemoteUsersDTO> {
924
+ const usersDTO: Array<RemoteUserDTO> = new Array<RemoteUserDTO>();
925
+
926
+ // eslint-disable-next-line no-restricted-syntax
927
+ for (const item of remoteUsersDTO.users) {
928
+ // eslint-disable-next-line no-await-in-loop
929
+ const userDTO = await this.getUser(item);
930
+
931
+ usersDTO.push(userDTO);
932
+ }
933
+
934
+ return Promise.resolve(new RemoteUsersDTO(usersDTO, new Pagination()));
935
+ }
936
+
937
+ //
938
+ // eslint-disable-next-line class-methods-use-this
939
+ public async getAllUsers(
940
+ pagination: Pagination,
941
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
942
+ filter?: string,
943
+ ): Promise<PaginatedDTOResult> {
944
+ console.log('call getAllUsers');
945
+
946
+ console.log('pagination: ', JSON.stringify(pagination));
947
+
948
+ const users: RemoteUserDTO[] = [];
949
+ const pageTemplate = {
950
+ pageSize: pagination.perPage,
951
+ startPageNumber: pagination.getCurrentPage(),
952
+ };
953
+ const pageNumber = pageTemplate.startPageNumber;
954
+ const resultPagination = new Pagination(
955
+ pageNumber,
956
+ pageTemplate.startPageNumber,
957
+ );
958
+
959
+ let params: GetUserParams = {
960
+ per_page: pageTemplate.pageSize,
961
+ page: pageNumber,
962
+ };
963
+
964
+ if (filter && filter.length > 2) {
965
+ params = {
966
+ full_name: filter,
967
+ per_page: pageTemplate.pageSize,
968
+ page: pageNumber > 0 ? pageNumber : 1,
969
+ };
970
+ }
971
+
972
+ console.log('params: ', JSON.stringify(params));
973
+
974
+ // eslint-disable-next-line no-await-in-loop
975
+ const response: ListUserResponse | void = await QBUsersGet(params).catch(
976
+ (err) => {
977
+ console.log('catch call QBUsersGet : ', stringifyError(err));
978
+ },
979
+ );
980
+
981
+ if (response === undefined || response === null) {
982
+ throw new RemoteDataSourceException(
983
+ NOT_FOUND_REMOTE_DATASOURCE_EXCEPTION_MESSAGE,
984
+ NOT_FOUND_REMOTE_DATASOURCE_EXCEPTION_CODE,
985
+ `params: ${JSON.stringify(params)}`,
986
+ );
987
+ }
988
+ let currentItem: QBUser;
989
+
990
+ console.log('response: total_entries: ', response.total_entries);
991
+ console.log('response: per_page: ', response.per_page);
992
+ console.log('response: current_page: ', response.current_page);
993
+
994
+ resultPagination.totalPages =
995
+ response.total_entries / pageTemplate.pageSize;
996
+ resultPagination.setCurrentPage(response.current_page);
997
+ console.log(
998
+ `response result: count of items ${
999
+ response.items.length
1000
+ } items: ${JSON.stringify(response.items)}`,
1001
+ );
1002
+ try {
1003
+ // todo: переписать без циклов await
1004
+ // eslint-disable-next-line no-restricted-syntax
1005
+ for (const item of response.items) {
1006
+ currentItem = item.user;
1007
+ // eslint-disable-next-line no-await-in-loop
1008
+ const dtoUser: RemoteUserDTO = await this.userDTOMapper.toTDO<
1009
+ QBUser,
1010
+ RemoteUserDTO
1011
+ >(currentItem);
1012
+
1013
+ users.push(dtoUser);
1014
+ }
1015
+ } catch (e) {
1016
+ console.log('problem with:');
1017
+ console.log(JSON.stringify(currentItem!));
1018
+ console.log((e as MapperDTOException).message);
1019
+ console.log((e as MapperDTOException)._description);
1020
+ }
1021
+
1022
+ return { ResultData: users, PaginationResult: resultPagination };
1023
+ }
1024
+ //
1025
+ //
1026
+
1027
+ // eslint-disable-next-line @typescript-eslint/require-await,class-methods-use-this,@typescript-eslint/no-unused-vars,@typescript-eslint/ban-ts-comment
1028
+ // @ts-ignore
1029
+ // eslint-disable-next-line @typescript-eslint/require-await,class-methods-use-this
1030
+ async getMessages(
1031
+ dialogId: string,
1032
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
1033
+ pagination: Pagination,
1034
+ ): Promise<RemoteMessagesDTO> {
1035
+ const messagesDTO: Array<RemoteMessageDTO> = new Array<RemoteMessageDTO>();
1036
+
1037
+ // // artan 22.06.23 перенесли в то место, где получаем весь список диалогов
1038
+ // await QBJoinGroupDialog(dialogId).catch(() => {
1039
+ // throw new RemoteDataSourceException(
1040
+ // INCORRECT_REMOTE_DATASOURCE_DATA_EXCEPTION_MESSAGE,
1041
+ // INCORRECT_REMOTE_DATASOURCE_DATA_EXCEPTION_CODE,
1042
+ // );
1043
+ // });
1044
+ //
1045
+
1046
+ const qbMessages: GetMessagesResult = await qbChatGetMessagesExtended(
1047
+ dialogId,
1048
+ );
1049
+ // const qbMessages: GetMessagesResult & { dialogId: QBChatDialog['_id'] } =
1050
+ // await QBChatGetMessages(dialogId);
1051
+
1052
+ if (qbMessages === null || qbMessages === undefined) {
1053
+ return Promise.reject(
1054
+ new RemoteDataSourceException(
1055
+ INCORRECT_REMOTE_DATASOURCE_DATA_EXCEPTION_MESSAGE,
1056
+ INCORRECT_REMOTE_DATASOURCE_DATA_EXCEPTION_CODE,
1057
+ ),
1058
+ );
1059
+ }
1060
+ console.log(
1061
+ `GET MESSAGES ${qbMessages.items.length} FROM SERVER: ${JSON.stringify(
1062
+ qbMessages,
1063
+ )} `,
1064
+ );
1065
+ const currentUserId = this._authInformation?.userId;
1066
+
1067
+ await Promise.all(
1068
+ qbMessages.items.map(async (currentItem) => {
1069
+ const dtoMessage: RemoteMessageDTO = await this.messageDTOMapper.toTDO<
1070
+ QBChatMessage,
1071
+ RemoteMessageDTO
1072
+ >(currentItem);
1073
+
1074
+ if (
1075
+ this.authProcessed &&
1076
+ currentUserId &&
1077
+ dtoMessage.read_ids &&
1078
+ dtoMessage.read_ids.length > 0 &&
1079
+ dtoMessage.read_ids.includes(currentUserId) === false
1080
+ ) {
1081
+ QBChatMarkMessageRead({
1082
+ messageId: dtoMessage.id,
1083
+ dialogId: dtoMessage.dialogId,
1084
+ userId: currentUserId,
1085
+ });
1086
+ }
1087
+
1088
+ messagesDTO.push(dtoMessage);
1089
+
1090
+ return dtoMessage;
1091
+ }),
1092
+ );
1093
+
1094
+ return Promise.resolve(
1095
+ new RemoteMessagesDTO(messagesDTO, new Pagination()),
1096
+ );
1097
+ }
1098
+
1099
+ // eslint-disable-next-line class-methods-use-this
1100
+ async typingMessageStart(
1101
+ dialogDTO: RemoteDialogDTO,
1102
+ senderId: number,
1103
+ ): Promise<void> {
1104
+ const qbEntity: QBChatDialog =
1105
+ await this.getCurrentDialogDTOMapper().fromDTO(dialogDTO);
1106
+
1107
+ if (dialogDTO.type === DialogType.group) {
1108
+ await QBJoinGroupDialog(dialogDTO.id).catch(() => {
1109
+ throw new RemoteDataSourceException(
1110
+ INCORRECT_REMOTE_DATASOURCE_DATA_EXCEPTION_MESSAGE,
1111
+ INCORRECT_REMOTE_DATASOURCE_DATA_EXCEPTION_CODE,
1112
+ );
1113
+ });
1114
+ }
1115
+
1116
+ QBSendIsTypingStatus(qbEntity, senderId);
1117
+
1118
+ return Promise.resolve();
1119
+ }
1120
+
1121
+ // eslint-disable-next-line class-methods-use-this
1122
+ async typingMessageStop(
1123
+ dialogDTO: RemoteDialogDTO,
1124
+ senderId: number,
1125
+ ): Promise<void> {
1126
+ const qbEntity: QBChatDialog =
1127
+ await this.getCurrentDialogDTOMapper().fromDTO(dialogDTO);
1128
+
1129
+ QBSendIsStopTypingStatus(qbEntity, senderId);
1130
+
1131
+ return Promise.resolve();
1132
+ }
1133
+
1134
+ // eslint-disable-next-line @typescript-eslint/require-await,class-methods-use-this,@typescript-eslint/no-unused-vars
1135
+ async sendMessage(dto: RemoteMessageDTO): Promise<RemoteMessageDTO> {
1136
+ console.log('call sendMessage');
1137
+ // const qbEntity: QBChatNewMessage = await this.messageDTOMapper.fromDTO<
1138
+ // RemoteMessageDTO,
1139
+ // QBChatNewMessage
1140
+ // >(dto);
1141
+
1142
+ /*
1143
+
1144
+ msg.type = 'groupchat';
1145
+ msg.body = `${this.userService.user.full_name} left the chat.`;
1146
+ msg.extension.notification_type = 3;
1147
+ msg.extension.save_to_history = 1;
1148
+ msg.dialog_id = dialog._id;
1149
+ msg.extension.dialog_id = dialog._id;
1150
+ msg.extension.dialog_updated_at = Date.now() / 1000;
1151
+
1152
+ */
1153
+ // notification_type: 3,
1154
+ // dialog_updated_at: Date.now() / 1000,
1155
+ let messageText = '';
1156
+
1157
+ switch (dto.notification_type) {
1158
+ case NotificationTypes.DELETE_LEAVE_DIALOG: {
1159
+ messageText = `${
1160
+ this.authInformation?.userName || 'owner'
1161
+ } has left the chat.`;
1162
+ break;
1163
+ }
1164
+ case NotificationTypes.NEW_DIALOG: {
1165
+ messageText = `${
1166
+ this.authInformation?.userName || 'owner'
1167
+ } create the chat`;
1168
+ break;
1169
+ }
1170
+ case NotificationTypes.UPDATE_DIALOG: {
1171
+ messageText = `${
1172
+ this.authInformation?.userName || 'owner'
1173
+ } update the chat`;
1174
+ break;
1175
+ }
1176
+ default: {
1177
+ messageText = dto.message;
1178
+ break;
1179
+ }
1180
+ }
1181
+ const qbEntity: QBChatNewMessage = {
1182
+ type: dto.dialog_type === DialogType.private ? 'chat' : 'groupchat',
1183
+ body: messageText,
1184
+ notification_type: dto.notification_type,
1185
+ dialog_id: dto.dialogId,
1186
+ extension: {
1187
+ save_to_history: 1,
1188
+ dialog_id: dto.dialogId,
1189
+ notification_type: dto.notification_type,
1190
+ sender_id: dto.sender_id || dto.recipient_id,
1191
+ },
1192
+ markable: 1,
1193
+ };
1194
+
1195
+ if (dto.attachments?.length > 0) {
1196
+ qbEntity.extension.attachments = [];
1197
+ dto.attachments.forEach((att) => {
1198
+ const chatMessageAttachment: ChatMessageAttachment = {
1199
+ id: att.id,
1200
+ name: att.name,
1201
+ size: att.size,
1202
+ type: att.type.toString(),
1203
+ uid: att.uid,
1204
+ };
1205
+
1206
+ qbEntity.extension.attachments?.push(chatMessageAttachment);
1207
+ });
1208
+ }
1209
+ let qbMessages: QBChatMessage['_id'];
1210
+
1211
+ if (dto.dialog_type === DialogType.private) {
1212
+ qbMessages = await QBChatSendMessage(dto.recipient_id, qbEntity);
1213
+ } else {
1214
+ await QBJoinGroupDialog(dto.dialogId).catch(() => {
1215
+ throw new RemoteDataSourceException(
1216
+ INCORRECT_REMOTE_DATASOURCE_DATA_EXCEPTION_MESSAGE,
1217
+ INCORRECT_REMOTE_DATASOURCE_DATA_EXCEPTION_CODE,
1218
+ );
1219
+ });
1220
+ const dialogJid = QB.chat.helpers.getRoomJidFromDialogId(dto.dialogId);
1221
+
1222
+ qbMessages = await QBChatSendMessage(dialogJid, qbEntity);
1223
+ }
1224
+
1225
+ if (qbMessages === null || qbMessages === undefined) {
1226
+ return Promise.reject(
1227
+ new RemoteDataSourceException(
1228
+ INCORRECT_REMOTE_DATASOURCE_DATA_EXCEPTION_MESSAGE,
1229
+ INCORRECT_REMOTE_DATASOURCE_DATA_EXCEPTION_CODE,
1230
+ ),
1231
+ );
1232
+ }
1233
+ console.log('regular message was sent');
1234
+
1235
+ return Promise.resolve(dto);
1236
+ }
1237
+
1238
+ // eslint-disable-next-line class-methods-use-this
1239
+ async sendSystemMessage(dto: RemoteMessageDTO): Promise<boolean> {
1240
+ let qbMessages: QBSystemMessage | QBChatMessage['_id'] | undefined;
1241
+
1242
+ if (dto.notification_type && dto.notification_type.length > 0) {
1243
+ const systemMessage: QBSystemMessage = {
1244
+ body: null,
1245
+ id: '',
1246
+ userId: this.authInformation?.userId || 0,
1247
+ extension: {
1248
+ notification_type: dto.notification_type,
1249
+ dialog_id: dto.dialogId,
1250
+ },
1251
+ };
1252
+
1253
+ qbMessages = await QBChatSendSystemMessage(
1254
+ dto.recipient_id,
1255
+ systemMessage,
1256
+ );
1257
+ }
1258
+
1259
+ if (qbMessages === null || qbMessages === undefined) {
1260
+ return Promise.reject(
1261
+ new RemoteDataSourceException(
1262
+ INCORRECT_REMOTE_DATASOURCE_DATA_EXCEPTION_MESSAGE,
1263
+ INCORRECT_REMOTE_DATASOURCE_DATA_EXCEPTION_CODE,
1264
+ ),
1265
+ );
1266
+ }
1267
+ console.log('system message was sent');
1268
+
1269
+ return Promise.resolve(true);
1270
+ }
1271
+
1272
+ // eslint-disable-next-line @typescript-eslint/require-await,class-methods-use-this,@typescript-eslint/no-unused-vars
1273
+ async updateMessage(
1274
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
1275
+ dto: RemoteMessageDTO,
1276
+ ): Promise<RemoteMessageDTO> {
1277
+ const qbEntity: QBChatMessage = await this.messageDTOMapper.fromDTO(dto);
1278
+
1279
+ const storageValue = localStorage.getItem('qbMessages');
1280
+ const result: string = storageValue ?? '';
1281
+
1282
+ const qbMessages: Record<string, QBChatMessage> =
1283
+ result === '' ? {} : JSON.parse(result);
1284
+
1285
+ if (qbMessages === null || qbMessages === undefined) {
1286
+ return Promise.reject(
1287
+ new RemoteDataSourceException(
1288
+ INCORRECT_REMOTE_DATASOURCE_DATA_EXCEPTION_MESSAGE,
1289
+ INCORRECT_REMOTE_DATASOURCE_DATA_EXCEPTION_CODE,
1290
+ ),
1291
+ );
1292
+ }
1293
+ qbMessages[qbEntity._id] = qbEntity;
1294
+
1295
+ // TODO: How get updated QBChatDialog and return to DTO
1296
+ localStorage.setItem('qbMessages', JSON.stringify(qbMessages));
1297
+
1298
+ const newDTO: RemoteMessageDTO = await this.messageDTOMapper.toTDO(
1299
+ qbEntity,
1300
+ );
1301
+
1302
+ return Promise.resolve(newDTO);
1303
+ }
1304
+
1305
+ // eslint-disable-next-line @typescript-eslint/require-await,class-methods-use-this,@typescript-eslint/no-unused-vars
1306
+ async deleteMessage(dto: RemoteMessageDTO): Promise<void> {
1307
+ const qbEntity: QBChatMessage = await this.messageDTOMapper.fromDTO(dto);
1308
+
1309
+ const storageValue = localStorage.getItem('qbMessages');
1310
+ const result: string = storageValue ?? '';
1311
+
1312
+ const qbMessages: Record<string, QBChatMessage> =
1313
+ result === '' ? {} : JSON.parse(result);
1314
+
1315
+ if (qbMessages === null || qbMessages === undefined) {
1316
+ return Promise.reject(
1317
+ new RemoteDataSourceException(
1318
+ INCORRECT_REMOTE_DATASOURCE_DATA_EXCEPTION_MESSAGE,
1319
+ INCORRECT_REMOTE_DATASOURCE_DATA_EXCEPTION_CODE,
1320
+ ),
1321
+ );
1322
+ }
1323
+ // TODO: try catch for delete
1324
+ const filteredqbMessages: Record<string, QBChatMessage> = {};
1325
+
1326
+ Object.keys(qbMessages).forEach((key) => {
1327
+ if (key !== qbEntity._id) {
1328
+ filteredqbMessages[key] = qbMessages[key];
1329
+ }
1330
+ });
1331
+
1332
+ localStorage.setItem('qbMessages', JSON.stringify(filteredqbMessages));
1333
+
1334
+ return Promise.resolve();
1335
+ }
1336
+
1337
+ // eslint-disable-next-line @typescript-eslint/require-await,class-methods-use-this,@typescript-eslint/no-unused-vars
1338
+ async createFile(dto: RemoteFileDTO): Promise<RemoteFileDTO> {
1339
+ console.log('call createFile in remote with params: ', JSON.stringify(dto));
1340
+ const qbParam: QBContentParam = await this.fileDTOMapper.fromDTO(dto);
1341
+
1342
+ const result = await QBCreateAndUploadContent(qbParam).catch((err) => {
1343
+ console.log('Error: ', stringifyError(err));
1344
+ throw new RemoteDataSourceException(
1345
+ INCORRECT_REMOTE_DATASOURCE_DATA_EXCEPTION_MESSAGE,
1346
+ INCORRECT_REMOTE_DATASOURCE_DATA_EXCEPTION_CODE,
1347
+ `exception: ${stringifyError(err)}`,
1348
+ );
1349
+ });
1350
+
1351
+ if (result === null || result === undefined) {
1352
+ return Promise.reject(
1353
+ new RemoteDataSourceException(
1354
+ INCORRECT_REMOTE_DATASOURCE_DATA_EXCEPTION_MESSAGE,
1355
+ INCORRECT_REMOTE_DATASOURCE_DATA_EXCEPTION_CODE,
1356
+ ),
1357
+ );
1358
+ }
1359
+
1360
+ const qbContentObject: QBContentObject = result as QBContentObject;
1361
+ const newDto: RemoteFileDTO = await this.fileDTOMapper.toTDO<
1362
+ QBContentObject,
1363
+ RemoteFileDTO
1364
+ >(qbContentObject);
1365
+
1366
+ console.log(
1367
+ 'have result in createFile in remote ds: ',
1368
+ JSON.stringify(newDto),
1369
+ );
1370
+
1371
+ return Promise.resolve(newDto);
1372
+ }
1373
+
1374
+ // eslint-disable-next-line @typescript-eslint/require-await,class-methods-use-this,@typescript-eslint/no-unused-vars
1375
+ async getFile(dto: RemoteFileDTO): Promise<RemoteFileDTO> {
1376
+ throw new Error('Method not implemented.');
1377
+ }
1378
+
1379
+ // eslint-disable-next-line @typescript-eslint/require-await,class-methods-use-this,@typescript-eslint/no-unused-vars
1380
+ async deleteFile(dto: RemoteFileDTO): Promise<void> {
1381
+ throw new Error('Method not implemented.');
1382
+ }
1383
+
1384
+ // eslint-disable-next-line @typescript-eslint/require-await,class-methods-use-this,@typescript-eslint/no-unused-vars
1385
+ async subscribeToChatConnectionEvents(
1386
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
1387
+ fileId: string,
1388
+ ): Promise<void> {
1389
+ throw new Error('Method not implemented.');
1390
+ }
1391
+ }