react-native-navigation的迁移库

CommandsObserver.ts 764B

12345678910111213141516171819202122
  1. import { EventSubscription } from '../interfaces/EventSubscription';
  2. import { UniqueIdProvider } from '../adapters/UniqueIdProvider';
  3. export type CommandsListener = (name: string, params: Record<string, any>) => void;
  4. export class CommandsObserver {
  5. private listeners: Record<string, CommandsListener> = {};
  6. constructor(private uniqueIdProvider: UniqueIdProvider) {}
  7. public register(listener: CommandsListener): EventSubscription {
  8. const id = this.uniqueIdProvider.generate();
  9. this.listeners[id] = listener;
  10. return {
  11. remove: () => delete this.listeners[id]
  12. };
  13. }
  14. public notify(commandName: string, params: Record<string, any>): void {
  15. Object.values(this.listeners).forEach((listener) => listener(commandName, params));
  16. }
  17. }