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 <ng-template #dialogContent>
8 <div class="modal-header bg-info">
9 <h4 class="modal-title" i18n>Record Editor: {{recordLabel}}</h4>
10 <ng-container *ngIf="isDialog()">
11 <button type="button" class="close"
12 i18n-aria-label aria-label="Close" (click)="closeEditor()">
13 <span aria-hidden="true">×</span>
17 <div class="modal-body">
18 <form #fmEditForm="ngForm" role="form" class="form-validated common-form striped-odd">
19 <ng-container *ngIf="!record">
20 <!-- display a progress dialog while the editor
21 fetches the needed data -->
22 <eg-progress-inline></eg-progress-inline>
24 <ng-container *ngIf="record">
25 <div class="form-group row" *ngFor="let field of fields">
26 <div class="col-lg-3">
27 <label for="{{idPrefix}}-{{field.name}}">{{field.label}}</label>
29 <div class="col-lg-9">
31 <ng-container [ngSwitch]="inputType(field)">
33 <ng-container *ngSwitchCase="'template'">
35 *ngTemplateOutlet="field.template; context:customTemplateFieldContext(field)">
39 <ng-container *ngSwitchCase="'readonly'">
40 <span>{{record[field.name]()}}</span>
43 <ng-container *ngSwitchCase="'readonly-money'">
44 <span>{{record[field.name]() | currency}}</span>
47 <ng-container *ngSwitchCase="'readonly-list'">
48 <ng-container *ngIf="field.linkedValues">
49 <span>{{field.linkedValues[0].label}}</span>
53 <ng-container *ngSwitchCase="'timestamp'">
55 domId="{{idPrefix}}-{{field.name}}"
56 [readOnly]="field.readOnly"
57 (onChangeAsIso)="record[field.name]($event)"
58 initialIso="{{record[field.name]()}}">
62 <ng-container *ngSwitchCase="'timestamp-timepicker'">
66 domId="{{idPrefix}}-{{field.name}}"
67 (onChangeAsIso)="record[field.name]($event)"
69 [readOnly]="field.readOnly"
70 initialIso="{{record[field.name]()}}">
74 <ng-container *ngSwitchCase="'org_unit'">
76 placeholder="{{field.label}}..."
78 domId="{{idPrefix}}-{{field.name}}"
79 [limitPerms]="modePerms[mode]"
80 [readOnly]="field.readOnly"
81 [applyDefault]="field.orgDefaultAllowed"
82 [initialOrgId]="record[field.name]()"
83 (onChange)="record[field.name]($event)">
87 <ng-container *ngSwitchCase="'money'">
90 type="number" step="0.1"
92 id="{{idPrefix}}-{{field.name}}"
93 placeholder="{{field.label}}..."
95 [readonly]="field.readOnly"
96 [required]="field.isRequired()"
97 [ngModel]="record[field.name]()"
98 (ngModelChange)="record[field.name]($event)"/>
101 <ng-container *ngSwitchCase="'int'">
105 name="{{field.name}}"
106 id="{{idPrefix}}-{{field.name}}"
107 placeholder="{{field.label}}..."
109 [required]="field.isRequired()"
110 [ngModel]="record[field.name]()"
111 (ngModelChange)="record[field.name]($event)"/>
114 <ng-container *ngSwitchCase="'float'">
117 type="number" step="0.1"
118 name="{{field.name}}"
119 id="{{idPrefix}}-{{field.name}}"
120 placeholder="{{field.label}}..."
122 [required]="field.isRequired()"
123 [ngModel]="record[field.name]()"
124 (ngModelChange)="record[field.name]($event)"/>
127 <ng-container *ngSwitchCase="'text'">
130 id="{{idPrefix}}-{{field.name}}" name="{{field.name}}"
132 placeholder="{{field.label}}..." i18n-placeholder
133 [required]="field.isRequired()"
134 [ngModel]="record[field.name]()"
135 (ngModelChange)="record[field.name]($event)"/>
138 <ng-container *ngSwitchCase="'bool'">
140 class="form-check-input"
142 name="{{field.name}}"
143 id="{{idPrefix}}-{{field.name}}"
144 [disabled]="field.readOnly"
145 [ngModel]="record[field.name]()"
146 (ngModelChange)="record[field.name]($event)"/>
149 <ng-container *ngSwitchCase="'readonly-au'">
150 <ng-container *ngIf="field.linkedValues">
151 <a href="/eg/staff/circ/patron/{{field.linkedValues[0].id}}/checkout" target="_blank">{{field.linkedValues[0].label}}
152 <span class="material-icons" i18n-title title="Open user record in new tab">open_in_new</span></a>
156 <ng-container *ngSwitchCase="'list'">
158 id="{{idPrefix}}-{{field.name}}" name="{{field.name}}"
159 placeholder="{{field.label}}..." i18n-placeholder
160 [required]="field.isRequired()"
161 [entries]="field.linkedValues"
162 [asyncDataSource]="field.linkedValuesSource"
163 [startId]="record[field.name]()"
164 (onChange)="record[field.name]($event ? $event.id : null)">
167 </ng-container> <!-- switch -->
169 <div class="col-lg-1" *ngIf="field.i18n && !field.readOnly">
170 <a (click)="openTranslator(field.name)"
171 i18n-title title="Translate">
172 <button class="btn btn-outline-info mat-icon-in-button">
173 <span class="material-icons">translate</span>
181 <div class="modal-footer">
182 <ng-container *ngIf="isDialog()">
183 <button type="button" class="btn btn-success" *ngIf="mode == 'view'"
184 (click)="closeEditor()" i18n>Close</button>
185 <button type="button" class="btn btn-warning ml-2" *ngIf="mode != 'view'"
186 (click)="cancel()" i18n>Cancel</button>
188 <button type="button" class="btn btn-info"
189 [disabled]="fmEditForm.invalid" *ngIf="mode != 'view'"
190 (click)="save()" i18n>Save</button>
194 <ng-container *ngIf="!isDialog()">
195 <!-- in "inline" mode, render the editor pane right here -->
196 <ng-container *ngTemplateOutlet="dialogContent">