UI: improvement for VC popover
This commit is contained in:
		
							parent
							
								
									1c6c0e1f74
								
							
						
					
					
						commit
						d54ddadd49
					
				@ -15,80 +15,79 @@
 | 
			
		||||
    limitations under the License.
 | 
			
		||||
 | 
			
		||||
-->
 | 
			
		||||
<section style="min-width: 600px;">
 | 
			
		||||
  <section *ngIf="!versionCreateResult$">
 | 
			
		||||
    <mat-toolbar>
 | 
			
		||||
      <h2>{{ 'version-control.create-entities-version' | translate }}</h2>
 | 
			
		||||
      <span fxFlex></span>
 | 
			
		||||
    </mat-toolbar>
 | 
			
		||||
    <mat-progress-bar color="warn" style="z-index: 10; width: 100%; margin-bottom: -4px;" mode="indeterminate"
 | 
			
		||||
                      *ngIf="isLoading$ | async">
 | 
			
		||||
    </mat-progress-bar>
 | 
			
		||||
    <form [formGroup]="createVersionFormGroup" style="padding-top: 16px;">
 | 
			
		||||
      <fieldset [disabled]="isLoading$ | async">
 | 
			
		||||
        <div fxFlex fxLayout="column">
 | 
			
		||||
          <tb-branch-autocomplete
 | 
			
		||||
            fxFlex
 | 
			
		||||
            required
 | 
			
		||||
            formControlName="branch">
 | 
			
		||||
          </tb-branch-autocomplete>
 | 
			
		||||
          <mat-form-field class="mat-block" fxFlex>
 | 
			
		||||
            <mat-label translate>version-control.version-name</mat-label>
 | 
			
		||||
            <input required matInput formControlName="versionName">
 | 
			
		||||
            <mat-error *ngIf="createVersionFormGroup.get('versionName').hasError('required') ||
 | 
			
		||||
                              createVersionFormGroup.get('versionName').hasError('pattern')">
 | 
			
		||||
              {{ 'version-control.version-name-required' | translate }}
 | 
			
		||||
            </mat-error>
 | 
			
		||||
          </mat-form-field>
 | 
			
		||||
          <mat-form-field fxFlex class="mat-block" style="margin-bottom: 16px;">
 | 
			
		||||
            <mat-label translate>version-control.default-sync-strategy</mat-label>
 | 
			
		||||
            <mat-select required formControlName="syncStrategy">
 | 
			
		||||
              <mat-option *ngFor="let strategy of syncStrategies" [value]="strategy">
 | 
			
		||||
                {{syncStrategyTranslations.get(strategy) | translate}}
 | 
			
		||||
              </mat-option>
 | 
			
		||||
            </mat-select>
 | 
			
		||||
            <mat-hint [innerHTML]="(syncStrategyHints.get(createVersionFormGroup.get('syncStrategy').value) | translate) | safe:'html'"></mat-hint>
 | 
			
		||||
          </mat-form-field>
 | 
			
		||||
          <tb-entity-types-version-create
 | 
			
		||||
            formControlName="entityTypes">
 | 
			
		||||
          </tb-entity-types-version-create>
 | 
			
		||||
        </div>
 | 
			
		||||
      </fieldset>
 | 
			
		||||
    </form>
 | 
			
		||||
    <div fxLayoutAlign="end center" fxLayoutGap="8px">
 | 
			
		||||
      <button mat-button color="primary"
 | 
			
		||||
              type="button"
 | 
			
		||||
              [disabled]="(isLoading$ | async)"
 | 
			
		||||
              (click)="cancel()" cdkFocusInitial>
 | 
			
		||||
        {{ 'action.cancel' | translate }}
 | 
			
		||||
      </button>
 | 
			
		||||
      <button mat-raised-button color="primary"
 | 
			
		||||
              type="button"
 | 
			
		||||
              (click)="export()"
 | 
			
		||||
              [disabled]="(isLoading$ | async) || createVersionFormGroup.invalid || !createVersionFormGroup.dirty">
 | 
			
		||||
        {{ 'action.create' | translate }}
 | 
			
		||||
      </button>
 | 
			
		||||
    </div>
 | 
			
		||||
  </section>
 | 
			
		||||
  <section *ngIf="versionCreateResult$">
 | 
			
		||||
    <section *ngIf="resultMessage">
 | 
			
		||||
      <div class="mat-title vc-result-message" [innerHtml]="resultMessage"></div>
 | 
			
		||||
    </section>
 | 
			
		||||
    <div *ngIf="(versionCreateResult$ | async)?.done || hasError; else progress" fxLayoutAlign="end center" fxLayoutGap="8px">
 | 
			
		||||
      <button mat-button color="primary"
 | 
			
		||||
              type="button"
 | 
			
		||||
              [disabled]="(isLoading$ | async)"
 | 
			
		||||
              (click)="cancel()" cdkFocusInitial>
 | 
			
		||||
        {{ 'action.close' | translate }}
 | 
			
		||||
      </button>
 | 
			
		||||
    </div>
 | 
			
		||||
    <ng-template #progress>
 | 
			
		||||
      <section fxLayout="column" fxLayoutAlign="center center">
 | 
			
		||||
        <div class="mat-title vc-result-message progress">
 | 
			
		||||
          <span translate>version-control.creating-version</span>
 | 
			
		||||
          <mat-progress-bar mode="indeterminate"></mat-progress-bar>
 | 
			
		||||
        </div>
 | 
			
		||||
      </section>
 | 
			
		||||
    </ng-template>
 | 
			
		||||
  </section>
 | 
			
		||||
 | 
			
		||||
<section *ngIf="!versionCreateResult$">
 | 
			
		||||
  <mat-toolbar>
 | 
			
		||||
    <h2>{{ 'version-control.create-entities-version' | translate }}</h2>
 | 
			
		||||
    <span fxFlex></span>
 | 
			
		||||
  </mat-toolbar>
 | 
			
		||||
  <mat-progress-bar color="warn" style="z-index: 10; width: 100%; margin-bottom: -4px;" mode="indeterminate"
 | 
			
		||||
                    *ngIf="isLoading$ | async">
 | 
			
		||||
  </mat-progress-bar>
 | 
			
		||||
  <form [formGroup]="createVersionFormGroup" style="padding-top: 16px;">
 | 
			
		||||
    <fieldset [disabled]="isLoading$ | async">
 | 
			
		||||
      <div fxFlex fxLayout="column">
 | 
			
		||||
        <tb-branch-autocomplete
 | 
			
		||||
          fxFlex
 | 
			
		||||
          required
 | 
			
		||||
          formControlName="branch">
 | 
			
		||||
        </tb-branch-autocomplete>
 | 
			
		||||
        <mat-form-field class="mat-block" fxFlex>
 | 
			
		||||
          <mat-label translate>version-control.version-name</mat-label>
 | 
			
		||||
          <input required matInput formControlName="versionName">
 | 
			
		||||
          <mat-error *ngIf="createVersionFormGroup.get('versionName').hasError('required') ||
 | 
			
		||||
                            createVersionFormGroup.get('versionName').hasError('pattern')">
 | 
			
		||||
            {{ 'version-control.version-name-required' | translate }}
 | 
			
		||||
          </mat-error>
 | 
			
		||||
        </mat-form-field>
 | 
			
		||||
        <mat-form-field fxFlex class="mat-block" style="margin-bottom: 24px;">
 | 
			
		||||
          <mat-label translate>version-control.default-sync-strategy</mat-label>
 | 
			
		||||
          <mat-select required formControlName="syncStrategy">
 | 
			
		||||
            <mat-option *ngFor="let strategy of syncStrategies" [value]="strategy">
 | 
			
		||||
              {{syncStrategyTranslations.get(strategy) | translate}}
 | 
			
		||||
            </mat-option>
 | 
			
		||||
          </mat-select>
 | 
			
		||||
          <mat-hint [innerHTML]="(syncStrategyHints.get(createVersionFormGroup.get('syncStrategy').value) | translate) | safe:'html'"></mat-hint>
 | 
			
		||||
        </mat-form-field>
 | 
			
		||||
        <tb-entity-types-version-create
 | 
			
		||||
          formControlName="entityTypes">
 | 
			
		||||
        </tb-entity-types-version-create>
 | 
			
		||||
      </div>
 | 
			
		||||
    </fieldset>
 | 
			
		||||
  </form>
 | 
			
		||||
  <div fxLayoutAlign="end center" fxLayoutGap="8px">
 | 
			
		||||
    <button mat-button color="primary"
 | 
			
		||||
            type="button"
 | 
			
		||||
            [disabled]="(isLoading$ | async)"
 | 
			
		||||
            (click)="cancel()" cdkFocusInitial>
 | 
			
		||||
      {{ 'action.cancel' | translate }}
 | 
			
		||||
    </button>
 | 
			
		||||
    <button mat-raised-button color="primary"
 | 
			
		||||
            type="button"
 | 
			
		||||
            (click)="export()"
 | 
			
		||||
            [disabled]="(isLoading$ | async) || createVersionFormGroup.invalid || !createVersionFormGroup.dirty">
 | 
			
		||||
      {{ 'action.create' | translate }}
 | 
			
		||||
    </button>
 | 
			
		||||
  </div>
 | 
			
		||||
</section>
 | 
			
		||||
<section *ngIf="versionCreateResult$">
 | 
			
		||||
  <section *ngIf="resultMessage">
 | 
			
		||||
    <div class="mat-title vc-result-message" [innerHtml]="resultMessage"></div>
 | 
			
		||||
  </section>
 | 
			
		||||
  <div *ngIf="(versionCreateResult$ | async)?.done || hasError; else progress" fxLayoutAlign="end center" fxLayoutGap="8px">
 | 
			
		||||
    <button mat-button color="primary"
 | 
			
		||||
            type="button"
 | 
			
		||||
            [disabled]="(isLoading$ | async)"
 | 
			
		||||
            (click)="cancel()" cdkFocusInitial>
 | 
			
		||||
      {{ 'action.close' | translate }}
 | 
			
		||||
    </button>
 | 
			
		||||
  </div>
 | 
			
		||||
  <ng-template #progress>
 | 
			
		||||
    <section fxLayout="column" fxLayoutAlign="center center">
 | 
			
		||||
      <div class="mat-title vc-result-message progress">
 | 
			
		||||
        <span translate>version-control.creating-version</span>
 | 
			
		||||
        <mat-progress-bar mode="indeterminate"></mat-progress-bar>
 | 
			
		||||
      </div>
 | 
			
		||||
    </section>
 | 
			
		||||
  </ng-template>
 | 
			
		||||
</section>
 | 
			
		||||
 | 
			
		||||
@ -15,60 +15,59 @@
 | 
			
		||||
    limitations under the License.
 | 
			
		||||
 | 
			
		||||
-->
 | 
			
		||||
