]>
Commit | Line | Data |
---|---|---|
9f95a23c | 1 | <div class="cd-col-form"> |
11fdf7f2 | 2 | <form name="nfsForm" |
11fdf7f2 TL |
3 | #formDir="ngForm" |
4 | [formGroup]="nfsForm" | |
5 | novalidate> | |
9f95a23c TL |
6 | <div class="card"> |
7 | <div i18n="form title|Example: Create Pool@@formTitle" | |
8 | class="card-header">{{ action | titlecase }} {{ resource | upperFirst }}</div> | |
11fdf7f2 | 9 | |
9f95a23c | 10 | <div class="card-body"> |
11fdf7f2 | 11 | <!-- cluster_id --> |
9f95a23c | 12 | <div class="form-group row" |
11fdf7f2 | 13 | *ngIf="!isDefaultCluster"> |
9f95a23c TL |
14 | <label class="cd-col-form-label required" |
15 | for="cluster_id" | |
16 | i18n>Cluster</label> | |
17 | <div class="cd-col-form-input"> | |
18 | <select class="form-control custom-select" | |
11fdf7f2 TL |
19 | formControlName="cluster_id" |
20 | name="cluster_id" | |
21 | id="cluster_id" | |
22 | (change)="onClusterChange()"> | |
23 | <option *ngIf="allClusters === null" | |
24 | value="" | |
25 | i18n>Loading...</option> | |
26 | <option *ngIf="allClusters !== null && allClusters.length === 0" | |
27 | value="" | |
28 | i18n>-- No cluster available --</option> | |
29 | <option *ngIf="allClusters !== null && allClusters.length > 0" | |
30 | value="" | |
31 | i18n>-- Select the cluster --</option> | |
32 | <option *ngFor="let cluster of allClusters" | |
33 | [value]="cluster">{{ cluster }}</option> | |
34 | </select> | |
9f95a23c | 35 | <span class="invalid-feedback" |
11fdf7f2 | 36 | *ngIf="nfsForm.showError('cluster_id', formDir, 'required')" |
f6b5b4d7 | 37 | i18n>This field is required.</span> |
11fdf7f2 TL |
38 | </div> |
39 | </div> | |
40 | ||
41 | <!-- daemons --> | |
9f95a23c TL |
42 | <div class="form-group row"> |
43 | <label class="cd-col-form-label" | |
11fdf7f2 TL |
44 | for="daemons"> |
45 | <ng-container i18n>Daemons</ng-container> | |
46 | </label> | |
9f95a23c | 47 | <div class="cd-col-form-input"> |
11fdf7f2 TL |
48 | <ng-container *ngFor="let daemon of nfsForm.getValue('daemons'); let i = index"> |
49 | <div class="input-group cd-mb"> | |
9f95a23c | 50 | <input class="cd-form-control" |
11fdf7f2 TL |
51 | type="text" |
52 | [value]="daemon" | |
53 | disabled /> | |
9f95a23c TL |
54 | <span class="input-group-append"> |
55 | <button class="btn btn-light" | |
11fdf7f2 TL |
56 | type="button" |
57 | (click)="removeDaemon(i, daemon)"> | |
9f95a23c | 58 | <i [ngClass]="[icons.destroy]" |
11fdf7f2 TL |
59 | aria-hidden="true"></i> |
60 | </button> | |
61 | </span> | |
62 | </div> | |
63 | </ng-container> | |
64 | ||
65 | <div class="row"> | |
66 | <div class="col-md-12"> | |
67 | <cd-select [data]="nfsForm.get('daemons').value" | |
68 | [options]="daemonsSelections" | |
69 | [messages]="daemonsMessages" | |
70 | (selection)="onDaemonSelection()" | |
9f95a23c TL |
71 | elemClass="btn btn-light float-right"> |
72 | <i [ngClass]="[icons.add]"></i> | |
11fdf7f2 TL |
73 | <ng-container i18n>Add daemon</ng-container> |
74 | </cd-select> | |
75 | </div> | |
76 | </div> | |
77 | </div> | |
78 | </div> | |
79 | ||
80 | <!-- FSAL --> | |
81 | <div formGroupName="fsal"> | |
82 | <!-- Name --> | |
9f95a23c TL |
83 | <div class="form-group row"> |
84 | <label class="cd-col-form-label required" | |
85 | for="name" | |
86 | i18n>Storage Backend</label> | |
87 | <div class="cd-col-form-input"> | |
88 | <select class="form-control custom-select" | |
11fdf7f2 TL |
89 | formControlName="name" |
90 | name="name" | |
91 | id="name" | |
92 | (change)="fsalChangeHandler()"> | |
93 | <option *ngIf="allFsals === null" | |
94 | value="" | |
95 | i18n>Loading...</option> | |
96 | <option *ngIf="allFsals !== null && allFsals.length === 0" | |
97 | value="" | |
98 | i18n>-- No data pools available --</option> | |
99 | <option *ngIf="allFsals !== null && allFsals.length > 0" | |
100 | value="" | |
101 | i18n>-- Select the storage backend --</option> | |
102 | <option *ngFor="let fsal of allFsals" | |
103 | [value]="fsal.value">{{ fsal.descr }}</option> | |
104 | </select> | |
9f95a23c | 105 | <span class="invalid-feedback" |
11fdf7f2 | 106 | *ngIf="nfsForm.showError('name', formDir, 'required')" |
f6b5b4d7 | 107 | i18n>This field is required.</span> |
11fdf7f2 TL |
108 | </div> |
109 | </div> | |
110 | ||
111 | <!-- RGW user --> | |
9f95a23c | 112 | <div class="form-group row" |
11fdf7f2 | 113 | *ngIf="nfsForm.getValue('name') === 'RGW'"> |
9f95a23c TL |
114 | <label class="cd-col-form-label required" |
115 | for="rgw_user_id" | |
116 | i18n>Object Gateway User</label> | |
117 | <div class="cd-col-form-input"> | |
118 | <select class="form-control custom-select" | |
11fdf7f2 TL |
119 | formControlName="rgw_user_id" |
120 | name="rgw_user_id" | |
121 | id="rgw_user_id" | |
122 | (change)="rgwUserIdChangeHandler()"> | |
123 | <option *ngIf="allRgwUsers === null" | |
124 | value="" | |
125 | i18n>Loading...</option> | |
126 | <option *ngIf="allRgwUsers !== null && allRgwUsers.length === 0" | |
127 | value="" | |
128 | i18n>-- No users available --</option> | |
129 | <option *ngIf="allRgwUsers !== null && allRgwUsers.length > 0" | |
130 | value="" | |
131 | i18n>-- Select the object gateway user --</option> | |
132 | <option *ngFor="let rgwUserId of allRgwUsers" | |
133 | [value]="rgwUserId">{{ rgwUserId }}</option> | |
134 | </select> | |
9f95a23c | 135 | <span class="invalid-feedback" |
11fdf7f2 | 136 | *ngIf="nfsForm.showError('rgw_user_id', formDir, 'required')" |
f6b5b4d7 | 137 | i18n>This field is required.</span> |
11fdf7f2 TL |
138 | </div> |
139 | </div> | |
140 | ||
141 | <!-- CephFS user_id --> | |
9f95a23c | 142 | <div class="form-group row" |
11fdf7f2 | 143 | *ngIf="nfsForm.getValue('name') === 'CEPH'"> |
9f95a23c TL |
144 | <label class="cd-col-form-label required" |
145 | for="user_id" | |
146 | i18n>CephFS User ID</label> | |
147 | <div class="cd-col-form-input"> | |
148 | <select class="form-control custom-select" | |
11fdf7f2 TL |
149 | formControlName="user_id" |
150 | name="user_id" | |
151 | id="user_id"> | |
152 | <option *ngIf="allCephxClients === null" | |
153 | value="" | |
154 | i18n>Loading...</option> | |
155 | <option *ngIf="allCephxClients !== null && allCephxClients.length === 0" | |
156 | value="" | |
157 | i18n>-- No clients available --</option> | |
158 | <option *ngIf="allCephxClients !== null && allCephxClients.length > 0" | |
159 | value="" | |
160 | i18n>-- Select the cephx client --</option> | |
161 | <option *ngFor="let client of allCephxClients" | |
162 | [value]="client">{{ client }}</option> | |
163 | </select> | |
9f95a23c | 164 | <span class="invalid-feedback" |
11fdf7f2 | 165 | *ngIf="nfsForm.showError('user_id', formDir, 'required')" |
f6b5b4d7 | 166 | i18n>This field is required.</span> |
11fdf7f2 TL |
167 | </div> |
168 | </div> | |
169 | ||
170 | <!-- CephFS fs_name --> | |
9f95a23c | 171 | <div class="form-group row" |
11fdf7f2 | 172 | *ngIf="nfsForm.getValue('name') === 'CEPH'"> |
9f95a23c TL |
173 | <label class="cd-col-form-label required" |
174 | for="fs_name" | |
175 | i18n>CephFS Name</label> | |
176 | <div class="cd-col-form-input"> | |
177 | <select class="form-control custom-select" | |
11fdf7f2 TL |
178 | formControlName="fs_name" |
179 | name="fs_name" | |
180 | id="fs_name" | |
181 | (change)="rgwUserIdChangeHandler()"> | |
182 | <option *ngIf="allFsNames === null" | |
183 | value="" | |
184 | i18n>Loading...</option> | |
185 | <option *ngIf="allFsNames !== null && allFsNames.length === 0" | |
186 | value="" | |
187 | i18n>-- No CephFS filesystem available --</option> | |
188 | <option *ngIf="allFsNames !== null && allFsNames.length > 0" | |
189 | value="" | |
190 | i18n>-- Select the CephFS filesystem --</option> | |
191 | <option *ngFor="let filesystem of allFsNames" | |
192 | [value]="filesystem.name">{{ filesystem.name }}</option> | |
193 | </select> | |
9f95a23c | 194 | <span class="invalid-feedback" |
11fdf7f2 | 195 | *ngIf="nfsForm.showError('fs_name', formDir, 'required')" |
f6b5b4d7 | 196 | i18n>This field is required.</span> |
11fdf7f2 TL |
197 | </div> |
198 | </div> | |
199 | </div> | |
200 | ||
201 | <!-- Secutiry Label --> | |
9f95a23c | 202 | <div class="form-group row" |
11fdf7f2 | 203 | *ngIf="nfsForm.getValue('name') === 'CEPH'"> |
9f95a23c TL |
204 | <label class="cd-col-form-label" |
205 | [ngClass]="{'required': nfsForm.getValue('security_label')}" | |
206 | for="security_label" | |
207 | i18n>Security Label</label> | |
11fdf7f2 | 208 | |
9f95a23c TL |
209 | <div class="cd-col-form-input"> |
210 | <div class="custom-control custom-checkbox"> | |
11fdf7f2 | 211 | <input type="checkbox" |
9f95a23c | 212 | class="custom-control-input" |
11fdf7f2 TL |
213 | formControlName="security_label" |
214 | name="security_label" | |
215 | id="security_label"> | |
216 | <label for="security_label" | |
9f95a23c | 217 | class="custom-control-label" |
11fdf7f2 TL |
218 | i18n>Enable security label</label> |
219 | </div> | |
220 | ||
221 | <br> | |
222 | ||
223 | <input type="text" | |
224 | *ngIf="nfsForm.getValue('security_label')" | |
225 | class="form-control" | |
226 | name="sec_label_xattr" | |
227 | id="sec_label_xattr" | |
228 | formControlName="sec_label_xattr"> | |
229 | ||
9f95a23c | 230 | <span class="invalid-feedback" |
11fdf7f2 | 231 | *ngIf="nfsForm.showError('sec_label_xattr', formDir, 'required')" |
f6b5b4d7 | 232 | i18n>This field is required.</span> |
11fdf7f2 TL |
233 | </div> |
234 | </div> | |
235 | ||
236 | <!-- Path --> | |
9f95a23c | 237 | <div class="form-group row" |
11fdf7f2 | 238 | *ngIf="nfsForm.getValue('name') === 'CEPH'"> |
9f95a23c TL |
239 | <label class="cd-col-form-label required" |
240 | for="path" | |
241 | i18n>CephFS Path</label> | |
242 | <div class="cd-col-form-input"> | |
11fdf7f2 TL |
243 | <input type="text" |
244 | class="form-control" | |
245 | name="path" | |
246 | id="path" | |
247 | formControlName="path" | |
248 | [typeahead]="pathDataSource" | |
249 | (typeaheadOnSelect)="pathChangeHandler()" | |
250 | (blur)="pathChangeHandler()"> | |
9f95a23c | 251 | <span class="invalid-feedback" |
11fdf7f2 | 252 | *ngIf="nfsForm.showError('path', formDir, 'required')" |
f6b5b4d7 | 253 | i18n>This field is required.</span> |
11fdf7f2 | 254 | |
9f95a23c | 255 | <span class="invalid-feedback" |
11fdf7f2 TL |
256 | *ngIf="nfsForm.showError('path', formDir, 'pattern')" |
257 | i18n>Path need to start with a '/' and can be followed by a word</span> | |
9f95a23c | 258 | <span class="form-text text-muted" |
11fdf7f2 TL |
259 | *ngIf="isNewDirectory && !nfsForm.showError('path', formDir)" |
260 | i18n>New directory will be created</span> | |
261 | </div> | |
262 | </div> | |
263 | ||
264 | <!-- Bucket --> | |
9f95a23c | 265 | <div class="form-group row" |
11fdf7f2 | 266 | *ngIf="nfsForm.getValue('name') === 'RGW'"> |
9f95a23c TL |
267 | <label class="cd-col-form-label required" |
268 | for="path" | |
269 | i18n>Path</label> | |
270 | <div class="cd-col-form-input"> | |
11fdf7f2 TL |
271 | <input type="text" |
272 | class="form-control" | |
273 | name="path" | |
274 | id="path" | |
275 | formControlName="path" | |
276 | [typeahead]="bucketDataSource" | |
277 | (typeaheadOnSelect)="bucketChangeHandler()" | |
278 | (blur)="bucketChangeHandler()"> | |
279 | ||
9f95a23c | 280 | <span class="invalid-feedback" |
11fdf7f2 | 281 | *ngIf="nfsForm.showError('path', formDir, 'required')" |
f6b5b4d7 | 282 | i18n>This field is required.</span> |
11fdf7f2 | 283 | |
9f95a23c | 284 | <span class="invalid-feedback" |
11fdf7f2 TL |
285 | *ngIf="nfsForm.showError('path', formDir, 'pattern')" |
286 | i18n>Path can only be a single '/' or a word</span> | |
287 | ||
9f95a23c | 288 | <span class="form-text text-muted" |
11fdf7f2 TL |
289 | *ngIf="isNewBucket && !nfsForm.showError('path', formDir)" |
290 | i18n>New bucket will be created</span> | |
291 | </div> | |
292 | </div> | |
293 | ||
294 | <!-- NFS Protocol --> | |
9f95a23c TL |
295 | <div class="form-group row"> |
296 | <label class="cd-col-form-label required" | |
297 | for="protocols" | |
298 | i18n>NFS Protocol</label> | |
299 | <div class="cd-col-form-input"> | |
300 | <div class="custom-control custom-checkbox"> | |
11fdf7f2 | 301 | <input type="checkbox" |
9f95a23c | 302 | class="custom-control-input" |
11fdf7f2 TL |
303 | id="protocolNfsv3" |
304 | name="protocolNfsv3" | |
305 | formControlName="protocolNfsv3"> | |
306 | <label i18n | |
9f95a23c | 307 | class="custom-control-label" |
11fdf7f2 TL |
308 | for="protocolNfsv3">NFSv3</label> |
309 | </div> | |
9f95a23c | 310 | <div class="custom-control custom-checkbox"> |
11fdf7f2 | 311 | <input type="checkbox" |
9f95a23c | 312 | class="custom-control-input" |
11fdf7f2 TL |
313 | formControlName="protocolNfsv4" |
314 | name="protocolNfsv4" | |
315 | id="protocolNfsv4"> | |
316 | <label i18n | |
9f95a23c | 317 | class="custom-control-label" |
11fdf7f2 TL |
318 | for="protocolNfsv4">NFSv4</label> |
319 | </div> | |
9f95a23c | 320 | <span class="invalid-feedback" |
11fdf7f2 TL |
321 | *ngIf="nfsForm.showError('protocolNfsv3', formDir, 'required') || |
322 | nfsForm.showError('protocolNfsv4', formDir, 'required')" | |
f6b5b4d7 | 323 | i18n>This field is required.</span> |
11fdf7f2 TL |
324 | </div> |
325 | </div> | |
326 | ||
327 | <!-- Tag --> | |
9f95a23c | 328 | <div class="form-group row" |
11fdf7f2 | 329 | *ngIf="nfsForm.getValue('protocolNfsv3')"> |
9f95a23c | 330 | <label class="cd-col-form-label" |
11fdf7f2 TL |
331 | for="tag"> |
332 | <ng-container i18n>NFS Tag</ng-container> | |
333 | <cd-helper> | |
334 | <p i18n>Alternative access for <strong>NFS v3</strong> mounts (it must not have a leading /).</p> | |
335 | <p i18n>Clients may not mount subdirectories (i.e. if Tag = foo, the client may not mount foo/baz).</p> | |
336 | <p i18n>By using different Tag options, the same Path may be exported multiple times.</p> | |
337 | </cd-helper> | |
338 | </label> | |
9f95a23c | 339 | <div class="cd-col-form-input"> |
11fdf7f2 TL |
340 | <input type="text" |
341 | class="form-control" | |
342 | name="tag" | |
343 | id="tag" | |
344 | formControlName="tag"> | |
345 | </div> | |
346 | </div> | |
347 | ||
348 | <!-- Pseudo --> | |
9f95a23c | 349 | <div class="form-group row" |
11fdf7f2 | 350 | *ngIf="nfsForm.getValue('protocolNfsv4')"> |
9f95a23c | 351 | <label class="cd-col-form-label" |
11fdf7f2 | 352 | for="pseudo"> |
9f95a23c TL |
353 | <span class="required" |
354 | i18n>Pseudo</span> | |
11fdf7f2 TL |
355 | <cd-helper> |
356 | <p i18n>The position that this <strong>NFS v4</strong> export occupies | |
357 | in the <strong>Pseudo FS</strong> (it must be unique).</p> | |
358 | <p i18n>By using different Pseudo options, the same Path may be exported multiple times.</p> | |
359 | </cd-helper> | |
360 | </label> | |
9f95a23c | 361 | <div class="cd-col-form-input"> |
11fdf7f2 TL |
362 | <input type="text" |
363 | class="form-control" | |
364 | name="pseudo" | |
365 | id="pseudo" | |
366 | formControlName="pseudo"> | |
9f95a23c | 367 | <span class="invalid-feedback" |
11fdf7f2 | 368 | *ngIf="nfsForm.showError('pseudo', formDir, 'required')" |
f6b5b4d7 | 369 | i18n>This field is required.</span> |
9f95a23c | 370 | <span class="invalid-feedback" |
11fdf7f2 | 371 | *ngIf="nfsForm.showError('pseudo', formDir, 'pattern')" |
9f95a23c | 372 | i18n>Pseudo needs to start with a '/' and can't contain any of the following: >, <, |, &, ( or ).</span> |
11fdf7f2 TL |
373 | </div> |
374 | </div> | |
375 | ||
376 | <!-- Access Type --> | |
9f95a23c TL |
377 | <div class="form-group row"> |
378 | <label class="cd-col-form-label required" | |
379 | for="access_type" | |
380 | i18n>Access Type</label> | |
381 | <div class="cd-col-form-input"> | |
382 | <select class="form-control custom-select" | |
11fdf7f2 TL |
383 | formControlName="access_type" |
384 | name="access_type" | |
eafe8130 TL |
385 | id="access_type" |
386 | (change)="accessTypeChangeHandler()"> | |
11fdf7f2 TL |
387 | <option *ngIf="nfsAccessType === null" |
388 | value="" | |
389 | i18n>Loading...</option> | |
390 | <option *ngIf="nfsAccessType !== null && nfsAccessType.length === 0" | |
391 | value="" | |
392 | i18n>-- No access type available --</option> | |
393 | <option *ngIf="nfsAccessType !== null && nfsAccessType.length > 0" | |
394 | value="" | |
395 | i18n>-- Select the access type --</option> | |
396 | <option *ngFor="let accessType of nfsAccessType" | |
397 | [value]="accessType.value">{{ accessType.value }}</option> | |
398 | </select> | |
9f95a23c | 399 | <span class="form-text text-muted" |
11fdf7f2 TL |
400 | *ngIf="nfsForm.getValue('access_type')"> |
401 | {{ getAccessTypeHelp(nfsForm.getValue('access_type')) }} | |
402 | </span> | |
9f95a23c | 403 | <span class="form-text text-warning" |
eafe8130 TL |
404 | *ngIf="nfsForm.getValue('access_type') === 'RW' && nfsForm.getValue('name') === 'RGW'" |
405 | i18n>The Object Gateway NFS backend has a number of | |
406 | limitations which will seriously affect applications writing to | |
f6b5b4d7 TL |
407 | the share. Please consult the <cd-doc section="rgw-nfs"></cd-doc> |
408 | for details before enabling write access.</span> | |
9f95a23c | 409 | <span class="invalid-feedback" |
11fdf7f2 | 410 | *ngIf="nfsForm.showError('access_type', formDir, 'required')" |
f6b5b4d7 | 411 | i18n>This field is required.</span> |
11fdf7f2 TL |
412 | </div> |
413 | </div> | |
414 | ||
415 | <!-- Squash --> | |
9f95a23c TL |
416 | <div class="form-group row"> |
417 | <label class="cd-col-form-label required" | |
418 | for="squash" | |
419 | i18n>Squash</label> | |
420 | <div class="cd-col-form-input"> | |
421 | <select class="form-control custom-select" | |
11fdf7f2 TL |
422 | name="squash" |
423 | formControlName="squash" | |
424 | id="squash"> | |
425 | <option *ngIf="nfsSquash === null" | |
426 | value="" | |
427 | i18n>Loading...</option> | |
428 | <option *ngIf="nfsSquash !== null && nfsSquash.length === 0" | |
429 | value="" | |
430 | i18n>-- No squash available --</option> | |
431 | <option *ngIf="nfsSquash !== null && nfsSquash.length > 0" | |
432 | value="" | |
433 | i18n>--Select what kind of user id squashing is performed --</option> | |
434 | <option *ngFor="let squash of nfsSquash" | |
435 | [value]="squash">{{ squash }}</option> | |
436 | ||
437 | </select> | |
9f95a23c | 438 | <span class="invalid-feedback" |
11fdf7f2 | 439 | *ngIf="nfsForm.showError('squash', formDir,'required')" |
f6b5b4d7 | 440 | i18n>This field is required.</span> |
11fdf7f2 TL |
441 | </div> |
442 | </div> | |
443 | ||
444 | <!-- Transport Protocol --> | |
9f95a23c TL |
445 | <div class="form-group row"> |
446 | <label class="cd-col-form-label required" | |
447 | for="transports" | |
448 | i18n>Transport Protocol</label> | |
449 | <div class="cd-col-form-input"> | |
450 | <div class="custom-control custom-checkbox"> | |
11fdf7f2 | 451 | <input type="checkbox" |
9f95a23c | 452 | class="custom-control-input" |
11fdf7f2 TL |
453 | formControlName="transportUDP" |
454 | name="transportUDP" | |
455 | id="transportUDP"> | |
456 | <label for="transportUDP" | |
9f95a23c | 457 | class="custom-control-label" |
11fdf7f2 TL |
458 | i18n>UDP</label> |
459 | </div> | |
9f95a23c | 460 | <div class="custom-control custom-checkbox"> |
11fdf7f2 | 461 | <input type="checkbox" |
9f95a23c | 462 | class="custom-control-input" |
11fdf7f2 TL |
463 | formControlName="transportTCP" |
464 | name="transportTCP" | |
465 | id="transportTCP"> | |
466 | <label for="transportTCP" | |
9f95a23c | 467 | class="custom-control-label" |
11fdf7f2 TL |
468 | i18n>TCP</label> |
469 | </div> | |
9f95a23c | 470 | <span class="invalid-feedback" |
11fdf7f2 TL |
471 | *ngIf="nfsForm.showError('transportUDP', formDir, 'required') || |
472 | nfsForm.showError('transportTCP', formDir, 'required')" | |
f6b5b4d7 | 473 | i18n>This field is required.</span> |
11fdf7f2 TL |
474 | <hr> |
475 | </div> | |
476 | </div> | |
477 | ||
478 | <!-- Clients --> | |
479 | <cd-nfs-form-client [form]="nfsForm" | |
480 | #nfsClients> | |
481 | </cd-nfs-form-client> | |
482 | ||
483 | </div> | |
484 | ||
9f95a23c | 485 | <div class="card-footer"> |
11fdf7f2 | 486 | <div class="button-group text-right"> |
eafe8130 | 487 | <cd-submit-button |
eafe8130 TL |
488 | (submitAction)="submitAction()" |
489 | i18n="form action button|Example: Create Pool@@formActionButton" | |
9f95a23c | 490 | [form]="formDir">{{ action | titlecase }} {{ resource | upperFirst }}</cd-submit-button> |
11fdf7f2 TL |
491 | <cd-back-button></cd-back-button> |
492 | </div> | |
493 | </div> | |
494 | </div> | |
495 | </form> | |
496 | </div> |