mutations.ts 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. import { MutationTypes } from './constants'
  2. import { State } from './state'
  3. import { Slide, PPTElement } from '@/types/slides'
  4. import { FONT_NAMES } from '@/configs/fontName'
  5. import { isSupportFontFamily } from '@/utils/fontFamily'
  6. interface AddSlideData {
  7. index?: number;
  8. slide: Slide | Slide[];
  9. }
  10. interface UpdateElementData {
  11. elId: string | string[];
  12. props: Partial<PPTElement>;
  13. }
  14. export type Mutations = {
  15. [MutationTypes.SET_ACTIVE_ELEMENT_ID_LIST](state: State, activeElementIdList: string[]): void;
  16. [MutationTypes.SET_HANDLE_ELEMENT_ID](state: State, handleElementId: string): void;
  17. [MutationTypes.SET_EDITOR_AREA_SHOW_SCALE](state: State, scale: number): void;
  18. [MutationTypes.SET_CANVAS_SCALE](state: State, scale: number): void;
  19. [MutationTypes.SET_THUMBNAILS_FOCUS](state: State, isFocus: boolean): void;
  20. [MutationTypes.SET_EDITORAREA_FOCUS](state: State, isFocus: boolean): void;
  21. [MutationTypes.SET_DISABLE_HOTKEYS_STATE](state: State, disable: boolean): void;
  22. [MutationTypes.SET_AVAILABLE_FONTS](state: State): void;
  23. [MutationTypes.SET_SLIDES](state: State, slides: Slide[]): void;
  24. [MutationTypes.ADD_SLIDE](state: State, data: AddSlideData): void;
  25. [MutationTypes.UPDATE_SLIDE](state: State, data: Partial<Slide>): void;
  26. [MutationTypes.DELETE_SLIDE](state: State, slideId: string): void;
  27. [MutationTypes.UPDATE_SLIDE_INDEX](state: State, index: number): void;
  28. [MutationTypes.ADD_ELEMENT](state: State, element: PPTElement | PPTElement[]): void;
  29. [MutationTypes.UPDATE_ELEMENT](state: State, data: UpdateElementData): void;
  30. [MutationTypes.SET_CURSOR](state: State, cursor: number): void;
  31. [MutationTypes.UNDO](state: State): void;
  32. [MutationTypes.REDO](state: State): void;
  33. [MutationTypes.SET_HISTORY_RECORD_LENGTH](state: State, length: number): void;
  34. }
  35. export const mutations: Mutations = {
  36. // editor
  37. [MutationTypes.SET_ACTIVE_ELEMENT_ID_LIST](state, activeElementIdList) {
  38. if(activeElementIdList.length === 1) state.handleElementId = activeElementIdList[0]
  39. else state.handleElementId = ''
  40. state.activeElementIdList = activeElementIdList
  41. },
  42. [MutationTypes.SET_HANDLE_ELEMENT_ID](state, handleElementId) {
  43. state.handleElementId = handleElementId
  44. },
  45. [MutationTypes.SET_EDITOR_AREA_SHOW_SCALE](state, scale) {
  46. state.editorAreaShowScale = scale
  47. },
  48. [MutationTypes.SET_CANVAS_SCALE](state, scale) {
  49. state.canvasScale = scale
  50. },
  51. [MutationTypes.SET_THUMBNAILS_FOCUS](state, isFocus) {
  52. state.thumbnailsFocus = isFocus
  53. },
  54. [MutationTypes.SET_EDITORAREA_FOCUS](state, isFocus) {
  55. state.editorAreaFocus = isFocus
  56. },
  57. [MutationTypes.SET_DISABLE_HOTKEYS_STATE](state, disable) {
  58. state.disableHotkeys = disable
  59. },
  60. [MutationTypes.SET_AVAILABLE_FONTS](state) {
  61. state.availableFonts = FONT_NAMES.filter(font => isSupportFontFamily(font.en))
  62. },
  63. // slides
  64. [MutationTypes.SET_SLIDES](state, slides) {
  65. state.slides = slides
  66. },
  67. [MutationTypes.ADD_SLIDE](state, { index, slide }) {
  68. const slides = Array.isArray(slide) ? slide : [slide]
  69. const addIndex = index !== undefined ? index : (state.slideIndex + 1)
  70. state.slides.splice(addIndex, 0, ...slides)
  71. state.slideIndex = addIndex
  72. },
  73. [MutationTypes.UPDATE_SLIDE](state, props) {
  74. const slideIndex = state.slideIndex
  75. state.slides[slideIndex] = { ...state.slides[slideIndex], ...props }
  76. },
  77. [MutationTypes.DELETE_SLIDE](state, slideId) {
  78. const deleteIndex = state.slides.findIndex(item => item.id === slideId)
  79. if(deleteIndex === state.slides.length - 1) {
  80. state.slideIndex = deleteIndex - 1
  81. }
  82. state.slides.splice(deleteIndex, 1)
  83. },
  84. [MutationTypes.UPDATE_SLIDE_INDEX](state, index) {
  85. state.slideIndex = index
  86. },
  87. [MutationTypes.ADD_ELEMENT](state, element) {
  88. const elements = Array.isArray(element) ? element : [element]
  89. const currentSlideEls = state.slides[state.slideIndex].elements
  90. const newEls = [...currentSlideEls, ...elements]
  91. state.slides[state.slideIndex].elements = newEls
  92. },
  93. [MutationTypes.UPDATE_ELEMENT](state, { elId, props }) {
  94. const elIdList = typeof elId === 'string' ? [elId] : elId
  95. const slideIndex = state.slideIndex
  96. const slide = state.slides[slideIndex]
  97. const elements = slide.elements.map(el => {
  98. return elIdList.includes(el.elId) ? { ...el, ...props } : el
  99. })
  100. state.slides[slideIndex].elements = (elements as PPTElement[])
  101. },
  102. // history
  103. [MutationTypes.SET_CURSOR](state, cursor) {
  104. state.cursor = cursor
  105. },
  106. [MutationTypes.UNDO](state) {
  107. state.cursor -= 1
  108. },
  109. [MutationTypes.REDO](state) {
  110. state.cursor += 1
  111. },
  112. [MutationTypes.SET_HISTORY_RECORD_LENGTH](state, length) {
  113. state.historyRecordLength = length
  114. },
  115. }