Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
73 commits
Select commit Hold shift + click to select a range
5563f83
Initial typescript version
kertal Nov 22, 2019
e24bc6b
Use extracted functions
kertal Nov 25, 2019
d9c0d74
Fix types
kertal Nov 25, 2019
2e05092
Extract save & initialize functions
kertal Nov 25, 2019
dc47644
Add even more typescript
kertal Nov 25, 2019
e0cc901
Improve types
kertal Nov 26, 2019
01b5cb5
Improving types, extracting another function
kertal Nov 26, 2019
093bedc
fix merge conflicts
kertal Nov 27, 2019
8038c00
Code refactoring, deangularisation, migrate to Promise
kertal Nov 30, 2019
a31bd35
Merge upstream/master
kertal Dec 1, 2019
7a0dc19
Migrate Visualize AngularPromise to native promise
kertal Dec 2, 2019
ae0b043
Fix Discover Edit URL link
kertal Dec 2, 2019
2f7e6c1
Migrate to use of NP services (savedObjects + indexPatterns)
kertal Dec 2, 2019
cf2b1f8
Migrate confirmModalPromise to a NP backed version - add code :)
kertal Dec 2, 2019
174d784
cleanup confirmModalPromise, fix creation of visualize data table
kertal Dec 2, 2019
b7a7960
Fix JSON import test
kertal Dec 2, 2019
be2e79c
Remove init from types
kertal Dec 3, 2019
5c6f162
Split between createSavedObjectClass and SavedObjectProvider
kertal Dec 3, 2019
051a936
Adapt Discover to use deangularized SavedObject version
kertal Dec 3, 2019
334dd1f
Fix type errors
kertal Dec 3, 2019
d6f1a6b
Remove redundant file
kertal Dec 3, 2019
4b1e8b1
Fix functional test failure importing JSON
kertal Dec 3, 2019
b4d6363
Migrate chrome.untrackNavLinksForDeletedSavedObjects
kertal Dec 4, 2019
a4d19dd
Improve types
kertal Dec 4, 2019
54b8622
Code improvements
kertal Dec 4, 2019
10d6b45
Require NP chrome for SavedObjectLoader
kertal Dec 4, 2019
bb838c1
Fix type error
kertal Dec 4, 2019
c3e8e05
Merge remote-tracking branch 'upstream/master' into kertal-pr-2019-11…
kertal Dec 4, 2019
cdca97f
Fix IndexPatterns type error
kertal Dec 4, 2019
9a47751
Merge remote-tracking branch 'upstream/master' into kertal-pr-2019-11…
kertal Dec 5, 2019
47eb12c
maja review improvements
kertal Dec 5, 2019
c130333
Fix broken functional test
kertal Dec 6, 2019
7926552
Merge remote-tracking branch 'upstream/master' into kertal-pr-2019-11…
kertal Dec 9, 2019
de0ce4e
Add missing static properties of SavedSearch class
kertal Dec 9, 2019
af9264b
merge upstream/master
kertal Dec 9, 2019
dea532a
Migrate indexPatterns to data plugin
kertal Dec 9, 2019
241d23e
Deangularize saved_workspaces.js and saved_workspaces.js
kertal Dec 9, 2019
fd72d7a
Merge remote-tracking branch 'upstream/master' into kertal-pr-2019-12…
kertal Dec 10, 2019
be86b58
merge upstream
kertal Dec 10, 2019
6043c66
Merge branch 'kertal-pr-2019-11-22-np-saved-object' into kertal-pr-20…
kertal Dec 10, 2019
114576a
Fix types
kertal Dec 10, 2019
e192894
Merge branch 'kertal-pr-2019-11-22-np-saved-object' into kertal-pr-20…
kertal Dec 10, 2019
c11f90f
Migrate to TypeScript
kertal Dec 10, 2019
01cf3f3
use encodeURIComponent in saved_visualizations.js, remove kbnUrl
kertal Dec 10, 2019
8774715
Remove unnecessary type cast
kertal Dec 10, 2019
30dcc2a
Further deangularize gis_map_saved_object_loader.js
kertal Dec 10, 2019
b38c89b
Remove npStart imports from helper functions
kertal Dec 10, 2019
3022a7d
Fix types
kertal Dec 10, 2019
3006561
merge upstream & fix conflicts
kertal Dec 10, 2019
6aa01c6
Review changes
kertal Dec 10, 2019
77f9a5b
Merge branch 'kertal-pr-2019-11-22-np-saved-object' into kertal-pr-20…
kertal Dec 10, 2019
ce06210
Improve types
kertal Dec 10, 2019
2ce5f34
Fix mocha tests that broke due to refactoring
kertal Dec 10, 2019
c441b88
merge upstream & fix conflicts
kertal Dec 11, 2019
d5ba3a9
Merge branch 'kertal-pr-2019-11-22-np-saved-object' into kertal-pr-20…
kertal Dec 11, 2019
d6fc520
Add more types
kertal Dec 11, 2019
b063f3d
Add missing savedObjects property in dashboard_app_controller.tsx
kertal Dec 11, 2019
35ea02f
Type improvements
kertal Dec 11, 2019
088d9b7
Merge branch 'kertal-pr-2019-11-22-np-saved-object' into kertal-pr-20…
kertal Dec 11, 2019
63e33d8
fix jest tests
kertal Dec 11, 2019
87b0ba7
Address review comments
kertal Dec 12, 2019
6071e03
Merge branch 'kertal-pr-2019-11-22-np-saved-object' into kertal-pr-20…
kertal Dec 12, 2019
21417fa
Solve type conflict
kertal Dec 12, 2019
163f53f
Merge remote-tracking branch 'upstream/master' into kertal-pr-2019-11…
kertal Dec 12, 2019
0910a52
Merge remote-tracking branch 'upstream/master' into kertal-pr-2019-12…
kertal Dec 12, 2019
5b7b989
Restore statics values at SavedSearch
kertal Dec 12, 2019
d03416c
Revert "Address review comments"
kertal Dec 12, 2019
74a7488
Revert "Restore statics values at SavedSearch"
kertal Dec 12, 2019
eb72d95
Restore statics values at SavedSearch
kertal Dec 12, 2019
f398e8f
Merge branch 'kertal-pr-2019-11-22-np-saved-object' into kertal-pr-20…
kertal Dec 12, 2019
45f40ec
Merge branch 'master' into kertal-pr-2019-12-09-np-saved-object-graph
elasticmachine Dec 12, 2019
cb03b67
Change SavedObjectAttributes, SavedObjectReference types
kertal Dec 13, 2019
15c4f95
Merge branch 'kertal-pr-2019-12-09-np-saved-object-graph' of github.c…
kertal Dec 13, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License;
* you may not use this file except in compliance with the Elastic License.
*/
import { SavedObject, SavedObjectKibanaServices } from 'ui/saved_objects/types';
import { createSavedObjectClass } from 'ui/saved_objects/saved_object';
import { i18n } from '@kbn/i18n';
import { extractReferences, injectReferences } from './saved_workspace_references';

