Skip to content
Merged
Show file tree
Hide file tree
Changes from 10 commits
Commits
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
1 change: 1 addition & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
Expand Up @@ -1212,6 +1212,7 @@ x-pack/platform/test/serverless/api_integration/test_suites/platform_security @e
/src/platform/test/functional/fixtures/kbn_archiver/discover.json @elastic/kibana-data-discovery
/src/platform/test/functional/fixtures/kbn_archiver/date_nested.json @elastic/kibana-data-discovery
/src/platform/test/functional/fixtures/kbn_archiver/date_* @elastic/kibana-data-discovery
/src/platform/test/functional/fixtures/kbn_archiver/managed_data_view.json @elastic/kibana-data-discovery
/src/platform/test/functional/fixtures/es_archiver/unmapped_fields @elastic/kibana-data-discovery # Assigned per the only use: https://github.com/elastic/kibana/blob/main/test/functional/apps/discover/group7/_indexpattern_with_unmapped_fields.ts#L26
/src/platform/test/functional/fixtures/es_archiver/message_with_newline @elastic/kibana-data-discovery # Assigned per the only use: https://github.com/elastic/kibana/blob/main/test/functional/apps/discover/classic/_doc_table_newline.ts#L24
/src/platform/test/functional/fixtures/es_archiver/hamlet @elastic/kibana-data-discovery # Assigned per the only use: https://github.com/elastic/kibana/blob/main/test/functional/apps/discover/group5/_large_string.ts#L30
Expand Down
2 changes: 1 addition & 1 deletion packages/kbn-optimizer/limits.yml
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,7 @@ pageLoadAssetSize:
uiActions: 24712
uiActionsEnhanced: 20189
unifiedDocViewer: 14513
unifiedSearch: 23000
unifiedSearch: 23500
upgradeAssistant: 6898
uptime: 48184
urlDrilldown: 21563
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ export const createOptionsSchemas = {
version: schema.maybe(schema.string()),
refresh: schema.maybe(schema.boolean()),
initialNamespaces: schema.maybe(schema.arrayOf(schema.string())),
managed: schema.maybe(schema.boolean()),
};

export const schemaAndOr = schema.oneOf([schema.literal('AND'), schema.literal('OR')]);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,10 @@ export interface SavedObjectCreateOptions {
* * For global object types (registered with `namespaceType: 'agnostic'`): this option cannot be used.
*/
initialNamespaces?: string[];
/**
* Whether the object is managed by the application.
*/
managed?: boolean;
}

