UNPKG

@talkjs/react-native

Version:

Official TalkJS SDK for React Native

78 lines (76 loc) 2.23 kB
"use strict"; import { CONVERSATION_LIST, SELECT_CONVERSATION_EVENT } from './constants'; import { Subscription } from './EventSubscription'; export class TalkHandlers { #subscriptions; #handlers; #onSelectConversationSubscription; #injectJavaScript; constructor(injectJavaScript) { this.#handlers = {}; this.#subscriptions = {}; this.#injectJavaScript = injectJavaScript; } off(event) { const subscription = this.#subscriptions[event]; if (subscription) { subscription.unsubscribe(); } } add(event, object, handler) { const subscription = new Subscription(this.#injectJavaScript); this.#subscriptions[event] = subscription; const variableName = subscription._variableName; this.#handlers[variableName] = handler; this.#injectJavaScript(` ${variableName} = ${object}.${event}( (eventObj) => sendToReactNative("${event}", {id: "${variableName}", eventObj}) ); true; `); return subscription; } addOnSelectConversation(handler) { this.#onSelectConversationSubscription?.unsubscribe(); this.#onSelectConversationSubscription = new Subscription(this.#injectJavaScript); const variableName = this.#onSelectConversationSubscription._variableName; this.#handlers[variableName] = handler; this.#injectJavaScript(` ${variableName} = ${CONVERSATION_LIST}.onSelectConversation((eventObj) => { eventObj.preventDefault(); // Deselect the selected conversation. ${CONVERSATION_LIST}.select(null); sendToReactNative( '${SELECT_CONVERSATION_EVENT}', {id: "${variableName}", eventObj} ); }); true; `); } process(data) { const { id, eventObj } = data; this.#handlers[id](eventObj); } } export class CustomHandlers { #handlers; constructor() { this.#handlers = {}; } process(event, data) { const handlers = this.#handlers[event] ?? []; handlers.forEach(handler => handler(data)); } add(event, handler) { if (event in this.#handlers) { this.#handlers[event].push(handler); } else { this.#handlers[event] = [handler]; } } } //# sourceMappingURL=Handlers.js.map