@bimeister/pupakit.forms
Version:
PupaKit Forms
88 lines • 14.8 kB
JavaScript
import { Directive, Optional } from '@angular/core';
import { NgControl } from '@angular/forms';
import { filterNotNil, isEmpty, isNil, shareReplayWithRefCount } from '@bimeister/utilities';
import { BehaviorSubject, combineLatest, of, Subscription } from 'rxjs';
import { delay, distinctUntilChanged, map, startWith, switchMap, take, tap } from 'rxjs/operators';
import { isFormControlValidStatus } from '../../functions/is-form-control-valid-status.function';
import '../../types/on-change-callback.type';
import '../../types/on-touched-callback.type';
import * as i0 from "@angular/core";
import * as i1 from "@angular/forms";
export class InputBaseControlValueAccessor {
constructor(ngControl) {
this.ngControl = ngControl;
this.control$ = new BehaviorSubject(null);
this.value$ = new BehaviorSubject(null);
this.isDisabled$ = new BehaviorSubject(null);
this.isTouched$ = new BehaviorSubject(null);
this.isFocused$ = new BehaviorSubject(null);
this.isFilled$ = new BehaviorSubject(false);
this.isValid$ = this.control$.pipe(switchMap((control) => isNil(control)
? of(true)
: control.statusChanges.pipe(startWith(control.status), map((status) => isFormControlValidStatus(status)))), distinctUntilChanged(), shareReplayWithRefCount());
this.onChangeCallback$ = new BehaviorSubject(null);
this.onTouchedCallback$ = new BehaviorSubject(null);
this.subscription = new Subscription();
if (isNil(ngControl)) {
return;
}
ngControl.valueAccessor = this;
this.setControlRef(ngControl);
}
handleChangedValue(onChangeCallback, value) {
onChangeCallback(value);
this.setValue(value);
}
ngOnInit() {
this.subscription.add(this.processNgControlStatusChangesForHandleIsTouched());
}
ngOnDestroy() {
this.subscription.unsubscribe();
}
updateValue(updatedValue) {
this.isTouched$.next(true);
this.isFilled$.next(!isEmpty(updatedValue));
combineLatest([this.onChangeCallback$, this.onTouchedCallback$])
.pipe(take(1))
.subscribe(([onChangeCallback, onTouchedCallback]) => {
if (typeof onTouchedCallback === 'function') {
onTouchedCallback();
}
if (typeof onChangeCallback === 'function') {
this.handleChangedValue(onChangeCallback, updatedValue);
}
});
}
writeValue(newValue) {
this.setValue(newValue);
}
registerOnChange(onChange) {
this.onChangeCallback$.next(onChange);
}
registerOnTouched(onTouched) {
this.onTouchedCallback$.next(onTouched);
}
setDisabledState(isDisabled) {
this.processSetDisabledState(isDisabled);
}
processSetDisabledState(isDisabled) {
const nextDisabledValue = isDisabled ? true : null;
this.isDisabled$.next(nextDisabledValue);
}
setControlRef(control) {
this.control$.next(control);
}
processNgControlStatusChangesForHandleIsTouched() {
return this.control$
.pipe(filterNotNil(), switchMap((control) => control.statusChanges.pipe(delay(0), startWith(this.ngControl.touched), map(() => this.ngControl.touched), tap((isTouched) => this.isTouched$.next(isTouched)))))
.subscribe();
}
}
InputBaseControlValueAccessor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: InputBaseControlValueAccessor, deps: [{ token: i1.NgControl, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
InputBaseControlValueAccessor.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.12", type: InputBaseControlValueAccessor, ngImport: i0 });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: InputBaseControlValueAccessor, decorators: [{
type: Directive
}], ctorParameters: function () { return [{ type: i1.NgControl, decorators: [{
type: Optional
}] }]; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtYmFzZS1jb250cm9sLXZhbHVlLWFjY2Vzc29yLmFic3RyYWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2RlY2xhcmF0aW9ucy9jbGFzc2VzL2Fic3RyYWN0L2lucHV0LWJhc2UtY29udHJvbC12YWx1ZS1hY2Nlc3Nvci5hYnN0cmFjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkUsT0FBTyxFQUEyQyxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRixPQUFPLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQVksdUJBQXVCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN2RyxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBYyxFQUFFLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxLQUFLLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25HLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBQ2pHLE9BQWlDLHFDQUFxQyxDQUFDO0FBQ3ZFLE9BQWtDLHNDQUFzQyxDQUFDOzs7QUFHekUsTUFBTSxPQUFnQiw2QkFBNkI7SUErQmpELFlBQTJDLFNBQW9CO1FBQXBCLGNBQVMsR0FBVCxTQUFTLENBQVc7UUE5QjVDLGFBQVEsR0FBeUMsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUUsV0FBTSxHQUF1QixJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV2RCxnQkFBVyxHQUF1QyxJQUFJLGVBQWUsQ0FBVSxJQUFJLENBQUMsQ0FBQztRQUNyRixlQUFVLEdBQXVDLElBQUksZUFBZSxDQUFV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QUMsVUFBVSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVPLHVCQUF1QixDQUFDLFVBQW1CO1FBQ2pELE1BQU0saUJBQWlCLEdBQXNCLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDdEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRU8sYUFBYSxDQUFDLE9BQWtCO1FBQ3RDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFTywrQ0FBK0M7UUFDckQsT0FBTyxJQUFJLENBQUMsUUFBUTthQUNqQixJQUFJLENBQ0gsWUFBWSxFQUFFLEVBQ2QsU0FBUyxDQUFDLENBQUMsT0FBa0IsRUFBRSxFQUFFLENBQy9CLE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUN4QixLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQ2pDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUNqQyxHQUFHLENBQUMsQ0FBQyxTQUFrQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUM3RCxDQUNGLENBQ0Y7YUFDQSxTQUFTLEVBQUUsQ0FBQztJQUNqQixDQUFDOzsySEE5R21CLDZCQUE2QjsrR0FBN0IsNkJBQTZCOzRGQUE3Qiw2QkFBNkI7a0JBRGxELFNBQVM7OzBCQWdDSyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3JtQ29udHJvbFN0YXR1cywgTmdDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgZmlsdGVyTm90TmlsLCBpc0VtcHR5LCBpc05pbCwgTnVsbGFibGUsIHNoYXJlUmVwbGF5V2l0aFJlZkNvdW50IH0gZnJvbSAnQGJpbWVpc3Rlci91dGlsaXRpZXMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlLCBvZiwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWxheSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgc3RhcnRXaXRoLCBzd2l0Y2hNYXAsIHRha2UsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGlzRm9ybUNvbnRyb2xWYWxpZFN0YXR1cyB9IGZyb20gJy4uLy4uL2Z1bmN0aW9ucy9pcy1mb3JtLWNvbnRyb2wtdmFsaWQtc3RhdHVzLmZ1bmN0aW9uJztcbmltcG9ydCB7IE9uQ2hhbmdlQ2FsbGJhY2sgfSBmcm9tICcuLi8uLi90eXBlcy9vbi1jaGFuZ2UtY2FsbGJhY2sudHlwZSc7XG5pbXBvcnQgeyBPblRvdWNoZWRDYWxsYmFjayB9IGZyb20gJy4uLy4uL3R5cGVzL29uLXRvdWNoZWQtY2FsbGJhY2sudHlwZSc7XG5cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIElucHV0QmFzZUNvbnRyb2xWYWx1ZUFjY2Vzc29yPFQ+IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uRGVzdHJveSwgT25Jbml0IHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNvbnRyb2wkOiBCZWhhdmlvclN1YmplY3Q8TnVsbGFibGU8TmdDb250cm9sPj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KG51bGwpO1xuICBwdWJsaWMgcmVhZG9ubHkgdmFsdWUkOiBCZWhhdmlvclN1YmplY3Q8VD4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KG51bGwpO1xuXG4gIHB1YmxpYyByZWFkb25seSBpc0Rpc2FibGVkJDogQmVoYXZpb3JTdWJqZWN0PE51bGxhYmxlPGJvb2xlYW4+PiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4obnVsbCk7XG4gIHB1YmxpYyByZWFkb25seSBpc1RvdWNoZWQkOiBCZWhhdmlvclN1YmplY3Q8TnVsbGFibGU8Ym9vbGVhbj4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihudWxsKTtcbiAgcHVibGljIHJlYWRvbmx5IGlzRm9jdXNlZCQ6IEJlaGF2aW9yU3ViamVjdDxOdWxsYWJsZTxib29sZWFuPj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KG51bGwpO1xuICBwdWJsaWMgcmVhZG9ubHkgaXNGaWxsZWQkOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgaXNWYWxpZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLmNvbnRyb2wkLnBpcGUoXG4gICAgc3dpdGNoTWFwKChjb250cm9sOiBOZ0NvbnRyb2wpID0+XG4gICAgICBpc05pbChjb250cm9sKVxuICAgICAgICA/IG9mKHRydWUpXG4gICAgICAgIDogY29udHJvbC5zdGF0dXNDaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgICBzdGFydFdpdGgoY29udHJvbC5zdGF0dXMpLFxuICAgICAgICAgICAgbWFwKChzdGF0dXM6IEZvcm1Db250cm9sU3RhdHVzKSA9PiBpc0Zvcm1Db250cm9sVmFsaWRTdGF0dXMoc3RhdHVzKSlcbiAgICAgICAgICApXG4gICAgKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5V2l0aFJlZkNvdW50KClcbiAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IG9uQ2hhbmdlQ2FsbGJhY2skOiBCZWhhdmlvclN1YmplY3Q8T25DaGFuZ2VDYWxsYmFjazxUPj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE9uQ2hhbmdlQ2FsbGJhY2s8VD4+KFxuICAgIG51bGxcbiAgKTtcbiAgcHJpdmF0ZSByZWFkb25seSBvblRvdWNoZWRDYWxsYmFjayQ6IEJlaGF2aW9yU3ViamVjdDxPblRvdWNoZWRDYWxsYmFjaz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE9uVG91Y2hlZENhbGxiYWNrPihcbiAgICBudWxsXG4gICk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIHByb3RlY3RlZCByZWFkb25seSBuZ0NvbnRyb2w6IE5nQ29udHJvbCkge1xuICAgIGlmIChpc05pbChuZ0NvbnRyb2wpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIG5nQ29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcbiAgICB0aGlzLnNldENvbnRyb2xSZWYobmdDb250cm9sKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBzZXRWYWx1ZSh2YWx1ZTogVCk6IHZvaWQ7XG5cbiAgcHJvdGVjdGVkIGhhbmRsZUNoYW5nZWRWYWx1ZShvbkNoYW5nZUNhbGxiYWNrOiBPbkNoYW5nZUNhbGxiYWNrPGFueT4sIHZhbHVlOiBUKTogdm9pZCB7XG4gICAgb25DaGFuZ2VDYWxsYmFjayh2YWx1ZSk7XG4gICAgdGhpcy5zZXRWYWx1ZSh2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKHRoaXMucHJvY2Vzc05nQ29udHJvbFN0YXR1c0NoYW5nZXNGb3JIYW5kbGVJc1RvdWNoZWQoKSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVWYWx1ZSh1cGRhdGVkVmFsdWU6IFQpOiB2b2lkIHtcbiAgICB0aGlzLmlzVG91Y2hlZCQubmV4dCh0cnVlKTtcbiAgICB0aGlzLmlzRmlsbGVkJC5uZXh0KCFpc0VtcHR5KHVwZGF0ZWRWYWx1ZSkpO1xuXG4gICAgY29tYmluZUxhdGVzdChbdGhpcy5vbkNoYW5nZUNhbGxiYWNrJCwgdGhpcy5vblRvdWNoZWRDYWxsYmFjayRdKVxuICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgIC5zdWJzY3JpYmUoKFtvbkNoYW5nZUNhbGxiYWNrLCBvblRvdWNoZWRDYWxsYmFja106IFtPbkNoYW5nZUNhbGxiYWNrPFQ+LCBPblRvdWNoZWRDYWxsYmFja10pID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBvblRvdWNoZWRDYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIG9uVG91Y2hlZENhbGxiYWNrKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIG9uQ2hhbmdlQ2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZWRWYWx1ZShvbkNoYW5nZUNhbGxiYWNrLCB1cGRhdGVkVmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyB3cml0ZVZhbHVlKG5ld1ZhbHVlOiBUKTogdm9pZCB7XG4gICAgdGhpcy5zZXRWYWx1ZShuZXdWYWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShvbkNoYW5nZTogT25DaGFuZ2VDYWxsYmFjazxUPik6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2VDYWxsYmFjayQubmV4dChvbkNoYW5nZSk7XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQob25Ub3VjaGVkOiBPblRvdWNoZWRDYWxsYmFjayk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkQ2FsbGJhY2skLm5leHQob25Ub3VjaGVkKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLnByb2Nlc3NTZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzU2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgbmV4dERpc2FibGVkVmFsdWU6IE51bGxhYmxlPGJvb2xlYW4+ID0gaXNEaXNhYmxlZCA/IHRydWUgOiBudWxsO1xuICAgIHRoaXMuaXNEaXNhYmxlZCQubmV4dChuZXh0RGlzYWJsZWRWYWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIHNldENvbnRyb2xSZWYoY29udHJvbDogTmdDb250cm9sKTogdm9pZCB7XG4gICAgdGhpcy5jb250cm9sJC5uZXh0KGNvbnRyb2wpO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzTmdDb250cm9sU3RhdHVzQ2hhbmdlc0ZvckhhbmRsZUlzVG91Y2hlZCgpOiBTdWJzY3JpcHRpb24ge1xuICAgIHJldHVybiB0aGlzLmNvbnRyb2wkXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyTm90TmlsKCksXG4gICAgICAgIHN3aXRjaE1hcCgoY29udHJvbDogTmdDb250cm9sKSA9PlxuICAgICAgICAgIGNvbnRyb2wuc3RhdHVzQ2hhbmdlcy5waXBlKFxuICAgICAgICAgICAgZGVsYXkoMCksXG4gICAgICAgICAgICBzdGFydFdpdGgodGhpcy5uZ0NvbnRyb2wudG91Y2hlZCksXG4gICAgICAgICAgICBtYXAoKCkgPT4gdGhpcy5uZ0NvbnRyb2wudG91Y2hlZCksXG4gICAgICAgICAgICB0YXAoKGlzVG91Y2hlZDogYm9vbGVhbikgPT4gdGhpcy5pc1RvdWNoZWQkLm5leHQoaXNUb3VjaGVkKSlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxufVxuIl19