From 86a38b6250749f95397e43417bd69a47641a2fe1 Mon Sep 17 00:00:00 2001 From: James Gowdy Date: Wed, 3 Nov 2021 15:17:11 +0000 Subject: [PATCH 1/3] [File data visualizer] Disabling create data view based on capabilities --- .../file_data_visualizer_view.js | 8 ++--- .../components/import_settings/advanced.tsx | 29 +++++++++------- .../import_settings/data_view_tooltip.tsx | 33 +++++++++++++++++++ .../import_settings/import_settings.tsx | 11 +++++++ .../components/import_settings/simple.tsx | 31 +++++++++-------- .../components/import_view/import_view.js | 8 +++-- .../file_data_visualizer.tsx | 1 + 7 files changed, 88 insertions(+), 33 deletions(-) create mode 100644 x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_settings/data_view_tooltip.tsx diff --git a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_data_visualizer_view/file_data_visualizer_view.js b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_data_visualizer_view/file_data_visualizer_view.js index 054416ad7ba36e..fa437cce292689 100644 --- a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_data_visualizer_view/file_data_visualizer_view.js +++ b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/file_data_visualizer_view/file_data_visualizer_view.js @@ -295,12 +295,7 @@ export class FileDataVisualizerView extends Component {
{mode === MODE.READ && ( <> - {!loading && !loaded && ( - - )} + {!loading && !loaded && } {loading && } @@ -373,6 +368,7 @@ export class FileDataVisualizerView extends Component { savedObjectsClient={this.savedObjectsClient} fileUpload={this.props.fileUpload} resultsLinks={this.props.resultsLinks} + capabilities={this.props.capabilities} /> {bottomBarVisible && ( diff --git a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_settings/advanced.tsx b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_settings/advanced.tsx index 83e7c556f033f1..013b991d943198 100644 --- a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_settings/advanced.tsx +++ b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_settings/advanced.tsx @@ -21,6 +21,7 @@ import { import { CombinedField, CombinedFieldsForm } from '../../../common/components/combined_fields'; import { JsonEditor, EDITOR_MODE } from '../json_editor'; import { FindFileStructureResponse } from '../../../../../../file_upload/common'; +import { DataViewToolTip } from './data_view_tooltip'; const EDITOR_HEIGHT = '300px'; interface Props { @@ -42,6 +43,7 @@ interface Props { combinedFields: CombinedField[]; onCombinedFieldsChange(combinedFields: CombinedField[]): void; results: FindFileStructureResponse; + canCreateDataView: boolean; } export const AdvancedSettings: FC = ({ @@ -63,6 +65,7 @@ export const AdvancedSettings: FC = ({ combinedFields, onCombinedFieldsChange, results, + canCreateDataView, }) => { return ( @@ -98,18 +101,20 @@ export const AdvancedSettings: FC = ({ - - } - checked={createIndexPattern === true} - disabled={initialized === true} - onChange={onCreateIndexPatternChange} - /> + + + } + checked={createIndexPattern === true} + disabled={initialized === true || canCreateDataView === false} + onChange={onCreateIndexPatternChange} + /> + diff --git a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_settings/data_view_tooltip.tsx b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_settings/data_view_tooltip.tsx new file mode 100644 index 00000000000000..2f44e8c5c59b73 --- /dev/null +++ b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_settings/data_view_tooltip.tsx @@ -0,0 +1,33 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { FC } from 'react'; +import { FormattedMessage } from '@kbn/i18n/react'; +import { EuiToolTip } from '@elastic/eui'; + +interface Props { + children?: React.ReactElement; + showTooltip: boolean; +} + +export const DataViewToolTip: FC = ({ children, showTooltip }) => { + return ( + + ) : null + } + > + {children} + + ); +}; diff --git a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_settings/import_settings.tsx b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_settings/import_settings.tsx index 4e36dc42b54a58..d134f061b8ca50 100644 --- a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_settings/import_settings.tsx +++ b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_settings/import_settings.tsx @@ -14,6 +14,7 @@ import { SimpleSettings } from './simple'; import { AdvancedSettings } from './advanced'; import { CombinedField } from '../../../common/components/combined_fields'; import { FindFileStructureResponse } from '../../../../../../file_upload/common'; +import { useDataVisualizerKibana } from '../../../kibana_context'; interface Props { index: string; @@ -56,6 +57,14 @@ export const ImportSettings: FC = ({ onCombinedFieldsChange, results, }) => { + const { + services: { + application: { capabilities }, + }, + } = useDataVisualizerKibana(); + + const canCreateDataView = capabilities.savedObjectsManagement.edit as boolean; + const tabs = [ { id: 'simple-settings', @@ -74,6 +83,7 @@ export const ImportSettings: FC = ({ onCreateIndexPatternChange={onCreateIndexPatternChange} indexNameError={indexNameError} combinedFields={combinedFields} + canCreateDataView={canCreateDataView} /> ), @@ -106,6 +116,7 @@ export const ImportSettings: FC = ({ combinedFields={combinedFields} onCombinedFieldsChange={onCombinedFieldsChange} results={results} + canCreateDataView={canCreateDataView} /> ), diff --git a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_settings/simple.tsx b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_settings/simple.tsx index 284a5aa3d4f3f0..8bfb4ea00a15f7 100644 --- a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_settings/simple.tsx +++ b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_settings/simple.tsx @@ -14,6 +14,7 @@ import { CombinedField, CombinedFieldsReadOnlyForm, } from '../../../common/components/combined_fields'; +import { DataViewToolTip } from './data_view_tooltip'; interface Props { index: string; @@ -23,6 +24,7 @@ interface Props { onCreateIndexPatternChange(): void; indexNameError: string; combinedFields: CombinedField[]; + canCreateDataView: boolean; } export const SimpleSettings: FC = ({ @@ -33,6 +35,7 @@ export const SimpleSettings: FC = ({ onCreateIndexPatternChange, indexNameError, combinedFields, + canCreateDataView, }) => { return ( @@ -69,19 +72,21 @@ export const SimpleSettings: FC = ({ - - } - checked={createIndexPattern === true} - disabled={initialized === true} - onChange={onCreateIndexPatternChange} - data-test-subj="dataVisualizerFileCreateIndexPatternCheckbox" - /> + + + } + checked={createIndexPattern === true} + disabled={initialized === true || canCreateDataView === false} + onChange={onCreateIndexPatternChange} + data-test-subj="dataVisualizerFileCreateIndexPatternCheckbox" + /> + diff --git a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_view/import_view.js b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_view/import_view.js index 3b3a11a5dff22e..6dbee207f78b40 100644 --- a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_view/import_view.js +++ b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_view/import_view.js @@ -76,7 +76,7 @@ export class ImportView extends Component { constructor(props) { super(props); - this.state = getDefaultState(DEFAULT_STATE, this.props.results); + this.state = getDefaultState(DEFAULT_STATE, this.props.results, this.props.capabilities); this.savedObjectsClient = props.savedObjectsClient; } @@ -640,7 +640,7 @@ async function createKibanaIndexPattern(indexPatternName, indexPatterns, timeFie } } -function getDefaultState(state, results) { +function getDefaultState(state, results, capabilities) { const indexSettingsString = state.indexSettingsString === '' ? JSON.stringify(DEFAULT_INDEX_SETTINGS, null, 2) @@ -666,6 +666,9 @@ function getDefaultState(state, results) { const timeFieldName = results.timestamp_field; + const createIndexPattern = + capabilities.savedObjectsManagement.edit === false ? false : state.createIndexPattern; + return { ...DEFAULT_STATE, indexSettingsString, @@ -673,6 +676,7 @@ function getDefaultState(state, results) { pipelineString, timeFieldName, combinedFields, + createIndexPattern, }; } diff --git a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/file_data_visualizer.tsx b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/file_data_visualizer.tsx index 3644f7053f1e81..a82a2b7e25d858 100644 --- a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/file_data_visualizer.tsx +++ b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/file_data_visualizer.tsx @@ -39,6 +39,7 @@ export const FileDataVisualizer: FC = ({ additionalLinks }) => { http={coreStart.http} fileUpload={fileUpload} resultsLinks={additionalLinks} + capabilities={coreStart.application.capabilities} /> ); From 93f540cde3270b255b5db59eef55e78d2b4fddda Mon Sep 17 00:00:00 2001 From: James Gowdy Date: Wed, 3 Nov 2021 16:45:52 +0000 Subject: [PATCH 2/3] removing data view management card based on permissions --- .../results_links/results_links.tsx | 30 +++++++++---------- .../components/import_settings/advanced.tsx | 6 ++-- ...oltip.tsx => create_data_view_tooltip.tsx} | 4 +-- .../import_settings/import_settings.tsx | 3 +- .../components/import_settings/simple.tsx | 6 ++-- .../components/import_view/import_view.js | 4 ++- 6 files changed, 28 insertions(+), 25 deletions(-) rename x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_settings/{data_view_tooltip.tsx => create_data_view_tooltip.tsx} (82%) diff --git a/x-pack/plugins/data_visualizer/public/application/common/components/results_links/results_links.tsx b/x-pack/plugins/data_visualizer/public/application/common/components/results_links/results_links.tsx index f1de0b0b8b8fa2..ed6ab29748a86c 100644 --- a/x-pack/plugins/data_visualizer/public/application/common/components/results_links/results_links.tsx +++ b/x-pack/plugins/data_visualizer/public/application/common/components/results_links/results_links.tsx @@ -58,7 +58,13 @@ export const ResultsLinks: FC = ({ additionalLinks, }) => { const { - services: { fileUpload }, + services: { + fileUpload, + application: { getUrlForApp, capabilities }, + share: { + urlGenerators: { getUrlGenerator }, + }, + }, } = useDataVisualizerKibana(); const [duration, setDuration] = useState({ @@ -72,15 +78,6 @@ export const ResultsLinks: FC = ({ const [indexPatternManagementLink, setIndexPatternManagementLink] = useState(''); const [generatedLinks, setGeneratedLinks] = useState>({}); - const { - services: { - application: { getUrlForApp, capabilities }, - share: { - urlGenerators: { getUrlGenerator }, - }, - }, - } = useDataVisualizerKibana(); - useEffect(() => { let unmounted = false; @@ -137,11 +134,14 @@ export const ResultsLinks: FC = ({ setIndexManagementLink( getUrlForApp('management', { path: '/data/index_management/indices' }) ); - setIndexPatternManagementLink( - getUrlForApp('management', { - path: `/kibana/indexPatterns${createIndexPattern ? `/patterns/${indexPatternId}` : ''}`, - }) - ); + + if (capabilities.indexPatterns.save === true) { + setIndexPatternManagementLink( + getUrlForApp('management', { + path: `/kibana/indexPatterns${createIndexPattern ? `/patterns/${indexPatternId}` : ''}`, + }) + ); + } } return () => { diff --git a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_settings/advanced.tsx b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_settings/advanced.tsx index 013b991d943198..23ad2b967bc282 100644 --- a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_settings/advanced.tsx +++ b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_settings/advanced.tsx @@ -21,7 +21,7 @@ import { import { CombinedField, CombinedFieldsForm } from '../../../common/components/combined_fields'; import { JsonEditor, EDITOR_MODE } from '../json_editor'; import { FindFileStructureResponse } from '../../../../../../file_upload/common'; -import { DataViewToolTip } from './data_view_tooltip'; +import { CreateDataViewToolTip } from './create_data_view_tooltip'; const EDITOR_HEIGHT = '300px'; interface Props { @@ -101,7 +101,7 @@ export const AdvancedSettings: FC = ({ - + = ({ disabled={initialized === true || canCreateDataView === false} onChange={onCreateIndexPatternChange} /> - + diff --git a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_settings/data_view_tooltip.tsx b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_settings/create_data_view_tooltip.tsx similarity index 82% rename from x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_settings/data_view_tooltip.tsx rename to x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_settings/create_data_view_tooltip.tsx index 2f44e8c5c59b73..84af5b08b3d495 100644 --- a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_settings/data_view_tooltip.tsx +++ b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_settings/create_data_view_tooltip.tsx @@ -14,7 +14,7 @@ interface Props { showTooltip: boolean; } -export const DataViewToolTip: FC = ({ children, showTooltip }) => { +export const CreateDataViewToolTip: FC = ({ children, showTooltip }) => { return ( = ({ children, showTooltip }) => { showTooltip ? ( ) : null } diff --git a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_settings/import_settings.tsx b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_settings/import_settings.tsx index d134f061b8ca50..c2b9779f3624d0 100644 --- a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_settings/import_settings.tsx +++ b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_settings/import_settings.tsx @@ -63,7 +63,8 @@ export const ImportSettings: FC = ({ }, } = useDataVisualizerKibana(); - const canCreateDataView = capabilities.savedObjectsManagement.edit as boolean; + const canCreateDataView = + capabilities.savedObjectsManagement.edit === true || capabilities.indexPatterns.save === true; const tabs = [ { diff --git a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_settings/simple.tsx b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_settings/simple.tsx index 8bfb4ea00a15f7..a080f62f54fc1f 100644 --- a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_settings/simple.tsx +++ b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_settings/simple.tsx @@ -14,7 +14,7 @@ import { CombinedField, CombinedFieldsReadOnlyForm, } from '../../../common/components/combined_fields'; -import { DataViewToolTip } from './data_view_tooltip'; +import { CreateDataViewToolTip } from './create_data_view_tooltip'; interface Props { index: string; @@ -72,7 +72,7 @@ export const SimpleSettings: FC = ({ - + = ({ onChange={onCreateIndexPatternChange} data-test-subj="dataVisualizerFileCreateIndexPatternCheckbox" /> - + diff --git a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_view/import_view.js b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_view/import_view.js index 6dbee207f78b40..59f56fd4b0aaaf 100644 --- a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_view/import_view.js +++ b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_view/import_view.js @@ -667,7 +667,9 @@ function getDefaultState(state, results, capabilities) { const timeFieldName = results.timestamp_field; const createIndexPattern = - capabilities.savedObjectsManagement.edit === false ? false : state.createIndexPattern; + capabilities.savedObjectsManagement.edit === false && capabilities.indexPatterns.save === false + ? false + : state.createIndexPattern; return { ...DEFAULT_STATE, From 53b87cee3f3c28e13f3fec5990495c9eb84bd6bf Mon Sep 17 00:00:00 2001 From: James Gowdy Date: Wed, 3 Nov 2021 17:29:35 +0000 Subject: [PATCH 3/3] fixing reset button and index data viz link --- .../file_data_visualizer/components/import_view/import_view.js | 2 +- .../datavisualizer/file_based/file_datavisualizer.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_view/import_view.js b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_view/import_view.js index 59f56fd4b0aaaf..b65e2c35ff4ff6 100644 --- a/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_view/import_view.js +++ b/x-pack/plugins/data_visualizer/public/application/file_data_visualizer/components/import_view/import_view.js @@ -85,7 +85,7 @@ export class ImportView extends Component { } clickReset = () => { - const state = getDefaultState(this.state, this.props.results); + const state = getDefaultState(this.state, this.props.results, this.props.capabilities); this.setState(state, () => { this.loadIndexPatternNames(); }); diff --git a/x-pack/plugins/ml/public/application/datavisualizer/file_based/file_datavisualizer.tsx b/x-pack/plugins/ml/public/application/datavisualizer/file_based/file_datavisualizer.tsx index 93c0291d4f9d4b..90b152453cecbe 100644 --- a/x-pack/plugins/ml/public/application/datavisualizer/file_based/file_datavisualizer.tsx +++ b/x-pack/plugins/ml/public/application/datavisualizer/file_based/file_datavisualizer.tsx @@ -89,7 +89,7 @@ export const FileDataVisualizerPage: FC = () => { }, }); }, - canDisplay: async () => true, + canDisplay: async ({ indexPatternId }) => indexPatternId !== '', }, ], []