36 lines
623 B
TypeScript
36 lines
623 B
TypeScript
type ProgressEvent = "start" | "done";
|
|
type Listener = (event: ProgressEvent) => void;
|
|
|
|
const listeners = new Set<Listener>();
|
|
let active = false;
|
|
|
|
function emit(event: ProgressEvent) {
|
|
listeners.forEach((listener) => listener(event));
|
|
}
|
|
|
|
export function subscribeNavigationProgress(listener: Listener) {
|
|
listeners.add(listener);
|
|
|
|
return () => {
|
|
listeners.delete(listener);
|
|
};
|
|
}
|
|
|
|
export function startNavigationProgress() {
|
|
if (active) {
|
|
return;
|
|
}
|
|
|
|
active = true;
|
|
emit("start");
|
|
}
|
|
|
|
export function completeNavigationProgress() {
|
|
if (!active) {
|
|
return;
|
|
}
|
|
|
|
active = false;
|
|
emit("done");
|
|
}
|