@ozdao/martyrs 0.2.519 → 0.2.520

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 (341) hide show
  1. package/dist/chats.server.cjs +198 -1
  2. package/dist/chats.server.js +198 -1
  3. package/dist/{main-Wr1_4rwl.cjs → main-BM3GslOO.cjs} +6 -6
  4. package/dist/{main-DgGUrhjT.js → main-Qcn7YlTx.js} +1832 -1828
  5. package/dist/martyrs/src/components/Address/{Address.vue2.cjs → Address.vue.cjs} +2 -2
  6. package/dist/martyrs/src/components/Address/{Address.vue2.js.map → Address.vue.cjs.map} +1 -1
  7. package/dist/martyrs/src/components/Address/{Address.vue2.js → Address.vue.js} +2 -2
  8. package/dist/martyrs/src/components/Address/Address.vue.js.map +1 -0
  9. package/dist/martyrs/src/components/Feed/Feed.vue.cjs +0 -1
  10. package/dist/martyrs/src/components/Feed/Feed.vue.cjs.map +1 -1
  11. package/dist/martyrs/src/components/Feed/Feed.vue.js +0 -1
  12. package/dist/martyrs/src/components/Feed/Feed.vue.js.map +1 -1
  13. package/dist/martyrs/src/components/LocationMarker/{LocationMarker.vue2.cjs → LocationMarker.vue.cjs} +2 -2
  14. package/dist/martyrs/src/components/LocationMarker/{LocationMarker.vue2.js.map → LocationMarker.vue.cjs.map} +1 -1
  15. package/dist/martyrs/src/components/LocationMarker/{LocationMarker.vue2.js → LocationMarker.vue.js} +2 -2
  16. package/dist/martyrs/src/components/LocationMarker/LocationMarker.vue.js.map +1 -0
  17. package/dist/martyrs/src/components/Select/{Select.vue2.cjs → Select.vue.cjs} +2 -2
  18. package/dist/martyrs/src/components/Select/{Select.vue2.js.map → Select.vue.cjs.map} +1 -1
  19. package/dist/martyrs/src/components/Select/{Select.vue2.js → Select.vue.js} +2 -2
  20. package/dist/martyrs/src/components/Select/Select.vue.js.map +1 -0
  21. package/dist/martyrs/src/modules/auth/views/components/blocks/CardUser.vue.cjs +2 -2
  22. package/dist/martyrs/src/modules/auth/views/components/blocks/CardUser.vue.js +2 -2
  23. package/dist/martyrs/src/modules/auth/views/components/layouts/Auth.vue.cjs +1 -1
  24. package/dist/martyrs/src/modules/auth/views/components/layouts/Auth.vue.cjs.map +1 -1
  25. package/dist/martyrs/src/modules/auth/views/components/layouts/Auth.vue.js +1 -1
  26. package/dist/martyrs/src/modules/auth/views/components/layouts/Auth.vue.js.map +1 -1
  27. package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.cjs +2 -2
  28. package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.cjs.map +1 -1
  29. package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.js +4 -4
  30. package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.js.map +1 -1
  31. package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.cjs +40 -50
  32. package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.cjs.map +1 -1
  33. package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js +59 -69
  34. package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js.map +1 -1
  35. package/dist/martyrs/src/modules/auth/views/components/sections/SliderFeatures.vue.cjs +11 -13
  36. package/dist/martyrs/src/modules/auth/views/components/sections/SliderFeatures.vue.cjs.map +1 -1
  37. package/dist/martyrs/src/modules/auth/views/components/sections/SliderFeatures.vue.js +11 -13
  38. package/dist/martyrs/src/modules/auth/views/components/sections/SliderFeatures.vue.js.map +1 -1
  39. package/dist/martyrs/src/modules/auth/views/store/auth.cjs +9 -0
  40. package/dist/martyrs/src/modules/auth/views/store/auth.cjs.map +1 -1
  41. package/dist/martyrs/src/modules/auth/views/store/auth.js +9 -0
  42. package/dist/martyrs/src/modules/auth/views/store/auth.js.map +1 -1
  43. package/dist/martyrs/src/modules/chats/components/blocks/ChatMessage.vue.cjs +27 -11
  44. package/dist/martyrs/src/modules/chats/components/blocks/ChatMessage.vue.cjs.map +1 -1
  45. package/dist/martyrs/src/modules/chats/components/blocks/ChatMessage.vue.js +28 -12
  46. package/dist/martyrs/src/modules/chats/components/blocks/ChatMessage.vue.js.map +1 -1
  47. package/dist/martyrs/src/modules/chats/components/sections/ChatWindow.vue.cjs +62 -0
  48. package/dist/martyrs/src/modules/chats/components/sections/ChatWindow.vue.cjs.map +1 -1
  49. package/dist/martyrs/src/modules/chats/components/sections/ChatWindow.vue.js +63 -1
  50. package/dist/martyrs/src/modules/chats/components/sections/ChatWindow.vue.js.map +1 -1
  51. package/dist/martyrs/src/modules/chats/store/chat.store.cjs +60 -1
  52. package/dist/martyrs/src/modules/chats/store/chat.store.cjs.map +1 -1
  53. package/dist/martyrs/src/modules/chats/store/chat.store.js +60 -1
  54. package/dist/martyrs/src/modules/chats/store/chat.store.js.map +1 -1
  55. package/dist/martyrs/src/modules/community/components/layouts/Community.vue.cjs +3 -3
  56. package/dist/martyrs/src/modules/community/components/layouts/Community.vue.cjs.map +1 -1
  57. package/dist/martyrs/src/modules/community/components/layouts/Community.vue.js +3 -3
  58. package/dist/martyrs/src/modules/community/components/layouts/Community.vue.js.map +1 -1
  59. package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.cjs +1 -1
  60. package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.js +1 -1
  61. package/dist/martyrs/src/modules/community/components/pages/Posts.vue.cjs +50 -368
  62. package/dist/martyrs/src/modules/community/components/pages/Posts.vue.cjs.map +1 -1
  63. package/dist/martyrs/src/modules/community/components/pages/Posts.vue.js +53 -371
  64. package/dist/martyrs/src/modules/community/components/pages/Posts.vue.js.map +1 -1
  65. package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.cjs +1 -1
  66. package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.cjs.map +1 -1
  67. package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.js +1 -1
  68. package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.js.map +1 -1
  69. package/dist/martyrs/src/modules/events/components/pages/Event.vue.cjs +0 -1
  70. package/dist/martyrs/src/modules/events/components/pages/Event.vue.cjs.map +1 -1
  71. package/dist/martyrs/src/modules/events/components/pages/Event.vue.js +0 -1
  72. package/dist/martyrs/src/modules/events/components/pages/Event.vue.js.map +1 -1
  73. package/dist/martyrs/src/modules/events/components/pages/Events.vue.cjs +2 -2
  74. package/dist/martyrs/src/modules/events/components/pages/Events.vue.cjs.map +1 -1
  75. package/dist/martyrs/src/modules/events/components/pages/Events.vue.js +2 -2
  76. package/dist/martyrs/src/modules/events/components/pages/Events.vue.js.map +1 -1
  77. package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.cjs +1 -1
  78. package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.js +1 -1
  79. package/dist/martyrs/src/modules/globals/views/components/blocks/CardHeader.vue.cjs +1 -1
  80. package/dist/martyrs/src/modules/globals/views/components/blocks/CardHeader.vue.js +1 -1
  81. package/dist/martyrs/src/modules/globals/views/components/partials/Header.vue.cjs +1 -1
  82. package/dist/martyrs/src/modules/globals/views/components/partials/Header.vue.js +1 -1
  83. package/dist/martyrs/src/modules/globals/views/components/partials/LocationSelection.vue.cjs +2 -2
  84. package/dist/martyrs/src/modules/globals/views/components/partials/LocationSelection.vue.js +2 -2
  85. package/dist/martyrs/src/modules/globals/views/components/sections/Walkthrough.vue.cjs +1 -1
  86. package/dist/martyrs/src/modules/globals/views/mixins/mixins.cjs +7 -0
  87. package/dist/martyrs/src/modules/globals/views/mixins/mixins.cjs.map +1 -1
  88. package/dist/martyrs/src/modules/globals/views/mixins/mixins.js +7 -0
  89. package/dist/martyrs/src/modules/globals/views/mixins/mixins.js.map +1 -1
  90. package/dist/martyrs/src/modules/icons/pages/IconsPage.vue.cjs +1 -1
  91. package/dist/martyrs/src/modules/inventory/components/forms/AdjustmentForm.vue.cjs +1 -1
  92. package/dist/martyrs/src/modules/inventory/components/forms/AdjustmentForm.vue.js +1 -1
  93. package/dist/martyrs/src/modules/inventory/components/forms/StockAlertsForm.vue.cjs +1 -1
  94. package/dist/martyrs/src/modules/inventory/components/forms/StockAlertsForm.vue.js +1 -1
  95. package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.cjs +1 -1
  96. package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.js +1 -1
  97. package/dist/martyrs/src/modules/marketplace/views/components/layouts/Marketplace.vue.cjs +180 -19
  98. package/dist/martyrs/src/modules/marketplace/views/components/layouts/Marketplace.vue.cjs.map +1 -1
  99. package/dist/martyrs/src/modules/marketplace/views/components/layouts/Marketplace.vue.js +181 -20
  100. package/dist/martyrs/src/modules/marketplace/views/components/layouts/Marketplace.vue.js.map +1 -1
  101. package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.cjs +1 -1
  102. package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.js +1 -1
  103. package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.cjs +1 -1
  104. package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.js +1 -1
  105. package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.cjs +1 -1
  106. package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.js +1 -1
  107. package/dist/martyrs/src/modules/music/router/music.cjs +0 -1
  108. package/dist/martyrs/src/modules/music/router/music.cjs.map +1 -1
  109. package/dist/martyrs/src/modules/music/router/music.js +0 -1
  110. package/dist/martyrs/src/modules/music/router/music.js.map +1 -1
  111. package/dist/martyrs/src/modules/orders/components/blocks/CardOrderBackoffice.vue.cjs +2 -2
  112. package/dist/martyrs/src/modules/orders/components/blocks/CardOrderBackoffice.vue.cjs.map +1 -1
  113. package/dist/martyrs/src/modules/orders/components/blocks/CardOrderBackoffice.vue.js +2 -2
  114. package/dist/martyrs/src/modules/orders/components/blocks/CardOrderBackoffice.vue.js.map +1 -1
  115. package/dist/martyrs/src/modules/orders/components/forms/FormApplicationDetails.vue.cjs +1 -1
  116. package/dist/martyrs/src/modules/orders/components/forms/FormApplicationDetails.vue.js +1 -1
  117. package/dist/martyrs/src/modules/orders/components/forms/FormCustomerDetails.vue.cjs +1 -1
  118. package/dist/martyrs/src/modules/orders/components/forms/FormCustomerDetails.vue.js +1 -1
  119. package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.cjs +1 -1
  120. package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.js +1 -1
  121. package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.cjs +2 -3
  122. package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.cjs.map +1 -1
  123. package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.js +2 -3
  124. package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.js.map +1 -1
  125. package/dist/martyrs/src/modules/orders/components/sections/FormPayment.vue.cjs +1 -1
  126. package/dist/martyrs/src/modules/orders/components/sections/FormPayment.vue.js +1 -1
  127. package/dist/martyrs/src/modules/organizations/components/blocks/CardDepartment.vue.cjs +2 -24
  128. package/dist/martyrs/src/modules/organizations/components/blocks/CardDepartment.vue.cjs.map +1 -1
  129. package/dist/martyrs/src/modules/organizations/components/blocks/CardDepartment.vue.js +5 -27
  130. package/dist/martyrs/src/modules/organizations/components/blocks/CardDepartment.vue.js.map +1 -1
  131. package/dist/martyrs/src/modules/organizations/components/blocks/Socials.vue.cjs +4 -1
  132. package/dist/martyrs/src/modules/organizations/components/blocks/Socials.vue.cjs.map +1 -1
  133. package/dist/martyrs/src/modules/organizations/components/blocks/Socials.vue.js +4 -1
  134. package/dist/martyrs/src/modules/organizations/components/blocks/Socials.vue.js.map +1 -1
  135. package/dist/martyrs/src/modules/organizations/components/elements/ButtonToggleMembership.vue.cjs +3 -3
  136. package/dist/martyrs/src/modules/organizations/components/elements/ButtonToggleMembership.vue.cjs.map +1 -1
  137. package/dist/martyrs/src/modules/organizations/components/elements/ButtonToggleMembership.vue.js +3 -3
  138. package/dist/martyrs/src/modules/organizations/components/elements/ButtonToggleMembership.vue.js.map +1 -1
  139. package/dist/martyrs/src/modules/organizations/components/forms/AddExistingMembersForm.vue.cjs +195 -0
  140. package/dist/martyrs/src/modules/organizations/components/forms/AddExistingMembersForm.vue.cjs.map +1 -0
  141. package/dist/martyrs/src/modules/organizations/components/forms/AddExistingMembersForm.vue.js +195 -0
  142. package/dist/martyrs/src/modules/organizations/components/forms/AddExistingMembersForm.vue.js.map +1 -0
  143. package/dist/martyrs/src/modules/organizations/components/forms/DepartmentForm.vue.cjs +402 -0
  144. package/dist/martyrs/src/modules/organizations/components/forms/DepartmentForm.vue.cjs.map +1 -0
  145. package/dist/martyrs/src/modules/organizations/components/forms/DepartmentForm.vue.js +402 -0
  146. package/dist/martyrs/src/modules/organizations/components/forms/DepartmentForm.vue.js.map +1 -0
  147. package/dist/martyrs/src/modules/organizations/components/forms/InviteForm.vue.cjs +86 -0
  148. package/dist/martyrs/src/modules/organizations/components/forms/InviteForm.vue.cjs.map +1 -0
  149. package/dist/martyrs/src/modules/organizations/components/forms/InviteForm.vue.js +86 -0
  150. package/dist/martyrs/src/modules/organizations/components/forms/InviteForm.vue.js.map +1 -0
  151. package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.cjs +10 -10
  152. package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.cjs.map +1 -1
  153. package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.js +11 -11
  154. package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.js.map +1 -1
  155. package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.cjs +279 -191
  156. package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.cjs.map +1 -1
  157. package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.js +285 -197
  158. package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.js.map +1 -1
  159. package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.cjs +5 -5
  160. package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.cjs.map +1 -1
  161. package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.js +5 -5
  162. package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.js.map +1 -1
  163. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.cjs +2 -2
  164. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.cjs.map +1 -1
  165. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js +2 -2
  166. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js.map +1 -1
  167. package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.cjs +1 -1
  168. package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.cjs.map +1 -1
  169. package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.js +1 -1
  170. package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.js.map +1 -1
  171. package/dist/martyrs/src/modules/organizations/components/sections/MembersAdd.vue.cjs +1 -1
  172. package/dist/martyrs/src/modules/organizations/components/sections/MembersAdd.vue.js +1 -1
  173. package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.cjs +3 -3
  174. package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.cjs.map +1 -1
  175. package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.js +3 -3
  176. package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.js.map +1 -1
  177. package/dist/martyrs/src/modules/organizations/components/sections/Publics.vue.cjs +4 -4
  178. package/dist/martyrs/src/modules/organizations/components/sections/Publics.vue.cjs.map +1 -1
  179. package/dist/martyrs/src/modules/organizations/components/sections/Publics.vue.js +4 -4
  180. package/dist/martyrs/src/modules/organizations/components/sections/Publics.vue.js.map +1 -1
  181. package/dist/martyrs/src/modules/organizations/configs/navigation.organization.config.cjs +42 -41
  182. package/dist/martyrs/src/modules/organizations/configs/navigation.organization.config.cjs.map +1 -1
  183. package/dist/martyrs/src/modules/organizations/configs/navigation.organization.config.js +53 -52
  184. package/dist/martyrs/src/modules/organizations/configs/navigation.organization.config.js.map +1 -1
  185. package/dist/martyrs/src/modules/organizations/organizations.client.cjs +23 -16
  186. package/dist/martyrs/src/modules/organizations/organizations.client.cjs.map +1 -1
  187. package/dist/martyrs/src/modules/organizations/organizations.client.js +35 -28
  188. package/dist/martyrs/src/modules/organizations/organizations.client.js.map +1 -1
  189. package/dist/martyrs/src/modules/organizations/router/departments.router.cjs +0 -18
  190. package/dist/martyrs/src/modules/organizations/router/departments.router.cjs.map +1 -1
  191. package/dist/martyrs/src/modules/organizations/router/departments.router.js +0 -18
  192. package/dist/martyrs/src/modules/organizations/router/departments.router.js.map +1 -1
  193. package/dist/martyrs/src/modules/organizations/store/departments.store.cjs +6 -0
  194. package/dist/martyrs/src/modules/organizations/store/departments.store.cjs.map +1 -0
  195. package/dist/martyrs/src/modules/organizations/store/departments.store.js +6 -0
  196. package/dist/martyrs/src/modules/organizations/store/departments.store.js.map +1 -0
  197. package/dist/martyrs/src/modules/organizations/store/invites.store.cjs +6 -0
  198. package/dist/martyrs/src/modules/organizations/store/invites.store.cjs.map +1 -0
  199. package/dist/martyrs/src/modules/organizations/store/invites.store.js +6 -0
  200. package/dist/martyrs/src/modules/organizations/store/invites.store.js.map +1 -0
  201. package/dist/martyrs/src/modules/organizations/store/memberships.store.cjs +20 -0
  202. package/dist/martyrs/src/modules/organizations/store/memberships.store.cjs.map +1 -0
  203. package/dist/martyrs/src/modules/organizations/store/memberships.store.js +20 -0
  204. package/dist/martyrs/src/modules/organizations/store/memberships.store.js.map +1 -0
  205. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.cjs +2 -3
  206. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.cjs.map +1 -1
  207. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js +2 -3
  208. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js.map +1 -1
  209. package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.cjs +1 -1
  210. package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.js +1 -1
  211. package/dist/martyrs/src/modules/products/components/pages/Products.vue.cjs +1 -1
  212. package/dist/martyrs/src/modules/products/components/pages/Products.vue.cjs.map +1 -1
  213. package/dist/martyrs/src/modules/products/components/pages/Products.vue.js +1 -1
  214. package/dist/martyrs/src/modules/products/components/pages/Products.vue.js.map +1 -1
  215. package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.cjs +1 -1
  216. package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.js +1 -1
  217. package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.cjs +1 -1
  218. package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.js +1 -1
  219. package/dist/martyrs/src/modules/reports/components/sections/FormReport.vue.cjs +1 -1
  220. package/dist/martyrs/src/modules/reports/components/sections/FormReport.vue.js +1 -1
  221. package/dist/martyrs/src/modules/spots/components/blocks/CardSpot.vue.cjs +2 -2
  222. package/dist/martyrs/src/modules/spots/components/blocks/CardSpot.vue.cjs.map +1 -1
  223. package/dist/martyrs/src/modules/spots/components/blocks/CardSpot.vue.js +2 -2
  224. package/dist/martyrs/src/modules/spots/components/blocks/CardSpot.vue.js.map +1 -1
  225. package/dist/martyrs/src/modules/spots/components/blocks/SpotMemberModify.vue.cjs +1 -1
  226. package/dist/martyrs/src/modules/spots/components/blocks/SpotMemberModify.vue.js +1 -1
  227. package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.cjs +3 -3
  228. package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.js +3 -3
  229. package/dist/martyrs/src/modules/spots/components/pages/Spots.vue.cjs +60 -272
  230. package/dist/martyrs/src/modules/spots/components/pages/Spots.vue.cjs.map +1 -1
  231. package/dist/martyrs/src/modules/spots/components/pages/Spots.vue.js +62 -274
  232. package/dist/martyrs/src/modules/spots/components/pages/Spots.vue.js.map +1 -1
  233. package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.cjs +1 -1
  234. package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.js +1 -1
  235. package/dist/martyrs/src/modules/wallet/views/components/blocks/CryptoDeposit.vue.cjs +1 -1
  236. package/dist/martyrs/src/modules/wallet/views/components/blocks/CryptoDeposit.vue.js +1 -1
  237. package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.cjs +2 -2
  238. package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.js +2 -2
  239. package/dist/martyrs.cjs.js +1 -1
  240. package/dist/martyrs.css +1 -1
  241. package/dist/martyrs.es.js +1 -1
  242. package/dist/notifications.server.cjs +0 -24
  243. package/dist/notifications.server.js +0 -24
  244. package/dist/orders.server.cjs +1 -4
  245. package/dist/orders.server.js +1 -4
  246. package/dist/organizations.server.cjs +115 -39
  247. package/dist/organizations.server.js +115 -39
  248. package/dist/style.css +9 -9
  249. package/dist/{web-42I-Howt.cjs → web-B0cfxzgu.cjs} +1 -1
  250. package/dist/{web-ByhZ_fIu.js → web-DVR8m2fm.js} +1 -1
  251. package/package.json +1 -1
  252. package/src/components/Feed/Feed.old.vue +0 -1
  253. package/src/components/Feed/Feed.vue +0 -30
  254. package/src/modules/auth/FIXES.md +2 -26
  255. package/src/modules/auth/views/components/blocks/CardUser.vue +2 -2
  256. package/src/modules/auth/views/components/layouts/Auth.vue +1 -1
  257. package/src/modules/auth/views/components/pages/Invite.vue +2 -2
  258. package/src/modules/auth/views/components/pages/Profile.vue +33 -48
  259. package/src/modules/auth/views/components/sections/SliderFeatures.vue +5 -7
  260. package/src/modules/auth/views/store/auth.js +15 -0
  261. package/src/modules/chats/CLAUDE.md +137 -0
  262. package/src/modules/chats/components/blocks/ChatMessage.vue +12 -0
  263. package/src/modules/chats/components/sections/ChatWindow.vue +84 -2
  264. package/src/modules/chats/controllers/chats.controller.js +187 -0
  265. package/src/modules/chats/models/chat.model.js +21 -0
  266. package/src/modules/chats/routes/chats.routes.js +46 -0
  267. package/src/modules/chats/store/chat.store.js +67 -0
  268. package/src/modules/community/components/layouts/Community.vue +2 -2
  269. package/src/modules/community/components/pages/Posts.vue +3 -328
  270. package/src/modules/events/components/pages/EditEventTickets.vue +1 -1
  271. package/src/modules/events/components/pages/Events.vue +2 -2
  272. package/src/modules/globals/views/mixins/mixins.js +7 -0
  273. package/src/modules/marketplace/views/components/layouts/Marketplace.vue +160 -8
  274. package/src/modules/notifications/controllers/notifications.controller.js +0 -6
  275. package/src/modules/notifications/services/notification.service.js +1 -17
  276. package/src/modules/notifications/services/web-push.service.js +0 -2
  277. package/src/modules/orders/components/blocks/CardOrderBackoffice.vue +2 -2
  278. package/src/modules/orders/components/blocks/CardOrderVar1.vue +1 -1
  279. package/src/modules/orders/controllers/orders.controller.js +2 -4
  280. package/src/modules/organizations/CLAUDE.md +259 -0
  281. package/src/modules/organizations/components/blocks/CardDepartment.vue +1 -22
  282. package/src/modules/organizations/components/blocks/Socials.vue +1 -1
  283. package/src/modules/organizations/components/elements/ButtonToggleMembership.vue +3 -3
  284. package/src/modules/organizations/components/forms/AddExistingMembersForm.vue +191 -0
  285. package/src/modules/organizations/components/forms/DepartmentForm.vue +390 -0
  286. package/src/modules/organizations/components/forms/InviteForm.vue +81 -0
  287. package/src/modules/organizations/components/pages/Department.vue +10 -10
  288. package/src/modules/organizations/components/pages/DepartmentEdit.vue +8 -8
  289. package/src/modules/organizations/components/pages/Members.vue +265 -171
  290. package/src/modules/organizations/components/pages/Organization.new.vue +172 -183
  291. package/src/modules/organizations/components/pages/Organization.vue +6 -6
  292. package/src/modules/organizations/components/pages/OrganizationEdit.vue +1 -1
  293. package/src/modules/organizations/components/pages/Organizations.vue +1 -1
  294. package/src/modules/organizations/components/sections/Organizations.vue +2 -2
  295. package/src/modules/organizations/components/sections/Publics.vue +4 -4
  296. package/src/modules/organizations/configs/navigation.organization.config.js +40 -39
  297. package/src/modules/organizations/controllers/departments.controller.js +53 -34
  298. package/src/modules/organizations/controllers/invites.controller.js +44 -5
  299. package/src/modules/organizations/controllers/memberships.controller.js +43 -4
  300. package/src/modules/organizations/organizations.client.js +24 -15
  301. package/src/modules/organizations/router/departments.router.js +0 -18
  302. package/src/modules/organizations/routes/departments.routes.js +6 -8
  303. package/src/modules/organizations/routes/invites.routes.js +6 -4
  304. package/src/modules/organizations/routes/memberships.routes.js +6 -5
  305. package/src/modules/organizations/store/departments.store.js +5 -0
  306. package/src/modules/organizations/store/invites.store.js +5 -0
  307. package/src/modules/organizations/store/memberships.store.js +23 -0
  308. package/src/modules/products/components/pages/Products.vue +0 -1
  309. package/src/modules/spots/components/blocks/CardSpot.vue +1 -1
  310. package/src/modules/spots/components/pages/Spots.vue +3 -203
  311. package/src/styles/base/all.scss +0 -15
  312. package/src/styles/typography.scss +20 -5
  313. package/dist/martyrs/src/components/Address/Address.vue2.cjs.map +0 -1
  314. package/dist/martyrs/src/components/LocationMarker/LocationMarker.vue2.cjs.map +0 -1
  315. package/dist/martyrs/src/components/Select/Select.vue2.cjs.map +0 -1
  316. package/dist/martyrs/src/modules/globals/views/components/blocks/BlockFilter.vue.cjs +0 -76
  317. package/dist/martyrs/src/modules/globals/views/components/blocks/BlockFilter.vue.cjs.map +0 -1
  318. package/dist/martyrs/src/modules/globals/views/components/blocks/BlockFilter.vue.js +0 -76
  319. package/dist/martyrs/src/modules/globals/views/components/blocks/BlockFilter.vue.js.map +0 -1
  320. package/dist/martyrs/src/modules/organizations/components/pages/DepartmentEdit.vue.cjs +0 -280
  321. package/dist/martyrs/src/modules/organizations/components/pages/DepartmentEdit.vue.cjs.map +0 -1
  322. package/dist/martyrs/src/modules/organizations/components/pages/DepartmentEdit.vue.js +0 -280
  323. package/dist/martyrs/src/modules/organizations/components/pages/DepartmentEdit.vue.js.map +0 -1
  324. package/dist/martyrs/src/modules/organizations/store/departments.cjs +0 -121
  325. package/dist/martyrs/src/modules/organizations/store/departments.cjs.map +0 -1
  326. package/dist/martyrs/src/modules/organizations/store/departments.js +0 -121
  327. package/dist/martyrs/src/modules/organizations/store/departments.js.map +0 -1
  328. package/dist/martyrs/src/modules/organizations/store/invites.cjs +0 -64
  329. package/dist/martyrs/src/modules/organizations/store/invites.cjs.map +0 -1
  330. package/dist/martyrs/src/modules/organizations/store/invites.js +0 -64
  331. package/dist/martyrs/src/modules/organizations/store/invites.js.map +0 -1
  332. package/dist/martyrs/src/modules/organizations/store/memberships.cjs +0 -87
  333. package/dist/martyrs/src/modules/organizations/store/memberships.cjs.map +0 -1
  334. package/dist/martyrs/src/modules/organizations/store/memberships.js +0 -87
  335. package/dist/martyrs/src/modules/organizations/store/memberships.js.map +0 -1
  336. package/src/CLAUDE.MD +0 -15
  337. package/src/modules/globals/controllers/classes/globals.websocket.ws.js +0 -102
  338. package/src/modules/globals/views/components/blocks/BlockFilter.vue +0 -60
  339. package/src/modules/organizations/store/departments.js +0 -137
  340. package/src/modules/organizations/store/invites.js +0 -76
  341. package/src/modules/organizations/store/memberships.js +0 -110