<section [ngStyle]="versionLoadResult$ ? {minWidth: '500px'} : {minWidth: '600px'}">
 | 
			
		||||
  <section *ngIf="!versionLoadResult$">
 | 
			
		||||
    <mat-toolbar>
 | 
			
		||||
      <h2>{{ 'version-control.restore-entities-from-version' | translate: {versionName} }}</h2>
 | 
			
		||||
      <span fxFlex></span>
 | 
			
		||||
    </mat-toolbar>
 | 
			
		||||
    <mat-progress-bar color="warn" style="z-index: 10; width: 100%; margin-bottom: -4px;" mode="indeterminate"
 | 
			
		||||
                      *ngIf="isLoading$ | async">
 | 
			
		||||
    </mat-progress-bar>
 | 
			
		||||
    <form [formGroup]="loadVersionFormGroup" style="padding-top: 16px;">
 | 
			
		||||
      <fieldset [disabled]="isLoading$ | async">
 | 
			
		||||
        <div fxFlex fxLayout="column">
 | 
			
		||||
          <tb-entity-types-version-load
 | 
			
		||||
            formControlName="entityTypes">
 | 
			
		||||
          </tb-entity-types-version-load>
 | 
			
		||||
        </div>
 | 
			
		||||
      </fieldset>
 | 
			
		||||
    </form>
 | 
			
		||||
    <div fxLayoutAlign="end center" fxLayoutGap="8px">
 | 
			
		||||
      <button mat-button color="primary"
 | 
			
		||||
              type="button"
 | 
			
		||||
              [disabled]="(isLoading$ | async)"
 | 
			
		||||
              (click)="cancel()" cdkFocusInitial>
 | 
			
		||||
        {{ 'action.cancel' | translate }}
 | 
			
		||||
      </button>
 | 
			
		||||
      <button mat-raised-button color="primary"
 | 
			
		||||
              type="button"
 | 
			
		||||
              (click)="restore()"
 | 
			
		||||
              [disabled]="(isLoading$ | async) || loadVersionFormGroup.invalid">
 | 
			
		||||
        {{ 'action.restore' | translate }}
 | 
			
		||||
      </button>
 | 
			
		||||
    </div>
 | 
			
		||||
  </section>
 | 
			
		||||
  <section *ngIf="versionLoadResult$">
 | 
			
		||||
    <div *ngIf="(versionLoadResult$ | async)?.done && !entityTypeLoadResults?.length && !errorMessage" class="mat-title vc-result-message">
 | 
			
		||||
      {{ 'version-control.no-entities-restored' | translate }}
 | 
			
		||||
    </div>
 | 
			
		||||
    <div *ngIf="errorMessage" class="mat-title vc-result-message error" [innerHTML]="errorMessage"></div>
 | 
			
		||||
    <div *ngFor="let entityTypeLoadResult of entityTypeLoadResults" class="mat-title vc-result-message">{{ entityTypeLoadResultMessage(entityTypeLoadResult) }}</div>
 | 
			
		||||
    <div *ngIf="(versionLoadResult$ | async)?.done || hasError; else progress"  fxLayoutAlign="end center" fxLayoutGap="8px">
 | 
			
		||||
      <button mat-button color="primary"
 | 
			
		||||
              type="button"
 | 
			
		||||
              [disabled]="(isLoading$ | async)"
 | 
			
		||||
              (click)="cancel()" cdkFocusInitial>
 | 
			
		||||
        {{ 'action.close' | translate }}
 | 
			
		||||
      </button>
 | 
			
		||||
    </div>
 | 
			
		||||
    <ng-template #progress>
 | 
			
		||||
      <section fxLayout="column" fxLayoutAlign="center center">
 | 
			
		||||
        <div class="mat-title vc-result-message progress">
 | 
			
		||||
          <span translate>version-control.restoring-entities-from-version</span>
 | 
			
		||||
          <mat-progress-bar mode="indeterminate"></mat-progress-bar>
 | 
			
		||||
        </div>
 | 
			
		||||
      </section>
 | 
			
		||||
    </ng-template>
 | 
			
		||||
  </section>
 | 
			
		||||
 | 
			
		||||
<section *ngIf="!versionLoadResult$">
 | 
			
		||||
  <mat-toolbar>
 | 
			
		||||
    <h2>{{ 'version-control.restore-entities-from-version' | translate: {versionName} }}</h2>
 | 
			
		||||
    <span fxFlex></span>
 | 
			
		||||
  </mat-toolbar>
 | 
			
		||||
  <mat-progress-bar color="warn" style="z-index: 10; width: 100%; margin-bottom: -4px;" mode="indeterminate"
 | 
			
		||||
                    *ngIf="isLoading$ | async">
 | 
			
		||||
  </mat-progress-bar>
 | 
			
		||||
  <form [formGroup]="loadVersionFormGroup" style="padding-top: 16px;">
 | 
			
		||||
    <fieldset [disabled]="isLoading$ | async">
 | 
			
		||||
      <div fxFlex fxLayout="column">
 | 
			
		||||
        <tb-entity-types-version-load
 | 
			
		||||
          formControlName="entityTypes">
 | 
			
		||||
        </tb-entity-types-version-load>
 | 
			
		||||
      </div>
 | 
			
		||||
    </fieldset>
 | 
			
		||||
  </form>
 | 
			
		||||
  <div fxLayoutAlign="end center" fxLayoutGap="8px">
 | 
			
		||||
    <button mat-button color="primary"
 | 
			
		||||
            type="button"
 | 
			
		||||
            [disabled]="(isLoading$ | async)"
 | 
			
		||||
            (click)="cancel()" cdkFocusInitial>
 | 
			
		||||
      {{ 'action.cancel' | translate }}
 | 
			
		||||
    </button>
 | 
			
		||||
    <button mat-raised-button color="primary"
 | 
			
		||||
            type="button"
 | 
			
		||||
            (click)="restore()"
 | 
			
		||||
            [disabled]="(isLoading$ | async) || loadVersionFormGroup.invalid">
 | 
			
		||||
      {{ 'action.restore' | translate }}
 | 
			
		||||
    </button>
 | 
			
		||||
  </div>
 | 
			
		||||
</section>
 | 
			
		||||
