{"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';\n\nimport { stylesFactory, withTheme2 } from '../../themes';\nimport { Themeable2 } from '../../types/theme';\nimport { t, Trans } from '../../utils/i18n';\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\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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"}