@sendbird/uikit-chat-hooks
Version:
A set of React hooks for integrating Sendbird chat functionality into your React app.
105 lines (103 loc) • 4.08 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useGroupChannelListWithQuery = void 0;
var _react = require("react");
var _groupChannel = require("@sendbird/chat/groupChannel");
var _uikitUtils = require("@sendbird/uikit-utils");
var _useAppFeatures = require("../../common/useAppFeatures");
var _useChannelHandler = require("../../handler/useChannelHandler");
var _reducer = require("./reducer");
const createGroupChannelListQuery = (sdk, queryCreator) => {
const passedQuery = queryCreator === null || queryCreator === void 0 ? void 0 : queryCreator();
if (passedQuery) return passedQuery;
return sdk.groupChannel.createMyGroupChannelListQuery({
includeEmpty: false,
limit: 20,
order: _groupChannel.GroupChannelListOrder.LATEST_LAST_MESSAGE
});
};
/**
* @deprecated This hook is deprecated and will be replaced by the '@sendbird/uikit-tools' package.
* */
const useGroupChannelListWithQuery = (sdk, userId, options) => {
const {
deliveryReceiptEnabled
} = (0, _useAppFeatures.useAppFeatures)(sdk);
const queryRef = (0, _react.useRef)();
const handlerId = (0, _uikitUtils.useUniqHandlerId)('useGroupChannelListWithQuery');
const {
loading,
groupChannels,
refreshing,
updateChannels,
appendChannels,
deleteChannels,
updateRefreshing,
updateLoading,
updateOrder
} = (0, _reducer.useGroupChannelListReducer)();
const updateChannelsAndMarkAsDelivered = channels => {
updateChannels(channels);
if (deliveryReceiptEnabled) (0, _uikitUtils.confirmAndMarkAsDelivered)(channels);
};
const init = (0, _uikitUtils.useFreshCallback)(async uid => {
if (uid) {
var _queryRef$current, _queryRef$current2;
queryRef.current = createGroupChannelListQuery(sdk, options === null || options === void 0 ? void 0 : options.queryCreator);
updateOrder((_queryRef$current = queryRef.current) === null || _queryRef$current === void 0 ? void 0 : _queryRef$current.order);
if ((_queryRef$current2 = queryRef.current) !== null && _queryRef$current2 !== void 0 && _queryRef$current2.hasNext) {
const channels = await queryRef.current.next();
appendChannels(channels, true);
if (deliveryReceiptEnabled) (0, _uikitUtils.confirmAndMarkAsDelivered)(channels);
}
}
});
(0, _uikitUtils.useAsyncEffect)(async () => {
updateLoading(true);
await init(userId);
updateLoading(false);
}, [userId]);
(0, _useChannelHandler.useChannelHandler)(sdk, handlerId, {
onChannelChanged: channel => updateChannels([channel]),
onChannelFrozen: channel => updateChannels([channel]),
onChannelUnfrozen: channel => updateChannels([channel]),
onChannelMemberCountChanged: channels => updateChannels(channels),
onChannelDeleted: url => deleteChannels([url]),
onUserJoined: channel => updateChannels([channel]),
onUserLeft: (channel, user) => {
const isMe = user.userId === userId;
if (isMe) deleteChannels([channel.url]);else updateChannels([channel]);
},
onUserBanned(channel, user) {
const isMe = user.userId === userId;
if (isMe) deleteChannels([channel.url]);else updateChannels([channel]);
},
onMessageReceived(channel) {
updateChannelsAndMarkAsDelivered([channel]);
}
});
const refresh = (0, _uikitUtils.useFreshCallback)(async () => {
updateRefreshing(true);
await init(userId);
updateRefreshing(false);
});
const next = (0, _uikitUtils.useFreshCallback)(async () => {
var _queryRef$current3;
if ((_queryRef$current3 = queryRef.current) !== null && _queryRef$current3 !== void 0 && _queryRef$current3.hasNext) {
const channels = await queryRef.current.next();
appendChannels(channels, false);
if (deliveryReceiptEnabled) (0, _uikitUtils.confirmAndMarkAsDelivered)(channels);
}
});
return {
loading,
groupChannels,
refresh,
refreshing,
next
};
};
exports.useGroupChannelListWithQuery = useGroupChannelListWithQuery;
//# sourceMappingURL=useGroupChannelListWithQuery.js.map