Use same lock values as mobile clients
[ProtonMail-WebClient.git] / packages / shared / lib / helpers / listeners.ts
blob52db402109708097217a132012d25932d4d56129
1 export type Listener<Arguments extends any[], Return> = (...args: Arguments) => Return;
3 export interface Listeners<Arguments extends any[], Return> {
4     notify: (...args: Arguments) => Return[];
5     subscribe: (listener: Listener<Arguments, Return>) => () => void;
6     clear: () => void;
7     length: () => number;
10 const createListeners = <Arguments extends any[], Return = void>(): Listeners<Arguments, Return> => {
11     let listeners: Listener<Arguments, Return>[] = [];
13     const notify = (...args: Arguments) => {
14         return listeners.map((listener) => {
15             return listener(...args);
16         });
17     };
19     const subscribe = (listener: Listener<Arguments, Return>) => {
20         listeners.push(listener);
21         return () => {
22             listeners.splice(listeners.indexOf(listener), 1);
23         };
24     };
26     const clear = () => {
27         listeners = [];
28     };
30     const length = () => listeners.length;
32     return {
33         notify,
34         subscribe,
35         clear,
36         length,
37     };
40 export default createListeners;