aboutsummaryrefslogtreecommitdiffstats
path: root/excalidraw-app/data/Locker.ts
blob: c99673e9478629029d5cd88bdf8daf1634ed227d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
export class Locker<T extends string> {
  private locks = new Map<T, true>();

  lock = (lockType: T) => {
    this.locks.set(lockType, true);
  };

  /** @returns whether no locks remaining */
  unlock = (lockType: T) => {
    this.locks.delete(lockType);
    return !this.isLocked();
  };

  /** @returns whether some (or specific) locks are present */
  isLocked(lockType?: T) {
    return lockType ? this.locks.has(lockType) : !!this.locks.size;
  }
}