fix: fix merge issues for setup-wizard project

This commit is contained in:
waterplea
2024-08-10 14:26:15 +04:00
parent 81932c8cff
commit 657aac0d68
27 changed files with 322 additions and 497 deletions

View File

@@ -1,39 +1,29 @@
import { TuiLet } from '@taiga-ui/cdk'
import { CommonModule } from '@angular/common'
import {
ChangeDetectionStrategy,
Component,
inject,
Input,
Output,
} from '@angular/core'
import { ChangeDetectionStrategy, Component, Input } from '@angular/core'
import { TuiLet } from '@taiga-ui/cdk'
import { TuiProgress } from '@taiga-ui/kit'
import { delay, filter } from 'rxjs'
import { LogsWindowComponent } from './logs-window.component'
import { SetupService } from '../../services/setup.service'
@Component({
standalone: true,
selector: 'app-initializing',
template: `
<section *tuiLet="progress$ | async as progress">
<h1 [style.font-size.rem]="2.5" [style.margin.rem]="1">
Initializing StartOS
<section>
<h1 [style.font-size.rem]="2" [style.margin-bottom.rem]="2">
Setting up your server
</h1>
<div *ngIf="progress" class="center-wrapper">
Progress: {{ (progress * 100).toFixed(0) }}%
<div *ngIf="progress.total">
Progress: {{ (progress.total * 100).toFixed(0) }}%
</div>
<progress
tuiProgressBar
class="progress"
[style.max-width.rem]="40"
[style.margin]="'1rem auto'"
[attr.value]="progress && progress < 1 ? progress : null"
[attr.value]="progress.total"
></progress>
<p>{{ getMessage(progress) }}</p>
<p>{{ progress.message }}</p>
</section>
<logs-window />
<!-- <logs-window />-->
`,
styles: `
section {
@@ -64,28 +54,9 @@ import { SetupService } from '../../services/setup.service'
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class InitializingComponent {
readonly progress$ = inject(SetupService)
@Input()
progress: { total: number; message: string } = { total: 0, message: '' }
@Input()
setupType?: 'fresh' | 'restore' | 'attach' | 'transfer'
@Output()
readonly finished = this.progress$.pipe(
filter(progress => progress === 1),
delay(500),
)
getMessage(progress: number | null): string {
if (['fresh', 'attach'].includes(this.setupType || '')) {
return 'Setting up your server'
}
if (!progress) {
return 'Preparing data. This can take a while'
} else if (progress < 1) {
return 'Copying data'
} else {
return 'Finalizing'
}
}
}

View File

@@ -1,13 +0,0 @@
import { NgModule } from '@angular/core'
import { TuiLoaderModule } from '@taiga-ui/core'
import { tuiAsDialog } from '@taiga-ui/cdk'
import { LoadingComponent } from './loading.component'
import { LoadingService } from './loading.service'
@NgModule({
imports: [TuiLoaderModule],
declarations: [LoadingComponent],
exports: [LoadingComponent],
providers: [tuiAsDialog(LoadingService)],
})
export class LoadingModule {}

View File

@@ -1,25 +0,0 @@
import { SetupStatus } from '../types/api'
import { pauseFor } from '../util/misc.util'
let tries: number | undefined
export async function getSetupStatusMock(): Promise<SetupStatus | null> {
const restoreOrMigrate = true
const total = 4
await pauseFor(1000)
if (tries === undefined) {
tries = 0
return null
}
tries++
const progress = tries - 1
return {
bytesTransferred: restoreOrMigrate ? progress : 0,
totalBytes: restoreOrMigrate ? total : null,
complete: progress === total,
}
}

View File

@@ -9,7 +9,6 @@ export * from './components/initializing/logs-window.component'
export * from './components/initializing/initializing.component'
export * from './components/loading/loading.component'
export * from './components/loading/loading.component'
export * from './components/loading/loading.module'
export * from './components/loading/loading.service'
export * from './components/markdown/markdown.component'
export * from './components/markdown/markdown.component.module'
@@ -20,8 +19,6 @@ export * from './components/drive.component'
export * from './directives/drag-scroller.directive'
export * from './directives/safe-links.directive'
export * from './mocks/get-setup-status'
export * from './pipes/exver/exver.module'
export * from './pipes/exver/exver.pipe'
export * from './pipes/markdown/markdown.module'
@@ -38,7 +35,6 @@ export * from './services/download-html.service'
export * from './services/exver.service'
export * from './services/error.service'
export * from './services/http.service'
export * from './services/setup.service'
export * from './services/setup-logs.service'
export * from './types/api'

View File

@@ -1,59 +0,0 @@
import { inject, StaticClassProvider } from '@angular/core'
import {
catchError,
EMPTY,
exhaustMap,
filter,
from,
interval,
map,
Observable,
shareReplay,
takeWhile,
} from 'rxjs'
import { SetupStatus } from '../types/api'
import { Constructor } from '../types/constructor'
import { ErrorService } from './error.service'
export function provideSetupService(
api: Constructor<ConstructorParameters<typeof SetupService>[0]>,
): StaticClassProvider {
return {
provide: SetupService,
deps: [api],
useClass: SetupService,
}
}
export class SetupService extends Observable<number> {
private readonly errorService = inject(ErrorService)
private readonly progress$ = interval(500).pipe(
exhaustMap(() =>
from(this.api.getSetupStatus()).pipe(
catchError(e => {
this.errorService.handleError(e)
return EMPTY
}),
),
),
filter(Boolean),
map(progress => {
if (progress.complete) {
return 1
}
return progress.totalBytes
? progress.bytesTransferred / progress.totalBytes
: 0
}),
takeWhile(value => value !== 1, true),
shareReplay(1),
)
constructor(
private readonly api: { getSetupStatus: () => Promise<SetupStatus | null> },
) {
super(subscriber => this.progress$.subscribe(subscriber))
}
}

View File

@@ -49,9 +49,3 @@ export type StartOSDiskInfo = {
passwordHash: string | null
wrappedKey: string | null
}
export interface SetupStatus {
bytesTransferred: number
totalBytes: number | null
complete: boolean
}