/** Saved Object search options - Pick and Omit to customize */
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ export const DataViewEditor = ({
requireTimestampField = false,
editData,
allowAdHocDataView,
onDuplicate,
isDuplicating,
getDataViewHelpText,
}: DataViewEditorPropsWithServices) => {
const { Provider: KibanaReactContextProvider } =
Expand All @@ -45,6 +47,8 @@ export const DataViewEditor = ({
requireTimestampField={requireTimestampField}
editData={editData}
allowAdHocDataView={allowAdHocDataView}
onDuplicate={onDuplicate}
isDuplicating={isDuplicating}
getDataViewHelpText={getDataViewHelpText}
/>
</EuiFlyout>
Expand Down

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It looks like the Allow hidden and system indices toggle is still enabled for managed data views:

Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,10 @@ import {
EuiLink,
EuiSkeletonRectangle,
EuiSkeletonTitle,
EuiCallOut,
type UseEuiTheme,
useIsWithinBreakpoints,
useEuiTheme,
} from '@elastic/eui';
import useDebounce from 'react-use/lib/useDebounce';
import { i18n } from '@kbn/i18n';
Expand Down Expand Up @@ -72,6 +74,8 @@ export interface Props {
showManagementLink?: boolean;
allowAdHoc: boolean;
dataViewEditorService: DataViewEditorService;
isDuplicating: boolean;
onDuplicate?: () => void;
getDataViewHelpText?: (dataView: DataView) => ReactNode | string | undefined;
}

Expand All @@ -92,15 +96,22 @@ const IndexPatternEditorFlyoutContentComponent = ({
showManagementLink,
getDataViewHelpText,
dataViewEditorService,
onDuplicate,
isDuplicating,
}: Props) => {
const styles = useMemoCss(componentStyles);
const { euiTheme } = useEuiTheme();
const isMobile = useIsWithinBreakpoints(['s', 'xs']);

const {
services: { application, dataViews, uiSettings, overlays, docLinks },
} = useKibana<DataViewEditorContext>();

const canSave = dataViews.getCanSaveSync();
const isManaged = !!editData?.managed;
// onDuplicate is only provided when editing an existing data view
// if onDuplicate is undefined we are duplicating a new data view
const isEditingExisting = editData && !isDuplicating;

const { form } = useForm<IndexPatternConfig, FormInternal>({
// Prefill with data if editData exists
Expand All @@ -113,8 +124,8 @@ const IndexPatternEditorFlyoutContentComponent = ({
...(editData
? {
title: editData.getIndexPattern(),
id: editData.id,
name: editData.name,
id: isDuplicating ? undefined : editData.id,
name: isDuplicating ? undefined : editData.name,
allowHidden: editData.getAllowHidden(),
...(editData.timeFieldName === noTimeFieldValue
? { timestampField: { label: noTimeFieldLabel, value: noTimeFieldValue } }
Expand Down Expand Up @@ -150,7 +161,7 @@ const IndexPatternEditorFlyoutContentComponent = ({
};
}

if (editData && editData.getIndexPattern() !== formData.title) {
if (isEditingExisting && editData.getIndexPattern() !== formData.title) {
await editDataViewModal({
dataViewName: formData.name || formData.title,
overlays,
Expand Down Expand Up @@ -183,6 +194,15 @@ const IndexPatternEditorFlyoutContentComponent = ({
const rollupCaps = useObservable(dataViewEditorService.rollupCaps$);
const rollupIndicesCapabilities = useObservable(dataViewEditorService.rollupIndicesCaps$, {});

const namesNotAllowed = useMemo(() => {
// When duplicating a data view, add the existing name
// to the not allowed names list
if (isDuplicating && editData) {
return [editData.name, ...(existingDataViewNames || [])];
Comment thread
christineweng marked this conversation as resolved.
}
return existingDataViewNames || [];
}, [existingDataViewNames, isDuplicating, editData]);

useDebounce(
() => {
dataViewEditorService.setIndexPattern(title);
Expand Down Expand Up @@ -285,10 +305,13 @@ const IndexPatternEditorFlyoutContentComponent = ({
: SubmittingType.persisting
: undefined
}
isEdit={!!editData}
hasEditData={!!editData}
isPersisted={Boolean(editData && editData.isPersisted())}
allowAdHoc={allowAdHoc}
canSave={canSave}
isManaged={isManaged}
onDuplicate={onDuplicate}
isDuplicating={isDuplicating}
/>
);

Expand All @@ -297,9 +320,11 @@ const IndexPatternEditorFlyoutContentComponent = ({
<FlyoutPanels.Item data-test-subj="indexPatternEditorFlyout" border="right">
<FlyoutPanels.Content>
<EuiTitle data-test-subj="flyoutTitle">
<h2 id="dataViewEditorFlyoutTitle">{editData ? editorTitleEditMode : editorTitle}</h2>
<h2 id="dataViewEditorFlyoutTitle">
{isEditingExisting ? editorTitleEditMode : editorTitle}
</h2>
</EuiTitle>
{showManagementLink && editData && editData.id && (
{showManagementLink && isEditingExisting && editData && editData.id && (
<EuiLink
href={application.getUrlForApp('management', {
path: `/kibana/dataViews/dataView/${editData.id}`,
Expand All @@ -310,6 +335,18 @@ const IndexPatternEditorFlyoutContentComponent = ({
})}
</EuiLink>
)}
{isManaged && (
<EuiCallOut
title={i18n.translate('indexPatternEditor.managedDataViewCalloutMessage', {
defaultMessage:
"You can't edit managed data views. Instead, you can duplicate the data view and make changes to your newly created copy.",
})}
color="primary"
iconType="info"
size="s"
css={{ marginTop: euiTheme.base }}
/>
)}
<Form
form={form}
css={styles.patternEditorForm}
Expand All @@ -323,7 +360,7 @@ const IndexPatternEditorFlyoutContentComponent = ({
<EuiSpacer size="l" />
<EuiFlexGroup>
<EuiFlexItem>
<NameField namesNotAllowed={existingDataViewNames || []} />
<NameField namesNotAllowed={namesNotAllowed} disabled={isManaged} />
</EuiFlexItem>
</EuiFlexGroup>
<EuiSpacer size="l" />
Expand All @@ -337,6 +374,7 @@ const IndexPatternEditorFlyoutContentComponent = ({
dataViewEditorService.indexPatternValidationProvider
}
titleHelpText={titleHelpText}
disabled={isManaged}
/>
</EuiFlexItem>
</EuiFlexGroup>
Expand All @@ -347,12 +385,13 @@ const IndexPatternEditorFlyoutContentComponent = ({
options$={dataViewEditorService.timestampFieldOptions$}
isLoadingOptions$={dataViewEditorService.loadingTimestampFields$}
matchedIndices$={dataViewEditorService.matchedIndices$}
disabled={isManaged}
/>
</EuiFlexItem>
</EuiFlexGroup>
<AdvancedParamsContent
disableAllowHidden={type === INDEX_PATTERN_TYPE.ROLLUP}
disableId={!!editData}
disableAllowHidden={type === INDEX_PATTERN_TYPE.ROLLUP || isManaged}
disableId={isEditingExisting || isManaged}
onAllowHiddenChange={() => {
form.getFields().title.validate();
}}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ const DataViewFlyoutContentContainer = ({
editData,
allowAdHocDataView,
showManagementLink,
onDuplicate,
isDuplicating = false,
getDataViewHelpText,
}: DataViewEditorProps) => {
const {
Expand Down Expand Up @@ -52,7 +54,7 @@ const DataViewFlyoutContentContainer = ({
const onSaveClick = async (dataViewSpec: DataViewSpec, persist: boolean = true) => {
try {
let saveResponse;
if (editData) {
if (editData && !editData.managed && !isDuplicating) {
const { name = '', timeFieldName, title = '', allowHidden = false } = dataViewSpec;
editData.setIndexPattern(title);
editData.name = name;
Expand All @@ -63,6 +65,17 @@ const DataViewFlyoutContentContainer = ({
}
saveResponse = editData;
} else {
if (editData && isDuplicating) {
const editDataSpec = editData.toSpec();
dataViewSpec = {
...editDataSpec,
id: dataViewSpec.id,
name: dataViewSpec.name,
timeFieldName: dataViewSpec.timeFieldName,
title: dataViewSpec.title,
allowHidden: dataViewSpec.allowHidden,
};
}
saveResponse = persist
? await dataViews.createAndSave(dataViewSpec)
: await dataViews.create(dataViewSpec);
Expand Down Expand Up @@ -101,6 +114,8 @@ const DataViewFlyoutContentContainer = ({
showManagementLink={showManagementLink}
allowAdHoc={allowAdHocDataView || false}
dataViewEditorService={dataViewEditorService}
onDuplicate={onDuplicate}
isDuplicating={isDuplicating}
getDataViewHelpText={getDataViewHelpText}
/>
);
Expand Down
Loading