handle-config.js 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. import { configListToMap } from '@cip/utils/config-util'
  2. import { BasicTypeToComponent } from './type-to-component'
  3. import { cloneDeep, isNotEmpty } from '@cip/utils/util'
  4. export const handleSpan = (config, spanToStyle) => {
  5. const span = config.span || 1
  6. const width = spanToStyle.width * span + spanToStyle.gapsWidth * (span - 1)
  7. config.style = { width: `${width}px` }
  8. return config
  9. }
  10. export const handleType = (config, typeToComponentMap) => {
  11. if (isNotEmpty(config.type)) {
  12. config.originComponent = typeToComponentMap[config.type]
  13. } else {
  14. config.originComponent = typeToComponentMap.default
  15. }
  16. return config
  17. }
  18. export const handleDependOn = (config, configMap) => {
  19. config.dependOn = config.dependOn?.map?.(key => ({ key, config: configMap[key] }))
  20. return config
  21. }
  22. // form默认类型与组件映射关系
  23. export const defaultTypeToComponentMap = {
  24. ...BasicTypeToComponent,
  25. grid: 'basic-grid', // layout
  26. steps: 'basic-steps'
  27. }
  28. // form默认placeholder转style
  29. export const defaultSpanToStyle = {
  30. width: 275,
  31. gapsWidth: 0
  32. }
  33. export const handleFormConfig = (config, configList = [], customTypeToConfigMap = {}, customSpanToStyle = {}, clone = true) => {
  34. // 合并配置
  35. const typeToConfigMap = { ...defaultTypeToComponentMap, ...customTypeToConfigMap }
  36. const spanToStyle = { ...defaultSpanToStyle, ...customSpanToStyle }
  37. const configMap = configListToMap(configList)
  38. let cloneConfig = clone ? cloneDeep(config) : config
  39. cloneConfig = handleType(cloneConfig, typeToConfigMap)
  40. cloneConfig = handleSpan(cloneConfig, spanToStyle)
  41. cloneConfig = handleDependOn(cloneConfig, configMap)
  42. return cloneConfig
  43. }