in src/plugins/saved_objects_management/public/management_section/objects_table/components/relationships.tsx [126:333]
renderRelationships() {
const { goInspectObject, savedObject, basePath } = this.props;
const { relationships, isLoading, error } = this.state;
if (error) {
return this.renderError();
}
if (isLoading) {
return <EuiLoadingSpinner size="xl" />;
}
const columns = [
{
field: 'type',
name: i18n.translate('savedObjectsManagement.objectsTable.relationships.columnTypeName', {
defaultMessage: 'Type',
}),
width: '50px',
align: 'center',
description: i18n.translate(
'savedObjectsManagement.objectsTable.relationships.columnTypeDescription',
{ defaultMessage: 'Type of the saved object' }
),
sortable: false,
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="relationshipsObjectType"
/>
</EuiToolTip>
);
},
},
{
field: 'relationship',
name: i18n.translate(
'savedObjectsManagement.objectsTable.relationships.columnRelationshipName',
{ defaultMessage: 'Direct relationship' }
),
dataType: 'string',
sortable: false,
width: '125px',
'data-test-subj': 'directRelationship',
render: (relationship: string) => {
if (relationship === 'parent') {
return (
<EuiText size="s">
<FormattedMessage
id="savedObjectsManagement.objectsTable.relationships.columnRelationship.parentAsValue"
defaultMessage="Parent"
/>
</EuiText>
);
}
if (relationship === 'child') {
return (
<EuiText size="s">
<FormattedMessage
id="savedObjectsManagement.objectsTable.relationships.columnRelationship.childAsValue"
defaultMessage="Child"
/>
</EuiText>
);
}
},
},
{
field: 'meta.title',
name: i18n.translate('savedObjectsManagement.objectsTable.relationships.columnTitleName', {
defaultMessage: 'Title',
}),
description: i18n.translate(
'savedObjectsManagement.objectsTable.relationships.columnTitleDescription',
{ defaultMessage: 'Title of the saved object' }
),
dataType: 'string',
sortable: false,
render: (title: string, object: SavedObjectWithMetadata) => {
const { path = '' } = object.meta.inAppUrl || {};
const canGoInApp = this.props.canGoInApp(object);
if (!canGoInApp) {
return (
<EuiText size="s" data-test-subj="relationshipsTitle">
{title || getDefaultTitle(object)}
</EuiText>
);
}
return (
<EuiLink href={basePath.prepend(path)} data-test-subj="relationshipsTitle">
{title || getDefaultTitle(object)}
</EuiLink>
);
},
},
{
name: i18n.translate(
'savedObjectsManagement.objectsTable.relationships.columnActionsName',
{ defaultMessage: 'Actions' }
),
actions: [
{
name: i18n.translate(
'savedObjectsManagement.objectsTable.relationships.columnActions.inspectActionName',
{ defaultMessage: 'Inspect' }
),
description: i18n.translate(
'savedObjectsManagement.objectsTable.relationships.columnActions.inspectActionDescription',
{ defaultMessage: 'Inspect this saved object' }
),
type: 'icon',
icon: 'inspect',
'data-test-subj': 'relationshipsTableAction-inspect',
onClick: (object: SavedObjectWithMetadata) => goInspectObject(object),
available: (object: SavedObjectWithMetadata) => !!object.meta.editUrl,
},
],
},
];
const filterTypesMap = new Map(
relationships.map((relationship) => [
relationship.type,
{
value: relationship.type,
name: relationship.type,
view: relationship.type,
},
])
);
const search = {
filters: [
{
type: 'field_value_selection',
field: 'relationship',
name: i18n.translate(
'savedObjectsManagement.objectsTable.relationships.search.filters.relationship.name',
{ defaultMessage: 'Direct relationship' }
),
multiSelect: 'or',
options: [
{
value: 'parent',
name: 'parent',
view: i18n.translate(
'savedObjectsManagement.objectsTable.relationships.search.filters.relationship.parentAsValue.view',
{ defaultMessage: 'Parent' }
),
},
{
value: 'child',
name: 'child',
view: i18n.translate(
'savedObjectsManagement.objectsTable.relationships.search.filters.relationship.childAsValue.view',
{ defaultMessage: 'Child' }
),
},
],
},
{
type: 'field_value_selection',
field: 'type',
name: i18n.translate(
'savedObjectsManagement.objectsTable.relationships.search.filters.type.name',
{ defaultMessage: 'Type' }
),
multiSelect: 'or',
options: [...filterTypesMap.values()],
},
] as SearchFilterConfig[],
};
return (
<div>
<EuiCallOut>
<p>
{i18n.translate(
'savedObjectsManagement.objectsTable.relationships.relationshipsTitle',
{
defaultMessage:
'Here are the saved objects related to {title}. ' +
'Deleting this {type} affects its parent objects, but not its children.',
values: {
type: savedObject.type,
title: savedObject.meta.title || getDefaultTitle(savedObject),
},
}
)}
</p>
</EuiCallOut>
<EuiSpacer />
<EuiInMemoryTable
items={relationships}
columns={columns as any}
pagination={true}
search={search}
rowProps={() => ({
'data-test-subj': `relationshipsTableRow`,
})}
/>
</div>
);
}