fix: finish porting minor changes to major (#2799)

This commit is contained in:
Alex Inkin
2024-12-12 03:16:46 +04:00
committed by GitHub
parent 115c599fd8
commit 89ab67e067
76 changed files with 1176 additions and 1376 deletions

View File

@@ -4,13 +4,13 @@ import { TuiDialogService } from '@taiga-ui/core'
import { TUI_CONFIRM } from '@taiga-ui/kit'
import { PolymorpheusComponent } from '@taiga-ui/polymorpheus'
import { filter } from 'rxjs'
import { ActionSuccessPage } from 'src/app/modals/action-success/action-success.page'
import { ApiService } from 'src/app/services/api/embassy-api.service'
import { FormDialogService } from 'src/app/services/form-dialog.service'
import {
ActionInputModal,
PackageActionData,
} from '../modals/action-input.component'
} from 'src/app/routes/portal/routes/service/modals/action-input.component'
import { ActionSuccessPage } from 'src/app/routes/portal/routes/service/modals/action-success/action-success.page'
import { ApiService } from 'src/app/services/api/embassy-api.service'
import { FormDialogService } from 'src/app/services/form-dialog.service'
const allowedStatuses = {
'only-running': new Set(['running']),
@@ -98,11 +98,7 @@ export class ActionService {
}
}
async execute(
packageId: string,
actionId: string,
input?: object,
): Promise<boolean> {
async execute(packageId: string, actionId: string, input?: object) {
const loader = this.loader.open('Loading...').subscribe()
try {
@@ -112,7 +108,7 @@ export class ActionService {
input: input || null,
})
if (!res) return true
if (!res) return
if (res.result) {
this.dialogs
@@ -124,10 +120,8 @@ export class ActionService {
} else if (res.message) {
this.dialogs.open(res.message, { label: res.title }).subscribe()
}
return true // needed to dismiss original modal/alert
} catch (e: any) {
this.errorService.handleError(e)
return false // don't dismiss original modal/alert
} finally {
loader.unsubscribe()
}

View File

@@ -5,13 +5,7 @@ import { TuiDialogOptions, TuiDialogService } from '@taiga-ui/core'
import { TuiConfirmData, TUI_CONFIRM } from '@taiga-ui/kit'
import { PatchDB } from 'patch-db-client'
import { defaultIfEmpty, filter, firstValueFrom } from 'rxjs'
// @TODO Alex implement config
// import {
// ConfigModal,
// PackageConfigData,
// } from 'src/app/routes/portal/modals/config.component'
import { ApiService } from 'src/app/services/api/embassy-api.service'
import { FormDialogService } from 'src/app/services/form-dialog.service'
import { DataModel } from 'src/app/services/patch-db/data-model'
import { getAllPackages } from 'src/app/utils/get-package-data'
import { hasCurrentDeps } from 'src/app/utils/has-deps'
@@ -19,21 +13,13 @@ import { hasCurrentDeps } from 'src/app/utils/has-deps'
@Injectable({
providedIn: 'root',
})
export class ActionsService {
export class ControlsService {
private readonly dialogs = inject(TuiDialogService)
private readonly errorService = inject(ErrorService)
private readonly loader = inject(LoadingService)
private readonly api = inject(ApiService)
private readonly formDialog = inject(FormDialogService)
private readonly patch = inject<PatchDB<DataModel>>(PatchDB)
configure(manifest: T.Manifest): void {
// this.formDialog.open<PackageConfigData>(ConfigModal, {
// label: `${manifest.title} configuration`,
// data: { pkgId: manifest.id },
// })
}
async start(manifest: T.Manifest, unmet: boolean): Promise<void> {
const deps = `${manifest.title} has unmet dependencies. It will not work as expected.`

View File

@@ -1,14 +1,14 @@
import { inject, Injectable } from '@angular/core'
import { ErrorService } from '@start9labs/shared'
import { ErrorService, MARKDOWN } from '@start9labs/shared'
import { TuiDialogService } from '@taiga-ui/core'
import { PatchDB } from 'patch-db-client'
import { firstValueFrom, merge, shareReplay, Subject } from 'rxjs'
import { REPORT } from 'src/app/components/report.component'
import {
ServerNotification,
ServerNotifications,
} from 'src/app/services/api/api.types'
import { ApiService } from 'src/app/services/api/embassy-api.service'
import { REPORT } from 'src/app/components/report.component'
import { firstValueFrom, merge, shareReplay, Subject } from 'rxjs'
import { PatchDB } from 'patch-db-client'
import { DataModel } from 'src/app/services/patch-db/data-model'
@Injectable({ providedIn: 'root' })
@@ -89,19 +89,19 @@ export class NotificationService {
}
}
viewFull(notification: ServerNotification<number>) {
this.dialogs
.open(notification.message, { label: notification.title })
.subscribe()
}
viewModal(
{ data, createdAt, code, title, message }: ServerNotification<number>,
full = false,
) {
const label = full || code === 2 ? title : 'Backup Report'
const content = code === 1 ? REPORT : MARKDOWN
viewReport(notification: ServerNotification<number>) {
this.dialogs
.open(REPORT, {
label: 'Backup Report',
.open(full ? message : content, {
label,
data: {
report: notification.data,
timestamp: notification.createdAt,
content: data,
timestamp: createdAt,
},
})
.subscribe()

View File

@@ -1,32 +1,33 @@
import { Injectable } from '@angular/core'
import { T } from '@start9labs/start-sdk'
import { hasCurrentDeps } from '../util/has-deps'
import { getAllPackages } from '../util/get-package-data'
import { PatchDB } from 'patch-db-client'
import { DataModel } from './patch-db/data-model'
import { AlertController, NavController } from '@ionic/angular'
import { ApiService } from './api/embassy-api.service'
import { inject, Injectable } from '@angular/core'
import { Router } from '@angular/router'
import { ErrorService, LoadingService } from '@start9labs/shared'
import { T } from '@start9labs/start-sdk'
import { TuiDialogService } from '@taiga-ui/core'
import { TUI_CONFIRM } from '@taiga-ui/kit'
import { PatchDB } from 'patch-db-client'
import { filter } from 'rxjs'
import { getAllPackages } from '../utils/get-package-data'
import { hasCurrentDeps } from '../utils/has-deps'
import { ApiService } from './api/embassy-api.service'
import { DataModel } from './patch-db/data-model'
@Injectable({
providedIn: 'root',
})
export class StandardActionsService {
constructor(
private readonly patch: PatchDB<DataModel>,
private readonly api: ApiService,
private readonly alertCtrl: AlertController,
private readonly errorService: ErrorService,
private readonly loader: LoadingService,
private readonly navCtrl: NavController,
) {}
private readonly patch = inject<PatchDB<DataModel>>(PatchDB)
private readonly api = inject(ApiService)
private readonly dialogs = inject(TuiDialogService)
private readonly errorService = inject(ErrorService)
private readonly loader = inject(LoadingService)
private readonly router = inject(Router)
async rebuild(id: string) {
const loader = this.loader.open(`Rebuilding Container...`).subscribe()
try {
await this.api.rebuildPackage({ id })
this.navCtrl.navigateBack('/services/' + id)
await this.router.navigate(['portal', 'services', id])
} catch (e: any) {
this.errorService.handleError(e)
} finally {
@@ -34,48 +35,38 @@ export class StandardActionsService {
}
}
async tryUninstall(manifest: T.Manifest): Promise<void> {
const { id, title, alerts } = manifest
let message =
async uninstall({ id, title, alerts }: T.Manifest): Promise<void> {
let content =
alerts.uninstall ||
`Uninstalling ${title} will permanently delete its data`
if (hasCurrentDeps(id, await getAllPackages(this.patch))) {
message = `${message}. Services that depend on ${title} will no longer work properly and may crash`
content = `${content}. Services that depend on ${title} will no longer work properly and may crash`
}
const alert = await this.alertCtrl.create({
header: 'Warning',
message,
buttons: [
{
text: 'Cancel',
role: 'cancel',
this.dialogs
.open(TUI_CONFIRM, {
label: 'Warning',
size: 's',
data: {
content,
yes: 'Uninstall',
no: 'Cancel',
},
{
text: 'Uninstall',
handler: () => {
this.uninstall(id)
},
cssClass: 'enter-click',
},
],
cssClass: 'alert-warning-message',
})
await alert.present()
})
.pipe(filter(Boolean))
.subscribe(() => this.doUninstall(id))
}
private async uninstall(id: string) {
private async doUninstall(id: string) {
const loader = this.loader.open(`Beginning uninstall...`).subscribe()
try {
await this.api.uninstallPackage({ id })
this.api
await this.api
.setDbValue<boolean>(['ackInstructions', id], false)
.catch(e => console.error('Failed to mark instructions as unseen', e))
this.navCtrl.navigateRoot('/services')
await this.router.navigate(['portal'])
} catch (e: any) {
this.errorService.handleError(e)
} finally {