angular-base-lib 18.0.1 → 18.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,17 +1,24 @@
1
- import { Directive, EventEmitter, Input, Output } from '@angular/core';
1
+ import { Directive, Input, output } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
3
  export class BaseControlValueAccessor {
4
4
  constructor() {
5
- this.valueChanged = new EventEmitter();
5
+ this.valueChanged = output();
6
6
  this.onChange = null;
7
7
  this.onTouched = null;
8
+ this.disabled = false;
8
9
  }
9
10
  get value() {
10
11
  return this._value;
11
12
  }
12
13
  set value(value) {
13
- this.markAsTouched();
14
+ if (this.disabled) {
15
+ return;
16
+ }
17
+ if (this._value === value) {
18
+ return;
19
+ }
14
20
  this._value = value;
21
+ this.onTouched?.();
15
22
  this.onChange?.(this._value);
16
23
  this.valueChanged.emit(this._value);
17
24
  }
@@ -24,19 +31,15 @@ export class BaseControlValueAccessor {
24
31
  registerOnTouched(onTouched) {
25
32
  this.onTouched = onTouched;
26
33
  }
27
- markAsTouched() {
28
- if (this.onTouched) {
29
- this.onTouched();
30
- }
34
+ setDisabledState(isDisabled) {
35
+ this.disabled = isDisabled;
31
36
  }
32
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: BaseControlValueAccessor, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
33
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0", type: BaseControlValueAccessor, inputs: { value: "value" }, outputs: { valueChanged: "valueChanged" }, ngImport: i0 }); }
37
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.7", ngImport: i0, type: BaseControlValueAccessor, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
38
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.7", type: BaseControlValueAccessor, inputs: { value: "value" }, outputs: { valueChanged: "valueChanged" }, ngImport: i0 }); }
34
39
  }
35
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: BaseControlValueAccessor, decorators: [{
40
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.7", ngImport: i0, type: BaseControlValueAccessor, decorators: [{
36
41
  type: Directive
37
- }], propDecorators: { valueChanged: [{
38
- type: Output
39
- }], value: [{
42
+ }], propDecorators: { value: [{
40
43
  type: Input
41
44
  }] } });
42
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1jb250cm9sLXZhbHVlLWFjY2Vzc29yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWJhc2Uvc3JjL2xpYi9iYXNlL2Jhc2UtY29udHJvbC12YWx1ZS1hY2Nlc3Nvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUl2RSxNQUFNLE9BQWdCLHdCQUF3QjtJQUQ5QztRQUVZLGlCQUFZLEdBQW9CLElBQUksWUFBWSxFQUFLLENBQUM7UUFFaEUsYUFBUSxHQUFrQyxJQUFJLENBQUM7UUFDL0MsY0FBUyxHQUF3QixJQUFJLENBQUM7S0FnQ3ZDO0lBNUJDLElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBRUQsSUFBYSxLQUFLLENBQUMsS0FBUTtRQUN6QixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFRO1FBQ2pCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxRQUFnQztRQUMvQyxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztJQUMzQixDQUFDO0lBRUQsaUJBQWlCLENBQUMsU0FBdUI7UUFDdkMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7SUFDN0IsQ0FBQztJQUVELGFBQWE7UUFDWCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDbkIsQ0FBQztJQUNILENBQUM7OEdBbkNtQix3QkFBd0I7a0dBQXhCLHdCQUF3Qjs7MkZBQXhCLHdCQUF3QjtrQkFEN0MsU0FBUzs4QkFFRSxZQUFZO3NCQUFyQixNQUFNO2dCQVdNLEtBQUs7c0JBQWpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IERpcmVjdGl2ZSwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBWYWx1ZUNoYW5nZUNhbGxiYWNrIH0gZnJvbSAnLi4vdHlwZXMvdmFsdWUtY2hhbmdlLWNhbGxiYWNrLnR5cGUnO1xuXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlQ29udHJvbFZhbHVlQWNjZXNzb3I8VCA9IHN0cmluZz4gaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxUPiA9IG5ldyBFdmVudEVtaXR0ZXI8VD4oKTtcblxuICBvbkNoYW5nZTogVmFsdWVDaGFuZ2VDYWxsYmFjazxUPiB8IG51bGwgPSBudWxsO1xuICBvblRvdWNoZWQ6IFZvaWRGdW5jdGlvbiB8IG51bGwgPSBudWxsO1xuXG4gIHByb3RlY3RlZCBfdmFsdWUhOiBUO1xuXG4gIGdldCB2YWx1ZSgpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgdmFsdWUodmFsdWU6IFQpIHtcbiAgICB0aGlzLm1hcmtBc1RvdWNoZWQoKTtcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMub25DaGFuZ2U/Lih0aGlzLl92YWx1ZSk7XG4gICAgdGhpcy52YWx1ZUNoYW5nZWQuZW1pdCh0aGlzLl92YWx1ZSk7XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBUKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShvbkNoYW5nZTogVmFsdWVDaGFuZ2VDYWxsYmFjazxUPik6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSBvbkNoYW5nZTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKG9uVG91Y2hlZDogVm9pZEZ1bmN0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBvblRvdWNoZWQ7XG4gIH1cblxuICBtYXJrQXNUb3VjaGVkKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm9uVG91Y2hlZCkge1xuICAgICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1jb250cm9sLXZhbHVlLWFjY2Vzc29yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWJhc2Uvc3JjL2xpYi9iYXNlL2Jhc2UtY29udHJvbC12YWx1ZS1hY2Nlc3Nvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBSXpELE1BQU0sT0FBZ0Isd0JBQXdCO0lBRDlDO1FBRUUsaUJBQVksR0FBRyxNQUFNLEVBQUssQ0FBQztRQUUzQixhQUFRLEdBQWtDLElBQUksQ0FBQztRQUMvQyxjQUFTLEdBQXdCLElBQUksQ0FBQztRQUV0QyxhQUFRLEdBQUcsS0FBSyxDQUFDO0tBcUNsQjtJQWxDQyxJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUVELElBQWEsS0FBSyxDQUFDLEtBQVE7UUFDekIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEIsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDMUIsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNwQixJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQVE7UUFDakIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDckIsQ0FBQztJQUVELGdCQUFnQixDQUFDLFFBQWdDO1FBQy9DLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0lBQzNCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxTQUF1QjtRQUN2QyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztJQUM3QixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsVUFBbUI7UUFDbEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7SUFDN0IsQ0FBQzs4R0ExQ21CLHdCQUF3QjtrR0FBeEIsd0JBQXdCOzsyRkFBeEIsd0JBQXdCO2tCQUQ3QyxTQUFTOzhCQWNLLEtBQUs7c0JBQWpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IERpcmVjdGl2ZSwgSW5wdXQsIG91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVmFsdWVDaGFuZ2VDYWxsYmFjayB9IGZyb20gJy4uL3R5cGVzL3ZhbHVlLWNoYW5nZS1jYWxsYmFjay50eXBlJztcblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZUNvbnRyb2xWYWx1ZUFjY2Vzc29yPFQgPSBzdHJpbmc+IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICB2YWx1ZUNoYW5nZWQgPSBvdXRwdXQ8VD4oKTtcblxuICBvbkNoYW5nZTogVmFsdWVDaGFuZ2VDYWxsYmFjazxUPiB8IG51bGwgPSBudWxsO1xuICBvblRvdWNoZWQ6IFZvaWRGdW5jdGlvbiB8IG51bGwgPSBudWxsO1xuXG4gIGRpc2FibGVkID0gZmFsc2U7XG4gIHByb3RlY3RlZCBfdmFsdWUhOiBUO1xuXG4gIGdldCB2YWx1ZSgpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgdmFsdWUodmFsdWU6IFQpIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl92YWx1ZSA9PT0gdmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMub25Ub3VjaGVkPy4oKTtcbiAgICB0aGlzLm9uQ2hhbmdlPy4odGhpcy5fdmFsdWUpO1xuICAgIHRoaXMudmFsdWVDaGFuZ2VkLmVtaXQodGhpcy5fdmFsdWUpO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogVCk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2Uob25DaGFuZ2U6IFZhbHVlQ2hhbmdlQ2FsbGJhY2s8VD4pOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gb25DaGFuZ2U7XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChvblRvdWNoZWQ6IFZvaWRGdW5jdGlvbik6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gb25Ub3VjaGVkO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cbn1cbiJdfQ==
@@ -1,19 +1,26 @@
1
- import { Directive, effect, EventEmitter, model, Output } from '@angular/core';
1
+ import { Directive, model, signal } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
3
  export class SignalBaseControlValueAccessor {
4
4
  constructor() {
5
- this.valueChanged = new EventEmitter();
6
5
  this.onChange = null;
7
6
  this.onTouched = null;
8
7
  this.value = model();
9
- effect(() => {
10
- const newValue = this.value();
11
- if (newValue) {
12
- this.markAsTouched();
13
- this.onChange?.(newValue);
14
- this.valueChanged.emit(newValue);
15
- }
16
- });
8
+ this.disabled = signal(false);
9
+ }
10
+ /**
11
+ * Function that will be called by the input to update the value of the form-control and the model
12
+ * @param value The new input value passed by $event in the template
13
+ */
14
+ valueChanged(value) {
15
+ if (this.disabled()) {
16
+ return;
17
+ }
18
+ if (value === this.value()) {
19
+ return;
20
+ }
21
+ this.onTouched?.();
22
+ this.onChange?.(value);
23
+ this.value.set(value);
17
24
  }
18
25
  writeValue(value) {
19
26
  this.value.set(value);
@@ -24,17 +31,13 @@ export class SignalBaseControlValueAccessor {
24
31
  registerOnTouched(onTouched) {
25
32
  this.onTouched = onTouched;
26
33
  }
27
- markAsTouched() {
28
- if (this.onTouched) {
29
- this.onTouched();
30
- }
34
+ setDisabledState(disabled) {
35
+ this.disabled.set(disabled);
31
36
  }
32
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: SignalBaseControlValueAccessor, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
33
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.0.0", type: SignalBaseControlValueAccessor, inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChanged: "valueChanged", value: "valueChange" }, ngImport: i0 }); }
37
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.7", ngImport: i0, type: SignalBaseControlValueAccessor, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
38
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.0.7", type: SignalBaseControlValueAccessor, inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, ngImport: i0 }); }
34
39
  }
35
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: SignalBaseControlValueAccessor, decorators: [{
40
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.7", ngImport: i0, type: SignalBaseControlValueAccessor, decorators: [{
36
41
  type: Directive
37
- }], ctorParameters: () => [], propDecorators: { valueChanged: [{
38
- type: Output
39
- }] } });
40
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmFsLWJhc2UtY29udHJvbC12YWx1ZS1hY2Nlc3Nvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1iYXNlL3NyYy9saWIvYmFzZS9zaWduYWwtYmFzZS1jb250cm9sLXZhbHVlLWFjY2Vzc29yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUkvRSxNQUFNLE9BQWdCLDhCQUE4QjtJQVFsRDtRQVBVLGlCQUFZLEdBQW9CLElBQUksWUFBWSxFQUFLLENBQUM7UUFFaEUsYUFBUSxHQUFrQyxJQUFJLENBQUM7UUFDL0MsY0FBUyxHQUF3QixJQUFJLENBQUM7UUFFNUIsVUFBSyxHQUFHLEtBQUssRUFBSyxDQUFDO1FBRzNCLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDVixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDOUIsSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDYixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDMUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbkMsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFRO1FBQ2pCLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxRQUFnQztRQUMvQyxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztJQUMzQixDQUFDO0lBRUQsaUJBQWlCLENBQUMsU0FBdUI7UUFDdkMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7SUFDN0IsQ0FBQztJQUVELGFBQWE7UUFDWCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDbkIsQ0FBQztJQUNILENBQUM7OEdBbkNtQiw4QkFBOEI7a0dBQTlCLDhCQUE4Qjs7MkZBQTlCLDhCQUE4QjtrQkFEbkQsU0FBUzt3REFFRSxZQUFZO3NCQUFyQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBEaXJlY3RpdmUsIGVmZmVjdCwgRXZlbnRFbWl0dGVyLCBtb2RlbCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBWYWx1ZUNoYW5nZUNhbGxiYWNrIH0gZnJvbSAnLi4vdHlwZXMvdmFsdWUtY2hhbmdlLWNhbGxiYWNrLnR5cGUnO1xuXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTaWduYWxCYXNlQ29udHJvbFZhbHVlQWNjZXNzb3I8VCA9IHN0cmluZz4gaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxUPiA9IG5ldyBFdmVudEVtaXR0ZXI8VD4oKTtcblxuICBvbkNoYW5nZTogVmFsdWVDaGFuZ2VDYWxsYmFjazxUPiB8IG51bGwgPSBudWxsO1xuICBvblRvdWNoZWQ6IFZvaWRGdW5jdGlvbiB8IG51bGwgPSBudWxsO1xuXG4gIHByb3RlY3RlZCB2YWx1ZSA9IG1vZGVsPFQ+KCk7XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXMudmFsdWUoKTtcbiAgICAgIGlmIChuZXdWYWx1ZSkge1xuICAgICAgICB0aGlzLm1hcmtBc1RvdWNoZWQoKTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZT8uKG5ld1ZhbHVlKTtcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZWQuZW1pdChuZXdWYWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBUKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZS5zZXQodmFsdWUpO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShvbkNoYW5nZTogVmFsdWVDaGFuZ2VDYWxsYmFjazxUPik6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSBvbkNoYW5nZTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKG9uVG91Y2hlZDogVm9pZEZ1bmN0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBvblRvdWNoZWQ7XG4gIH1cblxuICBtYXJrQXNUb3VjaGVkKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm9uVG91Y2hlZCkge1xuICAgICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
42
+ }] });
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmFsLWJhc2UtY29udHJvbC12YWx1ZS1hY2Nlc3Nvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1iYXNlL3NyYy9saWIvYmFzZS9zaWduYWwtYmFzZS1jb250cm9sLXZhbHVlLWFjY2Vzc29yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFJekQsTUFBTSxPQUFnQiw4QkFBOEI7SUFEcEQ7UUFFVSxhQUFRLEdBQWtDLElBQUksQ0FBQztRQUMvQyxjQUFTLEdBQXdCLElBQUksQ0FBQztRQUU5QyxVQUFLLEdBQUcsS0FBSyxFQUFLLENBQUM7UUFFVixhQUFRLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBbUNuQztJQWpDQzs7O09BR0c7SUFDSCxZQUFZLENBQUMsS0FBUTtRQUNuQixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO1lBQ3BCLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDM0IsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFRO1FBQ2pCLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxRQUFnQztRQUMvQyxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztJQUMzQixDQUFDO0lBRUQsaUJBQWlCLENBQUMsU0FBdUI7UUFDdkMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7SUFDN0IsQ0FBQztJQUVELGdCQUFnQixDQUFDLFFBQWlCO1FBQ2hDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzlCLENBQUM7OEdBeENtQiw4QkFBOEI7a0dBQTlCLDhCQUE4Qjs7MkZBQTlCLDhCQUE4QjtrQkFEbkQsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRGlyZWN0aXZlLCBtb2RlbCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBWYWx1ZUNoYW5nZUNhbGxiYWNrIH0gZnJvbSAnLi4vdHlwZXMvdmFsdWUtY2hhbmdlLWNhbGxiYWNrLnR5cGUnO1xuXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTaWduYWxCYXNlQ29udHJvbFZhbHVlQWNjZXNzb3I8VCA9IHN0cmluZz4gaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIHByaXZhdGUgb25DaGFuZ2U6IFZhbHVlQ2hhbmdlQ2FsbGJhY2s8VD4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBvblRvdWNoZWQ6IFZvaWRGdW5jdGlvbiB8IG51bGwgPSBudWxsO1xuXG4gIHZhbHVlID0gbW9kZWw8VD4oKTtcblxuICByZWFkb25seSBkaXNhYmxlZCA9IHNpZ25hbChmYWxzZSk7XG5cbiAgLyoqXG4gICAqIEZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgYnkgdGhlIGlucHV0IHRvIHVwZGF0ZSB0aGUgdmFsdWUgb2YgdGhlIGZvcm0tY29udHJvbCBhbmQgdGhlIG1vZGVsXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgbmV3IGlucHV0IHZhbHVlIHBhc3NlZCBieSAkZXZlbnQgaW4gdGhlIHRlbXBsYXRlXG4gICAqL1xuICB2YWx1ZUNoYW5nZWQodmFsdWU6IFQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlID09PSB0aGlzLnZhbHVlKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm9uVG91Y2hlZD8uKCk7XG4gICAgdGhpcy5vbkNoYW5nZT8uKHZhbHVlKTtcbiAgICB0aGlzLnZhbHVlLnNldCh2YWx1ZSk7XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBUKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZS5zZXQodmFsdWUpO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShvbkNoYW5nZTogVmFsdWVDaGFuZ2VDYWxsYmFjazxUPik6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSBvbkNoYW5nZTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKG9uVG91Y2hlZDogVm9pZEZ1bmN0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBvblRvdWNoZWQ7XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGRpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZC5zZXQoZGlzYWJsZWQpO1xuICB9XG59XG4iXX0=
@@ -8,10 +8,10 @@ export class BackButtonDirective {
8
8
  onClick() {
9
9
  this.navigation.back();
10
10
  }
11
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: BackButtonDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
12
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0", type: BackButtonDirective, isStandalone: true, selector: "[ngLibBackButton]", host: { listeners: { "click": "onClick()" } }, ngImport: i0 }); }
11
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.7", ngImport: i0, type: BackButtonDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
12
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.7", type: BackButtonDirective, isStandalone: true, selector: "[ngLibBackButton]", host: { listeners: { "click": "onClick()" } }, ngImport: i0 }); }
13
13
  }
