stream-chat-react-native-core
Version:
The official React Native and Expo components for Stream Chat, a service for building chat applications
55 lines • 1.82 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useSyncClientEvents = useSyncClientEvents;
exports.useSyncClientEventsToChannel = useSyncClientEventsToChannel;
var _react = require("react");
var _shim = require("use-sync-external-store/shim");
var noop = () => {};
function useSyncClientEventsToChannel({
channel,
client,
selector,
stateChangeEventKeys = ['all']
}) {
var subscribe = (0, _react.useCallback)(onStoreChange => {
if (!client || !channel) {
return noop;
}
var subscriptions = stateChangeEventKeys.map(et => client.on(et, () => {
onStoreChange(selector(channel, client));
}));
return () => subscriptions.forEach(subscription => subscription.unsubscribe());
}, [channel, client, selector, stateChangeEventKeys]);
var getSnapshot = (0, _react.useCallback)(() => {
if (!client || !channel) {
return undefined;
}
var originalSnapshot = selector(channel, client);
return originalSnapshot;
}, [channel, client, selector]);
return (0, _shim.useSyncExternalStore)(subscribe, getSnapshot);
}
function useSyncClientEvents({
client,
selector,
stateChangeEventKeys = ['all']
}) {
var subscribe = (0, _react.useCallback)(onStoreChange => {
if (!client) {
return noop;
}
var subscriptions = stateChangeEventKeys.map(et => client.on(et, () => {
onStoreChange(selector(client));
}));
return () => subscriptions.forEach(subscription => subscription.unsubscribe());
}, [client, selector, stateChangeEventKeys]);
var getSnapshot = (0, _react.useCallback)(() => {
if (!client) {
return undefined;
}
return selector(client);
}, [client, selector]);
return (0, _shim.useSyncExternalStore)(subscribe, getSnapshot);
}
//# sourceMappingURL=useSyncClientEvents.js.map