|
@@ -1,6 +1,7 @@
|
|
|
import { CommonModule } from '@angular/common';
|
|
import { CommonModule } from '@angular/common';
|
|
|
-import { ChangeDetectionStrategy, Component, OnInit, inject, signal } from '@angular/core';
|
|
|
|
|
|
|
+import { ChangeDetectionStrategy, Component, OnInit, computed, inject, signal } from '@angular/core';
|
|
|
import { CheckCircle2, CircleAlert, CloudCog, Database, LoaderCircle, LucideAngularModule } from 'lucide-angular';
|
|
import { CheckCircle2, CircleAlert, CloudCog, Database, LoaderCircle, LucideAngularModule } from 'lucide-angular';
|
|
|
|
|
+import { AppMigrationStatus } from '../admin.models';
|
|
|
import { CloudFunctionsService } from '../cloud-functions.service';
|
|
import { CloudFunctionsService } from '../cloud-functions.service';
|
|
|
|
|
|
|
|
interface MigrationMeta {
|
|
interface MigrationMeta {
|
|
@@ -19,6 +20,8 @@ interface MigrationMeta {
|
|
|
})
|
|
})
|
|
|
export class AdminMigrationComponent implements OnInit {
|
|
export class AdminMigrationComponent implements OnInit {
|
|
|
readonly meta = signal<MigrationMeta | null>(null);
|
|
readonly meta = signal<MigrationMeta | null>(null);
|
|
|
|
|
+ readonly appStatus = signal<AppMigrationStatus | null>(null);
|
|
|
|
|
+ readonly blockedEntries = computed(() => Object.entries(this.appStatus()?.blocked ?? {}).sort(([left], [right]) => left.localeCompare(right)));
|
|
|
readonly error = signal('');
|
|
readonly error = signal('');
|
|
|
readonly icons = { CheckCircle2, CircleAlert, CloudCog, Database, LoaderCircle };
|
|
readonly icons = { CheckCircle2, CircleAlert, CloudCog, Database, LoaderCircle };
|
|
|
readonly rewrites = [
|
|
readonly rewrites = [
|
|
@@ -38,7 +41,14 @@ export class AdminMigrationComponent implements OnInit {
|
|
|
private readonly functions = inject(CloudFunctionsService);
|
|
private readonly functions = inject(CloudFunctionsService);
|
|
|
|
|
|
|
|
async ngOnInit(): Promise<void> {
|
|
async ngOnInit(): Promise<void> {
|
|
|
- try { this.meta.set(await this.functions.admin<MigrationMeta>('meta')); }
|
|
|
|
|
|
|
+ try {
|
|
|
|
|
+ const [meta, appStatus] = await Promise.all([
|
|
|
|
|
+ this.functions.admin<MigrationMeta>('meta'),
|
|
|
|
|
+ this.functions.app<AppMigrationStatus>('migration_status'),
|
|
|
|
|
+ ]);
|
|
|
|
|
+ this.meta.set(meta);
|
|
|
|
|
+ this.appStatus.set(appStatus);
|
|
|
|
|
+ }
|
|
|
catch (error) { this.error.set(error instanceof Error ? error.message : '迁移状态加载失败'); }
|
|
catch (error) { this.error.set(error instanceof Error ? error.message : '迁移状态加载失败'); }
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|