-<cd-loading-panel *ngIf="editing && loading && !error"
- i18n>Loading user data...</cd-loading-panel>
-<cd-alert-panel type="error"
- *ngIf="editing && error"
- (backAction)="goToListView()"
- i18n>The user data could not be loaded.</cd-alert-panel>
-
<div class="cd-col-form"
- *ngIf="!loading && !error">
+ *cdFormLoading="loading">
<form #frm="ngForm"
[formGroup]="userForm"
novalidate>
class="card-header">{{ action | titlecase }} {{ resource | upperFirst }}</div>
<div class="card-body">
- <!-- Username -->
+ <!-- User ID -->
<div class="form-group row">
<label class="cd-col-form-label"
[ngClass]="{'required': !editing}"
- for="uid"
- i18n>Username</label>
+ for="user_id"
+ i18n>User ID</label>
+ <div class="cd-col-form-input">
+ <input id="user_id"
+ class="form-control"
+ type="text"
+ formControlName="user_id"
+ [readonly]="editing">
+ <span class="invalid-feedback"
+ *ngIf="userForm.showError('user_id', frm, 'required')"
+ i18n>This field is required.</span>
+ <span class="invalid-feedback"
+ *ngIf="userForm.showError('user_id', frm, 'pattern')"
+ i18n>The value is not valid.</span>
+ <span class="invalid-feedback"
+ *ngIf="!userForm.getValue('show_tenant') && userForm.showError('user_id', frm, 'notUnique')"
+ i18n>The chosen user ID is already in use.</span>
+ </div>
+ </div>
+
+ <!-- Show Tenant -->
+ <div class="form-group row">
+ <div class="cd-col-form-offset">
+ <div class="custom-control custom-checkbox">
+ <input class="custom-control-input"
+ id="show_tenant"
+ type="checkbox"
+ (click)="updateFieldsWhenTenanted()"
+ formControlName="show_tenant"
+ [readonly]="true">
+ <label class="custom-control-label"
+ for="show_tenant"
+ i18n>Show Tenant</label>
+ </div>
+ </div>
+ </div>
+
+ <!-- Tenant -->
+ <div class="form-group row"
+ *ngIf="userForm.getValue('show_tenant')">
+ <label class="cd-col-form-label"
+ for="tenant"
+ i18n>Tenant</label>
<div class="cd-col-form-input">
- <input id="uid"
+ <input id="tenant"
class="form-control"
type="text"
- formControlName="uid"
+ formControlName="tenant"
[readonly]="editing"
autofocus>
<span class="invalid-feedback"
- *ngIf="userForm.showError('uid', frm, 'required')"
- i18n>This field is required.</span>
+ *ngIf="userForm.showError('tenant', frm, 'pattern')"
+ i18n>The value is not valid.</span>
<span class="invalid-feedback"
- *ngIf="userForm.showError('uid', frm, 'notUnique')"
- i18n>The chosen user ID is already in use.</span>
+ *ngIf="userForm.showError('tenant', frm, 'notUnique')"
+ i18n>The chosen user ID exists in this tenant.</span>
</div>
</div>
class="btn btn-light"
cdPasswordButton="access_key">
</button>
- <button type="button"
- class="btn btn-light"
- cdCopy2ClipboardButton="access_key">
- </button>
+ <cd-copy-2-clipboard-button source="access_key">
+ </cd-copy-2-clipboard-button>
</span>
</div>
<span class="invalid-feedback"
class="btn btn-light"
cdPasswordButton="secret_key">
</button>
- <button type="button"
- class="btn btn-light"
- cdCopy2ClipboardButton="secret_key">
- </button>
+ <cd-copy-2-clipboard-button source="secret_key">
+ </cd-copy-2-clipboard-button>
</span>
</div>
<span class="invalid-feedback"
<span class="input-group-append">
<button type="button"
class="btn btn-light tc_showSubuserButton"
- i18n-tooltip
- tooltip="Edit"
+ i18n-ngbTooltip
+ ngbTooltip="Edit"
(click)="showSubuserModal(i)">
<i [ngClass]="[icons.edit]"></i>
</button>
<button type="button"
class="btn btn-light tc_deleteSubuserButton"
- i18n-tooltip
- tooltip="Delete"
+ i18n-ngbTooltip
+ ngbTooltip="Delete"
(click)="deleteSubuser(i)">
<i [ngClass]="[icons.destroy]"></i>
</button>
<span class="input-group-append">
<button type="button"
class="btn btn-light tc_showS3KeyButton"
- i18n-tooltip
- tooltip="Show"
+ i18n-ngbTooltip
+ ngbTooltip="Show"
(click)="showS3KeyModal(i)">
<i [ngClass]="[icons.show]"></i>
</button>
<button type="button"
class="btn btn-light tc_deleteS3KeyButton"
- i18n-tooltip
- tooltip="Delete"
+ i18n-ngbTooltip
+ ngbTooltip="Delete"
(click)="deleteS3Key(i)">
<i [ngClass]="[icons.destroy]"></i>
</button>
<span class="input-group-append">
<button type="button"
class="btn btn-light tc_showSwiftKeyButton"
- i18n-tooltip
- tooltip="Show"
+ i18n-ngbTooltip
+ ngbTooltip="Show"
(click)="showSwiftKeyModal(i)">
<i [ngClass]="[icons.show]"></i>
</button>
<span class="input-group-append">
<button type="button"
class="btn btn-light tc_editCapButton"
- i18n-tooltip
- tooltip="Edit"
+ i18n-ngbTooltip
+ ngbTooltip="Edit"
(click)="showCapabilityModal(i)">
<i [ngClass]="[icons.edit]"></i>
</button>
<button type="button"
class="btn btn-light tc_deleteCapButton"
- i18n-tooltip
- tooltip="Delete"
+ i18n-ngbTooltip
+ ngbTooltip="Delete"
(click)="deleteCapability(i)">
<i [ngClass]="[icons.destroy]"></i>
</button>
<div class="col-12">
<button type="button"
class="btn btn-light float-right tc_addCapButton"
- [disabled]="hasAllCapabilities()"
- i18n-tooltip
- tooltip="All capabilities are already added."
- [isDisabled]="!hasAllCapabilities()"
- triggers="pointerenter pointerleave"
+ [disabled]="capabilities | pipeFunction:hasAllCapabilities"
+ i18n-ngbTooltip
+ ngbTooltip="All capabilities are already added."
+ [disableTooltip]="!(capabilities | pipeFunction:hasAllCapabilities)"
+ triggers="pointerenter:pointerleave"
(click)="showCapabilityModal()">
<i [ngClass]="[icons.add]"></i>
<ng-container i18n>{{ actionLabels.ADD | titlecase }}
</div>
<div class="card-footer">
- <div class="button-group text-right">
- <cd-submit-button (submitAction)="onSubmit()"
- i18n="form action button|Example: Create Pool@@formActionButton"
- [form]="userForm">{{ action | titlecase }} {{ resource | upperFirst }}</cd-submit-button>
- <cd-back-button></cd-back-button>
- </div>
+ <cd-form-button-panel (submitActionEvent)="onSubmit()"
+ [form]="userForm"
+ [submitText]="(action | titlecase) + ' ' + (resource | upperFirst)"
+ wrappingClass="text-right"></cd-form-button-panel>
</div>
</div>
</form>