14
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: BackButtonDirective, decorators: [{
14
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.7", ngImport: i0, type: BackButtonDirective, decorators: [{
15
15
  type: Directive,
16
16
  args: [{
17
17
  selector: '[ngLibBackButton]',
@@ -25,10 +25,10 @@ export class NavigationService {
25
25
  this.router.navigate([fallbackRoute]);
26
26
  }
27
27
  }
28
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: NavigationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
29
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: NavigationService, providedIn: 'root' }); }
28
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.7", ngImport: i0, type: NavigationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
29
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.7", ngImport: i0, type: NavigationService, providedIn: 'root' }); }
30
30
  }
31
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: NavigationService, decorators: [{
31
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.7", ngImport: i0, type: NavigationService, decorators: [{
32
32
  type: Injectable,
33
33
  args: [{ providedIn: 'root' }]
34
34
  }], ctorParameters: () => [] });
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { inject, Injectable, Directive, HostListener, EventEmitter, Output, Input, model, effect } from '@angular/core';
2
+ import { inject, Injectable, Directive, HostListener, output, Input, model, signal } from '@angular/core';
3
3
  import { Router, NavigationEnd } from '@angular/router';
4
4
  import { Location } from '@angular/common';
5
5
  import { MatTableDataSource } from '@angular/material/table';
@@ -31,10 +31,10 @@ class NavigationService {
31
31
  this.router.navigate([fallbackRoute]);
32
32
  }
33
33
  }
34
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: NavigationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
35
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: NavigationService, providedIn: 'root' }); }
34
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.7", ngImport: i0, type: NavigationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
35
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.7", ngImport: i0, type: NavigationService, providedIn: 'root' }); }
36
36
  }
37
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: NavigationService, decorators: [{
37
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.7", ngImport: i0, type: NavigationService, decorators: [{
38
38
  type: Injectable,
39
39
  args: [{ providedIn: 'root' }]
40
40
  }], ctorParameters: () => [] });
@@ -164,10 +164,10 @@ class BackButtonDirective {
164
164
  onClick() {
165
165
  this.navigation.back();
166
166
  }
167
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: BackButtonDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
168
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0", type: BackButtonDirective, isStandalone: true, selector: "[ngLibBackButton]", host: { listeners: { "click": "onClick()" } }, ngImport: i0 }); }
167
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.7", ngImport: i0, type: BackButtonDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
168
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.7", type: BackButtonDirective, isStandalone: true, selector: "[ngLibBackButton]", host: { listeners: { "click": "onClick()" } }, ngImport: i0 }); }
169
169
  }
