1/**
2 * Copyright (c) Meta Platforms, Inc. and affiliates.
3 *
4 * This source code is licensed under the MIT license found in the
5 * LICENSE file in the root directory of this source tree.
6 *
7 * @format
8 */
9
10import {EmitterSubscription} from '../vendor/emitter/EventEmitter';
11
12export type Handle = number;
13
14export type SimpleTask = {
15  name: string;
16  gen: () => void;
17};
18export type PromiseTask = {
19  name: string;
20  gen: () => Promise<any>;
21};
22
23export interface InteractionManagerStatic {
24  Events: {
25    interactionStart: string;
26    interactionComplete: string;
27  };
28
29  /**
30   * Adds a listener to be invoked when events of the specified type are
31   * emitted. An optional calling context may be provided. The data arguments
32   * emitted will be passed to the listener function.
33   *
34   * @param eventType - Name of the event to listen to
35   * @param listener - Function to invoke when the specified event is
36   *   emitted
37   * @param context - Optional context object to use when invoking the
38   *   listener
39   */
40  addListener(
41    eventType: string,
42    listener: (...args: any[]) => any,
43    context?: any,
44  ): EmitterSubscription;
45
46  /**
47   * Schedule a function to run after all interactions have completed.
48   * Returns a cancellable
49   */
50  runAfterInteractions(task?: (() => any) | SimpleTask | PromiseTask): {
51    then: (onfulfilled?: () => any, onrejected?: () => any) => Promise<any>;
52    done: (...args: any[]) => any;
53    cancel: () => void;
54  };
55
56  /**
57   * Notify manager that an interaction has started.
58   */
59  createInteractionHandle(): Handle;
60
61  /**
62   * Notify manager that an interaction has completed.
63   */
64  clearInteractionHandle(handle: Handle): void;
65
66  /**
67   * A positive number will use setTimeout to schedule any tasks after
68   * the eventLoopRunningTime hits the deadline value, otherwise all
69   * tasks will be executed in one setImmediate batch (default).
70   */
71  setDeadline(deadline: number): void;
72}
73
74export const InteractionManager: InteractionManagerStatic;
75