stream-chat-react-native-core 5.42.2-beta.1 → 5.42.2
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/ChannelPreview/ChannelPreview.js +2 -6
- package/lib/commonjs/components/ChannelPreview/ChannelPreview.js.map +1 -1
- package/lib/commonjs/components/ChannelPreview/hooks/useChannelPreviewData.js +67 -17
- package/lib/commonjs/components/ChannelPreview/hooks/useChannelPreviewData.js.map +1 -1
- package/lib/commonjs/version.json +1 -1
- package/lib/module/components/ChannelPreview/ChannelPreview.js +2 -6
- package/lib/module/components/ChannelPreview/ChannelPreview.js.map +1 -1
- package/lib/module/components/ChannelPreview/hooks/useChannelPreviewData.js +67 -17
- package/lib/module/components/ChannelPreview/hooks/useChannelPreviewData.js.map +1 -1
- package/lib/module/version.json +1 -1
- package/lib/typescript/components/ChannelPreview/ChannelPreview.d.ts.map +1 -1
- package/lib/typescript/components/ChannelPreview/hooks/useChannelPreviewData.d.ts +3 -3
- package/lib/typescript/components/ChannelPreview/hooks/useChannelPreviewData.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/components/ChannelPreview/ChannelPreview.tsx +6 -6
- package/src/components/ChannelPreview/__tests__/ChannelPreview.test.tsx +19 -20
- package/src/components/ChannelPreview/hooks/useChannelPreviewData.ts +61 -8
- package/src/version.json +1 -1
|
@@ -5,7 +5,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
exports.ChannelPreview = void 0;
|
|
6
6
|
var _react = _interopRequireDefault(require("react"));
|
|
7
7
|
var _useChannelPreviewData = require("./hooks/useChannelPreviewData");
|
|
8
|
-
var _useLatestMessagePreview = require("./hooks/useLatestMessagePreview");
|
|
9
8
|
var _ChannelsContext = require("../../contexts/channelsContext/ChannelsContext");
|
|
10
9
|
var _ChatContext = require("../../contexts/chatContext/ChatContext");
|
|
11
10
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
@@ -19,16 +18,13 @@ var ChannelPreview = function ChannelPreview(props) {
|
|
|
19
18
|
var _useChatContext = (0, _ChatContext.useChatContext)(),
|
|
20
19
|
contextClient = _useChatContext.client;
|
|
21
20
|
var _useChannelsContext = (0, _ChannelsContext.useChannelsContext)(),
|
|
22
|
-
contextForceUpdate = _useChannelsContext.forceUpdate,
|
|
23
21
|
contextPreview = _useChannelsContext.Preview;
|
|
24
22
|
var client = propClient || contextClient;
|
|
25
|
-
var forceUpdate = propForceUpdate || contextForceUpdate;
|
|
26
23
|
var Preview = propPreview || contextPreview;
|
|
27
|
-
var _useChannelPreviewDat = (0, _useChannelPreviewData.useChannelPreviewData)(channel, client,
|
|
28
|
-
|
|
24
|
+
var _useChannelPreviewDat = (0, _useChannelPreviewData.useChannelPreviewData)(channel, client, propForceUpdate),
|
|
25
|
+
latestMessagePreview = _useChannelPreviewDat.latestMessagePreview,
|
|
29
26
|
muted = _useChannelPreviewDat.muted,
|
|
30
27
|
unread = _useChannelPreviewDat.unread;
|
|
31
|
-
var latestMessagePreview = (0, _useLatestMessagePreview.useLatestMessagePreview)(channel, forceUpdate, lastMessage);
|
|
32
28
|
return (0, _jsxRuntime.jsx)(Preview, {
|
|
33
29
|
channel: channel,
|
|
34
30
|
latestMessagePreview: latestMessagePreview,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireDefault","require","_useChannelPreviewData","
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireDefault","require","_useChannelPreviewData","_ChannelsContext","_ChatContext","_jsxRuntime","_this","_jsxFileName","ChannelPreview","props","channel","propClient","client","propForceUpdate","forceUpdate","propPreview","Preview","_useChatContext","useChatContext","contextClient","_useChannelsContext","useChannelsContext","contextPreview","_useChannelPreviewDat","useChannelPreviewData","latestMessagePreview","muted","unread","jsx","exports"],"sourceRoot":"../../../../src","sources":["components/ChannelPreview/ChannelPreview.tsx"],"mappings":";;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AAIA,IAAAC,sBAAA,GAAAD,OAAA;AAEA,IAAAE,gBAAA,GAAAF,OAAA;AAIA,IAAAG,YAAA,GAAAH,OAAA;AAA0F,IAAAI,WAAA,GAAAJ,OAAA;AAAA,IAAAK,KAAA;EAAAC,YAAA;AAcnF,IAAMC,cAAc,GAAG,SAAjBA,cAAcA,CAGzBC,KAA8C,EAC3C;EACH,IAAQC,OAAO,GAA6ED,KAAK,CAAzFC,OAAO;IAAUC,UAAU,GAAyDF,KAAK,CAAhFG,MAAM;IAA2BC,eAAe,GAA2BJ,KAAK,CAA5DK,WAAW;IAA4BC,WAAW,GAAKN,KAAK,CAA9BO,OAAO;EAE1E,IAAAC,eAAA,GAAkC,IAAAC,2BAAc,EAAqB,CAAC;IAAtDC,aAAa,GAAAF,eAAA,CAArBL,MAAM;EACd,IAAAQ,mBAAA,GAAoC,IAAAC,mCAAkB,EAAqB,CAAC;IAA3DC,cAAc,GAAAF,mBAAA,CAAvBJ,OAAO;EAEf,IAAMJ,MAAM,GAAGD,UAAU,IAAIQ,aAAa;EAC1C,IAAMH,OAAO,GAAGD,WAAW,IAAIO,cAAc;EAE7C,IAAAC,qBAAA,GAAgD,IAAAC,4CAAqB,EACnEd,OAAO,EACPE,MAAM,EACNC,eACF,CAAC;IAJOY,oBAAoB,GAAAF,qBAAA,CAApBE,oBAAoB;IAAEC,KAAK,GAAAH,qBAAA,CAALG,KAAK;IAAEC,MAAM,GAAAJ,qBAAA,CAANI,MAAM;EAM3C,OACE,IAAAtB,WAAA,CAAAuB,GAAA,EAACZ,OAAO;IACNN,OAAO,EAAEA,OAAQ;IACjBe,oBAAoB,EAAEA,oBAAqB;IAC3CC,KAAK,EAAEA,KAAM;IACbC,MAAM,EAAEA;EAAO,CAChB,CAAC;AAEN,CAAC;AAACE,OAAA,CAAArB,cAAA,GAAAA,cAAA","ignoreList":[]}
|
|
@@ -7,36 +7,69 @@ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/sli
|
|
|
7
7
|
var _react = require("react");
|
|
8
8
|
var _throttle = _interopRequireDefault(require("lodash/throttle"));
|
|
9
9
|
var _useIsChannelMuted2 = require("./useIsChannelMuted");
|
|
10
|
-
var
|
|
11
|
-
|
|
10
|
+
var _useLatestMessagePreview = require("./useLatestMessagePreview");
|
|
11
|
+
var _contexts = require("../../../contexts");
|
|
12
|
+
var useChannelPreviewData = function useChannelPreviewData(channel, client, forceUpdateOverride) {
|
|
13
|
+
var _useState = (0, _react.useState)(0),
|
|
12
14
|
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
var _useState3 = (0, _react.useState)(channel.
|
|
15
|
+
forceUpdate = _useState2[0],
|
|
16
|
+
setForceUpdate = _useState2[1];
|
|
17
|
+
var _useState3 = (0, _react.useState)(channel.state.messages[channel.state.messages.length - 1]),
|
|
16
18
|
_useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
|
|
17
|
-
|
|
18
|
-
|
|
19
|
+
lastMessage = _useState4[0],
|
|
20
|
+
setLastMessage = _useState4[1];
|
|
21
|
+
var _useState5 = (0, _react.useState)(channel.countUnread()),
|
|
22
|
+
_useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
|
|
23
|
+
unread = _useState6[0],
|
|
24
|
+
setUnread = _useState6[1];
|
|
19
25
|
var _useIsChannelMuted = (0, _useIsChannelMuted2.useIsChannelMuted)(channel),
|
|
20
26
|
muted = _useIsChannelMuted.muted;
|
|
27
|
+
var _useChannelsContext = (0, _contexts.useChannelsContext)(),
|
|
28
|
+
contextForceUpdate = _useChannelsContext.forceUpdate;
|
|
29
|
+
var channelListForceUpdate = forceUpdateOverride != null ? forceUpdateOverride : contextForceUpdate;
|
|
30
|
+
var channelLastMessage = channel.lastMessage();
|
|
31
|
+
var channelLastMessageString = "".concat(channelLastMessage == null ? void 0 : channelLastMessage.id).concat(channelLastMessage == null ? void 0 : channelLastMessage.updated_at);
|
|
32
|
+
(0, _react.useEffect)(function () {
|
|
33
|
+
var _client$on = client.on('notification.mark_read', function () {
|
|
34
|
+
setUnread(channel.countUnread());
|
|
35
|
+
}),
|
|
36
|
+
unsubscribe = _client$on.unsubscribe;
|
|
37
|
+
return unsubscribe;
|
|
38
|
+
}, [channel, client]);
|
|
39
|
+
(0, _react.useEffect)(function () {
|
|
40
|
+
if (channelLastMessage && (channelLastMessage.id !== (lastMessage == null ? void 0 : lastMessage.id) || channelLastMessage.updated_at !== (lastMessage == null ? void 0 : lastMessage.updated_at))) {
|
|
41
|
+
setLastMessage(channelLastMessage);
|
|
42
|
+
}
|
|
43
|
+
var newUnreadCount = channel.countUnread();
|
|
44
|
+
setUnread(newUnreadCount);
|
|
45
|
+
}, [channel, channelLastMessageString, channelListForceUpdate]);
|
|
21
46
|
(0, _react.useEffect)(function () {
|
|
22
47
|
var handleReadEvent = function handleReadEvent(event) {
|
|
48
|
+
var _event$user, _event$user2;
|
|
23
49
|
if (!event.cid) return;
|
|
24
|
-
if (channel.cid
|
|
50
|
+
if (channel.cid !== event.cid) return;
|
|
51
|
+
if ((event == null ? void 0 : (_event$user = event.user) == null ? void 0 : _event$user.id) === client.userID) {
|
|
52
|
+
setUnread(0);
|
|
53
|
+
} else if (event != null && (_event$user2 = event.user) != null && _event$user2.id) {
|
|
54
|
+
setForceUpdate(function (prev) {
|
|
55
|
+
return prev + 1;
|
|
56
|
+
});
|
|
57
|
+
}
|
|
25
58
|
};
|
|
26
|
-
var _client$
|
|
27
|
-
unsubscribe = _client$
|
|
59
|
+
var _client$on2 = client.on('message.read', handleReadEvent),
|
|
60
|
+
unsubscribe = _client$on2.unsubscribe;
|
|
28
61
|
return unsubscribe;
|
|
29
62
|
}, [client, channel]);
|
|
30
63
|
(0, _react.useEffect)(function () {
|
|
31
64
|
var handleUnreadEvent = function handleUnreadEvent(event) {
|
|
32
|
-
var _event$
|
|
65
|
+
var _event$user3, _client$user;
|
|
33
66
|
if (!event.cid) return;
|
|
34
67
|
if (channel.cid !== event.cid) return;
|
|
35
|
-
if (((_event$
|
|
68
|
+
if (((_event$user3 = event.user) == null ? void 0 : _event$user3.id) !== ((_client$user = client.user) == null ? void 0 : _client$user.id)) return;
|
|
36
69
|
setUnread(channel.countUnread());
|
|
37
70
|
};
|
|
38
|
-
var _client$
|
|
39
|
-
unsubscribe = _client$
|
|
71
|
+
var _client$on3 = client.on('notification.mark_unread', handleUnreadEvent),
|
|
72
|
+
unsubscribe = _client$on3.unsubscribe;
|
|
40
73
|
return unsubscribe;
|
|
41
74
|
}, [client, channel]);
|
|
42
75
|
var refreshUnreadCount = (0, _react.useMemo)(function () {
|
|
@@ -54,15 +87,32 @@ var useChannelPreviewData = function useChannelPreviewData(channel, client, forc
|
|
|
54
87
|
setLastMessage(channel.state.latestMessages[channel.state.latestMessages.length - 1]);
|
|
55
88
|
refreshUnreadCount();
|
|
56
89
|
};
|
|
57
|
-
var
|
|
90
|
+
var handleNewMessageEvent = function handleNewMessageEvent(event) {
|
|
91
|
+
var message = event.message;
|
|
92
|
+
if (message && (!message.parent_id || message.show_in_channel)) {
|
|
93
|
+
setLastMessage(message);
|
|
94
|
+
setUnread(channel.countUnread());
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
var handleUpdatedOrDeletedMessage = function handleUpdatedOrDeletedMessage(event) {
|
|
98
|
+
setLastMessage(function (prevLastMessage) {
|
|
99
|
+
var _event$message;
|
|
100
|
+
if ((prevLastMessage == null ? void 0 : prevLastMessage.id) === ((_event$message = event.message) == null ? void 0 : _event$message.id)) {
|
|
101
|
+
return event.message;
|
|
102
|
+
}
|
|
103
|
+
return prevLastMessage;
|
|
104
|
+
});
|
|
105
|
+
};
|
|
106
|
+
var listeners = [channel.on('message.new', handleNewMessageEvent), channel.on('message.updated', handleUpdatedOrDeletedMessage), channel.on('message.deleted', handleUpdatedOrDeletedMessage), channel.on('message.undeleted', handleEvent), channel.on('channel.truncated', handleEvent)];
|
|
58
107
|
return function () {
|
|
59
108
|
return listeners.forEach(function (l) {
|
|
60
109
|
return l.unsubscribe();
|
|
61
110
|
});
|
|
62
111
|
};
|
|
63
|
-
}, [channel, refreshUnreadCount, forceUpdate]);
|
|
112
|
+
}, [channel, refreshUnreadCount, forceUpdate, channelListForceUpdate]);
|
|
113
|
+
var latestMessagePreview = (0, _useLatestMessagePreview.useLatestMessagePreview)(channel, forceUpdate, lastMessage);
|
|
64
114
|
return {
|
|
65
|
-
|
|
115
|
+
latestMessagePreview: latestMessagePreview,
|
|
66
116
|
muted: muted,
|
|
67
117
|
unread: unread
|
|
68
118
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","require","_throttle","_interopRequireDefault","_useIsChannelMuted2","useChannelPreviewData","channel","client","
|
|
1
|
+
{"version":3,"names":["_react","require","_throttle","_interopRequireDefault","_useIsChannelMuted2","_useLatestMessagePreview","_contexts","useChannelPreviewData","channel","client","forceUpdateOverride","_useState","useState","_useState2","_slicedToArray2","forceUpdate","setForceUpdate","_useState3","state","messages","length","_useState4","lastMessage","setLastMessage","_useState5","countUnread","_useState6","unread","setUnread","_useIsChannelMuted","useIsChannelMuted","muted","_useChannelsContext","useChannelsContext","contextForceUpdate","channelListForceUpdate","channelLastMessage","channelLastMessageString","concat","id","updated_at","useEffect","_client$on","on","unsubscribe","newUnreadCount","handleReadEvent","event","_event$user","_event$user2","cid","user","userID","prev","_client$on2","handleUnreadEvent","_event$user3","_client$user","_client$on3","refreshUnreadCount","useMemo","throttle","handleEvent","latestMessages","handleNewMessageEvent","message","parent_id","show_in_channel","handleUpdatedOrDeletedMessage","prevLastMessage","_event$message","listeners","forEach","l","latestMessagePreview","useLatestMessagePreview","exports"],"sourceRoot":"../../../../../src","sources":["components/ChannelPreview/hooks/useChannelPreviewData.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -5,7 +5,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
exports.ChannelPreview = void 0;
|
|
6
6
|
var _react = _interopRequireDefault(require("react"));
|
|
7
7
|
var _useChannelPreviewData = require("./hooks/useChannelPreviewData");
|
|
8
|
-
var _useLatestMessagePreview = require("./hooks/useLatestMessagePreview");
|
|
9
8
|
var _ChannelsContext = require("../../contexts/channelsContext/ChannelsContext");
|
|
10
9
|
var _ChatContext = require("../../contexts/chatContext/ChatContext");
|
|
11
10
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
@@ -19,16 +18,13 @@ var ChannelPreview = function ChannelPreview(props) {
|
|
|
19
18
|
var _useChatContext = (0, _ChatContext.useChatContext)(),
|
|
20
19
|
contextClient = _useChatContext.client;
|
|
21
20
|
var _useChannelsContext = (0, _ChannelsContext.useChannelsContext)(),
|
|
22
|
-
contextForceUpdate = _useChannelsContext.forceUpdate,
|
|
23
21
|
contextPreview = _useChannelsContext.Preview;
|
|
24
22
|
var client = propClient || contextClient;
|
|
25
|
-
var forceUpdate = propForceUpdate || contextForceUpdate;
|
|
26
23
|
var Preview = propPreview || contextPreview;
|
|
27
|
-
var _useChannelPreviewDat = (0, _useChannelPreviewData.useChannelPreviewData)(channel, client,
|
|
28
|
-
|
|
24
|
+
var _useChannelPreviewDat = (0, _useChannelPreviewData.useChannelPreviewData)(channel, client, propForceUpdate),
|
|
25
|
+
latestMessagePreview = _useChannelPreviewDat.latestMessagePreview,
|
|
29
26
|
muted = _useChannelPreviewDat.muted,
|
|
30
27
|
unread = _useChannelPreviewDat.unread;
|
|
31
|
-
var latestMessagePreview = (0, _useLatestMessagePreview.useLatestMessagePreview)(channel, forceUpdate, lastMessage);
|
|
32
28
|
return (0, _jsxRuntime.jsx)(Preview, {
|
|
33
29
|
channel: channel,
|
|
34
30
|
latestMessagePreview: latestMessagePreview,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireDefault","require","_useChannelPreviewData","
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireDefault","require","_useChannelPreviewData","_ChannelsContext","_ChatContext","_jsxRuntime","_this","_jsxFileName","ChannelPreview","props","channel","propClient","client","propForceUpdate","forceUpdate","propPreview","Preview","_useChatContext","useChatContext","contextClient","_useChannelsContext","useChannelsContext","contextPreview","_useChannelPreviewDat","useChannelPreviewData","latestMessagePreview","muted","unread","jsx","exports"],"sourceRoot":"../../../../src","sources":["components/ChannelPreview/ChannelPreview.tsx"],"mappings":";;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AAIA,IAAAC,sBAAA,GAAAD,OAAA;AAEA,IAAAE,gBAAA,GAAAF,OAAA;AAIA,IAAAG,YAAA,GAAAH,OAAA;AAA0F,IAAAI,WAAA,GAAAJ,OAAA;AAAA,IAAAK,KAAA;EAAAC,YAAA;AAcnF,IAAMC,cAAc,GAAG,SAAjBA,cAAcA,CAGzBC,KAA8C,EAC3C;EACH,IAAQC,OAAO,GAA6ED,KAAK,CAAzFC,OAAO;IAAUC,UAAU,GAAyDF,KAAK,CAAhFG,MAAM;IAA2BC,eAAe,GAA2BJ,KAAK,CAA5DK,WAAW;IAA4BC,WAAW,GAAKN,KAAK,CAA9BO,OAAO;EAE1E,IAAAC,eAAA,GAAkC,IAAAC,2BAAc,EAAqB,CAAC;IAAtDC,aAAa,GAAAF,eAAA,CAArBL,MAAM;EACd,IAAAQ,mBAAA,GAAoC,IAAAC,mCAAkB,EAAqB,CAAC;IAA3DC,cAAc,GAAAF,mBAAA,CAAvBJ,OAAO;EAEf,IAAMJ,MAAM,GAAGD,UAAU,IAAIQ,aAAa;EAC1C,IAAMH,OAAO,GAAGD,WAAW,IAAIO,cAAc;EAE7C,IAAAC,qBAAA,GAAgD,IAAAC,4CAAqB,EACnEd,OAAO,EACPE,MAAM,EACNC,eACF,CAAC;IAJOY,oBAAoB,GAAAF,qBAAA,CAApBE,oBAAoB;IAAEC,KAAK,GAAAH,qBAAA,CAALG,KAAK;IAAEC,MAAM,GAAAJ,qBAAA,CAANI,MAAM;EAM3C,OACE,IAAAtB,WAAA,CAAAuB,GAAA,EAACZ,OAAO;IACNN,OAAO,EAAEA,OAAQ;IACjBe,oBAAoB,EAAEA,oBAAqB;IAC3CC,KAAK,EAAEA,KAAM;IACbC,MAAM,EAAEA;EAAO,CAChB,CAAC;AAEN,CAAC;AAACE,OAAA,CAAArB,cAAA,GAAAA,cAAA","ignoreList":[]}
|
|
@@ -7,36 +7,69 @@ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/sli
|
|
|
7
7
|
var _react = require("react");
|
|
8
8
|
var _throttle = _interopRequireDefault(require("lodash/throttle"));
|
|
9
9
|
var _useIsChannelMuted2 = require("./useIsChannelMuted");
|
|
10
|
-
var
|
|
11
|
-
|
|
10
|
+
var _useLatestMessagePreview = require("./useLatestMessagePreview");
|
|
11
|
+
var _contexts = require("../../../contexts");
|
|
12
|
+
var useChannelPreviewData = function useChannelPreviewData(channel, client, forceUpdateOverride) {
|
|
13
|
+
var _useState = (0, _react.useState)(0),
|
|
12
14
|
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
var _useState3 = (0, _react.useState)(channel.
|
|
15
|
+
forceUpdate = _useState2[0],
|
|
16
|
+
setForceUpdate = _useState2[1];
|
|
17
|
+
var _useState3 = (0, _react.useState)(channel.state.messages[channel.state.messages.length - 1]),
|
|
16
18
|
_useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
|
|
17
|
-
|
|
18
|
-
|
|
19
|
+
lastMessage = _useState4[0],
|
|
20
|
+
setLastMessage = _useState4[1];
|
|
21
|
+
var _useState5 = (0, _react.useState)(channel.countUnread()),
|
|
22
|
+
_useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
|
|
23
|
+
unread = _useState6[0],
|
|
24
|
+
setUnread = _useState6[1];
|
|
19
25
|
var _useIsChannelMuted = (0, _useIsChannelMuted2.useIsChannelMuted)(channel),
|
|
20
26
|
muted = _useIsChannelMuted.muted;
|
|
27
|
+
var _useChannelsContext = (0, _contexts.useChannelsContext)(),
|
|
28
|
+
contextForceUpdate = _useChannelsContext.forceUpdate;
|
|
29
|
+
var channelListForceUpdate = forceUpdateOverride != null ? forceUpdateOverride : contextForceUpdate;
|
|
30
|
+
var channelLastMessage = channel.lastMessage();
|
|
31
|
+
var channelLastMessageString = "".concat(channelLastMessage == null ? void 0 : channelLastMessage.id).concat(channelLastMessage == null ? void 0 : channelLastMessage.updated_at);
|
|
32
|
+
(0, _react.useEffect)(function () {
|
|
33
|
+
var _client$on = client.on('notification.mark_read', function () {
|
|
34
|
+
setUnread(channel.countUnread());
|
|
35
|
+
}),
|
|
36
|
+
unsubscribe = _client$on.unsubscribe;
|
|
37
|
+
return unsubscribe;
|
|
38
|
+
}, [channel, client]);
|
|
39
|
+
(0, _react.useEffect)(function () {
|
|
40
|
+
if (channelLastMessage && (channelLastMessage.id !== (lastMessage == null ? void 0 : lastMessage.id) || channelLastMessage.updated_at !== (lastMessage == null ? void 0 : lastMessage.updated_at))) {
|
|
41
|
+
setLastMessage(channelLastMessage);
|
|
42
|
+
}
|
|
43
|
+
var newUnreadCount = channel.countUnread();
|
|
44
|
+
setUnread(newUnreadCount);
|
|
45
|
+
}, [channel, channelLastMessageString, channelListForceUpdate]);
|
|
21
46
|
(0, _react.useEffect)(function () {
|
|
22
47
|
var handleReadEvent = function handleReadEvent(event) {
|
|
48
|
+
var _event$user, _event$user2;
|
|
23
49
|
if (!event.cid) return;
|
|
24
|
-
if (channel.cid
|
|
50
|
+
if (channel.cid !== event.cid) return;
|
|
51
|
+
if ((event == null ? void 0 : (_event$user = event.user) == null ? void 0 : _event$user.id) === client.userID) {
|
|
52
|
+
setUnread(0);
|
|
53
|
+
} else if (event != null && (_event$user2 = event.user) != null && _event$user2.id) {
|
|
54
|
+
setForceUpdate(function (prev) {
|
|
55
|
+
return prev + 1;
|
|
56
|
+
});
|
|
57
|
+
}
|
|
25
58
|
};
|
|
26
|
-
var _client$
|
|
27
|
-
unsubscribe = _client$
|
|
59
|
+
var _client$on2 = client.on('message.read', handleReadEvent),
|
|
60
|
+
unsubscribe = _client$on2.unsubscribe;
|
|
28
61
|
return unsubscribe;
|
|
29
62
|
}, [client, channel]);
|
|
30
63
|
(0, _react.useEffect)(function () {
|
|
31
64
|
var handleUnreadEvent = function handleUnreadEvent(event) {
|
|
32
|
-
var _event$
|
|
65
|
+
var _event$user3, _client$user;
|
|
33
66
|
if (!event.cid) return;
|
|
34
67
|
if (channel.cid !== event.cid) return;
|
|
35
|
-
if (((_event$
|
|
68
|
+
if (((_event$user3 = event.user) == null ? void 0 : _event$user3.id) !== ((_client$user = client.user) == null ? void 0 : _client$user.id)) return;
|
|
36
69
|
setUnread(channel.countUnread());
|
|
37
70
|
};
|
|
38
|
-
var _client$
|
|
39
|
-
unsubscribe = _client$
|
|
71
|
+
var _client$on3 = client.on('notification.mark_unread', handleUnreadEvent),
|
|
72
|
+
unsubscribe = _client$on3.unsubscribe;
|
|
40
73
|
return unsubscribe;
|
|
41
74
|
}, [client, channel]);
|
|
42
75
|
var refreshUnreadCount = (0, _react.useMemo)(function () {
|
|
@@ -54,15 +87,32 @@ var useChannelPreviewData = function useChannelPreviewData(channel, client, forc
|
|
|
54
87
|
setLastMessage(channel.state.latestMessages[channel.state.latestMessages.length - 1]);
|
|
55
88
|
refreshUnreadCount();
|
|
56
89
|
};
|
|
57
|
-
var
|
|
90
|
+
var handleNewMessageEvent = function handleNewMessageEvent(event) {
|
|
91
|
+
var message = event.message;
|
|
92
|
+
if (message && (!message.parent_id || message.show_in_channel)) {
|
|
93
|
+
setLastMessage(message);
|
|
94
|
+
setUnread(channel.countUnread());
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
var handleUpdatedOrDeletedMessage = function handleUpdatedOrDeletedMessage(event) {
|
|
98
|
+
setLastMessage(function (prevLastMessage) {
|
|
99
|
+
var _event$message;
|
|
100
|
+
if ((prevLastMessage == null ? void 0 : prevLastMessage.id) === ((_event$message = event.message) == null ? void 0 : _event$message.id)) {
|
|
101
|
+
return event.message;
|
|
102
|
+
}
|
|
103
|
+
return prevLastMessage;
|
|
104
|
+
});
|
|
105
|
+
};
|
|
106
|
+
var listeners = [channel.on('message.new', handleNewMessageEvent), channel.on('message.updated', handleUpdatedOrDeletedMessage), channel.on('message.deleted', handleUpdatedOrDeletedMessage), channel.on('message.undeleted', handleEvent), channel.on('channel.truncated', handleEvent)];
|
|
58
107
|
return function () {
|
|
59
108
|
return listeners.forEach(function (l) {
|
|
60
109
|
return l.unsubscribe();
|
|
61
110
|
});
|
|
62
111
|
};
|
|
63
|
-
}, [channel, refreshUnreadCount, forceUpdate]);
|
|
112
|
+
}, [channel, refreshUnreadCount, forceUpdate, channelListForceUpdate]);
|
|
113
|
+
var latestMessagePreview = (0, _useLatestMessagePreview.useLatestMessagePreview)(channel, forceUpdate, lastMessage);
|
|
64
114
|
return {
|
|
65
|
-
|
|
115
|
+
latestMessagePreview: latestMessagePreview,
|
|
66
116
|
muted: muted,
|
|
67
117
|
unread: unread
|
|
68
118
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","require","_throttle","_interopRequireDefault","_useIsChannelMuted2","useChannelPreviewData","channel","client","
|
|
1
|
+
{"version":3,"names":["_react","require","_throttle","_interopRequireDefault","_useIsChannelMuted2","_useLatestMessagePreview","_contexts","useChannelPreviewData","channel","client","forceUpdateOverride","_useState","useState","_useState2","_slicedToArray2","forceUpdate","setForceUpdate","_useState3","state","messages","length","_useState4","lastMessage","setLastMessage","_useState5","countUnread","_useState6","unread","setUnread","_useIsChannelMuted","useIsChannelMuted","muted","_useChannelsContext","useChannelsContext","contextForceUpdate","channelListForceUpdate","channelLastMessage","channelLastMessageString","concat","id","updated_at","useEffect","_client$on","on","unsubscribe","newUnreadCount","handleReadEvent","event","_event$user","_event$user2","cid","user","userID","prev","_client$on2","handleUnreadEvent","_event$user3","_client$user","_client$on3","refreshUnreadCount","useMemo","throttle","handleEvent","latestMessages","handleNewMessageEvent","message","parent_id","show_in_channel","handleUpdatedOrDeletedMessage","prevLastMessage","_event$message","listeners","forEach","l","latestMessagePreview","useLatestMessagePreview","exports"],"sourceRoot":"../../../../../src","sources":["components/ChannelPreview/hooks/useChannelPreviewData.ts"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAEA,IAAAC,SAAA,GAAAC,sBAAA,CAAAF,OAAA;AAGA,IAAAG,mBAAA,GAAAH,OAAA;AAEA,IAAAI,wBAAA,GAAAJ,OAAA;AAEA,IAAAK,SAAA,GAAAL,OAAA;AAGO,IAAMM,qBAAqB,GAAG,SAAxBA,qBAAqBA,CAGhCC,OAAoC,EACpCC,MAAsC,EACtCC,mBAA4B,EACzB;EACH,IAAAC,SAAA,GAAsC,IAAAC,eAAQ,EAAC,CAAC,CAAC;IAAAC,UAAA,OAAAC,eAAA,aAAAH,SAAA;IAA1CI,WAAW,GAAAF,UAAA;IAAEG,cAAc,GAAAH,UAAA;EAClC,IAAAI,UAAA,GAAsC,IAAAL,eAAQ,EAG5CJ,OAAO,CAACU,KAAK,CAACC,QAAQ,CAACX,OAAO,CAACU,KAAK,CAACC,QAAQ,CAACC,MAAM,GAAG,CAAC,CAAC,CAAC;IAAAC,UAAA,OAAAP,eAAA,aAAAG,UAAA;IAHrDK,WAAW,GAAAD,UAAA;IAAEE,cAAc,GAAAF,UAAA;EAIlC,IAAAG,UAAA,GAA4B,IAAAZ,eAAQ,EAACJ,OAAO,CAACiB,WAAW,CAAC,CAAC,CAAC;IAAAC,UAAA,OAAAZ,eAAA,aAAAU,UAAA;IAApDG,MAAM,GAAAD,UAAA;IAAEE,SAAS,GAAAF,UAAA;EACxB,IAAAG,kBAAA,GAAkB,IAAAC,qCAAiB,EAACtB,OAAO,CAAC;IAApCuB,KAAK,GAAAF,kBAAA,CAALE,KAAK;EACb,IAAAC,mBAAA,GAA4C,IAAAC,4BAAkB,EAAqB,CAAC;IAA/DC,kBAAkB,GAAAF,mBAAA,CAA/BjB,WAAW;EACnB,IAAMoB,sBAAsB,GAAGzB,mBAAmB,WAAnBA,mBAAmB,GAAIwB,kBAAkB;EAExE,IAAME,kBAAkB,GAAG5B,OAAO,CAACc,WAAW,CAAC,CAAC;EAChD,IAAMe,wBAAwB,MAAAC,MAAA,CAAMF,kBAAkB,oBAAlBA,kBAAkB,CAAEG,EAAE,EAAAD,MAAA,CAAGF,kBAAkB,oBAAlBA,kBAAkB,CAAEI,UAAU,CAAE;EAE7F,IAAAC,gBAAS,EAAC,YAAM;IACd,IAAAC,UAAA,GAAwBjC,MAAM,CAACkC,EAAE,CAAC,wBAAwB,EAAE,YAAM;QAChEf,SAAS,CAACpB,OAAO,CAACiB,WAAW,CAAC,CAAC,CAAC;MAClC,CAAC,CAAC;MAFMmB,WAAW,GAAAF,UAAA,CAAXE,WAAW;IAGnB,OAAOA,WAAW;EACpB,CAAC,EAAE,CAACpC,OAAO,EAAEC,MAAM,CAAC,CAAC;EAErB,IAAAgC,gBAAS,EAAC,YAAM;IACd,IACEL,kBAAkB,KACjBA,kBAAkB,CAACG,EAAE,MAAKjB,WAAW,oBAAXA,WAAW,CAAEiB,EAAE,KACxCH,kBAAkB,CAACI,UAAU,MAAKlB,WAAW,oBAAXA,WAAW,CAAEkB,UAAU,EAAC,EAC5D;MACAjB,cAAc,CAACa,kBAAkB,CAAC;IACpC;IACA,IAAMS,cAAc,GAAGrC,OAAO,CAACiB,WAAW,CAAC,CAAC;IAC5CG,SAAS,CAACiB,cAAc,CAAC;EAE3B,CAAC,EAAE,CAACrC,OAAO,EAAE6B,wBAAwB,EAAEF,sBAAsB,CAAC,CAAC;EAK/D,IAAAM,gBAAS,EAAC,YAAM;IACd,IAAMK,eAAe,GAAG,SAAlBA,eAAeA,CAAIC,KAAY,EAAK;MAAA,IAAAC,WAAA,EAAAC,YAAA;MACxC,IAAI,CAACF,KAAK,CAACG,GAAG,EAAE;MAChB,IAAI1C,OAAO,CAAC0C,GAAG,KAAKH,KAAK,CAACG,GAAG,EAAE;MAC/B,IAAI,CAAAH,KAAK,qBAAAC,WAAA,GAALD,KAAK,CAAEI,IAAI,qBAAXH,WAAA,CAAaT,EAAE,MAAK9B,MAAM,CAAC2C,MAAM,EAAE;QACrCxB,SAAS,CAAC,CAAC,CAAC;MACd,CAAC,MAAM,IAAImB,KAAK,aAAAE,YAAA,GAALF,KAAK,CAAEI,IAAI,aAAXF,YAAA,CAAaV,EAAE,EAAE;QAC1BvB,cAAc,CAAC,UAACqC,IAAI;UAAA,OAAKA,IAAI,GAAG,CAAC;QAAA,EAAC;MACpC;IACF,CAAC;IACD,IAAAC,WAAA,GAAwB7C,MAAM,CAACkC,EAAE,CAAC,cAAc,EAAEG,eAAe,CAAC;MAA1DF,WAAW,GAAAU,WAAA,CAAXV,WAAW;IACnB,OAAOA,WAAW;EACpB,CAAC,EAAE,CAACnC,MAAM,EAAED,OAAO,CAAC,CAAC;EAKrB,IAAAiC,gBAAS,EAAC,YAAM;IACd,IAAMc,iBAAiB,GAAG,SAApBA,iBAAiBA,CAAIR,KAAY,EAAK;MAAA,IAAAS,YAAA,EAAAC,YAAA;MAC1C,IAAI,CAACV,KAAK,CAACG,GAAG,EAAE;MAChB,IAAI1C,OAAO,CAAC0C,GAAG,KAAKH,KAAK,CAACG,GAAG,EAAE;MAC/B,IAAI,EAAAM,YAAA,GAAAT,KAAK,CAACI,IAAI,qBAAVK,YAAA,CAAYjB,EAAE,QAAAkB,YAAA,GAAKhD,MAAM,CAAC0C,IAAI,qBAAXM,YAAA,CAAalB,EAAE,GAAE;MACxCX,SAAS,CAACpB,OAAO,CAACiB,WAAW,CAAC,CAAC,CAAC;IAClC,CAAC;IACD,IAAAiC,WAAA,GAAwBjD,MAAM,CAACkC,EAAE,CAAC,0BAA0B,EAAEY,iBAAiB,CAAC;MAAxEX,WAAW,GAAAc,WAAA,CAAXd,WAAW;IACnB,OAAOA,WAAW;EACpB,CAAC,EAAE,CAACnC,MAAM,EAAED,OAAO,CAAC,CAAC;EAErB,IAAMmD,kBAAkB,GAAG,IAAAC,cAAO,EAChC;IAAA,OACE,IAAAC,oBAAQ,EAAC,YAAM;MACb,IAAI9B,KAAK,EAAE;QACTH,SAAS,CAAC,CAAC,CAAC;MACd,CAAC,MAAM;QACLA,SAAS,CAACpB,OAAO,CAACiB,WAAW,CAAC,CAAC,CAAC;MAClC;IACF,CAAC,EAAE,GAAG,CAAC;EAAA,GACT,CAACjB,OAAO,EAAEuB,KAAK,CACjB,CAAC;EAKD,IAAAU,gBAAS,EAAC,YAAM;IACdkB,kBAAkB,CAAC,CAAC;IAEpB,IAAMG,WAAW,GAAG,SAAdA,WAAWA,CAAA,EAAS;MACxBvC,cAAc,CAACf,OAAO,CAACU,KAAK,CAAC6C,cAAc,CAACvD,OAAO,CAACU,KAAK,CAAC6C,cAAc,CAAC3C,MAAM,GAAG,CAAC,CAAC,CAAC;MACrFuC,kBAAkB,CAAC,CAAC;IACtB,CAAC;IAED,IAAMK,qBAAqB,GAAG,SAAxBA,qBAAqBA,CAAIjB,KAAgC,EAAK;MAClE,IAAMkB,OAAO,GAAGlB,KAAK,CAACkB,OAAO;MAC7B,IAAIA,OAAO,KAAK,CAACA,OAAO,CAACC,SAAS,IAAID,OAAO,CAACE,eAAe,CAAC,EAAE;QAC9D5C,cAAc,CAAC0C,OAAO,CAAC;QACvBrC,SAAS,CAACpB,OAAO,CAACiB,WAAW,CAAC,CAAC,CAAC;MAClC;IACF,CAAC;IAED,IAAM2C,6BAA6B,GAAG,SAAhCA,6BAA6BA,CAAIrB,KAAgC,EAAK;MAC1ExB,cAAc,CAAC,UAAC8C,eAAe,EAAK;QAAA,IAAAC,cAAA;QAClC,IAAI,CAAAD,eAAe,oBAAfA,eAAe,CAAE9B,EAAE,QAAA+B,cAAA,GAAKvB,KAAK,CAACkB,OAAO,qBAAbK,cAAA,CAAe/B,EAAE,GAAE;UAC7C,OAAOQ,KAAK,CAACkB,OAAO;QACtB;QACA,OAAOI,eAAe;MACxB,CAAC,CAAC;IACJ,CAAC;IAED,IAAME,SAAS,GAAG,CAChB/D,OAAO,CAACmC,EAAE,CAAC,aAAa,EAAEqB,qBAAqB,CAAC,EAChDxD,OAAO,CAACmC,EAAE,CAAC,iBAAiB,EAAEyB,6BAA6B,CAAC,EAC5D5D,OAAO,CAACmC,EAAE,CAAC,iBAAiB,EAAEyB,6BAA6B,CAAC,EAC5D5D,OAAO,CAACmC,EAAE,CAAC,mBAAmB,EAAEmB,WAAW,CAAC,EAC5CtD,OAAO,CAACmC,EAAE,CAAC,mBAAmB,EAAEmB,WAAW,CAAC,CAC7C;IAED,OAAO;MAAA,OAAMS,SAAS,CAACC,OAAO,CAAC,UAACC,CAAC;QAAA,OAAKA,CAAC,CAAC7B,WAAW,CAAC,CAAC;MAAA,EAAC;IAAA;EACxD,CAAC,EAAE,CAACpC,OAAO,EAAEmD,kBAAkB,EAAE5C,WAAW,EAAEoB,sBAAsB,CAAC,CAAC;EAEtE,IAAMuC,oBAAoB,GAAG,IAAAC,gDAAuB,EAACnE,OAAO,EAAEO,WAAW,EAAEO,WAAW,CAAC;EAEvF,OAAO;IAAEoD,oBAAoB,EAApBA,oBAAoB;IAAE3C,KAAK,EAALA,KAAK;IAAEJ,MAAM,EAANA;EAAO,CAAC;AAChD,CAAC;AAACiD,OAAA,CAAArE,qBAAA,GAAAA,qBAAA","ignoreList":[]}
|
package/lib/module/version.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChannelPreview.d.ts","sourceRoot":"","sources":["../../../../src/components/ChannelPreview/ChannelPreview.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"ChannelPreview.d.ts","sourceRoot":"","sources":["../../../../src/components/ChannelPreview/ChannelPreview.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAI3C,OAAO,EACL,oBAAoB,EAErB,MAAM,gDAAgD,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAkB,MAAM,wCAAwC,CAAC;AAE1F,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAEnE,MAAM,MAAM,mBAAmB,CAC7B,kBAAkB,SAAS,yBAAyB,GAAG,yBAAyB,IAC9E,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,EAAE,QAAQ,CAAC,CAAC,GAC/D,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,kBAAkB,CAAC,EAAE,SAAS,GAAG,aAAa,CAAC,CAAC,GAAG;IACnF;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;CACtC,CAAC;AAEJ,eAAO,MAAM,cAAc,yJA2B1B,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type { Channel,
|
|
1
|
+
import type { Channel, StreamChat } from 'stream-chat';
|
|
2
2
|
import type { DefaultStreamChatGenerics } from '../../../types/types';
|
|
3
|
-
export declare const useChannelPreviewData: <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>(channel: Channel<StreamChatGenerics>, client: StreamChat<StreamChatGenerics>,
|
|
4
|
-
|
|
3
|
+
export declare const useChannelPreviewData: <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>(channel: Channel<StreamChatGenerics>, client: StreamChat<StreamChatGenerics>, forceUpdateOverride?: number) => {
|
|
4
|
+
latestMessagePreview: import("./useLatestMessagePreview").LatestMessagePreview<StreamChatGenerics>;
|
|
5
5
|
muted: boolean;
|
|
6
6
|
unread: number;
|
|
7
7
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useChannelPreviewData.d.ts","sourceRoot":"","sources":["../../../../../src/components/ChannelPreview/hooks/useChannelPreviewData.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"useChannelPreviewData.d.ts","sourceRoot":"","sources":["../../../../../src/components/ChannelPreview/hooks/useChannelPreviewData.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAwC,UAAU,EAAE,MAAM,aAAa,CAAC;AAO7F,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAEtE,eAAO,MAAM,qBAAqB,yLAKV,MAAM;;;;CAwH7B,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.42.2
|
|
4
|
+
"version": "5.42.2",
|
|
5
5
|
"author": {
|
|
6
6
|
"company": "Stream.io Inc",
|
|
7
7
|
"name": "Stream.io Inc"
|
|
@@ -3,7 +3,6 @@ import React from 'react';
|
|
|
3
3
|
import type { Channel } from 'stream-chat';
|
|
4
4
|
|
|
5
5
|
import { useChannelPreviewData } from './hooks/useChannelPreviewData';
|
|
6
|
-
import { useLatestMessagePreview } from './hooks/useLatestMessagePreview';
|
|
7
6
|
|
|
8
7
|
import {
|
|
9
8
|
ChannelsContextValue,
|
|
@@ -31,15 +30,16 @@ export const ChannelPreview = <
|
|
|
31
30
|
const { channel, client: propClient, forceUpdate: propForceUpdate, Preview: propPreview } = props;
|
|
32
31
|
|
|
33
32
|
const { client: contextClient } = useChatContext<StreamChatGenerics>();
|
|
34
|
-
const {
|
|
35
|
-
useChannelsContext<StreamChatGenerics>();
|
|
33
|
+
const { Preview: contextPreview } = useChannelsContext<StreamChatGenerics>();
|
|
36
34
|
|
|
37
35
|
const client = propClient || contextClient;
|
|
38
|
-
const forceUpdate = propForceUpdate || contextForceUpdate;
|
|
39
36
|
const Preview = propPreview || contextPreview;
|
|
40
37
|
|
|
41
|
-
const {
|
|
42
|
-
|
|
38
|
+
const { latestMessagePreview, muted, unread } = useChannelPreviewData(
|
|
39
|
+
channel,
|
|
40
|
+
client,
|
|
41
|
+
propForceUpdate,
|
|
42
|
+
);
|
|
43
43
|
|
|
44
44
|
return (
|
|
45
45
|
<Preview
|
|
@@ -69,6 +69,15 @@ describe('ChannelPreview', () => {
|
|
|
69
69
|
);
|
|
70
70
|
};
|
|
71
71
|
|
|
72
|
+
const generateChannelWrapper = (overrides: Record<string, unknown>) =>
|
|
73
|
+
generateChannel({
|
|
74
|
+
countUnread: jest.fn().mockReturnValue(0),
|
|
75
|
+
initialized: true,
|
|
76
|
+
lastMessage: jest.fn().mockReturnValue(generateMessage()),
|
|
77
|
+
muteStatus: jest.fn().mockReturnValue({ muted: false }),
|
|
78
|
+
...overrides,
|
|
79
|
+
});
|
|
80
|
+
|
|
72
81
|
const useInitializeChannel = async (c: GetOrCreateChannelApiParams) => {
|
|
73
82
|
useMockedApis(chatClient, [getOrCreateChannelApi(c)]);
|
|
74
83
|
|
|
@@ -89,9 +98,8 @@ describe('ChannelPreview', () => {
|
|
|
89
98
|
it("should not update the unread count if the event's cid does not match the channel's cid", async () => {
|
|
90
99
|
const channelOnMock = jest.fn().mockReturnValue({ unsubscribe: jest.fn() });
|
|
91
100
|
|
|
92
|
-
const c =
|
|
101
|
+
const c = generateChannelWrapper({
|
|
93
102
|
countUnread: jest.fn().mockReturnValue(10),
|
|
94
|
-
muteStatus: jest.fn().mockReturnValue({ muted: false }),
|
|
95
103
|
on: channelOnMock,
|
|
96
104
|
});
|
|
97
105
|
|
|
@@ -117,9 +125,8 @@ describe('ChannelPreview', () => {
|
|
|
117
125
|
it('should update the unread count to 0', async () => {
|
|
118
126
|
const channelOnMock = jest.fn().mockReturnValue({ unsubscribe: jest.fn() });
|
|
119
127
|
|
|
120
|
-
const c =
|
|
128
|
+
const c = generateChannelWrapper({
|
|
121
129
|
countUnread: jest.fn().mockReturnValue(10),
|
|
122
|
-
muteStatus: jest.fn().mockReturnValue({ muted: false }),
|
|
123
130
|
on: channelOnMock,
|
|
124
131
|
});
|
|
125
132
|
|
|
@@ -147,9 +154,7 @@ describe('ChannelPreview', () => {
|
|
|
147
154
|
it("should not update the unread count if the event's cid is undefined", async () => {
|
|
148
155
|
const channelOnMock = jest.fn().mockReturnValue({ unsubscribe: jest.fn() });
|
|
149
156
|
|
|
150
|
-
const c =
|
|
151
|
-
countUnread: jest.fn().mockReturnValue(0),
|
|
152
|
-
muteStatus: jest.fn().mockReturnValue({ muted: false }),
|
|
157
|
+
const c = generateChannelWrapper({
|
|
153
158
|
on: channelOnMock,
|
|
154
159
|
});
|
|
155
160
|
|
|
@@ -182,9 +187,7 @@ describe('ChannelPreview', () => {
|
|
|
182
187
|
it("should not update the unread count if the event's cid does not match the channel's cid", async () => {
|
|
183
188
|
const channelOnMock = jest.fn().mockReturnValue({ unsubscribe: jest.fn() });
|
|
184
189
|
|
|
185
|
-
const c =
|
|
186
|
-
countUnread: jest.fn().mockReturnValue(0),
|
|
187
|
-
muteStatus: jest.fn().mockReturnValue({ muted: false }),
|
|
190
|
+
const c = generateChannelWrapper({
|
|
188
191
|
on: channelOnMock,
|
|
189
192
|
});
|
|
190
193
|
|
|
@@ -217,9 +220,7 @@ describe('ChannelPreview', () => {
|
|
|
217
220
|
it("should not update the unread count if the event's user id does not match the client's user id", async () => {
|
|
218
221
|
const channelOnMock = jest.fn().mockReturnValue({ unsubscribe: jest.fn() });
|
|
219
222
|
|
|
220
|
-
const c =
|
|
221
|
-
countUnread: jest.fn().mockReturnValue(0),
|
|
222
|
-
muteStatus: jest.fn().mockReturnValue({ muted: false }),
|
|
223
|
+
const c = generateChannelWrapper({
|
|
223
224
|
on: channelOnMock,
|
|
224
225
|
});
|
|
225
226
|
|
|
@@ -255,12 +256,10 @@ describe('ChannelPreview', () => {
|
|
|
255
256
|
await useInitializeChannel(c);
|
|
256
257
|
const channelOnMock = jest.fn().mockReturnValue({ unsubscribe: jest.fn() });
|
|
257
258
|
|
|
258
|
-
const testChannel = {
|
|
259
|
+
const testChannel = generateChannelWrapper({
|
|
259
260
|
...channel,
|
|
260
|
-
countUnread: jest.fn().mockReturnValue(0),
|
|
261
|
-
muteStatus: jest.fn().mockReturnValue({ muted: false }),
|
|
262
261
|
on: channelOnMock,
|
|
263
|
-
};
|
|
262
|
+
});
|
|
264
263
|
|
|
265
264
|
const { getByTestId } = render(<TestComponent />);
|
|
266
265
|
|
|
@@ -291,9 +290,9 @@ describe('ChannelPreview', () => {
|
|
|
291
290
|
it('should update the unread count to 0 if the channel is muted', async () => {
|
|
292
291
|
const channelOnMock = jest.fn().mockReturnValue({ unsubscribe: jest.fn() });
|
|
293
292
|
|
|
294
|
-
const c =
|
|
293
|
+
const c = generateChannelWrapper({
|
|
295
294
|
countUnread: jest.fn().mockReturnValue(10),
|
|
296
|
-
muteStatus: jest.fn().mockReturnValue({ muted:
|
|
295
|
+
muteStatus: jest.fn().mockReturnValue({ muted: true }),
|
|
297
296
|
on: channelOnMock,
|
|
298
297
|
});
|
|
299
298
|
|
|
@@ -304,7 +303,7 @@ describe('ChannelPreview', () => {
|
|
|
304
303
|
await waitFor(() => getByTestId('channel-id'));
|
|
305
304
|
|
|
306
305
|
await waitFor(() => {
|
|
307
|
-
expect(getByTestId('unread-count')).toHaveTextContent('
|
|
306
|
+
expect(getByTestId('unread-count')).toHaveTextContent('0');
|
|
308
307
|
});
|
|
309
308
|
|
|
310
309
|
act(() => {
|
|
@@ -5,6 +5,9 @@ import type { Channel, ChannelState, Event, MessageResponse, StreamChat } from '
|
|
|
5
5
|
|
|
6
6
|
import { useIsChannelMuted } from './useIsChannelMuted';
|
|
7
7
|
|
|
8
|
+
import { useLatestMessagePreview } from './useLatestMessagePreview';
|
|
9
|
+
|
|
10
|
+
import { useChannelsContext } from '../../../contexts';
|
|
8
11
|
import type { DefaultStreamChatGenerics } from '../../../types/types';
|
|
9
12
|
|
|
10
13
|
export const useChannelPreviewData = <
|
|
@@ -12,14 +15,40 @@ export const useChannelPreviewData = <
|
|
|
12
15
|
>(
|
|
13
16
|
channel: Channel<StreamChatGenerics>,
|
|
14
17
|
client: StreamChat<StreamChatGenerics>,
|
|
15
|
-
|
|
18
|
+
forceUpdateOverride?: number,
|
|
16
19
|
) => {
|
|
20
|
+
const [forceUpdate, setForceUpdate] = useState(0);
|
|
17
21
|
const [lastMessage, setLastMessage] = useState<
|
|
18
22
|
| ReturnType<ChannelState<StreamChatGenerics>['formatMessage']>
|
|
19
23
|
| MessageResponse<StreamChatGenerics>
|
|
20
24
|
>(channel.state.messages[channel.state.messages.length - 1]);
|
|
21
25
|
const [unread, setUnread] = useState(channel.countUnread());
|
|
22
26
|
const { muted } = useIsChannelMuted(channel);
|
|
27
|
+
const { forceUpdate: contextForceUpdate } = useChannelsContext<StreamChatGenerics>();
|
|
28
|
+
const channelListForceUpdate = forceUpdateOverride ?? contextForceUpdate;
|
|
29
|
+
|
|
30
|
+
const channelLastMessage = channel.lastMessage();
|
|
31
|
+
const channelLastMessageString = `${channelLastMessage?.id}${channelLastMessage?.updated_at}`;
|
|
32
|
+
|
|
33
|
+
useEffect(() => {
|
|
34
|
+
const { unsubscribe } = client.on('notification.mark_read', () => {
|
|
35
|
+
setUnread(channel.countUnread());
|
|
36
|
+
});
|
|
37
|
+
return unsubscribe;
|
|
38
|
+
}, [channel, client]);
|
|
39
|
+
|
|
40
|
+
useEffect(() => {
|
|
41
|
+
if (
|
|
42
|
+
channelLastMessage &&
|
|
43
|
+
(channelLastMessage.id !== lastMessage?.id ||
|
|
44
|
+
channelLastMessage.updated_at !== lastMessage?.updated_at)
|
|
45
|
+
) {
|
|
46
|
+
setLastMessage(channelLastMessage);
|
|
47
|
+
}
|
|
48
|
+
const newUnreadCount = channel.countUnread();
|
|
49
|
+
setUnread(newUnreadCount);
|
|
50
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
51
|
+
}, [channel, channelLastMessageString, channelListForceUpdate]);
|
|
23
52
|
|
|
24
53
|
/**
|
|
25
54
|
* This effect listens for the `notification.mark_read` event and sets the unread count to 0
|
|
@@ -27,9 +56,14 @@ export const useChannelPreviewData = <
|
|
|
27
56
|
useEffect(() => {
|
|
28
57
|
const handleReadEvent = (event: Event) => {
|
|
29
58
|
if (!event.cid) return;
|
|
30
|
-
if (channel.cid
|
|
59
|
+
if (channel.cid !== event.cid) return;
|
|
60
|
+
if (event?.user?.id === client.userID) {
|
|
61
|
+
setUnread(0);
|
|
62
|
+
} else if (event?.user?.id) {
|
|
63
|
+
setForceUpdate((prev) => prev + 1);
|
|
64
|
+
}
|
|
31
65
|
};
|
|
32
|
-
const { unsubscribe } = client.on('
|
|
66
|
+
const { unsubscribe } = client.on('message.read', handleReadEvent);
|
|
33
67
|
return unsubscribe;
|
|
34
68
|
}, [client, channel]);
|
|
35
69
|
|
|
@@ -70,16 +104,35 @@ export const useChannelPreviewData = <
|
|
|
70
104
|
refreshUnreadCount();
|
|
71
105
|
};
|
|
72
106
|
|
|
107
|
+
const handleNewMessageEvent = (event: Event<StreamChatGenerics>) => {
|
|
108
|
+
const message = event.message;
|
|
109
|
+
if (message && (!message.parent_id || message.show_in_channel)) {
|
|
110
|
+
setLastMessage(message);
|
|
111
|
+
setUnread(channel.countUnread());
|
|
112
|
+
}
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
const handleUpdatedOrDeletedMessage = (event: Event<StreamChatGenerics>) => {
|
|
116
|
+
setLastMessage((prevLastMessage) => {
|
|
117
|
+
if (prevLastMessage?.id === event.message?.id) {
|
|
118
|
+
return event.message;
|
|
119
|
+
}
|
|
120
|
+
return prevLastMessage;
|
|
121
|
+
});
|
|
122
|
+
};
|
|
123
|
+
|
|
73
124
|
const listeners = [
|
|
74
|
-
channel.on('message.new',
|
|
75
|
-
channel.on('message.updated',
|
|
76
|
-
channel.on('message.deleted',
|
|
125
|
+
channel.on('message.new', handleNewMessageEvent),
|
|
126
|
+
channel.on('message.updated', handleUpdatedOrDeletedMessage),
|
|
127
|
+
channel.on('message.deleted', handleUpdatedOrDeletedMessage),
|
|
77
128
|
channel.on('message.undeleted', handleEvent),
|
|
78
129
|
channel.on('channel.truncated', handleEvent),
|
|
79
130
|
];
|
|
80
131
|
|
|
81
132
|
return () => listeners.forEach((l) => l.unsubscribe());
|
|
82
|
-
}, [channel, refreshUnreadCount, forceUpdate]);
|
|
133
|
+
}, [channel, refreshUnreadCount, forceUpdate, channelListForceUpdate]);
|
|
134
|
+
|
|
135
|
+
const latestMessagePreview = useLatestMessagePreview(channel, forceUpdate, lastMessage);
|
|
83
136
|
|
|
84
|
-
return {
|
|
137
|
+
return { latestMessagePreview, muted, unread };
|
|
85
138
|
};
|
package/src/version.json
CHANGED