stream-chat-react-native-core 5.34.1-beta.3 → 5.34.1-beta.4
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/lib/commonjs/components/MessageList/utils/getReadStates.js +19 -74
- package/lib/commonjs/components/MessageList/utils/getReadStates.js.map +1 -1
- package/lib/commonjs/version.json +1 -1
- package/lib/module/components/MessageList/utils/getReadStates.js +19 -74
- package/lib/module/components/MessageList/utils/getReadStates.js.map +1 -1
- package/lib/module/version.json +1 -1
- package/lib/typescript/components/MessageList/utils/getReadStates.d.ts +1 -3
- package/lib/typescript/components/MessageList/utils/getReadStates.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/components/MessageList/utils/getReadStates.ts +25 -72
- package/src/version.json +1 -1
|
@@ -1,87 +1,32 @@
|
|
|
1
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
2
|
-
var _typeof3 = require("@babel/runtime/helpers/typeof");
|
|
3
1
|
Object.defineProperty(exports, "__esModule", {
|
|
4
2
|
value: true
|
|
5
3
|
});
|
|
6
4
|
exports.getReadStates = void 0;
|
|
7
|
-
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
8
|
-
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
9
|
-
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
|
|
10
|
-
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
11
|
-
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
12
|
-
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof3(i) ? i : i + ""; }
|
|
13
|
-
function _toPrimitive(t, r) { if ("object" != (0, _typeof2["default"])(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != (0, _typeof2["default"])(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
14
5
|
var getReadStates = function getReadStates(clientUserId, messages, read) {
|
|
15
|
-
var readData =
|
|
16
|
-
if (cur.id) {
|
|
17
|
-
acc[cur.id] = false;
|
|
18
|
-
}
|
|
19
|
-
return acc;
|
|
20
|
-
}, {});
|
|
21
|
-
var filteredMessagesReversed = messages.filter(function (msg) {
|
|
22
|
-
return msg.updated_at;
|
|
23
|
-
}).reverse();
|
|
6
|
+
var readData = {};
|
|
24
7
|
if (read) {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
if (!members.length) {
|
|
35
|
-
readData[message.id] = memberReadCount || true;
|
|
36
|
-
} else {
|
|
37
|
-
var _loop = function _loop(member) {
|
|
38
|
-
if (!member.last_read) {
|
|
39
|
-
return "continue";
|
|
40
|
-
}
|
|
41
|
-
if (message.created_at < member.last_read) {
|
|
42
|
-
var numberOfReads = Object.keys(read).length;
|
|
43
|
-
if (numberOfReads === 1) {
|
|
44
|
-
readData[message.id] = true;
|
|
45
|
-
} else {
|
|
46
|
-
var currentMessageReadData = readData[message.id];
|
|
47
|
-
readData[message.id] = typeof currentMessageReadData === 'boolean' ? memberReadCount + 1 : currentMessageReadData + 1;
|
|
48
|
-
}
|
|
49
|
-
var userIndex = members.findIndex(function (_ref) {
|
|
50
|
-
var _member$user;
|
|
51
|
-
var user = _ref.user;
|
|
52
|
-
return user.id === ((_member$user = member.user) == null ? void 0 : _member$user.id);
|
|
53
|
-
});
|
|
54
|
-
if (userIndex !== -1) {
|
|
55
|
-
members.splice(userIndex, 1);
|
|
56
|
-
if (numberOfReads > 1) {
|
|
57
|
-
memberReadCount += 1;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
};
|
|
62
|
-
var _iterator2 = _createForOfIteratorHelper(members),
|
|
63
|
-
_step2;
|
|
64
|
-
try {
|
|
65
|
-
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
66
|
-
var member = _step2.value;
|
|
67
|
-
var _ret = _loop(member);
|
|
68
|
-
if (_ret === "continue") continue;
|
|
69
|
-
}
|
|
70
|
-
} catch (err) {
|
|
71
|
-
_iterator2.e(err);
|
|
72
|
-
} finally {
|
|
73
|
-
_iterator2.f();
|
|
8
|
+
Object.values(read).forEach(function (readState) {
|
|
9
|
+
if (!readState.last_read) return;
|
|
10
|
+
var userLastReadMsgId;
|
|
11
|
+
messages.forEach(function (msg) {
|
|
12
|
+
if (msg.created_at && msg.created_at < readState.last_read) {
|
|
13
|
+
var _msg$user;
|
|
14
|
+
userLastReadMsgId = msg.id;
|
|
15
|
+
if (!readData[userLastReadMsgId]) {
|
|
16
|
+
readData[userLastReadMsgId] = 0;
|
|
74
17
|
}
|
|
75
|
-
if (
|
|
76
|
-
readData[
|
|
18
|
+
if (((_msg$user = msg.user) == null ? void 0 : _msg$user.id) !== clientUserId) {
|
|
19
|
+
readData[userLastReadMsgId] = readData[userLastReadMsgId] + 1;
|
|
77
20
|
}
|
|
78
21
|
}
|
|
22
|
+
});
|
|
23
|
+
if (userLastReadMsgId) {
|
|
24
|
+
if (!readData[userLastReadMsgId]) {
|
|
25
|
+
readData[userLastReadMsgId] = 0;
|
|
26
|
+
}
|
|
27
|
+
readData[userLastReadMsgId] = readData[userLastReadMsgId] + 1;
|
|
79
28
|
}
|
|
80
|
-
}
|
|
81
|
-
_iterator.e(err);
|
|
82
|
-
} finally {
|
|
83
|
-
_iterator.f();
|
|
84
|
-
}
|
|
29
|
+
});
|
|
85
30
|
}
|
|
86
31
|
return readData;
|
|
87
32
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["getReadStates","clientUserId","messages","read","readData","
|
|
1
|
+
{"version":3,"names":["getReadStates","clientUserId","messages","read","readData","Object","values","forEach","readState","last_read","userLastReadMsgId","msg","created_at","_msg$user","id","user","exports"],"sourceRoot":"../../../../../src","sources":["components/MessageList/utils/getReadStates.ts"],"mappings":";;;;AAKO,IAAMA,aAAa,GAAG,SAAhBA,aAAaA,CAGxBC,YAAgC,EAChCC,QAE4D,EAC5DC,IAAsD,EACnD;EACH,IAAMC,QAAgC,GAAG,CAAC,CAAC;EAE3C,IAAID,IAAI,EAAE;IAQRE,MAAM,CAACC,MAAM,CAACH,IAAI,CAAC,CAACI,OAAO,CAAC,UAACC,SAAS,EAAK;MACzC,IAAI,CAACA,SAAS,CAACC,SAAS,EAAE;MAE1B,IAAIC,iBAAqC;MAGzCR,QAAQ,CAACK,OAAO,CAAC,UAACI,GAAG,EAAK;QACxB,IAAIA,GAAG,CAACC,UAAU,IAAID,GAAG,CAACC,UAAU,GAAGJ,SAAS,CAACC,SAAS,EAAE;UAAA,IAAAI,SAAA;UAC1DH,iBAAiB,GAAGC,GAAG,CAACG,EAAE;UAG1B,IAAI,CAACV,QAAQ,CAACM,iBAAiB,CAAC,EAAE;YAChCN,QAAQ,CAACM,iBAAiB,CAAC,GAAG,CAAC;UACjC;UAGA,IAAI,EAAAG,SAAA,GAAAF,GAAG,CAACI,IAAI,qBAARF,SAAA,CAAUC,EAAE,MAAKb,YAAY,EAAE;YACjCG,QAAQ,CAACM,iBAAiB,CAAC,GAAGN,QAAQ,CAACM,iBAAiB,CAAC,GAAG,CAAC;UAC/D;QACF;MACF,CAAC,CAAC;MAGF,IAAIA,iBAAiB,EAAE;QACrB,IAAI,CAACN,QAAQ,CAACM,iBAAiB,CAAC,EAAE;UAChCN,QAAQ,CAACM,iBAAiB,CAAC,GAAG,CAAC;QACjC;QAEAN,QAAQ,CAACM,iBAAiB,CAAC,GAAGN,QAAQ,CAACM,iBAAiB,CAAC,GAAG,CAAC;MAC/D;IACF,CAAC,CAAC;EACJ;EAEA,OAAON,QAAQ;AACjB,CAAC;AAACY,OAAA,CAAAhB,aAAA,GAAAA,aAAA","ignoreList":[]}
|
|
@@ -1,87 +1,32 @@
|
|
|
1
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
2
|
-
var _typeof3 = require("@babel/runtime/helpers/typeof");
|
|
3
1
|
Object.defineProperty(exports, "__esModule", {
|
|
4
2
|
value: true
|
|
5
3
|
});
|
|
6
4
|
exports.getReadStates = void 0;
|
|
7
|
-
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
8
|
-
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
9
|
-
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
|
|
10
|
-
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
11
|
-
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
12
|
-
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof3(i) ? i : i + ""; }
|
|
13
|
-
function _toPrimitive(t, r) { if ("object" != (0, _typeof2["default"])(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != (0, _typeof2["default"])(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
14
5
|
var getReadStates = function getReadStates(clientUserId, messages, read) {
|
|
15
|
-
var readData =
|
|
16
|
-
if (cur.id) {
|
|
17
|
-
acc[cur.id] = false;
|
|
18
|
-
}
|
|
19
|
-
return acc;
|
|
20
|
-
}, {});
|
|
21
|
-
var filteredMessagesReversed = messages.filter(function (msg) {
|
|
22
|
-
return msg.updated_at;
|
|
23
|
-
}).reverse();
|
|
6
|
+
var readData = {};
|
|
24
7
|
if (read) {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
if (!members.length) {
|
|
35
|
-
readData[message.id] = memberReadCount || true;
|
|
36
|
-
} else {
|
|
37
|
-
var _loop = function _loop(member) {
|
|
38
|
-
if (!member.last_read) {
|
|
39
|
-
return "continue";
|
|
40
|
-
}
|
|
41
|
-
if (message.created_at < member.last_read) {
|
|
42
|
-
var numberOfReads = Object.keys(read).length;
|
|
43
|
-
if (numberOfReads === 1) {
|
|
44
|
-
readData[message.id] = true;
|
|
45
|
-
} else {
|
|
46
|
-
var currentMessageReadData = readData[message.id];
|
|
47
|
-
readData[message.id] = typeof currentMessageReadData === 'boolean' ? memberReadCount + 1 : currentMessageReadData + 1;
|
|
48
|
-
}
|
|
49
|
-
var userIndex = members.findIndex(function (_ref) {
|
|
50
|
-
var _member$user;
|
|
51
|
-
var user = _ref.user;
|
|
52
|
-
return user.id === ((_member$user = member.user) == null ? void 0 : _member$user.id);
|
|
53
|
-
});
|
|
54
|
-
if (userIndex !== -1) {
|
|
55
|
-
members.splice(userIndex, 1);
|
|
56
|
-
if (numberOfReads > 1) {
|
|
57
|
-
memberReadCount += 1;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
};
|
|
62
|
-
var _iterator2 = _createForOfIteratorHelper(members),
|
|
63
|
-
_step2;
|
|
64
|
-
try {
|
|
65
|
-
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
66
|
-
var member = _step2.value;
|
|
67
|
-
var _ret = _loop(member);
|
|
68
|
-
if (_ret === "continue") continue;
|
|
69
|
-
}
|
|
70
|
-
} catch (err) {
|
|
71
|
-
_iterator2.e(err);
|
|
72
|
-
} finally {
|
|
73
|
-
_iterator2.f();
|
|
8
|
+
Object.values(read).forEach(function (readState) {
|
|
9
|
+
if (!readState.last_read) return;
|
|
10
|
+
var userLastReadMsgId;
|
|
11
|
+
messages.forEach(function (msg) {
|
|
12
|
+
if (msg.created_at && msg.created_at < readState.last_read) {
|
|
13
|
+
var _msg$user;
|
|
14
|
+
userLastReadMsgId = msg.id;
|
|
15
|
+
if (!readData[userLastReadMsgId]) {
|
|
16
|
+
readData[userLastReadMsgId] = 0;
|
|
74
17
|
}
|
|
75
|
-
if (
|
|
76
|
-
readData[
|
|
18
|
+
if (((_msg$user = msg.user) == null ? void 0 : _msg$user.id) !== clientUserId) {
|
|
19
|
+
readData[userLastReadMsgId] = readData[userLastReadMsgId] + 1;
|
|
77
20
|
}
|
|
78
21
|
}
|
|
22
|
+
});
|
|
23
|
+
if (userLastReadMsgId) {
|
|
24
|
+
if (!readData[userLastReadMsgId]) {
|
|
25
|
+
readData[userLastReadMsgId] = 0;
|
|
26
|
+
}
|
|
27
|
+
readData[userLastReadMsgId] = readData[userLastReadMsgId] + 1;
|
|
79
28
|
}
|
|
80
|
-
}
|
|
81
|
-
_iterator.e(err);
|
|
82
|
-
} finally {
|
|
83
|
-
_iterator.f();
|
|
84
|
-
}
|
|
29
|
+
});
|
|
85
30
|
}
|
|
86
31
|
return readData;
|
|
87
32
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["getReadStates","clientUserId","messages","read","readData","
|
|
1
|
+
{"version":3,"names":["getReadStates","clientUserId","messages","read","readData","Object","values","forEach","readState","last_read","userLastReadMsgId","msg","created_at","_msg$user","id","user","exports"],"sourceRoot":"../../../../../src","sources":["components/MessageList/utils/getReadStates.ts"],"mappings":";;;;AAKO,IAAMA,aAAa,GAAG,SAAhBA,aAAaA,CAGxBC,YAAgC,EAChCC,QAE4D,EAC5DC,IAAsD,EACnD;EACH,IAAMC,QAAgC,GAAG,CAAC,CAAC;EAE3C,IAAID,IAAI,EAAE;IAQRE,MAAM,CAACC,MAAM,CAACH,IAAI,CAAC,CAACI,OAAO,CAAC,UAACC,SAAS,EAAK;MACzC,IAAI,CAACA,SAAS,CAACC,SAAS,EAAE;MAE1B,IAAIC,iBAAqC;MAGzCR,QAAQ,CAACK,OAAO,CAAC,UAACI,GAAG,EAAK;QACxB,IAAIA,GAAG,CAACC,UAAU,IAAID,GAAG,CAACC,UAAU,GAAGJ,SAAS,CAACC,SAAS,EAAE;UAAA,IAAAI,SAAA;UAC1DH,iBAAiB,GAAGC,GAAG,CAACG,EAAE;UAG1B,IAAI,CAACV,QAAQ,CAACM,iBAAiB,CAAC,EAAE;YAChCN,QAAQ,CAACM,iBAAiB,CAAC,GAAG,CAAC;UACjC;UAGA,IAAI,EAAAG,SAAA,GAAAF,GAAG,CAACI,IAAI,qBAARF,SAAA,CAAUC,EAAE,MAAKb,YAAY,EAAE;YACjCG,QAAQ,CAACM,iBAAiB,CAAC,GAAGN,QAAQ,CAACM,iBAAiB,CAAC,GAAG,CAAC;UAC/D;QACF;MACF,CAAC,CAAC;MAGF,IAAIA,iBAAiB,EAAE;QACrB,IAAI,CAACN,QAAQ,CAACM,iBAAiB,CAAC,EAAE;UAChCN,QAAQ,CAACM,iBAAiB,CAAC,GAAG,CAAC;QACjC;QAEAN,QAAQ,CAACM,iBAAiB,CAAC,GAAGN,QAAQ,CAACM,iBAAiB,CAAC,GAAG,CAAC;MAC/D;IACF,CAAC,CAAC;EACJ;EAEA,OAAON,QAAQ;AACjB,CAAC;AAACY,OAAA,CAAAhB,aAAA,GAAAA,aAAA","ignoreList":[]}
|
package/lib/module/version.json
CHANGED
|
@@ -10,7 +10,5 @@ export declare const getReadStates: <StreamChatGenerics extends DefaultStreamCha
|
|
|
10
10
|
first_unread_message_id?: string | undefined;
|
|
11
11
|
last_read_message_id?: string | undefined;
|
|
12
12
|
};
|
|
13
|
-
} | undefined) =>
|
|
14
|
-
[key: string]: number | boolean;
|
|
15
|
-
};
|
|
13
|
+
} | undefined) => Record<string, number>;
|
|
16
14
|
//# sourceMappingURL=getReadStates.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getReadStates.d.ts","sourceRoot":"","sources":["../../../../../src/components/MessageList/utils/getReadStates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iDAAiD,CAAC;AAC3F,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,2EAA2E,CAAC;AAClI,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,+CAA+C,CAAC;AACxF,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAEtE,eAAO,MAAM,aAAa,mGAGV,MAAM,GAAG,SAAS
|
|
1
|
+
{"version":3,"file":"getReadStates.d.ts","sourceRoot":"","sources":["../../../../../src/components/MessageList/utils/getReadStates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iDAAiD,CAAC;AAC3F,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,2EAA2E,CAAC;AAClI,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,+CAA+C,CAAC;AACxF,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAEtE,eAAO,MAAM,aAAa,mGAGV,MAAM,GAAG,SAAS;;;;;;;;wCAkDjC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "stream-chat-react-native-core",
|
|
3
3
|
"description": "The official React Native and Expo components for Stream Chat, a service for building chat applications",
|
|
4
|
-
"version": "5.34.1-beta.
|
|
4
|
+
"version": "5.34.1-beta.4",
|
|
5
5
|
"author": {
|
|
6
6
|
"company": "Stream.io Inc",
|
|
7
7
|
"name": "Stream.io Inc"
|
|
@@ -12,28 +12,9 @@ export const getReadStates = <
|
|
|
12
12
|
| ThreadContextValue<StreamChatGenerics>['threadMessages'],
|
|
13
13
|
read?: ChannelContextValue<StreamChatGenerics>['read'],
|
|
14
14
|
) => {
|
|
15
|
-
const readData
|
|
16
|
-
if (cur.id) {
|
|
17
|
-
acc[cur.id] = false;
|
|
18
|
-
}
|
|
19
|
-
return acc;
|
|
20
|
-
}, {} as { [key: string]: boolean | number });
|
|
21
|
-
|
|
22
|
-
const filteredMessagesReversed = messages.filter((msg) => msg.updated_at).reverse();
|
|
15
|
+
const readData: Record<string, number> = {};
|
|
23
16
|
|
|
24
17
|
if (read) {
|
|
25
|
-
/**
|
|
26
|
-
* Channel read state is stored by user and we only care about users who aren't the client
|
|
27
|
-
*/
|
|
28
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
29
|
-
const { [clientUserId ?? '']: _ignore, ...filteredRead } = read;
|
|
30
|
-
const members = Object.values(filteredRead);
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* Track number of members who have read previous messages
|
|
34
|
-
*/
|
|
35
|
-
let memberReadCount = 0;
|
|
36
|
-
|
|
37
18
|
/**
|
|
38
19
|
* Array is in reverse order so newest message is at 0,
|
|
39
20
|
* we find the index of the first message that is older
|
|
@@ -41,65 +22,37 @@ export const getReadStates = <
|
|
|
41
22
|
* if there are no newer messages, the first message is
|
|
42
23
|
* last read message.
|
|
43
24
|
*/
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
* true until at least one other user reads a message.
|
|
58
|
-
*/
|
|
59
|
-
if (!member.last_read) {
|
|
60
|
-
continue;
|
|
25
|
+
Object.values(read).forEach((readState) => {
|
|
26
|
+
if (!readState.last_read) return;
|
|
27
|
+
|
|
28
|
+
let userLastReadMsgId: string | undefined;
|
|
29
|
+
|
|
30
|
+
// loop messages sent by current user and add read data for other users in channel
|
|
31
|
+
messages.forEach((msg) => {
|
|
32
|
+
if (msg.created_at && msg.created_at < readState.last_read) {
|
|
33
|
+
userLastReadMsgId = msg.id;
|
|
34
|
+
|
|
35
|
+
// if true, save other user's read data for all messages they've read
|
|
36
|
+
if (!readData[userLastReadMsgId]) {
|
|
37
|
+
readData[userLastReadMsgId] = 0;
|
|
61
38
|
}
|
|
62
39
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
* the user from the list of users being checked
|
|
67
|
-
*/
|
|
68
|
-
if (message.created_at < member.last_read) {
|
|
69
|
-
/**
|
|
70
|
-
* if this is a direct message the length will be 1
|
|
71
|
-
* as we already deleted the current user from the object
|
|
72
|
-
*/
|
|
73
|
-
const numberOfReads = Object.keys(read).length;
|
|
74
|
-
if (numberOfReads === 1) {
|
|
75
|
-
readData[message.id] = true;
|
|
76
|
-
} else {
|
|
77
|
-
const currentMessageReadData = readData[message.id];
|
|
78
|
-
readData[message.id] =
|
|
79
|
-
typeof currentMessageReadData === 'boolean'
|
|
80
|
-
? memberReadCount + 1
|
|
81
|
-
: currentMessageReadData + 1;
|
|
82
|
-
}
|
|
83
|
-
const userIndex = members.findIndex(({ user }) => user.id === member.user?.id);
|
|
84
|
-
if (userIndex !== -1) {
|
|
85
|
-
members.splice(userIndex, 1);
|
|
86
|
-
if (numberOfReads > 1) {
|
|
87
|
-
memberReadCount += 1;
|
|
88
|
-
}
|
|
89
|
-
}
|
|
40
|
+
// Only increment read count if the message is not sent by the current user
|
|
41
|
+
if (msg.user?.id !== clientUserId) {
|
|
42
|
+
readData[userLastReadMsgId] = readData[userLastReadMsgId] + 1;
|
|
90
43
|
}
|
|
91
44
|
}
|
|
45
|
+
});
|
|
92
46
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
*/
|
|
98
|
-
if (readData[message.id] === false) {
|
|
99
|
-
readData[message.id] = memberReadCount || false;
|
|
47
|
+
// if true, only save read data for other user's last read message
|
|
48
|
+
if (userLastReadMsgId) {
|
|
49
|
+
if (!readData[userLastReadMsgId]) {
|
|
50
|
+
readData[userLastReadMsgId] = 0;
|
|
100
51
|
}
|
|
52
|
+
|
|
53
|
+
readData[userLastReadMsgId] = readData[userLastReadMsgId] + 1;
|
|
101
54
|
}
|
|
102
|
-
}
|
|
55
|
+
});
|
|
103
56
|
}
|
|
104
57
|
|
|
105
58
|
return readData;
|
package/src/version.json
CHANGED