forked from opensearch-project/OpenSearch-Dashboards
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[D&D] Enable basic saved object management (opensearch-project#1816)
* [D&D] Enable basic saved object management - Create README stub for saved_objects_management plugin - Register wizard saved object loader with management plugin - Add management methods to SavedObjectsType - Add capabilities provider to wizard - Add saved wizard vis SavedObjectClass and SavedObjectLoader - Add public plugin start method partially addresses opensearch-project#1620 Signed-off-by: Josh Romero <[email protected]> * [Doc] Add clarifications to README for save objects management plugin Signed-off-by: Josh Romero <[email protected]>
- Loading branch information
1 parent
b66abd7
commit 74eb899
Showing
15 changed files
with
199 additions
and
23 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
# Save objects management | ||
|
||
Provides a UI (via the `management` plugin) to find and manage all saved objects in one place (you can see the primary page by navigating to `/app/management/opensearch-dashboards/objects`). Not to be confused with the `savedObjects` plugin, which provides all the core capabilities of saved objects. | ||
|
||
From the primary UI page, this plugin allows you to: | ||
1. Search/view/delete saved objects and their relationships | ||
2. Import/export saved objects | ||
3. Inspect/edit raw saved object values without validation | ||
|
||
For 3., this plugin can also be used to provide a route/page for editing, such as `/app/management/opensearch-dashboards/objects/savedVisualizations/{visualizationId}`, although plugins are alos free to provide or host alternate routes for this purpose (see index patterns, for instance, which provide their own integration and UI via the `management` plugin directly). | ||
## Making a new saved object type manageable | ||
|
||
1. Create a new `SavedObjectsType` or add the `management` property to an existing one. (See `SavedObjectsTypeManagementDefinition` for explanation of its properties: https://github.com/opensearch-project/OpenSearch-Dashboards/blob/e1380f14deb98cc7cce55c3b82c2d501826a78c3/src/core/server/saved_objects/types.ts#L247-L285) | ||
2. Register saved object type via `core.savedObjects.registerType(...)` as part of plugin server setup method | ||
3. Implement a way to save the object via `savedObjectsClient.create(...)` | ||
4. After these steps, you should be able to save objects and view/search for them in Saved Objects management (`/app/management/opensearch-dashboards/objects`) | ||
|
||
## Enabling edit links from saved objects management | ||
|
||
1. Make sure `management.getInAppUrl` method of the `SavedObjectsType` is defined with a `path` (which will specify the link target) and the `uiCapabilitiesPath` | ||
2. For `uiCapabilitiesPath` to work without additional hardcoding, it should be in the format `{plugin}.show`, so that [the default logic of `src/plugins/saved_objects_management/public/lib/in_app_url.ts`](https://github.com/opensearch-project/OpenSearch-Dashboards/blob/a9984f63a38e964007ab94fae99237a14d8f9ee2/src/plugins/saved_objects_management/public/lib/in_app_url.ts#L48-L50) will correctly match. Otherwise, you'll need to [add a case for your `uiCapabilities` path](https://github.com/opensearch-project/OpenSearch-Dashboards/blob/a9984f63a38e964007ab94fae99237a14d8f9ee2/src/plugins/saved_objects_management/public/lib/in_app_url.ts#L45-L47) to that function | ||
3. Create default plugin capabilities provider | ||
3. Register plugin capabilities via `core.capabilities.registerProvider(...);` as part of plugin server setup method | ||
|
||
## Using saved objects management to inspect/edit new plugin objects | ||
|
||
You'll notice that when clicking on the "Inspect" button from the saved objects management table, you'll usually be routed to something like `/app/management/opensearch-dashboards/objects/savedVisualizations/` (where the route itself is determined by the `management.getEditUrl` method of the `SavedObjectsType`). But to register a similar route for a new saved object type, you'll need to create a new `savedObjectLoader` and register it with the management plugin. | ||
|
||
### Creating `savedObjectLoader` | ||
|
||
1. In your plugin's public directory, create a class for your saved object that extends `SavedObjectClass`. The mapping should match the `mappings` defined in your `SavedObjectsType`. | ||
2. Create a `savedObjectLoader` creation function that returns a `new SavedObjectLoader(YourSavedObjectClass, savedObjectsClient)` | ||
3. Return that `savedObjectLoader` as part of your public plugin `start` method | ||
|
||
### Registering | ||
|
||
Ideally, we'd allow plugins to self-register their `savedObjectLoader` and (declare a dependency on this plugin). However, as currently implemented, any plugins that want this plugin to handle their inpect routes need to be added as optional dependencies and registered here. | ||
|
||
1. Add your plugin to the `optionalPlugins` array in `./opensearch_dashboards.json` | ||
2. Update the `StartDependencies` interface of this plugin to include the public plugin start type | ||
3. Update `registerServices` to register a new type of `SavedObjectLoader`, where `id` will be the route, `title` will likely match your saved object type, and `service` is your `SavedObjectLoader` that is defined in your plugin start. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
53 changes: 53 additions & 0 deletions
53
src/plugins/wizard/public/saved_visualizations/_saved_vis.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
/* | ||
* Copyright OpenSearch Contributors | ||
* SPDX-License-Identifier: Apache-2.0 | ||
*/ | ||
|
||
import { | ||
createSavedObjectClass, | ||
SavedObjectOpenSearchDashboardsServices, | ||
} from '../../../saved_objects/public'; | ||
|
||
export function createSavedWizardVisClass(services: SavedObjectOpenSearchDashboardsServices) { | ||
const SavedObjectClass = createSavedObjectClass(services); | ||
|
||
class SavedWizardVis extends SavedObjectClass { | ||
public static type = 'wizard'; | ||
|
||
// if type:wizard has no mapping, we push this mapping into OpenSearch | ||
public static mapping = { | ||
title: 'text', | ||
description: 'text', | ||
state: 'text', | ||
// savedSearchId: 'keyword', | ||
// version: 'integer', | ||
}; | ||
|
||
// Order these fields to the top, the rest are alphabetical | ||
static fieldOrder = ['title', 'description']; | ||
|
||
// ID is optional, without it one will be generated on save. | ||
constructor(id: string) { | ||
super({ | ||
type: SavedWizardVis.type, | ||
mapping: SavedWizardVis.mapping, | ||
|
||
// if this is null/undefined then the SavedObject will be assigned the defaults | ||
id, | ||
|
||
// default values that will get assigned if the doc is new | ||
defaults: { | ||
title: '', | ||
description: '', | ||
state: '{}', | ||
// savedSearchId, | ||
// version: 1, | ||
}, | ||
}); | ||
this.showInRecentlyAccessed = true; | ||
this.getFullPath = () => `/app/wizard#/edit/${this.id}`; | ||
} | ||
} | ||
|
||
return SavedWizardVis; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
/* | ||
* Copyright OpenSearch Contributors | ||
* SPDX-License-Identifier: Apache-2.0 | ||
*/ | ||
|
||
export * from './saved_visualizations'; |
18 changes: 18 additions & 0 deletions
18
src/plugins/wizard/public/saved_visualizations/saved_visualizations.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
/* | ||
* Copyright OpenSearch Contributors | ||
* SPDX-License-Identifier: Apache-2.0 | ||
*/ | ||
|
||
import { | ||
SavedObjectLoader, | ||
SavedObjectOpenSearchDashboardsServices, | ||
} from '../../../saved_objects/public'; | ||
import { createSavedWizardVisClass } from './_saved_vis'; | ||
|
||
export type SavedWizardLoader = ReturnType<typeof createSavedWizardLoader>; | ||
export function createSavedWizardLoader(services: SavedObjectOpenSearchDashboardsServices) { | ||
const { savedObjectsClient } = services; | ||
const SavedWizardVisClass = createSavedWizardVisClass(services); | ||
|
||
return new SavedObjectLoader(SavedWizardVisClass, savedObjectsClient); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
/* | ||
* Copyright OpenSearch Contributors | ||
* SPDX-License-Identifier: Apache-2.0 | ||
*/ | ||
|
||
export const capabilitiesProvider = () => ({ | ||
wizard: { | ||
// TODO: investigate which capabilities we need to provide | ||
// createNew: true, | ||
// createShortUrl: true, | ||
// delete: true, | ||
show: true, | ||
// showWriteControls: true, | ||
// save: true, | ||
// saveQuery: true, | ||
}, | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters