-
Notifications
You must be signed in to change notification settings - Fork 392
Custom Plugin
dbeaver-devops edited this page Dec 9, 2024
·
1 revision
This guide explains how to create a custom plugin for CloudBeaver. It walks you through the process of adding a simple button to the application's top bar.
Follow these steps to create a custom plugin that adds a button to the top bar and logs Hello, World!
to the console.
- Inside
/webapp/packages
, create a folder with your desired name, e.g.,plugin-hello-world
.
- Copy the following files from any existing package into your plugin folder:
.gitignore
package.json
tsconfig.json
- Open
package.json
and update thename
field to your plugin's name,@cloudbeaver/plugin-hello-world
. - Remove the
dependencies
anddevDependencies
sections.
- Remove the
references
section fromtsconfig.json
.
- Inside your plugin folder, create a
src
folder. - Add two files in
src
:index.ts
manifest.ts
- Export the manifest from
index.ts
:export * from './manifest.js';
- Create a service to add the button.
- It should:
- Be an injectable class.
- Extend the
Bootstrap
class.
- Add a
register
method and implement the button-adding logic.
Example service:
import { Bootstrap, injectable } from '@cloudbeaver/core-di';
import { ActionService, MenuService } from '@cloudbeaver/core-view';
import { MENU_APP_ACTIONS } from '@cloudbeaver/plugin-top-app-bar';
import { ACTION_HELLO_WORLD } from './ACTION_HELLO_WORLD.js';
@injectable()
export class HelloWorldService extends Bootstrap {
constructor(
private readonly actionService: ActionService,
private readonly menuService: MenuService,
) {
super();
}
override register(): void {
this.menuService.addCreator({
menus: [MENU_APP_ACTIONS],
getItems: (context, items) => [...items, ACTION_HELLO_WORLD],
});
this.actionService.addHandler({
id: 'hello-world-handler',
actions: [ACTION_HELLO_WORLD],
handler: (context, action) => {
switch (action) {
case ACTION_HELLO_WORLD: {
console.log('Hello, World!');
break;
}
}
},
});
}
}
Create the ACTION_HELLO_WORLD
file:
import { createAction } from '@cloudbeaver/core-view';
export const ACTION_HELLO_WORLD = createAction('hello-world', {
label: 'Hello, world!',
});
Register your service in manifest.ts
:
import type { PluginManifest } from '@cloudbeaver/core-di';
export const helloWorldPlugin: PluginManifest = {
info: {
name: 'Hello World Plugin',
},
providers: [() => import('./HelloWorldService.js').then(m => m.HelloWorldService)],
};
Open /webapp/packages/product-default/index.ts
and include your new plugin:
import { helloWorldPlugin } from '@cloudbeaver/plugin-hello-world';
const PLUGINS: PluginManifest[] = [
...existingPlugins,
helloWorldPlugin,
];
In /webapp
, run:
yarn run update-ts-references
yarn
yarn run update-ts-references
Your button should now appear in the top bar and log Hello, World!
to the console when clicked.
- Application overview
- Demo Server
- Administration
- Server configuration
- Create Connection
- Connection Templates Management
- Access Management
-
Authentication methods
- Local Access Authentication
- Anonymous Access Configuration
- Reverse proxy header authentication
- LDAP
- Single Sign On
- SAML
- OpenID
- AWS OpenID
- AWS SAML
- AWS IAM
- AWS OpenId via Okta
- Snowflake SSO
- Okta OpenId
- Cognito OpenId
- JWT authentication
- Kerberos authentication
- NTLM
- Microsoft Entra ID authentication
- Google authentication
- User credentials storage
- Cloud Explorer
- Cloud storage
- Query Manager
- Drivers Management
- Supported databases
- Accessibility
- Keyboard shortcuts
- Features
- Server configuration
- CloudBeaver and Nginx
- Domain manager
- Configuring HTTPS for Jetty server
- Product configuration parameters
- Command line parameters
- Local Preferences
- API
-
CloudBeaver Community
-
CloudBeaver AWS
-
CloudBeaver Enterprise
-
Deployment options
-
Development