ngrx-forms
Version:
Proper integration of forms in Angular 4 applications using ngrx
51 lines • 6.13 kB
JavaScript
import { Directive, HostListener, Inject, Input, Optional } from '@angular/core';
import { ActionsSubject } from '@ngrx/store';
import { MarkAsSubmittedAction } from '../actions';
import * as i0 from "@angular/core";
import * as i1 from "@ngrx/store";
export class NgrxFormDirective {
constructor(actionsSubject) {
this.actionsSubject = actionsSubject;
this.actionsSubject = actionsSubject;
}
dispatchAction(action) {
if (this.actionsSubject !== null) {
this.actionsSubject.next(action);
}
else {
throw new Error('ActionsSubject must be present in order to dispatch actions!');
}
}
ngOnInit() {
if (!this.state) {
throw new Error('The form state must not be undefined!');
}
}
onSubmit(event) {
event.preventDefault();
if (this.state.isUnsubmitted) {
this.dispatchAction(new MarkAsSubmittedAction(this.state.id));
}
}
}
NgrxFormDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: NgrxFormDirective, deps: [{ token: ActionsSubject, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
NgrxFormDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.13", type: NgrxFormDirective, selector: "form:not([ngrxFormsAction])[ngrxFormState]", inputs: { state: ["ngrxFormState", "state"] }, host: { listeners: { "submit": "onSubmit($event)" } }, ngImport: i0 });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: NgrxFormDirective, decorators: [{
type: Directive,
args: [{
// tslint:disable-next-line:directive-selector
selector: 'form:not([ngrxFormsAction])[ngrxFormState]',
}]
}], ctorParameters: function () { return [{ type: i1.ActionsSubject, decorators: [{
type: Optional
}, {
type: Inject,
args: [ActionsSubject]
}] }]; }, propDecorators: { state: [{
type: Input,
args: ['ngrxFormState']
}], onSubmit: [{
type: HostListener,
args: ['submit', ['$event']]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2dyb3VwL2RpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFVLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTdDLE9BQU8sRUFBVyxxQkFBcUIsRUFBRSxNQUFNLFlBQVksQ0FBQzs7O0FBWTVELE1BQU0sT0FBTyxpQkFBaUI7SUFJNUIsWUFDOEMsY0FBcUM7UUFBckMsbUJBQWMsR0FBZCxjQUFjLENBQXVCO1FBRWpGLElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO0lBQ3ZDLENBQUM7SUFFUyxjQUFjLENBQUMsTUFBNEI7UUFDbkQsSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLElBQUksRUFBRTtZQUNoQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNsQzthQUFNO1lBQ0wsTUFBTSxJQUFJLEtBQUssQ0FBQyw4REFBOEQsQ0FBQyxDQUFDO1NBQ2pGO0lBQ0gsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNmLE1BQU0sSUFBSSxLQUFLLENBQUMsdUNBQXVDLENBQUMsQ0FBQztTQUMxRDtJQUNILENBQUM7SUFHRCxRQUFRLENBQUMsS0FBa0I7UUFDekIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUU7WUFDNUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLHFCQUFxQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUMvRDtJQUNILENBQUM7OytHQTlCVSxpQkFBaUIsa0JBS04sY0FBYzttR0FMekIsaUJBQWlCOzRGQUFqQixpQkFBaUI7a0JBSjdCLFNBQVM7bUJBQUM7b0JBQ1QsOENBQThDO29CQUM5QyxRQUFRLEVBQUUsNENBQTRDO2lCQUN2RDs7MEJBTUksUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxjQUFjOzRDQUhaLEtBQUs7c0JBQTVCLEtBQUs7dUJBQUMsZUFBZTtnQkF1QnRCLFFBQVE7c0JBRFAsWUFBWTt1QkFBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEhvc3RMaXN0ZW5lciwgSW5qZWN0LCBJbnB1dCwgT25Jbml0LCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBY3Rpb25zU3ViamVjdCB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcclxuXHJcbmltcG9ydCB7IEFjdGlvbnMsIE1hcmtBc1N1Ym1pdHRlZEFjdGlvbiB9IGZyb20gJy4uL2FjdGlvbnMnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXBTdGF0ZSwgS2V5VmFsdWUgfSBmcm9tICcuLi9zdGF0ZSc7XHJcblxyXG4vLyB0aGlzIGludGVyZmFjZSBqdXN0IGV4aXN0cyB0byBwcmV2ZW50IGEgZGlyZWN0IHJlZmVyZW5jZSB0b1xyXG4vLyBgRXZlbnRgIGluIG91ciBjb2RlLCB3aGljaCBvdGhlcndpc2UgY2F1c2VzIGlzc3VlcyBpbiBOYXRpdmVTY3JpcHRcclxuLy8gYXBwbGljYXRpb25zXHJcbmludGVyZmFjZSBDdXN0b21FdmVudCBleHRlbmRzIEV2ZW50IHsgfVxyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmRpcmVjdGl2ZS1zZWxlY3RvclxyXG4gIHNlbGVjdG9yOiAnZm9ybTpub3QoW25ncnhGb3Jtc0FjdGlvbl0pW25ncnhGb3JtU3RhdGVdJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIE5ncnhGb3JtRGlyZWN0aXZlPFRTdGF0ZVZhbHVlIGV4dGVuZHMgS2V5VmFsdWU+IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8taW5wdXQtcmVuYW1lXHJcbiAgQElucHV0KCduZ3J4Rm9ybVN0YXRlJykgc3RhdGU6IEZvcm1Hcm91cFN0YXRlPFRTdGF0ZVZhbHVlPjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEFjdGlvbnNTdWJqZWN0KSBwcml2YXRlIGFjdGlvbnNTdWJqZWN0OiBBY3Rpb25zU3ViamVjdCB8IG51bGxcclxuICApIHtcclxuICAgIHRoaXMuYWN0aW9uc1N1YmplY3QgPSBhY3Rpb25zU3ViamVjdDtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBkaXNwYXRjaEFjdGlvbihhY3Rpb246IEFjdGlvbnM8VFN0YXRlVmFsdWU+KSB7XHJcbiAgICBpZiAodGhpcy5hY3Rpb25zU3ViamVjdCAhPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLmFjdGlvbnNTdWJqZWN0Lm5leHQoYWN0aW9uKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignQWN0aW9uc1N1YmplY3QgbXVzdCBiZSBwcmVzZW50IGluIG9yZGVyIHRvIGRpc3BhdGNoIGFjdGlvbnMhJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGlmICghdGhpcy5zdGF0ZSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBmb3JtIHN0YXRlIG11c3Qgbm90IGJlIHVuZGVmaW5lZCEnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ3N1Ym1pdCcsIFsnJGV2ZW50J10pXHJcbiAgb25TdWJtaXQoZXZlbnQ6IEN1c3RvbUV2ZW50KSB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgaWYgKHRoaXMuc3RhdGUuaXNVbnN1Ym1pdHRlZCkge1xyXG4gICAgICB0aGlzLmRpc3BhdGNoQWN0aW9uKG5ldyBNYXJrQXNTdWJtaXR0ZWRBY3Rpb24odGhpcy5zdGF0ZS5pZCkpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=