<section *ngIf="versionLoadResult$">
 | 
			
		||||
  <div *ngIf="(versionLoadResult$ | async)?.done && !entityTypeLoadResults?.length && !errorMessage" class="mat-title vc-result-message">
 | 
			
		||||
    {{ 'version-control.no-entities-restored' | translate }}
 | 
			
		||||
  </div>
 | 
			
		||||
  <div *ngIf="errorMessage" class="mat-title vc-result-message error" [innerHTML]="errorMessage"></div>
 | 
			
		||||
  <div *ngFor="let entityTypeLoadResult of entityTypeLoadResults" class="mat-title vc-result-message">{{ entityTypeLoadResultMessage(entityTypeLoadResult) }}</div>
 | 
			
		||||
  <div *ngIf="(versionLoadResult$ | async)?.done || hasError; else progress"  fxLayoutAlign="end center" fxLayoutGap="8px">
 | 
			
		||||
    <button mat-button color="primary"
 | 
			
		||||
            type="button"
 | 
			
		||||
            [disabled]="(isLoading$ | async)"
 | 
			
		||||
            (click)="cancel()" cdkFocusInitial>
 | 
			
		||||
      {{ 'action.close' | translate }}
 | 
			
		||||
    </button>
 | 
			
		||||
  </div>
 | 
			
		||||
  <ng-template #progress>
 | 
			
		||||
    <section fxLayout="column" fxLayoutAlign="center center">
 | 
			
		||||
      <div class="mat-title vc-result-message progress">
 | 
			
		||||
        <span translate>version-control.restoring-entities-from-version</span>
 | 
			
		||||
        <mat-progress-bar mode="indeterminate"></mat-progress-bar>
 | 
			
		||||
      </div>
 | 
			
		||||
    </section>
 | 
			
		||||
  </ng-template>
 | 
			
		||||
</section>
 | 
			
		||||
 | 
			
		||||
@ -43,7 +43,7 @@
 | 
			
		||||
          <ng-template matExpansionPanelContent>
 | 
			
		||||
            <div class="entity-type-config-content" fxLayout="column" fxLayoutGap="0.5em">
 | 
			
		||||
              <mat-divider></mat-divider>
 | 
			
		||||
              <div fxLayout="row" fxLayoutGap="16px">
 | 
			
		||||
              <div fxLayout="row" fxLayout.xs="column" fxLayoutGap.gt-xs="16px">
 | 
			
		||||
                <tb-entity-type-select
 | 
			
		||||
                  showLabel
 | 
			
		||||
                  formControlName="entityType"
 | 
			
		||||
@ -51,7 +51,7 @@
 | 
			
		||||
                  [filterAllowedEntityTypes]="false"
 | 
			
		||||
                  [allowedEntityTypes]="allowedEntityTypes(entityTypeFormGroup)">
 | 
			
		||||
                </tb-entity-type-select>
 | 
			
		||||
                <div fxFlex fxLayout="row" fxLayoutGap="16px" formGroupName="config">
 | 
			
		||||
                <div fxFlex fxLayout="row" fxLayout.xs="column" fxLayoutGap.gt-xs="16px" formGroupName="config">
 | 
			
		||||
                  <mat-form-field fxFlex class="mat-block">
 | 
			
		||||
                    <mat-label translate>version-control.sync-strategy</mat-label>
 | 
			
		||||
                    <mat-select formControlName="syncStrategy">
 | 
			
		||||
@ -76,8 +76,8 @@
 | 
			
		||||
                  </div>
 | 
			
		||||
                </div>
 | 
			
		||||
              </div>
 | 
			
		||||
              <div fxLayout="row" fxLayoutGap="16px" fxLayoutAlign="start center"
 | 
			
		||||
                   formGroupName="config" style="min-height: 76px;">
 | 
			
		||||
              <div fxLayout="row" fxLayout.xs="column" fxLayoutGap.gt-xs="16px" fxLayoutAlign.gt-xs="start center"
 | 
			
		||||
                   formGroupName="config" ngStyle.gt-xs="min-height: 60px;">
 | 
			
		||||
                <mat-slide-toggle formControlName="allEntities">
 | 
			
		||||
                  {{ 'version-control.all-entities' | translate }}
 | 
			
		||||
                </mat-slide-toggle>
 | 
			
		||||
 | 
			
		||||
@ -43,15 +43,16 @@
 | 
			
		||||
          <ng-template matExpansionPanelContent>
 | 
			
		||||
            <div class="entity-type-config-content" fxLayout="column" fxLayoutGap="0.5em">
 | 
			
		||||
              <mat-divider></mat-divider>
 | 
			
		||||
              <div fxLayout="row" fxLayoutGap="32px">
 | 
			
		||||
              <div fxLayout="row" fxLayout.xs="column" fxLayoutGap.gt-xs="32px">
 | 
			
		||||
                <tb-entity-type-select
 | 
			
		||||
                  fxFlex
 | 
			
		||||
                  showLabel
 | 
			
		||||
                  formControlName="entityType"
 | 
			
		||||
                  required
 | 
			
		||||
                  [filterAllowedEntityTypes]="false"
 | 
			
		||||
                  [allowedEntityTypes]="allowedEntityTypes(entityTypeFormGroup)">
 | 
			
		||||
                </tb-entity-type-select>
 | 
			
		||||
                <div fxFlex fxLayout="row" fxLayoutGap="16px" formGroupName="config">
 | 
			
		||||
                <div fxFlex fxLayout="row" fxLayout.xs="column" fxLayoutGap.gt-xs="16px" fxLayoutGap.xs="8px" formGroupName="config">
 | 
			
		||||
                  <div fxFlex fxLayout="column" fxLayoutGap="8px">
 | 
			
		||||
                    <mat-checkbox #removeOtherEntitiesCheckbox
 | 
			
		||||
                                  formControlName="removeOtherEntities"
 | 
			
		||||
 | 
			
		||||
@ -15,78 +15,77 @@
 | 
			
		||||
    limitations under the License.
 | 
			
		||||
 | 
			
		||||
-->
 | 
			
		||||
