@adapty/capacitor
Version:
Official Adapty SDK for Capacitor
58 lines (57 loc) • 2.38 kB
TypeScript
import type { PluginListenerHandle } from '@capacitor/core';
import { LogContext } from '../shared/logger';
export interface CapacitorEventArg {
data: string;
}
export interface BaseEventConfig {
nativeEvent: string;
handlerName: string;
propertyMap?: {
[key: string]: string;
};
}
export interface HandlerData<THandler> {
handler: THandler;
config: BaseEventConfig;
onRequestClose: () => Promise<void>;
}
/**
* Base class for view event emitters that manages common event handling logic.
* Each event type can have only one handler - new handlers replace existing ones.
*/
export declare abstract class BaseViewEmitter<TEventHandlers extends Record<string, any>, TEventData> {
protected viewId: string;
protected eventListeners: Map<string, PluginListenerHandle>;
protected handlers: Map<keyof TEventHandlers, HandlerData<TEventHandlers[keyof TEventHandlers]>>;
constructor(viewId: string);
/**
* Abstract method to get event configuration for a handler
*/
protected abstract getEventConfig(event: keyof TEventHandlers): BaseEventConfig | undefined;
/**
* Abstract method to parse event data from JSON string
*/
protected abstract parseEventData(rawEventData: string, ctx: LogContext): TEventData;
/**
* Abstract method to get possible handlers for a native event
*/
protected abstract getPossibleHandlers(nativeEvent: string): (keyof TEventHandlers)[];
/**
* Abstract method to extract callback arguments for a specific handler
*/
protected abstract extractCallbackArgs(handlerName: keyof TEventHandlers, eventData: TEventData): unknown[];
/**
* Abstract method to get view ID from parsed event data
*/
protected abstract getEventViewId(eventData: TEventData): string | null;
/**
* Abstract method to check if handler should be called based on event data
*/
protected abstract shouldCallHandler(handlerName: keyof TEventHandlers, config: BaseEventConfig, eventData: TEventData): boolean;
/**
* Abstract method to get emitter name for error messages
*/
protected abstract getEmitterName(): string;
addListener(event: keyof TEventHandlers, callback: TEventHandlers[keyof TEventHandlers], onRequestClose: () => Promise<void>): Promise<PluginListenerHandle>;
removeAllListeners(): void;
}