@kovalenko/has-unsaved-data
Version:
Provides a router guard preventing route deactivation, if the component\`s method decorated with `@CheckUnsavedData()` returns `true`. Also it prevents the window to be unloaded.
17 lines • 3.89 kB
JavaScript
import { inject } from '@angular/core';
import { HasUnsavedDataConfirmService } from './confirm-service';
import { UNSAVED_DATA_CONFIG } from './unsaved-data.config';
export const hasUnsavedDataGuard = component => {
const config = inject(UNSAVED_DATA_CONFIG);
const confirm = inject(HasUnsavedDataConfirmService);
const methodName = component.constructor.prototype.____UnsavedDataChecker____;
console.log('called', methodName);
if (component?.[methodName] && component[methodName]()) {
const params = component.____UnsavedDataOptionsHandler____ ? component.____UnsavedDataOptionsHandler____.call(component, component) : null;
return confirm.confirm(params?.message ?? config.message ?? '', params?.title ?? config.title, params?.ok ?? config.ok, params?.cancel ?? config.cancel).then(v => !!v);
}
else {
return true;
}
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFzLXVuc2F2ZWQtZGF0YS5ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2hhcy11bnNhdmVkLWRhdGEvc3JjL2xpYi9oYXMtdW5zYXZlZC1kYXRhLmd1YXJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFckMsT0FBTyxFQUFDLDRCQUE0QixFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFFL0QsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFMUQsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQXlCLFNBQVMsQ0FBQyxFQUFFO0lBQ25FLE1BQU0sTUFBTSxHQUFzQixNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUM5RCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsNEJBQTRCLENBQUMsQ0FBQztJQUVyRCxNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQywwQkFBMEIsQ0FBQztJQUU5RSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUVsQyxJQUFJLFNBQVMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFO1FBQ3RELE1BQU0sTUFBTSxHQUFzQixTQUFTLENBQUMsaUNBQWlDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxpQ0FBaUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDOUosT0FBUSxPQUFPLENBQUMsT0FBTyxDQUNyQixNQUFNLEVBQUUsT0FBTyxJQUFJLE1BQU0sQ0FBQyxPQUFPLElBQUksRUFBRSxFQUN2QyxNQUFNLEVBQUUsS0FBSyxJQUFJLE1BQU0sQ0FBQyxLQUFLLEVBQzdCLE1BQU0sRUFBRSxFQUFFLElBQUksTUFBTSxDQUFDLEVBQUUsRUFDdkIsTUFBTSxFQUFFLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxDQUNYLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ3ZDO1NBQU07UUFDTCxPQUFPLElBQUksQ0FBQztLQUNiO0FBQ0gsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtpbmplY3R9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDYW5EZWFjdGl2YXRlRm59IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge0hhc1Vuc2F2ZWREYXRhQ29uZmlybVNlcnZpY2V9IGZyb20gJy4vY29uZmlybS1zZXJ2aWNlJztcbmltcG9ydCB7VW5zYXZlZERhdGFDb25maWd9IGZyb20gJy4vdW5zYXZlZC1kYXRhLWNvbmZpZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHtVTlNBVkVEX0RBVEFfQ09ORklHfSBmcm9tICcuL3Vuc2F2ZWQtZGF0YS5jb25maWcnO1xuXG5leHBvcnQgY29uc3QgaGFzVW5zYXZlZERhdGFHdWFyZDogQ2FuRGVhY3RpdmF0ZUZuPGFueT4gPSBjb21wb25lbnQgPT4ge1xuICBjb25zdCBjb25maWc6IFVuc2F2ZWREYXRhQ29uZmlnID0gaW5qZWN0KFVOU0FWRURfREFUQV9DT05GSUcpO1xuICBjb25zdCBjb25maXJtID0gaW5qZWN0KEhhc1Vuc2F2ZWREYXRhQ29uZmlybVNlcnZpY2UpO1xuXG4gIGNvbnN0IG1ldGhvZE5hbWUgPSBjb21wb25lbnQuY29uc3RydWN0b3IucHJvdG90eXBlLl9fX19VbnNhdmVkRGF0YUNoZWNrZXJfX19fO1xuXG4gIGNvbnNvbGUubG9nKCdjYWxsZWQnLCBtZXRob2ROYW1lKTtcblxuICBpZiAoY29tcG9uZW50Py5bbWV0aG9kTmFtZV0gJiYgY29tcG9uZW50W21ldGhvZE5hbWVdKCkpIHtcbiAgICBjb25zdCBwYXJhbXM6IFVuc2F2ZWREYXRhQ29uZmlnID0gY29tcG9uZW50Ll9fX19VbnNhdmVkRGF0YU9wdGlvbnNIYW5kbGVyX19fXyA/IGNvbXBvbmVudC5fX19fVW5zYXZlZERhdGFPcHRpb25zSGFuZGxlcl9fX18uY2FsbChjb21wb25lbnQsIGNvbXBvbmVudCkgOiBudWxsO1xuICAgIHJldHVybiAoY29uZmlybS5jb25maXJtKFxuICAgICAgcGFyYW1zPy5tZXNzYWdlID8/IGNvbmZpZy5tZXNzYWdlID8/ICcnLFxuICAgICAgcGFyYW1zPy50aXRsZSA/PyBjb25maWcudGl0bGUsXG4gICAgICBwYXJhbXM/Lm9rID8/IGNvbmZpZy5vayxcbiAgICAgIHBhcmFtcz8uY2FuY2VsID8/IGNvbmZpZy5jYW5jZWwsXG4gICAgKSBhcyBQcm9taXNlPGJvb2xlYW4+KS50aGVuKHYgPT4gISF2KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcbiJdfQ==