import React from 'react'; import SyntaxHighlighter from 'react-syntax-highlighter'; import { github } from 'react-syntax-highlighter/dist/styles'; import ModalTrigger from '../../components/ModalTrigger'; const defaultProps = { maxWidth: 50, maxLines: 5, shrink: false, }; const propTypes = { sql: React.PropTypes.string.isRequired, rawSql: React.PropTypes.string, maxWidth: React.PropTypes.number, maxLines: React.PropTypes.number, shrink: React.PropTypes.bool, }; class HighlightedSql extends React.Component { constructor(props) { super(props); this.state = { modalBody: null, }; } shrinkSql() { const props = this.props; const sql = props.sql || ''; let lines = sql.split('\n'); if (lines.length >= props.maxLines) { lines = lines.slice(0, props.maxLines); lines.push('{...}'); } return lines.map((line) => { if (line.length > props.maxWidth) { return line.slice(0, props.maxWidth) + '{...}'; } return line; }) .join('\n'); } triggerNode() { const props = this.props; let shownSql = props.shrink ? this.shrinkSql(props.sql) : props.sql; return ( {shownSql} ); } generateModal() { const props = this.props; let rawSql; if (props.rawSql && props.rawSql !== this.props.sql) { rawSql = (

Raw SQL

{props.rawSql}
); } this.setState({ modalBody: (

Source SQL

{this.props.sql} {rawSql}
), }); } render() { return ( ); } } HighlightedSql.propTypes = propTypes; HighlightedSql.defaultProps = defaultProps; export default HighlightedSql;