index.tsx 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. import React from 'react'
  2. import Aggregator from './Aggregator'
  3. import Field from './Field'
  4. import Sort from './Sort'
  5. import Format from './Format'
  6. import Color from './Color'
  7. import Filters from './Filters'
  8. import { ViewModelTypes, ViewModelVisualTypes } from 'containers/View/constants'
  9. import ChartTypes from 'containers/Widget/config/chart/ChartTypes'
  10. import { SettingTypes, ItemTypes, ItemValueTypes } from './types'
  11. import { Menu } from 'antd'
  12. const { Item: MenuItem, SubMenu, Divider: MenuDivider } = Menu
  13. const SettingsList = [...Aggregator, Format, Field, ...Sort, Filters, Color]
  14. export function getSettingKeyByDropItem (itemKey: string): 'aggregator' | 'field' | 'sort' | 'format' | 'color' | 'filters' | 'tip' {
  15. let settingKey
  16. SettingsList.some((s) => {
  17. const exists = s.items.some((item) => !!item[itemKey])
  18. if (exists) { settingKey = s.key }
  19. return exists
  20. })
  21. return settingKey
  22. }
  23. export function getAvailableSettings (settingType: SettingTypes, itemType: ItemTypes, itemValueType: ItemValueTypes) {
  24. const availableSettings = SettingsList.filter((settingItem) => {
  25. const { constrants } = settingItem
  26. const byType = constrants.some((constrant) => (
  27. (!constrant.settingType || (constrant.settingType & settingType))
  28. && (!constrant.itemType || (constrant.itemType & itemType))
  29. && (!constrant.itemValueType || (constrant.itemValueType & itemValueType))
  30. ))
  31. return byType
  32. })
  33. const result = availableSettings.reduce((acc, setting) => {
  34. if (!setting.sub) {
  35. return acc.concat(setting.items)
  36. }
  37. return acc.concat({
  38. [setting.key]: {
  39. name: setting.name,
  40. subs: setting.items
  41. }
  42. })
  43. }, [])
  44. return result
  45. }
  46. export function getSettingsDropdownList (settings) {
  47. return settings.reduce((menuItems, group, index) => {
  48. menuItems = menuItems.concat(Object.entries(group).map(([k, v]: [string, any]) => {
  49. if (v.subs) {
  50. const subItems = getSettingsDropdownList(v.subs)
  51. return (<SubMenu key={k} title={v.name}>{subItems}</SubMenu>)
  52. } else {
  53. return (<MenuItem key={k}>{v}</MenuItem>)
  54. }
  55. }))
  56. if (index !== settings.length - 1) {
  57. menuItems = menuItems.concat(<MenuDivider key={index} />)
  58. }
  59. return menuItems
  60. }, [])
  61. }
  62. export const MapSettingTypes = {
  63. cols: SettingTypes.Dimension,
  64. rows: SettingTypes.Dimension,
  65. metrics: SettingTypes.Indicator,
  66. secondaryMetrics: SettingTypes.Indicator,
  67. filters: SettingTypes.Filters,
  68. color: SettingTypes.Color,
  69. tip: SettingTypes.Tip
  70. }
  71. export const MapItemTypes = {
  72. [ViewModelTypes.Category]: ItemTypes.Category,
  73. [ViewModelTypes.Value]: ItemTypes.Value
  74. }
  75. export const MapItemValueTypes = {
  76. [ViewModelVisualTypes.Date]: ItemValueTypes.Date,
  77. [ViewModelVisualTypes.GeoCity]: ItemValueTypes.GeoCity,
  78. [ViewModelVisualTypes.GeoCountry]: ItemValueTypes.GeoCountry,
  79. [ViewModelVisualTypes.GeoProvince]: ItemValueTypes.GeoProvince,
  80. [ViewModelVisualTypes.Number]: ItemValueTypes.Number,
  81. [ViewModelVisualTypes.String]: ItemValueTypes.String
  82. }
  83. export default SettingsList