<section style="min-width: 300px;">
 | 
			
		||||
  <section *ngIf="!versionCreateResult$">
 | 
			
		||||
    <mat-toolbar>
 | 
			
		||||
      <h2>{{ 'version-control.create-entity-version' | translate }}</h2>
 | 
			
		||||
      <span fxFlex></span>
 | 
			
		||||
    </mat-toolbar>
 | 
			
		||||
    <mat-progress-bar color="warn" style="z-index: 10; width: 100%; margin-bottom: -4px;" mode="indeterminate"
 | 
			
		||||
                      *ngIf="isLoading$ | async">
 | 
			
		||||
    </mat-progress-bar>
 | 
			
		||||
    <form [formGroup]="createVersionFormGroup" style="padding-top: 16px;">
 | 
			
		||||
      <fieldset [disabled]="isLoading$ | async">
 | 
			
		||||
        <div fxFlex fxLayout="column">
 | 
			
		||||
          <tb-branch-autocomplete
 | 
			
		||||
            required
 | 
			
		||||
            formControlName="branch">
 | 
			
		||||
          </tb-branch-autocomplete>
 | 
			
		||||
          <mat-form-field class="mat-block" fxFlex>
 | 
			
		||||
            <mat-label translate>version-control.version-name</mat-label>
 | 
			
		||||
            <input required matInput formControlName="versionName">
 | 
			
		||||
            <mat-error *ngIf="createVersionFormGroup.get('versionName').hasError('required') ||
 | 
			
		||||
                              createVersionFormGroup.get('versionName').hasError('pattern')">
 | 
			
		||||
              {{ 'version-control.version-name-required' | translate }}
 | 
			
		||||
            </mat-error>
 | 
			
		||||
          </mat-form-field>
 | 
			
		||||
          <mat-checkbox *ngIf="entityId.entityType === entityTypes.DEVICE" formControlName="saveCredentials" style="margin-bottom: 16px;">
 | 
			
		||||
            {{ 'version-control.export-credentials' | translate }}
 | 
			
		||||
          </mat-checkbox>
 | 
			
		||||
          <mat-checkbox formControlName="saveAttributes" style="margin-bottom: 16px;">
 | 
			
		||||
            {{ 'version-control.export-attributes' | translate }}
 | 
			
		||||
          </mat-checkbox>
 | 
			
		||||
          <mat-checkbox formControlName="saveRelations" style="margin-bottom: 16px;">
 | 
			
		||||
            {{ 'version-control.export-relations' | translate }}
 | 
			
		||||
          </mat-checkbox>
 | 
			
		||||
        </div>
 | 
			
		||||
      </fieldset>
 | 
			
		||||
    </form>
 | 
			
		||||
    <div fxLayoutAlign="end center" fxLayoutGap="8px">
 | 
			
		||||
      <button mat-button color="primary"
 | 
			
		||||
              type="button"
 | 
			
		||||
              [disabled]="(isLoading$ | async)"
 | 
			
		||||
              (click)="cancel()" cdkFocusInitial>
 | 
			
		||||
        {{ 'action.cancel' | translate }}
 | 
			
		||||
      </button>
 | 
			
		||||
      <button mat-raised-button color="primary"
 | 
			
		||||
              type="button"
 | 
			
		||||
              (click)="export()"
 | 
			
		||||
              [disabled]="(isLoading$ | async) || createVersionFormGroup.invalid">
 | 
			
		||||
        {{ 'action.create' | translate }}
 | 
			
		||||
      </button>
 | 
			
		||||
    </div>
 | 
			
		||||
  </section>
 | 
			
		||||
  <section *ngIf="versionCreateResult$">
 | 
			
		||||
    <section *ngIf="(versionCreateResult$ | async)?.done || resultMessage; else progress">
 | 
			
		||||
      <section *ngIf="resultMessage">
 | 
			
		||||
        <div class="mat-title vc-result-message">{{ resultMessage }}</div>
 | 
			
		||||
        <div fxLayoutAlign="end center" fxLayoutGap="8px">
 | 
			
		||||
          <button mat-button color="primary"
 | 
			
		||||
                  type="button"
 | 
			
		||||
                  [disabled]="(isLoading$ | async)"
 | 
			
		||||
                  (click)="cancel()" cdkFocusInitial>
 | 
			
		||||
            {{ 'action.close' | translate }}
 | 
			
		||||
          </button>
 | 
			
		||||
        </div>
 | 
			
		||||
      </section>
 | 
			
		||||
    </section>
 | 
			
		||||
    <ng-template #progress>
 | 
			
		||||
      <section fxLayout="column" fxLayoutAlign="center center">
 | 
			
		||||
        <div class="mat-title vc-result-message progress">
 | 
			
		||||
          <span translate>version-control.creating-version</span>
 | 
			
		||||
          <mat-progress-bar mode="indeterminate"></mat-progress-bar>
 | 
			
		||||
        </div>
 | 
			
		||||
      </section>
 | 
			
		||||
    </ng-template>
 | 
			
		||||
  </section>
 | 
			
		||||
 | 
			
		||||
