stream-chat-react-native-core
Version:
The official React Native and Expo components for Stream Chat, a service for building chat applications
187 lines • 5.08 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useChannelMessageDataState = exports.useChannelDataState = exports.channelInitialState = void 0;
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _react = require("react");
var channelInitialState = exports.channelInitialState = {
hasMore: true,
hasMoreNewer: false,
loading: false,
loadingMore: false,
loadingMoreRecent: false,
members: {},
messages: [],
pinnedMessages: [],
read: {},
targetedMessageId: undefined,
typing: {},
watcherCount: 0,
watchers: {}
};
var useChannelMessageDataState = channel => {
var _channel$state, _channel$state2;
var _useState = (0, _react.useState)({
hasMore: true,
hasMoreNewer: false,
loading: false,
loadingMore: false,
loadingMoreRecent: false,
messages: (channel == null || (_channel$state = channel.state) == null ? void 0 : _channel$state.messages) || [],
pinnedMessages: (channel == null || (_channel$state2 = channel.state) == null ? void 0 : _channel$state2.pinnedMessages) || [],
targetedMessageId: undefined
}),
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
state = _useState2[0],
setState = _useState2[1];
var copyMessagesStateFromChannel = (0, _react.useCallback)(channel => {
setState(prev => ({
...prev,
messages: [...channel.state.messages],
pinnedMessages: [...channel.state.pinnedMessages]
}));
}, []);
var loadInitialMessagesStateFromChannel = (0, _react.useCallback)((channel, hasMore) => {
setState(prev => ({
...prev,
hasMore,
loading: false,
messages: [...channel.state.messages],
pinnedMessages: [...channel.state.pinnedMessages]
}));
}, []);
var jumpToLatestMessage = (0, _react.useCallback)(() => {
setState(prev => ({
...prev,
hasMoreNewer: false,
loading: false,
targetedMessageId: undefined
}));
}, []);
var jumpToMessageFinished = (0, _react.useCallback)((hasMoreNewer, targetedMessageId) => {
setState(prev => ({
...prev,
hasMoreNewer,
loading: false,
targetedMessageId
}));
}, []);
var loadMoreFinished = (0, _react.useCallback)((hasMore, messages) => {
setState(prev => ({
...prev,
hasMore,
loadingMore: false,
messages
}));
}, []);
var setLoadingMore = (0, _react.useCallback)(loadingMore => {
setState(prev => ({
...prev,
loadingMore
}));
}, []);
var setLoadingMoreRecent = (0, _react.useCallback)(loadingMoreRecent => {
setState(prev => ({
...prev,
loadingMoreRecent
}));
}, []);
var setLoading = (0, _react.useCallback)(loading => {
setState(prev => ({
...prev,
loading
}));
}, []);
var loadMoreRecentFinished = (0, _react.useCallback)((hasMoreNewer, messages) => {
setState(prev => ({
...prev,
hasMoreNewer,
loadingMoreRecent: false,
messages
}));
}, []);
return {
copyMessagesStateFromChannel,
jumpToLatestMessage,
jumpToMessageFinished,
loadInitialMessagesStateFromChannel,
loadMoreFinished,
loadMoreRecentFinished,
setLoading,
setLoadingMore,
setLoadingMoreRecent,
state
};
};
exports.useChannelMessageDataState = useChannelMessageDataState;
var useChannelDataState = channel => {
var _useState3 = (0, _react.useState)({
members: channel.state.members,
read: channel.state.read,
typing: {},
watcherCount: 0,
watchers: {}
}),
_useState4 = (0, _slicedToArray2.default)(_useState3, 2),
state = _useState4[0],
setState = _useState4[1];
var initStateFromChannel = (0, _react.useCallback)(channel => {
setState({
...state,
members: {
...channel.state.members
},
read: {
...channel.state.read
},
typing: {
...channel.state.typing
},
watcherCount: channel.state.watcher_count,
watchers: {
...channel.state.watchers
}
});
}, [state]);
var copyStateFromChannel = (0, _react.useCallback)(channel => {
setState(prev => ({
...prev,
members: {
...channel.state.members
},
read: {
...channel.state.read
},
watcherCount: channel.state.watcher_count,
watchers: {
...channel.state.watchers
}
}));
}, []);
var setRead = (0, _react.useCallback)(channel => {
setState(prev => ({
...prev,
read: {
...channel.state.read
}
}));
}, []);
var setTyping = (0, _react.useCallback)(channel => {
setState(prev => ({
...prev,
typing: {
...channel.state.typing
}
}));
}, []);
return {
copyStateFromChannel,
initStateFromChannel,
setRead,
setTyping,
state
};
};
exports.useChannelDataState = useChannelDataState;
//# sourceMappingURL=useChannelDataState.js.map