import React, { Component } from "react"; import PropTypes from "prop-types"; import { observable, action } from "mobx"; import { observer } from "mobx-react"; import Linkify from "react-linkify"; import Flash from "react-reveal/Flash"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { faExternalLinkAlt } from "@fortawesome/free-solid-svg-icons/faExternalLinkAlt"; import { faSearchPlus } from "@fortawesome/free-solid-svg-icons/faSearchPlus"; import { faSearchMinus } from "@fortawesome/free-solid-svg-icons/faSearchMinus"; import { AlertStore } from "Stores/AlertStore"; import { TooltipWrapper } from "Components/TooltipWrapper"; const RenderNonLinkAnnotation = observer( class RenderNonLinkAnnotation extends Component { static propTypes = { alertStore: PropTypes.instanceOf(AlertStore).isRequired, name: PropTypes.string.isRequired, value: PropTypes.string.isRequired, visible: PropTypes.bool.isRequired, afterUpdate: PropTypes.func.isRequired, }; // keep state of this annotation visibility, this is controlled by user toggle = observable( { visible: true, show(e) { // Linkify only handles value, no need to check for links of // collapsed annotation this.visible = true; }, hide(e) { this.visible = false; }, }, { show: action.bound, hide: action.bound, } ); constructor(props) { super(props); this.toggle.visible = props.visible; } componentDidUpdate() { const { afterUpdate } = this.props; afterUpdate(); } render() { const { name, value } = this.props; const className = "mb-1 p-1 bg-light d-inline-block rounded components-grid-annotation text-break mw-100"; if (!this.toggle.visible) { return (
{name}
); } return (
{name}: {value}
); } } ); const RenderLinkAnnotation = ({ name, value }) => { return ( {name} ); }; RenderLinkAnnotation.propTypes = { name: PropTypes.string.isRequired, value: PropTypes.string.isRequired, }; export { RenderNonLinkAnnotation, RenderLinkAnnotation };