@grafana/ui
Version:
Grafana Components Library
1 lines • 5.38 kB
Source Map (JSON)
{"version":3,"file":"ExpandedRow.mjs","sources":["../../../../../src/components/Table/TableRT/ExpandedRow.tsx"],"sourcesContent":["import { css } from '@emotion/css';\nimport { CSSProperties } from 'react';\nimport * as React from 'react';\n\nimport { DataFrame, Field, GrafanaTheme2 } from '@grafana/data';\nimport { TableCellHeight } from '@grafana/schema';\n\nimport { useStyles2, useTheme2 } from '../../../themes/ThemeContext';\nimport { EXPANDER_WIDTH } from '../utils';\n\nimport { Table } from './Table';\nimport { TableStyles } from './styles';\n\nexport interface Props {\n nestedData: Field;\n tableStyles: TableStyles;\n rowIndex: number;\n width: number;\n cellHeight: TableCellHeight;\n}\n\nexport function ExpandedRow({ tableStyles, nestedData, rowIndex, width, cellHeight }: Props) {\n const frames: DataFrame[][] = nestedData.values;\n const subTables: React.ReactNode[] = [];\n const theme = useTheme2();\n const styles = useStyles2(getStyles);\n\n let top = tableStyles.rowHeight + theme.spacing.gridSize; // initial height for row that expands above sub tables + 1 grid unit spacing\n\n frames[rowIndex].forEach((nf: DataFrame, nfIndex: number) => {\n const noHeader = !!nf.meta?.custom?.noHeader;\n const height = tableStyles.rowHeight * (nf.length + (noHeader ? 0 : 1)); // account for the header with + 1\n\n const subTable: CSSProperties = {\n height: height,\n paddingLeft: EXPANDER_WIDTH,\n position: 'absolute',\n top,\n backgroundColor: theme.colors.background.primary,\n color: theme.colors.text.primary,\n };\n\n top += height + theme.spacing.gridSize;\n\n subTables.push(\n <div style={subTable} key={`subTable_${rowIndex}_${nfIndex}`}>\n <Table\n data={nf}\n width={width - EXPANDER_WIDTH}\n height={tableStyles.rowHeight * (nf.length + 1)}\n noHeader={noHeader}\n cellHeight={cellHeight}\n />\n </div>\n );\n });\n\n return <div className={styles.subTables}>{subTables}</div>;\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n subTables: css({\n '&:before': {\n content: '\"\"',\n position: 'absolute',\n width: '1px',\n top: theme.spacing(5),\n left: theme.spacing(1),\n bottom: theme.spacing(2),\n background: theme.colors.border.medium,\n },\n }),\n };\n};\n\nexport function getExpandedRowHeight(nestedData: Field, rowIndex: number, tableStyles: TableStyles) {\n const frames: DataFrame[][] = nestedData.values;\n\n const height = frames[rowIndex].reduce((acc: number, frame: DataFrame) => {\n if (frame.length) {\n const noHeader = !!frame.meta?.custom?.noHeader;\n return acc + tableStyles.rowHeight * (frame.length + (noHeader ? 0 : 1)) + 8; // account for the header with + 1\n }\n return acc;\n }, tableStyles.rowHeight); // initial height for row that expands above sub tables\n\n return height ?? tableStyles.rowHeight;\n}\n"],"names":[],"mappings":"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"}