@@ -1 +1 @@
1
- {"version":3,"file":"SliderFeatures.vue.cjs","sources":["../../../../../../../../src/modules/auth/views/components/sections/SliderFeatures.vue"],"sourcesContent":["<script setup>\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\n\nimport Slider from '@martyrs/src/components/Slider/Slider.vue'\n\nconst { tm } = useI18n({\n useScope: 'global'\n})\nconst features = computed(() => tm('auth.features'))\n</script>\n\n<template>\n <Slider :showDots=\"true\" :slideCount=\"features.length\" class=\"auth_slider h-100\">\n <div class=\"carousel__slide\" v-for=\"(feature, index) in features\" :key=\"index\">\n <div class=\"parent-div flex flex-h-center\" >\n <div class=\"background-div\" :style=\"`background-image: url(/features/${index}.png);`\"></div>\n <div class=\"pd-big\">\n <h5 class=\"t-center w-100 mn-b-regular\">{{ feature.title }}</h5>\n <p class='t-center t-transp w-100'>{{ feature.description }}</p>\n </div>\n </div>\n </div>\n </Slider>\n</template>\n\n<style lang=\"scss\">\n.auth_slider .carousel {\n height: 100%;\n}\n\n.auth_slider .carousel__container {\n height: 100%;\n}\n\n.parent-div {\n display: flex;\n flex-direction: column;\n height: 100%;\n width: 100%;\n object-fit: contain;\n}\n\n.background-div {\n background-size:cover; \n background-position: center center; \n background-repeat: no-repeat;\n}\n\n.background-div {\n flex-grow: 1; // Занимает все оставшееся пространство\n}\n</style>"],"names":["useI18n","computed"],"mappings":";;;;;;;;;;;;;AAMA,UAAM,EAAE,GAAE,IAAKA,gBAAQ;AAAA,MACrB,UAAU;AAAA,IACZ,CAAC;AACD,UAAM,WAAWC,IAAAA,SAAS,MAAM,GAAG,eAAe,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"SliderFeatures.vue.cjs","sources":["../../../../../../../../src/modules/auth/views/components/sections/SliderFeatures.vue"],"sourcesContent":["<script setup>\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\n\nimport Slider from '@martyrs/src/components/Slider/Slider.vue'\n\nconst { tm } = useI18n({\n useScope: 'global'\n})\nconst features = computed(() => tm('auth.features'))\n</script>\n\n<template>\n <Slider :showDots=\"true\" :slideCount=\"features.length\" class=\"auth_slider h-100\">\n <div class=\"grid o-hidden h-100 carousel__slide\" style=\" grid-template-rows: 1fr auto;\" v-for=\"(feature, index) in features\" :key=\"index\">\n <div class=\"h-100 background-div\" :style=\"`background-image: url(/features/${index}.png);`\"></div>\n <div class=\"h-100 pd-big\">\n <h5 class=\"t-center w-100 mn-b-regular\">{{ feature.title }}</h5>\n <p class='t-center t-transp w-100'>{{ feature.description }}</p>\n </div>\n </div>\n </Slider>\n</template>\n\n<style lang=\"scss\">\n.auth_slider .carousel {\n height: 100%;\n}\n\n.auth_slider .carousel__container {\n height: 100%;\n}\n\n.parent-div {\n display: flex;\n flex-direction: column;\n height: 100%;\n width: 100%;\n object-fit: contain;\n}\n\n.background-div {\n background-size:cover; \n background-position: center center; \n background-repeat: no-repeat;\n}\n\n.background-div {\n flex-grow: 1; // Занимает все оставшееся пространство\n}\n</style>"],"names":["useI18n","computed"],"mappings":";;;;;;;;;;;;AAMA,UAAM,EAAE,GAAE,IAAKA,gBAAQ;AAAA,MACrB,UAAU;AAAA,IACZ,CAAC;AACD,UAAM,WAAWC,IAAAA,SAAS,MAAM,GAAG,eAAe,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -2,10 +2,9 @@ import { computed, createBlock, openBlock, withCtx, createElementBlock, Fragment
2
2
  import { useI18n } from "vue-i18n";
