in src/plugins/saved_objects_management/public/management_section/objects_table/components/table.tsx [158:440]
render() {
const {
pageIndex,
pageSize,
itemId,
items,
totalItemCount,
isSearching,
filterOptions,
selectionConfig: selection,
onDelete,
onActionRefresh,
selectedSavedObjects,
onTableChange,
goInspectObject,
onShowRelationships,
basePath,
actionRegistry,
columnRegistry,
} = this.props;
const pagination = {
pageIndex,
pageSize,
totalItemCount,
pageSizeOptions: [5, 10, 20, 50],
};
const filters = [
{
type: 'field_value_selection',
field: 'type',
name: i18n.translate('savedObjectsManagement.objectsTable.table.typeFilterName', {
defaultMessage: 'Type',
}),
multiSelect: 'or',
options: filterOptions,
},
// Add this back in once we have tag support
// {
// type: 'field_value_selection',
// field: 'tag',
// name: 'Tags',
// multiSelect: 'or',
// options: [],
// },
];
const columns = [
{
field: 'type',
name: i18n.translate('savedObjectsManagement.objectsTable.table.columnTypeName', {
defaultMessage: 'Type',
}),
width: '50px',
align: 'center',
description: i18n.translate(
'savedObjectsManagement.objectsTable.table.columnTypeDescription',
{ defaultMessage: 'Type of the saved object' }
),
sortable: false,
'data-test-subj': 'savedObjectsTableRowType',
render: (type: string, object: SavedObjectWithMetadata) => {
return (
<EuiToolTip position="top" content={getSavedObjectLabel(type)}>
<EuiIcon
aria-label={getSavedObjectLabel(type)}
type={object.meta.icon || 'apps'}
size="s"
data-test-subj="objectType"
/>
</EuiToolTip>
);
},
} as EuiTableFieldDataColumnType<SavedObjectWithMetadata<any>>,
{
field: 'meta.title',
name: i18n.translate('savedObjectsManagement.objectsTable.table.columnTitleName', {
defaultMessage: 'Title',
}),
description: i18n.translate(
'savedObjectsManagement.objectsTable.table.columnTitleDescription',
{ defaultMessage: 'Title of the saved object' }
),
dataType: 'string',
sortable: false,
'data-test-subj': 'savedObjectsTableRowTitle',
render: (title: string, object: SavedObjectWithMetadata) => {
const { path = '' } = object.meta.inAppUrl || {};
const canGoInApp = this.props.canGoInApp(object);
if (!canGoInApp) {
return <EuiText size="s">{title || getDefaultTitle(object)}</EuiText>;
}
return (
<EuiLink href={basePath.prepend(path)}>{title || getDefaultTitle(object)}</EuiLink>
);
},
} as EuiTableFieldDataColumnType<SavedObjectWithMetadata<any>>,
...columnRegistry.getAll().map((column) => {
return {
...column.euiColumn,
sortable: false,
'data-test-subj': `savedObjectsTableColumn-${column.id}`,
};
}),
{
name: i18n.translate('savedObjectsManagement.objectsTable.table.columnActionsName', {
defaultMessage: 'Actions',
}),
width: '80px',
actions: [
{
name: i18n.translate(
'savedObjectsManagement.objectsTable.table.columnActions.inspectActionName',
{ defaultMessage: 'Inspect' }
),
description: i18n.translate(
'savedObjectsManagement.objectsTable.table.columnActions.inspectActionDescription',
{ defaultMessage: 'Inspect this saved object' }
),
type: 'icon',
icon: 'inspect',
onClick: (object) => goInspectObject(object),
available: (object) => !!object.meta.editUrl,
'data-test-subj': 'savedObjectsTableAction-inspect',
},
{
name: i18n.translate(
'savedObjectsManagement.objectsTable.table.columnActions.viewRelationshipsActionName',
{ defaultMessage: 'Relationships' }
),
description: i18n.translate(
'savedObjectsManagement.objectsTable.table.columnActions.viewRelationshipsActionDescription',
{
defaultMessage:
'View the relationships this saved object has to other saved objects',
}
),
type: 'icon',
icon: 'kqlSelector',
onClick: (object) => onShowRelationships(object),
'data-test-subj': 'savedObjectsTableAction-relationships',
},
...actionRegistry.getAll().map((action) => {
return {
...action.euiAction,
'data-test-subj': `savedObjectsTableAction-${action.id}`,
onClick: (object: SavedObjectWithMetadata) => {
this.setState({
activeAction: action,
});
action.registerOnFinishCallback(() => {
this.setState({
activeAction: undefined,
});
const { refreshOnFinish = () => false } = action;
if (refreshOnFinish()) {
onActionRefresh(object);
}
});
if (action.euiAction.onClick) {
action.euiAction.onClick(object as any);
}
},
};
}),
],
} as EuiTableActionsColumnType<SavedObjectWithMetadata>,
];
let queryParseError;
if (!this.state.isSearchTextValid) {
const parseErrorMsg = i18n.translate(
'savedObjectsManagement.objectsTable.searchBar.unableToParseQueryErrorMessage',
{ defaultMessage: 'Unable to parse query' }
);
queryParseError = (
<EuiFormErrorText>{`${parseErrorMsg}. ${this.state.parseErrorMessage}`}</EuiFormErrorText>
);
}
const button = (
<EuiButton
iconType="arrowDown"
iconSide="right"
onClick={this.toggleExportPopoverVisibility}
isDisabled={selectedSavedObjects.length === 0}
>
<FormattedMessage
id="savedObjectsManagement.objectsTable.table.exportPopoverButtonLabel"
defaultMessage="Export"
/>
</EuiButton>
);
const activeActionContents = this.state.activeAction?.render() ?? null;
return (
<Fragment>
{activeActionContents}
<EuiSearchBar
box={{ 'data-test-subj': 'savedObjectSearchBar' }}
filters={filters as any}
onChange={this.onChange}
toolsRight={[
<EuiButton
key="deleteSO"
iconType="trash"
color="danger"
onClick={onDelete}
isDisabled={selectedSavedObjects.length === 0 || !this.props.canDelete}
title={
this.props.canDelete
? undefined
: i18n.translate('savedObjectsManagement.objectsTable.table.deleteButtonTitle', {
defaultMessage: 'Unable to delete saved objects',
})
}
data-test-subj="savedObjectsManagementDelete"
>
<FormattedMessage
id="savedObjectsManagement.objectsTable.table.deleteButtonLabel"
defaultMessage="Delete"
/>
</EuiButton>,
<EuiPopover
key="exportSOOptions"
button={button}
isOpen={this.state.isExportPopoverOpen}
closePopover={this.closeExportPopover}
>
<EuiFormRow
label={
<FormattedMessage
id="savedObjectsManagement.objectsTable.exportObjectsConfirmModal.exportOptionsLabel"
defaultMessage="Options"
/>
}
>
<EuiSwitch
name="includeReferencesDeep"
label={
<FormattedMessage
id="savedObjectsManagement.objectsTable.exportObjectsConfirmModal.includeReferencesDeepLabel"
defaultMessage="Include related objects"
/>
}
checked={this.state.isIncludeReferencesDeepChecked}
onChange={this.toggleIsIncludeReferencesDeepChecked}
/>
</EuiFormRow>
<EuiFormRow>
<EuiButton key="exportSO" iconType="exportAction" onClick={this.onExportClick} fill>
<FormattedMessage
id="savedObjectsManagement.objectsTable.table.exportButtonLabel"
defaultMessage="Export"
/>
</EuiButton>
</EuiFormRow>
</EuiPopover>,
]}
/>
{queryParseError}
<EuiSpacer size="s" />
<div data-test-subj="savedObjectsTable">
<EuiBasicTable
loading={isSearching}
itemId={itemId}
items={items}
columns={columns as any}
pagination={pagination}
selection={selection}
onChange={onTableChange}
rowProps={(item) => ({
'data-test-subj': `savedObjectsTableRow row-${item.id}`,
})}
/>
</div>
</Fragment>
);
}