diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/__jest__/__snapshots__/scripted_field_table.test.js.snap b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/__snapshots__/scripted_field_table.test.tsx.snap
similarity index 89%
rename from src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/__jest__/__snapshots__/scripted_field_table.test.js.snap
rename to src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/__snapshots__/scripted_field_table.test.tsx.snap
index a53f4d7f609cb..569b75c848c52 100644
--- a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/__jest__/__snapshots__/scripted_field_table.test.js.snap
+++ b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/__snapshots__/scripted_field_table.test.tsx.snap
@@ -1,7 +1,7 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`ScriptedFieldsTable should filter based on the lang filter 1`] = `
-
+
@@ -39,11 +39,11 @@ exports[`ScriptedFieldsTable should filter based on the lang filter 1`] = `
]
}
/>
-
+
`;
exports[`ScriptedFieldsTable should filter based on the query bar 1`] = `
-
+
@@ -72,11 +72,11 @@ exports[`ScriptedFieldsTable should filter based on the query bar 1`] = `
]
}
/>
-
+
`;
exports[`ScriptedFieldsTable should hide the table if there are no scripted fields 1`] = `
-
+
@@ -97,11 +97,11 @@ exports[`ScriptedFieldsTable should hide the table if there are no scripted fiel
}
items={Array []}
/>
-
+
`;
exports[`ScriptedFieldsTable should render normally 1`] = `
-
+
@@ -135,11 +135,11 @@ exports[`ScriptedFieldsTable should render normally 1`] = `
]
}
/>
-
+
`;
exports[`ScriptedFieldsTable should show a delete modal 1`] = `
-
+
@@ -173,14 +173,16 @@ exports[`ScriptedFieldsTable should show a delete modal 1`] = `
]
}
/>
-
-
-
-
+
+
`;
diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/call_outs/__jest__/__snapshots__/call_outs.test.js.snap b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/call_outs/__snapshots__/call_outs.test.tsx.snap
similarity index 98%
rename from src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/call_outs/__jest__/__snapshots__/call_outs.test.js.snap
rename to src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/call_outs/__snapshots__/call_outs.test.tsx.snap
index e6f0d6cd819e3..4dfda1b9339b1 100644
--- a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/call_outs/__jest__/__snapshots__/call_outs.test.js.snap
+++ b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/call_outs/__snapshots__/call_outs.test.tsx.snap
@@ -1,7 +1,7 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`CallOuts should render normally 1`] = `
-
+
-
+
`;
exports[`CallOuts should render without any call outs 1`] = `""`;
diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/call_outs/__jest__/call_outs.test.js b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/call_outs/call_outs.test.tsx
similarity index 92%
rename from src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/call_outs/__jest__/call_outs.test.js
rename to src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/call_outs/call_outs.test.tsx
index 12e0ee8839967..407928931191d 100644
--- a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/call_outs/__jest__/call_outs.test.js
+++ b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/call_outs/call_outs.test.tsx
@@ -23,7 +23,7 @@ import { shallow } from 'enzyme';
import { CallOuts } from '../call_outs';
describe('CallOuts', () => {
- it('should render normally', async () => {
+ test('should render normally', () => {
const component = shallow(
{
expect(component).toMatchSnapshot();
});
- it('should render without any call outs', async () => {
+ test('should render without any call outs', () => {
const component = shallow(
);
diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/call_outs/call_outs.js b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/call_outs/call_outs.tsx
similarity index 94%
rename from src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/call_outs/call_outs.js
rename to src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/call_outs/call_outs.tsx
index 0c321c8ba8b01..8e38b569a32fa 100644
--- a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/call_outs/call_outs.js
+++ b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/call_outs/call_outs.tsx
@@ -20,16 +20,20 @@
import React from 'react';
import { EuiCallOut, EuiLink, EuiSpacer } from '@elastic/eui';
-
import { FormattedMessage } from '@kbn/i18n/react';
-export const CallOuts = ({ deprecatedLangsInUse, painlessDocLink }) => {
+interface CallOutsProps {
+ deprecatedLangsInUse: string[];
+ painlessDocLink: string;
+}
+
+export const CallOuts = ({ deprecatedLangsInUse, painlessDocLink }: CallOutsProps) => {
if (!deprecatedLangsInUse.length) {
return null;
}
return (
-
+ <>
{
-
+ >
);
};
diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/call_outs/index.js b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/call_outs/index.ts
similarity index 100%
rename from src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/call_outs/index.js
rename to src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/call_outs/index.ts
diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/confirmation_modal/__snapshots__/confirmation_modal.test.tsx.snap b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/confirmation_modal/__snapshots__/confirmation_modal.test.tsx.snap
new file mode 100644
index 0000000000000..2b320782cb163
--- /dev/null
+++ b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/confirmation_modal/__snapshots__/confirmation_modal.test.tsx.snap
@@ -0,0 +1,14 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`DeleteScritpedFieldConfirmationModal should render normally 1`] = `
+
+
+
+`;
diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/confirmation_modal/confirmation_modal.test.tsx b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/confirmation_modal/confirmation_modal.test.tsx
new file mode 100644
index 0000000000000..f3594e7507a6a
--- /dev/null
+++ b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/confirmation_modal/confirmation_modal.test.tsx
@@ -0,0 +1,37 @@
+/*
+ * 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 React from 'react';
+import { shallow } from 'enzyme';
+
+import { DeleteScritpedFieldConfirmationModal } from './confirmation_modal';
+
+describe('DeleteScritpedFieldConfirmationModal', () => {
+ test('should render normally', () => {
+ const component = shallow(
+ {}}
+ hideDeleteConfirmationModal={() => {}}
+ />
+ );
+
+ expect(component).toMatchSnapshot();
+ });
+});
diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/confirmation_modal/confirmation_modal.tsx b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/confirmation_modal/confirmation_modal.tsx
new file mode 100644
index 0000000000000..1e82174f863b0
--- /dev/null
+++ b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/confirmation_modal/confirmation_modal.tsx
@@ -0,0 +1,63 @@
+/*
+ * 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 React from 'react';
+import { i18n } from '@kbn/i18n';
+import { EUI_MODAL_CONFIRM_BUTTON, EuiConfirmModal, EuiOverlayMask } from '@elastic/eui';
+
+import { ScriptedFieldItem } from '../../types';
+
+interface DeleteScritpedFieldConfirmationModalProps {
+ field: ScriptedFieldItem;
+ hideDeleteConfirmationModal: (
+ event?: React.KeyboardEvent | React.MouseEvent
+ ) => void;
+ deleteField: (event: React.MouseEvent) => void;
+}
+
+export const DeleteScritpedFieldConfirmationModal = ({
+ field,
+ hideDeleteConfirmationModal,
+ deleteField,
+}: DeleteScritpedFieldConfirmationModalProps) => {
+ const title = i18n.translate('kbn.management.editIndexPattern.scripted.deleteFieldLabel', {
+ defaultMessage: "Delete scripted field '{fieldName}'?",
+ values: { fieldName: field.name },
+ });
+ const cancelButtonText = i18n.translate(
+ 'kbn.management.editIndexPattern.scripted.deleteField.cancelButton',
+ { defaultMessage: 'Cancel' }
+ );
+ const confirmButtonText = i18n.translate(
+ 'kbn.management.editIndexPattern.scripted.deleteField.deleteButton',
+ { defaultMessage: 'Delete' }
+ );
+
+ return (
+
+
+
+ );
+};
diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/confirmation_modal/index.ts b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/confirmation_modal/index.ts
new file mode 100644
index 0000000000000..b87b572333e6f
--- /dev/null
+++ b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/confirmation_modal/index.ts
@@ -0,0 +1,20 @@
+/*
+ * 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.
+ */
+
+export { DeleteScritpedFieldConfirmationModal } from './confirmation_modal';
diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/header/__jest__/__snapshots__/header.test.js.snap b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/header/__snapshots__/header.test.tsx.snap
similarity index 100%
rename from src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/header/__jest__/__snapshots__/header.test.js.snap
rename to src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/header/__snapshots__/header.test.tsx.snap
diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/header/__jest__/header.test.js b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/header/header.test.tsx
similarity index 92%
rename from src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/header/__jest__/header.test.js
rename to src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/header/header.test.tsx
index 3e377ccfbdd41..19479de8f2aa4 100644
--- a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/header/__jest__/header.test.js
+++ b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/header/header.test.tsx
@@ -20,10 +20,10 @@
import React from 'react';
import { shallow } from 'enzyme';
-import { Header } from '../header';
+import { Header } from './header';
describe('Header', () => {
- it('should render normally', async () => {
+ test('should render normally', () => {
const component = shallow();
expect(component).toMatchSnapshot();
diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/header/header.js b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/header/header.tsx
similarity index 92%
rename from src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/header/header.js
rename to src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/header/header.tsx
index 97c235d82f870..b8f832dad72af 100644
--- a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/header/header.js
+++ b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/header/header.tsx
@@ -18,13 +18,15 @@
*/
import React from 'react';
-import PropTypes from 'prop-types';
-
import { EuiButton, EuiFlexGroup, EuiFlexItem, EuiText, EuiTitle } from '@elastic/eui';
import { FormattedMessage } from '@kbn/i18n/react';
-export const Header = ({ addScriptedFieldUrl }) => (
+interface HeaderProps {
+ addScriptedFieldUrl: string;
+}
+
+export const Header = ({ addScriptedFieldUrl }: HeaderProps) => (
@@ -56,7 +58,3 @@ export const Header = ({ addScriptedFieldUrl }) => (
);
-
-Header.propTypes = {
- addScriptedFieldUrl: PropTypes.string.isRequired,
-};
diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/header/index.js b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/header/index.ts
similarity index 100%
rename from src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/header/index.js
rename to src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/header/index.ts
diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/index.js b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/index.ts
similarity index 92%
rename from src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/index.js
rename to src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/index.ts
index 5c0bb41eab765..7d74776fb2bca 100644
--- a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/index.js
+++ b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/index.ts
@@ -20,3 +20,4 @@
export { Table } from './table';
export { Header } from './header';
export { CallOuts } from './call_outs';
+export { DeleteScritpedFieldConfirmationModal } from './confirmation_modal';
diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/table/__jest__/__snapshots__/table.test.js.snap b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/table/__snapshots__/table.test.tsx.snap
similarity index 93%
rename from src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/table/__jest__/__snapshots__/table.test.js.snap
rename to src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/table/__snapshots__/table.test.tsx.snap
index 2da4d84463b29..8439887dd468a 100644
--- a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/table/__jest__/__snapshots__/table.test.js.snap
+++ b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/table/__snapshots__/table.test.tsx.snap
@@ -41,6 +41,7 @@ exports[`Table should render normally 1`] = `
"icon": "pencil",
"name": "Edit",
"onClick": [Function],
+ "type": "icon",
},
Object {
"color": "danger",
@@ -48,6 +49,7 @@ exports[`Table should render normally 1`] = `
"icon": "trash",
"name": "Delete",
"onClick": [Function],
+ "type": "icon",
},
],
"name": "",
@@ -58,8 +60,9 @@ exports[`Table should render normally 1`] = `
items={
Array [
Object {
- "id": 1,
- "name": "Elastic",
+ "lang": "Elastic",
+ "name": "1",
+ "script": "",
},
]
}
diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/table/index.js b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/table/index.ts
similarity index 100%
rename from src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/table/index.js
rename to src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/table/index.ts
diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/table/__jest__/table.test.js b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/table/table.test.tsx
similarity index 71%
rename from src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/table/__jest__/table.test.js
rename to src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/table/table.test.tsx
index 4545bfa8f64db..13b3875f58687 100644
--- a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/table/__jest__/table.test.js
+++ b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/table/table.test.tsx
@@ -19,45 +19,50 @@
import React from 'react';
import { shallow } from 'enzyme';
-import { shallowWithI18nProvider } from 'test_utils/enzyme_helpers';
import { Table } from '../table';
+import { ScriptedFieldItem } from '../../types';
+import { IIndexPattern } from '../../../../../../../../../../../plugins/data/public';
-const indexPattern = {
- fieldFormatMap: {
- Elastic: {
- type: {
- title: 'string',
- },
- },
- },
-};
+const getIndexPatternMock = (mockedFields: any = {}) => ({ ...mockedFields } as IIndexPattern);
-const items = [{ id: 1, name: 'Elastic' }];
+const items: ScriptedFieldItem[] = [{ name: '1', lang: 'Elastic', script: '' }];
describe('Table', () => {
- it('should render normally', async () => {
- const component = shallowWithI18nProvider(
+ let indexPattern: IIndexPattern;
+
+ beforeEach(() => {
+ indexPattern = getIndexPatternMock({
+ fieldFormatMap: {
+ Elastic: {
+ type: {
+ title: 'string',
+ },
+ },
+ },
+ });
+ });
+
+ test('should render normally', () => {
+ const component = shallow(
{}}
deleteField={() => {}}
- onChange={() => {}}
/>
);
expect(component).toMatchSnapshot();
});
- it('should render the format', async () => {
- const component = shallowWithI18nProvider(
+ test('should render the format', () => {
+ const component = shallow(
{}}
deleteField={() => {}}
- onChange={() => {}}
/>
);
@@ -65,16 +70,15 @@ describe('Table', () => {
expect(formatTableCell).toMatchSnapshot();
});
- it('should allow edits', () => {
+ test('should allow edits', () => {
const editField = jest.fn();
- const component = shallowWithI18nProvider(
+ const component = shallow(
{}}
- onChange={() => {}}
/>
);
@@ -83,16 +87,15 @@ describe('Table', () => {
expect(editField).toBeCalled();
});
- it('should allow deletes', () => {
+ test('should allow deletes', () => {
const deleteField = jest.fn();
- const component = shallowWithI18nProvider(
+ const component = shallow(
{}}
deleteField={deleteField}
- onChange={() => {}}
/>
);
diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/table/table.js b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/table/table.tsx
similarity index 84%
rename from src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/table/table.js
rename to src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/table/table.tsx
index 5e05dd95827c7..14aed11b32203 100644
--- a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/table/table.js
+++ b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/components/table/table.tsx
@@ -18,27 +18,24 @@
*/
import React, { PureComponent } from 'react';
-import PropTypes from 'prop-types';
-
-import { EuiInMemoryTable } from '@elastic/eui';
-
+import { get } from 'lodash';
import { i18n } from '@kbn/i18n';
+import { EuiInMemoryTable, EuiBasicTableColumn } from '@elastic/eui';
-export class Table extends PureComponent {
- static propTypes = {
- indexPattern: PropTypes.object.isRequired,
- items: PropTypes.array.isRequired,
- editField: PropTypes.func.isRequired,
- deleteField: PropTypes.func.isRequired,
- };
+import { ScriptedFieldItem } from '../../types';
+import { IIndexPattern } from '../../../../../../../../../../../plugins/data/public';
- renderFormatCell = value => {
- const { indexPattern } = this.props;
+interface TableProps {
+ indexPattern: IIndexPattern;
+ items: ScriptedFieldItem[];
+ editField: (field: ScriptedFieldItem) => void;
+ deleteField: (field: ScriptedFieldItem) => void;
+}
- const title =
- indexPattern.fieldFormatMap[value] && indexPattern.fieldFormatMap[value].type
- ? indexPattern.fieldFormatMap[value].type.title
- : '';
+export class Table extends PureComponent {
+ renderFormatCell = (value: string) => {
+ const { indexPattern } = this.props;
+ const title = get(indexPattern, ['fieldFormatMap', value, 'type', 'title'], '');
return {title};
};
@@ -46,7 +43,7 @@ export class Table extends PureComponent {
render() {
const { items, editField, deleteField } = this.props;
- const columns = [
+ const columns: Array> = [
{
field: 'displayName',
name: i18n.translate('kbn.management.editIndexPattern.scripted.table.nameHeader', {
@@ -101,6 +98,7 @@ export class Table extends PureComponent {
name: '',
actions: [
{
+ type: 'icon',
name: i18n.translate('kbn.management.editIndexPattern.scripted.table.editHeader', {
defaultMessage: 'Edit',
}),
@@ -112,6 +110,7 @@ export class Table extends PureComponent {
onClick: editField,
},
{
+ type: 'icon',
name: i18n.translate('kbn.management.editIndexPattern.scripted.table.deleteHeader', {
defaultMessage: 'Delete',
}),
diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/index.js b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/index.ts
similarity index 100%
rename from src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/index.js
rename to src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/index.ts
diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/__jest__/scripted_field_table.test.js b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/scripted_field_table.test.tsx
similarity index 75%
rename from src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/__jest__/scripted_field_table.test.js
rename to src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/scripted_field_table.test.tsx
index 5be963ad94b7d..914d80f9f61d7 100644
--- a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/__jest__/scripted_field_table.test.js
+++ b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/scripted_field_table.test.tsx
@@ -18,9 +18,10 @@
*/
import React from 'react';
-import { shallowWithI18nProvider } from 'test_utils/enzyme_helpers';
+import { shallow } from 'enzyme';
import { ScriptedFieldsTable } from '../scripted_fields_table';
+import { IIndexPattern } from '../../../../../../../../../plugins/data/common/index_patterns';
jest.mock('@elastic/eui', () => ({
EuiTitle: 'eui-title',
@@ -36,18 +37,20 @@ jest.mock('@elastic/eui', () => ({
default: () => {},
},
}));
-jest.mock('../components/header', () => ({ Header: 'header' }));
-jest.mock('../components/call_outs', () => ({ CallOuts: 'call-outs' }));
-jest.mock('../components/table', () => ({
+jest.mock('./components/header', () => ({ Header: 'header' }));
+jest.mock('./components/call_outs', () => ({ CallOuts: 'call-outs' }));
+jest.mock('./components/table', () => ({
// Note: this seems to fix React complaining about non lowercase attributes
Table: () => {
return 'table';
},
}));
+
jest.mock('ui/scripting_languages', () => ({
getSupportedScriptingLanguages: () => ['painless'],
getDeprecatedScriptingLanguages: () => [],
}));
+
jest.mock('ui/documentation_links', () => ({
documentationLinks: {
scriptedFields: {
@@ -61,16 +64,22 @@ const helpers = {
getRouteHref: () => '#',
};
-const indexPattern = {
- getScriptedFields: () => [
- { name: 'ScriptedField', lang: 'painless', script: 'x++' },
- { name: 'JustATest', lang: 'painless', script: 'z++' },
- ],
-};
+const getIndexPatternMock = (mockedFields: any = {}) => ({ ...mockedFields } as IIndexPattern);
describe('ScriptedFieldsTable', () => {
- it('should render normally', async () => {
- const component = shallowWithI18nProvider(
+ let indexPattern: IIndexPattern;
+
+ beforeEach(() => {
+ indexPattern = getIndexPatternMock({
+ getScriptedFields: () => [
+ { name: 'ScriptedField', lang: 'painless', script: 'x++' },
+ { name: 'JustATest', lang: 'painless', script: 'z++' },
+ ],
+ });
+ });
+
+ test('should render normally', async () => {
+ const component = shallow(
);
@@ -82,8 +91,8 @@ describe('ScriptedFieldsTable', () => {
expect(component).toMatchSnapshot();
});
- it('should filter based on the query bar', async () => {
- const component = shallowWithI18nProvider(
+ test('should filter based on the query bar', async () => {
+ const component = shallow(
);
@@ -98,16 +107,16 @@ describe('ScriptedFieldsTable', () => {
expect(component).toMatchSnapshot();
});
- it('should filter based on the lang filter', async () => {
- const component = shallowWithI18nProvider(
+ test('should filter based on the lang filter', async () => {
+ const component = shallow(
[
{ name: 'ScriptedField', lang: 'painless', script: 'x++' },
{ name: 'JustATest', lang: 'painless', script: 'z++' },
{ name: 'Bad', lang: 'somethingElse', script: 'z++' },
],
- }}
+ })}
helpers={helpers}
/>
);
@@ -123,12 +132,12 @@ describe('ScriptedFieldsTable', () => {
expect(component).toMatchSnapshot();
});
- it('should hide the table if there are no scripted fields', async () => {
- const component = shallowWithI18nProvider(
+ test('should hide the table if there are no scripted fields', async () => {
+ const component = shallow(
[],
- }}
+ })}
helpers={helpers}
/>
);
@@ -141,22 +150,22 @@ describe('ScriptedFieldsTable', () => {
expect(component).toMatchSnapshot();
});
- it('should show a delete modal', async () => {
- const component = shallowWithI18nProvider(
+ test('should show a delete modal', async () => {
+ const component = shallow(
);
await component.update(); // Fire `componentWillMount()`
- component.instance().startDeleteField({ name: 'ScriptedField' });
+ component.instance().startDeleteField({ name: 'ScriptedField', lang: '', script: '' });
await component.update();
// Ensure the modal is visible
expect(component).toMatchSnapshot();
});
- it('should delete a field', async () => {
+ test('should delete a field', async () => {
const removeScriptedField = jest.fn();
- const component = shallowWithI18nProvider(
+ const component = shallow(
{
);
await component.update(); // Fire `componentWillMount()`
- component.instance().startDeleteField({ name: 'ScriptedField' });
+ component.instance().startDeleteField({ name: 'ScriptedField', lang: '', script: '' });
+
await component.update();
await component.instance().deleteField();
await component.update();
+
expect(removeScriptedField).toBeCalled();
});
});
diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/scripted_fields_table.js b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/scripted_fields_table.tsx
similarity index 60%
rename from src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/scripted_fields_table.js
rename to src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/scripted_fields_table.tsx
index 69343a5175a25..ba044296a693a 100644
--- a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/scripted_fields_table.js
+++ b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/scripted_fields_table.tsx
@@ -18,31 +18,42 @@
*/
import React, { Component } from 'react';
-import PropTypes from 'prop-types';
import {
getSupportedScriptingLanguages,
getDeprecatedScriptingLanguages,
} from 'ui/scripting_languages';
import { documentationLinks } from 'ui/documentation_links';
-import { EuiSpacer, EuiOverlayMask, EuiConfirmModal, EUI_MODAL_CONFIRM_BUTTON } from '@elastic/eui';
-import { i18n } from '@kbn/i18n';
-
-import { Table, Header, CallOuts } from './components';
-
-export class ScriptedFieldsTable extends Component {
- static propTypes = {
- indexPattern: PropTypes.object.isRequired,
- fieldFilter: PropTypes.string,
- scriptedFieldLanguageFilter: PropTypes.string,
- helpers: PropTypes.shape({
- redirectToRoute: PropTypes.func.isRequired,
- getRouteHref: PropTypes.func.isRequired,
- }),
- onRemoveField: PropTypes.func,
+import { EuiSpacer } from '@elastic/eui';
+
+import { Table, Header, CallOuts, DeleteScritpedFieldConfirmationModal } from './components';
+import { ScriptedFieldItem } from './types';
+
+import { IIndexPattern } from '../../../../../../../../../plugins/data/public';
+
+interface ScriptedFieldsTableProps {
+ indexPattern: IIndexPattern;
+ fieldFilter?: string;
+ scriptedFieldLanguageFilter?: string;
+ helpers: {
+ redirectToRoute: Function;
+ getRouteHref: Function;
};
+ onRemoveField?: () => void;
+}
- constructor(props) {
+interface ScriptedFieldsTableState {
+ deprecatedLangsInUse: string[];
+ fieldToDelete: ScriptedFieldItem | undefined;
+ isDeleteConfirmationModalVisible: boolean;
+ fields: ScriptedFieldItem[];
+}
+
+export class ScriptedFieldsTable extends Component<
+ ScriptedFieldsTableProps,
+ ScriptedFieldsTableState
+> {
+ constructor(props: ScriptedFieldsTableProps) {
super(props);
this.state = {
@@ -64,7 +75,8 @@ export class ScriptedFieldsTable extends Component {
const deprecatedLangs = getDeprecatedScriptingLanguages();
const supportedLangs = getSupportedScriptingLanguages();
- for (const { lang } of fields) {
+ for (const field of fields) {
+ const lang: string = field.lang;
if (deprecatedLangs.includes(lang) || !supportedLangs.includes(lang)) {
deprecatedLangsInUse.push(lang);
}
@@ -91,7 +103,8 @@ export class ScriptedFieldsTable extends Component {
let filteredFields = languageFilteredFields;
if (fieldFilter) {
- const normalizedFieldFilter = this.props.fieldFilter.toLowerCase();
+ const normalizedFieldFilter = fieldFilter.toLowerCase();
+
filteredFields = languageFilteredFields.filter(field =>
field.name.toLowerCase().includes(normalizedFieldFilter)
);
@@ -100,18 +113,7 @@ export class ScriptedFieldsTable extends Component {
return filteredFields;
};
- renderCallOuts() {
- const { deprecatedLangsInUse } = this.state;
-
- return (
-
- );
- }
-
- startDeleteField = field => {
+ startDeleteField = (field: ScriptedFieldItem) => {
this.setState({ fieldToDelete: field, isDeleteConfirmationModalVisible: true });
};
@@ -124,55 +126,29 @@ export class ScriptedFieldsTable extends Component {
const { fieldToDelete } = this.state;
indexPattern.removeScriptedField(fieldToDelete);
- onRemoveField && onRemoveField();
- this.fetchFields();
- this.hideDeleteConfirmationModal();
- };
- renderDeleteConfirmationModal() {
- const { fieldToDelete } = this.state;
-
- if (!fieldToDelete) {
- return null;
+ if (onRemoveField) {
+ onRemoveField();
}
- const title = i18n.translate('kbn.management.editIndexPattern.scripted.deleteFieldLabel', {
- defaultMessage: "Delete scripted field '{fieldName}'?",
- values: { fieldName: fieldToDelete.name },
- });
- const cancelButtonText = i18n.translate(
- 'kbn.management.editIndexPattern.scripted.deleteField.cancelButton',
- { defaultMessage: 'Cancel' }
- );
- const confirmButtonText = i18n.translate(
- 'kbn.management.editIndexPattern.scripted.deleteField.deleteButton',
- { defaultMessage: 'Delete' }
- );
-
- return (
-
-
-
- );
- }
+ this.fetchFields();
+ this.hideDeleteConfirmationModal();
+ };
render() {
const { helpers, indexPattern } = this.props;
+ const { fieldToDelete, deprecatedLangsInUse } = this.state;
const items = this.getFilteredItems();
return (
-
+ <>
- {this.renderCallOuts()}
+
@@ -183,8 +159,14 @@ export class ScriptedFieldsTable extends Component {
deleteField={this.startDeleteField}
/>
- {this.renderDeleteConfirmationModal()}
-
+ {fieldToDelete && (
+
+ )}
+ >
);
}
}
diff --git a/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/types.ts b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/types.ts
new file mode 100644
index 0000000000000..c1227393c561f
--- /dev/null
+++ b/src/legacy/core_plugins/kibana/public/management/sections/index_patterns/edit_index_pattern/scripted_fields_table/types.ts
@@ -0,0 +1,25 @@
+/*
+ * 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.
+ */
+
+/** @internal **/
+export interface ScriptedFieldItem {
+ name: string;
+ lang: string;
+ script: string;
+}
diff --git a/src/legacy/ui/public/scripting_languages/index.js b/src/legacy/ui/public/scripting_languages/index.ts
similarity index 83%
rename from src/legacy/ui/public/scripting_languages/index.js
rename to src/legacy/ui/public/scripting_languages/index.ts
index 2f43a44d66068..283a3273a2a5d 100644
--- a/src/legacy/ui/public/scripting_languages/index.js
+++ b/src/legacy/ui/public/scripting_languages/index.ts
@@ -17,23 +17,25 @@
* under the License.
*/
+import { IHttpService } from 'angular';
+import { i18n } from '@kbn/i18n';
+
import chrome from '../chrome';
import { toastNotifications } from '../notify';
-import { i18n } from '@kbn/i18n';
-export function getSupportedScriptingLanguages() {
+export function getSupportedScriptingLanguages(): string[] {
return ['painless'];
}
-export function getDeprecatedScriptingLanguages() {
+export function getDeprecatedScriptingLanguages(): string[] {
return [];
}
-export function GetEnabledScriptingLanguagesProvider($http) {
+export function GetEnabledScriptingLanguagesProvider($http: IHttpService) {
return () => {
return $http
.get(chrome.addBasePath('/api/kibana/scripts/languages'))
- .then(res => res.data)
+ .then((res: any) => res.data)
.catch(() => {
toastNotifications.addDanger(
i18n.translate('common.ui.scriptingLanguages.errorFetchingToastDescription', {