123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- import React from 'react'
- import classnames from 'classnames'
- import { IDrawingData } from './Pivot'
- import { IWidgetMetric, DimetionType, IChartStyles } from '../Widget'
- import { spanSize, getPivotCellWidth, getAggregatorLocale, getPivot, getStyleConfig } from '../util'
- import { DEFAULT_SPLITER } from 'app/globalConstants'
- const styles = require('./Pivot.less')
- interface IColumnHeaderProps {
- cols: string[]
- colKeys: string[][]
- colTree: object
- metrics: IWidgetMetric[]
- chartStyles: IChartStyles
- drawingData: IDrawingData
- dimetionAxis: DimetionType
- }
- export class ColumnHeader extends React.Component<IColumnHeaderProps, {}> {
- public render () {
- const { cols, colKeys, colTree, metrics, chartStyles, drawingData, dimetionAxis } = this.props
- const { elementSize, unitMetricWidth } = drawingData
- const {
- color: fontColor,
- fontSize,
- fontFamily,
- lineColor,
- lineStyle,
- headerBackgroundColor
- } = getStyleConfig(chartStyles).pivot
- let tableWidth = 0
- let headers
- if (cols.length) {
- if (dimetionAxis === 'col' && cols.length === 1) {
- tableWidth = colKeys.length * elementSize
- }
- headers = cols.map((c, i) => {
- const header = []
- let elementCount = 0
- let cellWidth = 0
- let x = -1
- colKeys.forEach((ck, j) => {
- const flatColKey = ck.join(String.fromCharCode(0))
- const { width } = colTree[flatColKey]
- if (dimetionAxis === 'col') {
- if (i === cols.length - 1) {
- return
- }
- if (i === cols.length - 2) {
- const nextCk = colKeys[j + 1] || []
- elementCount += 1
- if (ck[i] === nextCk[i]) {
- return
- } else {
- cellWidth = elementCount * elementSize
- x = elementCount
- tableWidth += cellWidth
- elementCount = 0
- }
- } else {
- x = spanSize(colKeys, j, i)
- }
- } else {
- if (i === cols.length - 1) {
- cellWidth = dimetionAxis === 'row' ? unitMetricWidth * metrics.length : getPivotCellWidth(width)
- tableWidth += cellWidth
- }
- x = spanSize(colKeys, j, i)
- }
- const columnClass = classnames({
- [styles.leftBorder]: true,
- [styles.rightBorder]: true
- })
- if (x !== -1) {
- let colContent
- if (ck[i].includes(DEFAULT_SPLITER)) {
- const [name, id, agg] = ck[i].split(DEFAULT_SPLITER)
- colContent = `[${getAggregatorLocale(agg)}]${name}`
- } else {
- colContent = ck[i]
- }
- header.push(
- <th
- key={flatColKey}
- colSpan={x}
- className={columnClass}
- style={{
- ...(!!cellWidth && {width: cellWidth}),
- ...!dimetionAxis && {backgroundColor: headerBackgroundColor},
- color: fontColor,
- fontSize: Number(fontSize),
- fontFamily,
- borderColor: lineColor,
- borderStyle: lineStyle
- }}
- >
- <p
- className={styles.colContent}
- {...(!!cellWidth && {style: {width: cellWidth - 2}})}
- >
- {colContent}
- </p>
- </th>
- )
- }
- })
- return (
- <tr key={c}>
- {header}
- </tr>
- )
- })
- }
- const containerClass = classnames({
- [styles.columnHeader]: true,
- [styles.raw]: !dimetionAxis
- })
- return (
- <div className={containerClass}>
- <table className={styles.pivot} style={{width: tableWidth}}>
- <thead>
- {headers}
- </thead>
- </table>
- </div>
- )
- }
- }
- export default ColumnHeader
|