Unsubs.ts
· 508 B · TypeScript
Originalformat
export type Unsub = (() => void) | Unsubs;
export class Unsubs {
private fns: Unsub[] = [];
public add(fn: Unsub): this {
this.fns.push(fn);
return this;
}
public unsub(): this {
this.fns.forEach((unsub) => {
if (typeof unsub === "function") {
unsub();
} else {
unsub.unsub();
}
});
return this;
}
public clear(): this {
this.fns = [];
return this;
}
}
| 1 | export type Unsub = (() => void) | Unsubs; |
| 2 | |
| 3 | export class Unsubs { |
| 4 | private fns: Unsub[] = []; |
| 5 | |
| 6 | public add(fn: Unsub): this { |
| 7 | this.fns.push(fn); |
| 8 | return this; |
| 9 | } |
| 10 | |
| 11 | public unsub(): this { |
| 12 | this.fns.forEach((unsub) => { |
| 13 | if (typeof unsub === "function") { |
| 14 | unsub(); |
| 15 | } else { |
| 16 | unsub.unsub(); |
| 17 | } |
| 18 | }); |
| 19 | return this; |
| 20 | } |
| 21 | |
| 22 | public clear(): this { |
| 23 | this.fns = []; |
| 24 | return this; |
| 25 | } |
| 26 | } |
unsubs.ts
· 443 B · TypeScript
Originalformat
/**
* https://github.com/Noah2610/i3-color-theme-editor/blob/master/src/util/unsubs.ts
*/
export interface Unsubs {
add(fn: () => void): void;
unsubAll(): void;
fns: (() => void)[];
}
export function createUnsubs(): Unsubs {
const fns: Unsubs["fns"] = [];
return {
add(fn) {
fns.push(fn);
},
unsubAll() {
fns.forEach((unsub) => unsub());
},
fns,
};
}
| 1 | /** |
| 2 | * https://github.com/Noah2610/i3-color-theme-editor/blob/master/src/util/unsubs.ts |
| 3 | */ |
| 4 | |
| 5 | export interface Unsubs { |
| 6 | add(fn: () => void): void; |
| 7 | unsubAll(): void; |
| 8 | fns: (() => void)[]; |
| 9 | } |
| 10 | |
| 11 | export function createUnsubs(): Unsubs { |
| 12 | const fns: Unsubs["fns"] = []; |
| 13 | |
| 14 | return { |
| 15 | add(fn) { |
| 16 | fns.push(fn); |
| 17 | }, |
| 18 | unsubAll() { |
| 19 | fns.forEach((unsub) => unsub()); |
| 20 | }, |
| 21 | fns, |
| 22 | }; |
| 23 | } |