Skip to content

Commit

Permalink
feat: duplicate selected/all saved objects UI (#305)
Browse files Browse the repository at this point in the history
* Add copy saved objects among workspaces functionality (#53)

* Add copy saved objects among workspaces functionality

Signed-off-by: gaobinlong <gbinlong@amazon.com>

Signed-off-by: gaobinlong <gbinlong@amazon.com>

* Fix bug

Signed-off-by: gaobinlong <gbinlong@amazon.com>

* Fix bug

Signed-off-by: gaobinlong <gbinlong@amazon.com>

---------

Signed-off-by: gaobinlong <gbinlong@amazon.com>
# Conflicts:
#	src/core/server/saved_objects/routes/copy.ts
#	src/plugins/saved_objects_management/public/constants.ts
#	src/plugins/saved_objects_management/public/management_section/objects_table/components/header.tsx
#	src/plugins/saved_objects_management/public/management_section/objects_table/saved_objects_table.tsx

* feat: duplicate selected objects (#113)

* fix typo

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* adjust copy modal

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* list workspace with write permission on copy modal

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* add copy icon and move getcopyworkspaces function from copy_modal to saved_object table

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* fix duplicate error in public workspace and change copy to duplicate all in header

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* bug fix: create saved objects in public workspace

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* update snapshots

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* remove unused import

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* change validate schema

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* behavior subject bug fix for workspace plugin

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

---------

Signed-off-by: yuye-aws <yuyezhu@amazon.com>
# Conflicts:
#	src/core/public/chrome/ui/header/__snapshots__/header.test.tsx.snap
#	src/core/server/saved_objects/permission_control/acl.test.ts
#	src/core/server/saved_objects/permission_control/client.ts
#	src/plugins/saved_objects_management/public/management_section/objects_table/components/copy_modal.tsx
#	src/plugins/workspace/server/plugin.ts
#	src/plugins/workspace/server/saved_objects/workspace_saved_objects_client_wrapper.ts

* Saved objects page change (#123)

* hide import for application home page

Signed-off-by: Hailong Cui <ihailong@amazon.com>

* add workpspace into gotoApp link

Signed-off-by: Hailong Cui <ihailong@amazon.com>

* remove special logic for management workspace

Signed-off-by: Hailong Cui <ihailong@amazon.com>

* variable name change and more UTs

Signed-off-by: Hailong Cui <ihailong@amazon.com>

---------

Signed-off-by: Hailong Cui <ihailong@amazon.com>
# Conflicts:
#	src/plugins/saved_objects_management/public/management_section/objects_table/__snapshots__/saved_objects_table.test.tsx.snap
#	src/plugins/saved_objects_management/public/management_section/objects_table/components/__snapshots__/header.test.tsx.snap
#	src/plugins/saved_objects_management/public/management_section/objects_table/components/table.test.tsx
#	src/plugins/saved_objects_management/public/management_section/objects_table/components/table.tsx
#	src/plugins/saved_objects_management/public/management_section/objects_table/saved_objects_table.test.tsx
#	src/plugins/saved_objects_management/public/management_section/objects_table/saved_objects_table.tsx

* feat: duplicate all and single objects (#121)

* implement all duplicate copy modal

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* add spacer after checkbox list

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* add fail message for copy saved objects

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* change title wording to manage library

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* single duplicate

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* change wording

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* remove comment

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* bug fix: keep selected saved objects info when cancel duplicate all

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* fix typo

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* use icu syntax in copy message

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* bug fix: keep selected saved objects info when cancel duplicate single

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* set current workspace as the first option

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* update snapshot

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* resolve conflict

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* update snapshot

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* bug fix for saved object table

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* update snapshot

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* remove unused file

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* change i18n constant

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* remove empty push

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* hide duplicate when workspace is disabled

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* update snapshots

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

---------

Signed-off-by: yuye-aws <yuyezhu@amazon.com>
# Conflicts:
#	src/plugins/saved_objects_management/public/constants.ts
#	src/plugins/saved_objects_management/public/management_section/objects_table/__snapshots__/saved_objects_table.test.tsx.snap
#	src/plugins/saved_objects_management/public/management_section/objects_table/components/copy_modal.tsx
#	src/plugins/saved_objects_management/public/management_section/objects_table/components/header.tsx
#	src/plugins/saved_objects_management/public/management_section/objects_table/saved_objects_table.tsx
#	src/plugins/saved_objects_management/public/plugin.ts

* feat: Duplicate dashboard visualize (#148)

* rename copy to duplicate

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* duplicate in visualization

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* duplicate in dashboard

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* resolve conflict

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* update test and snapshots

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* re-duplicate if some objects cannot be duplicated

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* remove clone for dashboard

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* rename duplicateState to duplicateMode

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* change workspace prop to currentWorkspace in SavedObjectsDuplicateModal

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* change wording

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* move duplicate modal to saved_objects for reuse

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* move duplicate modal to saved objects management for reuse

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* remove minimal duplicate modal props logic

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* refactor duplicate modal props for dashboard and visualization

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* Update getDuplicateWorkspaces function

Co-authored-by: Yulong Ruan <ruanyu1@gmail.com>

* update function onDuplicate for dashboard

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* Update doDuplicate for visualization

Co-authored-by: Yulong Ruan <ruanyu1@gmail.com>

* refactor function getDuplicateWorkspaces

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* add i18n context to saved objects table duplicate modal

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* refactor duplicate modal logic in saved object table

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* add error message for partial duplicate failed

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* merge commits

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* add type info for dashboard and visualization

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* remote create vis reference logic

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* Revert "remove clone for dashboard"

This reverts commit 84f77fb.

* hide duplicate when workspace disabled in dashboard

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* feat: skip permission validate when no workspaces and permissions attributes (#163)

* feat: skip permission validate when saved object without workspaces and permissions attributes

Signed-off-by: Lin Wang <wonglam@amazon.com>

* feat: add annontation to skip permission check

Signed-off-by: Lin Wang <wonglam@amazon.com>

* refactor: remove bind and simplify validate logic

Signed-off-by: Lin Wang <wonglam@amazon.com>

* feat: remove library write for object based ACL

Signed-off-by: Lin Wang <wonglam@amazon.com>

---------

Signed-off-by: Lin Wang <wonglam@amazon.com>

* remove get workspaces with write permission logic and add readonly props to workspace attribute

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* change type definition logic

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* Fix typo (#176)

---------

Signed-off-by: Yulong Ruan <ruanyl@amazon.com>

* remove exit workspace logic (#179)

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* rename copy to duplicate

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* duplicate in visualization

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* duplicate in dashboard

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* resolve conflict

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* update test and snapshots

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* re-duplicate if some objects cannot be duplicated

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* remove clone for dashboard

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* rename duplicateState to duplicateMode

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* change workspace prop to currentWorkspace in SavedObjectsDuplicateModal

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* change wording

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* move duplicate modal to saved_objects for reuse

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* move duplicate modal to saved objects management for reuse

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* remove minimal duplicate modal props logic

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* refactor duplicate modal props for dashboard and visualization

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* Update getDuplicateWorkspaces function

Co-authored-by: Yulong Ruan <ruanyu1@gmail.com>

* update function onDuplicate for dashboard

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* Update doDuplicate for visualization

Co-authored-by: Yulong Ruan <ruanyu1@gmail.com>

* refactor function getDuplicateWorkspaces

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* add i18n context to saved objects table duplicate modal

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* refactor duplicate modal logic in saved object table

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* add error message for partial duplicate failed

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* merge commits

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* add type info for dashboard and visualization

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* remote create vis reference logic

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* Revert "remove clone for dashboard"

This reverts commit 84f77fb.

* hide duplicate when workspace disabled in dashboard

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* remove get workspaces with write permission logic and add readonly props to workspace attribute

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* change type definition logic

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* rename variable and function name

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

* change permission mode to get target workspaces when duplicate

Signed-off-by: yuye-aws <yuyezhu@amazon.com>

---------

Signed-off-by: yuye-aws <yuyezhu@amazon.com>
Signed-off-by: Lin Wang <wonglam@amazon.com>
Signed-off-by: Yulong Ruan <ruanyl@amazon.com>
Co-authored-by: Yulong Ruan <ruanyu1@gmail.com>
Co-authored-by: Lin Wang <wonglam@amazon.com>
Co-authored-by: Yulong Ruan <ruanyl@amazon.com>
# Conflicts:
#	src/core/public/workspace/workspaces_service.ts
#	src/plugins/saved_objects_management/public/constants.ts
#	src/plugins/saved_objects_management/public/management_section/objects_table/components/duplicate_modal.tsx
#	src/plugins/saved_objects_management/public/management_section/objects_table/saved_objects_table.tsx
#	src/plugins/workspace/server/saved_objects/workspace_saved_objects_client_wrapper.ts

* delete useless code

* refactor dupicate_model code and fix test error

* add duplicate all/selected saved objects unit test

* add util and copy unit test

Signed-off-by: yubonluo <yubonluo@amazon.com>

* fix bug

Signed-off-by: yubonluo <yubonluo@amazon.com>

* fix unit test error

Signed-off-by: yubonluo <yubonluo@amazon.com>

* add all unit test and fix code error

Signed-off-by: yubonluo <yubonluo@amazon.com>

* revert useless modifications

Signed-off-by: yubonluo <yubonluo@amazon.com>

* add snapshot code

Signed-off-by: yubonluo <yubonluo@amazon.com>

* delete useless code

Signed-off-by: yubonluo <yubonluo@amazon.com>

* optimize code

Signed-off-by: yubonluo <yubonluo@amazon.com>

* split duplicate_modal

Signed-off-by: yubonluo <yubonluo@amazon.com>

* optimize code

Signed-off-by: yubonluo <yubonluo@amazon.com>

* fix unit test

Signed-off-by: yubonluo <yubonluo@amazon.com>

* optimize code

Signed-off-by: yubonluo <yubonluo@amazon.com>

* Fixed the bug that can not duplicate all saved objects

Signed-off-by: yubonluo <yubonluo@amazon.com>

* Fixed the bug that can not duplicate all saved objects

Signed-off-by: yubonluo <yubonluo@amazon.com>

* optimize code

Signed-off-by: yubonluo <yubonluo@amazon.com>

* delete useless code

Signed-off-by: yubonluo <yubonluo@amazon.com>

---------

Signed-off-by: yubonluo <yubonluo@amazon.com>
Co-authored-by: gaobinlong <gbl_long@163.com>
Co-authored-by: Yuye Zhu <yuyezhu@amazon.com>
Co-authored-by: Hailong Cui <ihailong@amazon.com>
  • Loading branch information
4 people authored Apr 16, 2024
1 parent da95876 commit 1a353cc
Show file tree
Hide file tree
Showing 31 changed files with 3,232 additions and 105 deletions.
10 changes: 8 additions & 2 deletions src/plugins/saved_objects_management/public/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,11 +46,17 @@ export {
ISavedObjectsManagementServiceRegistry,
SavedObjectsManagementServiceRegistryEntry,
} from './services';
export { ProcessedImportResponse, processImportResponse, FailedImport } from './lib';
export {
ProcessedImportResponse,
processImportResponse,
FailedImport,
duplicateSavedObjects,
getSavedObjectLabel,
} from './lib';
export { SavedObjectRelation, SavedObjectWithMetadata, SavedObjectMetadata } from './types';
export { SAVED_OBJECT_DELETE_TRIGGER, savedObjectDeleteTrigger } from './triggers';
export { SavedObjectDeleteContext } from './ui_actions_bootstrap';

export { SavedObjectsDuplicateModal, DuplicateMode } from './management_section';
export function plugin(initializerContext: PluginInitializerContext) {
return new SavedObjectsManagementPlugin();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
/*
* Copyright OpenSearch Contributors
* SPDX-License-Identifier: Apache-2.0
*/

import { httpServiceMock } from '../../../../core/public/mocks';
import { duplicateSavedObjects } from './duplicate_saved_objects';

describe('copy saved objects', () => {
it('make http call with body provided', async () => {
const httpClient = httpServiceMock.createStartContract();
const objects = [
{ type: 'dashboard', id: '1' },
{ type: 'visualization', id: '2' },
];
const includeReferencesDeep = true;
const targetWorkspace = '1';
await duplicateSavedObjects(httpClient, objects, includeReferencesDeep, targetWorkspace);
expect(httpClient.post).toMatchInlineSnapshot(`
[MockFunction] {
"calls": Array [
Array [
"/api/workspaces/_duplicate_saved_objects",
Object {
"body": "{\\"objects\\":[{\\"type\\":\\"dashboard\\",\\"id\\":\\"1\\"},{\\"type\\":\\"visualization\\",\\"id\\":\\"2\\"}],\\"includeReferencesDeep\\":true,\\"targetWorkspace\\":\\"1\\"}",
},
],
],
"results": Array [
Object {
"type": "return",
"value": undefined,
},
],
}
`);

await duplicateSavedObjects(httpClient, objects, undefined, targetWorkspace);
expect(httpClient.post).toMatchInlineSnapshot(`
[MockFunction] {
"calls": Array [
Array [
"/api/workspaces/_duplicate_saved_objects",
Object {
"body": "{\\"objects\\":[{\\"type\\":\\"dashboard\\",\\"id\\":\\"1\\"},{\\"type\\":\\"visualization\\",\\"id\\":\\"2\\"}],\\"includeReferencesDeep\\":true,\\"targetWorkspace\\":\\"1\\"}",
},
],
Array [
"/api/workspaces/_duplicate_saved_objects",
Object {
"body": "{\\"objects\\":[{\\"type\\":\\"dashboard\\",\\"id\\":\\"1\\"},{\\"type\\":\\"visualization\\",\\"id\\":\\"2\\"}],\\"includeReferencesDeep\\":true,\\"targetWorkspace\\":\\"1\\"}",
},
],
],
"results": Array [
Object {
"type": "return",
"value": undefined,
},
Object {
"type": "return",
"value": undefined,
},
],
}
`);
});
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
/*
* Copyright OpenSearch Contributors
* SPDX-License-Identifier: Apache-2.0
*/

import { HttpStart } from 'src/core/public';

export async function duplicateSavedObjects(
http: HttpStart,
objects: any[],
includeReferencesDeep: boolean = true,
targetWorkspace: string
) {
return await http.post('/api/workspaces/_duplicate_saved_objects', {
body: JSON.stringify({
objects,
includeReferencesDeep,
targetWorkspace,
}),
});
}
1 change: 1 addition & 0 deletions src/plugins/saved_objects_management/public/lib/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -57,3 +57,4 @@ export { extractExportDetails, SavedObjectsExportResultDetails } from './extract
export { createFieldList } from './create_field_list';
export { getAllowedTypes } from './get_allowed_types';
export { filterQuery } from './filter_query';
export { duplicateSavedObjects } from './duplicate_saved_objects';
Original file line number Diff line number Diff line change
Expand Up @@ -29,3 +29,4 @@
*/

export { mountManagementSection } from './mount_section';
export { SavedObjectsDuplicateModal, DuplicateMode } from './objects_table';
Loading

0 comments on commit 1a353cc

Please sign in to comment.