// Display within a modal dialog window or inline in the page.
@Input() displayMode: 'dialog' | 'inline' = 'dialog';
+ // Hide the top 'Record Editor: ...' banner. Primarily useful
+ // for displayMode === 'inline'
+ @Input() hideBanner: boolean;
+
// Emit the modified object when the save action completes.
- @Output() onSave$ = new EventEmitter<IdlObject>();
+ @Output() recordSaved = new EventEmitter<IdlObject>();
// Emit the original object when the save action is canceled.
- @Output() onCancel$ = new EventEmitter<IdlObject>();
+ @Output() recordCanceled = new EventEmitter<IdlObject>();
// Emit an error message when the save action fails.
- @Output() onError$ = new EventEmitter<string>();
+ @Output() recordError = new EventEmitter<string>();
@ViewChild('translator') private translator: TranslateComponent;
@ViewChild('successStr') successStr: StringComponent;
// 'view' for viewing an existing record without editing
@Input() mode: 'create' | 'update' | 'view' = 'create';
- // Record ID to view/update. Value is dynamic. Records are not
- // fetched until .open() is called.
- _recordId: any;
+ // recordId and record getters and setters.
+ // Note that setting the this.recordId to NULL does not clear the
+ // current value of this.record and vice versa. Only viable data
+ // is actionable. This allows the caller to use both @Input()'s
+ // without each clobbering the other.
+
+ // Record ID to view/update.
+ _recordId: any = null;
@Input() set recordId(id: any) {
if (id) {
if (id !== this._recordId) {
this._recordId = id;
+ this._record = null; // force re-fetch
this.handleRecordChange();
}
} else {
this._recordId = null;
- this._record = null;
}
}
}
// IDL record we are editing
- _record: IdlObject;
-
+ _record: IdlObject = null;
@Input() set record(r: IdlObject) {
if (r) {
if (!this.idl.pkeyMatches(this.record, r)) {
this._record = r;
+ this._recordId = null; // avoid mismatch
this.handleRecordChange();
}
} else {
- this._recordId = null;
this._record = null;
}
}
this.convertDatatypesToIdl(recToSave);
this.pcrud[this.mode]([recToSave]).toPromise().then(
result => {
- this.onSave$.emit(result);
+ this.recordSaved.emit(result);
this.successStr.current().then(msg => this.toast.success(msg));
if (this.isDialog()) { this.close(result); }
},
error => {
- this.onError$.emit(error);
+ this.recordError.emit(error);
this.failStr.current().then(msg => this.toast.warning(msg));
if (this.isDialog()) { this.error(error); }
}
}
cancel() {
- this.onCancel$.emit(this.record);
+ this.recordCanceled.emit(this.record);
this.close();
}