170
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: BackButtonDirective, decorators: [{
170
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.7", ngImport: i0, type: BackButtonDirective, decorators: [{
171
171
  type: Directive,
172
172
  args: [{
173
173
  selector: '[ngLibBackButton]',
@@ -518,16 +518,23 @@ class Converter {
518
518
 
519
519
  class BaseControlValueAccessor {
520
520
  constructor() {
521
- this.valueChanged = new EventEmitter();
521
+ this.valueChanged = output();
522
522
  this.onChange = null;
523
523
  this.onTouched = null;
524
+ this.disabled = false;
524
525
  }
525
526
  get value() {
526
527
  return this._value;
527
528
  }
528
529
  set value(value) {
529
- this.markAsTouched();
530
+ if (this.disabled) {
531
+ return;
532
+ }
533
+ if (this._value === value) {
534
+ return;
535
+ }
530
536
  this._value = value;
537
+ this.onTouched?.();
531
538
  this.onChange?.(this._value);
532
539
  this.valueChanged.emit(this._value);
533
540
  }
@@ -540,36 +547,39 @@ class BaseControlValueAccessor {
540
547
  registerOnTouched(onTouched) {
541
548
  this.onTouched = onTouched;
542
549
  }
543
- markAsTouched() {
544
- if (this.onTouched) {
545
- this.onTouched();
546
- }
550
+ setDisabledState(isDisabled) {
551
+ this.disabled = isDisabled;
547
552
  }
548
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: BaseControlValueAccessor, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
549
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.0", type: BaseControlValueAccessor, inputs: { value: "value" }, outputs: { valueChanged: "valueChanged" }, ngImport: i0 }); }
553
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.7", ngImport: i0, type: BaseControlValueAccessor, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
554
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.7", type: BaseControlValueAccessor, inputs: { value: "value" }, outputs: { valueChanged: "valueChanged" }, ngImport: i0 }); }
550
555
  }
551
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: BaseControlValueAccessor, decorators: [{
556
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.7", ngImport: i0, type: BaseControlValueAccessor, decorators: [{
552
557
  type: Directive
553
- }], propDecorators: { valueChanged: [{
554
- type: Output
555
- }], value: [{
558
+ }], propDecorators: { value: [{
556
559
  type: Input
557
560
  }] } });
558
561
 
559
562
  class SignalBaseControlValueAccessor {
560
563
  constructor() {
561
- this.valueChanged = new EventEmitter();
562
564
  this.onChange = null;
563
565
  this.onTouched = null;
564
566
  this.value = model();
565
- effect(() => {
566
- const newValue = this.value();
567
- if (newValue) {
568
- this.markAsTouched();
569
- this.onChange?.(newValue);
570
- this.valueChanged.emit(newValue);
571
- }
572
- });
567
+ this.disabled = signal(false);
568
+ }
569
+ /**
570
+ * Function that will be called by the input to update the value of the form-control and the model
571
+ * @param value The new input value passed by $event in the template
572
+ */
573
+ valueChanged(value) {
574
+ if (this.disabled()) {
575
+ return;
576
+ }
577
+ if (value === this.value()) {
578
+ return;
579
+ }
580
+ this.onTouched?.();
581
+ this.onChange?.(value);
582
+ this.value.set(value);
573
583
  }
574
584
  writeValue(value) {
575
585
  this.value.set(value);
@@ -580,19 +590,15 @@ class SignalBaseControlValueAccessor {
580
590
  registerOnTouched(onTouched) {
581
591
  this.onTouched = onTouched;
582
592
  }
583
- markAsTouched() {
584
- if (this.onTouched) {
585
- this.onTouched();
586
- }
593
+ setDisabledState(disabled) {
594
+ this.disabled.set(disabled);
587
595
  }
588
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: SignalBaseControlValueAccessor, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
589
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.0.0", type: SignalBaseControlValueAccessor, inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChanged: "valueChanged", value: "valueChange" }, ngImport: i0 }); }
596
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.7", ngImport: i0, type: SignalBaseControlValueAccessor, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
597
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.0.7", type: SignalBaseControlValueAccessor, inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, ngImport: i0 }); }
590
598
  }
591
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: SignalBaseControlValueAccessor, decorators: [{
599
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.7", ngImport: i0, type: SignalBaseControlValueAccessor, decorators: [{
592
600
  type: Directive
593
- }], ctorParameters: () => [], propDecorators: { valueChanged: [{
594
- type: Output
595
- }] } });
601
+ }] });
596
602
 
597
603
  /**
598
604
  * Generated bundle index. Do not edit.
@@ -1 +1 @@
1
- {"version":3,"file":"angular-base-lib.mjs","sources":["../../../../libs/angular-base/src/lib/navigation/navigation.service.ts","../../../../libs/angular-base/src/lib/model-component/base-model-detail.component.ts","../../../../libs/angular-base/src/lib/model-component/base.component.ts","../../../../libs/angular-base/src/lib/model-component/base-model.component.ts","../../../../libs/angular-base/src/lib/model-component/base-model-edit.component.ts","../../../../libs/angular-base/src/lib/model-component/base-model-list.component.ts","../../../../libs/angular-base/src/lib/navigation/back-button.directive.ts","../../../../libs/angular-base/src/lib/util/is-nil.ts","../../../../libs/angular-base/src/lib/util/remove-nil-values-recursively.ts","../../../../libs/angular-base/src/lib/forms/form-util.ts","../../../../libs/angular-base/src/lib/util/prepare-optional-string.ts","../../../../libs/angular-base/src/lib/auth/models/pending-auth-state.ts","../../../../libs/angular-base/src/lib/auth/models/logged-in-auth-state.ts","../../../../libs/angular-base/src/lib/auth/models/not-logged-in-auth-state.ts","../../../../libs/angular-base/src/lib/auth/base-auth.service.ts","../../../../libs/angular-base/src/lib/auth/guards/logged-in.guard.ts","../../../../libs/angular-base/src/lib/auth/guards/logged-out.guard.ts","../../../../libs/angular-base/src/lib/dao/http-base-dao-options.ts","../../../../libs/angular-base/src/lib/dao/internal/internal-http-base-dao.ts","../../../../libs/angular-base/src/lib/dao/http-base-dao.ts","../../../../libs/angular-base/src/lib/dao/promise-http-base-dao.ts","../../../../libs/angular-base/src/lib/dao/converted-http-base-dao.ts","../../../../libs/angular-base/src/lib/dao/converted-promise-http-base-dao.ts","../../../../libs/angular-base/src/lib/dao/converter.ts","../../../../libs/angular-base/src/lib/base/base-control-value-accessor.ts","../../../../libs/angular-base/src/lib/base/signal-base-control-value-accessor.ts","../../../../libs/angular-base/src/angular-base-lib.ts"],"sourcesContent":["import { NavigationEnd, Router } from '@angular/router';\nimport { inject, Injectable } from '@angular/core';\nimport { Location } from '@angular/common';\n\n@Injectable({ providedIn: 'root' })\nexport class NavigationService {\n private history: string[] = [];\n private readonly router = inject(Router);\n private readonly location = inject(Location);\n\n constructor() {\n this.router.events.subscribe((event) => {\n if (event instanceof NavigationEnd) {\n this.history.push(event.urlAfterRedirects);\n }\n });\n }\n\n reset(): void {\n this.history = [];\n }\n\n back(fallbackRoute = '/'): void {\n this.history.pop();\n if (this.history.length > 0) {\n this.location.back();\n } else {\n this.router.navigate([fallbackRoute]);\n }\n }\n}\n","import { inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { NavigationService } from '../navigation/navigation.service';\nimport { ModelAction } from './action';\nimport { Identifiable } from 'angular-base-dao';\n\nexport abstract class BaseModelDetailComponent<TM extends Identifiable> {\n model: TM | null = null;\n\n protected readonly router = inject(Router);\n protected readonly navigationService = inject(NavigationService);\n\n protected constructor(protected baseRoute: string) {}\n\n handleModelAction(modelAction: ModelAction<TM>): void {\n switch (modelAction.action) {\n case 'show':\n this.showList();\n break;\n\n case 'edit':\n this.editModel();\n break;\n\n case 'delete':\n this.deleteModel();\n break;\n }\n }\n\n showList(): void {\n this.router.navigate([this.baseRoute]);\n }\n\n async editModel(): Promise<void> {\n if (!this.model) {\n return;\n }\n\n await this.router.navigate([`${this.baseRoute}/edit`, this.model.id]);\n }\n\n async deleteModel(): Promise<void> {\n const model = this.model;\n\n if (!model) {\n return;\n }\n\n if (await this.handleDeleteModel(model)) {\n await this.router.navigate([`${this.baseRoute}`]);\n }\n }\n\n goBack(): void {\n this.navigationService.back(this.baseRoute);\n }\n\n abstract handleDeleteModel(model: TM): Promise<boolean>;\n}\n","/**\n * Component used for all pages that can directly navigate back to the home page if no other route was found\n */\nimport { inject } from '@angular/core';\nimport { NavigationService } from '../navigation/navigation.service';\n\nexport abstract class BaseComponent {\n backRoute = '/';\n\n protected readonly navigationService = inject(NavigationService);\n\n goBack(): void {\n this.navigationService.back(this.backRoute);\n }\n}\n","import { Router } from '@angular/router';\nimport { BaseComponent } from './base.component';\nimport { inject } from '@angular/core';\nimport { ModelAction } from './action';\n\nexport abstract class BaseModelComponent<TM> extends BaseComponent {\n protected readonly router = inject(Router);\n\n protected constructor(protected baseRoute: string) {\n super();\n this.backRoute = this.baseRoute;\n }\n\n showList(): void {\n this.router.navigate([this.baseRoute]);\n }\n\n handleModelAction(modelAction: ModelAction<TM>): void {\n switch (modelAction.action) {\n case 'back_to-list':\n this.showList();\n break;\n }\n }\n}\n","import { BaseModelComponent } from './base-model.component';\nimport { Identifiable } from 'angular-base-dao';\n\nexport abstract class BaseModelEditComponent<TM extends Identifiable> extends BaseModelComponent<TM> {\n model: TM | null = null;\n}\n","import { BaseModelComponent } from './base-model.component';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { ModelAction } from './action';\nimport { DaoId, Identifiable } from 'angular-base-dao';\n\nexport abstract class BaseModelListComponent<TM extends Identifiable> extends BaseModelComponent<TM> {\n readonly dataSource = new MatTableDataSource<TM>([]);\n\n protected constructor(baseRoute: string) {\n super(baseRoute);\n\n this.backRoute = '/';\n }\n\n override handleModelAction(modelAction: ModelAction<TM>): void {\n switch (modelAction.action) {\n case 'show':\n this.showDetail(modelAction.model.id);\n break;\n\n case 'edit':\n this.editModel(modelAction.model.id);\n break;\n\n case 'delete':\n this.deleteModel(modelAction.model);\n break;\n }\n }\n\n showDetail(id: DaoId): void {\n this.router.navigate([this.baseRoute, id]);\n }\n\n editModel(id: DaoId): void {\n this.router.navigate([`${this.baseRoute}/edit`, id]);\n }\n\n createModel(): void {\n this.router.navigate([`${this.baseRoute}/add`]);\n }\n\n async deleteModel(model: TM): Promise<void> {\n const [deleted, newList] = await this.handleModelDelete(model);\n if (deleted && newList) {\n this.dataSource.data = newList;\n }\n }\n\n abstract handleModelDelete(model: TM): Promise<[boolean, TM[]]>;\n}\n","import { Directive, HostListener, inject } from '@angular/core';\nimport { NavigationService } from './navigation.service';\n\n@Directive({\n selector: '[ngLibBackButton]',\n standalone: true\n})\nexport class BackButtonDirective {\n private readonly navigation = inject(NavigationService);\n\n @HostListener('click')\n onClick(): void {\n this.navigation.back();\n }\n}\n","export const isNil = (obj: unknown): boolean => obj === null || obj === undefined;\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { isNil } from './is-nil';\n\nexport const removeNullValuesRecursively = (object: any): any => {\n if (Array.isArray(object)) {\n const newObject = [];\n\n for (const obj of object) {\n newObject.push(removeNullValuesRecursively(obj));\n }\n\n return newObject;\n } else if (typeof object === 'object') {\n const newObject: any = {};\n\n for (const key in object) {\n if (isNil(object[key])) {\n continue;\n }\n\n if (typeof object[key] === 'object') {\n const objectToSet = removeNullValuesRecursively(object[key]);\n if (Object.keys(objectToSet)?.length) {\n newObject[key] = objectToSet;\n }\n } else {\n newObject[key] = object[key];\n }\n }\n\n return newObject;\n } else {\n return object;\n }\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { AbstractControl, FormGroup } from '@angular/forms';\nimport { removeNullValuesRecursively } from '../util/remove-nil-values-recursively';\n\nexport class FormUtil {\n static markAllControlsAsTouched(formGroup: FormGroup, recursive = true): void {\n Object.values(formGroup.controls).forEach((control: AbstractControl) => {\n if (recursive && control instanceof FormGroup) {\n FormUtil.markAllControlsAsTouched(control);\n } else {\n control.patchValue(control.value);\n control.markAllAsTouched();\n }\n });\n }\n\n static getUpdatedFormData(objectToAdd: any, oldData: any, newData: any): any {\n for (const newKey in newData) {\n const [, changed] = FormUtil.getDifferenceRecursively(oldData[newKey], newData[newKey]);\n if (changed && newData[newKey]) {\n objectToAdd[newKey] = removeNullValuesRecursively(newData[newKey]);\n }\n }\n return objectToAdd;\n }\n\n static getDifferenceRecursively(oldData: any, newData: any): [any, boolean] {\n let changed = false;\n let object: any = {};\n\n if (typeof newData !== typeof oldData) {\n changed = true;\n object = newData;\n } else if (newData && typeof newData === 'object') {\n const allKeys = new Set([...Object.keys(newData), ...Object.keys(oldData)]);\n for (const newKey of allKeys) {\n if (!newData[newKey] && !oldData[newKey]) {\n continue;\n }\n\n // Check recursively\n const [innerDiff, innerChanged] = FormUtil.getDifferenceRecursively(oldData[newKey], newData[newKey]);\n if (innerChanged) {\n changed = true;\n object[newKey] = innerDiff;\n }\n }\n } else if (newData !== oldData) {\n changed = true;\n object = newData;\n }\n\n return [object, changed];\n }\n}\n","export const prepareOptionalString = (value: string | null | undefined): string | undefined => {\n if (value === null || value === '') {\n // eslint-disable-next-line no-undefined\n return undefined;\n }\n\n return value;\n};\n","import { BaseAuthState } from './base-auth-state';\nimport { LoginState } from './login-state.type';\n\nexport class PendingAuthState implements BaseAuthState<unknown> {\n readonly loginState: LoginState = 'pending';\n readonly user = null;\n}\n","import { BaseAuthState } from './base-auth-state';\nimport { LoginState } from './login-state.type';\n\nexport class LoggedInAuthState<T> implements BaseAuthState<T> {\n readonly loginState: LoginState = 'logged-in';\n readonly user: T;\n\n constructor(user: T) {\n this.user = user;\n }\n}\n","import { BaseAuthState } from './base-auth-state';\nimport { LoginState } from './login-state.type';\n\nexport class NotLoggedInAuthState implements BaseAuthState<unknown> {\n readonly loginState: LoginState = 'logged-out';\n readonly user = null;\n}\n","import { BehaviorSubject, filter, Observable } from 'rxjs';\nimport { BaseAuthState, LoggedInAuthState, LoginState, NotLoggedInAuthState, PendingAuthState } from './models';\nimport { map } from 'rxjs/operators';\n\nexport abstract class BaseAuthService<T> {\n private readonly authStateSubject = new BehaviorSubject<BaseAuthState<T>>(new PendingAuthState());\n private readonly _authState$: Observable<BaseAuthState<T>>;\n private readonly _loginState$: Observable<LoginState>;\n private readonly _readyLoginState$: Observable<LoginState>;\n private readonly _readyAuthState$: Observable<BaseAuthState<T>>;\n private readonly _user$: Observable<T | null>;\n private readonly _readyUser$: Observable<T | null>;\n private readonly _isLoggedIn$: Observable<boolean>;\n private readonly defaultLoginRoute = '/auth/login';\n\n get authState$(): Observable<BaseAuthState<T>> {\n return this._authState$;\n }\n\n get loginState$(): Observable<LoginState> {\n return this._loginState$;\n }\n\n get readyLoginState$(): Observable<LoginState> {\n return this._readyLoginState$;\n }\n\n get readyAuthState$(): Observable<BaseAuthState<T>> {\n return this._readyAuthState$;\n }\n\n get user$(): Observable<T | null> {\n return this._user$;\n }\n\n get readyUser$(): Observable<T | null> {\n return this._readyUser$;\n }\n\n get isLoggedIn$(): Observable<boolean> {\n return this._isLoggedIn$;\n }\n\n get loginRoute(): string {\n return this.defaultLoginRoute;\n }\n\n protected constructor() {\n this._authState$ = this.authStateSubject.asObservable();\n this._user$ = this._authState$.pipe(map((elem) => elem.user));\n this._loginState$ = this._authState$.pipe(map((elem) => elem.loginState));\n this._isLoggedIn$ = this._loginState$.pipe(map((state) => state === 'logged-in'));\n\n this._readyAuthState$ = this._authState$.pipe(filter((elem) => elem.loginState !== 'pending'));\n this._readyLoginState$ = this._readyAuthState$.pipe(map((elem) => elem.loginState));\n this._readyUser$ = this._readyAuthState$.pipe(map((elem) => elem.user));\n }\n\n protected userLoggedIn(user: T): void {\n this.authStateSubject.next(new LoggedInAuthState<T>(user));\n }\n\n protected userLoggedOut(): void {\n this.authStateSubject.next(new NotLoggedInAuthState());\n }\n}\n","import { inject } from '@angular/core';\nimport { CanActivateFn, Router, UrlTree } from '@angular/router';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { BaseAuthService } from '../base-auth.service';\nexport const loggedInGuardFn: CanActivateFn = (): Observable<boolean | UrlTree> => {\n const router = inject(Router);\n return inject(BaseAuthService).readyAuthState$.pipe(\n map((state) => {\n if (state.loginState === 'logged-in') {\n return true;\n }\n\n return router.createUrlTree(['/auth/login']);\n }),\n );\n};\n","import { inject } from '@angular/core';\nimport { CanActivateFn, Router, UrlTree } from '@angular/router';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { BaseAuthService } from '../base-auth.service';\n\nexport const loggedOutGuardFn: CanActivateFn = (): Observable<boolean | UrlTree> => {\n const router = inject(Router);\n return inject(BaseAuthService).readyLoginState$.pipe(\n map((state) => {\n if (state !== 'logged-in') {\n return true;\n }\n\n return router.createUrlTree(['/']);\n }),\n );\n};\n","import { HttpHeaders } from '@angular/common/http';\n\nexport interface HttpBaseDaoOptions {\n withCredentials?: boolean;\n headers?: HttpHeaders;\n}\n\nexport const DEFAULT_OPTIONS: HttpBaseDaoOptions = {\n withCredentials: true,\n};\n","import { HttpClient } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { inject } from '@angular/core';\nimport { DEFAULT_OPTIONS, HttpBaseDaoOptions } from '../http-base-dao-options';\nimport { DaoId } from '../dao-id';\n\nexport abstract class InternalHttpBaseDao<TI> {\n protected readonly http = inject(HttpClient);\n protected readonly options: HttpBaseDaoOptions;\n protected readonly routeUrl: string;\n\n protected constructor(routeUrl: string, options: HttpBaseDaoOptions = {}) {\n this.routeUrl = routeUrl;\n this.options = {\n ...DEFAULT_OPTIONS,\n ...options\n };\n }\n\n protected listInternal(customOptions: HttpBaseDaoOptions = {}): Observable<TI[]> {\n return this.http.get<TI[]>(this.routeUrl, this.mergeCustomOptions(customOptions));\n }\n\n protected createInternal(data: object, customOptions: HttpBaseDaoOptions = {}): Observable<TI> {\n if (!data) {\n throw new Error('Entry must exist to be created');\n }\n\n return this.http.post<TI>(this.routeUrl, data, this.mergeCustomOptions(customOptions));\n }\n\n protected updateInternal(id: DaoId, data: object, customOptions: HttpBaseDaoOptions = {}): Observable<TI> {\n if (!id) {\n throw new Error('Entry must exist to be updated');\n }\n\n return this.http.put<TI>(this.routeUrl + '/' + id, data, this.mergeCustomOptions(customOptions));\n }\n\n protected deleteInternal(id: DaoId, customOptions: HttpBaseDaoOptions = {}): Observable<TI> {\n if (!id) {\n throw new Error('Entry must exist to be deleted');\n }\n return this.http.delete<TI>(this.routeUrl + '/' + id, this.mergeCustomOptions(customOptions));\n }\n\n protected readInternal(id: DaoId, customOptions: HttpBaseDaoOptions = {}): Observable<TI> {\n return this.http.get<TI>(this.routeUrl + '/' + id, this.mergeCustomOptions(customOptions));\n }\n\n private mergeCustomOptions(customOptions: HttpBaseDaoOptions): HttpBaseDaoOptions {\n return {\n ...this.options,\n ...customOptions\n };\n }\n}\n","import { Observable } from 'rxjs';\nimport { HttpBaseDaoOptions } from './http-base-dao-options';\nimport { DaoId } from './dao-id';\nimport { InternalHttpBaseDao } from './internal/internal-http-base-dao';\n\nexport abstract class HttpBaseDao<TI> extends InternalHttpBaseDao<TI> {\n protected constructor(routeUrl: string, options: HttpBaseDaoOptions = {}) {\n super(routeUrl, options);\n }\n\n list(customOptions: HttpBaseDaoOptions = {}): Observable<TI[]> {\n return this.listInternal(customOptions);\n }\n\n create(entry: Partial<TI>, customOptions: HttpBaseDaoOptions = {}): Observable<TI> {\n return this.createInternal(entry, customOptions);\n }\n\n update(id: DaoId, entry: Partial<TI>, customOptions: HttpBaseDaoOptions = {}): Observable<TI> {\n return this.updateInternal(id, entry, customOptions);\n }\n\n delete(id: DaoId, customOptions: HttpBaseDaoOptions = {}): Observable<TI> {\n return this.deleteInternal(id, customOptions);\n }\n\n read(id: DaoId, customOptions: HttpBaseDaoOptions = {}): Observable<TI> {\n return this.readInternal(id, customOptions);\n }\n}\n","import { firstValueFrom } from 'rxjs';\nimport { HttpBaseDaoOptions } from './http-base-dao-options';\nimport { DaoId } from './dao-id';\nimport { InternalHttpBaseDao } from './internal/internal-http-base-dao';\n\nexport abstract class PromiseHttpBaseDao<TI> extends InternalHttpBaseDao<TI> {\n protected constructor(routeUrl: string, options: HttpBaseDaoOptions = {}) {\n super(routeUrl, options);\n }\n\n list(customOptions: HttpBaseDaoOptions = {}): Promise<TI[]> {\n return firstValueFrom(this.listInternal(customOptions));\n }\n\n create(data: object, customOptions: HttpBaseDaoOptions = {}): Promise<TI> {\n return firstValueFrom(this.createInternal(data, customOptions));\n }\n\n update(id: DaoId, data: object, customOptions: HttpBaseDaoOptions = {}): Promise<TI> {\n return firstValueFrom(this.updateInternal(id, data, customOptions));\n }\n\n delete(id: DaoId, customOptions: HttpBaseDaoOptions = {}): Promise<TI> {\n return firstValueFrom(this.deleteInternal(id, customOptions));\n }\n\n read(id: DaoId, customOptions: HttpBaseDaoOptions = {}): Promise<TI> {\n return firstValueFrom(this.readInternal(id, customOptions));\n }\n}\n","import { map, Observable } from 'rxjs';\nimport { HttpBaseDaoOptions } from './http-base-dao-options';\nimport { DaoId } from './dao-id';\nimport { InternalHttpBaseDao } from './internal/internal-http-base-dao';\nimport { Converter } from './converter';\n\nexport abstract class ConvertedHttpBaseDao<TI, TM> extends InternalHttpBaseDao<TI> {\n protected readonly converter: Converter<TI, TM>;\n protected constructor(routeUrl: string, converter: Converter<TI, TM>, options: HttpBaseDaoOptions = {}) {\n super(routeUrl, options);\n this.converter = converter;\n }\n\n list(customOptions: HttpBaseDaoOptions = {}): Observable<TM[]> {\n return this.listInternal(customOptions).pipe((result) => this.mapServerInterfaceListToModelList(result));\n }\n\n create(entry: TM, customOptions: HttpBaseDaoOptions = {}): Observable<TM> {\n const createData = this.converter.toJson(entry);\n return this.createInternal(createData, customOptions).pipe((result) => this.mapServerInterfaceToModel(result));\n }\n\n update(id: DaoId, entry: Partial<TM>, customOptions: HttpBaseDaoOptions = {}): Observable<TM> {\n const updateData = this.converter.toJson(entry);\n return this.updateInternal(id, updateData, customOptions).pipe((result) => this.mapServerInterfaceToModel(result));\n }\n\n delete(id: DaoId, customOptions: HttpBaseDaoOptions = {}): Observable<TM> {\n return this.deleteInternal(id, customOptions).pipe((result) => this.mapServerInterfaceToModel(result));\n }\n\n read(id: DaoId, customOptions: HttpBaseDaoOptions = {}): Observable<TM> {\n return this.readInternal(id, customOptions).pipe((result) => this.mapServerInterfaceToModel(result));\n }\n\n private mapServerInterfaceListToModelList(source$: Observable<TI[]>): Observable<TM[]> {\n return source$.pipe(\n map((list) => {\n if (!list?.length) {\n return [];\n }\n\n return list.map((elem) => this.converter.fromJson(elem));\n })\n );\n }\n\n private mapServerInterfaceToModel(source$: Observable<TI>): Observable<TM> {\n return source$.pipe(map((element) => this.converter.fromJson(element)));\n }\n}\n","import { firstValueFrom, map, Observable } from 'rxjs';\nimport { HttpBaseDaoOptions } from './http-base-dao-options';\nimport { DaoId } from './dao-id';\nimport { InternalHttpBaseDao } from './internal/internal-http-base-dao';\nimport { Converter } from './converter';\n\nexport abstract class ConvertedPromiseHttpBaseDao<TI, TM> extends InternalHttpBaseDao<TI> {\n protected readonly converter: Converter<TI, TM>;\n protected constructor(routeUrl: string, converter: Converter<TI, TM>, options: HttpBaseDaoOptions = {}) {\n super(routeUrl, options);\n this.converter = converter;\n }\n\n list(customOptions: HttpBaseDaoOptions = {}): Promise<TM[]> {\n return firstValueFrom(this.listInternal(customOptions).pipe(this.mapServerInterfaceListToModelList.bind(this)));\n }\n\n create(entry: TM, customOptions: HttpBaseDaoOptions = {}): Promise<TM> {\n const createData = this.converter.toJson(entry);\n return firstValueFrom(\n this.createInternal(createData, customOptions).pipe(this.mapServerInterfaceToModel.bind(this)),\n );\n }\n\n update(id: DaoId, entry: Partial<TM>, customOptions: HttpBaseDaoOptions = {}): Promise<TM> {\n const updateData = this.converter.toJson(entry);\n return firstValueFrom(\n this.updateInternal(id, updateData, customOptions).pipe(this.mapServerInterfaceToModel.bind(this)),\n );\n }\n\n delete(id: DaoId, customOptions: HttpBaseDaoOptions = {}): Promise<TM> {\n return firstValueFrom(this.deleteInternal(id, customOptions).pipe(this.mapServerInterfaceToModel.bind(this)));\n }\n\n read(id: DaoId, customOptions: HttpBaseDaoOptions = {}): Promise<TM> {\n return firstValueFrom(this.readInternal(id, customOptions).pipe(this.mapServerInterfaceToModel.bind(this)));\n }\n\n private mapServerInterfaceListToModelList(source$: Observable<TI[]>): Observable<TM[]> {\n return source$.pipe(\n map((list) => {\n if (!list?.length) {\n return [];\n }\n\n return list.map((elem) => this.converter.fromJson(elem));\n }),\n );\n }\n\n private mapServerInterfaceToModel(source$: Observable<TI>): Observable<TM> {\n return source$.pipe(map((element) => this.converter.fromJson(element)));\n }\n}\n","export abstract class Converter<TI, TM> {\n abstract fromJson(response: TI): TM;\n abstract toJson(model: Partial<TM>): Partial<TI>;\n}\n","import { ControlValueAccessor } from '@angular/forms';\nimport { Directive, EventEmitter, Input, Output } from '@angular/core';\nimport { ValueChangeCallback } from '../types/value-change-callback.type';\n\n@Directive()\nexport abstract class BaseControlValueAccessor<T = string> implements ControlValueAccessor {\n @Output() valueChanged: EventEmitter<T> = new EventEmitter<T>();\n\n onChange: ValueChangeCallback<T> | null = null;\n onTouched: VoidFunction | null = null;\n\n protected _value!: T;\n\n get value(): T {\n return this._value;\n }\n\n @Input() set value(value: T) {\n this.markAsTouched();\n this._value = value;\n this.onChange?.(this._value);\n this.valueChanged.emit(this._value);\n }\n\n writeValue(value: T): void {\n this.value = value;\n }\n\n registerOnChange(onChange: ValueChangeCallback<T>): void {\n this.onChange = onChange;\n }\n\n registerOnTouched(onTouched: VoidFunction): void {\n this.onTouched = onTouched;\n }\n\n markAsTouched(): void {\n if (this.onTouched) {\n this.onTouched();\n }\n }\n}\n","import { ControlValueAccessor } from '@angular/forms';\nimport { Directive, effect, EventEmitter, model, Output } from '@angular/core';\nimport { ValueChangeCallback } from '../types/value-change-callback.type';\n\n@Directive()\nexport abstract class SignalBaseControlValueAccessor<T = string> implements ControlValueAccessor {\n @Output() valueChanged: EventEmitter<T> = new EventEmitter<T>();\n\n onChange: ValueChangeCallback<T> | null = null;\n onTouched: VoidFunction | null = null;\n\n protected value = model<T>();\n\n protected constructor() {\n effect(() => {\n const newValue = this.value();\n if (newValue) {\n this.markAsTouched();\n this.onChange?.(newValue);\n this.valueChanged.emit(newValue);\n }\n });\n }\n\n writeValue(value: T): void {\n this.value.set(value);\n }\n\n registerOnChange(onChange: ValueChangeCallback<T>): void {\n this.onChange = onChange;\n }\n\n registerOnTouched(onTouched: VoidFunction): void {\n this.onTouched = onTouched;\n }\n\n markAsTouched(): void {\n if (this.onTouched) {\n this.onTouched();\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["map"],"mappings":"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"}
1
+ {"version":3,"file":"angular-base-lib.mjs","sources":["../../../../libs/angular-base/src/lib/navigation/navigation.service.ts","../../../../libs/angular-base/src/lib/model-component/base-model-detail.component.ts","../../../../libs/angular-base/src/lib/model-component/base.component.ts","../../../../libs/angular-base/src/lib/model-component/base-model.component.ts","../../../../libs/angular-base/src/lib/model-component/base-model-edit.component.ts","../../../../libs/angular-base/src/lib/model-component/base-model-list.component.ts","../../../../libs/angular-base/src/lib/navigation/back-button.directive.ts","../../../../libs/angular-base/src/lib/util/is-nil.ts","../../../../libs/angular-base/src/lib/util/remove-nil-values-recursively.ts","../../../../libs/angular-base/src/lib/forms/form-util.ts","../../../../libs/angular-base/src/lib/util/prepare-optional-string.ts","../../../../libs/angular-base/src/lib/auth/models/pending-auth-state.ts","../../../../libs/angular-base/src/lib/auth/models/logged-in-auth-state.ts","../../../../libs/angular-base/src/lib/auth/models/not-logged-in-auth-state.ts","../../../../libs/angular-base/src/lib/auth/base-auth.service.ts","../../../../libs/angular-base/src/lib/auth/guards/logged-in.guard.ts","../../../../libs/angular-base/src/lib/auth/guards/logged-out.guard.ts","../../../../libs/angular-base/src/lib/dao/http-base-dao-options.ts","../../../../libs/angular-base/src/lib/dao/internal/internal-http-base-dao.ts","../../../../libs/angular-base/src/lib/dao/http-base-dao.ts","../../../../libs/angular-base/src/lib/dao/promise-http-base-dao.ts","../../../../libs/angular-base/src/lib/dao/converted-http-base-dao.ts","../../../../libs/angular-base/src/lib/dao/converted-promise-http-base-dao.ts","../../../../libs/angular-base/src/lib/dao/converter.ts","../../../../libs/angular-base/src/lib/base/base-control-value-accessor.ts","../../../../libs/angular-base/src/lib/base/signal-base-control-value-accessor.ts","../../../../libs/angular-base/src/angular-base-lib.ts"],"sourcesContent":["import { NavigationEnd, Router } from '@angular/router';\nimport { inject, Injectable } from '@angular/core';\nimport { Location } from '@angular/common';\n\n@Injectable({ providedIn: 'root' })\nexport class NavigationService {\n private history: string[] = [];\n private readonly router = inject(Router);\n private readonly location = inject(Location);\n\n constructor() {\n this.router.events.subscribe((event) => {\n if (event instanceof NavigationEnd) {\n this.history.push(event.urlAfterRedirects);\n }\n });\n }\n\n reset(): void {\n this.history = [];\n }\n\n back(fallbackRoute = '/'): void {\n this.history.pop();\n if (this.history.length > 0) {\n this.location.back();\n } else {\n this.router.navigate([fallbackRoute]);\n }\n }\n}\n","import { inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { NavigationService } from '../navigation/navigation.service';\nimport { ModelAction } from './action';\nimport { Identifiable } from 'angular-base-dao';\n\nexport abstract class BaseModelDetailComponent<TM extends Identifiable> {\n model: TM | null = null;\n\n protected readonly router = inject(Router);\n protected readonly navigationService = inject(NavigationService);\n\n protected constructor(protected baseRoute: string) {}\n\n handleModelAction(modelAction: ModelAction<TM>): void {\n switch (modelAction.action) {\n case 'show':\n this.showList();\n break;\n\n case 'edit':\n this.editModel();\n break;\n\n case 'delete':\n this.deleteModel();\n break;\n }\n }\n\n showList(): void {\n this.router.navigate([this.baseRoute]);\n }\n\n async editModel(): Promise<void> {\n if (!this.model) {\n return;\n }\n\n await this.router.navigate([`${this.baseRoute}/edit`, this.model.id]);\n }\n\n async deleteModel(): Promise<void> {\n const model = this.model;\n\n if (!model) {\n return;\n }\n\n if (await this.handleDeleteModel(model)) {\n await this.router.navigate([`${this.baseRoute}`]);\n }\n }\n\n goBack(): void {\n this.navigationService.back(this.baseRoute);\n }\n\n abstract handleDeleteModel(model: TM): Promise<boolean>;\n}\n","/**\n * Component used for all pages that can directly navigate back to the home page if no other route was found\n */\nimport { inject } from '@angular/core';\nimport { NavigationService } from '../navigation/navigation.service';\n\nexport abstract class BaseComponent {\n backRoute = '/';\n\n protected readonly navigationService = inject(NavigationService);\n\n goBack(): void {\n this.navigationService.back(this.backRoute);\n }\n}\n","import { Router } from '@angular/router';\nimport { BaseComponent } from './base.component';\nimport { inject } from '@angular/core';\nimport { ModelAction } from './action';\n\nexport abstract class BaseModelComponent<TM> extends BaseComponent {\n protected readonly router = inject(Router);\n\n protected constructor(protected baseRoute: string) {\n super();\n this.backRoute = this.baseRoute;\n }\n\n showList(): void {\n this.router.navigate([this.baseRoute]);\n }\n\n handleModelAction(modelAction: ModelAction<TM>): void {\n switch (modelAction.action) {\n case 'back_to-list':\n this.showList();\n break;\n }\n }\n}\n","import { BaseModelComponent } from './base-model.component';\nimport { Identifiable } from 'angular-base-dao';\n\nexport abstract class BaseModelEditComponent<TM extends Identifiable> extends BaseModelComponent<TM> {\n model: TM | null = null;\n}\n","import { BaseModelComponent } from './base-model.component';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { ModelAction } from './action';\nimport { DaoId, Identifiable } from 'angular-base-dao';\n\nexport abstract class BaseModelListComponent<TM extends Identifiable> extends BaseModelComponent<TM> {\n readonly dataSource = new MatTableDataSource<TM>([]);\n\n protected constructor(baseRoute: string) {\n super(baseRoute);\n\n this.backRoute = '/';\n }\n\n override handleModelAction(modelAction: ModelAction<TM>): void {\n switch (modelAction.action) {\n case 'show':\n this.showDetail(modelAction.model.id);\n break;\n\n case 'edit':\n this.editModel(modelAction.model.id);\n break;\n\n case 'delete':\n this.deleteModel(modelAction.model);\n break;\n }\n }\n\n showDetail(id: DaoId): void {\n this.router.navigate([this.baseRoute, id]);\n }\n\n editModel(id: DaoId): void {\n this.router.navigate([`${this.baseRoute}/edit`, id]);\n }\n\n createModel(): void {\n this.router.navigate([`${this.baseRoute}/add`]);\n }\n\n async deleteModel(model: TM): Promise<void> {\n const [deleted, newList] = await this.handleModelDelete(model);\n if (deleted && newList) {\n this.dataSource.data = newList;\n }\n }\n\n abstract handleModelDelete(model: TM): Promise<[boolean, TM[]]>;\n}\n","import { Directive, HostListener, inject } from '@angular/core';\nimport { NavigationService } from './navigation.service';\n\n@Directive({\n selector: '[ngLibBackButton]',\n standalone: true\n})\nexport class BackButtonDirective {\n private readonly navigation = inject(NavigationService);\n\n @HostListener('click')\n onClick(): void {\n this.navigation.back();\n }\n}\n","export const isNil = (obj: unknown): boolean => obj === null || obj === undefined;\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { isNil } from './is-nil';\n\nexport const removeNullValuesRecursively = (object: any): any => {\n if (Array.isArray(object)) {\n const newObject = [];\n\n for (const obj of object) {\n newObject.push(removeNullValuesRecursively(obj));\n }\n\n return newObject;\n } else if (typeof object === 'object') {\n const newObject: any = {};\n\n for (const key in object) {\n if (isNil(object[key])) {\n continue;\n }\n\n if (typeof object[key] === 'object') {\n const objectToSet = removeNullValuesRecursively(object[key]);\n if (Object.keys(objectToSet)?.length) {\n newObject[key] = objectToSet;\n }\n } else {\n newObject[key] = object[key];\n }\n }\n\n return newObject;\n } else {\n return object;\n }\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { AbstractControl, FormGroup } from '@angular/forms';\nimport { removeNullValuesRecursively } from '../util/remove-nil-values-recursively';\n\nexport class FormUtil {\n static markAllControlsAsTouched(formGroup: FormGroup, recursive = true): void {\n Object.values(formGroup.controls).forEach((control: AbstractControl) => {\n if (recursive && control instanceof FormGroup) {\n FormUtil.markAllControlsAsTouched(control);\n } else {\n control.patchValue(control.value);\n control.markAllAsTouched();\n }\n });\n }\n\n static getUpdatedFormData(objectToAdd: any, oldData: any, newData: any): any {\n for (const newKey in newData) {\n const [, changed] = FormUtil.getDifferenceRecursively(oldData[newKey], newData[newKey]);\n if (changed && newData[newKey]) {\n objectToAdd[newKey] = removeNullValuesRecursively(newData[newKey]);\n }\n }\n return objectToAdd;\n }\n\n static getDifferenceRecursively(oldData: any, newData: any): [any, boolean] {\n let changed = false;\n let object: any = {};\n\n if (typeof newData !== typeof oldData) {\n changed = true;\n object = newData;\n } else if (newData && typeof newData === 'object') {\n const allKeys = new Set([...Object.keys(newData), ...Object.keys(oldData)]);\n for (const newKey of allKeys) {\n if (!newData[newKey] && !oldData[newKey]) {\n continue;\n }\n\n // Check recursively\n const [innerDiff, innerChanged] = FormUtil.getDifferenceRecursively(oldData[newKey], newData[newKey]);\n if (innerChanged) {\n changed = true;\n object[newKey] = innerDiff;\n }\n }\n } else if (newData !== oldData) {\n changed = true;\n object = newData;\n }\n\n return [object, changed];\n }\n}\n","export const prepareOptionalString = (value: string | null | undefined): string | undefined => {\n if (value === null || value === '') {\n // eslint-disable-next-line no-undefined\n return undefined;\n }\n\n return value;\n};\n","import { BaseAuthState } from './base-auth-state';\nimport { LoginState } from './login-state.type';\n\nexport class PendingAuthState implements BaseAuthState<unknown> {\n readonly loginState: LoginState = 'pending';\n readonly user = null;\n}\n","import { BaseAuthState } from './base-auth-state';\nimport { LoginState } from './login-state.type';\n\nexport class LoggedInAuthState<T> implements BaseAuthState<T> {\n readonly loginState: LoginState = 'logged-in';\n readonly user: T;\n\n constructor(user: T) {\n this.user = user;\n }\n}\n","import { BaseAuthState } from './base-auth-state';\nimport { LoginState } from './login-state.type';\n\nexport class NotLoggedInAuthState implements BaseAuthState<unknown> {\n readonly loginState: LoginState = 'logged-out';\n readonly user = null;\n}\n","import { BehaviorSubject, filter, Observable } from 'rxjs';\nimport { BaseAuthState, LoggedInAuthState, LoginState, NotLoggedInAuthState, PendingAuthState } from './models';\nimport { map } from 'rxjs/operators';\n\nexport abstract class BaseAuthService<T> {\n private readonly authStateSubject = new BehaviorSubject<BaseAuthState<T>>(new PendingAuthState());\n private readonly _authState$: Observable<BaseAuthState<T>>;\n private readonly _loginState$: Observable<LoginState>;\n private readonly _readyLoginState$: Observable<LoginState>;\n private readonly _readyAuthState$: Observable<BaseAuthState<T>>;\n private readonly _user$: Observable<T | null>;\n private readonly _readyUser$: Observable<T | null>;\n private readonly _isLoggedIn$: Observable<boolean>;\n private readonly defaultLoginRoute = '/auth/login';\n\n get authState$(): Observable<BaseAuthState<T>> {\n return this._authState$;\n }\n\n get loginState$(): Observable<LoginState> {\n return this._loginState$;\n }\n\n get readyLoginState$(): Observable<LoginState> {\n return this._readyLoginState$;\n }\n\n get readyAuthState$(): Observable<BaseAuthState<T>> {\n return this._readyAuthState$;\n }\n\n get user$(): Observable<T | null> {\n return this._user$;\n }\n\n get readyUser$(): Observable<T | null> {\n return this._readyUser$;\n }\n\n get isLoggedIn$(): Observable<boolean> {\n return this._isLoggedIn$;\n }\n\n get loginRoute(): string {\n return this.defaultLoginRoute;\n }\n\n protected constructor() {\n this._authState$ = this.authStateSubject.asObservable();\n this._user$ = this._authState$.pipe(map((elem) => elem.user));\n this._loginState$ = this._authState$.pipe(map((elem) => elem.loginState));\n this._isLoggedIn$ = this._loginState$.pipe(map((state) => state === 'logged-in'));\n\n this._readyAuthState$ = this._authState$.pipe(filter((elem) => elem.loginState !== 'pending'));\n this._readyLoginState$ = this._readyAuthState$.pipe(map((elem) => elem.loginState));\n this._readyUser$ = this._readyAuthState$.pipe(map((elem) => elem.user));\n }\n\n protected userLoggedIn(user: T): void {\n this.authStateSubject.next(new LoggedInAuthState<T>(user));\n }\n\n protected userLoggedOut(): void {\n this.authStateSubject.next(new NotLoggedInAuthState());\n }\n}\n","import { inject } from '@angular/core';\nimport { CanActivateFn, Router, UrlTree } from '@angular/router';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { BaseAuthService } from '../base-auth.service';\nexport const loggedInGuardFn: CanActivateFn = (): Observable<boolean | UrlTree> => {\n const router = inject(Router);\n return inject(BaseAuthService).readyAuthState$.pipe(\n map((state) => {\n if (state.loginState === 'logged-in') {\n return true;\n }\n\n return router.createUrlTree(['/auth/login']);\n }),\n );\n};\n","import { inject } from '@angular/core';\nimport { CanActivateFn, Router, UrlTree } from '@angular/router';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { BaseAuthService } from '../base-auth.service';\n\nexport const loggedOutGuardFn: CanActivateFn = (): Observable<boolean | UrlTree> => {\n const router = inject(Router);\n return inject(BaseAuthService).readyLoginState$.pipe(\n map((state) => {\n if (state !== 'logged-in') {\n return true;\n }\n\n return router.createUrlTree(['/']);\n }),\n );\n};\n","import { HttpHeaders } from '@angular/common/http';\n\nexport interface HttpBaseDaoOptions {\n withCredentials?: boolean;\n headers?: HttpHeaders;\n}\n\nexport const DEFAULT_OPTIONS: HttpBaseDaoOptions = {\n withCredentials: true,\n};\n","import { HttpClient } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { inject } from '@angular/core';\nimport { DEFAULT_OPTIONS, HttpBaseDaoOptions } from '../http-base-dao-options';\nimport { DaoId } from '../dao-id';\n\nexport abstract class InternalHttpBaseDao<TI> {\n protected readonly http = inject(HttpClient);\n protected readonly options: HttpBaseDaoOptions;\n protected readonly routeUrl: string;\n\n protected constructor(routeUrl: string, options: HttpBaseDaoOptions = {}) {\n this.routeUrl = routeUrl;\n this.options = {\n ...DEFAULT_OPTIONS,\n ...options\n };\n }\n\n protected listInternal(customOptions: HttpBaseDaoOptions = {}): Observable<TI[]> {\n return this.http.get<TI[]>(this.routeUrl, this.mergeCustomOptions(customOptions));\n }\n\n protected createInternal(data: object, customOptions: HttpBaseDaoOptions = {}): Observable<TI> {\n if (!data) {\n throw new Error('Entry must exist to be created');\n }\n\n return this.http.post<TI>(this.routeUrl, data, this.mergeCustomOptions(customOptions));\n }\n\n protected updateInternal(id: DaoId, data: object, customOptions: HttpBaseDaoOptions = {}): Observable<TI> {\n if (!id) {\n throw new Error('Entry must exist to be updated');\n }\n\n return this.http.put<TI>(this.routeUrl + '/' + id, data, this.mergeCustomOptions(customOptions));\n }\n\n protected deleteInternal(id: DaoId, customOptions: HttpBaseDaoOptions = {}): Observable<TI> {\n if (!id) {\n throw new Error('Entry must exist to be deleted');\n }\n return this.http.delete<TI>(this.routeUrl + '/' + id, this.mergeCustomOptions(customOptions));\n }\n\n protected readInternal(id: DaoId, customOptions: HttpBaseDaoOptions = {}): Observable<TI> {\n return this.http.get<TI>(this.routeUrl + '/' + id, this.mergeCustomOptions(customOptions));\n }\n\n private mergeCustomOptions(customOptions: HttpBaseDaoOptions): HttpBaseDaoOptions {\n return {\n ...this.options,\n ...customOptions\n };\n }\n}\n","import { Observable } from 'rxjs';\nimport { HttpBaseDaoOptions } from './http-base-dao-options';\nimport { DaoId } from './dao-id';\nimport { InternalHttpBaseDao } from './internal/internal-http-base-dao';\n\nexport abstract class HttpBaseDao<TI> extends InternalHttpBaseDao<TI> {\n protected constructor(routeUrl: string, options: HttpBaseDaoOptions = {}) {\n super(routeUrl, options);\n }\n\n list(customOptions: HttpBaseDaoOptions = {}): Observable<TI[]> {\n return this.listInternal(customOptions);\n }\n\n create(entry: Partial<TI>, customOptions: HttpBaseDaoOptions = {}): Observable<TI> {\n return this.createInternal(entry, customOptions);\n }\n\n update(id: DaoId, entry: Partial<TI>, customOptions: HttpBaseDaoOptions = {}): Observable<TI> {\n return this.updateInternal(id, entry, customOptions);\n }\n\n delete(id: DaoId, customOptions: HttpBaseDaoOptions = {}): Observable<TI> {\n return this.deleteInternal(id, customOptions);\n }\n\n read(id: DaoId, customOptions: HttpBaseDaoOptions = {}): Observable<TI> {\n return this.readInternal(id, customOptions);\n }\n}\n","import { firstValueFrom } from 'rxjs';\nimport { HttpBaseDaoOptions } from './http-base-dao-options';\nimport { DaoId } from './dao-id';\nimport { InternalHttpBaseDao } from './internal/internal-http-base-dao';\n\nexport abstract class PromiseHttpBaseDao<TI> extends InternalHttpBaseDao<TI> {\n protected constructor(routeUrl: string, options: HttpBaseDaoOptions = {}) {\n super(routeUrl, options);\n }\n\n list(customOptions: HttpBaseDaoOptions = {}): Promise<TI[]> {\n return firstValueFrom(this.listInternal(customOptions));\n }\n\n create(data: object, customOptions: HttpBaseDaoOptions = {}): Promise<TI> {\n return firstValueFrom(this.createInternal(data, customOptions));\n }\n\n update(id: DaoId, data: object, customOptions: HttpBaseDaoOptions = {}): Promise<TI> {\n return firstValueFrom(this.updateInternal(id, data, customOptions));\n }\n\n delete(id: DaoId, customOptions: HttpBaseDaoOptions = {}): Promise<TI> {\n return firstValueFrom(this.deleteInternal(id, customOptions));\n }\n\n read(id: DaoId, customOptions: HttpBaseDaoOptions = {}): Promise<TI> {\n return firstValueFrom(this.readInternal(id, customOptions));\n }\n}\n","import { map, Observable } from 'rxjs';\nimport { HttpBaseDaoOptions } from './http-base-dao-options';\nimport { DaoId } from './dao-id';\nimport { InternalHttpBaseDao } from './internal/internal-http-base-dao';\nimport { Converter } from './converter';\n\nexport abstract class ConvertedHttpBaseDao<TI, TM> extends InternalHttpBaseDao<TI> {\n protected readonly converter: Converter<TI, TM>;\n protected constructor(routeUrl: string, converter: Converter<TI, TM>, options: HttpBaseDaoOptions = {}) {\n super(routeUrl, options);\n this.converter = converter;\n }\n\n list(customOptions: HttpBaseDaoOptions = {}): Observable<TM[]> {\n return this.listInternal(customOptions).pipe((result) => this.mapServerInterfaceListToModelList(result));\n }\n\n create(entry: TM, customOptions: HttpBaseDaoOptions = {}): Observable<TM> {\n const createData = this.converter.toJson(entry);\n return this.createInternal(createData, customOptions).pipe((result) => this.mapServerInterfaceToModel(result));\n }\n\n update(id: DaoId, entry: Partial<TM>, customOptions: HttpBaseDaoOptions = {}): Observable<TM> {\n const updateData = this.converter.toJson(entry);\n return this.updateInternal(id, updateData, customOptions).pipe((result) => this.mapServerInterfaceToModel(result));\n }\n\n delete(id: DaoId, customOptions: HttpBaseDaoOptions = {}): Observable<TM> {\n return this.deleteInternal(id, customOptions).pipe((result) => this.mapServerInterfaceToModel(result));\n }\n\n read(id: DaoId, customOptions: HttpBaseDaoOptions = {}): Observable<TM> {\n return this.readInternal(id, customOptions).pipe((result) => this.mapServerInterfaceToModel(result));\n }\n\n private mapServerInterfaceListToModelList(source$: Observable<TI[]>): Observable<TM[]> {\n return source$.pipe(\n map((list) => {\n if (!list?.length) {\n return [];\n }\n\n return list.map((elem) => this.converter.fromJson(elem));\n })\n );\n }\n\n private mapServerInterfaceToModel(source$: Observable<TI>): Observable<TM> {\n return source$.pipe(map((element) => this.converter.fromJson(element)));\n }\n}\n","import { firstValueFrom, map, Observable } from 'rxjs';\nimport { HttpBaseDaoOptions } from './http-base-dao-options';\nimport { DaoId } from './dao-id';\nimport { InternalHttpBaseDao } from './internal/internal-http-base-dao';\nimport { Converter } from './converter';\n\nexport abstract class ConvertedPromiseHttpBaseDao<TI, TM> extends InternalHttpBaseDao<TI> {\n protected readonly converter: Converter<TI, TM>;\n protected constructor(routeUrl: string, converter: Converter<TI, TM>, options: HttpBaseDaoOptions = {}) {\n super(routeUrl, options);\n this.converter = converter;\n }\n\n list(customOptions: HttpBaseDaoOptions = {}): Promise<TM[]> {\n return firstValueFrom(this.listInternal(customOptions).pipe(this.mapServerInterfaceListToModelList.bind(this)));\n }\n\n create(entry: TM, customOptions: HttpBaseDaoOptions = {}): Promise<TM> {\n const createData = this.converter.toJson(entry);\n return firstValueFrom(\n this.createInternal(createData, customOptions).pipe(this.mapServerInterfaceToModel.bind(this)),\n );\n }\n\n update(id: DaoId, entry: Partial<TM>, customOptions: HttpBaseDaoOptions = {}): Promise<TM> {\n const updateData = this.converter.toJson(entry);\n return firstValueFrom(\n this.updateInternal(id, updateData, customOptions).pipe(this.mapServerInterfaceToModel.bind(this)),\n );\n }\n\n delete(id: DaoId, customOptions: HttpBaseDaoOptions = {}): Promise<TM> {\n return firstValueFrom(this.deleteInternal(id, customOptions).pipe(this.mapServerInterfaceToModel.bind(this)));\n }\n\n read(id: DaoId, customOptions: HttpBaseDaoOptions = {}): Promise<TM> {\n return firstValueFrom(this.readInternal(id, customOptions).pipe(this.mapServerInterfaceToModel.bind(this)));\n }\n\n private mapServerInterfaceListToModelList(source$: Observable<TI[]>): Observable<TM[]> {\n return source$.pipe(\n map((list) => {\n if (!list?.length) {\n return [];\n }\n\n return list.map((elem) => this.converter.fromJson(elem));\n }),\n );\n }\n\n private mapServerInterfaceToModel(source$: Observable<TI>): Observable<TM> {\n return source$.pipe(map((element) => this.converter.fromJson(element)));\n }\n}\n","export abstract class Converter<TI, TM> {\n abstract fromJson(response: TI): TM;\n abstract toJson(model: Partial<TM>): Partial<TI>;\n}\n","import { ControlValueAccessor } from '@angular/forms';\nimport { Directive, Input, output } from '@angular/core';\nimport { ValueChangeCallback } from '../types/value-change-callback.type';\n\n@Directive()\nexport abstract class BaseControlValueAccessor<T = string> implements ControlValueAccessor {\n valueChanged = output<T>();\n\n onChange: ValueChangeCallback<T> | null = null;\n onTouched: VoidFunction | null = null;\n\n disabled = false;\n protected _value!: T;\n\n get value(): T {\n return this._value;\n }\n\n @Input() set value(value: T) {\n if (this.disabled) {\n return;\n }\n\n if (this._value === value) {\n return;\n }\n\n this._value = value;\n this.onTouched?.();\n this.onChange?.(this._value);\n this.valueChanged.emit(this._value);\n }\n\n writeValue(value: T): void {\n this.value = value;\n }\n\n registerOnChange(onChange: ValueChangeCallback<T>): void {\n this.onChange = onChange;\n }\n\n registerOnTouched(onTouched: VoidFunction): void {\n this.onTouched = onTouched;\n }\n\n setDisabledState(isDisabled: boolean) {\n this.disabled = isDisabled;\n }\n}\n","import { ControlValueAccessor } from '@angular/forms';\nimport { Directive, model, signal } from '@angular/core';\nimport { ValueChangeCallback } from '../types/value-change-callback.type';\n\n@Directive()\nexport abstract class SignalBaseControlValueAccessor<T = string> implements ControlValueAccessor {\n private onChange: ValueChangeCallback<T> | null = null;\n private onTouched: VoidFunction | null = null;\n\n value = model<T>();\n\n readonly disabled = signal(false);\n\n /**\n * Function that will be called by the input to update the value of the form-control and the model\n * @param value The new input value passed by $event in the template\n */\n valueChanged(value: T): void {\n if (this.disabled()) {\n return;\n }\n\n if (value === this.value()) {\n return;\n }\n\n this.onTouched?.();\n this.onChange?.(value);\n this.value.set(value);\n }\n\n writeValue(value: T): void {\n this.value.set(value);\n }\n\n registerOnChange(onChange: ValueChangeCallback<T>): void {\n this.onChange = onChange;\n }\n\n registerOnTouched(onTouched: VoidFunction): void {\n this.onTouched = onTouched;\n }\n\n setDisabledState(disabled: boolean): void {\n this.disabled.set(disabled);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["map"],"mappings":"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"}
@@ -1,18 +1,18 @@
1
1
  import { ControlValueAccessor } from '@angular/forms';
2
- import { EventEmitter } from '@angular/core';
3
2
  import { ValueChangeCallback } from '../types/value-change-callback.type';
4
3
  import * as i0 from "@angular/core";
5
4
  export declare abstract class BaseControlValueAccessor<T = string> implements ControlValueAccessor {
6
- valueChanged: EventEmitter<T>;
5
+ valueChanged: import("@angular/core").OutputEmitterRef<T>;
7
6
  onChange: ValueChangeCallback<T> | null;
8
7
  onTouched: VoidFunction | null;
8
+ disabled: boolean;
9
9
  protected _value: T;
10
10
  get value(): T;
11
11
  set value(value: T);
12
12
  writeValue(value: T): void;
13
13
  registerOnChange(onChange: ValueChangeCallback<T>): void;
14
14
  registerOnTouched(onTouched: VoidFunction): void;
15
- markAsTouched(): void;
15
+ setDisabledState(isDisabled: boolean): void;
16
16
  static ɵfac: i0.ɵɵFactoryDeclaration<BaseControlValueAccessor<any>, never>;
17
17
  static ɵdir: i0.ɵɵDirectiveDeclaration<BaseControlValueAccessor<any>, never, never, { "value": { "alias": "value"; "required": false; }; }, { "valueChanged": "valueChanged"; }, never, never, false, never>;
18
18
  }
@@ -1,17 +1,20 @@
1
1
  import { ControlValueAccessor } from '@angular/forms';
2
- import { EventEmitter } from '@angular/core';
3
2
  import { ValueChangeCallback } from '../types/value-change-callback.type';
4
3
  import * as i0 from "@angular/core";
5
4
  export declare abstract class SignalBaseControlValueAccessor<T = string> implements ControlValueAccessor {
6
- valueChanged: EventEmitter<T>;
7
- onChange: ValueChangeCallback<T> | null;
8
- onTouched: VoidFunction | null;
9
- protected value: import("@angular/core").ModelSignal<T | undefined>;
10
- protected constructor();
5
+ private onChange;
6
+ private onTouched;
7
+ value: import("@angular/core").ModelSignal<T | undefined>;
8
+ readonly disabled: import("@angular/core").WritableSignal<boolean>;
9
+ /**
10
+ * Function that will be called by the input to update the value of the form-control and the model
11
+ * @param value The new input value passed by $event in the template
12
+ */
13
+ valueChanged(value: T): void;
11
14
  writeValue(value: T): void;
12
15
  registerOnChange(onChange: ValueChangeCallback<T>): void;
13
16
  registerOnTouched(onTouched: VoidFunction): void;
14
- markAsTouched(): void;
17
+ setDisabledState(disabled: boolean): void;
15
18
  static ɵfac: i0.ɵɵFactoryDeclaration<SignalBaseControlValueAccessor<any>, never>;
16
- static ɵdir: i0.ɵɵDirectiveDeclaration<SignalBaseControlValueAccessor<any>, never, never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "valueChanged": "valueChanged"; "value": "valueChange"; }, never, never, false, never>;
19
+ static ɵdir: i0.ɵɵDirectiveDeclaration<SignalBaseControlValueAccessor<any>, never, never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, false, never>;
17
20
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "angular-base-lib",
3
- "version": "18.0.1",
3
+ "version": "18.0.3",
4
4
  "description": "Angular dao-feature, auth, model-components, navigation-service and other abstract helpers",
5
5
  "license": "MIT",
6
6
  "repository": {