UNPKG

@grafana/ui

Version:
1 lines 6.62 kB
{"version":3,"file":"TableInputCSV.mjs","sources":["../../../../src/components/TableInputCSV/TableInputCSV.tsx"],"sourcesContent":["import { css } from '@emotion/css';\nimport { debounce } from 'lodash';\nimport { PureComponent } from 'react';\nimport * as React from 'react';\n\nimport { DataFrame, CSVConfig, readCSV, GrafanaTheme2 } from '@grafana/data';\nimport { t, Trans } from '@grafana/i18n';\n\nimport { withTheme2 } from '../../themes/ThemeContext';\nimport { stylesFactory } from '../../themes/stylesFactory';\nimport { Themeable2 } from '../../types/theme';\nimport { Icon } from '../Icon/Icon';\nimport { TextArea } from '../TextArea/TextArea';\n\ninterface Props extends Themeable2 {\n config?: CSVConfig;\n text: string;\n width: string | number;\n height: string | number;\n onSeriesParsed: (data: DataFrame[], text: string) => void;\n}\n\ninterface State {\n text: string;\n data: DataFrame[];\n}\n\n/**\n * Expects the container div to have size set and will fill it 100%\n */\nexport class UnThemedTableInputCSV extends PureComponent<Props, State> {\n constructor(props: Props) {\n super(props);\n\n const { text, config } = props;\n this.state = {\n text,\n data: readCSV(text, { config }),\n };\n }\n\n readCSV = debounce(() => {\n const { config } = this.props;\n const { text } = this.state;\n\n this.setState({ data: readCSV(text, { config }) });\n }, 150);\n\n componentDidUpdate(prevProps: Props, prevState: State) {\n const { text } = this.state;\n\n if (text !== prevState.text || this.props.config !== prevProps.config) {\n this.readCSV();\n }\n\n // If the props text has changed, replace our local version\n if (this.props.text !== prevProps.text && this.props.text !== text) {\n this.setState({ text: this.props.text });\n }\n\n if (this.state.data !== prevState.data) {\n this.props.onSeriesParsed(this.state.data, this.state.text);\n }\n }\n\n onTextChange = (event: React.ChangeEvent<HTMLTextAreaElement>) => {\n this.setState({ text: event.target.value });\n };\n\n render() {\n const { width, height, theme } = this.props;\n const { data } = this.state;\n const styles = getStyles(theme);\n return (\n <div className={styles.tableInputCsv}>\n <TextArea\n style={{ width, height }}\n placeholder={t('grafana-ui.table.csv-placeholder', 'Enter CSV here...')}\n value={this.state.text}\n onChange={this.onTextChange}\n className={styles.textarea}\n />\n {data && (\n <footer className={styles.footer}>\n {data.map((frame, index) => {\n const rows = frame.length;\n const columns = frame.fields.length;\n return (\n <span key={index}>\n <Trans i18nKey=\"grafana-ui.table.csv-counts\">\n Rows:{{ rows }}, Columns:{{ columns }} &nbsp;\n <Icon name=\"check-circle\" />\n </Trans>\n </span>\n );\n })}\n </footer>\n )}\n </div>\n );\n }\n}\n\n/** @deprecated */\nexport const TableInputCSV = withTheme2(UnThemedTableInputCSV);\nTableInputCSV.displayName = 'TableInputCSV';\n\nconst getStyles = stylesFactory((theme: GrafanaTheme2) => {\n return {\n tableInputCsv: css({\n position: 'relative',\n }),\n textarea: css({\n height: '100%',\n width: '100%',\n }),\n footer: css({\n position: 'absolute',\n bottom: '15px',\n right: '15px',\n border: '1px solid #222',\n background: theme.colors.success.main,\n padding: `1px ${theme.spacing(0.5)}`,\n fontSize: '80%',\n }),\n };\n});\n"],"names":[],"mappings":"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"}