diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternfield.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternfield.md
index 430590c7a25058..121ae80734dfd3 100644
--- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternfield.md
+++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternfield.md
@@ -29,7 +29,6 @@ export declare class Field implements IFieldType
| [format](./kibana-plugin-plugins-data-public.indexpatternfield.format.md) | | any
| |
| [lang](./kibana-plugin-plugins-data-public.indexpatternfield.lang.md) | | string
| |
| [name](./kibana-plugin-plugins-data-public.indexpatternfield.name.md) | | string
| |
-| [routes](./kibana-plugin-plugins-data-public.indexpatternfield.routes.md) | | Record<string, string>
| |
| [script](./kibana-plugin-plugins-data-public.indexpatternfield.script.md) | | string
| |
| [scripted](./kibana-plugin-plugins-data-public.indexpatternfield.scripted.md) | | boolean
| |
| [searchable](./kibana-plugin-plugins-data-public.indexpatternfield.searchable.md) | | boolean
| |
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternfield.routes.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternfield.routes.md
deleted file mode 100644
index 664a7b7b7ca0e5..00000000000000
--- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternfield.routes.md
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-[Home](./index.md) > [kibana-plugin-plugins-data-public](./kibana-plugin-plugins-data-public.md) > [IndexPatternField](./kibana-plugin-plugins-data-public.indexpatternfield.md) > [routes](./kibana-plugin-plugins-data-public.indexpatternfield.routes.md)
-
-## IndexPatternField.routes property
-
-Signature:
-
-```typescript
-routes: Record;
-```
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternfieldlist.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternfieldlist.md
index 4b7184b7dc151e..478b73f5f85813 100644
--- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternfieldlist.md
+++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternfieldlist.md
@@ -24,5 +24,5 @@ export declare class FieldList extends Array implements IFieldList
| [getByName](./kibana-plugin-plugins-data-public.indexpatternfieldlist.getbyname.md) | | (name: string) => Field | undefined
| |
| [getByType](./kibana-plugin-plugins-data-public.indexpatternfieldlist.getbytype.md) | | (type: string) => any[]
| |
| [remove](./kibana-plugin-plugins-data-public.indexpatternfieldlist.remove.md) | | (field: IFieldType) => void
| |
-| [update](./kibana-plugin-plugins-data-public.indexpatternfieldlist.update.md) | | (field: Field) => void
| |
+| [update](./kibana-plugin-plugins-data-public.indexpatternfieldlist.update.md) | | (field: Record<string, any>) => void
| |
diff --git a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternfieldlist.update.md b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternfieldlist.update.md
index ca03ec4b728932..d5156ed41e493e 100644
--- a/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternfieldlist.update.md
+++ b/docs/development/plugins/data/public/kibana-plugin-plugins-data-public.indexpatternfieldlist.update.md
@@ -7,5 +7,5 @@
Signature:
```typescript
-update: (field: Field) => void;
+update: (field: Record) => void;
```
diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/create_edit_field/create_edit_field.js b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/create_edit_field/create_edit_field.js
index 0dcf778a5a6629..3569e9caf4e275 100644
--- a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/create_edit_field/create_edit_field.js
+++ b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/create_edit_field/create_edit_field.js
@@ -53,7 +53,6 @@ const renderFieldEditor = (
indexPattern={indexPattern}
field={field}
helpers={{
- Field: IndexPatternField,
getConfig,
$http,
fieldFormatEditors,
diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/edit_index_pattern.js b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/edit_index_pattern.js
index 594430ca01f4ce..c65054f583ef2d 100644
--- a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/edit_index_pattern.js
+++ b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/edit_index_pattern.js
@@ -49,6 +49,8 @@ const TAB_INDEXED_FIELDS = 'indexedFields';
const TAB_SCRIPTED_FIELDS = 'scriptedFields';
const TAB_SOURCE_FILTERS = 'sourceFilters';
+const EDIT_FIELD_PATH = '/management/kibana/index_patterns/{{indexPattern.id}}/field/{{name}}';
+
function updateSourceFiltersTable($scope) {
$scope.$$postDigest(() => {
const node = document.getElementById(REACT_SOURCE_FILTERS_DOM_ELEMENT_ID);
@@ -97,8 +99,8 @@ function updateScriptedFieldsTable($scope) {
fieldFilter={$scope.fieldFilter}
scriptedFieldLanguageFilter={$scope.scriptedFieldLanguageFilter}
helpers={{
- redirectToRoute: (obj, route) => {
- $scope.kbnUrl.changeToRoute(obj, route);
+ redirectToRoute: field => {
+ $scope.kbnUrl.changePath(EDIT_FIELD_PATH, field);
$scope.$apply();
},
getRouteHref: (obj, route) => $scope.kbnUrl.getRouteHref(obj, route),
@@ -140,8 +142,8 @@ function updateIndexedFieldsTable($scope) {
fieldWildcardMatcher={$scope.fieldWildcardMatcher}
indexedFieldTypeFilter={$scope.indexedFieldTypeFilter}
helpers={{
- redirectToRoute: (obj, route) => {
- $scope.kbnUrl.changeToRoute(obj, route);
+ redirectToRoute: field => {
+ $scope.kbnUrl.changePath(EDIT_FIELD_PATH, field);
$scope.$apply();
},
getFieldInfo: $scope.getFieldInfo,
diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/indexed_fields_table/__jest__/__snapshots__/indexed_fields_table.test.js.snap b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/indexed_fields_table/__jest__/__snapshots__/indexed_fields_table.test.js.snap
index dc77fe6c8a69d6..b38036a0c2bf0f 100644
--- a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/indexed_fields_table/__jest__/__snapshots__/indexed_fields_table.test.js.snap
+++ b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/indexed_fields_table/__jest__/__snapshots__/indexed_fields_table.test.js.snap
@@ -18,7 +18,6 @@ exports[`IndexedFieldsTable should filter based on the query bar 1`] = `
"indexPattern": undefined,
"info": undefined,
"name": "Elastic",
- "routes": undefined,
"searchable": true,
},
]
@@ -45,7 +44,6 @@ exports[`IndexedFieldsTable should filter based on the type filter 1`] = `
"indexPattern": undefined,
"info": undefined,
"name": "timestamp",
- "routes": undefined,
"type": "date",
},
]
@@ -72,7 +70,6 @@ exports[`IndexedFieldsTable should render normally 1`] = `
"indexPattern": undefined,
"info": undefined,
"name": "Elastic",
- "routes": undefined,
"searchable": true,
},
Object {
@@ -82,7 +79,6 @@ exports[`IndexedFieldsTable should render normally 1`] = `
"indexPattern": undefined,
"info": undefined,
"name": "timestamp",
- "routes": undefined,
"type": "date",
},
Object {
@@ -92,7 +88,6 @@ exports[`IndexedFieldsTable should render normally 1`] = `
"indexPattern": undefined,
"info": undefined,
"name": "conflictingField",
- "routes": undefined,
"type": "conflict",
},
]
diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/indexed_fields_table/indexed_fields_table.js b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/indexed_fields_table/indexed_fields_table.js
index 652efbe98067f1..074e5784f3dae6 100644
--- a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/indexed_fields_table/indexed_fields_table.js
+++ b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/indexed_fields_table/indexed_fields_table.js
@@ -65,7 +65,6 @@ export class IndexedFieldsTable extends Component {
return {
...field,
displayName: field.displayName,
- routes: field.routes,
indexPattern: field.indexPattern,
format: getFieldFormat(indexPattern, field.name),
excluded: fieldWildcardMatch ? fieldWildcardMatch(field.name) : false,
@@ -104,7 +103,7 @@ export class IndexedFieldsTable extends Component {
this.props.helpers.redirectToRoute(field, 'edit')}
+ editField={field => this.props.helpers.redirectToRoute(field)}
/>
);
diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/scripted_fields_table.tsx b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/scripted_fields_table.tsx
index ba044296a693a9..e8dfbd6496057f 100644
--- a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/scripted_fields_table.tsx
+++ b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/scripted_fields_table.tsx
@@ -155,7 +155,7 @@ export class ScriptedFieldsTable extends Component<
this.props.helpers.redirectToRoute(field, 'edit')}
+ editField={field => this.props.helpers.redirectToRoute(field)}
deleteField={this.startDeleteField}
/>
diff --git a/src/legacy/ui/public/field_editor/field_editor.js b/src/legacy/ui/public/field_editor/field_editor.js
index 43461c4c689be6..e90cb110ac3048 100644
--- a/src/legacy/ui/public/field_editor/field_editor.js
+++ b/src/legacy/ui/public/field_editor/field_editor.js
@@ -66,7 +66,7 @@ import { ScriptingHelpFlyout } from './components/scripting_help';
import { FieldFormatEditor } from './components/field_format_editor';
import { FIELD_TYPES_BY_LANG, DEFAULT_FIELD_TYPES } from './constants';
-import { copyField, executeScript, isScriptValid } from './lib';
+import { executeScript, isScriptValid } from './lib';
import { i18n } from '@kbn/i18n';
import { FormattedMessage } from '@kbn/i18n/react';
@@ -100,7 +100,6 @@ export class FieldEditor extends PureComponent {
indexPattern: PropTypes.object.isRequired,
field: PropTypes.object.isRequired,
helpers: PropTypes.shape({
- Field: PropTypes.func.isRequired,
getConfig: PropTypes.func.isRequired,
$http: PropTypes.func.isRequired,
fieldFormatEditors: PropTypes.object.isRequired,
@@ -111,11 +110,7 @@ export class FieldEditor extends PureComponent {
constructor(props) {
super(props);
- const {
- field,
- indexPattern,
- helpers: { Field },
- } = props;
+ const { field, indexPattern } = props;
this.state = {
isReady: false,
@@ -125,7 +120,7 @@ export class FieldEditor extends PureComponent {
fieldTypes: [],
fieldTypeFormats: [],
existingFieldNames: indexPattern.fields.map(f => f.name),
- field: copyField(field, indexPattern, Field),
+ field: { ...field, format: field.format },
fieldFormatId: undefined,
fieldFormatParams: {},
showScriptingHelp: false,
@@ -730,7 +725,7 @@ export class FieldEditor extends PureComponent {
};
saveField = async () => {
- const field = this.state.field.toActualField();
+ const field = this.state.field;
const { indexPattern } = this.props;
const { fieldFormatId } = this.state;
diff --git a/src/legacy/ui/public/field_editor/lib/__tests__/copy_field.test.js b/src/legacy/ui/public/field_editor/lib/__tests__/copy_field.test.js
deleted file mode 100644
index 2cee45742ab81d..00000000000000
--- a/src/legacy/ui/public/field_editor/lib/__tests__/copy_field.test.js
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Licensed to Elasticsearch B.V. under one or more contributor
- * license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright
- * ownership. Elasticsearch B.V. licenses this file to you under
- * the Apache License, Version 2.0 (the "License"); you may
- * not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import { copyField } from '../copy_field';
-
-const field = {
- name: 'test_field',
- scripted: true,
- type: 'number',
- lang: 'painless',
-};
-
-describe('copyField', () => {
- it('should copy a field', () => {
- const copiedField = copyField(field, {}, {});
- copiedField.name = 'test_name_change';
-
- // Check that copied field has `toActualField()` method
- expect(typeof copiedField.toActualField).toEqual('function');
-
- // Check that we did not modify the original field object when
- // modifying copied field
- expect(field.toActualField).toEqual(undefined);
- expect(field.name).toEqual('test_field');
-
- expect(copiedField).not.toEqual(field);
- expect(copiedField.name).toEqual('test_name_change');
- expect(copiedField.scripted).toEqual(field.scripted);
- expect(copiedField.type).toEqual(field.type);
- expect(copiedField.lang).toEqual(field.lang);
- });
-});
diff --git a/src/legacy/ui/public/field_editor/lib/copy_field.js b/src/legacy/ui/public/field_editor/lib/copy_field.js
deleted file mode 100644
index bfc1cb8480d5d4..00000000000000
--- a/src/legacy/ui/public/field_editor/lib/copy_field.js
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Licensed to Elasticsearch B.V. under one or more contributor
- * license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright
- * ownership. Elasticsearch B.V. licenses this file to you under
- * the Apache License, Version 2.0 (the "License"); you may
- * not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import { has } from 'lodash';
-
-/**
- * Fully clones a Field object, so that modifications can be performed on
- * the copy without affecting original field. Field objects contain
- * enumerable and non-eumerable properties that may or may not be writable.
- * The function copies all properties as property descriptors into
- * `newFieldProps`, overrides getter and setter, and returns a new object
- * created from that.
- *
- * @param {object} field - Field object to copy
- * @param {object} indexPattern - index pattern object the field belongs to
- * @param {object} Field - Field object type
- * @return {object} the cloned object
- */
-export const copyField = (field, indexPattern, Field) => {
- const changes = {};
- const newFieldProps = {
- // When we are ready to save the copied field back into the index pattern,
- // we use `toActualField()` to retrieve an actual `Field` type object, using
- // its original properties with our "changes" applied.
- toActualField: {
- value: () => {
- return new Field(indexPattern, {
- ...field.$$spec,
- ...changes,
- });
- },
- },
- };
-
- // Index pattern `Field` objects are created with custom property
- // descriptors using `ObjDefine`.
- //
- // Each property of a `Field` type object could be enumerable/non-enumerable,
- // writable/not writable, configurable/not configurable, and have custom
- // getter and setter. We can't use the original `field` object directly for
- // creating a new field or editing a new field, since we need all the
- // properties to be editable.
- //
- // A normal copy of `field` (i.e. `const newField = { ...field }`) will only
- // copy enumerable properties and copy each property's descriptors (not
- // writable, etc).
- //
- // So we copy `field`'s **property descriptors** into `newFieldProps`
- // and modify them so that they are "writable" with a getter/setter that
- // stores and retrieves changes into/from another object (`changes`).
- Object.getOwnPropertyNames(field).forEach(function(prop) {
- const desc = Object.getOwnPropertyDescriptor(field, prop);
-
- newFieldProps[prop] = {
- enumerable: desc.enumerable,
- get: function() {
- return has(changes, prop) ? changes[prop] : field[prop];
- },
- set: function(v) {
- changes[prop] = v;
- },
- };
- });
-
- return Object.create(null, newFieldProps);
-};
diff --git a/src/legacy/ui/public/field_editor/lib/index.js b/src/legacy/ui/public/field_editor/lib/index.js
index c74bb0cc2ef8ab..c9dd9d03b74f7b 100644
--- a/src/legacy/ui/public/field_editor/lib/index.js
+++ b/src/legacy/ui/public/field_editor/lib/index.js
@@ -17,5 +17,4 @@
* under the License.
*/
-export { copyField } from './copy_field';
export { executeScript, isScriptValid } from './validate_script';
diff --git a/src/plugins/data/public/index_patterns/fields/field.ts b/src/plugins/data/public/index_patterns/fields/field.ts
index 1554565d1403ee..6370dcdf2db6f4 100644
--- a/src/plugins/data/public/index_patterns/fields/field.ts
+++ b/src/plugins/data/public/index_patterns/fields/field.ts
@@ -45,9 +45,6 @@ export class Field implements IFieldType {
subType?: IFieldSubType;
displayName?: string;
format: any;
- routes: Record = {
- edit: '/management/kibana/index_patterns/{{indexPattern.id}}/field/{{name}}',
- };
$$spec: FieldSpec;
constructor(
@@ -146,7 +143,3 @@ export class Field implements IFieldType {
return obj.create();
}
}
-
-Field.prototype.routes = {
- edit: '/management/kibana/index_patterns/{{indexPattern.id}}/field/{{name}}',
-};
diff --git a/src/plugins/data/public/index_patterns/fields/field_list.ts b/src/plugins/data/public/index_patterns/fields/field_list.ts
index 03214a8c96427a..d6067280fd7b67 100644
--- a/src/plugins/data/public/index_patterns/fields/field_list.ts
+++ b/src/plugins/data/public/index_patterns/fields/field_list.ts
@@ -70,11 +70,12 @@ export class FieldList extends Array implements IFieldList {
this.splice(fieldIndex, 1);
};
- update = (field: Field) => {
- const index = this.findIndex(f => f.name === field.name);
- this.splice(index, 1, field);
- this.setByName(field);
- this.removeByGroup(field);
- this.setByGroup(field);
+ update = (field: FieldSpec) => {
+ const newField = new Field(this.indexPattern, field, this.shortDotsEnable);
+ const index = this.findIndex(f => f.name === newField.name);
+ this.splice(index, 1, newField);
+ this.setByName(newField);
+ this.removeByGroup(newField);
+ this.setByGroup(newField);
};
}
diff --git a/src/plugins/data/public/public.api.md b/src/plugins/data/public/public.api.md
index cef82b27b1b5bc..62967a7071d825 100644
--- a/src/plugins/data/public/public.api.md
+++ b/src/plugins/data/public/public.api.md
@@ -947,8 +947,6 @@ export class IndexPatternField implements IFieldType {
// (undocumented)
name: string;
// (undocumented)
- routes: Record;
- // (undocumented)
script?: string;
// (undocumented)
scripted?: boolean;
@@ -978,7 +976,7 @@ export class IndexPatternFieldList extends Array implements I
// (undocumented)
remove: (field: IFieldType) => void;
// (undocumented)
- update: (field: IndexPatternField) => void;
+ update: (field: Record) => void;
}
// Warning: (ae-missing-release-tag) "indexPatterns" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)