react-native-thermal-pos-printer
Version:
React Native thermal printer package for POS systems supporting Xprinter and other popular brands
78 lines (77 loc) • 2.51 kB
JavaScript
"use strict";
import { NativeEventEmitter } from 'react-native';
import { PosPrinter } from "../utils/native.js";
export class PrinterEventManager {
static eventEmitter = new NativeEventEmitter(PosPrinter);
static listeners = new Map();
static addListener(event, callback) {
const eventName = event.toString();
if (!this.listeners.has(eventName)) {
this.listeners.set(eventName, []);
}
this.listeners.get(eventName).push(callback);
const subscription = this.eventEmitter.addListener(eventName, callback);
return () => {
subscription.remove();
const callbacks = this.listeners.get(eventName);
if (callbacks) {
const index = callbacks.indexOf(callback);
if (index > -1) {
callbacks.splice(index, 1);
}
}
};
}
static removeAllListeners(event) {
if (event) {
const eventName = event.toString();
this.eventEmitter.removeAllListeners(eventName);
this.listeners.delete(eventName);
} else {
Array.from(this.listeners.keys()).forEach(eventName => {
this.eventEmitter.removeAllListeners(eventName);
});
this.listeners.clear();
}
}
static emit(event, data) {
const eventName = event.toString();
const callbacks = this.listeners.get(eventName);
if (callbacks) {
callbacks.forEach(callback => callback(data));
}
}
static getListenerCount(event) {
if (event) {
const eventName = event.toString();
return this.listeners.get(eventName)?.length || 0;
}
return Array.from(this.listeners.values()).reduce((total, callbacks) => total + callbacks.length, 0);
}
static hasListeners(event) {
const eventName = event.toString();
return this.listeners.has(eventName) && this.listeners.get(eventName).length > 0;
}
static getActiveEvents() {
return Array.from(this.listeners.keys()).filter(eventName => this.listeners.get(eventName).length > 0);
}
static removeListener(event, callback) {
const eventName = event.toString();
const callbacks = this.listeners.get(eventName);
if (callbacks) {
const index = callbacks.indexOf(callback);
if (index > -1) {
callbacks.splice(index, 1);
return true;
}
}
return false;
}
static destroy() {
this.removeAllListeners();
Array.from(this.listeners.keys()).forEach(eventName => {
this.eventEmitter.removeAllListeners(eventName);
});
}
}
//# sourceMappingURL=PrinterEventManager.js.map