UNPKG

@grafana/ui

Version:
1 lines 6.84 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 ${theme.colors.success.border}`,\n background: theme.colors.success.main,\n color: theme.colors.success.contrastText,\n padding: `1px ${theme.spacing(0.5)}`,\n fontSize: '80%',\n }),\n };\n});\n"],"names":[],"mappings":"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"}