Skip to content

Instantly share code, notes, and snippets.

View brachi-wernick's full-sized avatar

Brachi Packter brachi-wernick

  • moonactive
  • Israel
View GitHub Profile
@brachi-wernick
brachi-wernick / windowBeforeUnload.ts
Last active February 25, 2019 10:46
how to register window:beforeunload event in ng5 and show browser confirmation
@HostListener('window:beforeunload', ['$event'])
unloadNotification($event: any) {
if (this.hasUnsavedData()) {
$event.returnValue =true;
}
}
@brachi-wernick
brachi-wernick / canDeactivateGuard.ts
Last active December 13, 2017 17:37
canDeactivateGuard-ng5
@Injectable()
export class CanDeactivateGuard implements CanDeactivate<UserFormComponent> {
canDeactivate(component: UserFormComponent): boolean {
if(component.hasUnsavedData()){
if (confirm("You have unsaved changes! If you leave, your changes will be lost.")) {
return true;
} else {
return false;
}
@brachi-wernick
brachi-wernick / routeConfig.ts
Last active December 13, 2017 17:34
route config with CanDeactivateGuard ng5
{path:'user/new',component:UserFormComponent,canDeactivate: [CanDeactivateGuard]}
@brachi-wernick
brachi-wernick / ComponentCanDeactivate.ts
Created December 13, 2017 17:43
ComponentCanDeactivate generic class to handle can deactivate
import {HostListener} from "@angular/core";
export abstract class ComponentCanDeactivate {
abstract canDeactivate(): boolean;
@HostListener('window:beforeunload', ['$event'])
unloadNotification($event: any) {
@brachi-wernick
brachi-wernick / FormCanDeactivate.ts
Created December 13, 2017 17:44
FormCanDeactivate
import {ComponentCanDeactivate} from '../can-deactivate/component-can-deactivate';
import {NgForm} from "@angular/forms";
export abstract class FormCanDeactivate extends ComponentCanDeactivate{
abstract get form():NgForm;
canDeactivate():boolean{
return this.form.submitted || !this.form.dirty
}
@brachi-wernick
brachi-wernick / CanDeactivateGuard.ts
Created December 13, 2017 17:47
CanDeactivateGuard deneric
@Injectable()
export class CanDeactivateGuard implements CanDeactivate<ComponentCanDeactivate> {
canDeactivate(component: ComponentCanDeactivate): boolean {
if(!component.canDeactivate()){
if (confirm("You have unsaved changes! If you leave, your changes will be lost.")) {
return true;
} else {
return false;
}
@brachi-wernick
brachi-wernick / multi-select.html
Created December 21, 2017 21:06
wrap multi select html
<p-listbox *ngIf="!dropdownButton"
[disabled]="disabled"
[options]="options"
[ngModel]="selectedItems"
(onChange)="onValueChange($event.value)"
[multiple]="true"
[checkbox]="true"
[filter]="filter"
[showToggleAll]="showToggleAll"
[metaKeySelection]="false">
@Directive({
selector: '[requiredIf]',
providers: [
{provide: NG_VALIDATORS,useExisting:RequiredIfDirective, multi: true}
]
})
export class RequiredIfDirective implements Validator {
@Input("requiredIf")
requiredIf: boolean;
@brachi-wernick
brachi-wernick / validator.ts
Created December 28, 2017 17:07
validator.ts
export interface Validator {
validate(c: AbstractControl): ValidationErrors | null;
registerOnValidatorChange?(fn: () => void): void;
}
@brachi-wernick
brachi-wernick / conditionValidation.ts
Created December 28, 2017 17:10
fire validation changed when input has changed
registerOnValidatorChange(fn: () => void): void { this._onChange = fn; }
private _onChange: () => void;
ngOnChanges(changes: SimpleChanges): void {
if ('requiredIf' in changes) {
if (this._onChange) this._onChange();
}