@ozdao/martyrs 0.2.427 → 0.2.429

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 (222) hide show
  1. package/dist/martyrs/src/components/Block/Block.vue.cjs +1 -1
  2. package/dist/martyrs/src/components/Block/Block.vue.js +1 -1
  3. package/dist/martyrs/src/components/Chips/{Chips.vue2.cjs → Chips.vue.cjs} +2 -2
  4. package/dist/martyrs/src/components/Chips/Chips.vue.cjs.map +1 -0
  5. package/dist/martyrs/src/components/Chips/{Chips.vue2.js → Chips.vue.js} +2 -2
  6. package/dist/martyrs/src/components/Chips/Chips.vue.js.map +1 -0
  7. package/dist/martyrs/src/components/Dropdown/{Dropdown.vue2.cjs → Dropdown.vue.cjs} +2 -2
  8. package/dist/martyrs/src/components/Dropdown/{Dropdown.vue2.js.map → Dropdown.vue.cjs.map} +1 -1
  9. package/dist/martyrs/src/components/Dropdown/{Dropdown.vue2.js → Dropdown.vue.js} +2 -2
  10. package/dist/martyrs/src/components/Dropdown/Dropdown.vue.js.map +1 -0
  11. package/dist/martyrs/src/components/Feed/Feed.vue.cjs +1 -1
  12. package/dist/martyrs/src/components/Feed/Feed.vue.js +1 -1
  13. package/dist/martyrs/src/components/Popup/{Popup.vue.cjs → Popup.vue2.cjs} +2 -2
  14. package/dist/martyrs/src/components/Popup/Popup.vue2.cjs.map +1 -0
  15. package/dist/martyrs/src/components/Popup/{Popup.vue.js → Popup.vue2.js} +2 -2
  16. package/dist/martyrs/src/components/Popup/{Popup.vue.cjs.map → Popup.vue2.js.map} +1 -1
  17. package/dist/martyrs/src/components/SelectMulti/{SelectMulti.vue2.cjs → SelectMulti.vue.cjs} +2 -2
  18. package/dist/martyrs/src/components/SelectMulti/{SelectMulti.vue2.js.map → SelectMulti.vue.cjs.map} +1 -1
  19. package/dist/martyrs/src/components/SelectMulti/{SelectMulti.vue2.js → SelectMulti.vue.js} +2 -2
  20. package/dist/martyrs/src/components/SelectMulti/SelectMulti.vue.js.map +1 -0
  21. package/dist/martyrs/src/components/Tooltip/{Tooltip.vue2.cjs → Tooltip.vue.cjs} +2 -2
  22. package/dist/martyrs/src/components/Tooltip/{Tooltip.vue2.js.map → Tooltip.vue.cjs.map} +1 -1
  23. package/dist/martyrs/src/components/Tooltip/{Tooltip.vue2.js → Tooltip.vue.js} +2 -2
  24. package/dist/martyrs/src/components/Tooltip/Tooltip.vue.js.map +1 -0
  25. package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.cjs +1 -1
  26. package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js +1 -1
  27. package/dist/martyrs/src/modules/backoffice/components/partials/Sidebar.vue.cjs +1 -1
  28. package/dist/martyrs/src/modules/backoffice/components/partials/Sidebar.vue.js +1 -1
  29. package/dist/martyrs/src/modules/chats/components/pages/ChatPage.vue.cjs +13 -3
  30. package/dist/martyrs/src/modules/chats/components/pages/ChatPage.vue.cjs.map +1 -1
  31. package/dist/martyrs/src/modules/chats/components/pages/ChatPage.vue.js +14 -4
  32. package/dist/martyrs/src/modules/chats/components/pages/ChatPage.vue.js.map +1 -1
  33. package/dist/martyrs/src/modules/chats/components/sections/ChatWindow.vue.cjs +24 -6
  34. package/dist/martyrs/src/modules/chats/components/sections/ChatWindow.vue.cjs.map +1 -1
  35. package/dist/martyrs/src/modules/chats/components/sections/ChatWindow.vue.js +25 -7
  36. package/dist/martyrs/src/modules/chats/components/sections/ChatWindow.vue.js.map +1 -1
  37. package/dist/martyrs/src/modules/chats/store/chat.store.cjs +7 -8
  38. package/dist/martyrs/src/modules/chats/store/chat.store.cjs.map +1 -1
  39. package/dist/martyrs/src/modules/chats/store/chat.store.js +7 -8
  40. package/dist/martyrs/src/modules/chats/store/chat.store.js.map +1 -1
  41. package/dist/martyrs/src/modules/community/components/blocks/CardBlogpost.vue.cjs +1 -1
  42. package/dist/martyrs/src/modules/community/components/blocks/CardBlogpost.vue.js +1 -1
  43. package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.cjs +2 -2
  44. package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.js +2 -2
  45. package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.cjs +1 -1
  46. package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.js +1 -1
  47. package/dist/martyrs/src/modules/community/components/sections/HotPosts.vue.cjs +1 -1
  48. package/dist/martyrs/src/modules/community/components/sections/HotPosts.vue.js +1 -1
  49. package/dist/martyrs/src/modules/events/components/blocks/CardEvent.vue.cjs +1 -1
  50. package/dist/martyrs/src/modules/events/components/blocks/CardEvent.vue.js +1 -1
  51. package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.cjs +2 -2
  52. package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.js +2 -2
  53. package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.cjs +1 -1
  54. package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.js +1 -1
  55. package/dist/martyrs/src/modules/events/components/pages/Event.vue.cjs +1 -1
  56. package/dist/martyrs/src/modules/events/components/pages/Event.vue.js +1 -1
  57. package/dist/martyrs/src/modules/events/components/pages/Events.vue.cjs +1 -1
  58. package/dist/martyrs/src/modules/events/components/pages/Events.vue.js +1 -1
  59. package/dist/martyrs/src/modules/events/components/sections/EventsHot.vue.cjs +1 -1
  60. package/dist/martyrs/src/modules/events/components/sections/EventsHot.vue.js +1 -1
  61. package/dist/martyrs/src/modules/gallery/components/pages/Gallery.vue.cjs +1 -1
  62. package/dist/martyrs/src/modules/gallery/components/pages/Gallery.vue.js +1 -1
  63. package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.cjs +3 -3
  64. package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.js +3 -3
  65. package/dist/martyrs/src/modules/globals/views/classes/globals.websocket.cjs +6 -8
  66. package/dist/martyrs/src/modules/globals/views/classes/globals.websocket.cjs.map +1 -1
  67. package/dist/martyrs/src/modules/globals/views/classes/globals.websocket.js +6 -8
  68. package/dist/martyrs/src/modules/globals/views/classes/globals.websocket.js.map +1 -1
  69. package/dist/martyrs/src/modules/globals/views/components/blocks/CardHeader.vue.cjs +2 -2
  70. package/dist/martyrs/src/modules/globals/views/components/blocks/CardHeader.vue.js +2 -2
  71. package/dist/martyrs/src/modules/globals/views/components/blocks/PopupDateSelector.vue.cjs +1 -1
  72. package/dist/martyrs/src/modules/globals/views/components/blocks/PopupDateSelector.vue.js +1 -1
  73. package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.cjs +1 -1
  74. package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.js +1 -1
  75. package/dist/martyrs/src/modules/globals/views/components/partials/Navigation.vue.cjs +1 -1
  76. package/dist/martyrs/src/modules/globals/views/components/partials/Navigation.vue.js +1 -1
  77. package/dist/martyrs/src/modules/landing/components/sections/SectionEarn.vue.cjs +5 -5
  78. package/dist/martyrs/src/modules/landing/components/sections/SectionEarn.vue.cjs.map +1 -1
  79. package/dist/martyrs/src/modules/landing/components/sections/SectionEarn.vue.js +5 -5
  80. package/dist/martyrs/src/modules/landing/components/sections/SectionEarn.vue.js.map +1 -1
  81. package/dist/martyrs/src/modules/landing/components/sections/SectionFeatures.vue.cjs +1 -1
  82. package/dist/martyrs/src/modules/landing/components/sections/SectionFeatures.vue.cjs.map +1 -1
  83. package/dist/martyrs/src/modules/landing/components/sections/SectionFeatures.vue.js +1 -1
  84. package/dist/martyrs/src/modules/landing/components/sections/SectionFeatures.vue.js.map +1 -1
  85. package/dist/martyrs/src/modules/landing/components/sections/SectionMobileApp.vue.cjs +3 -3
  86. package/dist/martyrs/src/modules/landing/components/sections/SectionMobileApp.vue.cjs.map +1 -1
  87. package/dist/martyrs/src/modules/landing/components/sections/SectionMobileApp.vue.js +3 -3
  88. package/dist/martyrs/src/modules/landing/components/sections/SectionMobileApp.vue.js.map +1 -1
  89. package/dist/martyrs/src/modules/landing/components/sections/SectionOverview.vue.cjs +1 -1
  90. package/dist/martyrs/src/modules/landing/components/sections/SectionOverview.vue.cjs.map +1 -1
  91. package/dist/martyrs/src/modules/landing/components/sections/SectionOverview.vue.js +1 -1
  92. package/dist/martyrs/src/modules/landing/components/sections/SectionOverview.vue.js.map +1 -1
  93. package/dist/martyrs/src/modules/marketplace/views/components/sections/SectionMenu.vue.cjs +3 -3
  94. package/dist/martyrs/src/modules/marketplace/views/components/sections/SectionMenu.vue.cjs.map +1 -1
  95. package/dist/martyrs/src/modules/marketplace/views/components/sections/SectionMenu.vue.js +3 -3
  96. package/dist/martyrs/src/modules/marketplace/views/components/sections/SectionMenu.vue.js.map +1 -1
  97. package/dist/martyrs/src/modules/notifications/components/elements/NotificationBadge.vue.cjs +7 -1
  98. package/dist/martyrs/src/modules/notifications/components/elements/NotificationBadge.vue.cjs.map +1 -1
  99. package/dist/martyrs/src/modules/notifications/components/elements/NotificationBadge.vue.js +7 -1
  100. package/dist/martyrs/src/modules/notifications/components/elements/NotificationBadge.vue.js.map +1 -1
  101. package/dist/martyrs/src/modules/orders/components/blocks/CardOrderItem.vue.cjs +2 -2
  102. package/dist/martyrs/src/modules/orders/components/blocks/CardOrderItem.vue.cjs.map +1 -1
  103. package/dist/martyrs/src/modules/orders/components/blocks/CardOrderItem.vue.js +2 -2
  104. package/dist/martyrs/src/modules/orders/components/blocks/CardOrderItem.vue.js.map +1 -1
  105. package/dist/martyrs/src/modules/orders/components/blocks/CardOrderUser.vue.cjs +1 -1
  106. package/dist/martyrs/src/modules/orders/components/blocks/CardOrderUser.vue.js +1 -1
  107. package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.cjs +201 -93
  108. package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.cjs.map +1 -1
  109. package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.js +214 -106
  110. package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.js.map +1 -1
  111. package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.cjs +8 -11
  112. package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.cjs.map +1 -1
  113. package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.js +9 -12
  114. package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.js.map +1 -1
  115. package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.cjs +2 -2
  116. package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.js +2 -2
  117. package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.cjs +99 -99
  118. package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.cjs.map +1 -1
  119. package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.js +102 -102
  120. package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.js.map +1 -1
  121. package/dist/martyrs/src/modules/orders/components/sections/FormPayment.vue.cjs +14 -8
  122. package/dist/martyrs/src/modules/orders/components/sections/FormPayment.vue.cjs.map +1 -1
  123. package/dist/martyrs/src/modules/orders/components/sections/FormPayment.vue.js +15 -9
  124. package/dist/martyrs/src/modules/orders/components/sections/FormPayment.vue.js.map +1 -1
  125. package/dist/martyrs/src/modules/orders/store/orders.cjs +51 -0
  126. package/dist/martyrs/src/modules/orders/store/orders.cjs.map +1 -1
  127. package/dist/martyrs/src/modules/orders/store/orders.js +51 -0
  128. package/dist/martyrs/src/modules/orders/store/orders.js.map +1 -1
  129. package/dist/martyrs/src/modules/organizations/components/blocks/CardOrganization.vue.cjs +1 -1
  130. package/dist/martyrs/src/modules/organizations/components/blocks/CardOrganization.vue.js +1 -1
  131. package/dist/martyrs/src/modules/organizations/components/pages/DepartmentEdit.vue.cjs +1 -1
  132. package/dist/martyrs/src/modules/organizations/components/pages/DepartmentEdit.vue.js +1 -1
  133. package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.cjs +2 -2
  134. package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.js +2 -2
  135. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationBackoffice.vue.cjs +1 -1
  136. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationBackoffice.vue.js +1 -1
  137. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.cjs +2 -2
  138. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js +2 -2
  139. package/dist/martyrs/src/modules/organizations/components/sections/DetailsTabSection.vue.cjs +2 -2
  140. package/dist/martyrs/src/modules/organizations/components/sections/DetailsTabSection.vue.js +2 -2
  141. package/dist/martyrs/src/modules/organizations/components/sections/Documents.vue.cjs +1 -1
  142. package/dist/martyrs/src/modules/organizations/components/sections/Documents.vue.js +1 -1
  143. package/dist/martyrs/src/modules/pages/views/components/pages/PageEdit.vue.cjs +1 -1
  144. package/dist/martyrs/src/modules/pages/views/components/pages/PageEdit.vue.js +1 -1
  145. package/dist/martyrs/src/modules/pages/views/components/partials/SidebarPages.vue.cjs +1 -1
  146. package/dist/martyrs/src/modules/pages/views/components/partials/SidebarPages.vue.js +1 -1
  147. package/dist/martyrs/src/modules/products/components/blocks/CardPosition.vue.cjs +1 -1
  148. package/dist/martyrs/src/modules/products/components/blocks/CardPosition.vue.js +1 -1
  149. package/dist/martyrs/src/modules/products/components/blocks/ImagesThumbnails.vue.cjs +1 -1
  150. package/dist/martyrs/src/modules/products/components/blocks/ImagesThumbnails.vue.js +1 -1
  151. package/dist/martyrs/src/modules/products/components/pages/Categories.vue.cjs +1 -1
  152. package/dist/martyrs/src/modules/products/components/pages/Categories.vue.js +1 -1
  153. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.cjs +1 -1
  154. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js +1 -1
  155. package/dist/martyrs/src/modules/products/components/pages/EditLeftover.vue.cjs +2 -2
  156. package/dist/martyrs/src/modules/products/components/pages/EditLeftover.vue.js +2 -2
  157. package/dist/martyrs/src/modules/products/components/pages/Product.vue.cjs +1 -1
  158. package/dist/martyrs/src/modules/products/components/pages/Product.vue.js +1 -1
  159. package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.cjs +1 -1
  160. package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.js +1 -1
  161. package/dist/martyrs/src/modules/products/components/sections/PopularProducts.vue.cjs +1 -1
  162. package/dist/martyrs/src/modules/products/components/sections/PopularProducts.vue.cjs.map +1 -1
  163. package/dist/martyrs/src/modules/products/components/sections/PopularProducts.vue.js +1 -1
  164. package/dist/martyrs/src/modules/products/components/sections/PopularProducts.vue.js.map +1 -1
  165. package/dist/martyrs/src/modules/rents/views/components/pages/RentsEdit.vue.cjs +2 -2
  166. package/dist/martyrs/src/modules/rents/views/components/pages/RentsEdit.vue.js +2 -2
  167. package/dist/martyrs/src/modules/reports/components/sections/FormReport.vue.cjs +1 -1
  168. package/dist/martyrs/src/modules/reports/components/sections/FormReport.vue.js +1 -1
  169. package/dist/martyrs/src/modules/spots/components/blocks/CardSpot.vue.cjs +16 -13
  170. package/dist/martyrs/src/modules/spots/components/blocks/CardSpot.vue.cjs.map +1 -1
  171. package/dist/martyrs/src/modules/spots/components/blocks/CardSpot.vue.js +16 -13
  172. package/dist/martyrs/src/modules/spots/components/blocks/CardSpot.vue.js.map +1 -1
  173. package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.cjs +1 -1
  174. package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.js +1 -1
  175. package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.cjs +1 -1
  176. package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.js +1 -1
  177. package/dist/martyrs/src/modules/spots/store/spots.cjs +11 -4
  178. package/dist/martyrs/src/modules/spots/store/spots.cjs.map +1 -1
  179. package/dist/martyrs/src/modules/spots/store/spots.js +11 -4
  180. package/dist/martyrs/src/modules/spots/store/spots.js.map +1 -1
  181. package/dist/orders.server.js +6 -0
  182. package/dist/orders.server.mjs +6 -0
  183. package/dist/spots.server.js +44 -3
  184. package/dist/spots.server.mjs +44 -3
  185. package/dist/style.css +20 -20
  186. package/package.json +1 -1
  187. package/src/modules/chats/components/pages/ChatPage.vue +18 -23
  188. package/src/modules/chats/components/sections/ChatWindow.vue +55 -38
  189. package/src/modules/chats/store/chat.store.js +20 -21
  190. package/src/modules/globals/views/classes/globals.websocket.js +10 -11
  191. package/src/modules/landing/components/sections/Examples.vue +1 -1
  192. package/src/modules/landing/components/sections/HowToBuyWDR.vue +3 -3
  193. package/src/modules/landing/components/sections/SectionEarn.vue +4 -4
  194. package/src/modules/landing/components/sections/SectionFeature.vue +1 -1
  195. package/src/modules/landing/components/sections/SectionFeatures.vue +1 -1
  196. package/src/modules/landing/components/sections/SectionFeaturesImages.vue +1 -1
  197. package/src/modules/landing/components/sections/SectionFocus.vue +1 -1
  198. package/src/modules/landing/components/sections/SectionHeroVideo.vue +3 -3
  199. package/src/modules/landing/components/sections/SectionMobileApp.vue +3 -3
  200. package/src/modules/landing/components/sections/SectionOverview.vue +1 -1
  201. package/src/modules/landing/components/sections/SectionRoadmap.vue +1 -1
  202. package/src/modules/landing/components/sections/WhatIsWDRSection.vue +3 -3
  203. package/src/modules/marketplace/views/components/sections/SectionMenu.vue +3 -3
  204. package/src/modules/notifications/components/elements/NotificationBadge.vue +7 -0
  205. package/src/modules/orders/components/blocks/CardOrderItem.vue +2 -2
  206. package/src/modules/orders/components/pages/OrderBackoffice.vue +146 -77
  207. package/src/modules/orders/components/pages/OrderCreate.vue +5 -10
  208. package/src/modules/orders/components/sections/FormDelivery.vue +35 -43
  209. package/src/modules/orders/components/sections/FormPayment.vue +17 -7
  210. package/src/modules/orders/controllers/orders.controller.js +10 -0
  211. package/src/modules/orders/store/orders.js +65 -0
  212. package/src/modules/products/components/sections/PopularProducts.vue +4 -1
  213. package/src/modules/spots/components/blocks/CardSpot.vue +8 -7
  214. package/src/modules/spots/controllers/spots.controller.js +49 -2
  215. package/src/modules/spots/routes/spots.routes.js +3 -1
  216. package/src/modules/spots/store/spots.js +12 -4
  217. package/dist/martyrs/src/components/Chips/Chips.vue2.cjs.map +0 -1
  218. package/dist/martyrs/src/components/Chips/Chips.vue2.js.map +0 -1
  219. package/dist/martyrs/src/components/Dropdown/Dropdown.vue2.cjs.map +0 -1
  220. package/dist/martyrs/src/components/Popup/Popup.vue.js.map +0 -1
  221. package/dist/martyrs/src/components/SelectMulti/SelectMulti.vue2.cjs.map +0 -1
  222. package/dist/martyrs/src/components/Tooltip/Tooltip.vue2.cjs.map +0 -1
@@ -4,6 +4,7 @@ const vue = require("vue");
4
4
  const ChatWindow = require("../sections/ChatWindow.vue.cjs");
5
5
  const chat_store = require("../../store/chat.store.cjs");
6
6
  ;/* empty css */
7
+ const _hoisted_1 = { class: "chat-main" };
7
8
  const _sfc_main = {
8
9
  __name: "ChatPage",
9
10
  props: {
@@ -11,6 +12,10 @@ const _sfc_main = {
11
12
  type: String,
12
13
  required: true
13
14
  },
15
+ user: {
16
+ type: String,
17
+ required: true
18
+ },
14
19
  chatID: {
15
20
  type: String,
16
21
  required: true
@@ -20,11 +25,16 @@ const _sfc_main = {
20
25
  const props = __props;
21
26
  vue.onMounted(async () => {
22
27
  chat_store.default.methods.setUsername(props.username || "user");
23
- await chat_store.default.methods.connectWebSocket();
24
- chat_store.default.methods.setCurrentChat(props.chatID);
28
+ await chat_store.default.methods.connectWebSocket(props.user);
29
+ await chat_store.default.methods.setCurrentChat(props.chatID);
30
+ });
31
+ vue.onUnmounted(() => {
32
+ chat_store.default.methods.disconnectChat();
25
33
  });
26
34
  return (_ctx, _cache) => {
27
- return vue.openBlock(), vue.createBlock(ChatWindow.default);
35
+ return vue.openBlock(), vue.createElementBlock("main", _hoisted_1, [
36
+ vue.createVNode(ChatWindow.default)
37
+ ]);
28
38
  };
29
39
  }
30
40
  };
@@ -1 +1 @@
1
- {"version":3,"file":"ChatPage.vue.cjs","sources":["../../../../../../../src/modules/chats/components/pages/ChatPage.vue"],"sourcesContent":["<template>\n <!-- <div class=\"chat-page h-max-20r\"> -->\n <!-- <aside class=\"chat-list\"> -->\n <!-- Примерный список чатов. Должен быть дополнен реальной логикой -->\n <!-- <div v-for=\"chat in chats\" :key=\"chat.id\" @click=\"selectChat(chat.id)\">\n Чат {{ chat.name }}\n </div> -->\n <!-- </aside> -->\n <!-- <main class=\"chat-main\"> -->\n <ChatWindow />\n <!-- </main> -->\n <!-- </div> -->\n</template>\n\n<script setup>\nimport { ref, onMounted } from 'vue';\nimport ChatWindow from '../sections/ChatWindow.vue';\nimport chatStore from '../../store/chat.store.js';\n\nconst props = defineProps({\n username: {\n type: String,\n required: true\n },\n chatID: {\n type: String,\n required: true\n },\n})\n\n// const chats = ref([\n// // Примерный список. В реальном приложении, список чатов должен загружаться с сервера.\n// { id: 'chat1', name: 'Чат 1' },\n// { id: 'chat2', name: 'Чат 2' }\n// ]);\n\nconst selectChat = (chatId) => {\n chatStore.methods.setCurrentChat(chatId);\n};\n\nonMounted(async() => {\n chatStore.methods.setUsername(props.username || 'user'); // Установка имени пользователя\n await chatStore.methods.connectWebSocket(); // Подключение к WebSocket\n chatStore.methods.setCurrentChat(props.chatID);\n});\n</script>\n\n<style>\n/* Стили остаются без изменений */\n</style>\n"],"names":["onMounted","chatStore"],"mappings":";;;;;;;;;;;;;;;;;;;AAmBA,UAAM,QAAQ;AAqBdA,QAAAA,UAAU,YAAW;AACnBC,iBAAS,QAAC,QAAQ,YAAY,MAAM,YAAY,MAAM;AACtD,YAAMA,WAAS,QAAC,QAAQ;AACxBA,iBAAAA,QAAU,QAAQ,eAAe,MAAM,MAAM;AAAA,IAC/C,CAAC;;;;;;;"}
1
+ {"version":3,"file":"ChatPage.vue.cjs","sources":["../../../../../../../src/modules/chats/components/pages/ChatPage.vue"],"sourcesContent":["<template>\n <main class=\"chat-main\">\n <ChatWindow />\n </main>\n</template>\n\n<script setup>\nimport { ref, onMounted, onUnmounted } from 'vue';\nimport ChatWindow from '../sections/ChatWindow.vue';\nimport chatStore from '../../store/chat.store.js';\n\nconst props = defineProps({\n username: {\n type: String,\n required: true\n },\n user: {\n type: String,\n required: true\n },\n chatID: {\n type: String,\n required: true\n },\n});\n\nconst selectChat = (chatId) => {\n chatStore.methods.setCurrentChat(chatId);\n};\n\nonMounted(async () => {\n chatStore.methods.setUsername(props.username || 'user'); // Установка имени пользователя\n await chatStore.methods.connectWebSocket(props.user); // Подключение к WebSocket\n await chatStore.methods.setCurrentChat(props.chatID);\n});\n\nonUnmounted(() => {\n // Clean up when the component is unmounted (e.g., navigating away)\n chatStore.methods.disconnectChat();\n});\n</script>\n\n<style>\n/* Стили остаются без изменений */\n</style>"],"names":["onMounted","chatStore","onUnmounted"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAWA,UAAM,QAAQ;AAmBdA,QAAAA,UAAU,YAAY;AACpBC,iBAAS,QAAC,QAAQ,YAAY,MAAM,YAAY,MAAM;AACtD,YAAMA,WAAS,QAAC,QAAQ,iBAAiB,MAAM,IAAI;AACnD,YAAMA,WAAS,QAAC,QAAQ,eAAe,MAAM,MAAM;AAAA,IACrD,CAAC;AAEDC,QAAAA,YAAY,MAAM;AAEhBD,iBAAS,QAAC,QAAQ,eAAgB;AAAA,IACpC,CAAC;;;;;;;;;"}
@@ -1,7 +1,8 @@
1
- import { onMounted, createBlock, openBlock } from "vue";
1
+ import { onMounted, onUnmounted, createElementBlock, openBlock, createVNode } from "vue";
2
2
  import _sfc_main$1 from "../sections/ChatWindow.vue.js";
3
3
  import chatStore from "../../store/chat.store.js";
4
4
  /* empty css */
5
+ const _hoisted_1 = { class: "chat-main" };
5
6
  const _sfc_main = {
6
7
  __name: "ChatPage",
7
8
  props: {
@@ -9,6 +10,10 @@ const _sfc_main = {
9
10
  type: String,
10
11
  required: true
11
12
  },
13
+ user: {
14
+ type: String,
15
+ required: true
16
+ },
12
17
  chatID: {
13
18
  type: String,
14
19
  required: true
@@ -18,11 +23,16 @@ const _sfc_main = {
18
23
  const props = __props;
19
24
  onMounted(async () => {
20
25
  chatStore.methods.setUsername(props.username || "user");
21
- await chatStore.methods.connectWebSocket();
22
- chatStore.methods.setCurrentChat(props.chatID);
26
+ await chatStore.methods.connectWebSocket(props.user);
27
+ await chatStore.methods.setCurrentChat(props.chatID);
28
+ });
29
+ onUnmounted(() => {
30
+ chatStore.methods.disconnectChat();
23
31
  });
24
32
  return (_ctx, _cache) => {
25
- return openBlock(), createBlock(_sfc_main$1);
33
+ return openBlock(), createElementBlock("main", _hoisted_1, [
34
+ createVNode(_sfc_main$1)
35
+ ]);
26
36
  };
27
37
  }
28
38
  };
@@ -1 +1 @@
1
- {"version":3,"file":"ChatPage.vue.js","sources":["../../../../../../../src/modules/chats/components/pages/ChatPage.vue"],"sourcesContent":["<template>\n <!-- <div class=\"chat-page h-max-20r\"> -->\n <!-- <aside class=\"chat-list\"> -->\n <!-- Примерный список чатов. Должен быть дополнен реальной логикой -->\n <!-- <div v-for=\"chat in chats\" :key=\"chat.id\" @click=\"selectChat(chat.id)\">\n Чат {{ chat.name }}\n </div> -->\n <!-- </aside> -->\n <!-- <main class=\"chat-main\"> -->\n <ChatWindow />\n <!-- </main> -->\n <!-- </div> -->\n</template>\n\n<script setup>\nimport { ref, onMounted } from 'vue';\nimport ChatWindow from '../sections/ChatWindow.vue';\nimport chatStore from '../../store/chat.store.js';\n\nconst props = defineProps({\n username: {\n type: String,\n required: true\n },\n chatID: {\n type: String,\n required: true\n },\n})\n\n// const chats = ref([\n// // Примерный список. В реальном приложении, список чатов должен загружаться с сервера.\n// { id: 'chat1', name: 'Чат 1' },\n// { id: 'chat2', name: 'Чат 2' }\n// ]);\n\nconst selectChat = (chatId) => {\n chatStore.methods.setCurrentChat(chatId);\n};\n\nonMounted(async() => {\n chatStore.methods.setUsername(props.username || 'user'); // Установка имени пользователя\n await chatStore.methods.connectWebSocket(); // Подключение к WebSocket\n chatStore.methods.setCurrentChat(props.chatID);\n});\n</script>\n\n<style>\n/* Стили остаются без изменений */\n</style>\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAmBA,UAAM,QAAQ;AAqBd,cAAU,YAAW;AACnB,gBAAU,QAAQ,YAAY,MAAM,YAAY,MAAM;AACtD,YAAM,UAAU,QAAQ;AACxB,gBAAU,QAAQ,eAAe,MAAM,MAAM;AAAA,IAC/C,CAAC;;;;;;"}
1
+ {"version":3,"file":"ChatPage.vue.js","sources":["../../../../../../../src/modules/chats/components/pages/ChatPage.vue"],"sourcesContent":["<template>\n <main class=\"chat-main\">\n <ChatWindow />\n </main>\n</template>\n\n<script setup>\nimport { ref, onMounted, onUnmounted } from 'vue';\nimport ChatWindow from '../sections/ChatWindow.vue';\nimport chatStore from '../../store/chat.store.js';\n\nconst props = defineProps({\n username: {\n type: String,\n required: true\n },\n user: {\n type: String,\n required: true\n },\n chatID: {\n type: String,\n required: true\n },\n});\n\nconst selectChat = (chatId) => {\n chatStore.methods.setCurrentChat(chatId);\n};\n\nonMounted(async () => {\n chatStore.methods.setUsername(props.username || 'user'); // Установка имени пользователя\n await chatStore.methods.connectWebSocket(props.user); // Подключение к WebSocket\n await chatStore.methods.setCurrentChat(props.chatID);\n});\n\nonUnmounted(() => {\n // Clean up when the component is unmounted (e.g., navigating away)\n chatStore.methods.disconnectChat();\n});\n</script>\n\n<style>\n/* Стили остаются без изменений */\n</style>"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAWA,UAAM,QAAQ;AAmBd,cAAU,YAAY;AACpB,gBAAU,QAAQ,YAAY,MAAM,YAAY,MAAM;AACtD,YAAM,UAAU,QAAQ,iBAAiB,MAAM,IAAI;AACnD,YAAM,UAAU,QAAQ,eAAe,MAAM,MAAM;AAAA,IACrD,CAAC;AAED,gBAAY,MAAM;AAEhB,gBAAU,QAAQ,eAAgB;AAAA,IACpC,CAAC;;;;;;;;"}
@@ -19,7 +19,12 @@ const _sfc_main = {
19
19
  const newMessage = vue.ref("");
20
20
  const allMessages = vue.ref(null);
21
21
  const messages = vue.computed(() => chat_store.default.state.messages);
22
- const sendMessage = () => {
22
+ const scrollToBottom = () => {
23
+ if (allMessages.value) {
24
+ allMessages.value.scrollTop = allMessages.value.scrollHeight;
25
+ }
26
+ };
27
+ const sendMessage = async () => {
23
28
  if (newMessage.value) {
24
29
  const message = {
25
30
  text: newMessage.value,
@@ -27,13 +32,25 @@ const _sfc_main = {
27
32
  chatId: chat_store.default.state.currentChatId
28
33
  };
29
34
  chat_store.default.methods.addMessage(message);
30
- console.log(allMessages.value.lastElementChild.offsetHeight);
31
- allMessages.value.scrollTop = allMessages.value.lastElementChild.offsetHeight;
32
35
  newMessage.value = "";
36
+ await vue.nextTick();
37
+ await new Promise((resolve) => setTimeout(resolve, 100));
38
+ scrollToBottom();
33
39
  }
34
40
  };
35
- vue.watch(chat_store.default.state.messages, () => {
36
- allMessages.value.scrollTop = allMessages.value.lastElementChild.offsetHeight;
41
+ vue.onMounted(() => {
42
+ vue.nextTick(() => {
43
+ if (allMessages.value) {
44
+ allMessages.value.scrollTop = allMessages.value.scrollHeight;
45
+ }
46
+ });
47
+ });
48
+ vue.watch(messages, () => {
49
+ vue.nextTick(() => {
50
+ if (allMessages.value) {
51
+ allMessages.value.scrollTop = allMessages.value.scrollHeight;
52
+ }
53
+ });
37
54
  }, { deep: true });
38
55
  return (_ctx, _cache) => {
39
56
  return vue.openBlock(), vue.createElementBlock("div", _hoisted_1, [
@@ -56,7 +73,8 @@ const _sfc_main = {
56
73
  key: 1,
57
74
  name: "list",
58
75
  tag: "ul",
59
- class: "w-100 o-hidden"
76
+ class: "w-100 o-hidden",
77
+ onAfterEnter: scrollToBottom
60
78
  }, {
61
79
  default: vue.withCtx(() => [
62
80
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(messages.value, (message) => {
@@ -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 \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\">\n <ChatMessage\n v-for=\"message in messages\"\n :key=\"message._id\"\n :message=\"message\"\n />\n\n </TransitionGroup>\n </transition>\n \n </div>\n </div>\n\n \n <div class=\"flex-nowrap flex-v-center flex bg-white w-100 radius-big pd-small\">\n <IconAdd\n class=\"mn-r-thin t-transp i-regular\"\n />\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 } 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 sendMessage = () => {\n if (newMessage.value) {\n const message = {\n text: newMessage.value,\n username: chatStore.state.username,\n chatId: chatStore.state.currentChatId\n };\n\n chatStore.methods.addMessage(message);\n console.log(allMessages.value.lastElementChild.offsetHeight)\n allMessages.value.scrollTop = allMessages.value.lastElementChild.offsetHeight\n \n newMessage.value = '';\n }\n};\n\n// // При добавлении нового сообщения автоматически прокручиваем вниз\nwatch(chatStore.state.messages, () => {\n allMessages.value.scrollTop = allMessages.value.lastElementChild.offsetHeight\n}, {deep: true});\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>\n"],"names":["ref","computed","chatStore","watch"],"mappings":";;;;;;;;;;;;;;;;;;AA4CA,UAAM,aAAaA,IAAG,IAAC,EAAE;AACzB,UAAM,cAAcA,IAAG,IAAC,IAAI;AAG5B,UAAM,WAAWC,IAAAA,SAAS,MAAMC,mBAAU,MAAM,QAAQ;AAGxD,UAAM,cAAc,MAAM;AACxB,UAAI,WAAW,OAAO;AACpB,cAAM,UAAU;AAAA,UACd,MAAM,WAAW;AAAA,UACjB,UAAUA,WAAAA,QAAU,MAAM;AAAA,UAC1B,QAAQA,WAAS,QAAC,MAAM;AAAA,QACzB;AAEDA,2BAAU,QAAQ,WAAW,OAAO;AACpC,gBAAQ,IAAI,YAAY,MAAM,iBAAiB,YAAY;AAC3D,oBAAY,MAAM,YAAY,YAAY,MAAM,iBAAiB;AAEjE,mBAAW,QAAQ;AAAA,MACvB;AAAA,IACA;AAGAC,QAAAA,MAAMD,WAAS,QAAC,MAAM,UAAU,MAAM;AACpC,kBAAY,MAAM,YAAY,YAAY,MAAM,iBAAiB;AAAA,IACnE,GAAG,EAAC,MAAM,KAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
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 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,IAAG,IAAC,EAAE;AACzB,UAAM,cAAcA,IAAG,IAAC,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,MACpD;AAAA,IACA;AAGA,UAAM,cAAc,YAAY;AAC9B,UAAI,WAAW,OAAO;AACpB,cAAM,UAAU;AAAA,UACd,MAAM,WAAW;AAAA,UACjB,UAAUA,WAAAA,QAAU,MAAM;AAAA,UAC1B,QAAQA,WAAS,QAAC,MAAM;AAAA,QACzB;AAEDA,2BAAU,QAAQ,WAAW,OAAO;AACpC,mBAAW,QAAQ;AAGnB,cAAMC,aAAU;AAChB,cAAM,IAAI,QAAQ,aAAW,WAAW,SAAS,GAAG,CAAC;AACrD,uBAAgB;AAAA,MACpB;AAAA,IACA;AAGAC,QAAAA,UAAU,MAAM;AACdD,UAAAA,SAAS,MAAM;AACb,YAAI,YAAY,OAAO;AACrB,sBAAY,MAAM,YAAY,YAAY,MAAM;AAAA,QACtD;AAAA,MACA,CAAG;AAAA,IACH,CAAC;AAGDE,QAAK,MAAC,UAAU,MAAM;AACpBF,UAAAA,SAAS,MAAM;AACb,YAAI,YAAY,OAAO;AACrB,sBAAY,MAAM,YAAY,YAAY,MAAM;AAAA,QACtD;AAAA,MACA,CAAG;AAAA,IACH,GAAG,EAAE,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,4 +1,4 @@
1
- import { ref, computed, watch, createElementBlock, openBlock, createElementVNode, createVNode, Transition, withCtx, createBlock, TransitionGroup, Fragment, renderList, withDirectives, withKeys, vModelText } from "vue";
1
+ import { ref, computed, onMounted, nextTick, watch, createElementBlock, openBlock, createElementVNode, createVNode, Transition, withCtx, createBlock, TransitionGroup, Fragment, renderList, withDirectives, withKeys, vModelText } from "vue";
2
2
  import _sfc_main$1 from "../../../icons/navigation/IconAdd.vue.js";
3
3
  import PlaceholderChat from "../../../icons/placeholders/PlaceholderChat.vue.js";
4
4
  import ChatMessage from "../blocks/ChatMessage.vue.js";
@@ -17,7 +17,12 @@ const _sfc_main = {
17
17
  const newMessage = ref("");
18
18
  const allMessages = ref(null);
19
19
  const messages = computed(() => chatStore.state.messages);
20
- const sendMessage = () => {
20
+ const scrollToBottom = () => {
21
+ if (allMessages.value) {
22
+ allMessages.value.scrollTop = allMessages.value.scrollHeight;
23
+ }
24
+ };
25
+ const sendMessage = async () => {
21
26
  if (newMessage.value) {
22
27
  const message = {
23
28
  text: newMessage.value,
@@ -25,13 +30,25 @@ const _sfc_main = {
25
30
  chatId: chatStore.state.currentChatId
26
31
  };
27
32
  chatStore.methods.addMessage(message);
28
- console.log(allMessages.value.lastElementChild.offsetHeight);
29
- allMessages.value.scrollTop = allMessages.value.lastElementChild.offsetHeight;
30
33
  newMessage.value = "";
34
+ await nextTick();
35
+ await new Promise((resolve) => setTimeout(resolve, 100));
36
+ scrollToBottom();
31
37
  }
32
38
  };
33
- watch(chatStore.state.messages, () => {
34
- allMessages.value.scrollTop = allMessages.value.lastElementChild.offsetHeight;
39
+ onMounted(() => {
40
+ nextTick(() => {
41
+ if (allMessages.value) {
42
+ allMessages.value.scrollTop = allMessages.value.scrollHeight;
43
+ }
44
+ });
45
+ });
46
+ watch(messages, () => {
47
+ nextTick(() => {
48
+ if (allMessages.value) {
49
+ allMessages.value.scrollTop = allMessages.value.scrollHeight;
50
+ }
51
+ });
35
52
  }, { deep: true });
36
53
  return (_ctx, _cache) => {
37
54
  return openBlock(), createElementBlock("div", _hoisted_1, [
@@ -54,7 +71,8 @@ const _sfc_main = {
54
71
  key: 1,
55
72
  name: "list",
56
73
  tag: "ul",
57
- class: "w-100 o-hidden"
74
+ class: "w-100 o-hidden",
75
+ onAfterEnter: scrollToBottom
58
76
  }, {
59
77
  default: withCtx(() => [
60
78
  (openBlock(true), createElementBlock(Fragment, null, renderList(messages.value, (message) => {
@@ -1 +1 @@
1
- {"version":3,"file":"ChatWindow.vue.js","sources":["../../../../../../../src/modules/chats/components/sections/ChatWindow.vue"],"sourcesContent":["<template>\n <div class=\"bg-white radius-semi bg-white o-hidden pos-relative\">\n \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\">\n <ChatMessage\n v-for=\"message in messages\"\n :key=\"message._id\"\n :message=\"message\"\n />\n\n </TransitionGroup>\n </transition>\n \n </div>\n </div>\n\n \n <div class=\"flex-nowrap flex-v-center flex bg-white w-100 radius-big pd-small\">\n <IconAdd\n class=\"mn-r-thin t-transp i-regular\"\n />\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 } 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 sendMessage = () => {\n if (newMessage.value) {\n const message = {\n text: newMessage.value,\n username: chatStore.state.username,\n chatId: chatStore.state.currentChatId\n };\n\n chatStore.methods.addMessage(message);\n console.log(allMessages.value.lastElementChild.offsetHeight)\n allMessages.value.scrollTop = allMessages.value.lastElementChild.offsetHeight\n \n newMessage.value = '';\n }\n};\n\n// // При добавлении нового сообщения автоматически прокручиваем вниз\nwatch(chatStore.state.messages, () => {\n allMessages.value.scrollTop = allMessages.value.lastElementChild.offsetHeight\n}, {deep: true});\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>\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;AA4CA,UAAM,aAAa,IAAI,EAAE;AACzB,UAAM,cAAc,IAAI,IAAI;AAG5B,UAAM,WAAW,SAAS,MAAM,UAAU,MAAM,QAAQ;AAGxD,UAAM,cAAc,MAAM;AACxB,UAAI,WAAW,OAAO;AACpB,cAAM,UAAU;AAAA,UACd,MAAM,WAAW;AAAA,UACjB,UAAU,UAAU,MAAM;AAAA,UAC1B,QAAQ,UAAU,MAAM;AAAA,QACzB;AAED,kBAAU,QAAQ,WAAW,OAAO;AACpC,gBAAQ,IAAI,YAAY,MAAM,iBAAiB,YAAY;AAC3D,oBAAY,MAAM,YAAY,YAAY,MAAM,iBAAiB;AAEjE,mBAAW,QAAQ;AAAA,MACvB;AAAA,IACA;AAGA,UAAM,UAAU,MAAM,UAAU,MAAM;AACpC,kBAAY,MAAM,YAAY,YAAY,MAAM,iBAAiB;AAAA,IACnE,GAAG,EAAC,MAAM,KAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"ChatWindow.vue.js","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 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":[],"mappings":";;;;;;;;;;;;;;;;AAsCA,UAAM,aAAa,IAAI,EAAE;AACzB,UAAM,cAAc,IAAI,IAAI;AAG5B,UAAM,WAAW,SAAS,MAAM,UAAU,MAAM,QAAQ;AAGxD,UAAM,iBAAiB,MAAM;AAC3B,UAAI,YAAY,OAAO;AACrB,oBAAY,MAAM,YAAY,YAAY,MAAM;AAAA,MACpD;AAAA,IACA;AAGA,UAAM,cAAc,YAAY;AAC9B,UAAI,WAAW,OAAO;AACpB,cAAM,UAAU;AAAA,UACd,MAAM,WAAW;AAAA,UACjB,UAAU,UAAU,MAAM;AAAA,UAC1B,QAAQ,UAAU,MAAM;AAAA,QACzB;AAED,kBAAU,QAAQ,WAAW,OAAO;AACpC,mBAAW,QAAQ;AAGnB,cAAM,SAAU;AAChB,cAAM,IAAI,QAAQ,aAAW,WAAW,SAAS,GAAG,CAAC;AACrD,uBAAgB;AAAA,MACpB;AAAA,IACA;AAGA,cAAU,MAAM;AACd,eAAS,MAAM;AACb,YAAI,YAAY,OAAO;AACrB,sBAAY,MAAM,YAAY,YAAY,MAAM;AAAA,QACtD;AAAA,MACA,CAAG;AAAA,IACH,CAAC;AAGD,UAAM,UAAU,MAAM;AACpB,eAAS,MAAM;AACb,YAAI,YAAY,OAAO;AACrB,sBAAY,MAAM,YAAY,YAAY,MAAM;AAAA,QACtD;AAAA,MACA,CAAG;AAAA,IACH,GAAG,EAAE,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -8,13 +8,12 @@ const state = vue.reactive({
8
8
  username: null
9
9
  });
10
10
  const methods = {
11
- async connectWebSocket() {
12
- console.log("process env");
13
- console.log(process.env.WSS_URL);
11
+ async connectWebSocket(user) {
14
12
  try {
15
- const userId = window.__user_id || null;
16
- await globals_websocket.default.connect(userId);
17
- globals_websocket.default.addEventListener("message", (data) => {
13
+ console.log("connect", user);
14
+ await globals_websocket.default.connect(user);
15
+ globals_websocket.default.removeModuleListeners("chat");
16
+ const listenerId = globals_websocket.default.addEventListener("message", (data) => {
18
17
  if (data.chatId === state.currentChatId) {
19
18
  state.messages.push(data);
20
19
  }
@@ -29,8 +28,8 @@ const methods = {
29
28
  console.log(process.env.API_URL);
30
29
  state.messages = messages;
31
30
  },
32
- addMessage(message) {
33
- globals_websocket.default.send(message);
31
+ async addMessage(message) {
32
+ await globals_websocket.default.send(message);
34
33
  },
35
34
  async setCurrentChat(chatId) {
36
35
  state.currentChatId = chatId;
@@ -1 +1 @@
1
- {"version":3,"file":"chat.store.cjs","sources":["../../../../../../src/modules/chats/store/chat.store.js"],"sourcesContent":["import { reactive, readonly } from 'vue';\nimport globalWebSocket from '@martyrs/src/modules/globals/views/classes/globals.websocket.js';\n\nconst state = reactive({\n messages: [],\n currentChatId: null,\n username: null\n});\n\nconst methods = {\n async connectWebSocket() {\n console.log('process env')\n console.log(process.env.WSS_URL)\n\n // Use the global WebSocket instance\n try {\n // Get userId from auth store or another source if available\n const userId = window.__user_id || null;\n \n // Connect to the global WebSocket\n await globalWebSocket.connect(userId);\n \n // Register chat message event listener\n globalWebSocket.addEventListener('message', (data) => {\n if (data.chatId === state.currentChatId) {\n state.messages.push(data);\n }\n }, { module: 'chat' });\n \n return globalWebSocket;\n } catch (error) {\n console.error('Failed to connect to WebSocket:', error);\n throw error;\n }\n },\n \n setMessages(messages) {\n console.log(process.env.API_URL)\n state.messages = messages;\n },\n \n addMessage(message) {\n globalWebSocket.send(message);\n },\n \n async setCurrentChat(chatId) {\n state.currentChatId = chatId;\n state.messages = []; // Clear current messages when changing chat\n\n // Send join chat message through the WebSocket\n globalWebSocket.send({ type: 'joinChat', chatId });\n\n // Fetch chat history\n const response = await fetch(`/messages/${chatId}`);\n const messages = await response.json();\n\n methods.setMessages(messages);\n },\n \n setUsername(username) {\n state.username = username;\n },\n \n disconnectChat() {\n // Remove chat-specific listeners when leaving chat page\n globalWebSocket.removeModuleListeners('chat');\n }\n};\n\nexport default {\n state: readonly(state),\n methods\n};"],"names":["reactive","globalWebSocket","readonly"],"mappings":";;;;AAGA,MAAM,QAAQA,IAAAA,SAAS;AAAA,EACrB,UAAU,CAAE;AAAA,EACZ,eAAe;AAAA,EACf,UAAU;AACZ,CAAC;AAED,MAAM,UAAU;AAAA,EACd,MAAM,mBAAmB;AACvB,YAAQ,IAAI,aAAa;AACzB,YAAQ,IAAI,QAAQ,IAAI,OAAO;AAG/B,QAAI;AAEF,YAAM,SAAS,OAAO,aAAa;AAGnC,YAAMC,kBAAe,QAAC,QAAQ,MAAM;AAGpCA,wBAAAA,QAAgB,iBAAiB,WAAW,CAAC,SAAS;AACpD,YAAI,KAAK,WAAW,MAAM,eAAe;AACvC,gBAAM,SAAS,KAAK,IAAI;AAAA,QAClC;AAAA,MACA,GAAS,EAAE,QAAQ,QAAQ;AAErB,aAAOA,kBAAe;AAAA,IACvB,SAAQ,OAAO;AACd,cAAQ,MAAM,mCAAmC,KAAK;AACtD,YAAM;AAAA,IACZ;AAAA,EACG;AAAA,EAED,YAAY,UAAU;AACpB,YAAQ,IAAI,QAAQ,IAAI,OAAO;AAC/B,UAAM,WAAW;AAAA,EAClB;AAAA,EAED,WAAW,SAAS;AAClBA,sBAAe,QAAC,KAAK,OAAO;AAAA,EAC7B;AAAA,EAED,MAAM,eAAe,QAAQ;AAC3B,UAAM,gBAAgB;AACtB,UAAM,WAAW;AAGjBA,sBAAAA,QAAgB,KAAK,EAAE,MAAM,YAAY,OAAM,CAAE;AAGjD,UAAM,WAAW,MAAM,MAAM,aAAa,MAAM,EAAE;AAClD,UAAM,WAAW,MAAM,SAAS,KAAM;AAEtC,YAAQ,YAAY,QAAQ;AAAA,EAC7B;AAAA,EAED,YAAY,UAAU;AACpB,UAAM,WAAW;AAAA,EAClB;AAAA,EAED,iBAAiB;AAEfA,sBAAe,QAAC,sBAAsB,MAAM;AAAA,EAChD;AACA;AAEA,MAAe,YAAA;AAAA,EACb,OAAOC,IAAQ,SAAC,KAAK;AAAA,EACrB;AACF;;"}
1
+ {"version":3,"file":"chat.store.cjs","sources":["../../../../../../src/modules/chats/store/chat.store.js"],"sourcesContent":["import { reactive, readonly } from 'vue';\nimport globalWebSocket from '@martyrs/src/modules/globals/views/classes/globals.websocket.js';\n\nconst state = reactive({\n messages: [],\n currentChatId: null,\n username: null\n});\n\nconst methods = {\n async connectWebSocket(user) {\n // Use the global WebSocket instance\n try {\n console.log('connect', user);\n await globalWebSocket.connect(user);\n\n // Remove any existing 'message' listeners for the 'chat' module to avoid duplicates\n globalWebSocket.removeModuleListeners('chat');\n\n // Register chat message event listener\n const listenerId = globalWebSocket.addEventListener('message', (data) => {\n if (data.chatId === state.currentChatId) {\n state.messages.push(data);\n }\n }, { module: 'chat' });\n\n return globalWebSocket;\n } catch (error) {\n console.error('Failed to connect to WebSocket:', error);\n throw error;\n }\n },\n\n setMessages(messages) {\n console.log(process.env.API_URL);\n state.messages = messages;\n },\n\n async addMessage(message) {\n await globalWebSocket.send(message);\n },\n\n async setCurrentChat(chatId) {\n state.currentChatId = chatId;\n state.messages = []; // Clear current messages when changing chat\n\n // Send join chat message through the WebSocket\n globalWebSocket.send({ type: 'joinChat', chatId });\n\n // Fetch chat history\n const response = await fetch(`/messages/${chatId}`);\n const messages = await response.json();\n\n methods.setMessages(messages);\n },\n\n setUsername(username) {\n state.username = username;\n },\n\n disconnectChat() {\n // Remove all chat-specific listeners when leaving chat page\n globalWebSocket.removeModuleListeners('chat');\n // Optionally disconnect the WebSocket if no longer needed\n // globalWebSocket.disconnect(); // Uncomment if you want to fully disconnect\n }\n};\n\nexport default {\n state: readonly(state),\n methods\n};"],"names":["reactive","globalWebSocket","readonly"],"mappings":";;;;AAGA,MAAM,QAAQA,IAAAA,SAAS;AAAA,EACrB,UAAU,CAAE;AAAA,EACZ,eAAe;AAAA,EACf,UAAU;AACZ,CAAC;AAED,MAAM,UAAU;AAAA,EACd,MAAM,iBAAiB,MAAM;AAE3B,QAAI;AACF,cAAQ,IAAI,WAAW,IAAI;AAC3B,YAAMC,kBAAe,QAAC,QAAQ,IAAI;AAGlCA,wBAAe,QAAC,sBAAsB,MAAM;AAG5C,YAAM,aAAaA,kBAAe,QAAC,iBAAiB,WAAW,CAAC,SAAS;AACvE,YAAI,KAAK,WAAW,MAAM,eAAe;AACvC,gBAAM,SAAS,KAAK,IAAI;AAAA,QAClC;AAAA,MACA,GAAS,EAAE,QAAQ,QAAQ;AAErB,aAAOA,kBAAe;AAAA,IACvB,SAAQ,OAAO;AACd,cAAQ,MAAM,mCAAmC,KAAK;AACtD,YAAM;AAAA,IACZ;AAAA,EACG;AAAA,EAED,YAAY,UAAU;AACpB,YAAQ,IAAI,QAAQ,IAAI,OAAO;AAC/B,UAAM,WAAW;AAAA,EAClB;AAAA,EAED,MAAM,WAAW,SAAS;AACxB,UAAMA,kBAAe,QAAC,KAAK,OAAO;AAAA,EACnC;AAAA,EAED,MAAM,eAAe,QAAQ;AAC3B,UAAM,gBAAgB;AACtB,UAAM,WAAW;AAGjBA,sBAAAA,QAAgB,KAAK,EAAE,MAAM,YAAY,OAAM,CAAE;AAGjD,UAAM,WAAW,MAAM,MAAM,aAAa,MAAM,EAAE;AAClD,UAAM,WAAW,MAAM,SAAS,KAAM;AAEtC,YAAQ,YAAY,QAAQ;AAAA,EAC7B;AAAA,EAED,YAAY,UAAU;AACpB,UAAM,WAAW;AAAA,EAClB;AAAA,EAED,iBAAiB;AAEfA,sBAAe,QAAC,sBAAsB,MAAM;AAAA,EAGhD;AACA;AAEA,MAAe,YAAA;AAAA,EACb,OAAOC,IAAQ,SAAC,KAAK;AAAA,EACrB;AACF;;"}
@@ -6,13 +6,12 @@ const state = reactive({
6
6
  username: null
7
7
  });
8
8
  const methods = {
9
- async connectWebSocket() {
10
- console.log("process env");
11
- console.log(process.env.WSS_URL);
9
+ async connectWebSocket(user) {
12
10
  try {
13
- const userId = window.__user_id || null;
14
- await globalWebSocket.connect(userId);
15
- globalWebSocket.addEventListener("message", (data) => {
11
+ console.log("connect", user);
12
+ await globalWebSocket.connect(user);
13
+ globalWebSocket.removeModuleListeners("chat");
14
+ const listenerId = globalWebSocket.addEventListener("message", (data) => {
16
15
  if (data.chatId === state.currentChatId) {
17
16
  state.messages.push(data);
18
17
  }
@@ -27,8 +26,8 @@ const methods = {
27
26
  console.log(process.env.API_URL);
28
27
  state.messages = messages;
29
28
  },
30
- addMessage(message) {
31
- globalWebSocket.send(message);
29
+ async addMessage(message) {
30
+ await globalWebSocket.send(message);
32
31
  },
33
32
  async setCurrentChat(chatId) {
34
33
  state.currentChatId = chatId;
@@ -1 +1 @@
1
- {"version":3,"file":"chat.store.js","sources":["../../../../../../src/modules/chats/store/chat.store.js"],"sourcesContent":["import { reactive, readonly } from 'vue';\nimport globalWebSocket from '@martyrs/src/modules/globals/views/classes/globals.websocket.js';\n\nconst state = reactive({\n messages: [],\n currentChatId: null,\n username: null\n});\n\nconst methods = {\n async connectWebSocket() {\n console.log('process env')\n console.log(process.env.WSS_URL)\n\n // Use the global WebSocket instance\n try {\n // Get userId from auth store or another source if available\n const userId = window.__user_id || null;\n \n // Connect to the global WebSocket\n await globalWebSocket.connect(userId);\n \n // Register chat message event listener\n globalWebSocket.addEventListener('message', (data) => {\n if (data.chatId === state.currentChatId) {\n state.messages.push(data);\n }\n }, { module: 'chat' });\n \n return globalWebSocket;\n } catch (error) {\n console.error('Failed to connect to WebSocket:', error);\n throw error;\n }\n },\n \n setMessages(messages) {\n console.log(process.env.API_URL)\n state.messages = messages;\n },\n \n addMessage(message) {\n globalWebSocket.send(message);\n },\n \n async setCurrentChat(chatId) {\n state.currentChatId = chatId;\n state.messages = []; // Clear current messages when changing chat\n\n // Send join chat message through the WebSocket\n globalWebSocket.send({ type: 'joinChat', chatId });\n\n // Fetch chat history\n const response = await fetch(`/messages/${chatId}`);\n const messages = await response.json();\n\n methods.setMessages(messages);\n },\n \n setUsername(username) {\n state.username = username;\n },\n \n disconnectChat() {\n // Remove chat-specific listeners when leaving chat page\n globalWebSocket.removeModuleListeners('chat');\n }\n};\n\nexport default {\n state: readonly(state),\n methods\n};"],"names":[],"mappings":";;AAGA,MAAM,QAAQ,SAAS;AAAA,EACrB,UAAU,CAAE;AAAA,EACZ,eAAe;AAAA,EACf,UAAU;AACZ,CAAC;AAED,MAAM,UAAU;AAAA,EACd,MAAM,mBAAmB;AACvB,YAAQ,IAAI,aAAa;AACzB,YAAQ,IAAI,QAAQ,IAAI,OAAO;AAG/B,QAAI;AAEF,YAAM,SAAS,OAAO,aAAa;AAGnC,YAAM,gBAAgB,QAAQ,MAAM;AAGpC,sBAAgB,iBAAiB,WAAW,CAAC,SAAS;AACpD,YAAI,KAAK,WAAW,MAAM,eAAe;AACvC,gBAAM,SAAS,KAAK,IAAI;AAAA,QAClC;AAAA,MACA,GAAS,EAAE,QAAQ,QAAQ;AAErB,aAAO;AAAA,IACR,SAAQ,OAAO;AACd,cAAQ,MAAM,mCAAmC,KAAK;AACtD,YAAM;AAAA,IACZ;AAAA,EACG;AAAA,EAED,YAAY,UAAU;AACpB,YAAQ,IAAI,QAAQ,IAAI,OAAO;AAC/B,UAAM,WAAW;AAAA,EAClB;AAAA,EAED,WAAW,SAAS;AAClB,oBAAgB,KAAK,OAAO;AAAA,EAC7B;AAAA,EAED,MAAM,eAAe,QAAQ;AAC3B,UAAM,gBAAgB;AACtB,UAAM,WAAW;AAGjB,oBAAgB,KAAK,EAAE,MAAM,YAAY,OAAM,CAAE;AAGjD,UAAM,WAAW,MAAM,MAAM,aAAa,MAAM,EAAE;AAClD,UAAM,WAAW,MAAM,SAAS,KAAM;AAEtC,YAAQ,YAAY,QAAQ;AAAA,EAC7B;AAAA,EAED,YAAY,UAAU;AACpB,UAAM,WAAW;AAAA,EAClB;AAAA,EAED,iBAAiB;AAEf,oBAAgB,sBAAsB,MAAM;AAAA,EAChD;AACA;AAEA,MAAe,YAAA;AAAA,EACb,OAAO,SAAS,KAAK;AAAA,EACrB;AACF;"}
1
+ {"version":3,"file":"chat.store.js","sources":["../../../../../../src/modules/chats/store/chat.store.js"],"sourcesContent":["import { reactive, readonly } from 'vue';\nimport globalWebSocket from '@martyrs/src/modules/globals/views/classes/globals.websocket.js';\n\nconst state = reactive({\n messages: [],\n currentChatId: null,\n username: null\n});\n\nconst methods = {\n async connectWebSocket(user) {\n // Use the global WebSocket instance\n try {\n console.log('connect', user);\n await globalWebSocket.connect(user);\n\n // Remove any existing 'message' listeners for the 'chat' module to avoid duplicates\n globalWebSocket.removeModuleListeners('chat');\n\n // Register chat message event listener\n const listenerId = globalWebSocket.addEventListener('message', (data) => {\n if (data.chatId === state.currentChatId) {\n state.messages.push(data);\n }\n }, { module: 'chat' });\n\n return globalWebSocket;\n } catch (error) {\n console.error('Failed to connect to WebSocket:', error);\n throw error;\n }\n },\n\n setMessages(messages) {\n console.log(process.env.API_URL);\n state.messages = messages;\n },\n\n async addMessage(message) {\n await globalWebSocket.send(message);\n },\n\n async setCurrentChat(chatId) {\n state.currentChatId = chatId;\n state.messages = []; // Clear current messages when changing chat\n\n // Send join chat message through the WebSocket\n globalWebSocket.send({ type: 'joinChat', chatId });\n\n // Fetch chat history\n const response = await fetch(`/messages/${chatId}`);\n const messages = await response.json();\n\n methods.setMessages(messages);\n },\n\n setUsername(username) {\n state.username = username;\n },\n\n disconnectChat() {\n // Remove all chat-specific listeners when leaving chat page\n globalWebSocket.removeModuleListeners('chat');\n // Optionally disconnect the WebSocket if no longer needed\n // globalWebSocket.disconnect(); // Uncomment if you want to fully disconnect\n }\n};\n\nexport default {\n state: readonly(state),\n methods\n};"],"names":[],"mappings":";;AAGA,MAAM,QAAQ,SAAS;AAAA,EACrB,UAAU,CAAE;AAAA,EACZ,eAAe;AAAA,EACf,UAAU;AACZ,CAAC;AAED,MAAM,UAAU;AAAA,EACd,MAAM,iBAAiB,MAAM;AAE3B,QAAI;AACF,cAAQ,IAAI,WAAW,IAAI;AAC3B,YAAM,gBAAgB,QAAQ,IAAI;AAGlC,sBAAgB,sBAAsB,MAAM;AAG5C,YAAM,aAAa,gBAAgB,iBAAiB,WAAW,CAAC,SAAS;AACvE,YAAI,KAAK,WAAW,MAAM,eAAe;AACvC,gBAAM,SAAS,KAAK,IAAI;AAAA,QAClC;AAAA,MACA,GAAS,EAAE,QAAQ,QAAQ;AAErB,aAAO;AAAA,IACR,SAAQ,OAAO;AACd,cAAQ,MAAM,mCAAmC,KAAK;AACtD,YAAM;AAAA,IACZ;AAAA,EACG;AAAA,EAED,YAAY,UAAU;AACpB,YAAQ,IAAI,QAAQ,IAAI,OAAO;AAC/B,UAAM,WAAW;AAAA,EAClB;AAAA,EAED,MAAM,WAAW,SAAS;AACxB,UAAM,gBAAgB,KAAK,OAAO;AAAA,EACnC;AAAA,EAED,MAAM,eAAe,QAAQ;AAC3B,UAAM,gBAAgB;AACtB,UAAM,WAAW;AAGjB,oBAAgB,KAAK,EAAE,MAAM,YAAY,OAAM,CAAE;AAGjD,UAAM,WAAW,MAAM,MAAM,aAAa,MAAM,EAAE;AAClD,UAAM,WAAW,MAAM,SAAS,KAAM;AAEtC,YAAQ,YAAY,QAAQ;AAAA,EAC7B;AAAA,EAED,YAAY,UAAU;AACpB,UAAM,WAAW;AAAA,EAClB;AAAA,EAED,iBAAiB;AAEf,oBAAgB,sBAAsB,MAAM;AAAA,EAGhD;AACA;AAEA,MAAe,YAAA;AAAA,EACb,OAAO,SAAS,KAAK;AAAA,EACrB;AACF;"}
@@ -4,7 +4,7 @@ const vue = require("vue");
4
4
  const CardHeader = require("../../../globals/views/components/blocks/CardHeader.vue.cjs");
5
5
  const FooterBlogpost = require("./FooterBlogpost.vue.cjs");
6
6
  const Text = require("../../../../components/Text/Text.vue.cjs");
7
- ;/* empty css */
7
+ ;/* empty css */
8
8
  const vueRouter = require("vue-router");
9
9
  const _hoisted_1 = { class: "pos-relative flex-column flex" };
10
10
  const _hoisted_2 = { class: "pd-t-zero pd-b-zero pd-medium" };
@@ -2,7 +2,7 @@ import { computed, createElementBlock, openBlock, createVNode, createElementVNod
2
2
  import _sfc_main$1 from "../../../globals/views/components/blocks/CardHeader.vue.js";
3
3
  import _sfc_main$3 from "./FooterBlogpost.vue.js";
4
4
  import _sfc_main$2 from "../../../../components/Text/Text.vue.js";
5
- /* empty css */
5
+ /* empty css */
6
6
  import { useRouter } from "vue-router";
7
7
  const _hoisted_1 = { class: "pos-relative flex-column flex" };
8
8
  const _hoisted_2 = { class: "pd-t-zero pd-b-zero pd-medium" };
@@ -9,10 +9,10 @@ const SkeletonBlogpost = require("../../../icons/skeletons/SkeletonBlogpost.vue.
9
9
  const vueRouter = require("vue-router");
10
10
  require("vue-i18n");
11
11
  ;/* empty css */
12
- ;/* empty css */
12
+ ;/* empty css */
13
13
  ;/* empty css */
14
14
  require("../../../rents/views/store/rents.store.cjs");
15
- ;/* empty css */
15
+ ;/* empty css */
16
16
  const auth = require("../../../auth/views/store/auth.cjs");
17
17
  require("../../../organizations/store/memberships.cjs");
18
18
  require("../../../organizations/store/organizations.cjs");
@@ -7,10 +7,10 @@ import SkeletonBlogpost from "../../../icons/skeletons/SkeletonBlogpost.vue.js";
7
7
  import { useRoute } from "vue-router";
8
8
  import "vue-i18n";
9
9
  /* empty css */
10
- /* empty css */
10
+ /* empty css */
11
11
  /* empty css */
12
12
  import "../../../rents/views/store/rents.store.js";
13
- /* empty css */
13
+ /* empty css */
14
14
  import { state as state$1 } from "../../../auth/views/store/auth.js";
15
15
  import "../../../organizations/store/memberships.js";
16
16
  import "../../../organizations/store/organizations.js";
@@ -4,7 +4,7 @@ const vue = require("vue");
4
4
  require("isomorphic-dompurify");
5
5
  ;/* empty css */
6
6
  const Constructor = require("../../../constructor/components/sections/Constructor.vue.cjs");
7
- const Popup = require("../../../../components/Popup/Popup.vue.cjs");
7
+ const Popup = require("../../../../components/Popup/Popup.vue2.cjs");
8
8
  require("../../../../../../_virtual/index.cjs");
9
9
  ;/* empty css */
10
10
  ;/* empty css */
@@ -2,7 +2,7 @@ import { ref, onMounted, computed, createElementBlock, openBlock, createElementV
2
2
  import "isomorphic-dompurify";
3
3
  /* empty css */
4
4
  import _sfc_main$1 from "../../../constructor/components/sections/Constructor.vue.js";
5
- import _sfc_main$2 from "../../../../components/Popup/Popup.vue.js";
5
+ import _sfc_main$2 from "../../../../components/Popup/Popup.vue2.js";
6
6
  import "../../../../../../_virtual/index.js";
7
7
  /* empty css */
8
8
  /* empty css */
@@ -2,7 +2,7 @@
2
2
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
3
  const vue = require("vue");
4
4
  ;/* empty css */
5
- ;/* empty css */
5
+ ;/* empty css */
6
6
  ;/* empty css */
7
7
  ;/* empty css */
8
8
  const Slider = require("../../../../components/Slider/Slider.vue.cjs");
@@ -1,6 +1,6 @@
1
1
  import { createBlock, openBlock, withCtx } from "vue";
2
2
  /* empty css */
3
- /* empty css */
3
+ /* empty css */
4
4
  /* empty css */
5
5
  /* empty css */
6
6
  import Slider from "../../../../components/Slider/Slider.vue.js";
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
3
  const vue = require("vue");
4
- ;/* empty css */
4
+ ;/* empty css */
5
5
  const IconEdit = require("../../../icons/navigation/IconEdit.vue.cjs");
6
6
  const CardHeader = require("../../../globals/views/components/blocks/CardHeader.vue.cjs");
7
7
  require("../../../community/store/reactions.cjs");
@@ -1,5 +1,5 @@
1
1
  import { ref, computed, createElementBlock, openBlock, normalizeClass, createVNode, createCommentVNode, createElementVNode, createBlock, renderSlot, withModifiers, toDisplayString, Fragment, renderList } from "vue";
2
- /* empty css */
2
+ /* empty css */
3
3
  import _sfc_main$2 from "../../../icons/navigation/IconEdit.vue.js";
4
4
  import _sfc_main$1 from "../../../globals/views/components/blocks/CardHeader.vue.js";
5
5
  import "../../../community/store/reactions.js";
@@ -7,11 +7,11 @@ const Constructor = require("../../../constructor/components/sections/Constructo
7
7
  const vueDatepicker = require("../../../../../../node_modules/@vuepic/vue-datepicker/dist/vue-datepicker.cjs");
8
8
  ;/* empty css */
9
9
  const Block = require("../../../../components/Block/Block.vue.cjs");
10
- const Popup = require("../../../../components/Popup/Popup.vue.cjs");
10
+ const Popup = require("../../../../components/Popup/Popup.vue2.cjs");
11
11
  const Field = require("../../../../components/Field/Field.vue.cjs");
12
12
  const BlockTags = require("../../../../components/FieldTags/BlockTags.vue.cjs");
13
13
  const Checkbox = require("../../../../components/Checkbox/Checkbox.vue.cjs");
14
- ;/* empty css */
14
+ ;/* empty css */
15
15
  require("axios");
16
16
  const UploadImage = require("../../../../components/UploadImage/UploadImage.vue.cjs");
17
17
  ;/* empty css */
@@ -5,11 +5,11 @@ import _sfc_main$4 from "../../../constructor/components/sections/Constructor.vu
5
5
  import Qn from "../../../../../../node_modules/@vuepic/vue-datepicker/dist/vue-datepicker.js";
6
6
  /* empty css */
7
7
  import _sfc_main$2 from "../../../../components/Block/Block.vue.js";
8
- import _sfc_main$5 from "../../../../components/Popup/Popup.vue.js";
8
+ import _sfc_main$5 from "../../../../components/Popup/Popup.vue2.js";
9
9
  import Field from "../../../../components/Field/Field.vue.js";
10
10
  import _sfc_main$6 from "../../../../components/FieldTags/BlockTags.vue.js";
11
11
  import _sfc_main$9 from "../../../../components/Checkbox/Checkbox.vue.js";
12
- /* empty css */
12
+ /* empty css */
13
13
  import "axios";
14
14
  import _sfc_main$1 from "../../../../components/UploadImage/UploadImage.vue.js";
15
15
  /* empty css */
@@ -3,7 +3,7 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
3
3
  const vue = require("vue");
4
4
  const Feed = require("../../../../components/Feed/Feed.vue.cjs");
5
5
  const Block = require("../../../../components/Block/Block.vue.cjs");
6
- const Popup = require("../../../../components/Popup/Popup.vue.cjs");
6
+ const Popup = require("../../../../components/Popup/Popup.vue2.cjs");
7
7
  const Field = require("../../../../components/Field/Field.vue.cjs");
8
8
  const Button = require("../../../../components/Button/Button.vue.cjs");
9
9
  const ButtonCheck = require("../elements/ButtonCheck.vue.cjs");
@@ -1,7 +1,7 @@
1
1
  import { ref, onMounted, createElementBlock, createCommentVNode, unref, openBlock, createElementVNode, createVNode, withCtx, Fragment, renderList, createTextVNode, createBlock, toDisplayString } from "vue";
2
2
  import _sfc_main$7 from "../../../../components/Feed/Feed.vue.js";
3
3
  import _sfc_main$3 from "../../../../components/Block/Block.vue.js";
4
- import _sfc_main$2 from "../../../../components/Popup/Popup.vue.js";
4
+ import _sfc_main$2 from "../../../../components/Popup/Popup.vue2.js";
5
5
  import Field from "../../../../components/Field/Field.vue.js";
6
6
  import _sfc_main$6 from "../../../../components/Button/Button.vue.js";
7
7
  import _sfc_main$1 from "../elements/ButtonCheck.vue.js";
@@ -2,7 +2,7 @@
2
2
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
3
  const vue = require("vue");
4
4
  ;/* empty css */
5
- ;/* empty css */
5
+ ;/* empty css */
6
6
  const Viewer = require("../../../constructor/components/sections/Viewer.vue.cjs");
7
7
  const Countdown = require("../../../../components/Countdown/Countdown.vue.cjs");
8
8
  const HeroEvent = require("../sections/HeroEvent.vue.cjs");
@@ -1,6 +1,6 @@
1
1
  import { ref, onMounted, createElementBlock, openBlock, createVNode, TransitionGroup, withCtx, createCommentVNode, createBlock, Fragment, renderList, unref, createElementVNode, toDisplayString, createTextVNode, withModifiers } from "vue";
2
2
  /* empty css */
3
- /* empty css */
3
+ /* empty css */
4
4
  import _sfc_main$2 from "../../../constructor/components/sections/Viewer.vue.js";
5
5
  import _sfc_main$4 from "../../../../components/Countdown/Countdown.vue.js";
6
6
  import HeroEvent from "../sections/HeroEvent.vue.js";
@@ -5,7 +5,7 @@ const vueRouter = require("vue-router");
5
5
  require("vue-i18n");
6
6
  ;/* empty css */
7
7
  const Feed = require("../../../../components/Feed/Feed.vue.cjs");
8
- const Popup = require("../../../../components/Popup/Popup.vue.cjs");
8
+ const Popup = require("../../../../components/Popup/Popup.vue2.cjs");
9
9
  const DatePicker = require("../../../../components/DatePicker/DatePicker.vue.cjs");
10
10
  const CitySelection = require("../../../globals/views/components/partials/CitySelection.vue.cjs");
11
11
  const FeaturedEvents = require("../sections/FeaturedEvents.vue.cjs");
@@ -3,7 +3,7 @@ import { useRoute, useRouter } from "vue-router";
3
3
  import "vue-i18n";
4
4
  /* empty css */
5
5
  import _sfc_main$6 from "../../../../components/Feed/Feed.vue.js";
6
- import _sfc_main$2 from "../../../../components/Popup/Popup.vue.js";
6
+ import _sfc_main$2 from "../../../../components/Popup/Popup.vue2.js";
7
7
  import _sfc_main$1 from "../../../../components/DatePicker/DatePicker.vue.js";
8
8
  import _sfc_main$3 from "../../../globals/views/components/partials/CitySelection.vue.js";
9
9
  import _sfc_main$5 from "../sections/FeaturedEvents.vue.js";
@@ -2,7 +2,7 @@
2
2
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
3
  const vue = require("vue");
4
4
  ;/* empty css */
5
- ;/* empty css */
5
+ ;/* empty css */
6
6
  ;/* empty css */
7
7
  ;/* empty css */
8
8
  const Slider = require("../../../../components/Slider/Slider.vue.cjs");
@@ -1,6 +1,6 @@
1
1
  import { resolveComponent, createBlock, openBlock, withCtx, createVNode, createElementVNode, createElementBlock, createCommentVNode, toDisplayString } from "vue";
2
2
  /* empty css */
3
- /* empty css */
3
+ /* empty css */
4
4
  /* empty css */
5
5
  /* empty css */
6
6
  import Slider from "../../../../components/Slider/Slider.vue.js";