@ngneat/dirty-check-forms
Version:
Detect Unsaved Changes in Angular Forms
22 lines • 3.42 kB
JavaScript
import { defer, of } from 'rxjs';
import { switchMap, take } from 'rxjs/operators';
import { isFunction, toObservable } from './utils/coercion';
export class DirtyCheckGuard {
canDeactivate(component, currentRoute) {
let dirty$;
const componentDirty = component.isDirty$;
if (isFunction(componentDirty)) {
dirty$ = defer(() => toObservable(componentDirty()));
}
else {
dirty$ = toObservable(componentDirty);
}
return dirty$.pipe(switchMap((isDirty) => {
if (isDirty === false) {
return of(true);
}
return toObservable(this.confirmChanges(currentRoute));
}), take(1));
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlydHktY2hlY2suZ3VhcmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2RpcnR5LWNoZWNrLWZvcm1zL3NyYy9saWIvZGlydHktY2hlY2suZ3VhcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLEtBQUssRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVqRCxPQUFPLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTVELE1BQU0sT0FBZ0IsZUFBZTtJQUNuQyxhQUFhLENBQ1gsU0FBeUIsRUFDekIsWUFBb0M7UUFFcEMsSUFBSSxNQUEyQixDQUFDO1FBQ2hDLE1BQU0sY0FBYyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUM7UUFFMUMsSUFBSSxVQUFVLENBQUMsY0FBYyxDQUFDLEVBQUU7WUFDOUIsTUFBTSxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ3REO2FBQU07WUFDTCxNQUFNLEdBQUcsWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1NBQ3ZDO1FBRUQsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUNoQixTQUFTLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUNwQixJQUFJLE9BQU8sS0FBSyxLQUFLLEVBQUU7Z0JBQ3JCLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ2pCO1lBQ0QsT0FBTyxZQUFZLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBQ3pELENBQUMsQ0FBQyxFQUNGLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FDUixDQUFDO0lBQ0osQ0FBQztDQUtGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgQ2FuRGVhY3RpdmF0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBkZWZlciwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHN3aXRjaE1hcCwgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IERpcnR5Q29tcG9uZW50IH0gZnJvbSAnLi9kaXJ0eS1jb21wb25lbnQnO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiwgdG9PYnNlcnZhYmxlIH0gZnJvbSAnLi91dGlscy9jb2VyY2lvbic7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBEaXJ0eUNoZWNrR3VhcmQgaW1wbGVtZW50cyBDYW5EZWFjdGl2YXRlPERpcnR5Q29tcG9uZW50PiB7XG4gIGNhbkRlYWN0aXZhdGUoXG4gICAgY29tcG9uZW50OiBEaXJ0eUNvbXBvbmVudCxcbiAgICBjdXJyZW50Um91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3RcbiAgKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgbGV0IGRpcnR5JDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgICBjb25zdCBjb21wb25lbnREaXJ0eSA9IGNvbXBvbmVudC5pc0RpcnR5JDtcblxuICAgIGlmIChpc0Z1bmN0aW9uKGNvbXBvbmVudERpcnR5KSkge1xuICAgICAgZGlydHkkID0gZGVmZXIoKCkgPT4gdG9PYnNlcnZhYmxlKGNvbXBvbmVudERpcnR5KCkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGlydHkkID0gdG9PYnNlcnZhYmxlKGNvbXBvbmVudERpcnR5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGlydHkkLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKGlzRGlydHkpID0+IHtcbiAgICAgICAgaWYgKGlzRGlydHkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgcmV0dXJuIG9mKHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0b09ic2VydmFibGUodGhpcy5jb25maXJtQ2hhbmdlcyhjdXJyZW50Um91dGUpKTtcbiAgICAgIH0pLFxuICAgICAgdGFrZSgxKVxuICAgICk7XG4gIH1cblxuICBhYnN0cmFjdCBjb25maXJtQ2hhbmdlcyhcbiAgICBjdXJyZW50Um91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3RcbiAgKTogT2JzZXJ2YWJsZTxib29sZWFuPiB8IGJvb2xlYW47XG59XG4iXX0=