1 <!-- idlObject and fieldName applied programmatically -->
2 <eg-translate #translator></eg-translate>
4 <eg-string #successStr text="Update Succeeded" i18n-text></eg-string>
5 <eg-string #failStr text="Update Failed" i18n-text></eg-string>
7 <eg-confirm-dialog #confirmDel
8 dialogTitle="Delete?" i18n-dialogTitle
9 dialogBody="Delete {{recordLabel}}?" i18n-dialogBody>
12 <ng-template #dialogContent>
13 <div class="modal-header bg-info" *ngIf="!hideBanner">
14 <h4 class="modal-title" i18n>Record Editor: {{recordLabel}}</h4>
15 <ng-container *ngIf="isDialog()">
16 <button type="button" class="close"
17 i18n-aria-label aria-label="Close" (click)="closeEditor()">
18 <span aria-hidden="true">×</span>
22 <div class="modal-body">
23 <form #fmEditForm="ngForm" role="form" class="form-validated common-form striped-odd">
24 <ng-container *ngIf="!record">
25 <!-- display a progress dialog while the editor
26 fetches the needed data -->
27 <eg-progress-inline></eg-progress-inline>
29 <ng-container *ngIf="record">
30 <div class="form-group row" *ngFor="let field of fields">
31 <div class="col-lg-3">
32 <label for="{{idPrefix}}-{{field.name}}">{{field.label}}</label>
34 <div class="col-lg-9">
36 <ng-container [ngSwitch]="inputType(field)">
38 <ng-container *ngSwitchCase="'template'">
40 *ngTemplateOutlet="field.template; context:customTemplateFieldContext(field)">
44 <ng-container *ngSwitchCase="'readonly'">
45 <span>{{record[field.name]()}}</span>
48 <ng-container *ngSwitchCase="'readonly-money'">
49 <span>{{record[field.name]() | currency}}</span>
52 <ng-container *ngSwitchCase="'readonly-list'">
53 <ng-container *ngIf="field.linkedValues">
54 <span>{{field.linkedValues[0].label}}</span>
58 <ng-container *ngSwitchCase="'timestamp'">
60 domId="{{idPrefix}}-{{field.name}}"
61 [readOnly]="field.readOnly"
62 (onChangeAsIso)="record[field.name]($event)"
63 initialIso="{{record[field.name]()}}">
67 <ng-container *ngSwitchCase="'timestamp-timepicker'">
71 domId="{{idPrefix}}-{{field.name}}"
72 (onChangeAsIso)="record[field.name]($event)"
74 [readOnly]="field.readOnly"
75 initialIso="{{record[field.name]()}}">
79 <ng-container *ngSwitchCase="'org_unit'">
81 placeholder="{{field.label}}..."
83 domId="{{idPrefix}}-{{field.name}}"
84 [limitPerms]="modePerms[mode]"
85 [readOnly]="field.readOnly"
86 [applyDefault]="field.orgDefaultAllowed"
87 [applyOrgId]="record[field.name]()"
88 (onChange)="record[field.name]($event)">
92 <ng-container *ngSwitchCase="'money'">
95 type="number" step="0.1"
97 id="{{idPrefix}}-{{field.name}}"
98 placeholder="{{field.label}}..."
100 [readonly]="field.readOnly"
101 [required]="field.isRequired()"
102 [ngModel]="record[field.name]()"
103 (ngModelChange)="record[field.name]($event)"/>
106 <ng-container *ngSwitchCase="'int'">
110 name="{{field.name}}"
111 id="{{idPrefix}}-{{field.name}}"
112 placeholder="{{field.label}}..."
114 [required]="field.isRequired()"
115 [ngModel]="record[field.name]()"
116 (ngModelChange)="record[field.name]($event)"/>
119 <ng-container *ngSwitchCase="'float'">
122 type="number" step="0.1"
123 name="{{field.name}}"
124 id="{{idPrefix}}-{{field.name}}"
125 placeholder="{{field.label}}..."
127 [required]="field.isRequired()"
128 [ngModel]="record[field.name]()"
129 (ngModelChange)="record[field.name]($event)"/>
132 <ng-container *ngSwitchCase="'text'">
135 id="{{idPrefix}}-{{field.name}}" name="{{field.name}}"
137 placeholder="{{field.label}}..." i18n-placeholder
138 [required]="field.isRequired()"
139 [ngModel]="record[field.name]()"
140 (ngModelChange)="record[field.name]($event)"/>
143 <ng-container *ngSwitchCase="'bool'">
145 class="form-check-input"
147 name="{{field.name}}"
148 id="{{idPrefix}}-{{field.name}}"
149 [disabled]="field.readOnly"
150 [ngModel]="record[field.name]()"
151 (ngModelChange)="record[field.name]($event)"/>
154 <ng-container *ngSwitchCase="'readonly-au'">
155 <ng-container *ngIf="field.linkedValues">
156 <a href="/eg/staff/circ/patron/{{field.linkedValues[0].id}}/checkout" target="_blank">{{field.linkedValues[0].label}}
157 <span class="material-icons" i18n-title title="Open user record in new tab">open_in_new</span></a>
161 <ng-container *ngSwitchCase="'list'">
163 id="{{idPrefix}}-{{field.name}}" name="{{field.name}}"
164 placeholder="{{field.label}}..." i18n-placeholder
165 [required]="field.isRequired()"
166 [entries]="field.linkedValues"
167 [asyncDataSource]="field.linkedValuesSource"
168 [selectedId]="record[field.name]()"
169 (onChange)="record[field.name]($event ? $event.id : null)">
172 </ng-container> <!-- switch -->
174 <div class="col-lg-1" *ngIf="field.i18n && !field.readOnly">
175 <a (click)="openTranslator(field.name)"
176 i18n-title title="Translate">
177 <button class="btn btn-outline-info mat-icon-in-button">
178 <span class="material-icons">translate</span>
186 <div class="modal-footer">
187 <button type="button" class="btn {{action.buttonCss}}"
188 *ngFor="let action of actions" [disabled]="action.disabled"
189 (click)="action.actionClick.emit({action: action.key, record: record})">
192 <ng-container *ngIf="isDialog()">
193 <button type="button" class="btn btn-success" *ngIf="mode == 'view'"
194 (click)="closeEditor()" i18n>Close</button>
195 <button type="button" class="btn btn-warning ml-2" *ngIf="mode != 'view'"
196 (click)="cancel()" i18n>Cancel</button>
199 <ng-container *ngIf="showDelete && mode != 'view'">
200 <button type="button" class="btn btn-warning" (click)="remove()"
201 [disabled]="record && record.isnew()" i18n>Delete</button>
204 <button type="button" class="btn btn-info"
205 [disabled]="fmEditForm.invalid" *ngIf="mode != 'view'"
206 (click)="save()" i18n>Save</button>
210 <ng-container *ngIf="!isDialog()">
211 <!-- in "inline" mode, render the editor pane right here -->
212 <ng-container *ngTemplateOutlet="dialogContent">