@ozdao/martyrs 0.2.518 → 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.
- package/dist/_virtual/index.cjs +4 -4
- package/dist/_virtual/index.js +4 -4
- package/dist/_virtual/index2.cjs +4 -4
- package/dist/_virtual/index2.js +4 -4
- package/dist/{abac-Cf_9lCSh.js → abac-CnJsrv8S.js} +3 -3
- package/dist/{abac-6LjoG9u-.cjs → abac-DOyUjhee.cjs} +3 -3
- package/dist/builder.cjs +27 -25
- package/dist/builder.js +27 -25
- package/dist/chats.server.cjs +198 -1
- package/dist/chats.server.js +198 -1
- package/dist/{crud-sE7GLPbj.js → crud-BIFl1W1i.js} +6 -6
- package/dist/{crud-JN_LFj01.cjs → crud-CC6k6yY5.cjs} +6 -6
- package/dist/{globals.logger-CZMgIMlM.cjs → globals.logger-BuW7JHMY.cjs} +63 -53
- package/dist/{globals.logger-Bf6rRU7j.js → globals.logger-VRHh-WUW.js} +63 -53
- package/dist/{globals.observer-CV2wCzzh.cjs → globals.observer-C_FYclgV.cjs} +36 -1
- package/dist/{globals.observer-CDqUjVU5.js → globals.observer-MZsqaE6F.js} +36 -1
- package/dist/globals.server.cjs +1 -1
- package/dist/globals.server.js +1 -1
- package/dist/inventory.server.cjs +276 -376
- package/dist/inventory.server.js +276 -376
- package/dist/main-BM3GslOO.cjs +11 -0
- package/dist/{main-wmEhGVvD.js → main-Qcn7YlTx.js} +1834 -1830
- package/dist/martyrs/src/components/Address/{Address.vue2.cjs → Address.vue.cjs} +2 -2
- package/dist/martyrs/src/components/Address/{Address.vue2.js.map → Address.vue.cjs.map} +1 -1
- package/dist/martyrs/src/components/Address/{Address.vue2.js → Address.vue.js} +2 -2
- package/dist/martyrs/src/components/Address/Address.vue.js.map +1 -0
- package/dist/martyrs/src/components/Button/Button.vue.cjs +1 -1
- package/dist/martyrs/src/components/Button/Button.vue.cjs.map +1 -1
- package/dist/martyrs/src/components/Button/Button.vue.js +1 -1
- package/dist/martyrs/src/components/Button/Button.vue.js.map +1 -1
- package/dist/martyrs/src/components/Chips/{Chips.vue.cjs → Chips.vue2.cjs} +2 -2
- package/dist/martyrs/src/components/Chips/Chips.vue2.cjs.map +1 -0
- package/dist/martyrs/src/components/Chips/{Chips.vue.js → Chips.vue2.js} +2 -2
- package/dist/martyrs/src/components/Chips/Chips.vue2.js.map +1 -0
- package/dist/martyrs/src/components/Dropdown/{Dropdown.vue.cjs → Dropdown.vue2.cjs} +2 -2
- package/dist/martyrs/src/components/Dropdown/Dropdown.vue2.cjs.map +1 -0
- package/dist/martyrs/src/components/Dropdown/{Dropdown.vue.js → Dropdown.vue2.js} +2 -2
- package/dist/martyrs/src/components/Dropdown/{Dropdown.vue.cjs.map → Dropdown.vue2.js.map} +1 -1
- package/dist/martyrs/src/components/EditImages/EditImages.vue.cjs +0 -93
- package/dist/martyrs/src/components/EditImages/EditImages.vue.cjs.map +1 -1
- package/dist/martyrs/src/components/EditImages/EditImages.vue.js +1 -94
- package/dist/martyrs/src/components/EditImages/EditImages.vue.js.map +1 -1
- package/dist/martyrs/src/components/EditImages/EditImages.vue2.cjs +93 -0
- package/dist/martyrs/src/components/EditImages/EditImages.vue2.cjs.map +1 -1
- package/dist/martyrs/src/components/EditImages/EditImages.vue2.js +94 -1
- package/dist/martyrs/src/components/EditImages/EditImages.vue2.js.map +1 -1
- package/dist/martyrs/src/components/Feed/Feed.vue.cjs +2 -3
- package/dist/martyrs/src/components/Feed/Feed.vue.cjs.map +1 -1
- package/dist/martyrs/src/components/Feed/Feed.vue.js +2 -3
- package/dist/martyrs/src/components/Feed/Feed.vue.js.map +1 -1
- package/dist/martyrs/src/components/FieldTags/FieldTags.vue.cjs +1 -1
- package/dist/martyrs/src/components/FieldTags/FieldTags.vue.js +1 -1
- package/dist/martyrs/src/components/Loader/Loader.vue2.cjs +1 -1
- package/dist/martyrs/src/components/Loader/Loader.vue2.cjs.map +1 -1
- package/dist/martyrs/src/components/Loader/Loader.vue2.js +1 -1
- package/dist/martyrs/src/components/Loader/Loader.vue2.js.map +1 -1
- package/dist/martyrs/src/components/LocationMarker/{LocationMarker.vue2.cjs → LocationMarker.vue.cjs} +2 -2
- package/dist/martyrs/src/components/LocationMarker/{LocationMarker.vue2.js.map → LocationMarker.vue.cjs.map} +1 -1
- package/dist/martyrs/src/components/LocationMarker/{LocationMarker.vue2.js → LocationMarker.vue.js} +2 -2
- package/dist/martyrs/src/components/LocationMarker/LocationMarker.vue.js.map +1 -0
- package/dist/martyrs/src/components/Select/{Select.vue2.cjs → Select.vue.cjs} +2 -2
- package/dist/martyrs/src/components/Select/{Select.vue2.js.map → Select.vue.cjs.map} +1 -1
- package/dist/martyrs/src/components/Select/{Select.vue2.js → Select.vue.js} +2 -2
- package/dist/martyrs/src/components/Select/Select.vue.js.map +1 -0
- package/dist/martyrs/src/modules/auth/views/components/blocks/CardUser.vue.cjs +2 -2
- package/dist/martyrs/src/modules/auth/views/components/blocks/CardUser.vue.js +2 -2
- package/dist/martyrs/src/modules/auth/views/components/layouts/Auth.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/layouts/Auth.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/layouts/Auth.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/layouts/Auth.vue.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.cjs +2 -2
- package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.js +4 -4
- package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.cjs +41 -51
- package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js +59 -69
- package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/sections/SliderFeatures.vue.cjs +11 -13
- package/dist/martyrs/src/modules/auth/views/components/sections/SliderFeatures.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/sections/SliderFeatures.vue.js +11 -13
- package/dist/martyrs/src/modules/auth/views/components/sections/SliderFeatures.vue.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/store/auth.cjs +10 -1
- package/dist/martyrs/src/modules/auth/views/store/auth.cjs.map +1 -1
- package/dist/martyrs/src/modules/auth/views/store/auth.js +10 -1
- package/dist/martyrs/src/modules/auth/views/store/auth.js.map +1 -1
- package/dist/martyrs/src/modules/backoffice/components/partials/Sidebar.vue.cjs +6 -0
- package/dist/martyrs/src/modules/backoffice/components/partials/Sidebar.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/backoffice/components/partials/Sidebar.vue.js +6 -0
- package/dist/martyrs/src/modules/backoffice/components/partials/Sidebar.vue.js.map +1 -1
- package/dist/martyrs/src/modules/chats/components/blocks/ChatMessage.vue.cjs +27 -11
- package/dist/martyrs/src/modules/chats/components/blocks/ChatMessage.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/chats/components/blocks/ChatMessage.vue.js +28 -12
- package/dist/martyrs/src/modules/chats/components/blocks/ChatMessage.vue.js.map +1 -1
- package/dist/martyrs/src/modules/chats/components/sections/ChatWindow.vue.cjs +62 -0
- package/dist/martyrs/src/modules/chats/components/sections/ChatWindow.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/chats/components/sections/ChatWindow.vue.js +63 -1
- package/dist/martyrs/src/modules/chats/components/sections/ChatWindow.vue.js.map +1 -1
- package/dist/martyrs/src/modules/chats/store/chat.store.cjs +60 -1
- package/dist/martyrs/src/modules/chats/store/chat.store.cjs.map +1 -1
- package/dist/martyrs/src/modules/chats/store/chat.store.js +60 -1
- package/dist/martyrs/src/modules/chats/store/chat.store.js.map +1 -1
- package/dist/martyrs/src/modules/community/components/blocks/CardBlogpost.vue.cjs +1 -1
- package/dist/martyrs/src/modules/community/components/blocks/CardBlogpost.vue.js +1 -1
- package/dist/martyrs/src/modules/community/components/layouts/Community.vue.cjs +3 -3
- package/dist/martyrs/src/modules/community/components/layouts/Community.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/community/components/layouts/Community.vue.js +3 -3
- package/dist/martyrs/src/modules/community/components/layouts/Community.vue.js.map +1 -1
- package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.cjs +2 -2
- package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.js +2 -2
- package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.cjs +1 -1
- package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.js +1 -1
- package/dist/martyrs/src/modules/community/components/pages/Posts.vue.cjs +50 -368
- package/dist/martyrs/src/modules/community/components/pages/Posts.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/community/components/pages/Posts.vue.js +53 -371
- package/dist/martyrs/src/modules/community/components/pages/Posts.vue.js.map +1 -1
- package/dist/martyrs/src/modules/events/components/blocks/CardEvent.vue.cjs +1 -1
- package/dist/martyrs/src/modules/events/components/blocks/CardEvent.vue.js +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.cjs +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.js +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.cjs +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.js +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.js.map +1 -1
- package/dist/martyrs/src/modules/events/components/pages/Event.vue.cjs +2 -3
- package/dist/martyrs/src/modules/events/components/pages/Event.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/events/components/pages/Event.vue.js +2 -3
- package/dist/martyrs/src/modules/events/components/pages/Event.vue.js.map +1 -1
- package/dist/martyrs/src/modules/events/components/pages/Events.vue.cjs +2 -2
- package/dist/martyrs/src/modules/events/components/pages/Events.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/events/components/pages/Events.vue.js +2 -2
- package/dist/martyrs/src/modules/events/components/pages/Events.vue.js.map +1 -1
- package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.cjs +3 -3
- package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.js +3 -3
- package/dist/martyrs/src/modules/globals/views/classes/globals.i18n.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/classes/globals.i18n.js +1 -1
- package/dist/martyrs/src/modules/globals/views/components/blocks/CardHeader.vue.cjs +2 -2
- package/dist/martyrs/src/modules/globals/views/components/blocks/CardHeader.vue.js +2 -2
- package/dist/martyrs/src/modules/globals/views/components/partials/Header.vue.cjs +2 -2
- package/dist/martyrs/src/modules/globals/views/components/partials/Header.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/Header.vue.js +2 -2
- package/dist/martyrs/src/modules/globals/views/components/partials/Header.vue.js.map +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/LocationSelection.vue.cjs +2 -2
- package/dist/martyrs/src/modules/globals/views/components/partials/LocationSelection.vue.js +2 -2
- package/dist/martyrs/src/modules/globals/views/components/partials/Navigation.vue.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/Navigation.vue.js +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/Sidebar.vue.cjs +16 -3
- package/dist/martyrs/src/modules/globals/views/components/partials/Sidebar.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/Sidebar.vue.js +17 -4
- package/dist/martyrs/src/modules/globals/views/components/partials/Sidebar.vue.js.map +1 -1
- package/dist/martyrs/src/modules/globals/views/components/sections/Walkthrough.vue.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/mixins/mixins.cjs +7 -0
- package/dist/martyrs/src/modules/globals/views/mixins/mixins.cjs.map +1 -1
- package/dist/martyrs/src/modules/globals/views/mixins/mixins.js +7 -0
- package/dist/martyrs/src/modules/globals/views/mixins/mixins.js.map +1 -1
- package/dist/martyrs/src/modules/icons/pages/IconsPage.vue.cjs +1 -1
- package/dist/martyrs/src/modules/inventory/components/forms/AdjustmentForm.vue.cjs +67 -43
- package/dist/martyrs/src/modules/inventory/components/forms/AdjustmentForm.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/inventory/components/forms/AdjustmentForm.vue.js +68 -44
- package/dist/martyrs/src/modules/inventory/components/forms/AdjustmentForm.vue.js.map +1 -1
- package/dist/martyrs/src/modules/inventory/components/forms/ColumnSettingsMenu.vue.cjs +22 -7
- package/dist/martyrs/src/modules/inventory/components/forms/ColumnSettingsMenu.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/inventory/components/forms/ColumnSettingsMenu.vue.js +23 -8
- package/dist/martyrs/src/modules/inventory/components/forms/ColumnSettingsMenu.vue.js.map +1 -1
- package/dist/martyrs/src/modules/inventory/components/forms/HistoryView.vue.cjs +47 -32
- package/dist/martyrs/src/modules/inventory/components/forms/HistoryView.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/inventory/components/forms/HistoryView.vue.js +48 -33
- package/dist/martyrs/src/modules/inventory/components/forms/HistoryView.vue.js.map +1 -1
- package/dist/martyrs/src/modules/inventory/components/forms/StockAlertsForm.vue.cjs +47 -26
- package/dist/martyrs/src/modules/inventory/components/forms/StockAlertsForm.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/inventory/components/forms/StockAlertsForm.vue.js +48 -27
- package/dist/martyrs/src/modules/inventory/components/forms/StockAlertsForm.vue.js.map +1 -1
- package/dist/martyrs/src/modules/inventory/components/pages/Inventory.vue.cjs +42 -52
- package/dist/martyrs/src/modules/inventory/components/pages/Inventory.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/inventory/components/pages/Inventory.vue.js +43 -53
- package/dist/martyrs/src/modules/inventory/components/pages/Inventory.vue.js.map +1 -1
- package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.cjs +18 -18
- package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.js +3 -3
- package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.js.map +1 -1
- package/dist/martyrs/src/modules/inventory/store/{ inventory.store.cjs → inventory.store.cjs} +46 -2
- package/dist/martyrs/src/modules/inventory/store/inventory.store.cjs.map +1 -0
- package/dist/martyrs/src/modules/inventory/store/{ inventory.store.js → inventory.store.js} +46 -2
- package/dist/martyrs/src/modules/inventory/store/inventory.store.js.map +1 -0
- package/dist/martyrs/src/modules/marketplace/views/components/layouts/Marketplace.vue.cjs +180 -19
- package/dist/martyrs/src/modules/marketplace/views/components/layouts/Marketplace.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/marketplace/views/components/layouts/Marketplace.vue.js +181 -20
- package/dist/martyrs/src/modules/marketplace/views/components/layouts/Marketplace.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Album.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Album.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Track.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Track.vue.js +1 -1
- package/dist/martyrs/src/modules/music/router/music.cjs +1 -2
- package/dist/martyrs/src/modules/music/router/music.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/router/music.js +1 -2
- package/dist/martyrs/src/modules/music/router/music.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/blocks/CardOrderBackoffice.vue.cjs +2 -2
- package/dist/martyrs/src/modules/orders/components/blocks/CardOrderBackoffice.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/orders/components/blocks/CardOrderBackoffice.vue.js +2 -2
- package/dist/martyrs/src/modules/orders/components/blocks/CardOrderBackoffice.vue.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/forms/FormApplicationDetails.vue.cjs +1 -1
- package/dist/martyrs/src/modules/orders/components/forms/FormApplicationDetails.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/forms/FormCustomerDetails.vue.cjs +1 -1
- package/dist/martyrs/src/modules/orders/components/forms/FormCustomerDetails.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.cjs +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.cjs +3 -4
- package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.js +3 -4
- package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/FormPayment.vue.cjs +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/FormPayment.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/orders.client.cjs +2 -2
- package/dist/martyrs/src/modules/orders/orders.client.cjs.map +1 -1
- package/dist/martyrs/src/modules/orders/orders.client.js +2 -2
- package/dist/martyrs/src/modules/orders/orders.client.js.map +1 -1
- package/dist/martyrs/src/modules/orders/router/customers.router.cjs +1 -1
- package/dist/martyrs/src/modules/orders/router/customers.router.cjs.map +1 -1
- package/dist/martyrs/src/modules/orders/router/customers.router.js +1 -1
- package/dist/martyrs/src/modules/orders/router/customers.router.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/blocks/CardDepartment.vue.cjs +2 -24
- package/dist/martyrs/src/modules/organizations/components/blocks/CardDepartment.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/blocks/CardDepartment.vue.js +5 -27
- package/dist/martyrs/src/modules/organizations/components/blocks/CardDepartment.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/blocks/CardOrganization.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/blocks/CardOrganization.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/blocks/Socials.vue.cjs +4 -1
- package/dist/martyrs/src/modules/organizations/components/blocks/Socials.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/blocks/Socials.vue.js +4 -1
- package/dist/martyrs/src/modules/organizations/components/blocks/Socials.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/elements/ButtonToggleMembership.vue.cjs +3 -3
- package/dist/martyrs/src/modules/organizations/components/elements/ButtonToggleMembership.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/elements/ButtonToggleMembership.vue.js +3 -3
- package/dist/martyrs/src/modules/organizations/components/elements/ButtonToggleMembership.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/forms/AddExistingMembersForm.vue.cjs +195 -0
- package/dist/martyrs/src/modules/organizations/components/forms/AddExistingMembersForm.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/organizations/components/forms/AddExistingMembersForm.vue.js +195 -0
- package/dist/martyrs/src/modules/organizations/components/forms/AddExistingMembersForm.vue.js.map +1 -0
- package/dist/martyrs/src/modules/organizations/components/forms/DepartmentForm.vue.cjs +402 -0
- package/dist/martyrs/src/modules/organizations/components/forms/DepartmentForm.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/organizations/components/forms/DepartmentForm.vue.js +402 -0
- package/dist/martyrs/src/modules/organizations/components/forms/DepartmentForm.vue.js.map +1 -0
- package/dist/martyrs/src/modules/organizations/components/forms/InviteForm.vue.cjs +86 -0
- package/dist/martyrs/src/modules/organizations/components/forms/InviteForm.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/organizations/components/forms/InviteForm.vue.js +86 -0
- package/dist/martyrs/src/modules/organizations/components/forms/InviteForm.vue.js.map +1 -0
- package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.cjs +10 -10
- package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.js +11 -11
- package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.cjs +279 -191
- package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.js +285 -197
- package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.cjs +7 -7
- package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.js +7 -7
- package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.cjs +2 -2
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js +2 -2
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/MembersAdd.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/MembersAdd.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.cjs +3 -3
- package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.js +3 -3
- package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/Publics.vue.cjs +4 -4
- package/dist/martyrs/src/modules/organizations/components/sections/Publics.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/Publics.vue.js +4 -4
- package/dist/martyrs/src/modules/organizations/components/sections/Publics.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/configs/navigation.organization.config.cjs +42 -41
- package/dist/martyrs/src/modules/organizations/configs/navigation.organization.config.cjs.map +1 -1
- package/dist/martyrs/src/modules/organizations/configs/navigation.organization.config.js +53 -52
- package/dist/martyrs/src/modules/organizations/configs/navigation.organization.config.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/organizations.client.cjs +23 -16
- package/dist/martyrs/src/modules/organizations/organizations.client.cjs.map +1 -1
- package/dist/martyrs/src/modules/organizations/organizations.client.js +35 -28
- package/dist/martyrs/src/modules/organizations/organizations.client.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/router/departments.router.cjs +0 -18
- package/dist/martyrs/src/modules/organizations/router/departments.router.cjs.map +1 -1
- package/dist/martyrs/src/modules/organizations/router/departments.router.js +0 -18
- package/dist/martyrs/src/modules/organizations/router/departments.router.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/store/departments.store.cjs +6 -0
- package/dist/martyrs/src/modules/organizations/store/departments.store.cjs.map +1 -0
- package/dist/martyrs/src/modules/organizations/store/departments.store.js +6 -0
- package/dist/martyrs/src/modules/organizations/store/departments.store.js.map +1 -0
- package/dist/martyrs/src/modules/organizations/store/invites.store.cjs +6 -0
- package/dist/martyrs/src/modules/organizations/store/invites.store.cjs.map +1 -0
- package/dist/martyrs/src/modules/organizations/store/invites.store.js +6 -0
- package/dist/martyrs/src/modules/organizations/store/invites.store.js.map +1 -0
- package/dist/martyrs/src/modules/organizations/store/memberships.store.cjs +20 -0
- package/dist/martyrs/src/modules/organizations/store/memberships.store.cjs.map +1 -0
- package/dist/martyrs/src/modules/organizations/store/memberships.store.js +20 -0
- package/dist/martyrs/src/modules/organizations/store/memberships.store.js.map +1 -0
- package/dist/martyrs/src/modules/products/components/blocks/ProductDiscounts.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/blocks/ProductDiscounts.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.cjs +3 -4
- package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js +3 -4
- package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.cjs +2 -2
- package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.js +2 -2
- package/dist/martyrs/src/modules/products/components/pages/Products.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Products.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Products.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Products.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.cjs +2 -2
- package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.js +2 -2
- package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue.cjs +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue.js +1 -1
- package/dist/martyrs/src/modules/reports/components/sections/FormReport.vue.cjs +1 -1
- package/dist/martyrs/src/modules/reports/components/sections/FormReport.vue.js +1 -1
- package/dist/martyrs/src/modules/spots/components/blocks/CardSpot.vue.cjs +3 -3
- package/dist/martyrs/src/modules/spots/components/blocks/CardSpot.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/spots/components/blocks/CardSpot.vue.js +3 -3
- package/dist/martyrs/src/modules/spots/components/blocks/CardSpot.vue.js.map +1 -1
- package/dist/martyrs/src/modules/spots/components/blocks/SpotMemberModify.vue.cjs +1 -1
- package/dist/martyrs/src/modules/spots/components/blocks/SpotMemberModify.vue.js +1 -1
- package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.cjs +1 -1
- package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.js +1 -1
- package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.cjs +3 -3
- package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.js +3 -3
- package/dist/martyrs/src/modules/spots/components/pages/Spots.vue.cjs +60 -272
- package/dist/martyrs/src/modules/spots/components/pages/Spots.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/spots/components/pages/Spots.vue.js +62 -274
- package/dist/martyrs/src/modules/spots/components/pages/Spots.vue.js.map +1 -1
- package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.js +1 -1
- package/dist/martyrs/src/modules/wallet/views/components/blocks/CryptoDeposit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/wallet/views/components/blocks/CryptoDeposit.vue.js +1 -1
- package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.cjs +4 -4
- package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.js +4 -4
- package/dist/martyrs.cjs.js +1 -1
- package/dist/martyrs.css +1 -1
- package/dist/martyrs.es.js +1 -1
- package/dist/music.server.cjs +9 -9
- package/dist/music.server.js +9 -9
- package/dist/notifications.server.cjs +0 -24
- package/dist/notifications.server.js +0 -24
- package/dist/orders.server.cjs +3 -6
- package/dist/orders.server.js +3 -6
- package/dist/organizations.server.cjs +119 -43
- package/dist/organizations.server.js +119 -43
- package/dist/products.server.cjs +5 -5
- package/dist/products.server.js +5 -5
- package/dist/rents.server.cjs +3 -3
- package/dist/rents.server.js +3 -3
- package/dist/style.css +16 -17
- package/dist/wallet.server.cjs +2 -2
- package/dist/wallet.server.js +2 -2
- package/dist/{web-B5wZTKbK.cjs → web-B0cfxzgu.cjs} +1 -1
- package/dist/{web-520xCgXy.js → web-DVR8m2fm.js} +1 -1
- package/package.json +1 -1
- package/src/builder/modes/ssr.rspack.dev.js +20 -12
- package/src/builder/rspack/rspack.config.base.js +16 -15
- package/src/components/Button/Button.vue +1 -1
- package/src/components/Feed/Feed.old.vue +0 -1
- package/src/components/Feed/Feed.vue +1 -31
- package/src/components/Loader/Loader.vue +1 -1
- package/src/modules/auth/FIXES.md +61 -0
- package/src/modules/auth/PROMT.md +33 -0
- package/src/modules/auth/auth.server.js +1 -0
- package/src/modules/auth/views/components/blocks/CardUser.vue +2 -2
- package/src/modules/auth/views/components/layouts/Auth.vue +1 -1
- package/src/modules/auth/views/components/pages/Invite.vue +2 -2
- package/src/modules/auth/views/components/pages/Profile.vue +33 -48
- package/src/modules/auth/views/components/sections/SliderFeatures.vue +5 -7
- package/src/modules/auth/views/store/auth.js +16 -1
- package/src/modules/auth//320/220/320/240/320/245/320/230/320/242/320/225/320/232/320/242/320/243/320/240/320/220.md +445 -0
- package/src/modules/backoffice/components/partials/Sidebar.vue +6 -0
- package/src/modules/chats/CLAUDE.md +137 -0
- package/src/modules/chats/components/blocks/ChatMessage.vue +12 -0
- package/src/modules/chats/components/sections/ChatWindow.vue +84 -2
- package/src/modules/chats/controllers/chats.controller.js +187 -0
- package/src/modules/chats/models/chat.model.js +21 -0
- package/src/modules/chats/routes/chats.routes.js +46 -0
- package/src/modules/chats/store/chat.store.js +67 -0
- package/src/modules/community/components/layouts/Community.vue +2 -2
- package/src/modules/community/components/pages/Posts.vue +3 -328
- package/src/modules/events/components/pages/EditEventTickets.vue +1 -1
- package/src/modules/events/components/pages/Events.vue +2 -2
- package/src/modules/globals/controllers/classes/globals.cache.js +64 -55
- package/src/modules/globals/controllers/classes/globals.logger.js +40 -4
- package/src/modules/globals/controllers/classes/globals.observer.js +54 -4
- package/src/modules/globals/views/components/partials/Header.vue +1 -1
- package/src/modules/globals/views/components/partials/Sidebar.vue +17 -13
- package/src/modules/globals/views/mixins/mixins.js +7 -0
- package/src/modules/inventory/CLAUDE.md +330 -0
- package/src/modules/inventory/PROMT.md +25 -0
- package/src/modules/inventory/components/forms/AdjustmentForm.vue +53 -36
- package/src/modules/inventory/components/forms/ColumnSettingsMenu.vue +11 -6
- package/src/modules/inventory/components/forms/HistoryView.vue +21 -9
- package/src/modules/inventory/components/forms/StockAlertsForm.vue +33 -22
- package/src/modules/inventory/components/pages/Inventory.vue +40 -40
- package/src/modules/inventory/components/pages/InventoryEdit.vue +1 -1
- package/src/modules/inventory/docs/01-intro.md +126 -0
- package/src/modules/inventory/docs/02-architecture.md +266 -0
- package/src/modules/inventory/docs/03-components-and-relationships.md +338 -0
- package/src/modules/inventory/docs/04-business-logic-and-algorithms.md +376 -0
- package/src/modules/inventory/docs/05-api-specification.md +356 -0
- package/src/modules/inventory/docs/06-access-control.md +320 -0
- package/src/modules/inventory/inventory.server.js +6 -2
- package/src/modules/inventory/{services → middlewares}/inventory.verifier.js +5 -16
- package/src/modules/inventory/models/stock.availability.model.js +20 -7
- package/src/modules/inventory/routes/inventory.routes.js +14 -17
- package/src/modules/inventory/services/adjustment.service.js +137 -0
- package/src/modules/inventory/services/audit.service.js +160 -0
- package/src/modules/inventory/services/availability.service.js +323 -0
- package/src/modules/inventory/services/inventory.helpers.old.js +217 -0
- package/src/modules/inventory/store/{ inventory.store.js → inventory.store.js} +0 -14
- package/src/modules/inventory/workers/inventory.availability.worker.js +29 -30
- package/src/modules/marketplace/views/components/layouts/Marketplace.vue +160 -8
- package/src/modules/notifications/controllers/notifications.controller.js +0 -6
- package/src/modules/notifications/services/notification.service.js +1 -17
- package/src/modules/notifications/services/web-push.service.js +0 -2
- package/src/modules/orders/components/blocks/CardOrderBackoffice.vue +2 -2
- package/src/modules/orders/components/blocks/CardOrderVar1.vue +1 -1
- package/src/modules/orders/controllers/orders.controller.js +2 -4
- package/src/modules/orders/orders.client.js +2 -2
- package/src/modules/orders/router/customers.router.js +1 -1
- package/src/modules/organizations/CLAUDE.md +259 -0
- package/src/modules/organizations/components/blocks/CardDepartment.vue +1 -22
- package/src/modules/organizations/components/blocks/Socials.vue +1 -1
- package/src/modules/organizations/components/elements/ButtonToggleMembership.vue +3 -3
- package/src/modules/organizations/components/forms/AddExistingMembersForm.vue +191 -0
- package/src/modules/organizations/components/forms/DepartmentForm.vue +390 -0
- package/src/modules/organizations/components/forms/InviteForm.vue +81 -0
- package/src/modules/organizations/components/pages/Department.vue +10 -10
- package/src/modules/organizations/components/pages/DepartmentEdit.vue +8 -8
- package/src/modules/organizations/components/pages/Members.vue +265 -171
- package/src/modules/organizations/components/pages/Organization.new.vue +172 -183
- package/src/modules/organizations/components/pages/Organization.vue +6 -6
- package/src/modules/organizations/components/pages/OrganizationEdit.vue +1 -1
- package/src/modules/organizations/components/pages/Organizations.vue +1 -1
- package/src/modules/organizations/components/sections/Organizations.vue +2 -2
- package/src/modules/organizations/components/sections/Publics.vue +4 -4
- package/src/modules/organizations/configs/navigation.organization.config.js +40 -39
- package/src/modules/organizations/controllers/departments.controller.js +53 -34
- package/src/modules/organizations/controllers/invites.controller.js +44 -5
- package/src/modules/organizations/controllers/memberships.controller.js +43 -4
- package/src/modules/organizations/organizations.client.js +24 -15
- package/src/modules/organizations/router/departments.router.js +0 -18
- package/src/modules/organizations/routes/departments.routes.js +6 -8
- package/src/modules/organizations/routes/invites.routes.js +6 -4
- package/src/modules/organizations/routes/memberships.routes.js +6 -5
- package/src/modules/organizations/routes/organizations.routes.js +1 -1
- package/src/modules/organizations/store/departments.store.js +5 -0
- package/src/modules/organizations/store/invites.store.js +5 -0
- package/src/modules/organizations/store/memberships.store.js +23 -0
- package/src/modules/products/components/pages/Products.vue +0 -1
- package/src/modules/spots/components/blocks/CardSpot.vue +1 -1
- package/src/modules/spots/components/pages/Spots.vue +3 -203
- package/src/styles/base/all.scss +0 -15
- package/src/styles/responsive.scss +1 -31
- package/src/styles/typography.scss +20 -5
- package/dist/main-CSzPfQYR.cjs +0 -11
- package/dist/martyrs/src/components/Address/Address.vue2.cjs.map +0 -1
- package/dist/martyrs/src/components/Chips/Chips.vue.cjs.map +0 -1
- package/dist/martyrs/src/components/Chips/Chips.vue.js.map +0 -1
- package/dist/martyrs/src/components/Dropdown/Dropdown.vue.js.map +0 -1
- package/dist/martyrs/src/components/LocationMarker/LocationMarker.vue2.cjs.map +0 -1
- package/dist/martyrs/src/components/Select/Select.vue2.cjs.map +0 -1
- package/dist/martyrs/src/modules/globals/views/components/blocks/BlockFilter.vue.cjs +0 -76
- package/dist/martyrs/src/modules/globals/views/components/blocks/BlockFilter.vue.cjs.map +0 -1
- package/dist/martyrs/src/modules/globals/views/components/blocks/BlockFilter.vue.js +0 -76
- package/dist/martyrs/src/modules/globals/views/components/blocks/BlockFilter.vue.js.map +0 -1
- package/dist/martyrs/src/modules/inventory/store/ inventory.store.cjs.map +0 -1
- package/dist/martyrs/src/modules/inventory/store/ inventory.store.js.map +0 -1
- package/dist/martyrs/src/modules/organizations/components/pages/DepartmentEdit.vue.cjs +0 -280
- package/dist/martyrs/src/modules/organizations/components/pages/DepartmentEdit.vue.cjs.map +0 -1
- package/dist/martyrs/src/modules/organizations/components/pages/DepartmentEdit.vue.js +0 -280
- package/dist/martyrs/src/modules/organizations/components/pages/DepartmentEdit.vue.js.map +0 -1
- package/dist/martyrs/src/modules/organizations/store/departments.cjs +0 -121
- package/dist/martyrs/src/modules/organizations/store/departments.cjs.map +0 -1
- package/dist/martyrs/src/modules/organizations/store/departments.js +0 -121
- package/dist/martyrs/src/modules/organizations/store/departments.js.map +0 -1
- package/dist/martyrs/src/modules/organizations/store/invites.cjs +0 -64
- package/dist/martyrs/src/modules/organizations/store/invites.cjs.map +0 -1
- package/dist/martyrs/src/modules/organizations/store/invites.js +0 -64
- package/dist/martyrs/src/modules/organizations/store/invites.js.map +0 -1
- package/dist/martyrs/src/modules/organizations/store/memberships.cjs +0 -87
- package/dist/martyrs/src/modules/organizations/store/memberships.cjs.map +0 -1
- package/dist/martyrs/src/modules/organizations/store/memberships.js +0 -87
- package/dist/martyrs/src/modules/organizations/store/memberships.js.map +0 -1
- package/src/modules/globals/controllers/classes/globals.websocket.ws.js +0 -102
- package/src/modules/globals/views/components/blocks/BlockFilter.vue +0 -60
- package/src/modules/inventory/docs/README.md +0 -291
- package/src/modules/inventory/models/stock.balance.model.js +0 -43
- package/src/modules/inventory/services/inventory.crud.js +0 -710
- package/src/modules/inventory/tests/inventory.test.js +0 -281
- package/src/modules/organizations/store/departments.js +0 -137
- package/src/modules/organizations/store/invites.js +0 -76
- package/src/modules/organizations/store/memberships.js +0 -110
|
@@ -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/auth/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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"}
|
|
@@ -66,6 +66,12 @@ const _sfc_main = {
|
|
|
66
66
|
routeName: "Backoffice Gallery",
|
|
67
67
|
icon: IconGallery.default
|
|
68
68
|
},
|
|
69
|
+
{
|
|
70
|
+
name: "applications",
|
|
71
|
+
title: "Applications",
|
|
72
|
+
routeName: "BackofficeApplications",
|
|
73
|
+
icon: IconEvents.default
|
|
74
|
+
},
|
|
69
75
|
{
|
|
70
76
|
name: "events",
|
|
71
77
|
title: "Events",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Sidebar.vue.cjs","sources":["../../../../../../../src/modules/backoffice/components/partials/Sidebar.vue"],"sourcesContent":["<template>\n <div class=\"pos-relative o-y-scroll o-x-hidden h-100\">\n <div class=\"br-b h3 h-4r pd-semi br-solid br-black-transp-10\">Backoffice</div>\n <div class=\"pd-semi\">\n <span class=\"pd-thin uppercase t-medium t-transp\">Menu</span>\n <div \n v-for=\"item in menuItems\" \n :key=\"item.name\"\n @click=\"router.push({ name: item.routeName })\" \n class=\"flex pd-thin flex-v-center cursor-pointer\">\n <component \n v-if=\"item.icon\" \n :is=\"item.icon\" \n class=\"i-regular mn-r-thin\" \n :icon=\"true\" \n :fill=\"'rgba(var(--black),0.25)'\"\n /> \n <span class=\"t-medium\">{{ item.title }}</span>\n </div>\n \n <span class=\"pd-thin d-block mn-t-medium uppercase t-medium t-transp\">General</span>\n <div \n v-for=\"item in generalItems\" \n :key=\"item.name\"\n @click=\"router.push({ name: item.routeName })\" \n class=\"flex pd-thin flex-v-center cursor-pointer\">\n <component \n v-if=\"item.icon\" \n :is=\"item.icon\" \n class=\"i-regular mn-r-thin\" \n :icon=\"true\" \n :fill=\"'rgba(var(--black),0.25)'\"\n /> \n <span class=\"t-medium\">{{ item.title }}</span>\n </div>\n </div>\n </div>\n</template>\n\n<script setup=\"props\">\n/////////////////////////////\n// COMPONENT DEPENDENCIES\n/////////////////////////////\nimport { ref, onMounted } from 'vue';\n\n// Mobile Module\nimport SelectMulti from '@martyrs/src/components/SelectMulti/SelectMulti.vue'\n\nimport IconProducts from '@martyrs/src/modules/icons/entities/IconProducts.vue'\nimport IconPayments from '@martyrs/src/modules/icons/entities/IconPayments.vue'\nimport IconEvents from '@martyrs/src/modules/icons/entities/IconEvents.vue'\nimport IconGroups from '@martyrs/src/modules/icons/entities/IconGroups.vue'\nimport IconCommunity from '@martyrs/src/modules/icons/entities/IconCommunity.vue'\nimport IconGallery from '@martyrs/src/modules/icons/entities/IconGallery.vue'\nimport IconOrders from '@martyrs/src/modules/icons/entities/IconOrders.vue'\nimport IconLeftovers from '@martyrs/src/modules/icons/entities/IconLeftovers.vue'\n/////////////////////////////\n// HELPERS\n/////////////////////////////\nimport { useRoute, useRouter } from 'vue-router'\n\nimport * as auth from '@martyrs/src/modules/auth/views/store/auth.js'\nimport * as organizations from '@martyrs/src/modules/organizations/store/organizations.js'\n\nconst route = useRoute()\nconst router = useRouter()\n/////////////////////////////\n// CREATED\n/////////////////////////////\nconst props = defineProps({\n favorites: Array,\n});\n\nconst selectedOrganization = ref(null);\nconst publics = ref([]);\n\n// Define menu items\nconst menuItems = [\n {\n name: 'organizations',\n title: 'Organizations',\n routeName: 'Backoffice Organizations',\n icon: IconGroups\n },\n {\n name: 'community',\n title: 'Community',\n routeName: 'Backoffice Community',\n icon: IconCommunity\n },\n {\n name: 'products',\n title: 'Products',\n routeName: 'Products',\n icon: IconProducts\n },\n {\n name: 'inventory',\n title: 'Inventory',\n routeName: 'BackofficeInventoryList',\n icon: IconLeftovers\n },\n {\n name: 'orders',\n title: 'Orders',\n routeName: 'BackofficeOrdersList',\n icon: IconOrders\n },\n {\n name: 'gallery',\n title: 'Gallery',\n routeName: 'Backoffice Gallery',\n icon: IconGallery\n },\n {\n name: 'events',\n title: 'Events',\n routeName: 'BackofficeEvents Backoffice',\n icon: IconEvents\n }\n];\n\n// Define general items\nconst generalItems = [\n {\n name: 'payments',\n title: 'Payments',\n routeName: 'Payments',\n icon: IconPayments\n },\n {\n name: 'users',\n title: 'Users',\n routeName: 'Users',\n icon: null\n },\n {\n name: 'pages',\n title: 'Pages',\n routeName: 'Backoffice Pages',\n icon: null\n },\n {\n name: 'reports',\n title: 'Reports',\n routeName: 'Backoffice Reports',\n icon: null\n }\n];\n\n/////////////////////////////\n// MOUNTED\n/////////////////////////////\nonMounted(async () => {\n});\n</script>\n\n<style lang=\"scss\">\n</style>"],"names":["useRoute","useRouter","ref","IconGroups","IconCommunity","IconProducts","IconLeftovers","IconOrders","IconGallery","IconEvents","IconPayments","onMounted"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAgEcA,cAAAA,SAAQ;AACtB,UAAM,SAASC,UAAAA,UAAS;AAQKC,QAAAA,IAAI,IAAI;AACrBA,QAAAA,IAAI,CAAA,CAAE;AAGtB,UAAM,YAAY;AAAA,MAChB;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,QACP,WAAW;AAAA,QACX,MAAMC,WAAAA;AAAAA,MACV;AAAA,MACE;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,QACP,WAAW;AAAA,QACX,MAAMC,cAAAA;AAAAA,MACV;AAAA,MACE;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,QACP,WAAW;AAAA,QACX,MAAMC,aAAAA;AAAAA,MACV;AAAA,MACE;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,QACP,WAAW;AAAA,QACX,MAAMC,cAAAA;AAAAA,MACV;AAAA,MACE;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,QACP,WAAW;AAAA,QACX,MAAMC,WAAAA;AAAAA,MACV;AAAA,MACE;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,QACP,WAAW;AAAA,QACX,MAAMC,YAAAA;AAAAA,MACV;AAAA,MACE;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,QACP,WAAW;AAAA,QACX,MAAMC,WAAAA;AAAAA,MACV;AAAA,IACA;AAGA,UAAM,eAAe;AAAA,MACnB;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,QACP,WAAW;AAAA,QACX,MAAMC,aAAAA;AAAAA,MACV;AAAA,MACE;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,QACP,WAAW;AAAA,QACX,MAAM;AAAA,MACV;AAAA,MACE;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,QACP,WAAW;AAAA,QACX,MAAM;AAAA,MACV;AAAA,MACE;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,QACP,WAAW;AAAA,QACX,MAAM;AAAA,MACV;AAAA,IACA;AAKAC,QAAAA,UAAU,YAAY;AAAA,IACtB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"Sidebar.vue.cjs","sources":["../../../../../../../src/modules/backoffice/components/partials/Sidebar.vue"],"sourcesContent":["<template>\n <div class=\"pos-relative o-y-scroll o-x-hidden h-100\">\n <div class=\"br-b h3 h-4r pd-semi br-solid br-black-transp-10\">Backoffice</div>\n <div class=\"pd-semi\">\n <span class=\"pd-thin uppercase t-medium t-transp\">Menu</span>\n <div \n v-for=\"item in menuItems\" \n :key=\"item.name\"\n @click=\"router.push({ name: item.routeName })\" \n class=\"flex pd-thin flex-v-center cursor-pointer\">\n <component \n v-if=\"item.icon\" \n :is=\"item.icon\" \n class=\"i-regular mn-r-thin\" \n :icon=\"true\" \n :fill=\"'rgba(var(--black),0.25)'\"\n /> \n <span class=\"t-medium\">{{ item.title }}</span>\n </div>\n \n <span class=\"pd-thin d-block mn-t-medium uppercase t-medium t-transp\">General</span>\n <div \n v-for=\"item in generalItems\" \n :key=\"item.name\"\n @click=\"router.push({ name: item.routeName })\" \n class=\"flex pd-thin flex-v-center cursor-pointer\">\n <component \n v-if=\"item.icon\" \n :is=\"item.icon\" \n class=\"i-regular mn-r-thin\" \n :icon=\"true\" \n :fill=\"'rgba(var(--black),0.25)'\"\n /> \n <span class=\"t-medium\">{{ item.title }}</span>\n </div>\n </div>\n </div>\n</template>\n\n<script setup=\"props\">\n/////////////////////////////\n// COMPONENT DEPENDENCIES\n/////////////////////////////\nimport { ref, onMounted } from 'vue';\n\n// Mobile Module\nimport SelectMulti from '@martyrs/src/components/SelectMulti/SelectMulti.vue'\n\nimport IconProducts from '@martyrs/src/modules/icons/entities/IconProducts.vue'\nimport IconPayments from '@martyrs/src/modules/icons/entities/IconPayments.vue'\nimport IconEvents from '@martyrs/src/modules/icons/entities/IconEvents.vue'\nimport IconGroups from '@martyrs/src/modules/icons/entities/IconGroups.vue'\nimport IconCommunity from '@martyrs/src/modules/icons/entities/IconCommunity.vue'\nimport IconGallery from '@martyrs/src/modules/icons/entities/IconGallery.vue'\nimport IconOrders from '@martyrs/src/modules/icons/entities/IconOrders.vue'\nimport IconLeftovers from '@martyrs/src/modules/icons/entities/IconLeftovers.vue'\n/////////////////////////////\n// HELPERS\n/////////////////////////////\nimport { useRoute, useRouter } from 'vue-router'\n\nimport * as auth from '@martyrs/src/modules/auth/views/store/auth.js'\nimport * as organizations from '@martyrs/src/modules/organizations/store/organizations.js'\n\nconst route = useRoute()\nconst router = useRouter()\n/////////////////////////////\n// CREATED\n/////////////////////////////\nconst props = defineProps({\n favorites: Array,\n});\n\nconst selectedOrganization = ref(null);\nconst publics = ref([]);\n\n// Define menu items\nconst menuItems = [\n {\n name: 'organizations',\n title: 'Organizations',\n routeName: 'Backoffice Organizations',\n icon: IconGroups\n },\n {\n name: 'community',\n title: 'Community',\n routeName: 'Backoffice Community',\n icon: IconCommunity\n },\n {\n name: 'products',\n title: 'Products',\n routeName: 'Products',\n icon: IconProducts\n },\n {\n name: 'inventory',\n title: 'Inventory',\n routeName: 'BackofficeInventoryList',\n icon: IconLeftovers\n },\n {\n name: 'orders',\n title: 'Orders',\n routeName: 'BackofficeOrdersList',\n icon: IconOrders\n },\n {\n name: 'gallery',\n title: 'Gallery',\n routeName: 'Backoffice Gallery',\n icon: IconGallery\n },\n {\n name: 'applications',\n title: 'Applications',\n routeName: 'BackofficeApplications',\n icon: IconEvents\n },\n {\n name: 'events',\n title: 'Events',\n routeName: 'BackofficeEvents Backoffice',\n icon: IconEvents\n }\n];\n\n// Define general items\nconst generalItems = [\n {\n name: 'payments',\n title: 'Payments',\n routeName: 'Payments',\n icon: IconPayments\n },\n {\n name: 'users',\n title: 'Users',\n routeName: 'Users',\n icon: null\n },\n {\n name: 'pages',\n title: 'Pages',\n routeName: 'Backoffice Pages',\n icon: null\n },\n {\n name: 'reports',\n title: 'Reports',\n routeName: 'Backoffice Reports',\n icon: null\n }\n];\n\n/////////////////////////////\n// MOUNTED\n/////////////////////////////\nonMounted(async () => {\n});\n</script>\n\n<style lang=\"scss\">\n</style>"],"names":["useRoute","useRouter","ref","IconGroups","IconCommunity","IconProducts","IconLeftovers","IconOrders","IconGallery","IconEvents","IconPayments","onMounted"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAgEcA,cAAAA,SAAQ;AACtB,UAAM,SAASC,UAAAA,UAAS;AAQKC,QAAAA,IAAI,IAAI;AACrBA,QAAAA,IAAI,CAAA,CAAE;AAGtB,UAAM,YAAY;AAAA,MAChB;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,QACP,WAAW;AAAA,QACX,MAAMC,WAAAA;AAAAA,MACV;AAAA,MACE;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,QACP,WAAW;AAAA,QACX,MAAMC,cAAAA;AAAAA,MACV;AAAA,MACE;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,QACP,WAAW;AAAA,QACX,MAAMC,aAAAA;AAAAA,MACV;AAAA,MACE;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,QACP,WAAW;AAAA,QACX,MAAMC,cAAAA;AAAAA,MACV;AAAA,MACE;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,QACP,WAAW;AAAA,QACX,MAAMC,WAAAA;AAAAA,MACV;AAAA,MACE;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,QACP,WAAW;AAAA,QACX,MAAMC,YAAAA;AAAAA,MACV;AAAA,MACE;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,QACP,WAAW;AAAA,QACX,MAAMC,WAAAA;AAAAA,MACV;AAAA,MACE;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,QACP,WAAW;AAAA,QACX,MAAMA,WAAAA;AAAAA,MACV;AAAA,IACA;AAGA,UAAM,eAAe;AAAA,MACnB;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,QACP,WAAW;AAAA,QACX,MAAMC,aAAAA;AAAAA,MACV;AAAA,MACE;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,QACP,WAAW;AAAA,QACX,MAAM;AAAA,MACV;AAAA,MACE;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,QACP,WAAW;AAAA,QACX,MAAM;AAAA,MACV;AAAA,MACE;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,QACP,WAAW;AAAA,QACX,MAAM;AAAA,MACV;AAAA,IACA;AAKAC,QAAAA,UAAU,YAAY;AAAA,IACtB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Sidebar.vue.js","sources":["../../../../../../../src/modules/backoffice/components/partials/Sidebar.vue"],"sourcesContent":["<template>\n <div class=\"pos-relative o-y-scroll o-x-hidden h-100\">\n <div class=\"br-b h3 h-4r pd-semi br-solid br-black-transp-10\">Backoffice</div>\n <div class=\"pd-semi\">\n <span class=\"pd-thin uppercase t-medium t-transp\">Menu</span>\n <div \n v-for=\"item in menuItems\" \n :key=\"item.name\"\n @click=\"router.push({ name: item.routeName })\" \n class=\"flex pd-thin flex-v-center cursor-pointer\">\n <component \n v-if=\"item.icon\" \n :is=\"item.icon\" \n class=\"i-regular mn-r-thin\" \n :icon=\"true\" \n :fill=\"'rgba(var(--black),0.25)'\"\n /> \n <span class=\"t-medium\">{{ item.title }}</span>\n </div>\n \n <span class=\"pd-thin d-block mn-t-medium uppercase t-medium t-transp\">General</span>\n <div \n v-for=\"item in generalItems\" \n :key=\"item.name\"\n @click=\"router.push({ name: item.routeName })\" \n class=\"flex pd-thin flex-v-center cursor-pointer\">\n <component \n v-if=\"item.icon\" \n :is=\"item.icon\" \n class=\"i-regular mn-r-thin\" \n :icon=\"true\" \n :fill=\"'rgba(var(--black),0.25)'\"\n /> \n <span class=\"t-medium\">{{ item.title }}</span>\n </div>\n </div>\n </div>\n</template>\n\n<script setup=\"props\">\n/////////////////////////////\n// COMPONENT DEPENDENCIES\n/////////////////////////////\nimport { ref, onMounted } from 'vue';\n\n// Mobile Module\nimport SelectMulti from '@martyrs/src/components/SelectMulti/SelectMulti.vue'\n\nimport IconProducts from '@martyrs/src/modules/icons/entities/IconProducts.vue'\nimport IconPayments from '@martyrs/src/modules/icons/entities/IconPayments.vue'\nimport IconEvents from '@martyrs/src/modules/icons/entities/IconEvents.vue'\nimport IconGroups from '@martyrs/src/modules/icons/entities/IconGroups.vue'\nimport IconCommunity from '@martyrs/src/modules/icons/entities/IconCommunity.vue'\nimport IconGallery from '@martyrs/src/modules/icons/entities/IconGallery.vue'\nimport IconOrders from '@martyrs/src/modules/icons/entities/IconOrders.vue'\nimport IconLeftovers from '@martyrs/src/modules/icons/entities/IconLeftovers.vue'\n/////////////////////////////\n// HELPERS\n/////////////////////////////\nimport { useRoute, useRouter } from 'vue-router'\n\nimport * as auth from '@martyrs/src/modules/auth/views/store/auth.js'\nimport * as organizations from '@martyrs/src/modules/organizations/store/organizations.js'\n\nconst route = useRoute()\nconst router = useRouter()\n/////////////////////////////\n// CREATED\n/////////////////////////////\nconst props = defineProps({\n favorites: Array,\n});\n\nconst selectedOrganization = ref(null);\nconst publics = ref([]);\n\n// Define menu items\nconst menuItems = [\n {\n name: 'organizations',\n title: 'Organizations',\n routeName: 'Backoffice Organizations',\n icon: IconGroups\n },\n {\n name: 'community',\n title: 'Community',\n routeName: 'Backoffice Community',\n icon: IconCommunity\n },\n {\n name: 'products',\n title: 'Products',\n routeName: 'Products',\n icon: IconProducts\n },\n {\n name: 'inventory',\n title: 'Inventory',\n routeName: 'BackofficeInventoryList',\n icon: IconLeftovers\n },\n {\n name: 'orders',\n title: 'Orders',\n routeName: 'BackofficeOrdersList',\n icon: IconOrders\n },\n {\n name: 'gallery',\n title: 'Gallery',\n routeName: 'Backoffice Gallery',\n icon: IconGallery\n },\n {\n name: 'events',\n title: 'Events',\n routeName: 'BackofficeEvents Backoffice',\n icon: IconEvents\n }\n];\n\n// Define general items\nconst generalItems = [\n {\n name: 'payments',\n title: 'Payments',\n routeName: 'Payments',\n icon: IconPayments\n },\n {\n name: 'users',\n title: 'Users',\n routeName: 'Users',\n icon: null\n },\n {\n name: 'pages',\n title: 'Pages',\n routeName: 'Backoffice Pages',\n icon: null\n },\n {\n name: 'reports',\n title: 'Reports',\n routeName: 'Backoffice Reports',\n icon: null\n }\n];\n\n/////////////////////////////\n// MOUNTED\n/////////////////////////////\nonMounted(async () => {\n});\n</script>\n\n<style lang=\"scss\">\n</style>"],"names":["IconGroups","IconCommunity","IconProducts","IconLeftovers","IconOrders","IconGallery","IconEvents","IconPayments"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAgEc,aAAQ;AACtB,UAAM,SAAS,UAAS;AAQK,QAAI,IAAI;AACrB,QAAI,CAAA,CAAE;AAGtB,UAAM,YAAY;AAAA,MAChB;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,QACP,WAAW;AAAA,QACX,MAAMA;AAAAA,MACV;AAAA,MACE;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,QACP,WAAW;AAAA,QACX,MAAMC;AAAAA,MACV;AAAA,MACE;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,QACP,WAAW;AAAA,QACX,MAAMC;AAAAA,MACV;AAAA,MACE;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,QACP,WAAW;AAAA,QACX,MAAMC;AAAAA,MACV;AAAA,MACE;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,QACP,WAAW;AAAA,QACX,MAAMC;AAAAA,MACV;AAAA,MACE;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,QACP,WAAW;AAAA,QACX,MAAMC;AAAAA,MACV;AAAA,MACE;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,QACP,WAAW;AAAA,QACX,MAAMC;AAAAA,MACV;AAAA,IACA;AAGA,UAAM,eAAe;AAAA,MACnB;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,QACP,WAAW;AAAA,QACX,MAAMC;AAAAA,MACV;AAAA,MACE;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,QACP,WAAW;AAAA,QACX,MAAM;AAAA,MACV;AAAA,MACE;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,QACP,WAAW;AAAA,QACX,MAAM;AAAA,MACV;AAAA,MACE;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,QACP,WAAW;AAAA,QACX,MAAM;AAAA,MACV;AAAA,IACA;AAKA,cAAU,YAAY;AAAA,IACtB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"Sidebar.vue.js","sources":["../../../../../../../src/modules/backoffice/components/partials/Sidebar.vue"],"sourcesContent":["<template>\n <div class=\"pos-relative o-y-scroll o-x-hidden h-100\">\n <div class=\"br-b h3 h-4r pd-semi br-solid br-black-transp-10\">Backoffice</div>\n <div class=\"pd-semi\">\n <span class=\"pd-thin uppercase t-medium t-transp\">Menu</span>\n <div \n v-for=\"item in menuItems\" \n :key=\"item.name\"\n @click=\"router.push({ name: item.routeName })\" \n class=\"flex pd-thin flex-v-center cursor-pointer\">\n <component \n v-if=\"item.icon\" \n :is=\"item.icon\" \n class=\"i-regular mn-r-thin\" \n :icon=\"true\" \n :fill=\"'rgba(var(--black),0.25)'\"\n /> \n <span class=\"t-medium\">{{ item.title }}</span>\n </div>\n \n <span class=\"pd-thin d-block mn-t-medium uppercase t-medium t-transp\">General</span>\n <div \n v-for=\"item in generalItems\" \n :key=\"item.name\"\n @click=\"router.push({ name: item.routeName })\" \n class=\"flex pd-thin flex-v-center cursor-pointer\">\n <component \n v-if=\"item.icon\" \n :is=\"item.icon\" \n class=\"i-regular mn-r-thin\" \n :icon=\"true\" \n :fill=\"'rgba(var(--black),0.25)'\"\n /> \n <span class=\"t-medium\">{{ item.title }}</span>\n </div>\n </div>\n </div>\n</template>\n\n<script setup=\"props\">\n/////////////////////////////\n// COMPONENT DEPENDENCIES\n/////////////////////////////\nimport { ref, onMounted } from 'vue';\n\n// Mobile Module\nimport SelectMulti from '@martyrs/src/components/SelectMulti/SelectMulti.vue'\n\nimport IconProducts from '@martyrs/src/modules/icons/entities/IconProducts.vue'\nimport IconPayments from '@martyrs/src/modules/icons/entities/IconPayments.vue'\nimport IconEvents from '@martyrs/src/modules/icons/entities/IconEvents.vue'\nimport IconGroups from '@martyrs/src/modules/icons/entities/IconGroups.vue'\nimport IconCommunity from '@martyrs/src/modules/icons/entities/IconCommunity.vue'\nimport IconGallery from '@martyrs/src/modules/icons/entities/IconGallery.vue'\nimport IconOrders from '@martyrs/src/modules/icons/entities/IconOrders.vue'\nimport IconLeftovers from '@martyrs/src/modules/icons/entities/IconLeftovers.vue'\n/////////////////////////////\n// HELPERS\n/////////////////////////////\nimport { useRoute, useRouter } from 'vue-router'\n\nimport * as auth from '@martyrs/src/modules/auth/views/store/auth.js'\nimport * as organizations from '@martyrs/src/modules/organizations/store/organizations.js'\n\nconst route = useRoute()\nconst router = useRouter()\n/////////////////////////////\n// CREATED\n/////////////////////////////\nconst props = defineProps({\n favorites: Array,\n});\n\nconst selectedOrganization = ref(null);\nconst publics = ref([]);\n\n// Define menu items\nconst menuItems = [\n {\n name: 'organizations',\n title: 'Organizations',\n routeName: 'Backoffice Organizations',\n icon: IconGroups\n },\n {\n name: 'community',\n title: 'Community',\n routeName: 'Backoffice Community',\n icon: IconCommunity\n },\n {\n name: 'products',\n title: 'Products',\n routeName: 'Products',\n icon: IconProducts\n },\n {\n name: 'inventory',\n title: 'Inventory',\n routeName: 'BackofficeInventoryList',\n icon: IconLeftovers\n },\n {\n name: 'orders',\n title: 'Orders',\n routeName: 'BackofficeOrdersList',\n icon: IconOrders\n },\n {\n name: 'gallery',\n title: 'Gallery',\n routeName: 'Backoffice Gallery',\n icon: IconGallery\n },\n {\n name: 'applications',\n title: 'Applications',\n routeName: 'BackofficeApplications',\n icon: IconEvents\n },\n {\n name: 'events',\n title: 'Events',\n routeName: 'BackofficeEvents Backoffice',\n icon: IconEvents\n }\n];\n\n// Define general items\nconst generalItems = [\n {\n name: 'payments',\n title: 'Payments',\n routeName: 'Payments',\n icon: IconPayments\n },\n {\n name: 'users',\n title: 'Users',\n routeName: 'Users',\n icon: null\n },\n {\n name: 'pages',\n title: 'Pages',\n routeName: 'Backoffice Pages',\n icon: null\n },\n {\n name: 'reports',\n title: 'Reports',\n routeName: 'Backoffice Reports',\n icon: null\n }\n];\n\n/////////////////////////////\n// MOUNTED\n/////////////////////////////\nonMounted(async () => {\n});\n</script>\n\n<style lang=\"scss\">\n</style>"],"names":["IconGroups","IconCommunity","IconProducts","IconLeftovers","IconOrders","IconGallery","IconEvents","IconPayments"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAgEc,aAAQ;AACtB,UAAM,SAAS,UAAS;AAQK,QAAI,IAAI;AACrB,QAAI,CAAA,CAAE;AAGtB,UAAM,YAAY;AAAA,MAChB;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,QACP,WAAW;AAAA,QACX,MAAMA;AAAAA,MACV;AAAA,MACE;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,QACP,WAAW;AAAA,QACX,MAAMC;AAAAA,MACV;AAAA,MACE;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,QACP,WAAW;AAAA,QACX,MAAMC;AAAAA,MACV;AAAA,MACE;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,QACP,WAAW;AAAA,QACX,MAAMC;AAAAA,MACV;AAAA,MACE;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,QACP,WAAW;AAAA,QACX,MAAMC;AAAAA,MACV;AAAA,MACE;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,QACP,WAAW;AAAA,QACX,MAAMC;AAAAA,MACV;AAAA,MACE;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,QACP,WAAW;AAAA,QACX,MAAMC;AAAAA,MACV;AAAA,MACE;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,QACP,WAAW;AAAA,QACX,MAAMA;AAAAA,MACV;AAAA,IACA;AAGA,UAAM,eAAe;AAAA,MACnB;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,QACP,WAAW;AAAA,QACX,MAAMC;AAAAA,MACV;AAAA,MACE;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,QACP,WAAW;AAAA,QACX,MAAM;AAAA,MACV;AAAA,MACE;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,QACP,WAAW;AAAA,QACX,MAAM;AAAA,MACV;AAAA,MACE;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,QACP,WAAW;AAAA,QACX,MAAM;AAAA,MACV;AAAA,IACA;AAKA,cAAU,YAAY;AAAA,IACtB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -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 =
|
|
14
|
-
const _hoisted_2 = { class: "
|
|
15
|
-
const _hoisted_3 = { class: "
|
|
16
|
-
const _hoisted_4 = { class: "t-
|
|
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",
|
|
22
|
-
vue.createElementVNode("strong",
|
|
23
|
-
vue.createElementVNode("span",
|
|
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",
|
|
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
|
-
],
|
|
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":"
|
|
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
|
|
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 =
|
|
12
|
-
const _hoisted_2 = { class: "
|
|
13
|
-
const _hoisted_3 = { class: "
|
|
14
|
-
const _hoisted_4 = { class: "t-
|
|
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",
|
|
20
|
-
createElementVNode("strong",
|
|
21
|
-
createElementVNode("span",
|
|
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",
|
|
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
|
-
],
|
|
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":"
|
|
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//
|
|
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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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ref, computed, onMounted, nextTick, watch, createElementBlock, openBlock, createElementVNode, createVNode, Transition, withCtx, createBlock, TransitionGroup, Fragment, renderList, withDirectives, withKeys, vModelText } from "vue";
|
|
1
|
+
import { ref, computed, onMounted, nextTick, watch, onUnmounted, createElementBlock, openBlock, createElementVNode, createVNode, Transition, withCtx, createBlock, TransitionGroup, Fragment, renderList, withDirectives, withKeys, vModelText } from "vue";
|
|
2
2
|
import PlaceholderChat from "../../../icons/placeholders/PlaceholderChat.vue.js";
|
|
3
3
|
import ChatMessage from "../blocks/ChatMessage.vue.js";
|
|
4
4
|
import chatStore from "../../store/chat.store.js";
|
|
@@ -15,6 +15,8 @@ const _sfc_main = {
|
|
|
15
15
|
setup(__props) {
|
|
16
16
|
const newMessage = ref("");
|
|
17
17
|
const allMessages = ref(null);
|
|
18
|
+
const visibleMessageIds = ref(/* @__PURE__ */ new Set());
|
|
19
|
+
let messageObserver = null;
|
|
18
20
|
const messages = computed(() => chatStore.state.messages);
|
|
19
21
|
const scrollToBottom = () => {
|
|
20
22
|
if (allMessages.value) {
|
|
@@ -36,11 +38,65 @@ const _sfc_main = {
|
|
|
36
38
|
scrollToBottom();
|
|
37
39
|
}
|
|
38
40
|
};
|
|
41
|
+
const observeMessages = () => {
|
|
42
|
+
console.log("[CHAT] Setting up message observer");
|
|
43
|
+
if (messageObserver) {
|
|
44
|
+
messageObserver.disconnect();
|
|
45
|
+
}
|
|
46
|
+
messageObserver = new IntersectionObserver((entries) => {
|
|
47
|
+
console.log("[CHAT] Observer triggered for", entries.length, "entries");
|
|
48
|
+
entries.forEach((entry) => {
|
|
49
|
+
const messageId = entry.target.dataset.messageId;
|
|
50
|
+
if (entry.isIntersecting) {
|
|
51
|
+
visibleMessageIds.value.add(messageId);
|
|
52
|
+
} else {
|
|
53
|
+
visibleMessageIds.value.delete(messageId);
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
if (visibleMessageIds.value.size > 0) {
|
|
57
|
+
const unreadVisibleMessages = messages.value.filter((msg) => {
|
|
58
|
+
if (!visibleMessageIds.value.has(msg._id)) return false;
|
|
59
|
+
console.log("[CHAT] Checking if own message:", {
|
|
60
|
+
msgUserId: msg.userId,
|
|
61
|
+
currentUserId: chatStore.state.userId,
|
|
62
|
+
isEqual: msg.userId === chatStore.state.userId,
|
|
63
|
+
msgUserIdType: typeof msg.userId,
|
|
64
|
+
currentUserIdType: typeof chatStore.state.userId
|
|
65
|
+
});
|
|
66
|
+
if (msg.userId && msg.userId === chatStore.state.userId) return false;
|
|
67
|
+
if (msg.readBy?.some((r) => r.userId === chatStore.state.userId)) return false;
|
|
68
|
+
console.log("[CHAT] Message can be marked as read:", {
|
|
69
|
+
msgId: msg._id,
|
|
70
|
+
msgUserId: msg.userId,
|
|
71
|
+
currentUserId: chatStore.state.userId,
|
|
72
|
+
readBy: msg.readBy
|
|
73
|
+
});
|
|
74
|
+
return true;
|
|
75
|
+
}).map((msg) => msg._id);
|
|
76
|
+
console.log("[CHAT] Unread visible messages to mark:", unreadVisibleMessages);
|
|
77
|
+
if (unreadVisibleMessages.length > 0) {
|
|
78
|
+
console.log("[CHAT] Sending markAsRead for messages:", unreadVisibleMessages);
|
|
79
|
+
chatStore.methods.markMessagesAsRead(unreadVisibleMessages);
|
|
80
|
+
} else {
|
|
81
|
+
console.log("[CHAT] No unread messages to mark");
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}, {
|
|
85
|
+
root: allMessages.value,
|
|
86
|
+
threshold: 0.5
|
|
87
|
+
});
|
|
88
|
+
nextTick(() => {
|
|
89
|
+
const messageElements = allMessages.value?.querySelectorAll("[data-message-id]");
|
|
90
|
+
console.log("[CHAT] Found message elements to observe:", messageElements?.length);
|
|
91
|
+
messageElements?.forEach((el) => messageObserver.observe(el));
|
|
92
|
+
});
|
|
93
|
+
};
|
|
39
94
|
onMounted(() => {
|
|
40
95
|
nextTick(() => {
|
|
41
96
|
if (allMessages.value) {
|
|
42
97
|
allMessages.value.scrollTop = allMessages.value.scrollHeight;
|
|
43
98
|
}
|
|
99
|
+
observeMessages();
|
|
44
100
|
});
|
|
45
101
|
});
|
|
46
102
|
watch(messages, () => {
|
|
@@ -48,8 +104,14 @@ const _sfc_main = {
|
|
|
48
104
|
if (allMessages.value) {
|
|
49
105
|
allMessages.value.scrollTop = allMessages.value.scrollHeight;
|
|
50
106
|
}
|
|
107
|
+
observeMessages();
|
|
51
108
|
});
|
|
52
109
|
}, { deep: true });
|
|
110
|
+
onUnmounted(() => {
|
|
111
|
+
if (messageObserver) {
|
|
112
|
+
messageObserver.disconnect();
|
|
113
|
+
}
|
|
114
|
+
});
|
|
53
115
|
return (_ctx, _cache) => {
|
|
54
116
|
return openBlock(), createElementBlock("div", _hoisted_1, [
|
|
55
117
|
createElementVNode("div", {
|
|
@@ -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 <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//
|
|
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, 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":[],"mappings":"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"}
|