reducer.ts 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. import React from "react";
  2. import { getNextLayout } from "src/containers/LiveEditor/helpers";
  3. import { AppConfig, initialStates } from "../hocs/config";
  4. export enum ConfigActionType {
  5. SET_CONFIG,
  6. TOGGLE_LAYOUT,
  7. TOGGLE_EXPAND,
  8. TOGGLE_PERFORMANCE,
  9. TOGGLE_DOCK,
  10. TOGGLE_THEME,
  11. ZOOM_IN,
  12. ZOOM_OUT,
  13. CENTER_VIEW,
  14. SET_JSON,
  15. SET_ZOOM_PAN_PICNH_REF,
  16. }
  17. export type ReducerAction = {
  18. type: ConfigActionType;
  19. payload?: any;
  20. };
  21. export const useConfigReducer: React.Reducer<AppConfig, ReducerAction> = (
  22. state = initialStates,
  23. action
  24. ) => {
  25. switch (action.type) {
  26. case ConfigActionType.SET_CONFIG:
  27. return {
  28. ...state,
  29. settings: action.payload,
  30. };
  31. case ConfigActionType.TOGGLE_THEME:
  32. return {
  33. ...state,
  34. settings: {
  35. ...state.settings,
  36. lightmode: !state.settings.lightmode,
  37. },
  38. };
  39. case ConfigActionType.SET_ZOOM_PAN_PICNH_REF:
  40. return {
  41. ...state,
  42. settings: {
  43. ...state.settings,
  44. zoomPanPinch: action.payload,
  45. },
  46. };
  47. case ConfigActionType.CENTER_VIEW:
  48. state.settings.zoomPanPinch?.resetTransform();
  49. return state;
  50. case ConfigActionType.ZOOM_IN:
  51. state.settings.zoomPanPinch?.setTransform(
  52. state.settings.zoomPanPinch?.state.positionX,
  53. state.settings.zoomPanPinch?.state.positionY,
  54. state.settings.zoomPanPinch?.state.scale + 0.4
  55. );
  56. return state;
  57. case ConfigActionType.ZOOM_OUT:
  58. state.settings.zoomPanPinch?.setTransform(
  59. state.settings.zoomPanPinch?.state.positionX,
  60. state.settings.zoomPanPinch?.state.positionY,
  61. state.settings.zoomPanPinch?.state.scale - 0.4
  62. );
  63. return state;
  64. case ConfigActionType.TOGGLE_DOCK:
  65. return {
  66. ...state,
  67. settings: {
  68. ...state.settings,
  69. hideEditor: !state.settings.hideEditor,
  70. },
  71. };
  72. case ConfigActionType.TOGGLE_EXPAND:
  73. return {
  74. ...state,
  75. settings: {
  76. ...state.settings,
  77. expand: !state.settings.expand,
  78. },
  79. };
  80. case ConfigActionType.TOGGLE_PERFORMANCE:
  81. return {
  82. ...state,
  83. settings: {
  84. ...state.settings,
  85. performance: !state.settings.performance,
  86. },
  87. };
  88. case ConfigActionType.TOGGLE_LAYOUT:
  89. return {
  90. ...state,
  91. settings: {
  92. ...state.settings,
  93. layout: getNextLayout(state.settings.layout),
  94. },
  95. };
  96. case ConfigActionType.SET_JSON:
  97. return {
  98. ...state,
  99. json: action.payload,
  100. };
  101. default:
  102. return state;
  103. }
  104. };