index.ts 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import widgetConfig from './widgetConfig'
  2. import dashboardConfig from './dashboardConfig'
  3. import scheduleConfig from './scheduleConfig'
  4. import { IWidgetConfig } from 'app/containers/Widget/components/Widget'
  5. import { IDashboardConfig } from 'app/containers/Dashboard/types'
  6. import {
  7. IScheduleMailConfig,
  8. IScheduleWeChatWorkConfig
  9. } from 'app/containers/Schedule/components/types'
  10. import displayParamsConfig from './displayParams'
  11. import { ILayerParams } from 'app/containers/Display/components/types'
  12. export interface IMigrationRecorder {
  13. versions: string[]
  14. recorders: {
  15. [version: string]: (data, options?) => any
  16. }
  17. }
  18. function executeMigration(
  19. migrationRecorder: IMigrationRecorder,
  20. data: any,
  21. options?
  22. ) {
  23. const { versions, recorders } = migrationRecorder
  24. return versions.reduce(
  25. (mergedData, version) => recorders[version](mergedData, options),
  26. data
  27. )
  28. }
  29. const widgetConfigMigrationRecorder = (data: IWidgetConfig, options?) =>
  30. executeMigration(widgetConfig, data, options)
  31. const dashboardConfigMigrationRecorder = (data: IDashboardConfig) =>
  32. executeMigration(dashboardConfig, data)
  33. const scheduleConfigMigrationRecorder = (
  34. data: IScheduleMailConfig | IScheduleWeChatWorkConfig
  35. ) => executeMigration(scheduleConfig, data)
  36. const displayParamsMigrationRecorder = (data: ILayerParams) =>
  37. executeMigration(displayParamsConfig, data)
  38. export {
  39. widgetConfigMigrationRecorder,
  40. dashboardConfigMigrationRecorder,
  41. scheduleConfigMigrationRecorder,
  42. displayParamsMigrationRecorder
  43. }