Files
cloudbeaver/webapp/packages/plugin-task-manager/src/TaskManagerPluginBootstrap.ts
T
Alexey Potsetsuevandmr-anton-t 80f258b561 dbeaver/pro#6744 refactor: migration to @wroud/di (#3704)
* dbeaver/pro#6744 refactor: migration to `@wroud/di`

* tests: enable settings tests

* chore: update syntax

* fix: dynamic theme detection

* fix: skip not stable test

* fix: skip whole test

* fix: make theme optional

* fix: page reload

* tests: skip unstable test

* fix: remove optional

* fix: load system theme

* fix: prevent the system theme from always loading despite not being selected

---------

Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2025-08-29 18:22:11 +08:00

62 lines
1.9 KiB
TypeScript

/*
* CloudBeaver - Cloud Database Manager
* Copyright (C) 2020-2024 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0.
* you may not use this file except in compliance with the License.
*/
import { ProcessSnackbar, type ProcessSnackbarProps } from '@cloudbeaver/core-blocks';
import { Bootstrap, injectable } from '@cloudbeaver/core-di';
import { type IProcessNotificationContainer, NotificationService } from '@cloudbeaver/core-events';
import { type ITaskDescriptor, TaskManagerService } from '@cloudbeaver/core-task-manager';
@injectable(() => [TaskManagerService, NotificationService])
export class TaskManagerPluginBootstrap extends Bootstrap {
private notification: IProcessNotificationContainer<ProcessSnackbarProps> | null;
constructor(
private readonly taskManagerService: TaskManagerService,
private readonly notificationService: NotificationService,
) {
super();
this.notification = null;
}
override register(): void {
this.taskManagerService.onDataUpdate.addHandler(this.updateNotification.bind(this));
}
private updateNotification(): void {
if (this.taskManagerService.pendingTasks.length === 0) {
this.notification?.notification.close();
this.notification = null;
return;
}
if (!this.notification) {
this.notification = this.notificationService.processNotification(
() => ProcessSnackbar,
{},
{
title: 'plugin_task_manager_notification_title',
},
);
}
this.notification.controller.setMessage(this.taskManagerService.pendingTasks.map(getMessage).join('\n'));
}
}
function getMessage(task: ITaskDescriptor): string {
if (task.exception) {
return task.exception.message;
}
let message = task.getMessage();
if (task.getProgress) {
message += ` (${Math.floor(task.getProgress() * 100)}%)`;
}
return message;
}