PivotChartSelector.tsx 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import React from 'react'
  2. import widgetlibs from '../../config'
  3. const pivotlibs = widgetlibs['pivot']
  4. import { Dropdown, Menu } from 'antd'
  5. const MenuItem = Menu.Item
  6. import { checkChartEnable, getPivot } from '../util'
  7. import { IChartInfo } from '../Widget'
  8. const styles = require('./Workbench.less')
  9. interface IPivotChartSelectorProps {
  10. chart: IChartInfo
  11. dimetionsCount: number
  12. metricsCount: number
  13. onChangeChart: (chart: IChartInfo) => void
  14. }
  15. export function PivotChartSelector (props: IPivotChartSelectorProps) {
  16. const pivot = getPivot()
  17. const enabledChartList = pivotlibs
  18. .filter((w) => w !== pivot && checkChartEnable(props.dimetionsCount, props.metricsCount, w))
  19. .map((c) => (
  20. <MenuItem key={c.id} className={styles.item}>
  21. <i className={`iconfont ${c.icon} ${styles.icon}`} />
  22. </MenuItem>
  23. ))
  24. const selector = props.chart.id === pivot.id
  25. ? null
  26. : (
  27. <Dropdown
  28. overlay={(
  29. <Menu className={styles.chartSelectorList} onClick={chartClick(props)}>
  30. {enabledChartList}
  31. </Menu>
  32. )}
  33. trigger={['click']}
  34. >
  35. <i className={`iconfont ${props.chart.icon} ${styles.chart}`} />
  36. </Dropdown>
  37. )
  38. return selector
  39. }
  40. export default PivotChartSelector
  41. function chartClick (props: IPivotChartSelectorProps) {
  42. return function ({key}) {
  43. const selectedChart = pivotlibs.find((wl) => `${wl.id}` === key)
  44. const originalChart = props.chart
  45. if (selectedChart.id !== originalChart.id) {
  46. props.onChangeChart(selectedChart)
  47. }
  48. }
  49. }