export interface SavedWorkspace extends SavedObject {
wsState?: string;
}

export function createSavedWorkspaceClass(services: SavedObjectKibanaServices) {
// SavedWorkspace constructor. Usually you'd interact with an instance of this.
// ID is option, without it one will be generated on save.
const SavedObjectClass = createSavedObjectClass(services);
class SavedWorkspaceClass extends SavedObjectClass {
public static type: string = 'graph-workspace';
// if type:workspace has no mapping, we push this mapping into ES
public static mapping: Record<string, string> = {
title: 'text',
description: 'text',
numLinks: 'integer',
numVertices: 'integer',
version: 'integer',
wsState: 'json',
};
// Order these fields to the top, the rest are alphabetical
public static fieldOrder = ['title', 'description'];
public static searchSource = false;

public wsState?: string;

constructor(id: string) {
// Gives our SavedWorkspace the properties of a SavedObject
super({
type: SavedWorkspaceClass.type,
mapping: SavedWorkspaceClass.mapping,
searchSource: SavedWorkspaceClass.searchSource,
extractReferences,
injectReferences,
// 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: i18n.translate('xpack.graph.savedWorkspace.workspaceNameTitle', {
defaultMessage: 'New Graph Workspace',
}),
numLinks: 0,
numVertices: 0,
wsState: '{}',
version: 1,
},
});
}
// Overwrite the default getDisplayName function which uses type and which is not very
// user friendly for this object.
getDisplayName = () => {
return 'graph workspace';
};
}
return SavedWorkspaceClass;
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
*/

