|
|
|
@ -14,7 +14,7 @@ |
|
|
|
/// limitations under the License.
|
|
|
|
///
|
|
|
|
|
|
|
|
import { ChangeDetectorRef, Component, Inject, OnInit, Type, ViewChild } from '@angular/core'; |
|
|
|
import { ChangeDetectorRef, Component, Inject, OnDestroy, OnInit, ViewChild } from '@angular/core'; |
|
|
|
import { Router } from '@angular/router'; |
|
|
|
import { MAT_DIALOG_DATA, MatDialog, MatDialogRef } from '@angular/material/dialog'; |
|
|
|
import { |
|
|
|
@ -40,9 +40,6 @@ import { AttributeScope } from '@shared/models/telemetry/telemetry.models'; |
|
|
|
import { EntityId } from '@shared/models/id/entity-id'; |
|
|
|
import { generateSecret } from '@core/utils'; |
|
|
|
import { |
|
|
|
installMethodIcons as INSTALL_METHOD_ICONS, |
|
|
|
installMethodLabels as INSTALL_METHOD_LABELS, |
|
|
|
peOnlyInstallMethods, |
|
|
|
DeviceInstallStep, |
|
|
|
DevicePackageInfo, |
|
|
|
ENTITY_STEP_TYPES, |
|
|
|
@ -50,7 +47,10 @@ import { |
|
|
|
EntityStepProgress, |
|
|
|
FormFieldDefinition, |
|
|
|
FormFieldType, |
|
|
|
installMethodIcons as INSTALL_METHOD_ICONS, |
|
|
|
installMethodLabels as INSTALL_METHOD_LABELS, |
|
|
|
InstallStepType, |
|
|
|
peOnlyInstallMethods, |
|
|
|
stepTypeAliasMap |
|
|
|
} from '@shared/models/iot-hub/device-package.models'; |
|
|
|
import { mergeMap } from 'rxjs/operators'; |
|
|
|
@ -89,7 +89,7 @@ const DEFAULT_RANDOM_SIZE = 20; |
|
|
|
templateUrl: './device-install-dialog.component.html', |
|
|
|
styleUrls: ['./device-install-dialog.component.scss'] |
|
|
|
}) |
|
|
|
export class TbDeviceInstallDialogComponent extends DialogComponent<TbDeviceInstallDialogComponent> implements OnInit { |
|
|
|
export class TbDeviceInstallDialogComponent extends DialogComponent<TbDeviceInstallDialogComponent> implements OnInit, OnDestroy { |
|
|
|
|
|
|
|
@ViewChild('installStepper', {static: false}) stepper: MatStepper; |
|
|
|
|
|
|
|
@ -148,9 +148,9 @@ export class TbDeviceInstallDialogComponent extends DialogComponent<TbDeviceInst |
|
|
|
if (!entry.dir) { |
|
|
|
const ext = path.split('.').pop()?.toLowerCase(); |
|
|
|
if (imageExtensions.has(ext)) { |
|
|
|
const base64 = await entry.async('base64'); |
|
|
|
const mimeType = ext === 'jpg' ? 'image/jpeg' : ext === 'svg' ? 'image/svg+xml' : `image/${ext}`; |
|
|
|
this.zipImages.set(path, `data:${mimeType};base64,${base64}`); |
|
|
|
const blob = await entry.async('blob'); |
|
|
|
const blobUrl = URL.createObjectURL(blob); |
|
|
|
this.zipImages.set(path, blobUrl); |
|
|
|
} else { |
|
|
|
const content = await entry.async('string'); |
|
|
|
this.zipFiles.set(path, content); |
|
|
|
@ -200,6 +200,13 @@ export class TbDeviceInstallDialogComponent extends DialogComponent<TbDeviceInst |
|
|
|
this.cdr.detectChanges(); |
|
|
|
} |
|
|
|
|
|
|
|
ngOnDestroy() { |
|
|
|
for (const url of this.zipImages.values()) { |
|
|
|
URL.revokeObjectURL(url); |
|
|
|
} |
|
|
|
super.ngOnDestroy(); |
|
|
|
} |
|
|
|
|
|
|
|
// --- Connectivity ---
|
|
|
|
|
|
|
|
selectConnectivity(ct: string): void { |
|
|
|
@ -237,8 +244,7 @@ export class TbDeviceInstallDialogComponent extends DialogComponent<TbDeviceInst |
|
|
|
const ws = this.wizardSteps[index]; |
|
|
|
if (!ws) return; |
|
|
|
if (ws.type === 'instruction' && !ws.markdown) { |
|
|
|
const raw = this.zipFiles.get(ws.rawSteps[0].file) || ''; |
|
|
|
ws.markdown = raw; |
|
|
|
ws.markdown = this.zipFiles.get(ws.rawSteps[0].file) || ''; |
|
|
|
} else if (ws.type === 'progress' && !ws.progressDone) { |
|
|
|
this.showCompletedEntitySteps(ws); |
|
|
|
} |
|
|
|
@ -546,8 +552,7 @@ export class TbDeviceInstallDialogComponent extends DialogComponent<TbDeviceInst |
|
|
|
// Pre-activate all steps for tab mode (tabs render lazily on first select)
|
|
|
|
for (const ws of this.wizardSteps) { |
|
|
|
if (ws.type === 'instruction') { |
|
|
|
const raw = this.zipFiles.get(ws.rawSteps[0].file) || ''; |
|
|
|
ws.markdown = raw; |
|
|
|
ws.markdown = this.zipFiles.get(ws.rawSteps[0].file) || ''; |
|
|
|
} else if (ws.type === 'progress') { |
|
|
|
this.showCompletedEntitySteps(ws); |
|
|
|
} |
|
|
|
@ -677,8 +682,7 @@ export class TbDeviceInstallDialogComponent extends DialogComponent<TbDeviceInst |
|
|
|
return; |
|
|
|
} |
|
|
|
if (step.type === 'instruction') { |
|
|
|
const raw = this.zipFiles.get(step.rawSteps[0].file) || ''; |
|
|
|
step.markdown = raw; |
|
|
|
step.markdown = this.zipFiles.get(step.rawSteps[0].file) || ''; |
|
|
|
} else if (step.type === 'progress' && !step.progressDone) { |
|
|
|
if (this.reviewMode) { |
|
|
|
this.showCompletedEntitySteps(step); |
|
|
|
|