UI: Updated export resource-dialog in resource delete export-widgets-bundle-dialog component
This commit is contained in:
parent
3d3455930f
commit
88b26e291e
@ -27,8 +27,8 @@
|
|||||||
<mat-progress-bar color="warn" mode="indeterminate" *ngIf="(isLoading$ | async) && !ignoreLoading">
|
<mat-progress-bar color="warn" mode="indeterminate" *ngIf="(isLoading$ | async) && !ignoreLoading">
|
||||||
</mat-progress-bar>
|
</mat-progress-bar>
|
||||||
<div mat-dialog-content>
|
<div mat-dialog-content>
|
||||||
<fieldset [disabled]="(isLoading$ | async) && !ignoreLoading">
|
<fieldset [disabled]="(isLoading$ | async) && !ignoreLoading" class="tb-form-row no-border no-padding">
|
||||||
<mat-checkbox [formControl]="includeResourcesFormControl">{{ prompt | translate }}</mat-checkbox>
|
<mat-slide-toggle [formControl]="includeResourcesFormControl" class="mat-slide">{{ prompt | translate }}</mat-slide-toggle>
|
||||||
</fieldset>
|
</fieldset>
|
||||||
</div>
|
</div>
|
||||||
<div mat-dialog-actions class="flex items-center justify-end">
|
<div mat-dialog-actions class="flex items-center justify-end">
|
||||||
|
|||||||
@ -1,46 +0,0 @@
|
|||||||
<!--
|
|
||||||
|
|
||||||
Copyright © 2016-2024 The Thingsboard Authors
|
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
you may not use this file except in compliance with the License.
|
|
||||||
You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License.
|
|
||||||
|
|
||||||
-->
|
|
||||||
<mat-toolbar color="primary">
|
|
||||||
<h2 translate>widgets-bundle.export</h2>
|
|
||||||
<span class="flex-1"></span>
|
|
||||||
<button mat-icon-button
|
|
||||||
(click)="cancel()"
|
|
||||||
type="button">
|
|
||||||
<mat-icon class="material-icons">close</mat-icon>
|
|
||||||
</button>
|
|
||||||
</mat-toolbar>
|
|
||||||
<mat-progress-bar color="warn" mode="indeterminate" *ngIf="(isLoading$ | async) && !ignoreLoading">
|
|
||||||
</mat-progress-bar>
|
|
||||||
<div mat-dialog-content>
|
|
||||||
<fieldset [disabled]="(isLoading$ | async) && !ignoreLoading">
|
|
||||||
<mat-checkbox [formControl]="exportWidgetsFormControl">{{ 'widgets-bundle.export-widgets-bundle-widgets-prompt' | translate }}</mat-checkbox>
|
|
||||||
</fieldset>
|
|
||||||
</div>
|
|
||||||
<div mat-dialog-actions class="flex items-center justify-end">
|
|
||||||
<button mat-button color="primary"
|
|
||||||
type="button"
|
|
||||||
[disabled]="(isLoading$ | async) && !ignoreLoading"
|
|
||||||
(click)="cancel()">
|
|
||||||
{{ 'action.cancel' | translate }}
|
|
||||||
</button>
|
|
||||||
<button mat-raised-button color="primary"
|
|
||||||
(click)="export()"
|
|
||||||
[disabled]="(isLoading$ | async) && !ignoreLoading">
|
|
||||||
{{ 'action.export' | translate }}
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
@ -1,76 +0,0 @@
|
|||||||
///
|
|
||||||
/// Copyright © 2016-2024 The Thingsboard Authors
|
|
||||||
///
|
|
||||||
/// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
/// you may not use this file except in compliance with the License.
|
|
||||||
/// You may obtain a copy of the License at
|
|
||||||
///
|
|
||||||
/// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
///
|
|
||||||
/// Unless required by applicable law or agreed to in writing, software
|
|
||||||
/// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
/// See the License for the specific language governing permissions and
|
|
||||||
/// limitations under the License.
|
|
||||||
///
|
|
||||||
|
|
||||||
import { Component, Inject, OnInit } from '@angular/core';
|
|
||||||
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
|
|
||||||
import { Store } from '@ngrx/store';
|
|
||||||
import { AppState } from '@core/core.state';
|
|
||||||
import { FormControl } from '@angular/forms';
|
|
||||||
import { Router } from '@angular/router';
|
|
||||||
import { DialogComponent } from '@app/shared/components/dialog.component';
|
|
||||||
import { WidgetsBundle } from '@shared/models/widgets-bundle.model';
|
|
||||||
import { isDefinedAndNotNull } from '@core/utils';
|
|
||||||
|
|
||||||
export interface ExportWidgetsBundleDialogData {
|
|
||||||
widgetsBundle: WidgetsBundle;
|
|
||||||
includeBundleWidgetsInExport: boolean;
|
|
||||||
ignoreLoading?: boolean;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface ExportWidgetsBundleDialogResult {
|
|
||||||
exportWidgets: boolean;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Component({
|
|
||||||
selector: 'tb-export-widgets-bundle-dialog',
|
|
||||||
templateUrl: './export-widgets-bundle-dialog.component.html',
|
|
||||||
providers: [],
|
|
||||||
styleUrls: []
|
|
||||||
})
|
|
||||||
export class ExportWidgetsBundleDialogComponent extends DialogComponent<ExportWidgetsBundleDialogComponent, ExportWidgetsBundleDialogResult>
|
|
||||||
implements OnInit {
|
|
||||||
|
|
||||||
widgetsBundle: WidgetsBundle;
|
|
||||||
|
|
||||||
ignoreLoading = false;
|
|
||||||
|
|
||||||
exportWidgetsFormControl = new FormControl(true);
|
|
||||||
|
|
||||||
constructor(protected store: Store<AppState>,
|
|
||||||
protected router: Router,
|
|
||||||
@Inject(MAT_DIALOG_DATA) public data: ExportWidgetsBundleDialogData,
|
|
||||||
public dialogRef: MatDialogRef<ExportWidgetsBundleDialogComponent, ExportWidgetsBundleDialogResult>) {
|
|
||||||
super(store, router, dialogRef);
|
|
||||||
this.widgetsBundle = data.widgetsBundle;
|
|
||||||
this.ignoreLoading = data.ignoreLoading;
|
|
||||||
if (isDefinedAndNotNull(data.includeBundleWidgetsInExport)) {
|
|
||||||
this.exportWidgetsFormControl.patchValue(data.includeBundleWidgetsInExport, {emitEvent: false});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ngOnInit(): void {
|
|
||||||
}
|
|
||||||
|
|
||||||
cancel(): void {
|
|
||||||
this.dialogRef.close(null);
|
|
||||||
}
|
|
||||||
|
|
||||||
export(): void {
|
|
||||||
this.dialogRef.close({
|
|
||||||
exportWidgets: this.exportWidgetsFormControl.value
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -75,11 +75,6 @@ import { EdgeService } from '@core/http/edge.service';
|
|||||||
import { RuleNode } from '@shared/models/rule-node.models';
|
import { RuleNode } from '@shared/models/rule-node.models';
|
||||||
import { AssetProfileService } from '@core/http/asset-profile.service';
|
import { AssetProfileService } from '@core/http/asset-profile.service';
|
||||||
import { AssetProfile } from '@shared/models/asset.models';
|
import { AssetProfile } from '@shared/models/asset.models';
|
||||||
import {
|
|
||||||
ExportWidgetsBundleDialogComponent,
|
|
||||||
ExportWidgetsBundleDialogData,
|
|
||||||
ExportWidgetsBundleDialogResult
|
|
||||||
} from '@shared/import-export/export-widgets-bundle-dialog.component';
|
|
||||||
import { ImageService } from '@core/http/image.service';
|
import { ImageService } from '@core/http/image.service';
|
||||||
import { ImageExportData, ImageResourceInfo, ImageResourceType } from '@shared/models/resource.models';
|
import { ImageExportData, ImageResourceInfo, ImageResourceType } from '@shared/models/resource.models';
|
||||||
import { selectUserSettingsProperty } from '@core/auth/auth.selectors';
|
import { selectUserSettingsProperty } from '@core/auth/auth.selectors';
|
||||||
@ -96,7 +91,7 @@ import {
|
|||||||
export type editMissingAliasesFunction = (widgets: Array<Widget>, isSingleWidget: boolean,
|
export type editMissingAliasesFunction = (widgets: Array<Widget>, isSingleWidget: boolean,
|
||||||
customTitle: string, missingEntityAliases: EntityAliases) => Observable<EntityAliases>;
|
customTitle: string, missingEntityAliases: EntityAliases) => Observable<EntityAliases>;
|
||||||
|
|
||||||
type SupportEntityResources = 'includeResourcesInExportWidgetTypes' | 'includeResourcesInExportDashboard';
|
type SupportEntityResources = 'includeResourcesInExportWidgetTypes' | 'includeResourcesInExportDashboard' | 'includeBundleWidgetsInExport';
|
||||||
|
|
||||||
// @dynamic
|
// @dynamic
|
||||||
@Injectable()
|
@Injectable()
|
||||||
@ -448,22 +443,11 @@ export class ImportExportService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private handleExportWidgetsBundle(widgetsBundle: WidgetsBundle, includeBundleWidgetsInExport: boolean, ignoreLoading?: boolean): void {
|
private handleExportWidgetsBundle(widgetsBundle: WidgetsBundle, includeBundleWidgetsInExport: boolean, ignoreLoading?: boolean): void {
|
||||||
this.dialog.open<ExportWidgetsBundleDialogComponent, ExportWidgetsBundleDialogData,
|
this.openExportDialog('widgets-bundle.export', 'widgets-bundle.export-widgets-bundle-widgets-prompt',
|
||||||
ExportWidgetsBundleDialogResult>(ExportWidgetsBundleDialogComponent, {
|
includeBundleWidgetsInExport, ignoreLoading).subscribe((result) => {
|
||||||
disableClose: true,
|
|
||||||
panelClass: ['tb-dialog', 'tb-fullscreen-dialog'],
|
|
||||||
data: {
|
|
||||||
widgetsBundle,
|
|
||||||
includeBundleWidgetsInExport,
|
|
||||||
ignoreLoading
|
|
||||||
}
|
|
||||||
}).afterClosed().subscribe(
|
|
||||||
(result) => {
|
|
||||||
if (result) {
|
if (result) {
|
||||||
if (includeBundleWidgetsInExport !== result.exportWidgets) {
|
this.updateUserSettingsIncludeResourcesIfNeeded(includeBundleWidgetsInExport, result.include, 'includeBundleWidgetsInExport');
|
||||||
this.store.dispatch(new ActionPreferencesPutUserSettings({includeBundleWidgetsInExport: result.exportWidgets}));
|
if (result.include) {
|
||||||
}
|
|
||||||
if (result.exportWidgets) {
|
|
||||||
this.exportWidgetsBundleWithWidgetTypes(widgetsBundle);
|
this.exportWidgetsBundleWithWidgetTypes(widgetsBundle);
|
||||||
} else {
|
} else {
|
||||||
this.exportWidgetsBundleWithWidgetTypeFqns(widgetsBundle);
|
this.exportWidgetsBundleWithWidgetTypeFqns(widgetsBundle);
|
||||||
@ -1226,12 +1210,12 @@ export class ImportExportService {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
private openExportDialog(title: string, prompt: string, includeResources: boolean) {
|
private openExportDialog(title: string, prompt: string, includeResources: boolean, ignoreLoading?: boolean) {
|
||||||
return this.dialog.open<ExportResourceDialogComponent, ExportResourceDialogData, ExportResourceDialogDialogResult>(
|
return this.dialog.open<ExportResourceDialogComponent, ExportResourceDialogData, ExportResourceDialogDialogResult>(
|
||||||
ExportResourceDialogComponent, {
|
ExportResourceDialogComponent, {
|
||||||
disableClose: true,
|
disableClose: true,
|
||||||
panelClass: ['tb-dialog', 'tb-fullscreen-dialog'],
|
panelClass: ['tb-dialog', 'tb-fullscreen-dialog'],
|
||||||
data: { title, prompt, include: includeResources }
|
data: { title, prompt, include: includeResources, ignoreLoading }
|
||||||
}
|
}
|
||||||
).afterClosed();
|
).afterClosed();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -194,7 +194,6 @@ import { ImagePipe } from '@shared/pipe/image.pipe';
|
|||||||
import { ImportExportService } from '@shared/import-export/import-export.service';
|
import { ImportExportService } from '@shared/import-export/import-export.service';
|
||||||
import { ImportDialogComponent } from '@shared/import-export/import-dialog.component';
|
import { ImportDialogComponent } from '@shared/import-export/import-dialog.component';
|
||||||
import { ImportDialogCsvComponent } from '@shared/import-export/import-dialog-csv.component';
|
import { ImportDialogCsvComponent } from '@shared/import-export/import-dialog-csv.component';
|
||||||
import { ExportWidgetsBundleDialogComponent } from '@shared/import-export/export-widgets-bundle-dialog.component';
|
|
||||||
import { ExportResourceDialogComponent } from '@shared/import-export/export-resource-dialog.component';
|
import { ExportResourceDialogComponent } from '@shared/import-export/export-resource-dialog.component';
|
||||||
import { TableColumnsAssignmentComponent } from '@shared/import-export/table-columns-assignment.component';
|
import { TableColumnsAssignmentComponent } from '@shared/import-export/table-columns-assignment.component';
|
||||||
import { ScrollGridComponent } from '@shared/components/grid/scroll-grid.component';
|
import { ScrollGridComponent } from '@shared/components/grid/scroll-grid.component';
|
||||||
@ -407,7 +406,6 @@ export function MarkedOptionsFactory(markedOptionsService: MarkedOptionsService)
|
|||||||
HintTooltipIconComponent,
|
HintTooltipIconComponent,
|
||||||
ImportDialogComponent,
|
ImportDialogComponent,
|
||||||
ImportDialogCsvComponent,
|
ImportDialogCsvComponent,
|
||||||
ExportWidgetsBundleDialogComponent,
|
|
||||||
ExportResourceDialogComponent,
|
ExportResourceDialogComponent,
|
||||||
TableColumnsAssignmentComponent,
|
TableColumnsAssignmentComponent,
|
||||||
ScrollGridComponent,
|
ScrollGridComponent,
|
||||||
@ -665,7 +663,6 @@ export function MarkedOptionsFactory(markedOptionsService: MarkedOptionsService)
|
|||||||
HintTooltipIconComponent,
|
HintTooltipIconComponent,
|
||||||
ImportDialogComponent,
|
ImportDialogComponent,
|
||||||
ImportDialogCsvComponent,
|
ImportDialogCsvComponent,
|
||||||
ExportWidgetsBundleDialogComponent,
|
|
||||||
ExportResourceDialogComponent,
|
ExportResourceDialogComponent,
|
||||||
TableColumnsAssignmentComponent,
|
TableColumnsAssignmentComponent,
|
||||||
ScrollGridComponent,
|
ScrollGridComponent,
|
||||||
|
|||||||
@ -1253,7 +1253,7 @@
|
|||||||
"import": "Import dashboard",
|
"import": "Import dashboard",
|
||||||
"export": "Export dashboard",
|
"export": "Export dashboard",
|
||||||
"export-failed-error": "Unable to export dashboard: {{error}}",
|
"export-failed-error": "Unable to export dashboard: {{error}}",
|
||||||
"export-prompt": "Embed dashboard images and resources in exported data",
|
"export-prompt": "Embed dashboard images and resources",
|
||||||
"create-new-dashboard": "Create new dashboard",
|
"create-new-dashboard": "Create new dashboard",
|
||||||
"dashboard-file": "Dashboard file",
|
"dashboard-file": "Dashboard file",
|
||||||
"invalid-dashboard-file-error": "Unable to import dashboard: Invalid dashboard data structure.",
|
"invalid-dashboard-file-error": "Unable to import dashboard: Invalid dashboard data structure.",
|
||||||
@ -5376,9 +5376,9 @@
|
|||||||
"selected-widgets": "{ count, plural, =1 {1 widget} other {# widgets} } selected",
|
"selected-widgets": "{ count, plural, =1 {1 widget} other {# widgets} } selected",
|
||||||
"undo": "Undo widget changes",
|
"undo": "Undo widget changes",
|
||||||
"export": "Export widget",
|
"export": "Export widget",
|
||||||
"export-prompt": "Embed widget images and resources in exported data",
|
"export-prompt": "Embed widget images and resources",
|
||||||
"export-widgets": "Export widgets",
|
"export-widgets": "Export widgets",
|
||||||
"export-widgets-prompt": "Embed widgets images and resources in exported data",
|
"export-widgets-prompt": "Embed widgets images and resources",
|
||||||
"import": "Import widget",
|
"import": "Import widget",
|
||||||
"no-data": "No data to display on widget",
|
"no-data": "No data to display on widget",
|
||||||
"data-overflow": "Widget displays {{count}} out of {{total}} entities",
|
"data-overflow": "Widget displays {{count}} out of {{total}} entities",
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user