diff --git a/CHANGELOG.md b/CHANGELOG.md index a5193ee87c5..799a921139d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -82,6 +82,7 @@ Inspired from [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) - [BUG][Multiple Datasource] Fix data source filter bug and add tests ([#6152](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/6152)) - [BUG][Multiple Datasource] Fix obsolete snapshots for test within data source management plugin ([#6185](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/6185)) - [Workspace] Add base path when parse url in http service ([#6233](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/6233)) +- [Discover] Remove empty space when resize datagrid table in Discover and Allow saving column width in both Discover and Dashboards Embeddable ([#5883](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/5883)) ### 🚞 Infrastructure diff --git a/release-notes/opensearch-dashboards.release-notes-2.13.0.md b/release-notes/opensearch-dashboards.release-notes-2.13.0.md index 5a9b5138304..afaf75cd95a 100644 --- a/release-notes/opensearch-dashboards.release-notes-2.13.0.md +++ b/release-notes/opensearch-dashboards.release-notes-2.13.0.md @@ -47,6 +47,7 @@ - [BUG][Multiple Datasource] Add a migration function for datasource to add migrationVersion field ([#6025](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/6025)) - [BUG][MD]Expose picker using function in data source management plugin setup([#6030](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/6030)) - [BUG][Multiple Datasource] Fix data source filter bug and add tests ([#6152](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/6152)) +- [Discover] Remove empty space when resize datagrid table in Discover and Allow saving column width in both Discover and Dashboards Embeddable ([#5883](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/5883)) ### 📝 Documentation diff --git a/src/plugins/discover/public/application/components/data_grid/data_grid_table.tsx b/src/plugins/discover/public/application/components/data_grid/data_grid_table.tsx index d4b8de6ad21..1c2898d3c57 100644 --- a/src/plugins/discover/public/application/components/data_grid/data_grid_table.tsx +++ b/src/plugins/discover/public/application/components/data_grid/data_grid_table.tsx @@ -6,7 +6,7 @@ import './_data_grid_table.scss'; import React, { useState, useMemo, useCallback } from 'react'; -import { EuiDataGrid, EuiDataGridSorting, EuiPanel } from '@elastic/eui'; +import { EuiDataGrid, EuiDataGridSorting, EuiPanel, EuiDataGridProps } from '@elastic/eui'; import { IndexPattern, getServices } from '../../../opensearch_dashboards_services'; import { fetchTableDataCell } from './data_grid_table_cell_value'; import { buildDataGridColumns, computeVisibleColumns } from './data_grid_table_columns'; @@ -26,9 +26,11 @@ import { LegacyDiscoverTable } from '../default_discover_table/default_discover_ import { getNewDiscoverSetting } from '../utils/local_storage'; import { SortDirection, SortOrder } from '../../../saved_searches/types'; import { useToolbarOptions } from './data_grid_toolbar'; +import { ColumnWidths } from './data_grid_table_columns'; export interface DataGridTableProps { columns: string[]; + columnWidths?: ColumnWidths; indexPattern: IndexPattern; onAddColumn: (column: string) => void; onFilter: DocViewFilterFn; @@ -38,6 +40,7 @@ export interface DataGridTableProps { onSort: (s: SortOrder[]) => void; rows: OpenSearchSearchHit[]; onSetColumns: (columns: string[]) => void; + onColumnResize: ({ columnId, width }: { columnId: string; width: number }) => void; sort: SortOrder[]; displayTimeColumn: boolean; title?: string; @@ -51,6 +54,7 @@ export interface DataGridTableProps { export const DataGridTable = ({ columns, + columnWidths, indexPattern, onAddColumn, onFilter, @@ -58,6 +62,7 @@ export const DataGridTable = ({ onRemoveColumn, onSetColumns, onSort, + onColumnResize, sort, hits, rows, @@ -125,9 +130,17 @@ export const DataGridTable = ({ indexPattern, displayTimeColumn, includeSourceInColumns, - isContextView + isContextView, + columnWidths ), - [adjustedColumns, indexPattern, displayTimeColumn, includeSourceInColumns, isContextView] + [ + adjustedColumns, + indexPattern, + displayTimeColumn, + includeSourceInColumns, + isContextView, + columnWidths, + ] ); const dataGridTableColumnsVisibility = useMemo( @@ -218,6 +231,7 @@ export const DataGridTable = ({ sorting={sorting} toolbarVisibility={isToolbarVisible ? toolbarOptions : false} rowHeightsOptions={rowHeightsOptions} + onColumnResize={onColumnResize} className="discoverDataGrid" /> ), @@ -232,6 +246,7 @@ export const DataGridTable = ({ isToolbarVisible, toolbarOptions, rowHeightsOptions, + onColumnResize, ] ); diff --git a/src/plugins/discover/public/application/components/data_grid/data_grid_table_columns.test.tsx b/src/plugins/discover/public/application/components/data_grid/data_grid_table_columns.test.tsx index 3123b0a1a21..cf7d15a03d4 100644 --- a/src/plugins/discover/public/application/components/data_grid/data_grid_table_columns.test.tsx +++ b/src/plugins/discover/public/application/components/data_grid/data_grid_table_columns.test.tsx @@ -49,7 +49,13 @@ const customizedIndexPatternMockWithTimeField = getMockedIndexPatternWithTimeFie describe('Testing buildDataGridColumns function ', () => { it('should return correct columns without time column when displayTimeColumn is false', () => { - const columns = buildDataGridColumns(['name', 'currency'], customizedIndexPatternMock, false); + const columns = buildDataGridColumns( + ['name', 'currency'], + customizedIndexPatternMock, + false, + false, + false + ); expect(columns).toHaveLength(2); expect(columns[0].id).toEqual('name'); expect(columns[1].id).toEqual('currency'); @@ -93,7 +99,9 @@ describe('Testing buildDataGridColumns function ', () => { const columns = buildDataGridColumns( ['name', 'currency', '_source'], customizedIndexPatternMockWithTimeField, - true + true, + false, + false ); expect(columns).toHaveLength(4); expect(columns[0].id).toEqual('order_date'); @@ -165,7 +173,9 @@ describe('Testing buildDataGridColumns function ', () => { const columns = buildDataGridColumns( ['name', 'currency', 'order_date'], customizedIndexPatternMockWithTimeField, - true + true, + false, + false ); expect(columns).toHaveLength(3); expect(columns[2].id).toEqual('order_date'); @@ -218,6 +228,32 @@ describe('Testing buildDataGridColumns function ', () => { ] `); }); + + it('should respect column widths when provided', () => { + const columnWidths = { name: { width: 100 }, currency: { width: 150 } }; + const columns = buildDataGridColumns( + ['name', 'currency'], + customizedIndexPatternMock, + false, + false, + false, + columnWidths + ); + expect(columns[0].initialWidth).toEqual(100); + expect(columns[1].initialWidth).toEqual(150); + }); + + it('should set default column width when not specified', () => { + const columns = buildDataGridColumns( + ['name', 'currency'], + customizedIndexPatternMock, + false, + false, + false + ); + expect(columns[0].initialWidth).toBeUndefined(); + expect(columns[1].initialWidth).toBeUndefined(); + }); }); describe('Testing computeVisibleColumns function ', () => { diff --git a/src/plugins/discover/public/application/components/data_grid/data_grid_table_columns.tsx b/src/plugins/discover/public/application/components/data_grid/data_grid_table_columns.tsx index ba80e719491..70209cb509f 100644 --- a/src/plugins/discover/public/application/components/data_grid/data_grid_table_columns.tsx +++ b/src/plugins/discover/public/application/components/data_grid/data_grid_table_columns.tsx @@ -8,22 +8,38 @@ import { i18n } from '@osd/i18n'; import { IndexPattern } from '../../../opensearch_dashboards_services'; import { getCellActions } from './data_grid_table_cell_actions'; +export interface ColumnWidth { + width?: number; +} + +export interface ColumnWidths { + [columnName: string]: ColumnWidth; +} + export function buildDataGridColumns( columnNames: string[], idxPattern: IndexPattern, displayTimeColumn: boolean, includeSourceInColumns: boolean, - isContextView: boolean + isContextView: boolean, + columnWidths?: ColumnWidths ) { const timeFieldName = idxPattern.timeFieldName; let columnsToUse = columnNames; + const getColumnWidth = (columnName: string) => columnWidths?.[columnName]?.width ?? 0; if (displayTimeColumn && timeFieldName && !columnNames.includes(timeFieldName)) { columnsToUse = [timeFieldName, ...columnNames]; } return columnsToUse.map((colName) => - generateDataGridTableColumn(colName, idxPattern, includeSourceInColumns, isContextView) + generateDataGridTableColumn( + colName, + idxPattern, + includeSourceInColumns, + isContextView, + getColumnWidth(colName) + ) ); } @@ -31,7 +47,8 @@ export function generateDataGridTableColumn( colName: string, idxPattern: IndexPattern, includeSourceInColumns: boolean, - isContextView: boolean + isContextView: boolean, + columnWidth: number | undefined = 0 ) { const timeLabel = i18n.translate('discover.timeLabel', { defaultMessage: 'Time', @@ -69,6 +86,9 @@ export function generateDataGridTableColumn( defaultMessage: 'Source', }); } + if (columnWidth > 0) { + dataGridCol.initialWidth = Number(columnWidth); + } return dataGridCol; } diff --git a/src/plugins/discover/public/application/components/doc_views/context_app.tsx b/src/plugins/discover/public/application/components/doc_views/context_app.tsx index c3a6da2d8ce..fc571442e80 100644 --- a/src/plugins/discover/public/application/components/doc_views/context_app.tsx +++ b/src/plugins/discover/public/application/components/doc_views/context_app.tsx @@ -104,6 +104,7 @@ export function ContextApp({ onRemoveColumn={() => {}} onSetColumns={() => {}} onSort={() => {}} + onColumnResize={() => {}} sort={sort} rows={rows} displayTimeColumn={displayTimeColumn} diff --git a/src/plugins/discover/public/application/components/top_nav/get_top_nav_links.tsx b/src/plugins/discover/public/application/components/top_nav/get_top_nav_links.tsx index 6760416ab8c..895dabc71aa 100644 --- a/src/plugins/discover/public/application/components/top_nav/get_top_nav_links.tsx +++ b/src/plugins/discover/public/application/components/top_nav/get_top_nav_links.tsx @@ -89,6 +89,7 @@ export const getTopNavLinks = ( savedSearch.columns = state.columns; savedSearch.sort = state.sort; + savedSearch.columnWidths = state.columnWidths; try { const id = await savedSearch.save(saveOptions); diff --git a/src/plugins/discover/public/application/utils/state_management/discover_slice.test.tsx b/src/plugins/discover/public/application/utils/state_management/discover_slice.test.tsx index ba94236e149..3f6e3b47303 100644 --- a/src/plugins/discover/public/application/utils/state_management/discover_slice.test.tsx +++ b/src/plugins/discover/public/application/utils/state_management/discover_slice.test.tsx @@ -134,4 +134,35 @@ describe('discoverSlice', () => { const result = discoverSlice.reducer(initialState, action); expect(result.columns).toEqual(['column1', 'column2', 'column3']); }); + + it('should handle setColumnWidths', () => { + // Add columnWidths to the state only in this test + const stateWithColumnWidths = { ...initialState, columnWidths: {} }; + const action = { + type: 'discover/setColumnWidths', + payload: { columnName: 'column1', width: 100 }, + }; + const result = discoverSlice.reducer(stateWithColumnWidths, action); + expect(result.columnWidths).toEqual({ column1: { width: 100 } }); + }); + + it('should update column width if already set', () => { + const stateWithColumnWidths = { ...initialState, columnWidths: { column1: { width: 150 } } }; + const action = { + type: 'discover/setColumnWidths', + payload: { columnName: 'column1', width: 200 }, + }; + const result = discoverSlice.reducer(stateWithColumnWidths, action); + expect(result.columnWidths).toEqual({ column1: { width: 200 } }); + }); + + it('should add new column width while maintaining existing ones', () => { + const stateWithColumnWidths = { ...initialState, columnWidths: { column1: { width: 150 } } }; + const action = { + type: 'discover/setColumnWidths', + payload: { columnName: 'column2', width: 100 }, + }; + const result = discoverSlice.reducer(stateWithColumnWidths, action); + expect(result.columnWidths).toEqual({ column1: { width: 150 }, column2: { width: 100 } }); + }); }); diff --git a/src/plugins/discover/public/application/utils/state_management/discover_slice.tsx b/src/plugins/discover/public/application/utils/state_management/discover_slice.tsx index 90fb417c2b0..9a2b8cb0a47 100644 --- a/src/plugins/discover/public/application/utils/state_management/discover_slice.tsx +++ b/src/plugins/discover/public/application/utils/state_management/discover_slice.tsx @@ -12,6 +12,7 @@ import { buildColumns } from '../columns'; import * as utils from './common'; import { SortOrder } from '../../../saved_searches/types'; import { DEFAULT_COLUMNS_SETTING, PLUGIN_ID } from '../../../../common'; +import { ColumnWidths } from '../../components/data_grid/data_grid_table_columns'; export interface DiscoverState { /** @@ -52,6 +53,7 @@ export interface DiscoverState { */ lineCount?: number; }; + columnWidths?: ColumnWidths; } export interface DiscoverRootState extends RootState { @@ -86,6 +88,7 @@ export const getPreloadedState = async ({ preloadedState.state.columns = savedSearchInstance.columns; preloadedState.state.sort = savedSearchInstance.sort; preloadedState.state.savedSearch = savedSearchInstance.id; + preloadedState.state.columnWidths = savedSearchInstance.columnWidths; const indexPatternId = savedSearchInstance.searchSource.getField('index')?.id; preloadedState.root = { metadata: { @@ -166,6 +169,11 @@ export const discoverSlice = createSlice({ interval: action.payload, }; }, + setColumnWidths(state, action: PayloadAction<{ columnName: string; width: number }>) { + const { columnName, width } = action.payload; + if (!state.columnWidths) state.columnWidths = {}; + state.columnWidths[columnName] = { width }; + }, updateState(state, action: PayloadAction>) { return { ...state, @@ -200,6 +208,7 @@ export const { setColumns, setSort, setInterval, + setColumnWidths, setState, updateState, setSavedSearchId, diff --git a/src/plugins/discover/public/application/view_components/canvas/discover_table.tsx b/src/plugins/discover/public/application/view_components/canvas/discover_table.tsx index ccf82e4ccba..823505bbb2a 100644 --- a/src/plugins/discover/public/application/view_components/canvas/discover_table.tsx +++ b/src/plugins/discover/public/application/view_components/canvas/discover_table.tsx @@ -4,6 +4,7 @@ */ import React, { useCallback, useMemo } from 'react'; +import { EuiDataGridProps } from '@elastic/eui'; import { DiscoverViewServices } from '../../../build_services'; import { useOpenSearchDashboards } from '../../../../../opensearch_dashboards_react/public'; import { DataGridTable } from '../../components/data_grid/data_grid_table'; @@ -14,6 +15,7 @@ import { removeColumn, setColumns, setSort, + setColumnWidths, useDispatch, useSelector, } from '../../utils/state_management'; @@ -41,7 +43,7 @@ export const DiscoverTable = ({ rows, scrollToTop }: Props) => { } = services; const { refetch$, indexPattern, savedSearch } = useDiscoverContext(); - const { columns, sort } = useSelector((state) => state.discover); + const { columns, sort, columnWidths } = useSelector((state) => state.discover); const dispatch = useDispatch(); const onAddColumn = (col: string) => { if (indexPattern && capabilities.discover?.save) { @@ -85,6 +87,14 @@ export const DiscoverTable = ({ rows, scrollToTop }: Props) => { }, [filterManager, indexPattern] ); + + const onColumnResize: EuiDataGridProps['onColumnResize'] = useCallback( + ({ columnId, width }: { columnId: string; width: number }) => { + dispatch(setColumnWidths({ columnName: columnId, width })); + }, + [dispatch] + ); + const displayTimeColumn = useMemo( () => !!(!uiSettings.get(DOC_HIDE_TIME_COLUMN_SETTING, false) && indexPattern?.isTimeBased()), [indexPattern, uiSettings] @@ -103,6 +113,7 @@ export const DiscoverTable = ({ rows, scrollToTop }: Props) => { return ( { onRemoveColumn={onRemoveColumn} onSetColumns={onSetColumns} onSort={onSetSort} + onColumnResize={onColumnResize} sort={sort} rows={rows} displayTimeColumn={displayTimeColumn} diff --git a/src/plugins/discover/public/application/view_components/utils/use_search.ts b/src/plugins/discover/public/application/view_components/utils/use_search.ts index 06eabb1e139..310669ab942 100644 --- a/src/plugins/discover/public/application/view_components/utils/use_search.ts +++ b/src/plugins/discover/public/application/view_components/utils/use_search.ts @@ -69,7 +69,9 @@ export type RefetchSubject = Subject; export const useSearch = (services: DiscoverViewServices) => { const initalSearchComplete = useRef(false); const [savedSearch, setSavedSearch] = useState(undefined); - const { savedSearch: savedSearchId, sort, interval } = useSelector((state) => state.discover); + const { savedSearch: savedSearchId, sort, interval, columnWidths } = useSelector( + (state) => state.discover + ); const { data, filterManager, getSavedSearchById, core, toastNotifications, chrome } = services; const indexPattern = useIndexPattern(services); const timefilter = data.query.timefilter.timefilter; diff --git a/src/plugins/discover/public/embeddable/search_embeddable.tsx b/src/plugins/discover/public/embeddable/search_embeddable.tsx index e2c1b127139..328fe6951fb 100644 --- a/src/plugins/discover/public/embeddable/search_embeddable.tsx +++ b/src/plugins/discover/public/embeddable/search_embeddable.tsx @@ -67,9 +67,11 @@ import { SearchEmbeddableComponent } from './search_embeddable_component'; import { DiscoverServices } from '../build_services'; import * as columnActions from '../application/utils/state_management/common'; import { buildColumns } from '../application/utils/columns'; +import { ColumnWidths } from '../application/components/data_grid/data_grid_table_columns'; export interface SearchProps { columns?: string[]; + columnWidths?: ColumnWidths; description?: string; sort?: SortOrder[]; onSort?: (sort: SortOrder[]) => void; @@ -81,6 +83,7 @@ export interface SearchProps { onMoveColumn?: (column: string, index: number) => void; onReorderColumn?: (col: string, source: number, destination: number) => void; onFilter?: (field: IFieldType, value: string[], operator: string) => void; + onColumnResize?: ({ columnId, width }: { columnId: string; width: number }) => void; rows?: any[]; indexPattern?: IndexPattern; hits?: number; @@ -217,6 +220,7 @@ export class SearchEmbeddable const searchProps: SearchProps = { columns: this.savedSearch.columns, + columnWidths: this.savedSearch.columnWidths, sort: [], inspectorAdapters: this.inspectorAdaptors, rows: [], @@ -298,6 +302,12 @@ export class SearchEmbeddable }); }; + searchProps.onColumnResize = ({ columnId, width }: { columnId: string; width: number }) => { + const columnWidthsState = { ...searchProps.columnWidths }; + columnWidthsState[columnId] = { width }; + this.updateInput({ columnWidths: columnWidthsState }); + }; + this.pushContainerStateParamsToProps(searchProps); } @@ -386,6 +396,7 @@ export class SearchEmbeddable searchProps.columns = this.input.columns || this.savedSearch.columns; searchProps.sort = this.input.sort || this.savedSearch.sort; searchProps.sharedItemTitle = this.panelTitle; + searchProps.columnWidths = this.input.columnWidths || this.savedSearch.columnWidths; if (isFetchRequired) { this.filtersSearchSource!.setField('filter', this.input.filters); diff --git a/src/plugins/discover/public/embeddable/search_embeddable_component.tsx b/src/plugins/discover/public/embeddable/search_embeddable_component.tsx index ecf0f1bc2b3..4914727eb91 100644 --- a/src/plugins/discover/public/embeddable/search_embeddable_component.tsx +++ b/src/plugins/discover/public/embeddable/search_embeddable_component.tsx @@ -29,6 +29,7 @@ export function SearchEmbeddableComponent({ searchProps }: SearchEmbeddableProps const services = getServices(); const discoverEmbeddableProps = { columns: searchProps.columns, + columnWidths: searchProps.columnWidths, indexPattern: searchProps.indexPattern, onAddColumn: searchProps.onAddColumn, onFilter: searchProps.onFilter, @@ -36,6 +37,7 @@ export function SearchEmbeddableComponent({ searchProps }: SearchEmbeddableProps onRemoveColumn: searchProps.onRemoveColumn, onReorderColumn: searchProps.onReorderColumn, onSort: searchProps.onSort, + onColumnResize: searchProps.onColumnResize, rows: searchProps.rows, onSetColumns: searchProps.onSetColumns, sort: searchProps.sort, diff --git a/src/plugins/discover/public/embeddable/types.ts b/src/plugins/discover/public/embeddable/types.ts index 855f2d96e47..7caebe58635 100644 --- a/src/plugins/discover/public/embeddable/types.ts +++ b/src/plugins/discover/public/embeddable/types.ts @@ -37,6 +37,7 @@ import { import { Filter, IIndexPattern, TimeRange, Query } from 'src/plugins/data/public'; import { SortOrder } from '../saved_searches/types'; import { SavedSearch } from '../saved_searches'; +import { ColumnWidths } from '../application/components/data_grid/data_grid_table_columns'; export interface SearchInput extends EmbeddableInput { timeRange: TimeRange; @@ -45,6 +46,7 @@ export interface SearchInput extends EmbeddableInput { hidePanelTitles?: boolean; columns?: string[]; sort?: SortOrder[]; + columnWidths?: ColumnWidths; } export interface SearchOutput extends EmbeddableOutput { diff --git a/src/plugins/discover/public/migrate_state.ts b/src/plugins/discover/public/migrate_state.ts index b0ec5af810a..1d87ec63ecc 100644 --- a/src/plugins/discover/public/migrate_state.ts +++ b/src/plugins/discover/public/migrate_state.ts @@ -6,6 +6,7 @@ import { matchPath } from 'react-router-dom'; import { getStateFromOsdUrl, setStateToOsdUrl } from '../../opensearch_dashboards_utils/public'; import { Filter, Query } from '../../data/public'; +import { ColumnWidths } from './application/components/data_grid/data_grid_table_columns'; interface CommonParams { appState?: string; @@ -54,6 +55,7 @@ export interface LegacyDiscoverState { * id of the used saved query */ savedQuery?: string; + columnWidths?: ColumnWidths; } // TODO: Write unit tests once all routes have been migrated. @@ -115,7 +117,7 @@ export function migrateUrlState(oldPath: string, newPath = '/'): string { if (!appState) return path; - const { columns, filters, index, interval, query, sort, savedQuery } = appState; + const { columns, filters, index, interval, query, sort, savedQuery, columnWidths } = appState; const _q = { query, @@ -128,6 +130,7 @@ export function migrateUrlState(oldPath: string, newPath = '/'): string { interval, sort, savedQuery, + columnWidths, }, metadata: { indexPattern: index, diff --git a/src/plugins/discover/public/saved_searches/_saved_search.ts b/src/plugins/discover/public/saved_searches/_saved_search.ts index 835055c6560..fd953ade860 100644 --- a/src/plugins/discover/public/saved_searches/_saved_search.ts +++ b/src/plugins/discover/public/saved_searches/_saved_search.ts @@ -48,6 +48,7 @@ export function createSavedSearchClass(services: SavedObjectOpenSearchDashboards columns: 'keyword', sort: 'keyword', version: 'integer', + columnWidths: 'object', }; // Order these fields to the top, the rest are alphabetical public static fieldOrder = ['title', 'description']; @@ -67,6 +68,7 @@ export function createSavedSearchClass(services: SavedObjectOpenSearchDashboards columns: 'keyword', sort: 'keyword', version: 'integer', + columnWidths: 'object', }, searchSource: true, defaults: { diff --git a/src/plugins/discover/public/saved_searches/types.ts b/src/plugins/discover/public/saved_searches/types.ts index 73cb25774c4..b195dfccd2b 100644 --- a/src/plugins/discover/public/saved_searches/types.ts +++ b/src/plugins/discover/public/saved_searches/types.ts @@ -30,6 +30,7 @@ import { SavedObject } from '../../../saved_objects/public'; import { ISearchSource } from '../../../data/public'; +import { ColumnWidths } from '../application/components/data_grid/data_grid_table_columns'; export type SortDirection = 'asc' | 'desc'; export type SortOrder = [string, SortDirection]; @@ -42,6 +43,7 @@ export interface SavedSearch description?: string; columns: string[]; sort: SortOrder[]; + columnWidths?: ColumnWidths; } export interface SavedSearchLoader { get: (id: string) => Promise; diff --git a/src/plugins/discover/server/saved_objects/search.ts b/src/plugins/discover/server/saved_objects/search.ts index 252d45cfb77..3f4fcf164ed 100644 --- a/src/plugins/discover/server/saved_objects/search.ts +++ b/src/plugins/discover/server/saved_objects/search.ts @@ -65,6 +65,7 @@ export const searchSavedObjectType: SavedObjectsType = { }, }, sort: { type: 'keyword', index: false, doc_values: false }, + columnWidths: { type: 'object', enabled: false }, title: { type: 'text' }, version: { type: 'integer' }, },