reducer.ts 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  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_AUTOFORMAT,
  9. TOGGLE_DOCK,
  10. ZOOM_IN,
  11. ZOOM_OUT,
  12. CENTER_VIEW,
  13. SET_JSON,
  14. SET_SEARCH_NODE,
  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 { ...state, settings: action.payload };
  28. case ConfigActionType.SET_ZOOM_PAN_PICNH_REF:
  29. return {
  30. ...state,
  31. settings: {
  32. ...state.settings,
  33. zoomPanPinch: action.payload,
  34. },
  35. };
  36. case ConfigActionType.SET_SEARCH_NODE:
  37. return {
  38. ...state,
  39. settings: {
  40. ...state.settings,
  41. searchNode: action.payload,
  42. },
  43. };
  44. case ConfigActionType.CENTER_VIEW:
  45. state.settings.zoomPanPinch.resetTransform();
  46. return state;
  47. case ConfigActionType.ZOOM_IN:
  48. state.settings.zoomPanPinch.setTransform(
  49. state.settings.zoomPanPinch.state.positionX,
  50. state.settings.zoomPanPinch.state.positionY,
  51. state.settings.zoomPanPinch.state.scale + 0.2
  52. );
  53. return state;
  54. case ConfigActionType.ZOOM_OUT:
  55. state.settings.zoomPanPinch.setTransform(
  56. state.settings.zoomPanPinch.state.positionX,
  57. state.settings.zoomPanPinch.state.positionY,
  58. state.settings.zoomPanPinch.state.scale - 0.2
  59. );
  60. return state;
  61. case ConfigActionType.TOGGLE_AUTOFORMAT:
  62. return {
  63. ...state,
  64. settings: {
  65. ...state.settings,
  66. autoformat: !state.settings.autoformat,
  67. },
  68. };
  69. case ConfigActionType.TOGGLE_DOCK:
  70. return {
  71. ...state,
  72. settings: {
  73. ...state.settings,
  74. hideEditor: !state.settings.hideEditor,
  75. },
  76. };
  77. case ConfigActionType.TOGGLE_EXPAND:
  78. return {
  79. ...state,
  80. settings: {
  81. ...state.settings,
  82. expand: !state.settings.expand,
  83. },
  84. };
  85. case ConfigActionType.TOGGLE_LAYOUT:
  86. return {
  87. ...state,
  88. settings: {
  89. ...state.settings,
  90. layout: getNextLayout(state.settings.layout),
  91. },
  92. };
  93. case ConfigActionType.SET_JSON:
  94. return {
  95. ...state,
  96. json: action.payload,
  97. };
  98. default:
  99. return state;
  100. }
  101. };