"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Relationships = void 0; var _react = _interopRequireWildcard(require("react")); var _eui = require("@elastic/eui"); var _i18n = require("@kbn/i18n"); var _i18nReact = require("@kbn/i18n-react"); var _lib = require("../../../lib"); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } /* * 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 and the Server Side Public License, v 1; you may not use this file except * in compliance with, at your election, the Elastic License 2.0 or the Server * Side Public License, v 1. */ const relationshipColumn = { field: 'relationship', name: _i18n.i18n.translate('savedObjectsManagement.objectsTable.relationships.columnRelationshipName', { defaultMessage: 'Direct relationship' }), dataType: 'string', sortable: false, width: '125px', 'data-test-subj': 'directRelationship', render: relationship => { return /*#__PURE__*/_react.default.createElement(_eui.EuiText, { size: "s" }, relationship === 'parent' ? /*#__PURE__*/_react.default.createElement(_i18nReact.FormattedMessage, { id: "savedObjectsManagement.objectsTable.relationships.columnRelationship.parentAsValue", defaultMessage: "Parent" }) : /*#__PURE__*/_react.default.createElement(_i18nReact.FormattedMessage, { id: "savedObjectsManagement.objectsTable.relationships.columnRelationship.childAsValue", defaultMessage: "Child" })); } }; class Relationships extends _react.Component { constructor(props) { super(props); this.state = { relations: [], invalidRelations: [], isLoading: false, error: undefined }; } UNSAFE_componentWillMount() { this.getRelationshipData(); } UNSAFE_componentWillReceiveProps(nextProps) { if (nextProps.savedObject.id !== this.props.savedObject.id) { this.getRelationshipData(); } } async getRelationshipData() { const { savedObject, getRelationships } = this.props; this.setState({ isLoading: true }); try { const { relations, invalidRelations } = await getRelationships(savedObject.type, savedObject.id); this.setState({ relations, invalidRelations, isLoading: false, error: undefined }); } catch (err) { this.setState({ error: err.message, isLoading: false }); } } renderError() { const { error } = this.state; if (!error) { return null; } return /*#__PURE__*/_react.default.createElement(_eui.EuiCallOut, { title: /*#__PURE__*/_react.default.createElement(_i18nReact.FormattedMessage, { id: "savedObjectsManagement.objectsTable.relationships.renderErrorMessage", defaultMessage: "Error" }), color: "danger" }, error); } renderInvalidRelationship() { const { invalidRelations } = this.state; if (!invalidRelations.length) { return null; } const columns = [{ field: 'type', name: _i18n.i18n.translate('savedObjectsManagement.objectsTable.relationships.columnTypeName', { defaultMessage: 'Type' }), width: '150px', description: _i18n.i18n.translate('savedObjectsManagement.objectsTable.relationships.columnTypeDescription', { defaultMessage: 'Type of the saved object' }), sortable: false, 'data-test-subj': 'relationshipsObjectType' }, { field: 'id', name: _i18n.i18n.translate('savedObjectsManagement.objectsTable.relationships.columnIdName', { defaultMessage: 'Id' }), width: '150px', description: _i18n.i18n.translate('savedObjectsManagement.objectsTable.relationships.columnIdDescription', { defaultMessage: 'Id of the saved object' }), sortable: false, 'data-test-subj': 'relationshipsObjectId' }, relationshipColumn, { field: 'error', name: _i18n.i18n.translate('savedObjectsManagement.objectsTable.relationships.columnErrorName', { defaultMessage: 'Error' }), description: _i18n.i18n.translate('savedObjectsManagement.objectsTable.relationships.columnErrorDescription', { defaultMessage: 'Error encountered with the relation' }), sortable: false, 'data-test-subj': 'relationshipsError' }]; return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_eui.EuiCallOut, { color: "warning", iconType: "warning", title: _i18n.i18n.translate('savedObjectsManagement.objectsTable.relationships.invalidRelationShip', { defaultMessage: 'This saved object has some invalid relations.' }) }), /*#__PURE__*/_react.default.createElement(_eui.EuiSpacer, null), /*#__PURE__*/_react.default.createElement(_eui.EuiInMemoryTable, { items: invalidRelations, columns: columns, pagination: true, rowProps: () => ({ 'data-test-subj': `invalidRelationshipsTableRow` }) }), /*#__PURE__*/_react.default.createElement(_eui.EuiSpacer, null)); } renderRelationshipsTable() { const { goInspectObject, basePath, savedObject, allowedTypes, showPlainSpinner } = this.props; const { relations, isLoading, error } = this.state; if (error) { return this.renderError(); } if (isLoading) { return showPlainSpinner ? /*#__PURE__*/_react.default.createElement(_eui.EuiLoadingSpinner, { size: "xl" }) : /*#__PURE__*/_react.default.createElement(_eui.EuiLoadingElastic, { size: "xl" }); } const columns = [{ field: 'type', name: _i18n.i18n.translate('savedObjectsManagement.objectsTable.relationships.columnTypeName', { defaultMessage: 'Type' }), width: '50px', align: 'center', description: _i18n.i18n.translate('savedObjectsManagement.objectsTable.relationships.columnTypeDescription', { defaultMessage: 'Type of the saved object' }), sortable: false, render: (type, object) => { const typeLabel = (0, _lib.getSavedObjectLabel)(type, allowedTypes); return /*#__PURE__*/_react.default.createElement(_eui.EuiToolTip, { position: "top", content: typeLabel }, /*#__PURE__*/_react.default.createElement(_eui.EuiIcon, { "aria-label": typeLabel, type: object.meta.icon || 'apps', size: "s", "data-test-subj": "relationshipsObjectType" })); } }, relationshipColumn, { field: 'meta.title', name: _i18n.i18n.translate('savedObjectsManagement.objectsTable.relationships.columnTitleName', { defaultMessage: 'Title' }), description: _i18n.i18n.translate('savedObjectsManagement.objectsTable.relationships.columnTitleDescription', { defaultMessage: 'Title of the saved object' }), dataType: 'string', sortable: false, render: (title, object) => { const { path = '' } = object.meta.inAppUrl || {}; const canGoInApp = this.props.canGoInApp(object); if (!canGoInApp) { return /*#__PURE__*/_react.default.createElement(_eui.EuiText, { size: "s", "data-test-subj": "relationshipsTitle" }, title || (0, _lib.getDefaultTitle)(object)); } return /*#__PURE__*/_react.default.createElement(_eui.EuiLink, { href: basePath.prepend(path), "data-test-subj": "relationshipsTitle" }, title || (0, _lib.getDefaultTitle)(object)); } }, { name: _i18n.i18n.translate('savedObjectsManagement.objectsTable.relationships.columnActionsName', { defaultMessage: 'Actions' }), actions: [{ name: _i18n.i18n.translate('savedObjectsManagement.objectsTable.relationships.columnActions.inspectActionName', { defaultMessage: 'Inspect' }), description: _i18n.i18n.translate('savedObjectsManagement.objectsTable.relationships.columnActions.inspectActionDescription', { defaultMessage: 'Inspect this saved object' }), type: 'icon', icon: 'inspect', 'data-test-subj': 'relationshipsTableAction-inspect', onClick: object => goInspectObject(object), available: object => !!(object.type && object.id) }] }]; const filterTypesMap = new Map(relations.map(relationship => [relationship.type, { value: relationship.type, name: relationship.type, view: relationship.type }])); const search = { filters: [{ type: 'field_value_selection', field: 'relationship', name: _i18n.i18n.translate('savedObjectsManagement.objectsTable.relationships.search.filters.relationship.name', { defaultMessage: 'Direct relationship' }), multiSelect: 'or', options: [{ value: 'parent', name: 'parent', view: _i18n.i18n.translate('savedObjectsManagement.objectsTable.relationships.search.filters.relationship.parentAsValue.view', { defaultMessage: 'Parent' }) }, { value: 'child', name: 'child', view: _i18n.i18n.translate('savedObjectsManagement.objectsTable.relationships.search.filters.relationship.childAsValue.view', { defaultMessage: 'Child' }) }] }, { type: 'field_value_selection', field: 'type', name: _i18n.i18n.translate('savedObjectsManagement.objectsTable.relationships.search.filters.type.name', { defaultMessage: 'Type' }), multiSelect: 'or', options: [...filterTypesMap.values()] }] }; return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_eui.EuiCallOut, null, /*#__PURE__*/_react.default.createElement("p", null, _i18n.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 || (0, _lib.getDefaultTitle)(savedObject) } }))), /*#__PURE__*/_react.default.createElement(_eui.EuiSpacer, null), /*#__PURE__*/_react.default.createElement(_eui.EuiInMemoryTable, { items: relations, columns: columns, pagination: true, search: search, rowProps: () => ({ 'data-test-subj': `relationshipsTableRow` }) })); } render() { const { close, savedObject, allowedTypes } = this.props; const typeLabel = (0, _lib.getSavedObjectLabel)(savedObject.type, allowedTypes); return /*#__PURE__*/_react.default.createElement(_eui.EuiFlyout, { onClose: close }, /*#__PURE__*/_react.default.createElement(_eui.EuiFlyoutHeader, { hasBorder: true }, /*#__PURE__*/_react.default.createElement(_eui.EuiTitle, { size: "m" }, /*#__PURE__*/_react.default.createElement("h2", null, /*#__PURE__*/_react.default.createElement(_eui.EuiToolTip, { position: "top", content: typeLabel }, /*#__PURE__*/_react.default.createElement(_eui.EuiIcon, { "aria-label": typeLabel, size: "m", type: savedObject.meta.icon || 'apps' })), "\xA0\xA0", savedObject.meta.title || (0, _lib.getDefaultTitle)(savedObject)))), /*#__PURE__*/_react.default.createElement(_eui.EuiFlyoutBody, null, this.renderInvalidRelationship(), this.renderRelationshipsTable())); } } exports.Relationships = Relationships;