@ozdao/martyrs 0.2.428 → 0.2.430
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/community.server.js +1 -1
- package/dist/community.server.mjs +1 -1
- package/dist/events.server.js +1 -1
- package/dist/events.server.mjs +1 -1
- package/dist/gallery.server.js +1 -1
- package/dist/gallery.server.mjs +1 -1
- package/dist/{globals.logger-Deb_8o7C.mjs → globals.cache-BT6q3vOf.mjs} +0 -33
- package/dist/{globals.logger-BuG0pN80.js → globals.cache-CwWvNGFQ.js} +0 -33
- package/dist/globals.logger-BdjooLaD.js +34 -0
- package/dist/globals.logger-DusiFsxN.mjs +35 -0
- package/dist/martyrs/src/modules/chats/components/pages/ChatPage.vue.cjs +13 -3
- package/dist/martyrs/src/modules/chats/components/pages/ChatPage.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/chats/components/pages/ChatPage.vue.js +14 -4
- package/dist/martyrs/src/modules/chats/components/pages/ChatPage.vue.js.map +1 -1
- package/dist/martyrs/src/modules/chats/components/sections/ChatWindow.vue.cjs +24 -6
- 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 +25 -7
- package/dist/martyrs/src/modules/chats/components/sections/ChatWindow.vue.js.map +1 -1
- package/dist/martyrs/src/modules/chats/store/chat.store.cjs +7 -8
- package/dist/martyrs/src/modules/chats/store/chat.store.cjs.map +1 -1
- package/dist/martyrs/src/modules/chats/store/chat.store.js +7 -8
- package/dist/martyrs/src/modules/chats/store/chat.store.js.map +1 -1
- package/dist/martyrs/src/modules/globals/views/classes/globals.websocket.cjs +6 -8
- package/dist/martyrs/src/modules/globals/views/classes/globals.websocket.cjs.map +1 -1
- package/dist/martyrs/src/modules/globals/views/classes/globals.websocket.js +6 -8
- package/dist/martyrs/src/modules/globals/views/classes/globals.websocket.js.map +1 -1
- package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.cjs +11 -8
- package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.js +11 -8
- package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.js.map +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/Header.vue.cjs +5 -5
- 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 +5 -5
- package/dist/martyrs/src/modules/globals/views/components/partials/Header.vue.js.map +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/Navigation.vue.cjs +17 -9
- package/dist/martyrs/src/modules/globals/views/components/partials/Navigation.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/Navigation.vue.js +17 -9
- package/dist/martyrs/src/modules/globals/views/components/partials/Navigation.vue.js.map +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/Sidebar.vue.cjs +16 -4
- 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 +16 -4
- package/dist/martyrs/src/modules/globals/views/components/partials/Sidebar.vue.js.map +1 -1
- package/dist/martyrs/src/modules/marketplace/views/components/sections/SectionMenu.vue.cjs +1 -1
- package/dist/martyrs/src/modules/marketplace/views/components/sections/SectionMenu.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/marketplace/views/components/sections/SectionMenu.vue.js +1 -1
- package/dist/martyrs/src/modules/marketplace/views/components/sections/SectionMenu.vue.js.map +1 -1
- package/dist/martyrs/src/modules/notifications/components/elements/NotificationBadge.vue.cjs +7 -1
- package/dist/martyrs/src/modules/notifications/components/elements/NotificationBadge.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/notifications/components/elements/NotificationBadge.vue.js +7 -1
- package/dist/martyrs/src/modules/notifications/components/elements/NotificationBadge.vue.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/blocks/CardOrderBackoffice.vue.cjs +112 -0
- package/dist/martyrs/src/modules/orders/components/blocks/CardOrderBackoffice.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/orders/components/blocks/CardOrderBackoffice.vue.js +112 -0
- package/dist/martyrs/src/modules/orders/components/blocks/CardOrderBackoffice.vue.js.map +1 -0
- package/dist/martyrs/src/modules/orders/components/blocks/CardOrderItem.vue.cjs +2 -2
- package/dist/martyrs/src/modules/orders/components/blocks/CardOrderItem.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/orders/components/blocks/CardOrderItem.vue.js +2 -2
- package/dist/martyrs/src/modules/orders/components/blocks/CardOrderItem.vue.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/blocks/CardOrderUser.vue.cjs +18 -12
- package/dist/martyrs/src/modules/orders/components/blocks/CardOrderUser.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/orders/components/blocks/CardOrderUser.vue.js +18 -12
- package/dist/martyrs/src/modules/orders/components/blocks/CardOrderUser.vue.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.cjs +200 -92
- package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.js +213 -105
- package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.cjs +9 -12
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.js +10 -13
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.cjs +14 -6
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.js +23 -15
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/Orders.vue.cjs +16 -99
- package/dist/martyrs/src/modules/orders/components/pages/Orders.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/Orders.vue.js +16 -99
- package/dist/martyrs/src/modules/orders/components/pages/Orders.vue.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/partials/ShopCart.vue.cjs +2 -2
- package/dist/martyrs/src/modules/orders/components/partials/ShopCart.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/orders/components/partials/ShopCart.vue.js +2 -2
- package/dist/martyrs/src/modules/orders/components/partials/ShopCart.vue.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.cjs +99 -99
- 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 +102 -102
- 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 +14 -8
- package/dist/martyrs/src/modules/orders/components/sections/FormPayment.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/FormPayment.vue.js +15 -9
- package/dist/martyrs/src/modules/orders/components/sections/FormPayment.vue.js.map +1 -1
- package/dist/martyrs/src/modules/orders/store/orders.cjs +51 -0
- package/dist/martyrs/src/modules/orders/store/orders.cjs.map +1 -1
- package/dist/martyrs/src/modules/orders/store/orders.js +51 -0
- package/dist/martyrs/src/modules/orders/store/orders.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.cjs +59 -56
- 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 +63 -60
- package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/store/organizations.cjs +0 -2
- package/dist/martyrs/src/modules/organizations/store/organizations.cjs.map +1 -1
- package/dist/martyrs/src/modules/organizations/store/organizations.js +1 -3
- package/dist/martyrs/src/modules/organizations/store/organizations.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Products.vue.cjs +4 -3
- 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 +5 -4
- package/dist/martyrs/src/modules/products/components/pages/Products.vue.js.map +1 -1
- package/dist/martyrs/src/modules/spots/components/blocks/CardSpot.vue.cjs +15 -12
- 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 +15 -12
- package/dist/martyrs/src/modules/spots/components/blocks/CardSpot.vue.js.map +1 -1
- package/dist/martyrs/src/modules/spots/store/spots.cjs +2 -2
- package/dist/martyrs/src/modules/spots/store/spots.cjs.map +1 -1
- package/dist/martyrs/src/modules/spots/store/spots.js +2 -2
- package/dist/martyrs/src/modules/spots/store/spots.js.map +1 -1
- package/dist/martyrs.css +1 -1
- package/dist/orders.server.js +11 -4
- package/dist/orders.server.mjs +10 -3
- package/dist/organizations.server.js +33 -30
- package/dist/organizations.server.mjs +33 -30
- package/dist/products.server.js +1 -1
- package/dist/products.server.mjs +1 -1
- package/dist/{queryProcessor-CCmHM0yi.mjs → queryProcessor-CWnMIe2U.mjs} +4 -1
- package/dist/{queryProcessor-CwQakZkT.js → queryProcessor-D6GuKfTV.js} +4 -1
- package/dist/rents.server.js +4 -3
- package/dist/rents.server.mjs +3 -2
- package/dist/spots.server.js +41 -12
- package/dist/spots.server.mjs +41 -12
- package/dist/style.css +57 -65
- package/dist/wallet.server.js +1 -1
- package/dist/wallet.server.mjs +1 -1
- package/package.json +1 -1
- package/src/modules/chats/components/pages/ChatPage.vue +18 -23
- package/src/modules/chats/components/sections/ChatWindow.vue +55 -38
- package/src/modules/chats/store/chat.store.js +20 -21
- package/src/modules/globals/controllers/utils/queryProcessor.js +2 -1
- package/src/modules/globals/views/classes/globals.websocket.js +10 -11
- package/src/modules/globals/views/components/layouts/Client.vue +21 -15
- package/src/modules/globals/views/components/partials/Header.vue +3 -4
- package/src/modules/globals/views/components/partials/Navigation.vue +17 -19
- package/src/modules/globals/views/components/partials/Sidebar.vue +20 -9
- package/src/modules/marketplace/views/components/sections/SectionMenu.vue +1 -1
- package/src/modules/notifications/components/elements/NotificationBadge.vue +7 -0
- package/src/modules/orders/components/blocks/CardOrderBackoffice.vue +106 -0
- package/src/modules/orders/components/blocks/CardOrderItem.vue +2 -2
- package/src/modules/orders/components/blocks/CardOrderUser.vue +16 -9
- package/src/modules/orders/components/pages/OrderBackoffice.vue +146 -77
- package/src/modules/orders/components/pages/OrderCreate.vue +7 -12
- package/src/modules/orders/components/pages/OrderCreateBackoffice.vue +15 -3
- package/src/modules/orders/components/pages/Orders.vue +10 -93
- package/src/modules/orders/components/partials/ShopCart.vue +2 -2
- package/src/modules/orders/components/sections/FormDelivery.vue +35 -43
- package/src/modules/orders/components/sections/FormPayment.vue +17 -7
- package/src/modules/orders/controllers/orders.controller.js +12 -1
- package/src/modules/orders/store/orders.js +65 -0
- package/src/modules/organizations/components/pages/Organization.vue +48 -47
- package/src/modules/organizations/controllers/organizations.controller.js +57 -47
- package/src/modules/organizations/store/organizations.js +6 -6
- package/src/modules/products/components/pages/Products.vue +4 -3
- package/src/modules/spots/components/blocks/CardSpot.vue +8 -7
- package/src/modules/spots/controllers/spots.controller.js +47 -14
- package/src/modules/spots/routes/spots.routes.js +2 -3
- package/src/modules/spots/store/spots.js +4 -4
- package/src/styles/base/shadow_transitions_hover_refactor.scss +1 -0
- package/src/modules/landing/components/sections/HowToBuyWDR.vue +0 -130
- package/src/modules/landing/components/sections/WhatIsWDRSection.vue +0 -116
package/dist/community.server.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
const _commonjsHelpers = require("./_commonjsHelpers-DHfMLFPC.js");
|
|
3
3
|
const require$$0 = require("mongoose");
|
|
4
|
-
const queryProcessor$2 = require("./queryProcessor-
|
|
4
|
+
const queryProcessor$2 = require("./queryProcessor-D6GuKfTV.js");
|
|
5
5
|
require("util");
|
|
6
6
|
const require$$0$1 = require("uuid");
|
|
7
7
|
const index = require("./index-DQqZReAr.js");
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { g as getDefaultExportFromCjs } from "./_commonjsHelpers-CUmg6egw.mjs";
|
|
2
2
|
import require$$0 from "mongoose";
|
|
3
|
-
import { r as requireQueryProcessor$2 } from "./queryProcessor-
|
|
3
|
+
import { r as requireQueryProcessor$2 } from "./queryProcessor-CWnMIe2U.mjs";
|
|
4
4
|
import "util";
|
|
5
5
|
import require$$0$1 from "uuid";
|
|
6
6
|
import { r as requireMiddlewares } from "./index-DICZTQ-1.mjs";
|
package/dist/events.server.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
const _commonjsHelpers = require("./_commonjsHelpers-DHfMLFPC.js");
|
|
3
3
|
const require$$0 = require("mongoose");
|
|
4
|
-
const queryProcessor$1 = require("./queryProcessor-
|
|
4
|
+
const queryProcessor$1 = require("./queryProcessor-D6GuKfTV.js");
|
|
5
5
|
const metadata_schema = require("./metadata.schema-CUkLXZ2f.js");
|
|
6
6
|
const require$$0$1 = require("stripe");
|
|
7
7
|
const tickets_controller = require("./tickets.controller-CcxkRHlX.js");
|
package/dist/events.server.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { g as getDefaultExportFromCjs } from "./_commonjsHelpers-CUmg6egw.mjs";
|
|
2
2
|
import require$$0 from "mongoose";
|
|
3
|
-
import { r as requireQueryProcessor$1 } from "./queryProcessor-
|
|
3
|
+
import { r as requireQueryProcessor$1 } from "./queryProcessor-CWnMIe2U.mjs";
|
|
4
4
|
import { a as requireSeoFriendlyUrl, r as requireMetadata_schema } from "./metadata.schema--tle-GU8.mjs";
|
|
5
5
|
import require$$0$1 from "stripe";
|
|
6
6
|
import { r as requireTickets_controller } from "./tickets.controller-Bbxe7kaF.mjs";
|
package/dist/gallery.server.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
const _commonjsHelpers = require("./_commonjsHelpers-DHfMLFPC.js");
|
|
3
3
|
const require$$0 = require("path");
|
|
4
|
-
const queryProcessor = require("./queryProcessor-
|
|
4
|
+
const queryProcessor = require("./queryProcessor-D6GuKfTV.js");
|
|
5
5
|
const index = require("./index-DQqZReAr.js");
|
|
6
6
|
const common_schema = require("./common.schema-O0w_rDyC.js");
|
|
7
7
|
const engagement_schema = require("./engagement.schema-DAiXsvh1.js");
|
package/dist/gallery.server.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { g as getDefaultExportFromCjs } from "./_commonjsHelpers-CUmg6egw.mjs";
|
|
2
2
|
import require$$0 from "path";
|
|
3
|
-
import { r as requireQueryProcessor } from "./queryProcessor-
|
|
3
|
+
import { r as requireQueryProcessor } from "./queryProcessor-CWnMIe2U.mjs";
|
|
4
4
|
import { r as requireMiddlewares } from "./index-DICZTQ-1.mjs";
|
|
5
5
|
import { r as requireCommon_schema } from "./common.schema-C2m3O1XY.mjs";
|
|
6
6
|
import { r as requireEngagement_schema } from "./engagement.schema-DnDD7Bn3.mjs";
|
|
@@ -135,39 +135,6 @@ function requireGlobals_cache() {
|
|
|
135
135
|
globals_cache = Cache;
|
|
136
136
|
return globals_cache;
|
|
137
137
|
}
|
|
138
|
-
var globals_logger;
|
|
139
|
-
var hasRequiredGlobals_logger;
|
|
140
|
-
function requireGlobals_logger() {
|
|
141
|
-
if (hasRequiredGlobals_logger) return globals_logger;
|
|
142
|
-
hasRequiredGlobals_logger = 1;
|
|
143
|
-
class Logger {
|
|
144
|
-
constructor(db) {
|
|
145
|
-
this.LogModel = db.log;
|
|
146
|
-
}
|
|
147
|
-
async log(level, message) {
|
|
148
|
-
const logEntry = new this.LogModel({
|
|
149
|
-
level,
|
|
150
|
-
message
|
|
151
|
-
});
|
|
152
|
-
try {
|
|
153
|
-
await logEntry.save();
|
|
154
|
-
console.info(`Logged: ${level} - ${message}`);
|
|
155
|
-
} catch (err) {
|
|
156
|
-
console.error("Logging error:", err);
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
// Удобные методы для различных уровней логирования
|
|
160
|
-
async info(message) {
|
|
161
|
-
await this.log("info", message);
|
|
162
|
-
}
|
|
163
|
-
async error(message) {
|
|
164
|
-
await this.log("error", message);
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
globals_logger = Logger;
|
|
168
|
-
return globals_logger;
|
|
169
|
-
}
|
|
170
138
|
export {
|
|
171
|
-
requireGlobals_logger as a,
|
|
172
139
|
requireGlobals_cache as r
|
|
173
140
|
};
|
|
@@ -136,37 +136,4 @@ function requireGlobals_cache() {
|
|
|
136
136
|
globals_cache = Cache;
|
|
137
137
|
return globals_cache;
|
|
138
138
|
}
|
|
139
|
-
var globals_logger;
|
|
140
|
-
var hasRequiredGlobals_logger;
|
|
141
|
-
function requireGlobals_logger() {
|
|
142
|
-
if (hasRequiredGlobals_logger) return globals_logger;
|
|
143
|
-
hasRequiredGlobals_logger = 1;
|
|
144
|
-
class Logger {
|
|
145
|
-
constructor(db) {
|
|
146
|
-
this.LogModel = db.log;
|
|
147
|
-
}
|
|
148
|
-
async log(level, message) {
|
|
149
|
-
const logEntry = new this.LogModel({
|
|
150
|
-
level,
|
|
151
|
-
message
|
|
152
|
-
});
|
|
153
|
-
try {
|
|
154
|
-
await logEntry.save();
|
|
155
|
-
console.info(`Logged: ${level} - ${message}`);
|
|
156
|
-
} catch (err) {
|
|
157
|
-
console.error("Logging error:", err);
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
// Удобные методы для различных уровней логирования
|
|
161
|
-
async info(message) {
|
|
162
|
-
await this.log("info", message);
|
|
163
|
-
}
|
|
164
|
-
async error(message) {
|
|
165
|
-
await this.log("error", message);
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
globals_logger = Logger;
|
|
169
|
-
return globals_logger;
|
|
170
|
-
}
|
|
171
139
|
exports.requireGlobals_cache = requireGlobals_cache;
|
|
172
|
-
exports.requireGlobals_logger = requireGlobals_logger;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var globals_logger;
|
|
3
|
+
var hasRequiredGlobals_logger;
|
|
4
|
+
function requireGlobals_logger() {
|
|
5
|
+
if (hasRequiredGlobals_logger) return globals_logger;
|
|
6
|
+
hasRequiredGlobals_logger = 1;
|
|
7
|
+
class Logger {
|
|
8
|
+
constructor(db) {
|
|
9
|
+
this.LogModel = db.log;
|
|
10
|
+
}
|
|
11
|
+
async log(level, message) {
|
|
12
|
+
const logEntry = new this.LogModel({
|
|
13
|
+
level,
|
|
14
|
+
message
|
|
15
|
+
});
|
|
16
|
+
try {
|
|
17
|
+
await logEntry.save();
|
|
18
|
+
console.info(`Logged: ${level} - ${message}`);
|
|
19
|
+
} catch (err) {
|
|
20
|
+
console.error("Logging error:", err);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
// Удобные методы для различных уровней логирования
|
|
24
|
+
async info(message) {
|
|
25
|
+
await this.log("info", message);
|
|
26
|
+
}
|
|
27
|
+
async error(message) {
|
|
28
|
+
await this.log("error", message);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
globals_logger = Logger;
|
|
32
|
+
return globals_logger;
|
|
33
|
+
}
|
|
34
|
+
exports.requireGlobals_logger = requireGlobals_logger;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
var globals_logger;
|
|
2
|
+
var hasRequiredGlobals_logger;
|
|
3
|
+
function requireGlobals_logger() {
|
|
4
|
+
if (hasRequiredGlobals_logger) return globals_logger;
|
|
5
|
+
hasRequiredGlobals_logger = 1;
|
|
6
|
+
class Logger {
|
|
7
|
+
constructor(db) {
|
|
8
|
+
this.LogModel = db.log;
|
|
9
|
+
}
|
|
10
|
+
async log(level, message) {
|
|
11
|
+
const logEntry = new this.LogModel({
|
|
12
|
+
level,
|
|
13
|
+
message
|
|
14
|
+
});
|
|
15
|
+
try {
|
|
16
|
+
await logEntry.save();
|
|
17
|
+
console.info(`Logged: ${level} - ${message}`);
|
|
18
|
+
} catch (err) {
|
|
19
|
+
console.error("Logging error:", err);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
// Удобные методы для различных уровней логирования
|
|
23
|
+
async info(message) {
|
|
24
|
+
await this.log("info", message);
|
|
25
|
+
}
|
|
26
|
+
async error(message) {
|
|
27
|
+
await this.log("error", message);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
globals_logger = Logger;
|
|
31
|
+
return globals_logger;
|
|
32
|
+
}
|
|
33
|
+
export {
|
|
34
|
+
requireGlobals_logger as r
|
|
35
|
+
};
|
|
@@ -4,6 +4,7 @@ const vue = require("vue");
|
|
|
4
4
|
const ChatWindow = require("../sections/ChatWindow.vue.cjs");
|
|
5
5
|
const chat_store = require("../../store/chat.store.cjs");
|
|
6
6
|
;/* empty css */
|
|
7
|
+
const _hoisted_1 = { class: "chat-main" };
|
|
7
8
|
const _sfc_main = {
|
|
8
9
|
__name: "ChatPage",
|
|
9
10
|
props: {
|
|
@@ -11,6 +12,10 @@ const _sfc_main = {
|
|
|
11
12
|
type: String,
|
|
12
13
|
required: true
|
|
13
14
|
},
|
|
15
|
+
user: {
|
|
16
|
+
type: String,
|
|
17
|
+
required: true
|
|
18
|
+
},
|
|
14
19
|
chatID: {
|
|
15
20
|
type: String,
|
|
16
21
|
required: true
|
|
@@ -20,11 +25,16 @@ const _sfc_main = {
|
|
|
20
25
|
const props = __props;
|
|
21
26
|
vue.onMounted(async () => {
|
|
22
27
|
chat_store.default.methods.setUsername(props.username || "user");
|
|
23
|
-
await chat_store.default.methods.connectWebSocket();
|
|
24
|
-
chat_store.default.methods.setCurrentChat(props.chatID);
|
|
28
|
+
await chat_store.default.methods.connectWebSocket(props.user);
|
|
29
|
+
await chat_store.default.methods.setCurrentChat(props.chatID);
|
|
30
|
+
});
|
|
31
|
+
vue.onUnmounted(() => {
|
|
32
|
+
chat_store.default.methods.disconnectChat();
|
|
25
33
|
});
|
|
26
34
|
return (_ctx, _cache) => {
|
|
27
|
-
return vue.openBlock(), vue.
|
|
35
|
+
return vue.openBlock(), vue.createElementBlock("main", _hoisted_1, [
|
|
36
|
+
vue.createVNode(ChatWindow.default)
|
|
37
|
+
]);
|
|
28
38
|
};
|
|
29
39
|
}
|
|
30
40
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatPage.vue.cjs","sources":["../../../../../../../src/modules/chats/components/pages/ChatPage.vue"],"sourcesContent":["<template>\n
|
|
1
|
+
{"version":3,"file":"ChatPage.vue.cjs","sources":["../../../../../../../src/modules/chats/components/pages/ChatPage.vue"],"sourcesContent":["<template>\n <main class=\"chat-main\">\n <ChatWindow />\n </main>\n</template>\n\n<script setup>\nimport { ref, onMounted, onUnmounted } from 'vue';\nimport ChatWindow from '../sections/ChatWindow.vue';\nimport chatStore from '../../store/chat.store.js';\n\nconst props = defineProps({\n username: {\n type: String,\n required: true\n },\n user: {\n type: String,\n required: true\n },\n chatID: {\n type: String,\n required: true\n },\n});\n\nconst selectChat = (chatId) => {\n chatStore.methods.setCurrentChat(chatId);\n};\n\nonMounted(async () => {\n chatStore.methods.setUsername(props.username || 'user'); // Установка имени пользователя\n await chatStore.methods.connectWebSocket(props.user); // Подключение к WebSocket\n await chatStore.methods.setCurrentChat(props.chatID);\n});\n\nonUnmounted(() => {\n // Clean up when the component is unmounted (e.g., navigating away)\n chatStore.methods.disconnectChat();\n});\n</script>\n\n<style>\n/* Стили остаются без изменений */\n</style>"],"names":["onMounted","chatStore","onUnmounted"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAWA,UAAM,QAAQ;AAmBdA,QAAAA,UAAU,YAAY;AACpBC,iBAAS,QAAC,QAAQ,YAAY,MAAM,YAAY,MAAM;AACtD,YAAMA,WAAS,QAAC,QAAQ,iBAAiB,MAAM,IAAI;AACnD,YAAMA,WAAS,QAAC,QAAQ,eAAe,MAAM,MAAM;AAAA,IACrD,CAAC;AAEDC,QAAAA,YAAY,MAAM;AAEhBD,iBAAS,QAAC,QAAQ,eAAgB;AAAA,IACpC,CAAC;;;;;;;;;"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { onMounted,
|
|
1
|
+
import { onMounted, onUnmounted, createElementBlock, openBlock, createVNode } from "vue";
|
|
2
2
|
import _sfc_main$1 from "../sections/ChatWindow.vue.js";
|
|
3
3
|
import chatStore from "../../store/chat.store.js";
|
|
4
4
|
/* empty css */
|
|
5
|
+
const _hoisted_1 = { class: "chat-main" };
|
|
5
6
|
const _sfc_main = {
|
|
6
7
|
__name: "ChatPage",
|
|
7
8
|
props: {
|
|
@@ -9,6 +10,10 @@ const _sfc_main = {
|
|
|
9
10
|
type: String,
|
|
10
11
|
required: true
|
|
11
12
|
},
|
|
13
|
+
user: {
|
|
14
|
+
type: String,
|
|
15
|
+
required: true
|
|
16
|
+
},
|
|
12
17
|
chatID: {
|
|
13
18
|
type: String,
|
|
14
19
|
required: true
|
|
@@ -18,11 +23,16 @@ const _sfc_main = {
|
|
|
18
23
|
const props = __props;
|
|
19
24
|
onMounted(async () => {
|
|
20
25
|
chatStore.methods.setUsername(props.username || "user");
|
|
21
|
-
await chatStore.methods.connectWebSocket();
|
|
22
|
-
chatStore.methods.setCurrentChat(props.chatID);
|
|
26
|
+
await chatStore.methods.connectWebSocket(props.user);
|
|
27
|
+
await chatStore.methods.setCurrentChat(props.chatID);
|
|
28
|
+
});
|
|
29
|
+
onUnmounted(() => {
|
|
30
|
+
chatStore.methods.disconnectChat();
|
|
23
31
|
});
|
|
24
32
|
return (_ctx, _cache) => {
|
|
25
|
-
return openBlock(),
|
|
33
|
+
return openBlock(), createElementBlock("main", _hoisted_1, [
|
|
34
|
+
createVNode(_sfc_main$1)
|
|
35
|
+
]);
|
|
26
36
|
};
|
|
27
37
|
}
|
|
28
38
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatPage.vue.js","sources":["../../../../../../../src/modules/chats/components/pages/ChatPage.vue"],"sourcesContent":["<template>\n
|
|
1
|
+
{"version":3,"file":"ChatPage.vue.js","sources":["../../../../../../../src/modules/chats/components/pages/ChatPage.vue"],"sourcesContent":["<template>\n <main class=\"chat-main\">\n <ChatWindow />\n </main>\n</template>\n\n<script setup>\nimport { ref, onMounted, onUnmounted } from 'vue';\nimport ChatWindow from '../sections/ChatWindow.vue';\nimport chatStore from '../../store/chat.store.js';\n\nconst props = defineProps({\n username: {\n type: String,\n required: true\n },\n user: {\n type: String,\n required: true\n },\n chatID: {\n type: String,\n required: true\n },\n});\n\nconst selectChat = (chatId) => {\n chatStore.methods.setCurrentChat(chatId);\n};\n\nonMounted(async () => {\n chatStore.methods.setUsername(props.username || 'user'); // Установка имени пользователя\n await chatStore.methods.connectWebSocket(props.user); // Подключение к WebSocket\n await chatStore.methods.setCurrentChat(props.chatID);\n});\n\nonUnmounted(() => {\n // Clean up when the component is unmounted (e.g., navigating away)\n chatStore.methods.disconnectChat();\n});\n</script>\n\n<style>\n/* Стили остаются без изменений */\n</style>"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAWA,UAAM,QAAQ;AAmBd,cAAU,YAAY;AACpB,gBAAU,QAAQ,YAAY,MAAM,YAAY,MAAM;AACtD,YAAM,UAAU,QAAQ,iBAAiB,MAAM,IAAI;AACnD,YAAM,UAAU,QAAQ,eAAe,MAAM,MAAM;AAAA,IACrD,CAAC;AAED,gBAAY,MAAM;AAEhB,gBAAU,QAAQ,eAAgB;AAAA,IACpC,CAAC;;;;;;;;"}
|
|
@@ -19,7 +19,12 @@ const _sfc_main = {
|
|
|
19
19
|
const newMessage = vue.ref("");
|
|
20
20
|
const allMessages = vue.ref(null);
|
|
21
21
|
const messages = vue.computed(() => chat_store.default.state.messages);
|
|
22
|
-
const
|
|
22
|
+
const scrollToBottom = () => {
|
|
23
|
+
if (allMessages.value) {
|
|
24
|
+
allMessages.value.scrollTop = allMessages.value.scrollHeight;
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
const sendMessage = async () => {
|
|
23
28
|
if (newMessage.value) {
|
|
24
29
|
const message = {
|
|
25
30
|
text: newMessage.value,
|
|
@@ -27,13 +32,25 @@ const _sfc_main = {
|
|
|
27
32
|
chatId: chat_store.default.state.currentChatId
|
|
28
33
|
};
|
|
29
34
|
chat_store.default.methods.addMessage(message);
|
|
30
|
-
console.log(allMessages.value.lastElementChild.offsetHeight);
|
|
31
|
-
allMessages.value.scrollTop = allMessages.value.lastElementChild.offsetHeight;
|
|
32
35
|
newMessage.value = "";
|
|
36
|
+
await vue.nextTick();
|
|
37
|
+
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
38
|
+
scrollToBottom();
|
|
33
39
|
}
|
|
34
40
|
};
|
|
35
|
-
vue.
|
|
36
|
-
|
|
41
|
+
vue.onMounted(() => {
|
|
42
|
+
vue.nextTick(() => {
|
|
43
|
+
if (allMessages.value) {
|
|
44
|
+
allMessages.value.scrollTop = allMessages.value.scrollHeight;
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
vue.watch(messages, () => {
|
|
49
|
+
vue.nextTick(() => {
|
|
50
|
+
if (allMessages.value) {
|
|
51
|
+
allMessages.value.scrollTop = allMessages.value.scrollHeight;
|
|
52
|
+
}
|
|
53
|
+
});
|
|
37
54
|
}, { deep: true });
|
|
38
55
|
return (_ctx, _cache) => {
|
|
39
56
|
return vue.openBlock(), vue.createElementBlock("div", _hoisted_1, [
|
|
@@ -56,7 +73,8 @@ const _sfc_main = {
|
|
|
56
73
|
key: 1,
|
|
57
74
|
name: "list",
|
|
58
75
|
tag: "ul",
|
|
59
|
-
class: "w-100 o-hidden"
|
|
76
|
+
class: "w-100 o-hidden",
|
|
77
|
+
onAfterEnter: scrollToBottom
|
|
60
78
|
}, {
|
|
61
79
|
default: vue.withCtx(() => [
|
|
62
80
|
(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(messages.value, (message) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatWindow.vue.cjs","sources":["../../../../../../../src/modules/chats/components/sections/ChatWindow.vue"],"sourcesContent":["<template>\n <div class=\"bg-white radius-semi bg-white o-hidden pos-relative\">\n
|
|
1
|
+
{"version":3,"file":"ChatWindow.vue.cjs","sources":["../../../../../../../src/modules/chats/components/sections/ChatWindow.vue"],"sourcesContent":["<template>\n <div class=\"bg-white radius-semi bg-white o-hidden pos-relative\">\n <div ref=\"allMessages\" class=\"chat-messages o-scroll h-max-20r\">\n <div class=\"pos-relative h-min-20r flex-justify-end flex flex-column br-b br-solid br-black-transp-10\">\n <transition name=\"scaleIn\" mode=\"out-in\">\n <div v-if=\"messages.length < 1\" class=\"flex-center pd-small t-center w-100 h-100 flex-column flex pos-absolute\">\n <PlaceholderChat class=\"radius-100 mn-b-thin\"/>\n <h4 class='mn-b-thin'>Here you can view your chat history</h4>\n <p>Feel free to ask if you have any questions.</p>\n </div>\n\n <TransitionGroup v-else name=\"list\" tag=\"ul\" class=\"w-100 o-hidden\" @after-enter=\"scrollToBottom\">\n <ChatMessage\n v-for=\"message in messages\"\n :key=\"message._id\"\n :message=\"message\"\n />\n </TransitionGroup>\n </transition>\n </div>\n </div>\n\n <div class=\"flex-nowrap flex-v-center flex bg-white w-100 radius-big pd-small\">\n <IconAdd class=\"mn-r-thin t-transp i-regular\" />\n <input class=\"\" placeholder=\"Enter your message\" type=\"text\" v-model=\"newMessage\" @keyup.enter=\"sendMessage\" />\n </div>\n </div>\n</template>\n\n<script setup>\nimport { ref, computed, watch, onMounted, nextTick } from 'vue';\n\nimport IconAdd from '@martyrs/src/modules/icons/navigation/IconAdd.vue'\nimport PlaceholderChat from '@martyrs/src/modules/icons/placeholders/PlaceholderChat.vue'\n\nimport ChatMessage from '../blocks/ChatMessage.vue';\nimport chatStore from '../../store/chat.store.js';\n\nconst newMessage = ref('');\nconst allMessages = ref(null);\n\n// Вычисляемые свойства\nconst messages = computed(() => chatStore.state.messages);\n\n// Функция прокрутки вниз\nconst scrollToBottom = () => {\n if (allMessages.value) {\n allMessages.value.scrollTop = allMessages.value.scrollHeight;\n }\n};\n\n// Функция для отправки сообщения\nconst sendMessage = async () => {\n if (newMessage.value) {\n const message = {\n text: newMessage.value,\n username: chatStore.state.username,\n chatId: chatStore.state.currentChatId\n };\n\n chatStore.methods.addMessage(message);\n newMessage.value = '';\n\n // Ждем, пока все анимации и рендеринг завершатся\n await nextTick();\n await new Promise(resolve => setTimeout(resolve, 100)); // Небольшая задержка для анимаций\n scrollToBottom();\n }\n};\n\n// Прокрутка вниз при монтировании\nonMounted(() => {\n nextTick(() => {\n if (allMessages.value) {\n allMessages.value.scrollTop = allMessages.value.scrollHeight;\n }\n });\n});\n\n// Прокрутка вниз при изменении сообщений\nwatch(messages, () => {\n nextTick(() => {\n if (allMessages.value) {\n allMessages.value.scrollTop = allMessages.value.scrollHeight;\n }\n });\n}, { deep: true });\n\n// Обработчик после завершения анимации входа нового элемента\n</script>\n\n<style>\n.list-enter-active,\n.list-leave-active {\n transition: all 0.5s ease;\n}\n.list-enter-from,\n.list-leave-to {\n opacity: 0;\n transform: translateX(30px);\n}\n</style>"],"names":["ref","computed","chatStore","nextTick","onMounted","watch"],"mappings":";;;;;;;;;;;;;;;;;;AAsCA,UAAM,aAAaA,IAAG,IAAC,EAAE;AACzB,UAAM,cAAcA,IAAG,IAAC,IAAI;AAG5B,UAAM,WAAWC,IAAAA,SAAS,MAAMC,mBAAU,MAAM,QAAQ;AAGxD,UAAM,iBAAiB,MAAM;AAC3B,UAAI,YAAY,OAAO;AACrB,oBAAY,MAAM,YAAY,YAAY,MAAM;AAAA,MACpD;AAAA,IACA;AAGA,UAAM,cAAc,YAAY;AAC9B,UAAI,WAAW,OAAO;AACpB,cAAM,UAAU;AAAA,UACd,MAAM,WAAW;AAAA,UACjB,UAAUA,WAAAA,QAAU,MAAM;AAAA,UAC1B,QAAQA,WAAS,QAAC,MAAM;AAAA,QACzB;AAEDA,2BAAU,QAAQ,WAAW,OAAO;AACpC,mBAAW,QAAQ;AAGnB,cAAMC,aAAU;AAChB,cAAM,IAAI,QAAQ,aAAW,WAAW,SAAS,GAAG,CAAC;AACrD,uBAAgB;AAAA,MACpB;AAAA,IACA;AAGAC,QAAAA,UAAU,MAAM;AACdD,UAAAA,SAAS,MAAM;AACb,YAAI,YAAY,OAAO;AACrB,sBAAY,MAAM,YAAY,YAAY,MAAM;AAAA,QACtD;AAAA,MACA,CAAG;AAAA,IACH,CAAC;AAGDE,QAAK,MAAC,UAAU,MAAM;AACpBF,UAAAA,SAAS,MAAM;AACb,YAAI,YAAY,OAAO;AACrB,sBAAY,MAAM,YAAY,YAAY,MAAM;AAAA,QACtD;AAAA,MACA,CAAG;AAAA,IACH,GAAG,EAAE,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ref, computed, watch, createElementBlock, openBlock, createElementVNode, createVNode, Transition, withCtx, createBlock, TransitionGroup, Fragment, renderList, withDirectives, withKeys, vModelText } from "vue";
|
|
1
|
+
import { ref, computed, onMounted, nextTick, watch, createElementBlock, openBlock, createElementVNode, createVNode, Transition, withCtx, createBlock, TransitionGroup, Fragment, renderList, withDirectives, withKeys, vModelText } from "vue";
|
|
2
2
|
import _sfc_main$1 from "../../../icons/navigation/IconAdd.vue.js";
|
|
3
3
|
import PlaceholderChat from "../../../icons/placeholders/PlaceholderChat.vue.js";
|
|
4
4
|
import ChatMessage from "../blocks/ChatMessage.vue.js";
|
|
@@ -17,7 +17,12 @@ const _sfc_main = {
|
|
|
17
17
|
const newMessage = ref("");
|
|
18
18
|
const allMessages = ref(null);
|
|
19
19
|
const messages = computed(() => chatStore.state.messages);
|
|
20
|
-
const
|
|
20
|
+
const scrollToBottom = () => {
|
|
21
|
+
if (allMessages.value) {
|
|
22
|
+
allMessages.value.scrollTop = allMessages.value.scrollHeight;
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
const sendMessage = async () => {
|
|
21
26
|
if (newMessage.value) {
|
|
22
27
|
const message = {
|
|
23
28
|
text: newMessage.value,
|
|
@@ -25,13 +30,25 @@ const _sfc_main = {
|
|
|
25
30
|
chatId: chatStore.state.currentChatId
|
|
26
31
|
};
|
|
27
32
|
chatStore.methods.addMessage(message);
|
|
28
|
-
console.log(allMessages.value.lastElementChild.offsetHeight);
|
|
29
|
-
allMessages.value.scrollTop = allMessages.value.lastElementChild.offsetHeight;
|
|
30
33
|
newMessage.value = "";
|
|
34
|
+
await nextTick();
|
|
35
|
+
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
36
|
+
scrollToBottom();
|
|
31
37
|
}
|
|
32
38
|
};
|
|
33
|
-
|
|
34
|
-
|
|
39
|
+
onMounted(() => {
|
|
40
|
+
nextTick(() => {
|
|
41
|
+
if (allMessages.value) {
|
|
42
|
+
allMessages.value.scrollTop = allMessages.value.scrollHeight;
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
watch(messages, () => {
|
|
47
|
+
nextTick(() => {
|
|
48
|
+
if (allMessages.value) {
|
|
49
|
+
allMessages.value.scrollTop = allMessages.value.scrollHeight;
|
|
50
|
+
}
|
|
51
|
+
});
|
|
35
52
|
}, { deep: true });
|
|
36
53
|
return (_ctx, _cache) => {
|
|
37
54
|
return openBlock(), createElementBlock("div", _hoisted_1, [
|
|
@@ -54,7 +71,8 @@ const _sfc_main = {
|
|
|
54
71
|
key: 1,
|
|
55
72
|
name: "list",
|
|
56
73
|
tag: "ul",
|
|
57
|
-
class: "w-100 o-hidden"
|
|
74
|
+
class: "w-100 o-hidden",
|
|
75
|
+
onAfterEnter: scrollToBottom
|
|
58
76
|
}, {
|
|
59
77
|
default: withCtx(() => [
|
|
60
78
|
(openBlock(true), createElementBlock(Fragment, null, renderList(messages.value, (message) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatWindow.vue.js","sources":["../../../../../../../src/modules/chats/components/sections/ChatWindow.vue"],"sourcesContent":["<template>\n <div class=\"bg-white radius-semi bg-white o-hidden pos-relative\">\n
|
|
1
|
+
{"version":3,"file":"ChatWindow.vue.js","sources":["../../../../../../../src/modules/chats/components/sections/ChatWindow.vue"],"sourcesContent":["<template>\n <div class=\"bg-white radius-semi bg-white o-hidden pos-relative\">\n <div ref=\"allMessages\" class=\"chat-messages o-scroll h-max-20r\">\n <div class=\"pos-relative h-min-20r flex-justify-end flex flex-column br-b br-solid br-black-transp-10\">\n <transition name=\"scaleIn\" mode=\"out-in\">\n <div v-if=\"messages.length < 1\" class=\"flex-center pd-small t-center w-100 h-100 flex-column flex pos-absolute\">\n <PlaceholderChat class=\"radius-100 mn-b-thin\"/>\n <h4 class='mn-b-thin'>Here you can view your chat history</h4>\n <p>Feel free to ask if you have any questions.</p>\n </div>\n\n <TransitionGroup v-else name=\"list\" tag=\"ul\" class=\"w-100 o-hidden\" @after-enter=\"scrollToBottom\">\n <ChatMessage\n v-for=\"message in messages\"\n :key=\"message._id\"\n :message=\"message\"\n />\n </TransitionGroup>\n </transition>\n </div>\n </div>\n\n <div class=\"flex-nowrap flex-v-center flex bg-white w-100 radius-big pd-small\">\n <IconAdd class=\"mn-r-thin t-transp i-regular\" />\n <input class=\"\" placeholder=\"Enter your message\" type=\"text\" v-model=\"newMessage\" @keyup.enter=\"sendMessage\" />\n </div>\n </div>\n</template>\n\n<script setup>\nimport { ref, computed, watch, onMounted, nextTick } from 'vue';\n\nimport IconAdd from '@martyrs/src/modules/icons/navigation/IconAdd.vue'\nimport PlaceholderChat from '@martyrs/src/modules/icons/placeholders/PlaceholderChat.vue'\n\nimport ChatMessage from '../blocks/ChatMessage.vue';\nimport chatStore from '../../store/chat.store.js';\n\nconst newMessage = ref('');\nconst allMessages = ref(null);\n\n// Вычисляемые свойства\nconst messages = computed(() => chatStore.state.messages);\n\n// Функция прокрутки вниз\nconst scrollToBottom = () => {\n if (allMessages.value) {\n allMessages.value.scrollTop = allMessages.value.scrollHeight;\n }\n};\n\n// Функция для отправки сообщения\nconst sendMessage = async () => {\n if (newMessage.value) {\n const message = {\n text: newMessage.value,\n username: chatStore.state.username,\n chatId: chatStore.state.currentChatId\n };\n\n chatStore.methods.addMessage(message);\n newMessage.value = '';\n\n // Ждем, пока все анимации и рендеринг завершатся\n await nextTick();\n await new Promise(resolve => setTimeout(resolve, 100)); // Небольшая задержка для анимаций\n scrollToBottom();\n }\n};\n\n// Прокрутка вниз при монтировании\nonMounted(() => {\n nextTick(() => {\n if (allMessages.value) {\n allMessages.value.scrollTop = allMessages.value.scrollHeight;\n }\n });\n});\n\n// Прокрутка вниз при изменении сообщений\nwatch(messages, () => {\n nextTick(() => {\n if (allMessages.value) {\n allMessages.value.scrollTop = allMessages.value.scrollHeight;\n }\n });\n}, { deep: true });\n\n// Обработчик после завершения анимации входа нового элемента\n</script>\n\n<style>\n.list-enter-active,\n.list-leave-active {\n transition: all 0.5s ease;\n}\n.list-enter-from,\n.list-leave-to {\n opacity: 0;\n transform: translateX(30px);\n}\n</style>"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAsCA,UAAM,aAAa,IAAI,EAAE;AACzB,UAAM,cAAc,IAAI,IAAI;AAG5B,UAAM,WAAW,SAAS,MAAM,UAAU,MAAM,QAAQ;AAGxD,UAAM,iBAAiB,MAAM;AAC3B,UAAI,YAAY,OAAO;AACrB,oBAAY,MAAM,YAAY,YAAY,MAAM;AAAA,MACpD;AAAA,IACA;AAGA,UAAM,cAAc,YAAY;AAC9B,UAAI,WAAW,OAAO;AACpB,cAAM,UAAU;AAAA,UACd,MAAM,WAAW;AAAA,UACjB,UAAU,UAAU,MAAM;AAAA,UAC1B,QAAQ,UAAU,MAAM;AAAA,QACzB;AAED,kBAAU,QAAQ,WAAW,OAAO;AACpC,mBAAW,QAAQ;AAGnB,cAAM,SAAU;AAChB,cAAM,IAAI,QAAQ,aAAW,WAAW,SAAS,GAAG,CAAC;AACrD,uBAAgB;AAAA,MACpB;AAAA,IACA;AAGA,cAAU,MAAM;AACd,eAAS,MAAM;AACb,YAAI,YAAY,OAAO;AACrB,sBAAY,MAAM,YAAY,YAAY,MAAM;AAAA,QACtD;AAAA,MACA,CAAG;AAAA,IACH,CAAC;AAGD,UAAM,UAAU,MAAM;AACpB,eAAS,MAAM;AACb,YAAI,YAAY,OAAO;AACrB,sBAAY,MAAM,YAAY,YAAY,MAAM;AAAA,QACtD;AAAA,MACA,CAAG;AAAA,IACH,GAAG,EAAE,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -8,13 +8,12 @@ const state = vue.reactive({
|
|
|
8
8
|
username: null
|
|
9
9
|
});
|
|
10
10
|
const methods = {
|
|
11
|
-
async connectWebSocket() {
|
|
12
|
-
console.log("process env");
|
|
13
|
-
console.log(process.env.WSS_URL);
|
|
11
|
+
async connectWebSocket(user) {
|
|
14
12
|
try {
|
|
15
|
-
|
|
16
|
-
await globals_websocket.default.connect(
|
|
17
|
-
globals_websocket.default.
|
|
13
|
+
console.log("connect", user);
|
|
14
|
+
await globals_websocket.default.connect(user);
|
|
15
|
+
globals_websocket.default.removeModuleListeners("chat");
|
|
16
|
+
const listenerId = globals_websocket.default.addEventListener("message", (data) => {
|
|
18
17
|
if (data.chatId === state.currentChatId) {
|
|
19
18
|
state.messages.push(data);
|
|
20
19
|
}
|
|
@@ -29,8 +28,8 @@ const methods = {
|
|
|
29
28
|
console.log(process.env.API_URL);
|
|
30
29
|
state.messages = messages;
|
|
31
30
|
},
|
|
32
|
-
addMessage(message) {
|
|
33
|
-
globals_websocket.default.send(message);
|
|
31
|
+
async addMessage(message) {
|
|
32
|
+
await globals_websocket.default.send(message);
|
|
34
33
|
},
|
|
35
34
|
async setCurrentChat(chatId) {
|
|
36
35
|
state.currentChatId = chatId;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat.store.cjs","sources":["../../../../../../src/modules/chats/store/chat.store.js"],"sourcesContent":["import { reactive, readonly } from 'vue';\nimport globalWebSocket from '@martyrs/src/modules/globals/views/classes/globals.websocket.js';\n\nconst state = reactive({\n messages: [],\n currentChatId: null,\n username: null\n});\n\nconst methods = {\n async connectWebSocket() {\n
|
|
1
|
+
{"version":3,"file":"chat.store.cjs","sources":["../../../../../../src/modules/chats/store/chat.store.js"],"sourcesContent":["import { reactive, readonly } from 'vue';\nimport globalWebSocket from '@martyrs/src/modules/globals/views/classes/globals.websocket.js';\n\nconst state = reactive({\n messages: [],\n currentChatId: null,\n username: null\n});\n\nconst methods = {\n async connectWebSocket(user) {\n // Use the global WebSocket instance\n try {\n console.log('connect', user);\n await globalWebSocket.connect(user);\n\n // Remove any existing 'message' listeners for the 'chat' module to avoid duplicates\n globalWebSocket.removeModuleListeners('chat');\n\n // Register chat message event listener\n const listenerId = globalWebSocket.addEventListener('message', (data) => {\n if (data.chatId === state.currentChatId) {\n state.messages.push(data);\n }\n }, { module: 'chat' });\n\n return globalWebSocket;\n } catch (error) {\n console.error('Failed to connect to WebSocket:', error);\n throw error;\n }\n },\n\n setMessages(messages) {\n console.log(process.env.API_URL);\n state.messages = messages;\n },\n\n async addMessage(message) {\n await globalWebSocket.send(message);\n },\n\n async setCurrentChat(chatId) {\n state.currentChatId = chatId;\n state.messages = []; // Clear current messages when changing chat\n\n // Send join chat message through the WebSocket\n globalWebSocket.send({ type: 'joinChat', chatId });\n\n // Fetch chat history\n const response = await fetch(`/messages/${chatId}`);\n const messages = await response.json();\n\n methods.setMessages(messages);\n },\n\n setUsername(username) {\n state.username = username;\n },\n\n disconnectChat() {\n // Remove all chat-specific listeners when leaving chat page\n globalWebSocket.removeModuleListeners('chat');\n // Optionally disconnect the WebSocket if no longer needed\n // globalWebSocket.disconnect(); // Uncomment if you want to fully disconnect\n }\n};\n\nexport default {\n state: readonly(state),\n methods\n};"],"names":["reactive","globalWebSocket","readonly"],"mappings":";;;;AAGA,MAAM,QAAQA,IAAAA,SAAS;AAAA,EACrB,UAAU,CAAE;AAAA,EACZ,eAAe;AAAA,EACf,UAAU;AACZ,CAAC;AAED,MAAM,UAAU;AAAA,EACd,MAAM,iBAAiB,MAAM;AAE3B,QAAI;AACF,cAAQ,IAAI,WAAW,IAAI;AAC3B,YAAMC,kBAAe,QAAC,QAAQ,IAAI;AAGlCA,wBAAe,QAAC,sBAAsB,MAAM;AAG5C,YAAM,aAAaA,kBAAe,QAAC,iBAAiB,WAAW,CAAC,SAAS;AACvE,YAAI,KAAK,WAAW,MAAM,eAAe;AACvC,gBAAM,SAAS,KAAK,IAAI;AAAA,QAClC;AAAA,MACA,GAAS,EAAE,QAAQ,QAAQ;AAErB,aAAOA,kBAAe;AAAA,IACvB,SAAQ,OAAO;AACd,cAAQ,MAAM,mCAAmC,KAAK;AACtD,YAAM;AAAA,IACZ;AAAA,EACG;AAAA,EAED,YAAY,UAAU;AACpB,YAAQ,IAAI,QAAQ,IAAI,OAAO;AAC/B,UAAM,WAAW;AAAA,EAClB;AAAA,EAED,MAAM,WAAW,SAAS;AACxB,UAAMA,kBAAe,QAAC,KAAK,OAAO;AAAA,EACnC;AAAA,EAED,MAAM,eAAe,QAAQ;AAC3B,UAAM,gBAAgB;AACtB,UAAM,WAAW;AAGjBA,sBAAAA,QAAgB,KAAK,EAAE,MAAM,YAAY,OAAM,CAAE;AAGjD,UAAM,WAAW,MAAM,MAAM,aAAa,MAAM,EAAE;AAClD,UAAM,WAAW,MAAM,SAAS,KAAM;AAEtC,YAAQ,YAAY,QAAQ;AAAA,EAC7B;AAAA,EAED,YAAY,UAAU;AACpB,UAAM,WAAW;AAAA,EAClB;AAAA,EAED,iBAAiB;AAEfA,sBAAe,QAAC,sBAAsB,MAAM;AAAA,EAGhD;AACA;AAEA,MAAe,YAAA;AAAA,EACb,OAAOC,IAAQ,SAAC,KAAK;AAAA,EACrB;AACF;;"}
|
|
@@ -6,13 +6,12 @@ const state = reactive({
|
|
|
6
6
|
username: null
|
|
7
7
|
});
|
|
8
8
|
const methods = {
|
|
9
|
-
async connectWebSocket() {
|
|
10
|
-
console.log("process env");
|
|
11
|
-
console.log(process.env.WSS_URL);
|
|
9
|
+
async connectWebSocket(user) {
|
|
12
10
|
try {
|
|
13
|
-
|
|
14
|
-
await globalWebSocket.connect(
|
|
15
|
-
globalWebSocket.
|
|
11
|
+
console.log("connect", user);
|
|
12
|
+
await globalWebSocket.connect(user);
|
|
13
|
+
globalWebSocket.removeModuleListeners("chat");
|
|
14
|
+
const listenerId = globalWebSocket.addEventListener("message", (data) => {
|
|
16
15
|
if (data.chatId === state.currentChatId) {
|
|
17
16
|
state.messages.push(data);
|
|
18
17
|
}
|
|
@@ -27,8 +26,8 @@ const methods = {
|
|
|
27
26
|
console.log(process.env.API_URL);
|
|
28
27
|
state.messages = messages;
|
|
29
28
|
},
|
|
30
|
-
addMessage(message) {
|
|
31
|
-
globalWebSocket.send(message);
|
|
29
|
+
async addMessage(message) {
|
|
30
|
+
await globalWebSocket.send(message);
|
|
32
31
|
},
|
|
33
32
|
async setCurrentChat(chatId) {
|
|
34
33
|
state.currentChatId = chatId;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat.store.js","sources":["../../../../../../src/modules/chats/store/chat.store.js"],"sourcesContent":["import { reactive, readonly } from 'vue';\nimport globalWebSocket from '@martyrs/src/modules/globals/views/classes/globals.websocket.js';\n\nconst state = reactive({\n messages: [],\n currentChatId: null,\n username: null\n});\n\nconst methods = {\n async connectWebSocket() {\n
|
|
1
|
+
{"version":3,"file":"chat.store.js","sources":["../../../../../../src/modules/chats/store/chat.store.js"],"sourcesContent":["import { reactive, readonly } from 'vue';\nimport globalWebSocket from '@martyrs/src/modules/globals/views/classes/globals.websocket.js';\n\nconst state = reactive({\n messages: [],\n currentChatId: null,\n username: null\n});\n\nconst methods = {\n async connectWebSocket(user) {\n // Use the global WebSocket instance\n try {\n console.log('connect', user);\n await globalWebSocket.connect(user);\n\n // Remove any existing 'message' listeners for the 'chat' module to avoid duplicates\n globalWebSocket.removeModuleListeners('chat');\n\n // Register chat message event listener\n const listenerId = globalWebSocket.addEventListener('message', (data) => {\n if (data.chatId === state.currentChatId) {\n state.messages.push(data);\n }\n }, { module: 'chat' });\n\n return globalWebSocket;\n } catch (error) {\n console.error('Failed to connect to WebSocket:', error);\n throw error;\n }\n },\n\n setMessages(messages) {\n console.log(process.env.API_URL);\n state.messages = messages;\n },\n\n async addMessage(message) {\n await globalWebSocket.send(message);\n },\n\n async setCurrentChat(chatId) {\n state.currentChatId = chatId;\n state.messages = []; // Clear current messages when changing chat\n\n // Send join chat message through the WebSocket\n globalWebSocket.send({ type: 'joinChat', chatId });\n\n // Fetch chat history\n const response = await fetch(`/messages/${chatId}`);\n const messages = await response.json();\n\n methods.setMessages(messages);\n },\n\n setUsername(username) {\n state.username = username;\n },\n\n disconnectChat() {\n // Remove all chat-specific listeners when leaving chat page\n globalWebSocket.removeModuleListeners('chat');\n // Optionally disconnect the WebSocket if no longer needed\n // globalWebSocket.disconnect(); // Uncomment if you want to fully disconnect\n }\n};\n\nexport default {\n state: readonly(state),\n methods\n};"],"names":[],"mappings":";;AAGA,MAAM,QAAQ,SAAS;AAAA,EACrB,UAAU,CAAE;AAAA,EACZ,eAAe;AAAA,EACf,UAAU;AACZ,CAAC;AAED,MAAM,UAAU;AAAA,EACd,MAAM,iBAAiB,MAAM;AAE3B,QAAI;AACF,cAAQ,IAAI,WAAW,IAAI;AAC3B,YAAM,gBAAgB,QAAQ,IAAI;AAGlC,sBAAgB,sBAAsB,MAAM;AAG5C,YAAM,aAAa,gBAAgB,iBAAiB,WAAW,CAAC,SAAS;AACvE,YAAI,KAAK,WAAW,MAAM,eAAe;AACvC,gBAAM,SAAS,KAAK,IAAI;AAAA,QAClC;AAAA,MACA,GAAS,EAAE,QAAQ,QAAQ;AAErB,aAAO;AAAA,IACR,SAAQ,OAAO;AACd,cAAQ,MAAM,mCAAmC,KAAK;AACtD,YAAM;AAAA,IACZ;AAAA,EACG;AAAA,EAED,YAAY,UAAU;AACpB,YAAQ,IAAI,QAAQ,IAAI,OAAO;AAC/B,UAAM,WAAW;AAAA,EAClB;AAAA,EAED,MAAM,WAAW,SAAS;AACxB,UAAM,gBAAgB,KAAK,OAAO;AAAA,EACnC;AAAA,EAED,MAAM,eAAe,QAAQ;AAC3B,UAAM,gBAAgB;AACtB,UAAM,WAAW;AAGjB,oBAAgB,KAAK,EAAE,MAAM,YAAY,OAAM,CAAE;AAGjD,UAAM,WAAW,MAAM,MAAM,aAAa,MAAM,EAAE;AAClD,UAAM,WAAW,MAAM,SAAS,KAAM;AAEtC,YAAQ,YAAY,QAAQ;AAAA,EAC7B;AAAA,EAED,YAAY,UAAU;AACpB,UAAM,WAAW;AAAA,EAClB;AAAA,EAED,iBAAiB;AAEf,oBAAgB,sBAAsB,MAAM;AAAA,EAGhD;AACA;AAEA,MAAe,YAAA;AAAA,EACb,OAAO,SAAS,KAAK;AAAA,EACrB;AACF;"}
|
|
@@ -45,16 +45,14 @@ class GlobalWebSocket {
|
|
|
45
45
|
if (typeof window === "undefined") {
|
|
46
46
|
return Promise.resolve(false);
|
|
47
47
|
}
|
|
48
|
-
if (this.isConnected && this.userId === userId && this.socket) {
|
|
49
|
-
return Promise.resolve(this.socket);
|
|
50
|
-
}
|
|
51
48
|
this.userId = userId;
|
|
52
|
-
if (this.
|
|
53
|
-
return this.
|
|
49
|
+
if (this.isConnected && this.socket && this.socket.readyState === WebSocket.OPEN) {
|
|
50
|
+
return Promise.resolve(this.socket);
|
|
54
51
|
}
|
|
52
|
+
this.connectPromise = null;
|
|
55
53
|
this.connectPromise = new Promise((resolve, reject) => {
|
|
56
54
|
this.disconnect();
|
|
57
|
-
const wsUrl = userId ? `${this.baseUrl}?userId=${userId}` : this.baseUrl;
|
|
55
|
+
const wsUrl = userId ? `${this.baseUrl}?userId=${encodeURIComponent(userId)}` : this.baseUrl;
|
|
58
56
|
this.socket = new WebSocket(wsUrl);
|
|
59
57
|
this.socket.onopen = () => {
|
|
60
58
|
this._handleOpen();
|
|
@@ -105,14 +103,14 @@ class GlobalWebSocket {
|
|
|
105
103
|
* @param {Object|String} data - Data to send
|
|
106
104
|
* @returns {Boolean} Success status
|
|
107
105
|
*/
|
|
108
|
-
send(data) {
|
|
106
|
+
async send(data) {
|
|
109
107
|
if (!this.socket || this.socket.readyState !== WebSocket.OPEN) {
|
|
110
108
|
console.error("Cannot send message: WebSocket is not connected");
|
|
111
109
|
return false;
|
|
112
110
|
}
|
|
113
111
|
try {
|
|
114
112
|
const message = typeof data === "string" ? data : JSON.stringify(data);
|
|
115
|
-
this.socket.send(message);
|
|
113
|
+
await this.socket.send(message);
|
|
116
114
|
return true;
|
|
117
115
|
} catch (error) {
|
|
118
116
|
console.error("Error sending WebSocket message:", error);
|