@sendbird/uikit-chat-hooks
Version:
A set of React hooks for integrating Sendbird chat functionality into your React app.
38 lines • 1.64 kB
JavaScript
import { useEffect, useLayoutEffect, useRef } from 'react';
import { GroupChannelHandler } from '@sendbird/chat/groupChannel';
import { OpenChannelHandler } from '@sendbird/chat/openChannel';
/**
* @deprecated This hook is deprecated and will be replaced by the '@sendbird/uikit-tools' package.
* */
export const useChannelHandler = (sdk, handlerId, hookHandler, type = 'group') => {
const handlerRef = useRef(hookHandler);
useLayoutEffect(() => {
handlerRef.current = hookHandler;
});
useEffect(() => {
const handlerMapper = handler => {
const handlerKeys = Object.keys(handler);
handlerKeys.forEach(key => {
// @ts-ignore
handler[key] = (...args) => {
var _handlerRef$current, _handlerRef$current$k;
return (_handlerRef$current = handlerRef.current) === null || _handlerRef$current === void 0 || (_handlerRef$current$k = _handlerRef$current[key]) === null || _handlerRef$current$k === void 0 ? void 0 : _handlerRef$current$k.call(_handlerRef$current, ...args);
};
});
return handler;
};
if (type === 'group') {
sdk.groupChannel.addGroupChannelHandler(handlerId, handlerMapper(new GroupChannelHandler()));
} else if (type === 'open') {
sdk.openChannel.addOpenChannelHandler(handlerId, handlerMapper(new OpenChannelHandler()));
}
return () => {
if (type === 'group') {
sdk.groupChannel.removeGroupChannelHandler(handlerId);
} else if (type === 'open') {
sdk.openChannel.removeOpenChannelHandler(handlerId);
}
};
}, [sdk, handlerId]);
};
//# sourceMappingURL=useChannelHandler.js.map