<section *ngIf="!versionCreateResult$">
 | 
			
		||||
  <mat-toolbar>
 | 
			
		||||
    <h2>{{ 'version-control.create-entity-version' | translate }}</h2>
 | 
			
		||||
    <span fxFlex></span>
 | 
			
		||||
  </mat-toolbar>
 | 
			
		||||
  <mat-progress-bar color="warn" style="z-index: 10; width: 100%; margin-bottom: -4px;" mode="indeterminate"
 | 
			
		||||
                    *ngIf="isLoading$ | async">
 | 
			
		||||
  </mat-progress-bar>
 | 
			
		||||
  <form [formGroup]="createVersionFormGroup" style="padding-top: 16px;">
 | 
			
		||||
    <fieldset [disabled]="isLoading$ | async">
 | 
			
		||||
      <div fxFlex fxLayout="column">
 | 
			
		||||
        <tb-branch-autocomplete
 | 
			
		||||
          required
 | 
			
		||||
          formControlName="branch">
 | 
			
		||||
        </tb-branch-autocomplete>
 | 
			
		||||
        <mat-form-field class="mat-block" fxFlex>
 | 
			
		||||
          <mat-label translate>version-control.version-name</mat-label>
 | 
			
		||||
          <input required matInput formControlName="versionName">
 | 
			
		||||
          <mat-error *ngIf="createVersionFormGroup.get('versionName').hasError('required') ||
 | 
			
		||||
                            createVersionFormGroup.get('versionName').hasError('pattern')">
 | 
			
		||||
            {{ 'version-control.version-name-required' | translate }}
 | 
			
		||||
          </mat-error>
 | 
			
		||||
        </mat-form-field>
 | 
			
		||||
        <mat-checkbox *ngIf="entityId.entityType === entityTypes.DEVICE" formControlName="saveCredentials" style="margin-bottom: 16px;">
 | 
			
		||||
          {{ 'version-control.export-credentials' | translate }}
 | 
			
		||||
        </mat-checkbox>
 | 
			
		||||
        <mat-checkbox formControlName="saveAttributes" style="margin-bottom: 16px;">
 | 
			
		||||
          {{ 'version-control.export-attributes' | translate }}
 | 
			
		||||
        </mat-checkbox>
 | 
			
		||||
        <mat-checkbox formControlName="saveRelations" style="margin-bottom: 16px;">
 | 
			
		||||
          {{ 'version-control.export-relations' | translate }}
 | 
			
		||||
        </mat-checkbox>
 | 
			
		||||
      </div>
 | 
			
		||||
    </fieldset>
 | 
			
		||||
  </form>
 | 
			
		||||
  <div fxLayoutAlign="end center" fxLayoutGap="8px">
 | 
			
		||||
    <button mat-button color="primary"
 | 
			
		||||
            type="button"
 | 
			
		||||
            [disabled]="(isLoading$ | async)"
 | 
			
		||||
            (click)="cancel()" cdkFocusInitial>
 | 
			
		||||
      {{ 'action.cancel' | translate }}
 | 
			
		||||
    </button>
 | 
			
		||||
    <button mat-raised-button color="primary"
 | 
			
		||||
            type="button"
 | 
			
		||||
            (click)="export()"
 | 
			
		||||
            [disabled]="(isLoading$ | async) || createVersionFormGroup.invalid">
 | 
			
		||||
      {{ 'action.create' | translate }}
 | 
			
		||||
    </button>
 | 
			
		||||
  </div>
 | 
			
		||||
</section>
 | 
			
		||||
<section *ngIf="versionCreateResult$">
 | 
			
		||||
  <section *ngIf="(versionCreateResult$ | async)?.done || resultMessage; else progress">
 | 
			
		||||
    <section *ngIf="resultMessage">
 | 
			
		||||
      <div class="mat-title vc-result-message">{{ resultMessage }}</div>
 | 
			
		||||
      <div fxLayoutAlign="end center" fxLayoutGap="8px">
 | 
			
		||||
        <button mat-button color="primary"
 | 
			
		||||
                type="button"
 | 
			
		||||
                [disabled]="(isLoading$ | async)"
 | 
			
		||||
                (click)="cancel()" cdkFocusInitial>
 | 
			
		||||
          {{ 'action.close' | translate }}
 | 
			
		||||
        </button>
 | 
			
		||||
      </div>
 | 
			
		||||
    </section>
 | 
			
		||||
  </section>
 | 
			
		||||
  <ng-template #progress>
 | 
			
		||||
    <section fxLayout="column" fxLayoutAlign="center center">
 | 
			
		||||
      <div class="mat-title vc-result-message progress">
 | 
			
		||||
        <span translate>version-control.creating-version</span>
 | 
			
		||||
        <mat-progress-bar mode="indeterminate"></mat-progress-bar>
 | 
			
		||||
      </div>
 | 
			
		||||
    </section>
 | 
			
		||||
  </ng-template>
 | 
			
		||||
</section>
 | 
			
		||||
 | 
			
		||||
@ -41,6 +41,7 @@
 | 
			
		||||
    <mat-divider vertical></mat-divider>
 | 
			
		||||
    <button mat-stroked-button color="primary"
 | 
			
		||||
            #restoreVersionButton
 | 
			
		||||
            style="min-width: 150px"
 | 
			
		||||
            [disabled]="(isLoading$ | async)"
 | 
			
		||||
            (click)="toggleRestoreEntityVersion($event, restoreVersionButton)">
 | 
			
		||||
      <mat-icon>restore</mat-icon>
 | 
			
		||||
 | 
			
		||||