3
3
  import _sfc_main$1 from "../../../../../components/Slider/Slider.vue.js";
4
4
  /* empty css */
5
- const _hoisted_1 = { class: "parent-div flex flex-h-center" };
6
- const _hoisted_2 = { class: "pd-big" };
7
- const _hoisted_3 = { class: "t-center w-100 mn-b-regular" };
8
- const _hoisted_4 = { class: "t-center t-transp w-100" };
5
+ const _hoisted_1 = { class: "h-100 pd-big" };
6
+ const _hoisted_2 = { class: "t-center w-100 mn-b-regular" };
7
+ const _hoisted_3 = { class: "t-center t-transp w-100" };
9
8
  const _sfc_main = {
10
9
  __name: "SliderFeatures",
11
10
  setup(__props) {
@@ -22,18 +21,17 @@ const _sfc_main = {
22
21
  default: withCtx(() => [
23
22
  (openBlock(true), createElementBlock(Fragment, null, renderList(features.value, (feature, index) => {
24
23
  return openBlock(), createElementBlock("div", {
25
- class: "carousel__slide",
24
+ class: "grid o-hidden h-100 carousel__slide",
25
+ style: { "grid-template-rows": "1fr auto" },
26
26
  key: index
27
27
  }, [
28
+ createElementVNode("div", {
29
+ class: "h-100 background-div",
30
+ style: normalizeStyle(`background-image: url(/features/${index}.png);`)
31
+ }, null, 4),
28
32
  createElementVNode("div", _hoisted_1, [
29
- createElementVNode("div", {
30
- class: "background-div",
31
- style: normalizeStyle(`background-image: url(/features/${index}.png);`)
32
- }, null, 4),
33
- createElementVNode("div", _hoisted_2, [
34
- createElementVNode("h5", _hoisted_3, toDisplayString(feature.title), 1),
35
- createElementVNode("p", _hoisted_4, toDisplayString(feature.description), 1)
36
- ])
33
+ createElementVNode("h5", _hoisted_2, toDisplayString(feature.title), 1),
34
+ createElementVNode("p", _hoisted_3, toDisplayString(feature.description), 1)
37
35
  ])
38
36
  ]);
39
37
  }), 128))
@@ -1 +1 @@
1
- {"version":3,"file":"SliderFeatures.vue.js","sources":["../../../../../../../../src/modules/auth/views/components/sections/SliderFeatures.vue"],"sourcesContent":["<script setup>\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\n\nimport Slider from '@martyrs/src/components/Slider/Slider.vue'\n\nconst { tm } = useI18n({\n useScope: 'global'\n})\nconst features = computed(() => tm('auth.features'))\n</script>\n\n<template>\n <Slider :showDots=\"true\" :slideCount=\"features.length\" class=\"auth_slider h-100\">\n <div class=\"carousel__slide\" v-for=\"(feature, index) in features\" :key=\"index\">\n <div class=\"parent-div flex flex-h-center\" >\n <div class=\"background-div\" :style=\"`background-image: url(/features/${index}.png);`\"></div>\n <div class=\"pd-big\">\n <h5 class=\"t-center w-100 mn-b-regular\">{{ feature.title }}</h5>\n <p class='t-center t-transp w-100'>{{ feature.description }}</p>\n </div>\n </div>\n </div>\n </Slider>\n</template>\n\n<style lang=\"scss\">\n.auth_slider .carousel {\n height: 100%;\n}\n\n.auth_slider .carousel__container {\n height: 100%;\n}\n\n.parent-div {\n display: flex;\n flex-direction: column;\n height: 100%;\n width: 100%;\n object-fit: contain;\n}\n\n.background-div {\n background-size:cover; \n background-position: center center; \n background-repeat: no-repeat;\n}\n\n.background-div {\n flex-grow: 1; // Занимает все оставшееся пространство\n}\n</style>"],"names":[],"mappings":";;;;;;;;;;;AAMA,UAAM,EAAE,GAAE,IAAK,QAAQ;AAAA,MACrB,UAAU;AAAA,IACZ,CAAC;AACD,UAAM,WAAW,SAAS,MAAM,GAAG,eAAe,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"SliderFeatures.vue.js","sources":["../../../../../../../../src/modules/auth/views/components/sections/SliderFeatures.vue"],"sourcesContent":["<script setup>\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\n\nimport Slider from '@martyrs/src/components/Slider/Slider.vue'\n\nconst { tm } = useI18n({\n useScope: 'global'\n})\nconst features = computed(() => tm('auth.features'))\n</script>\n\n<template>\n <Slider :showDots=\"true\" :slideCount=\"features.length\" class=\"auth_slider h-100\">\n <div class=\"grid o-hidden h-100 carousel__slide\" style=\" grid-template-rows: 1fr auto;\" v-for=\"(feature, index) in features\" :key=\"index\">\n <div class=\"h-100 background-div\" :style=\"`background-image: url(/features/${index}.png);`\"></div>\n <div class=\"h-100 pd-big\">\n <h5 class=\"t-center w-100 mn-b-regular\">{{ feature.title }}</h5>\n <p class='t-center t-transp w-100'>{{ feature.description }}</p>\n </div>\n </div>\n </Slider>\n</template>\n\n<style lang=\"scss\">\n.auth_slider .carousel {\n height: 100%;\n}\n\n.auth_slider .carousel__container {\n height: 100%;\n}\n\n.parent-div {\n display: flex;\n flex-direction: column;\n height: 100%;\n width: 100%;\n object-fit: contain;\n}\n\n.background-div {\n background-size:cover; \n background-position: center center; \n background-repeat: no-repeat;\n}\n\n.background-div {\n flex-grow: 1; // Занимает все оставшееся пространство\n}\n</style>"],"names":[],"mappings":";;;;;;;;;;AAMA,UAAM,EAAE,GAAE,IAAK,QAAQ;AAAA,MACrB,UAAU;AAAA,IACZ,CAAC;AACD,UAAM,WAAW,SAAS,MAAM,GAAG,eAAe,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -5,6 +5,7 @@ const js_cookie = require("../../../../../../node_modules/.pnpm/js-cookie@3.0.5/
5
5
  const index = require("../../../../../node_modules/.pnpm/@capacitor_preferences@7.0.1_@capacitor_core@7.2.0/node_modules/@capacitor/preferences/dist/esm/index.cjs");
6
6
  const vue = require("vue");
7
7
  const globals = require("../../../globals/views/store/globals.cjs");
8
+ const globals_websocket = require("../../../globals/views/classes/globals.websocket.cjs");
8
9
  const twofa = require("./twofa.cjs");
9
10
  const state = vue.reactive({
10
11
  user: {
@@ -82,6 +83,9 @@ const actions = {
82
83
  roles: response.data.roles
83
84
  });
84
85
  await this.initialize();
86
+ console.log("[AUTH] Reconnecting WebSocket after login for user:", response.data._id);
87
+ globals_websocket.default.disconnect();
88
+ await globals_websocket.default.connect(response.data._id);
85
89
  return response.data;
86
90
  } catch (error) {
87
91
  await removeCookie("user");
@@ -127,6 +131,9 @@ const actions = {
127
131
  roles: response.data.roles
128
132
  });
129
133
  await this.initialize();
134
+ console.log("[AUTH] Reconnecting WebSocket after signup for user:", response.data._id);
135
+ globals_websocket.default.disconnect();
136
+ await globals_websocket.default.connect(response.data._id);
130
137
  return response.data;
131
138
  } catch (error) {
132
139
  await removeCookie("user");
@@ -139,6 +146,8 @@ const actions = {
139
146
  await removeCookie("user");
140
147
  axiosInstance.setAuthToken(null);
141
148
  this.resetState();
149
+ console.log("[AUTH] Disconnecting WebSocket on logout");
150
+ globals_websocket.default.disconnect();
142
151
  },
143
152
  async resetPassword(user, type) {
144
153
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"auth.cjs","sources":["../../../../../../../src/modules/auth/views/store/auth.js"],"sourcesContent":["// Dependencies\nimport $axios, { setAuthToken } from '@martyrs/src/modules/globals/views/utils/axios-instance.js';\nimport Cookies from 'js-cookie';\n// Capacitor\nimport { Preferences } from '@capacitor/preferences';\n// Vue modules\nimport { reactive, watch } from 'vue';\n// Globals\nimport { setError } from '@martyrs/src/modules/globals/views/store/globals.js';\n// State\nimport * as twofa from './twofa.js';\n\n// State\nconst state = reactive({\n user: {\n _id: undefined,\n avatar: null,\n username: '',\n email: '',\n phone: '',\n password: '',\n passwordRepeat: '',\n },\n access: {\n roles: null,\n token: null,\n status: false,\n },\n accesses: [],\n});\n\nconst actions = {\n async initialize(cookie) {\n try {\n const userCookie = cookie ? cookie : await getCookie('user');\n\n if (userCookie) {\n const { _id, email, phone, avatar, roles, accessToken } = userCookie;\n\n setAuthToken(accessToken);\n\n // Проверка токена через серверный маршрут\n const response = await $axios.get('/api/organizations/check-accesses');\n const userAccesses = response.data;\n state.accesses = userAccesses;\n\n // Обновление состояния приложения с информацией о пользователе и его правах доступа\n Object.assign(state.user, { _id, email, phone, avatar });\n Object.assign(state.access, { token: accessToken, roles, status: !!accessToken });\n } else {\n console.log('no cookies');\n setAuthToken(null);\n this.resetState();\n }\n } catch (error) {\n console.error('Error initializing auth:', error);\n // Make sure we remove the cookie when there's an error\n await removeCookie('user');\n setAuthToken(null);\n this.resetState();\n setError(error);\n }\n },\n\n // Helper method to reset state\n resetState() {\n state.accesses = [];\n state.user = {\n _id: undefined,\n avatar: null,\n username: '',\n email: '',\n phone: '',\n password: '',\n passwordRepeat: '',\n };\n state.access = {\n roles: null,\n token: null,\n status: false,\n };\n },\n\n async login(user, type) {\n try {\n const response = await $axios.post('/api/auth/signin', {\n ...user,\n type,\n });\n\n setCookie('user', response.data);\n\n Object.assign(state.user, {\n ...response.data,\n });\n\n Object.assign(state.access, {\n token: response.data.accessToken,\n status: true,\n roles: response.data.roles,\n });\n\n await this.initialize();\n\n return response.data;\n } catch (error) {\n // Make sure cookie is removed on login error\n await removeCookie('user');\n\n Object.assign(state.access, {\n token: null,\n status: false,\n roles: null,\n });\n\n console.log(error);\n setError(error);\n return Promise.reject(error);\n }\n },\n\n async signup(user, type, invite) {\n const { password, passwordRepeat } = state.user;\n\n console.log(password);\n console.log(passwordRepeat);\n\n if (password !== passwordRepeat) {\n const error = {\n response: {\n data: { errorCode: 'PASSWORDS_DO_NOT_MATCH' },\n },\n };\n setError(error);\n throw new Error(error.response.status);\n }\n\n try {\n const response = await $axios.post('/api/auth/signup', {\n ...user,\n type,\n inviteCode: invite,\n });\n\n console.log(response);\n\n if (response.data.accessToken) {\n setCookie('user', response.data);\n }\n\n Object.assign(state.user, {\n ...response.data,\n });\n\n Object.assign(state.access, {\n token: response.data.accessToken,\n status: true,\n roles: response.data.roles,\n });\n\n await this.initialize();\n\n return response.data;\n } catch (error) {\n // Make sure cookie is removed on signup error\n await removeCookie('user');\n setError(error);\n console.log('Sign up failed');\n throw error;\n }\n },\n\n async logout() {\n await removeCookie('user');\n setAuthToken(null);\n this.resetState();\n },\n\n async resetPassword(user, type) {\n try {\n const response = await $axios.post('/api/auth/reset-password', {\n email: user.email,\n phone: user.phone,\n type,\n });\n\n Object.assign(twofa.state.code, {\n ...response.data,\n isSended: true,\n });\n\n return response.data;\n } catch (error) {\n setError(error);\n return Promise.reject(error);\n }\n },\n\n async updatePassword(user, type) {\n const { password, passwordRepeat } = state.user;\n\n if (password !== passwordRepeat) {\n const error = {\n response: {\n data: { errorCode: 'PASSWORDS_DO_NOT_MATCH' },\n },\n };\n setError(error);\n throw new Error(error.response.status);\n }\n\n try {\n const response = await $axios.post('/api/auth/update-password', {\n email: user.email,\n phone: user.phone,\n password: user.password,\n passwordRepeat: user.passwordRepeat,\n type,\n });\n\n if (response.data.accessToken) {\n setCookie('user', response.data);\n }\n\n Object.assign(state.user, {\n ...response.data,\n });\n\n Object.assign(state.access, {\n token: response.data.accessToken,\n status: true,\n });\n\n return response.data;\n } catch (error) {\n // Make sure cookie is removed on password update error\n await removeCookie('user');\n setError(error);\n return Promise.reject(error);\n }\n },\n};\n\n// Cookies\nconst optionsDefault = {\n development: { secure: false, expires: 7, sameSite: 'Lax' },\n production: {\n expires: 7,\n path: '/',\n domain: process.env.DOMAIN_URL,\n sameSite: 'strict',\n secure: true,\n },\n};\n\nasync function getCookie(name) {\n if (process.env.MOBILE_APP) {\n const { value } = await Preferences.get({ key: name });\n return value ? JSON.parse(value) : null;\n } else {\n const cookie = Cookies.get(name);\n return cookie ? JSON.parse(cookie) : null;\n }\n}\n\nasync function setCookie(name, data, env = process.env.DOMAIN_URL) {\n if (process.env.MOBILE_APP) {\n // Если приложение запущено в Capacitor\n await Preferences.set({\n key: name,\n value: JSON.stringify(data),\n });\n } else {\n // Для веб-версии\n Cookies.set(name, JSON.stringify(data), optionsDefault[env]);\n }\n}\n\nasync function removeCookie(name, env = process.env.NODE_ENV) {\n if (process.env.MOBILE_APP) {\n // Если приложение запущено в Capacitor\n await Preferences.remove({ key: name });\n } else {\n // Для веб-версии\n const options = env === 'production' ? { domain: process.env.DOMAIN_URL, path: '/' } : {};\n Cookies.remove(name, options);\n }\n}\n\n// History\nconst history = [];\nhistory.push(state);\n\n// Watch\nwatch(state, (newState, oldState) => {\n history.push(newState);\n});\n\n// Module Export\nexport { actions, removeCookie, state };\n"],"names":["reactive","setAuthToken","$axios","setError","twofa.state","Preferences","Cookies","watch"],"mappings":"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"}
1
+ {"version":3,"file":"auth.cjs","sources":["../../../../../../../src/modules/auth/views/store/auth.js"],"sourcesContent":["// Dependencies\nimport $axios, { setAuthToken } from '@martyrs/src/modules/globals/views/utils/axios-instance.js';\nimport Cookies from 'js-cookie';\n// Capacitor\nimport { Preferences } from '@capacitor/preferences';\n// Vue modules\nimport { reactive, watch } from 'vue';\n// Globals\nimport { setError } from '@martyrs/src/modules/globals/views/store/globals.js';\nimport globalWebSocket from '@martyrs/src/modules/globals/views/classes/globals.websocket.js';\n// State\nimport * as twofa from './twofa.js';\n\n// State\nconst state = reactive({\n user: {\n _id: undefined,\n avatar: null,\n username: '',\n email: '',\n phone: '',\n password: '',\n passwordRepeat: '',\n },\n access: {\n roles: null,\n token: null,\n status: false,\n },\n accesses: [],\n});\n\nconst actions = {\n async initialize(cookie) {\n try {\n const userCookie = cookie ? cookie : await getCookie('user');\n\n if (userCookie) {\n const { _id, email, phone, avatar, roles, accessToken } = userCookie;\n\n setAuthToken(accessToken);\n\n // Проверка токена через серверный маршрут\n const response = await $axios.get('/api/organizations/check-accesses');\n const userAccesses = response.data;\n state.accesses = userAccesses;\n\n // Обновление состояния приложения с информацией о пользователе и его правах доступа\n Object.assign(state.user, { _id, email, phone, avatar });\n Object.assign(state.access, { token: accessToken, roles, status: !!accessToken });\n } else {\n console.log('no cookies');\n setAuthToken(null);\n this.resetState();\n }\n } catch (error) {\n console.error('Error initializing auth:', error);\n // Make sure we remove the cookie when there's an error\n await removeCookie('user');\n setAuthToken(null);\n this.resetState();\n setError(error);\n }\n },\n\n // Helper method to reset state\n resetState() {\n state.accesses = [];\n state.user = {\n _id: undefined,\n avatar: null,\n username: '',\n email: '',\n phone: '',\n password: '',\n passwordRepeat: '',\n };\n state.access = {\n roles: null,\n token: null,\n status: false,\n };\n },\n\n async login(user, type) {\n try {\n const response = await $axios.post('/api/auth/signin', {\n ...user,\n type,\n });\n\n setCookie('user', response.data);\n\n Object.assign(state.user, {\n ...response.data,\n });\n\n Object.assign(state.access, {\n token: response.data.accessToken,\n status: true,\n roles: response.data.roles,\n });\n\n await this.initialize();\n \n // Переподключаем WebSocket с новым userId после входа\n console.log('[AUTH] Reconnecting WebSocket after login for user:', response.data._id);\n globalWebSocket.disconnect();\n await globalWebSocket.connect(response.data._id);\n\n return response.data;\n } catch (error) {\n // Make sure cookie is removed on login error\n await removeCookie('user');\n\n Object.assign(state.access, {\n token: null,\n status: false,\n roles: null,\n });\n\n console.log(error);\n setError(error);\n return Promise.reject(error);\n }\n },\n\n async signup(user, type, invite) {\n const { password, passwordRepeat } = state.user;\n\n console.log(password);\n console.log(passwordRepeat);\n\n if (password !== passwordRepeat) {\n const error = {\n response: {\n data: { errorCode: 'PASSWORDS_DO_NOT_MATCH' },\n },\n };\n setError(error);\n throw new Error(error.response.status);\n }\n\n try {\n const response = await $axios.post('/api/auth/signup', {\n ...user,\n type,\n inviteCode: invite,\n });\n\n console.log(response);\n\n if (response.data.accessToken) {\n setCookie('user', response.data);\n }\n\n Object.assign(state.user, {\n ...response.data,\n });\n\n Object.assign(state.access, {\n token: response.data.accessToken,\n status: true,\n roles: response.data.roles,\n });\n\n await this.initialize();\n \n // Переподключаем WebSocket с новым userId после регистрации\n console.log('[AUTH] Reconnecting WebSocket after signup for user:', response.data._id);\n globalWebSocket.disconnect();\n await globalWebSocket.connect(response.data._id);\n\n return response.data;\n } catch (error) {\n // Make sure cookie is removed on signup error\n await removeCookie('user');\n setError(error);\n console.log('Sign up failed');\n throw error;\n }\n },\n\n async logout() {\n await removeCookie('user');\n setAuthToken(null);\n this.resetState();\n \n // Отключаем WebSocket при выходе\n console.log('[AUTH] Disconnecting WebSocket on logout');\n globalWebSocket.disconnect();\n },\n\n async resetPassword(user, type) {\n try {\n const response = await $axios.post('/api/auth/reset-password', {\n email: user.email,\n phone: user.phone,\n type,\n });\n\n Object.assign(twofa.state.code, {\n ...response.data,\n isSended: true,\n });\n\n return response.data;\n } catch (error) {\n setError(error);\n return Promise.reject(error);\n }\n },\n\n async updatePassword(user, type) {\n const { password, passwordRepeat } = state.user;\n\n if (password !== passwordRepeat) {\n const error = {\n response: {\n data: { errorCode: 'PASSWORDS_DO_NOT_MATCH' },\n },\n };\n setError(error);\n throw new Error(error.response.status);\n }\n\n try {\n const response = await $axios.post('/api/auth/update-password', {\n email: user.email,\n phone: user.phone,\n password: user.password,\n passwordRepeat: user.passwordRepeat,\n type,\n });\n\n if (response.data.accessToken) {\n setCookie('user', response.data);\n }\n\n Object.assign(state.user, {\n ...response.data,\n });\n\n Object.assign(state.access, {\n token: response.data.accessToken,\n status: true,\n });\n\n return response.data;\n } catch (error) {\n // Make sure cookie is removed on password update error\n await removeCookie('user');\n setError(error);\n return Promise.reject(error);\n }\n },\n};\n\n// Cookies\nconst optionsDefault = {\n development: { secure: false, expires: 7, sameSite: 'Lax' },\n production: {\n expires: 7,\n path: '/',\n domain: process.env.DOMAIN_URL,\n sameSite: 'strict',\n secure: true,\n },\n};\n\nasync function getCookie(name) {\n if (process.env.MOBILE_APP) {\n const { value } = await Preferences.get({ key: name });\n return value ? JSON.parse(value) : null;\n } else {\n const cookie = Cookies.get(name);\n return cookie ? JSON.parse(cookie) : null;\n }\n}\n\nasync function setCookie(name, data, env = process.env.DOMAIN_URL) {\n if (process.env.MOBILE_APP) {\n // Если приложение запущено в Capacitor\n await Preferences.set({\n key: name,\n value: JSON.stringify(data),\n });\n } else {\n // Для веб-версии\n Cookies.set(name, JSON.stringify(data), optionsDefault[env]);\n }\n}\n\nasync function removeCookie(name, env = process.env.NODE_ENV) {\n if (process.env.MOBILE_APP) {\n // Если приложение запущено в Capacitor\n await Preferences.remove({ key: name });\n } else {\n // Для веб-версии\n const options = env === 'production' ? { domain: process.env.DOMAIN_URL, path: '/' } : {};\n Cookies.remove(name, options);\n }\n}\n\n// History\nconst history = [];\nhistory.push(state);\n\n// Watch\nwatch(state, (newState, oldState) => {\n history.push(newState);\n});\n\n// Module Export\nexport { actions, removeCookie, state };\n"],"names":["reactive","setAuthToken","$axios","setError","globalWebSocket","twofa.state","Preferences","Cookies","watch"],"mappings":"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"}
@@ -3,6 +3,7 @@ import api from "../../../../../../node_modules/.pnpm/js-cookie@3.0.5/node_modul
3
3
  import { Preferences } from "../../../../../node_modules/.pnpm/@capacitor_preferences@7.0.1_@capacitor_core@7.2.0/node_modules/@capacitor/preferences/dist/esm/index.js";
4
4
  import { reactive, watch } from "vue";
5
5
  import { setError } from "../../../globals/views/store/globals.js";
6
+ import globalWebSocket from "../../../globals/views/classes/globals.websocket.js";
6
7
  import { state as state$1 } from "./twofa.js";
7
8
  const state = reactive({
8
9
  user: {
@@ -80,6 +81,9 @@ const actions = {
80
81
  roles: response.data.roles
81
82
  });
82
83
  await this.initialize();
84
+ console.log("[AUTH] Reconnecting WebSocket after login for user:", response.data._id);
85
+ globalWebSocket.disconnect();
86
+ await globalWebSocket.connect(response.data._id);
83
87
  return response.data;
84
88
  } catch (error) {
85
89
  await removeCookie("user");
@@ -125,6 +129,9 @@ const actions = {
125
129
  roles: response.data.roles
126
130
  });
127
131
  await this.initialize();
132
+ console.log("[AUTH] Reconnecting WebSocket after signup for user:", response.data._id);
133
+ globalWebSocket.disconnect();
134
+ await globalWebSocket.connect(response.data._id);
128
135
  return response.data;
129
136
  } catch (error) {
130
137
  await removeCookie("user");
@@ -137,6 +144,8 @@ const actions = {
137
144
  await removeCookie("user");
138
145
  setAuthToken(null);
139
146
  this.resetState();
147
+ console.log("[AUTH] Disconnecting WebSocket on logout");
148
+ globalWebSocket.disconnect();
140
149
  },
141
150
  async resetPassword(user, type) {
142
151
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sources":["../../../../../../../src/modules/auth/views/store/auth.js"],"sourcesContent":["// Dependencies\nimport $axios, { setAuthToken } from '@martyrs/src/modules/globals/views/utils/axios-instance.js';\nimport Cookies from 'js-cookie';\n// Capacitor\nimport { Preferences } from '@capacitor/preferences';\n// Vue modules\nimport { reactive, watch } from 'vue';\n// Globals\nimport { setError } from '@martyrs/src/modules/globals/views/store/globals.js';\n// State\nimport * as twofa from './twofa.js';\n\n// State\nconst state = reactive({\n user: {\n _id: undefined,\n avatar: null,\n username: '',\n email: '',\n phone: '',\n password: '',\n passwordRepeat: '',\n },\n access: {\n roles: null,\n token: null,\n status: false,\n },\n accesses: [],\n});\n\nconst actions = {\n async initialize(cookie) {\n try {\n const userCookie = cookie ? cookie : await getCookie('user');\n\n if (userCookie) {\n const { _id, email, phone, avatar, roles, accessToken } = userCookie;\n\n setAuthToken(accessToken);\n\n // Проверка токена через серверный маршрут\n const response = await $axios.get('/api/organizations/check-accesses');\n const userAccesses = response.data;\n state.accesses = userAccesses;\n\n // Обновление состояния приложения с информацией о пользователе и его правах доступа\n Object.assign(state.user, { _id, email, phone, avatar });\n Object.assign(state.access, { token: accessToken, roles, status: !!accessToken });\n } else {\n console.log('no cookies');\n setAuthToken(null);\n this.resetState();\n }\n } catch (error) {\n console.error('Error initializing auth:', error);\n // Make sure we remove the cookie when there's an error\n await removeCookie('user');\n setAuthToken(null);\n this.resetState();\n setError(error);\n }\n },\n\n // Helper method to reset state\n resetState() {\n state.accesses = [];\n state.user = {\n _id: undefined,\n avatar: null,\n username: '',\n email: '',\n phone: '',\n password: '',\n passwordRepeat: '',\n };\n state.access = {\n roles: null,\n token: null,\n status: false,\n };\n },\n\n async login(user, type) {\n try {\n const response = await $axios.post('/api/auth/signin', {\n ...user,\n type,\n });\n\n setCookie('user', response.data);\n\n Object.assign(state.user, {\n ...response.data,\n });\n\n Object.assign(state.access, {\n token: response.data.accessToken,\n status: true,\n roles: response.data.roles,\n });\n\n await this.initialize();\n\n return response.data;\n } catch (error) {\n // Make sure cookie is removed on login error\n await removeCookie('user');\n\n Object.assign(state.access, {\n token: null,\n status: false,\n roles: null,\n });\n\n console.log(error);\n setError(error);\n return Promise.reject(error);\n }\n },\n\n async signup(user, type, invite) {\n const { password, passwordRepeat } = state.user;\n\n console.log(password);\n console.log(passwordRepeat);\n\n if (password !== passwordRepeat) {\n const error = {\n response: {\n data: { errorCode: 'PASSWORDS_DO_NOT_MATCH' },\n },\n };\n setError(error);\n throw new Error(error.response.status);\n }\n\n try {\n const response = await $axios.post('/api/auth/signup', {\n ...user,\n type,\n inviteCode: invite,\n });\n\n console.log(response);\n\n if (response.data.accessToken) {\n setCookie('user', response.data);\n }\n\n Object.assign(state.user, {\n ...response.data,\n });\n\n Object.assign(state.access, {\n token: response.data.accessToken,\n status: true,\n roles: response.data.roles,\n });\n\n await this.initialize();\n\n return response.data;\n } catch (error) {\n // Make sure cookie is removed on signup error\n await removeCookie('user');\n setError(error);\n console.log('Sign up failed');\n throw error;\n }\n },\n\n async logout() {\n await removeCookie('user');\n setAuthToken(null);\n this.resetState();\n },\n\n async resetPassword(user, type) {\n try {\n const response = await $axios.post('/api/auth/reset-password', {\n email: user.email,\n phone: user.phone,\n type,\n });\n\n Object.assign(twofa.state.code, {\n ...response.data,\n isSended: true,\n });\n\n return response.data;\n } catch (error) {\n setError(error);\n return Promise.reject(error);\n }\n },\n\n async updatePassword(user, type) {\n const { password, passwordRepeat } = state.user;\n\n if (password !== passwordRepeat) {\n const error = {\n response: {\n data: { errorCode: 'PASSWORDS_DO_NOT_MATCH' },\n },\n };\n setError(error);\n throw new Error(error.response.status);\n }\n\n try {\n const response = await $axios.post('/api/auth/update-password', {\n email: user.email,\n phone: user.phone,\n password: user.password,\n passwordRepeat: user.passwordRepeat,\n type,\n });\n\n if (response.data.accessToken) {\n setCookie('user', response.data);\n }\n\n Object.assign(state.user, {\n ...response.data,\n });\n\n Object.assign(state.access, {\n token: response.data.accessToken,\n status: true,\n });\n\n return response.data;\n } catch (error) {\n // Make sure cookie is removed on password update error\n await removeCookie('user');\n setError(error);\n return Promise.reject(error);\n }\n },\n};\n\n// Cookies\nconst optionsDefault = {\n development: { secure: false, expires: 7, sameSite: 'Lax' },\n production: {\n expires: 7,\n path: '/',\n domain: process.env.DOMAIN_URL,\n sameSite: 'strict',\n secure: true,\n },\n};\n\nasync function getCookie(name) {\n if (process.env.MOBILE_APP) {\n const { value } = await Preferences.get({ key: name });\n return value ? JSON.parse(value) : null;\n } else {\n const cookie = Cookies.get(name);\n return cookie ? JSON.parse(cookie) : null;\n }\n}\n\nasync function setCookie(name, data, env = process.env.DOMAIN_URL) {\n if (process.env.MOBILE_APP) {\n // Если приложение запущено в Capacitor\n await Preferences.set({\n key: name,\n value: JSON.stringify(data),\n });\n } else {\n // Для веб-версии\n Cookies.set(name, JSON.stringify(data), optionsDefault[env]);\n }\n}\n\nasync function removeCookie(name, env = process.env.NODE_ENV) {\n if (process.env.MOBILE_APP) {\n // Если приложение запущено в Capacitor\n await Preferences.remove({ key: name });\n } else {\n // Для веб-версии\n const options = env === 'production' ? { domain: process.env.DOMAIN_URL, path: '/' } : {};\n Cookies.remove(name, options);\n }\n}\n\n// History\nconst history = [];\nhistory.push(state);\n\n// Watch\nwatch(state, (newState, oldState) => {\n history.push(newState);\n});\n\n// Module Export\nexport { actions, removeCookie, state };\n"],"names":["twofa.state","Cookies"],"mappings":"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"}
1
+ {"version":3,"file":"auth.js","sources":["../../../../../../../src/modules/auth/views/store/auth.js"],"sourcesContent":["// Dependencies\nimport $axios, { setAuthToken } from '@martyrs/src/modules/globals/views/utils/axios-instance.js';\nimport Cookies from 'js-cookie';\n// Capacitor\nimport { Preferences } from '@capacitor/preferences';\n// Vue modules\nimport { reactive, watch } from 'vue';\n// Globals\nimport { setError } from '@martyrs/src/modules/globals/views/store/globals.js';\nimport globalWebSocket from '@martyrs/src/modules/globals/views/classes/globals.websocket.js';\n// State\nimport * as twofa from './twofa.js';\n\n// State\nconst state = reactive({\n user: {\n _id: undefined,\n avatar: null,\n username: '',\n email: '',\n phone: '',\n password: '',\n passwordRepeat: '',\n },\n access: {\n roles: null,\n token: null,\n status: false,\n },\n accesses: [],\n});\n\nconst actions = {\n async initialize(cookie) {\n try {\n const userCookie = cookie ? cookie : await getCookie('user');\n\n if (userCookie) {\n const { _id, email, phone, avatar, roles, accessToken } = userCookie;\n\n setAuthToken(accessToken);\n\n // Проверка токена через серверный маршрут\n const response = await $axios.get('/api/organizations/check-accesses');\n const userAccesses = response.data;\n state.accesses = userAccesses;\n\n // Обновление состояния приложения с информацией о пользователе и его правах доступа\n Object.assign(state.user, { _id, email, phone, avatar });\n Object.assign(state.access, { token: accessToken, roles, status: !!accessToken });\n } else {\n console.log('no cookies');\n setAuthToken(null);\n this.resetState();\n }\n } catch (error) {\n console.error('Error initializing auth:', error);\n // Make sure we remove the cookie when there's an error\n await removeCookie('user');\n setAuthToken(null);\n this.resetState();\n setError(error);\n }\n },\n\n // Helper method to reset state\n resetState() {\n state.accesses = [];\n state.user = {\n _id: undefined,\n avatar: null,\n username: '',\n email: '',\n phone: '',\n password: '',\n passwordRepeat: '',\n };\n state.access = {\n roles: null,\n token: null,\n status: false,\n };\n },\n\n async login(user, type) {\n try {\n const response = await $axios.post('/api/auth/signin', {\n ...user,\n type,\n });\n\n setCookie('user', response.data);\n\n Object.assign(state.user, {\n ...response.data,\n });\n\n Object.assign(state.access, {\n token: response.data.accessToken,\n status: true,\n roles: response.data.roles,\n });\n\n await this.initialize();\n \n // Переподключаем WebSocket с новым userId после входа\n console.log('[AUTH] Reconnecting WebSocket after login for user:', response.data._id);\n globalWebSocket.disconnect();\n await globalWebSocket.connect(response.data._id);\n\n return response.data;\n } catch (error) {\n // Make sure cookie is removed on login error\n await removeCookie('user');\n\n Object.assign(state.access, {\n token: null,\n status: false,\n roles: null,\n });\n\n console.log(error);\n setError(error);\n return Promise.reject(error);\n }\n },\n\n async signup(user, type, invite) {\n const { password, passwordRepeat } = state.user;\n\n console.log(password);\n console.log(passwordRepeat);\n\n if (password !== passwordRepeat) {\n const error = {\n response: {\n data: { errorCode: 'PASSWORDS_DO_NOT_MATCH' },\n },\n };\n setError(error);\n throw new Error(error.response.status);\n }\n\n try {\n const response = await $axios.post('/api/auth/signup', {\n ...user,\n type,\n inviteCode: invite,\n });\n\n console.log(response);\n\n if (response.data.accessToken) {\n setCookie('user', response.data);\n }\n\n Object.assign(state.user, {\n ...response.data,\n });\n\n Object.assign(state.access, {\n token: response.data.accessToken,\n status: true,\n roles: response.data.roles,\n });\n\n await this.initialize();\n \n // Переподключаем WebSocket с новым userId после регистрации\n console.log('[AUTH] Reconnecting WebSocket after signup for user:', response.data._id);\n globalWebSocket.disconnect();\n await globalWebSocket.connect(response.data._id);\n\n return response.data;\n } catch (error) {\n // Make sure cookie is removed on signup error\n await removeCookie('user');\n setError(error);\n console.log('Sign up failed');\n throw error;\n }\n },\n\n async logout() {\n await removeCookie('user');\n setAuthToken(null);\n this.resetState();\n \n // Отключаем WebSocket при выходе\n console.log('[AUTH] Disconnecting WebSocket on logout');\n globalWebSocket.disconnect();\n },\n\n async resetPassword(user, type) {\n try {\n const response = await $axios.post('/api/auth/reset-password', {\n email: user.email,\n phone: user.phone,\n type,\n });\n\n Object.assign(twofa.state.code, {\n ...response.data,\n isSended: true,\n });\n\n return response.data;\n } catch (error) {\n setError(error);\n return Promise.reject(error);\n }\n },\n\n async updatePassword(user, type) {\n const { password, passwordRepeat } = state.user;\n\n if (password !== passwordRepeat) {\n const error = {\n response: {\n data: { errorCode: 'PASSWORDS_DO_NOT_MATCH' },\n },\n };\n setError(error);\n throw new Error(error.response.status);\n }\n\n try {\n const response = await $axios.post('/api/auth/update-password', {\n email: user.email,\n phone: user.phone,\n password: user.password,\n passwordRepeat: user.passwordRepeat,\n type,\n });\n\n if (response.data.accessToken) {\n setCookie('user', response.data);\n }\n\n Object.assign(state.user, {\n ...response.data,\n });\n\n Object.assign(state.access, {\n token: response.data.accessToken,\n status: true,\n });\n\n return response.data;\n } catch (error) {\n // Make sure cookie is removed on password update error\n await removeCookie('user');\n setError(error);\n return Promise.reject(error);\n }\n },\n};\n\n// Cookies\nconst optionsDefault = {\n development: { secure: false, expires: 7, sameSite: 'Lax' },\n production: {\n expires: 7,\n path: '/',\n domain: process.env.DOMAIN_URL,\n sameSite: 'strict',\n secure: true,\n },\n};\n\nasync function getCookie(name) {\n if (process.env.MOBILE_APP) {\n const { value } = await Preferences.get({ key: name });\n return value ? JSON.parse(value) : null;\n } else {\n const cookie = Cookies.get(name);\n return cookie ? JSON.parse(cookie) : null;\n }\n}\n\nasync function setCookie(name, data, env = process.env.DOMAIN_URL) {\n if (process.env.MOBILE_APP) {\n // Если приложение запущено в Capacitor\n await Preferences.set({\n key: name,\n value: JSON.stringify(data),\n });\n } else {\n // Для веб-версии\n Cookies.set(name, JSON.stringify(data), optionsDefault[env]);\n }\n}\n\nasync function removeCookie(name, env = process.env.NODE_ENV) {\n if (process.env.MOBILE_APP) {\n // Если приложение запущено в Capacitor\n await Preferences.remove({ key: name });\n } else {\n // Для веб-версии\n const options = env === 'production' ? { domain: process.env.DOMAIN_URL, path: '/' } : {};\n Cookies.remove(name, options);\n }\n}\n\n// History\nconst history = [];\nhistory.push(state);\n\n// Watch\nwatch(state, (newState, oldState) => {\n history.push(newState);\n});\n\n// Module Export\nexport { actions, removeCookie, state };\n"],"names":["twofa.state","Cookies"],"mappings":"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"}
@@ -1,32 +1,48 @@
1
1
  "use strict";
2
2
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
+ const IconCheckmark = require("../../../icons/navigation/IconCheckmark.vue.cjs");
3
4
  const vue = require("vue");
4
5
  const _pluginVue_exportHelper = require("../../../../../../_virtual/_plugin-vue_export-helper.cjs");
5
6
  const _sfc_main = {
7
+ components: {
8
+ IconCheckmark: IconCheckmark.default
9
+ },
6
10
  props: {
7
11
  message: {
8
12
  type: Object,
9
13
  required: true
10
14
  }
15
+ },
16
+ computed: {
17
+ isMessageRead() {
18
+ return this.message.readBy && this.message.readBy.length > 0;
19
+ }
11
20
  }
12
21
  };
13
- const _hoisted_1 = { class: "flex-v-center gap-thin flex-nowrap flex w-100 p-small" };
14
- const _hoisted_2 = { class: "mn-r-auto" };
15
- const _hoisted_3 = { class: "t-semi" };
16
- const _hoisted_4 = { class: "t-transp" };
22
+ const _hoisted_1 = ["data-message-id"];
23
+ const _hoisted_2 = { class: "flex-v-center gap-thin flex-nowrap flex w-100 p-small" };
24
+ const _hoisted_3 = { class: "mn-r-auto" };
25
+ const _hoisted_4 = { class: "t-semi" };
26
+ const _hoisted_5 = { class: "t-transp" };
17
27
  function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
28
+ const _component_IconCheckmark = vue.resolveComponent("IconCheckmark");
18
29
  return vue.openBlock(), vue.createElementBlock("div", {
19
- class: vue.normalizeClass(["pd-small", { "bg-main-nano": $props.message.username === "Support" }])
30
+ class: vue.normalizeClass(["pd-small", { "bg-main-nano": $props.message.username === "Support" }]),
31
+ "data-message-id": $props.message._id
20
32
  }, [
21
- vue.createElementVNode("p", _hoisted_1, [
22
- vue.createElementVNode("strong", _hoisted_2, [
23
- vue.createElementVNode("span", _hoisted_3, vue.toDisplayString($props.message.username), 1),
33
+ vue.createElementVNode("p", _hoisted_2, [
34
+ vue.createElementVNode("strong", _hoisted_3, [
35
+ vue.createElementVNode("span", _hoisted_4, vue.toDisplayString($props.message.username), 1),
24
36
  _cache[0] || (_cache[0] = vue.createTextVNode()),
25
- vue.createElementVNode("span", _hoisted_4, vue.toDisplayString(_ctx.formatDate($props.message.createdAt)), 1)
26
- ])
37
+ vue.createElementVNode("span", _hoisted_5, vue.toDisplayString(_ctx.formatDate($props.message.createdAt)), 1)
38
+ ]),
39
+ $options.isMessageRead ? (vue.openBlock(), vue.createBlock(_component_IconCheckmark, {
40
+ key: 0,
41
+ class: "i-small t-main"
42
+ })) : vue.createCommentVNode("", true)
27
43
  ]),
28
44
  vue.createElementVNode("p", null, vue.toDisplayString($props.message.text), 1)
29
- ], 2);
45
+ ], 10, _hoisted_1);
30
46
  }
31
47
  const ChatMessage = /* @__PURE__ */ _pluginVue_exportHelper.default(_sfc_main, [["render", _sfc_render]]);
32
48
  exports.default = ChatMessage;
@@ -1 +1 @@
1
- {"version":3,"file":"ChatMessage.vue.cjs","sources":["../../../../../../../src/modules/chats/components/blocks/ChatMessage.vue"],"sourcesContent":["<template>\n <div \n class=\"pd-small\"\n :class=\"{'bg-main-nano': message.username === 'Support'}\"\n >\n <p class=\"flex-v-center gap-thin flex-nowrap flex w-100 p-small\">\n <!-- <img loading=\"lazy\" v-if=\"message.username === 'Weeder Support'\" src=\"/logo/logo.png\" class=\"i-medium\"> -->\n <strong class=\"mn-r-auto\"><span class=\"t-semi\">{{ message.username }}</span> <span class=\"t-transp\">{{formatDate(message.createdAt)}}</span></strong>\n </p>\n <p>{{ message.text }}</p>\n </div>\n</template>\n\n<script>\nexport default {\n props: {\n message: {\n type: Object,\n required: true\n }\n }\n};\n</script>\n\n<style>\n</style>\n"],"names":["_createElementBlock","_normalizeClass","_createElementVNode","_toDisplayString","_createTextVNode"],"mappings":";;;;AAcA,MAAK,YAAU;AAAA,EACb,OAAO;AAAA,IACL,SAAS;AAAA,MACP,MAAM;AAAA,MACN,UAAU;AAAA,IACZ;AAAA,EACF;AACF;AAhBO,MAAA,aAAA,EAAA,OAAM,wDAAuD;AAEtD,MAAA,aAAA,EAAA,OAAM,YAAW;AAAO,MAAA,aAAA,EAAA,OAAM,SAAQ;AAAqC,MAAA,aAAA,EAAA,OAAM,WAAU;;0BANvGA,IAAAA,mBASM,OAAA;AAAA,IARJ,OAFJC,IAAAA,eAAA,CAEU,YAAU,EAAA,gBACS,OAAA,QAAQ,aAAQ,UAAA,CAAA,CAAA;AAAA;IAEzCC,IAAAA,mBAGI,KAHJ,YAGI;AAAA,MADFA,IAAAA,mBAAqJ,UAArJ,YAAqJ;AAAA,QAA3HA,uBAAkD,QAAlD,YAAkDC,IAAAA,gBAA1B,OAAA,QAAQ,QAAQ,GAAA,CAAA;AAAA,QAPxE,OAAA,CAAA,MAAA,OAAA,CAAA,IAAAC,IAAAA,gBAAA;AAAA,QAOmFF,IAAAA,mBAA+D,QAA/D,YAA+DC,IAAAA,gBAAtC,gBAAW,OAAA,QAAQ,SAAS,CAAA,GAAA,CAAA;AAAA;;IAEpID,IAAAA,mBAAyB,KAAA,MAAAC,IAAAA,gBAAnB,OAAA,QAAQ,IAAI,GAAA,CAAA;AAAA;;;;"}
1
+ {"version":3,"file":"ChatMessage.vue.cjs","sources":["../../../../../../../src/modules/chats/components/blocks/ChatMessage.vue"],"sourcesContent":["<template>\n <div \n class=\"pd-small\"\n :class=\"{'bg-main-nano': message.username === 'Support'}\"\n :data-message-id=\"message._id\"\n >\n <p class=\"flex-v-center gap-thin flex-nowrap flex w-100 p-small\">\n <!-- <img loading=\"lazy\" v-if=\"message.username === 'Weeder Support'\" src=\"/logo/logo.png\" class=\"i-medium\"> -->\n <strong class=\"mn-r-auto\"><span class=\"t-semi\">{{ message.username }}</span> <span class=\"t-transp\">{{formatDate(message.createdAt)}}</span></strong>\n <IconCheckmark v-if=\"isMessageRead\" class=\"i-small t-main\" />\n </p>\n <p>{{ message.text }}</p>\n </div>\n</template>\n\n<script>\nimport IconCheckmark from '@martyrs/src/modules/icons/navigation/IconCheckmark.vue';\n\nexport default {\n components: {\n IconCheckmark\n },\n props: {\n message: {\n type: Object,\n required: true\n }\n },\n computed: {\n isMessageRead() {\n return this.message.readBy && this.message.readBy.length > 0;\n }\n }\n};\n</script>\n\n<style>\n</style>\n"],"names":["IconCheckmark","_createElementBlock","_normalizeClass","_createElementVNode","_toDisplayString","_createTextVNode","_createBlock","_createCommentVNode"],"mappings":";;;;;AAkBA,MAAK,YAAU;AAAA,EACb,YAAY;AAAA,mBACVA,cAAAA;AAAAA;EAEF,OAAO;AAAA,IACL,SAAS;AAAA,MACP,MAAM;AAAA,MACN,UAAU;AAAA,IACZ;AAAA;EAEF,UAAU;AAAA,IACR,gBAAgB;AACd,aAAO,KAAK,QAAQ,UAAU,KAAK,QAAQ,OAAO,SAAS;AAAA,IAC7D;AAAA,EACF;AACF;AAjCA,MAAA,aAAA,CAAA,iBAAA;AAMO,MAAA,aAAA,EAAA,OAAM,wDAAuD;AAEtD,MAAA,aAAA,EAAA,OAAM,YAAW;AAAO,MAAA,aAAA,EAAA,OAAM,SAAQ;AAAqC,MAAA,aAAA,EAAA,OAAM,WAAU;;;0BAPvGC,IAAAA,mBAWM,OAAA;AAAA,IAVJ,OAFJC,IAAAA,eAAA,CAEU,YAAU,EAAA,gBACS,OAAA,QAAQ,aAAQ,UAAA,CAAA,CAAA;AAAA,IACxC,mBAAiB,OAAA,QAAQ;AAAA;IAE1BC,IAAAA,mBAII,KAJJ,YAII;AAAA,MAFFA,IAAAA,mBAAqJ,UAArJ,YAAqJ;AAAA,QAA3HA,uBAAkD,QAAlD,YAAkDC,IAAAA,gBAA1B,OAAA,QAAQ,QAAQ,GAAA,CAAA;AAAA,QARxE,OAAA,CAAA,MAAA,OAAA,CAAA,IAAAC,IAAAA,gBAAA;AAAA,QAQmFF,IAAAA,mBAA+D,QAA/D,YAA+DC,IAAAA,gBAAtC,gBAAW,OAAA,QAAQ,SAAS,CAAA,GAAA,CAAA;AAAA;MAC7G,SAAA,kCAArBE,IAAAA,YAA6D,0BAAA;AAAA,QATnE,KAAA;AAAA,QAS0C,OAAM;AAAA,YAThDC,IAAAA,mBAAA,IAAA,IAAA;AAAA;IAWIJ,IAAAA,mBAAyB,KAAA,MAAAC,IAAAA,gBAAnB,OAAA,QAAQ,IAAI,GAAA,CAAA;AAAA,EAXtB,GAAA,IAAA,UAAA;;;;"}
@@ -1,30 +1,46 @@
1
- import { createElementBlock, openBlock, normalizeClass, createElementVNode, createTextVNode, toDisplayString } from "vue";
1
+ import _sfc_main$1 from "../../../icons/navigation/IconCheckmark.vue.js";
2
+ import { resolveComponent, createElementBlock, openBlock, normalizeClass, createElementVNode, createBlock, createCommentVNode, createTextVNode, toDisplayString } from "vue";
2
3
  import _export_sfc from "../../../../../../_virtual/_plugin-vue_export-helper.js";
3
4
  const _sfc_main = {
5
+ components: {
6
+ IconCheckmark: _sfc_main$1
7
+ },
4
8
  props: {
5
9
  message: {
6
10
  type: Object,
7
11
  required: true
8
12
  }
13
+ },
14
+ computed: {
15
+ isMessageRead() {
16
+ return this.message.readBy && this.message.readBy.length > 0;
17
+ }
9
18
  }
10
19
  };
11
- const _hoisted_1 = { class: "flex-v-center gap-thin flex-nowrap flex w-100 p-small" };
12
- const _hoisted_2 = { class: "mn-r-auto" };
13
- const _hoisted_3 = { class: "t-semi" };
14
- const _hoisted_4 = { class: "t-transp" };
20
+ const _hoisted_1 = ["data-message-id"];
21
+ const _hoisted_2 = { class: "flex-v-center gap-thin flex-nowrap flex w-100 p-small" };
22
+ const _hoisted_3 = { class: "mn-r-auto" };
23
+ const _hoisted_4 = { class: "t-semi" };
24
+ const _hoisted_5 = { class: "t-transp" };
15
25
  function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
26
+ const _component_IconCheckmark = resolveComponent("IconCheckmark");
16
27
  return openBlock(), createElementBlock("div", {
17
- class: normalizeClass(["pd-small", { "bg-main-nano": $props.message.username === "Support" }])
28
+ class: normalizeClass(["pd-small", { "bg-main-nano": $props.message.username === "Support" }]),
29
+ "data-message-id": $props.message._id
18
30
  }, [
19
- createElementVNode("p", _hoisted_1, [
20
- createElementVNode("strong", _hoisted_2, [
21
- createElementVNode("span", _hoisted_3, toDisplayString($props.message.username), 1),
31
+ createElementVNode("p", _hoisted_2, [
32
+ createElementVNode("strong", _hoisted_3, [
33
+ createElementVNode("span", _hoisted_4, toDisplayString($props.message.username), 1),
22
34
  _cache[0] || (_cache[0] = createTextVNode()),
23
- createElementVNode("span", _hoisted_4, toDisplayString(_ctx.formatDate($props.message.createdAt)), 1)
24
- ])
35
+ createElementVNode("span", _hoisted_5, toDisplayString(_ctx.formatDate($props.message.createdAt)), 1)
36
+ ]),
37
+ $options.isMessageRead ? (openBlock(), createBlock(_component_IconCheckmark, {
38
+ key: 0,
39
+ class: "i-small t-main"
40
+ })) : createCommentVNode("", true)
25
41
  ]),
26
42
  createElementVNode("p", null, toDisplayString($props.message.text), 1)
27
- ], 2);
43
+ ], 10, _hoisted_1);
28
44
  }
29
45
  const ChatMessage = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]]);
30
46
  export {
@@ -1 +1 @@
1
- {"version":3,"file":"ChatMessage.vue.js","sources":["../../../../../../../src/modules/chats/components/blocks/ChatMessage.vue"],"sourcesContent":["<template>\n <div \n class=\"pd-small\"\n :class=\"{'bg-main-nano': message.username === 'Support'}\"\n >\n <p class=\"flex-v-center gap-thin flex-nowrap flex w-100 p-small\">\n <!-- <img loading=\"lazy\" v-if=\"message.username === 'Weeder Support'\" src=\"/logo/logo.png\" class=\"i-medium\"> -->\n <strong class=\"mn-r-auto\"><span class=\"t-semi\">{{ message.username }}</span> <span class=\"t-transp\">{{formatDate(message.createdAt)}}</span></strong>\n </p>\n <p>{{ message.text }}</p>\n </div>\n</template>\n\n<script>\nexport default {\n props: {\n message: {\n type: Object,\n required: true\n }\n }\n};\n</script>\n\n<style>\n</style>\n"],"names":["_createElementBlock","_normalizeClass","_createElementVNode","_toDisplayString","_createTextVNode"],"mappings":";;AAcA,MAAK,YAAU;AAAA,EACb,OAAO;AAAA,IACL,SAAS;AAAA,MACP,MAAM;AAAA,MACN,UAAU;AAAA,IACZ;AAAA,EACF;AACF;AAhBO,MAAA,aAAA,EAAA,OAAM,wDAAuD;AAEtD,MAAA,aAAA,EAAA,OAAM,YAAW;AAAO,MAAA,aAAA,EAAA,OAAM,SAAQ;AAAqC,MAAA,aAAA,EAAA,OAAM,WAAU;;sBANvGA,mBASM,OAAA;AAAA,IARJ,OAFJC,eAAA,CAEU,YAAU,EAAA,gBACS,OAAA,QAAQ,aAAQ,UAAA,CAAA,CAAA;AAAA;IAEzCC,mBAGI,KAHJ,YAGI;AAAA,MADFA,mBAAqJ,UAArJ,YAAqJ;AAAA,QAA3HA,mBAAkD,QAAlD,YAAkDC,gBAA1B,OAAA,QAAQ,QAAQ,GAAA,CAAA;AAAA,QAPxE,OAAA,CAAA,MAAA,OAAA,CAAA,IAAAC,gBAAA;AAAA,QAOmFF,mBAA+D,QAA/D,YAA+DC,gBAAtC,gBAAW,OAAA,QAAQ,SAAS,CAAA,GAAA,CAAA;AAAA;;IAEpID,mBAAyB,KAAA,MAAAC,gBAAnB,OAAA,QAAQ,IAAI,GAAA,CAAA;AAAA;;;"}
1
+ {"version":3,"file":"ChatMessage.vue.js","sources":["../../../../../../../src/modules/chats/components/blocks/ChatMessage.vue"],"sourcesContent":["<template>\n <div \n class=\"pd-small\"\n :class=\"{'bg-main-nano': message.username === 'Support'}\"\n :data-message-id=\"message._id\"\n >\n <p class=\"flex-v-center gap-thin flex-nowrap flex w-100 p-small\">\n <!-- <img loading=\"lazy\" v-if=\"message.username === 'Weeder Support'\" src=\"/logo/logo.png\" class=\"i-medium\"> -->\n <strong class=\"mn-r-auto\"><span class=\"t-semi\">{{ message.username }}</span> <span class=\"t-transp\">{{formatDate(message.createdAt)}}</span></strong>\n <IconCheckmark v-if=\"isMessageRead\" class=\"i-small t-main\" />\n </p>\n <p>{{ message.text }}</p>\n </div>\n</template>\n\n<script>\nimport IconCheckmark from '@martyrs/src/modules/icons/navigation/IconCheckmark.vue';\n\nexport default {\n components: {\n IconCheckmark\n },\n props: {\n message: {\n type: Object,\n required: true\n }\n },\n computed: {\n isMessageRead() {\n return this.message.readBy && this.message.readBy.length > 0;\n }\n }\n};\n</script>\n\n<style>\n</style>\n"],"names":["IconCheckmark","_createElementBlock","_normalizeClass","_createElementVNode","_toDisplayString","_createTextVNode","_createBlock","_createCommentVNode"],"mappings":";;;AAkBA,MAAK,YAAU;AAAA,EACb,YAAY;AAAA,mBACVA;AAAAA;EAEF,OAAO;AAAA,IACL,SAAS;AAAA,MACP,MAAM;AAAA,MACN,UAAU;AAAA,IACZ;AAAA;EAEF,UAAU;AAAA,IACR,gBAAgB;AACd,aAAO,KAAK,QAAQ,UAAU,KAAK,QAAQ,OAAO,SAAS;AAAA,IAC7D;AAAA,EACF;AACF;AAjCA,MAAA,aAAA,CAAA,iBAAA;AAMO,MAAA,aAAA,EAAA,OAAM,wDAAuD;AAEtD,MAAA,aAAA,EAAA,OAAM,YAAW;AAAO,MAAA,aAAA,EAAA,OAAM,SAAQ;AAAqC,MAAA,aAAA,EAAA,OAAM,WAAU;;;sBAPvGC,mBAWM,OAAA;AAAA,IAVJ,OAFJC,eAAA,CAEU,YAAU,EAAA,gBACS,OAAA,QAAQ,aAAQ,UAAA,CAAA,CAAA;AAAA,IACxC,mBAAiB,OAAA,QAAQ;AAAA;IAE1BC,mBAII,KAJJ,YAII;AAAA,MAFFA,mBAAqJ,UAArJ,YAAqJ;AAAA,QAA3HA,mBAAkD,QAAlD,YAAkDC,gBAA1B,OAAA,QAAQ,QAAQ,GAAA,CAAA;AAAA,QARxE,OAAA,CAAA,MAAA,OAAA,CAAA,IAAAC,gBAAA;AAAA,QAQmFF,mBAA+D,QAA/D,YAA+DC,gBAAtC,gBAAW,OAAA,QAAQ,SAAS,CAAA,GAAA,CAAA;AAAA;MAC7G,SAAA,8BAArBE,YAA6D,0BAAA;AAAA,QATnE,KAAA;AAAA,QAS0C,OAAM;AAAA,YAThDC,mBAAA,IAAA,IAAA;AAAA;IAWIJ,mBAAyB,KAAA,MAAAC,gBAAnB,OAAA,QAAQ,IAAI,GAAA,CAAA;AAAA,EAXtB,GAAA,IAAA,UAAA;;;"}
@@ -17,6 +17,8 @@ const _sfc_main = {
17
17
  setup(__props) {
18
18
  const newMessage = vue.ref("");
19
19
  const allMessages = vue.ref(null);
20
+ const visibleMessageIds = vue.ref(/* @__PURE__ */ new Set());
21
+ let messageObserver = null;
20
22
  const messages = vue.computed(() => chat_store.default.state.messages);
21
23
  const scrollToBottom = () => {
22
24
  if (allMessages.value) {
@@ -38,11 +40,65 @@ const _sfc_main = {
38
40
  scrollToBottom();
39
41
  }
40
42
  };
43
+ const observeMessages = () => {
44
+ console.log("[CHAT] Setting up message observer");
45
+ if (messageObserver) {
46
+ messageObserver.disconnect();
47
+ }
48
+ messageObserver = new IntersectionObserver((entries) => {
49
+ console.log("[CHAT] Observer triggered for", entries.length, "entries");
50
+ entries.forEach((entry) => {
51
+ const messageId = entry.target.dataset.messageId;
52
+ if (entry.isIntersecting) {
53
+ visibleMessageIds.value.add(messageId);
54
+ } else {
55
+ visibleMessageIds.value.delete(messageId);
56
+ }
57
+ });
58
+ if (visibleMessageIds.value.size > 0) {
59
+ const unreadVisibleMessages = messages.value.filter((msg) => {
60
+ if (!visibleMessageIds.value.has(msg._id)) return false;
61
+ console.log("[CHAT] Checking if own message:", {
62
+ msgUserId: msg.userId,
63
+ currentUserId: chat_store.default.state.userId,
64
+ isEqual: msg.userId === chat_store.default.state.userId,
65
+ msgUserIdType: typeof msg.userId,
66
+ currentUserIdType: typeof chat_store.default.state.userId
67
+ });
68
+ if (msg.userId && msg.userId === chat_store.default.state.userId) return false;
69
+ if (msg.readBy?.some((r) => r.userId === chat_store.default.state.userId)) return false;
70
+ console.log("[CHAT] Message can be marked as read:", {
71
+ msgId: msg._id,
72
+ msgUserId: msg.userId,
73
+ currentUserId: chat_store.default.state.userId,
74
+ readBy: msg.readBy
75
+ });
76
+ return true;
77
+ }).map((msg) => msg._id);
78
+ console.log("[CHAT] Unread visible messages to mark:", unreadVisibleMessages);
79
+ if (unreadVisibleMessages.length > 0) {
80
+ console.log("[CHAT] Sending markAsRead for messages:", unreadVisibleMessages);
81
+ chat_store.default.methods.markMessagesAsRead(unreadVisibleMessages);
82
+ } else {
83
+ console.log("[CHAT] No unread messages to mark");
84
+ }
85
+ }
86
+ }, {
87
+ root: allMessages.value,
88
+ threshold: 0.5
89
+ });
90
+ vue.nextTick(() => {
91
+ const messageElements = allMessages.value?.querySelectorAll("[data-message-id]");
92
+ console.log("[CHAT] Found message elements to observe:", messageElements?.length);
93
+ messageElements?.forEach((el) => messageObserver.observe(el));
94
+ });
95
+ };
41
96
  vue.onMounted(() => {
42
97
  vue.nextTick(() => {
43
98
  if (allMessages.value) {
44
99
  allMessages.value.scrollTop = allMessages.value.scrollHeight;
45
100
  }
101
+ observeMessages();
46
102
  });
47
103
  });
48
104
  vue.watch(messages, () => {
@@ -50,8 +106,14 @@ const _sfc_main = {
50
106
  if (allMessages.value) {
51
107
  allMessages.value.scrollTop = allMessages.value.scrollHeight;
52
108
  }
109
+ observeMessages();
53
110
  });
54
111
  }, { deep: true });
112
+ vue.onUnmounted(() => {
113
+ if (messageObserver) {
114
+ messageObserver.disconnect();
115
+ }
116
+ });
55
117
  return (_ctx, _cache) => {
56
118
  return vue.openBlock(), vue.createElementBlock("div", _hoisted_1, [
57
119
  vue.createElementVNode("div", {
@@ -1 +1 @@
1
- {"version":3,"file":"ChatWindow.vue.cjs","sources":["../../../../../../../src/modules/chats/components/sections/ChatWindow.vue"],"sourcesContent":["<template>\n <div class=\"bg-white radius-semi bg-white o-hidden pos-relative\">\n <div ref=\"allMessages\" class=\"chat-messages o-scroll h-max-20r\">\n <div class=\"pos-relative h-min-20r flex-justify-end flex flex-column br-b br-solid br-black-transp-10\">\n <transition name=\"scaleIn\" mode=\"out-in\">\n <div v-if=\"messages.length < 1\" class=\"flex-center pd-small t-center w-100 h-100 flex-column flex pos-absolute\">\n <PlaceholderChat class=\"radius-100 mn-b-thin\"/>\n <h4 class='mn-b-thin'>Here you can view your chat history</h4>\n <p>Feel free to ask if you have any questions.</p>\n </div>\n\n <TransitionGroup v-else name=\"list\" tag=\"ul\" class=\"w-100 o-hidden\" @after-enter=\"scrollToBottom\">\n <ChatMessage\n v-for=\"message in messages\"\n :key=\"message._id\"\n :message=\"message\"\n />\n </TransitionGroup>\n </transition>\n </div>\n </div>\n\n <div class=\"flex-nowrap flex-v-center flex bg-white w-100 radius-big pd-small\">\n <!-- <IconAdd class=\"mn-r-thin t-transp i-regular\" /> -->\n <input class=\"\" placeholder=\"Enter your message\" type=\"text\" v-model=\"newMessage\" @keyup.enter=\"sendMessage\" />\n </div>\n </div>\n</template>\n\n<script setup>\nimport { ref, computed, watch, onMounted, nextTick } from 'vue';\n\nimport IconAdd from '@martyrs/src/modules/icons/navigation/IconAdd.vue'\nimport PlaceholderChat from '@martyrs/src/modules/icons/placeholders/PlaceholderChat.vue'\n\nimport ChatMessage from '../blocks/ChatMessage.vue';\nimport chatStore from '../../store/chat.store.js';\n\nconst newMessage = ref('');\nconst allMessages = ref(null);\n\n// Вычисляемые свойства\nconst messages = computed(() => chatStore.state.messages);\n\n// Функция прокрутки вниз\nconst scrollToBottom = () => {\n if (allMessages.value) {\n allMessages.value.scrollTop = allMessages.value.scrollHeight;\n }\n};\n\n// Функция для отправки сообщения\nconst sendMessage = async () => {\n if (newMessage.value) {\n const message = {\n text: newMessage.value,\n module: 'chat',\n username: chatStore.state.username,\n chatId: chatStore.state.currentChatId\n };\n\n chatStore.methods.addMessage(message);\n newMessage.value = '';\n\n // Ждем, пока все анимации и рендеринг завершатся\n await nextTick();\n await new Promise(resolve => setTimeout(resolve, 100)); // Небольшая задержка для анимаций\n scrollToBottom();\n }\n};\n\n// Прокрутка вниз при монтировании\nonMounted(() => {\n nextTick(() => {\n if (allMessages.value) {\n allMessages.value.scrollTop = allMessages.value.scrollHeight;\n }\n });\n});\n\n// Прокрутка вниз при изменении сообщений\nwatch(messages, () => {\n nextTick(() => {\n if (allMessages.value) {\n allMessages.value.scrollTop = allMessages.value.scrollHeight;\n }\n });\n}, { deep: true });\n\n// Обработчик после завершения анимации входа нового элемента\n</script>\n\n<style>\n.list-enter-active,\n.list-leave-active {\n transition: all 0.5s ease;\n}\n.list-enter-from,\n.list-leave-to {\n opacity: 0;\n transform: translateX(30px);\n}\n</style>"],"names":["ref","computed","chatStore","nextTick","onMounted","watch"],"mappings":";;;;;;;;;;;;;;;;;AAsCA,UAAM,aAAaA,IAAAA,IAAI,EAAE;AACzB,UAAM,cAAcA,IAAAA,IAAI,IAAI;AAG5B,UAAM,WAAWC,IAAAA,SAAS,MAAMC,mBAAU,MAAM,QAAQ;AAGxD,UAAM,iBAAiB,MAAM;AAC3B,UAAI,YAAY,OAAO;AACrB,oBAAY,MAAM,YAAY,YAAY,MAAM;AAAA,MAClD;AAAA,IACF;AAGA,UAAM,cAAc,YAAY;AAC9B,UAAI,WAAW,OAAO;AACpB,cAAM,UAAU;AAAA,UACd,MAAM,WAAW;AAAA,UACjB,QAAQ;AAAA,UACR,UAAUA,WAAAA,QAAU,MAAM;AAAA,UAC1B,QAAQA,WAAAA,QAAU,MAAM;AAAA,QAC9B;AAEIA,2BAAU,QAAQ,WAAW,OAAO;AACpC,mBAAW,QAAQ;AAGnB,cAAMC,aAAQ;AACd,cAAM,IAAI,QAAQ,aAAW,WAAW,SAAS,GAAG,CAAC;AACrD,uBAAc;AAAA,MAChB;AAAA,IACF;AAGAC,QAAAA,UAAU,MAAM;AACdD,UAAAA,SAAS,MAAM;AACb,YAAI,YAAY,OAAO;AACrB,sBAAY,MAAM,YAAY,YAAY,MAAM;AAAA,QAClD;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AAGDE,QAAAA,MAAM,UAAU,MAAM;AACpBF,UAAAA,SAAS,MAAM;AACb,YAAI,YAAY,OAAO;AACrB,sBAAY,MAAM,YAAY,YAAY,MAAM;AAAA,QAClD;AAAA,MACF,CAAC;AAAA,IACH,GAAG,EAAE,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"ChatWindow.vue.cjs","sources":["../../../../../../../src/modules/chats/components/sections/ChatWindow.vue"],"sourcesContent":["<template>\n <div class=\"bg-white radius-semi bg-white o-hidden pos-relative\">\n <div ref=\"allMessages\" class=\"chat-messages o-scroll h-max-20r\">\n <div class=\"pos-relative h-min-20r flex-justify-end flex flex-column br-b br-solid br-black-transp-10\">\n <transition name=\"scaleIn\" mode=\"out-in\">\n <div v-if=\"messages.length < 1\" class=\"flex-center pd-small t-center w-100 h-100 flex-column flex pos-absolute\">\n <PlaceholderChat class=\"radius-100 mn-b-thin\"/>\n <h4 class='mn-b-thin'>Here you can view your chat history</h4>\n <p>Feel free to ask if you have any questions.</p>\n </div>\n\n <TransitionGroup v-else name=\"list\" tag=\"ul\" class=\"w-100 o-hidden\" @after-enter=\"scrollToBottom\">\n <ChatMessage\n v-for=\"message in messages\"\n :key=\"message._id\"\n :message=\"message\"\n />\n </TransitionGroup>\n </transition>\n </div>\n </div>\n\n <div class=\"flex-nowrap flex-v-center flex bg-white w-100 radius-big pd-small\">\n <!-- <IconAdd class=\"mn-r-thin t-transp i-regular\" /> -->\n <input class=\"\" placeholder=\"Enter your message\" type=\"text\" v-model=\"newMessage\" @keyup.enter=\"sendMessage\" />\n </div>\n </div>\n</template>\n\n<script setup>\nimport { ref, computed, watch, onMounted, onUnmounted, nextTick } from 'vue';\n\nimport IconAdd from '@martyrs/src/modules/icons/navigation/IconAdd.vue'\nimport PlaceholderChat from '@martyrs/src/modules/icons/placeholders/PlaceholderChat.vue'\n\nimport ChatMessage from '../blocks/ChatMessage.vue';\nimport chatStore from '../../store/chat.store.js';\n\nconst newMessage = ref('');\nconst allMessages = ref(null);\nconst visibleMessageIds = ref(new Set());\nlet messageObserver = null;\n\n// Вычисляемые свойства\nconst messages = computed(() => chatStore.state.messages);\n\n// Функция прокрутки вниз\nconst scrollToBottom = () => {\n if (allMessages.value) {\n allMessages.value.scrollTop = allMessages.value.scrollHeight;\n }\n};\n\n// Функция для отправки сообщения\nconst sendMessage = async () => {\n if (newMessage.value) {\n const message = {\n text: newMessage.value,\n module: 'chat',\n username: chatStore.state.username,\n chatId: chatStore.state.currentChatId\n };\n\n chatStore.methods.addMessage(message);\n newMessage.value = '';\n\n // Ждем, пока все анимации и рендеринг завершатся\n await nextTick();\n await new Promise(resolve => setTimeout(resolve, 100)); // Небольшая задержка для анимаций\n scrollToBottom();\n }\n};\n\n// Отслеживание видимых сообщений\nconst observeMessages = () => {\n console.log('[CHAT] Setting up message observer');\n \n // Очищаем предыдущий observer если есть\n if (messageObserver) {\n messageObserver.disconnect();\n }\n \n messageObserver = new IntersectionObserver((entries) => {\n console.log('[CHAT] Observer triggered for', entries.length, 'entries');\n entries.forEach(entry => {\n const messageId = entry.target.dataset.messageId;\n if (entry.isIntersecting) {\n visibleMessageIds.value.add(messageId);\n } else {\n visibleMessageIds.value.delete(messageId);\n }\n });\n \n // Отправляем прочтение видимых сообщений\n if (visibleMessageIds.value.size > 0) {\n const unreadVisibleMessages = messages.value\n .filter(msg => {\n // Проверяем, что сообщение видимо\n if (!visibleMessageIds.value.has(msg._id)) return false;\n \n // Проверяем, что сообщение не от текущего пользователя\n console.log('[CHAT] Checking if own message:', {\n msgUserId: msg.userId,\n currentUserId: chatStore.state.userId,\n isEqual: msg.userId === chatStore.state.userId,\n msgUserIdType: typeof msg.userId,\n currentUserIdType: typeof chatStore.state.userId\n });\n if (msg.userId && msg.userId === chatStore.state.userId) return false;\n \n // Проверяем, что сообщение еще не прочитано текущим пользователем\n if (msg.readBy?.some(r => r.userId === chatStore.state.userId)) return false;\n \n console.log('[CHAT] Message can be marked as read:', {\n msgId: msg._id,\n msgUserId: msg.userId,\n currentUserId: chatStore.state.userId,\n readBy: msg.readBy\n });\n \n return true;\n })\n .map(msg => msg._id);\n \n console.log('[CHAT] Unread visible messages to mark:', unreadVisibleMessages);\n \n if (unreadVisibleMessages.length > 0) {\n console.log('[CHAT] Sending markAsRead for messages:', unreadVisibleMessages);\n chatStore.methods.markMessagesAsRead(unreadVisibleMessages);\n } else {\n console.log('[CHAT] No unread messages to mark');\n }\n }\n }, {\n root: allMessages.value,\n threshold: 0.5\n });\n \n // Наблюдаем за всеми сообщениями\n nextTick(() => {\n const messageElements = allMessages.value?.querySelectorAll('[data-message-id]');\n console.log('[CHAT] Found message elements to observe:', messageElements?.length);\n messageElements?.forEach(el => messageObserver.observe(el));\n });\n};\n\n// Прокрутка вниз при монтировании\nonMounted(() => {\n nextTick(() => {\n if (allMessages.value) {\n allMessages.value.scrollTop = allMessages.value.scrollHeight;\n }\n observeMessages();\n });\n});\n\n// Прокрутка вниз при изменении сообщений\nwatch(messages, () => {\n nextTick(() => {\n if (allMessages.value) {\n allMessages.value.scrollTop = allMessages.value.scrollHeight;\n }\n observeMessages();\n });\n}, { deep: true });\n\n// Очистка observer при размонтировании\nonUnmounted(() => {\n if (messageObserver) {\n messageObserver.disconnect();\n }\n});\n</script>\n\n<style>\n.list-enter-active,\n.list-leave-active {\n transition: all 0.5s ease;\n}\n.list-enter-from,\n.list-leave-to {\n opacity: 0;\n transform: translateX(30px);\n}\n</style>"],"names":["ref","computed","chatStore","nextTick","onMounted","watch","onUnmounted"],"mappings":"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"}