import { extractReferences, injectReferences } from './saved_workspace_references';
import { SavedWorkspace } from './saved_workspace';

describe('extractReferences', () => {
test('extracts references from wsState', () => {
Expand All @@ -19,6 +20,7 @@ describe('extractReferences', () => {
})
),
},
references: [],
};
const updatedDoc = extractReferences(doc);
expect(updatedDoc).toMatchInlineSnapshot(`
Expand Down Expand Up @@ -48,6 +50,7 @@ Object {
})
),
},
references: [],
};
expect(() => extractReferences(doc)).toThrowErrorMatchingInlineSnapshot(
`"indexPattern attribute is missing in \\"wsState\\""`
Expand All @@ -59,12 +62,12 @@ describe('injectReferences', () => {
test('injects references into context', () => {
const context = {
id: '1',
foo: true,
title: 'test',
wsState: JSON.stringify({
indexPatternRefName: 'indexPattern_0',
bar: true,
}),
};
} as SavedWorkspace;
const references = [
{
name: 'indexPattern_0',
Expand All @@ -75,8 +78,8 @@ describe('injectReferences', () => {
injectReferences(context, references);
expect(context).toMatchInlineSnapshot(`
Object {
"foo": true,
"id": "1",
"title": "test",
"wsState": "{\\"bar\\":true,\\"indexPattern\\":\\"pattern*\\"}",
}
`);
Expand All @@ -85,13 +88,13 @@ Object {
test('skips when wsState is not a string', () => {
const context = {
id: '1',
foo: true,
};
title: 'test',
} as SavedWorkspace;
injectReferences(context, []);
expect(context).toMatchInlineSnapshot(`
Object {
"foo": true,
"id": "1",
"title": "test",
}
`);
});
Expand All @@ -100,7 +103,7 @@ Object {
const context = {
id: '1',
wsState: JSON.stringify({ bar: true }),
};
} as SavedWorkspace;
injectReferences(context, []);
expect(context).toMatchInlineSnapshot(`
Object {
Expand All @@ -116,7 +119,7 @@ Object {
wsState: JSON.stringify({
indexPatternRefName: 'indexPattern_0',
}),
};
} as SavedWorkspace;
expect(() => injectReferences(context, [])).toThrowErrorMatchingInlineSnapshot(
`"Could not find reference \\"indexPattern_0\\""`
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,18 @@
* you may not use this file except in compliance with the Elastic License.
*/

export function extractReferences({ attributes, references = [] }) {
import { SavedObjectAttributes, SavedObjectReference } from 'kibana/public';
import { SavedWorkspace } from './saved_workspace';

export function extractReferences({
attributes,
references = [],
}: {
attributes: SavedObjectAttributes;
references: SavedObjectReference[];
}) {
// For some reason, wsState comes in stringified 2x
const state = JSON.parse(JSON.parse(attributes.wsState));
const state = JSON.parse(JSON.parse(String(attributes.wsState)));
const { indexPattern } = state;
if (!indexPattern) {
throw new Error('indexPattern attribute is missing in "wsState"');
Expand All @@ -20,7 +29,7 @@ export function extractReferences({ attributes, references = [] }) {
name: 'indexPattern_0',
type: 'index-pattern',
id: indexPattern,
}
},
],
attributes: {
...attributes,
Expand All @@ -29,7 +38,7 @@ export function extractReferences({ attributes, references = [] }) {
};
}

export function injectReferences(savedObject, references) {
export function injectReferences(savedObject: SavedWorkspace, references: SavedObjectReference[]) {
// Skip if wsState is missing, at the time of development of this, there is no guarantee each
// saved object has wsState.
if (typeof savedObject.wsState !== 'string') {
Expand All @@ -41,7 +50,9 @@ export function injectReferences(savedObject, references) {
if (!state.indexPatternRefName) {
return;
}
const indexPatternReference = references.find(reference => reference.name === state.indexPatternRefName);
const indexPatternReference = references.find(
reference => reference.name === state.indexPatternRefName
);
if (!indexPatternReference) {
// Throw an error as "indexPatternRefName" means the reference exists within
// "references" and in this scenario we have bad data.
Expand Down

This file was deleted.

Loading