@ -46,9 +46,15 @@
 | 
			
		||||
      height: 40px;
 | 
			
		||||
      margin-right: 16px;
 | 
			
		||||
      margin-left: 16px;
 | 
			
		||||
      @media #{$mat-xs} {
 | 
			
		||||
        margin-right: 8px;
 | 
			
		||||
        margin-left: 8px;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    .diff-count {
 | 
			
		||||
      font-size: 16px;
 | 
			
		||||
      overflow: hidden;
 | 
			
		||||
      text-overflow: ellipsis;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  .version-title {
 | 
			
		||||
 | 
			
		||||
@ -15,67 +15,66 @@
 | 
			
		||||
    limitations under the License.
 | 
			
		||||
 | 
			
		||||
-->
 | 
			
		||||
<section [ngStyle]="entityDataInfo ? {minWidth: '300px'} : {}">
 | 
			
		||||
  <section *ngIf="!versionLoadResult$">
 | 
			
		||||
    <mat-toolbar *ngIf="entityDataInfo">
 | 
			
		||||
      <h2>{{ 'version-control.restore-entity-from-version' | translate: {versionName} }}</h2>
 | 
			
		||||
      <span fxFlex></span>
 | 
			
		||||
    </mat-toolbar>
 | 
			
		||||
    <mat-progress-bar color="warn" style="z-index: 10; width: 100%; margin-bottom: -4px;" mode="indeterminate"
 | 
			
		||||
                      *ngIf="entityDataInfo && (isLoading$ | async)">
 | 
			
		||||
    </mat-progress-bar>
 | 
			
		||||
    <mat-spinner *ngIf="!entityDataInfo" mode="indeterminate" diameter="80"></mat-spinner>
 | 
			
		||||
    <form *ngIf="entityDataInfo" [formGroup]="restoreFormGroup" style="padding-top: 16px;">
 | 
			
		||||
      <fieldset [disabled]="isLoading$ | async">
 | 
			
		||||
        <div fxFlex fxLayout="column">
 | 
			
		||||
          <mat-checkbox *ngIf="entityDataInfo.hasCredentials" formControlName="loadCredentials" style="margin-bottom: 16px;">
 | 
			
		||||
            {{ 'version-control.load-credentials' | translate }}
 | 
			
		||||
          </mat-checkbox>
 | 
			
		||||
          <mat-checkbox *ngIf="entityDataInfo.hasAttributes" formControlName="loadAttributes" style="margin-bottom: 16px;">
 | 
			
		||||
            {{ 'version-control.load-attributes' | translate }}
 | 
			
		||||
          </mat-checkbox>
 | 
			
		||||
          <mat-checkbox *ngIf="entityDataInfo.hasRelations" formControlName="loadRelations" style="margin-bottom: 16px;">
 | 
			
		||||
            {{ 'version-control.load-relations' | translate }}
 | 
			
		||||
          </mat-checkbox>
 | 
			
		||||
        </div>
 | 
			
		||||
      </fieldset>
 | 
			
		||||
    </form>
 | 
			
		||||
    <div *ngIf="entityDataInfo"  fxLayoutAlign="end center" fxLayoutGap="8px">
 | 
			
		||||
      <button mat-button color="primary"
 | 
			
		||||
              type="button"
 | 
			
		||||
              [disabled]="(isLoading$ | async)"
 | 
			
		||||
              (click)="cancel()" cdkFocusInitial>
 | 
			
		||||
        {{ 'action.cancel' | translate }}
 | 
			
		||||
      </button>
 | 
			
		||||
      <button mat-raised-button color="primary"
 | 
			
		||||
              type="button"
 | 
			
		||||
              (click)="restore()"
 | 
			
		||||
              [disabled]="(isLoading$ | async) || restoreFormGroup.invalid">
 | 
			
		||||
        {{ 'action.restore' | translate }}
 | 
			
		||||
      </button>
 | 
			
		||||
    </div>
 | 
			
		||||
  </section>
 | 
			
		||||
  <section *ngIf="versionLoadResult$">
 | 
			
		||||
    <section *ngIf="(versionLoadResult$ | async)?.done || errorMessage; else progress">
 | 
			
		||||
      <section *ngIf="errorMessage">
 | 
			
		||||
        <div class="mat-title vc-result-message error" [innerHTML]="errorMessage"></div>
 | 
			
		||||
        <div fxLayoutAlign="end center" fxLayoutGap="8px">
 | 
			
		||||
          <button mat-button color="primary"
 | 
			
		||||
                  type="button"
 | 
			
		||||
                  [disabled]="(isLoading$ | async)"
 | 
			
		||||
                  (click)="cancel()" cdkFocusInitial>
 | 
			
		||||
            {{ 'action.close' | translate }}
 | 
			
		||||
          </button>
 | 
			
		||||
        </div>
 | 
			
		||||
      </section>
 | 
			
		||||
    </section>
 | 
			
		||||
    <ng-template #progress>
 | 
			
		||||
      <section fxLayout="column" fxLayoutAlign="center center">
 | 
			
		||||
        <div class="mat-title vc-result-message progress">
 | 
			
		||||
          <span translate>version-control.restoring-entity-version</span>
 | 
			
		||||
          <mat-progress-bar mode="indeterminate"></mat-progress-bar>
 | 
			
		||||
        </div>
 | 
			
		||||
      </section>
 | 
			
		||||
    </ng-template>
 | 
			
		||||
  </section>
 | 
			
		||||
 | 
			
		||||
<section *ngIf="!versionLoadResult$">
 | 
			
		||||
  <mat-toolbar *ngIf="entityDataInfo">
 | 
			
		||||
    <h2>{{ 'version-control.restore-entity-from-version' | translate: {versionName} }}</h2>
 | 
			
		||||
    <span fxFlex></span>
 | 
			
		||||
  </mat-toolbar>
 | 
			
		||||
  <mat-progress-bar color="warn" style="z-index: 10; width: 100%; margin-bottom: -4px;" mode="indeterminate"
 | 
			
		||||
                    *ngIf="entityDataInfo && (isLoading$ | async)">
 | 
			
		||||
  </mat-progress-bar>
 | 
			
		||||
  <mat-spinner *ngIf="!entityDataInfo" mode="indeterminate" diameter="80"></mat-spinner>
 | 
			
		||||
  <form *ngIf="entityDataInfo" [formGroup]="restoreFormGroup" style="padding-top: 16px;">
 | 
			
		||||
    <fieldset [disabled]="isLoading$ | async">
 | 
			
		||||
      <div fxFlex fxLayout="column" fxLayoutGap="16px">
 | 
			
		||||
        <mat-checkbox *ngIf="entityDataInfo.hasCredentials" formControlName="loadCredentials">
 | 
			
		||||
          {{ 'version-control.load-credentials' | translate }}
 | 
			
		||||
        </mat-checkbox>
 | 
			
		||||
        <mat-checkbox *ngIf="entityDataInfo.hasAttributes" formControlName="loadAttributes">
 | 
			
		||||
          {{ 'version-control.load-attributes' | translate }}
 | 
			
		||||
        </mat-checkbox>
 | 
			
		||||
        <mat-checkbox *ngIf="entityDataInfo.hasRelations" formControlName="loadRelations">
 | 
			
		||||
          {{ 'version-control.load-relations' | translate }}
 | 
			
		||||
        </mat-checkbox>
 | 
			
		||||
      </div>
 | 
			
		||||
    </fieldset>
 | 
			
		||||
  </form>
 | 
			
		||||
  <div *ngIf="entityDataInfo"  fxLayoutAlign="end center" fxLayoutGap="8px">
 | 
			
		||||
    <button mat-button color="primary"
 | 
			
		||||
            type="button"
 | 
			
		||||
            [disabled]="(isLoading$ | async)"
 | 
			
		||||
            (click)="cancel()" cdkFocusInitial>
 | 
			
		||||
      {{ 'action.cancel' | translate }}
 | 
			
		||||
    </button>
 | 
			
		||||
    <button mat-raised-button color="primary"
 | 
			
		||||
            type="button"
 | 
			
		||||
            (click)="restore()"
 | 
			
		||||
            [disabled]="(isLoading$ | async) || restoreFormGroup.invalid">
 | 
			
		||||
      {{ 'action.restore' | translate }}
 | 
			
		||||
    </button>
 | 
			
		||||
  </div>
 | 
			
		||||
</section>
 | 
			
		||||
<section *ngIf="versionLoadResult$">
 | 
			
		||||
  <section *ngIf="(versionLoadResult$ | async)?.done || errorMessage; else progress">
 | 
			
		||||
    <section *ngIf="errorMessage">
 | 
			
		||||
      <div class="mat-title vc-result-message error" [innerHTML]="errorMessage"></div>
 | 
			
		||||
      <div fxLayoutAlign="end center" fxLayoutGap="8px">
 | 
			
		||||
        <button mat-button color="primary"
 | 
			
		||||
                type="button"
 | 
			
		||||
                [disabled]="(isLoading$ | async)"
 | 
			
		||||
                (click)="cancel()" cdkFocusInitial>
 | 
			
		||||
          {{ 'action.close' | translate }}
 | 
			
		||||
        </button>
 | 
			
		||||
      </div>
 | 
			
		||||
    </section>
 | 
			
		||||
  </section>
 | 
			
		||||
  <ng-template #progress>
 | 
			
		||||
    <section fxLayout="column" fxLayoutAlign="center center">
 | 
			
		||||
      <div class="mat-title vc-result-message progress">
 | 
			
		||||
        <span translate>version-control.restoring-entity-version</span>
 | 
			
		||||
        <mat-progress-bar mode="indeterminate"></mat-progress-bar>
 | 
			
		||||
      </div>
 | 
			
		||||
    </section>
 | 
			
		||||
  </ng-template>
 | 
			
		||||
</section>
 | 
			
		||||
 | 
			
		||||
@ -217,7 +217,9 @@ export class EntityVersionsTableComponent extends PageComponent implements OnIni
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        }, {maxHeight: '100vh', height: '100%', padding: '10px'}, {}, {}, false);
 | 
			
		||||
        },
 | 
			
		||||
        {maxHeight: '100vh', height: '100%', padding: '10px'},
 | 
			
		||||
        {width: '400px', minWidth: '100%', maxWidth: '100%'}, {}, false);
 | 
			
		||||
      createVersionPopover.tbComponentRef.instance.popoverComponent = createVersionPopover;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
@ -244,7 +246,9 @@ export class EntityVersionsTableComponent extends PageComponent implements OnIni
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        }, {maxHeight: '100vh', height: '100%', padding: '10px'}, {}, {}, false);
 | 
			
		||||
        },
 | 
			
		||||
        {maxHeight: '90vh', height: '100%', padding: '10px'},
 | 
			
		||||
        {width: '600px', minWidth: '100%', maxWidth: '100%'}, {}, false);
 | 
			
		||||
      complexCreateVersionPopover.tbComponentRef.instance.popoverComponent = complexCreateVersionPopover;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
@ -292,7 +296,9 @@ export class EntityVersionsTableComponent extends PageComponent implements OnIni
 | 
			
		||||
              this.versionRestored.emit();
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        }, {maxHeight: '100vh', height: '100%', padding: '10px'}, {}, {}, false);
 | 
			
		||||
        },
 | 
			
		||||
        {maxHeight: '100vh', height: '100%', padding: '10px'},
 | 
			
		||||
        {width: '400px', minWidth: '100%', maxWidth: '100%'}, {}, false);
 | 
			
		||||
      restoreVersionPopover.tbComponentRef.instance.popoverComponent = restoreVersionPopover;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
@ -313,7 +319,9 @@ export class EntityVersionsTableComponent extends PageComponent implements OnIni
 | 
			
		||||
          onClose: (result: VersionLoadResult | null) => {
 | 
			
		||||
            restoreEntitiesVersionPopover.hide();
 | 
			
		||||
          }
 | 
			
		||||
        }, {maxHeight: '100vh', height: '100%', padding: '10px'}, {}, {}, false);
 | 
			
		||||
        },
 | 
			
		||||
        {maxHeight: '80vh', height: '100%', padding: '10px'},
 | 
			
		||||
        {width: '600px', minWidth: '100%', maxWidth: '100%'}, {}, false);
 | 
			
		||||
      restoreEntitiesVersionPopover.tbComponentRef.instance.popoverComponent = restoreEntitiesVersionPopover;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@ -14,6 +14,9 @@
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
:host {
 | 
			
		||||
  .mat-form-field {
 | 
			
		||||
    width: 100%;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
:host ::ng-deep {
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user