mutations.ts 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. import { MutationTree } from 'vuex'
  2. import { MutationTypes } from './constants'
  3. import { State } from './index'
  4. import { Slide, PPTElement } from '@/types/slides'
  5. import { FONT_NAMES } from '@/configs/fontName'
  6. import { isSupportFontFamily } from '@/utils/fontFamily'
  7. interface AddSlideData {
  8. index?: number;
  9. slide: Slide | Slide[];
  10. }
  11. interface UpdateElementData {
  12. elId: string | string[];
  13. props: Partial<PPTElement>;
  14. }
  15. export const mutations: MutationTree<State> = {
  16. // editor
  17. [MutationTypes.SET_ACTIVE_ELEMENT_ID_LIST](state, activeElementIdList: string[]) {
  18. if(activeElementIdList.length === 1) state.handleElementId = activeElementIdList[0]
  19. else state.handleElementId = ''
  20. state.activeElementIdList = activeElementIdList
  21. },
  22. [MutationTypes.SET_HANDLE_ELEMENT_ID](state, handleElementId: string) {
  23. state.handleElementId = handleElementId
  24. },
  25. [MutationTypes.SET_EDITOR_AREA_SHOW_SCALE](state, scale: number) {
  26. state.editorAreaShowScale = scale
  27. },
  28. [MutationTypes.SET_THUMBNAILS_FOCUS](state, isFocus: boolean) {
  29. state.thumbnailsFocus = isFocus
  30. },
  31. [MutationTypes.SET_EDITORAREA_FOCUS](state, isFocus: boolean) {
  32. state.editorAreaFocus = isFocus
  33. },
  34. [MutationTypes.SET_DISABLE_HOTKEYS_STATE](state, disable: boolean) {
  35. state.disableHotkeys = disable
  36. },
  37. [MutationTypes.SET_AVAILABLE_FONTS](state) {
  38. state.availableFonts = FONT_NAMES.filter(font => isSupportFontFamily(font.en))
  39. },
  40. // slides
  41. [MutationTypes.SET_SLIDES](state, slides: Slide[]) {
  42. state.slides = slides
  43. },
  44. [MutationTypes.ADD_SLIDE](state, slide: Slide) {
  45. const addIndex = state.slideIndex + 1
  46. state.slides.splice(addIndex, 0, slide)
  47. state.slideIndex = addIndex
  48. },
  49. [MutationTypes.UPDATE_SLIDE](state, props: Partial<Slide>) {
  50. const slideIndex = state.slideIndex
  51. state.slides[slideIndex] = { ...state.slides[slideIndex], ...props }
  52. },
  53. [MutationTypes.DELETE_SLIDE](state, slideId: string) {
  54. const deleteIndex = state.slides.findIndex(item => item.id === slideId)
  55. if(deleteIndex === state.slides.length - 1) {
  56. state.slideIndex = deleteIndex - 1
  57. }
  58. state.slides.splice(deleteIndex, 1)
  59. },
  60. [MutationTypes.UPDATE_SLIDE_INDEX](state, index: number) {
  61. state.slideIndex = index
  62. },
  63. [MutationTypes.ADD_ELEMENT](state, element: PPTElement | PPTElement[]) {
  64. const elements = Array.isArray(element) ? element : [element]
  65. const currentSlideEls = state.slides[state.slideIndex].elements
  66. const newEls = [...currentSlideEls, ...elements]
  67. state.slides[state.slideIndex].elements = newEls
  68. },
  69. [MutationTypes.UPDATE_ELEMENT](state, data: UpdateElementData) {
  70. const { elId, props } = data
  71. const elIdList = typeof elId === 'string' ? [elId] : elId
  72. const slideIndex = state.slideIndex
  73. const slide = state.slides[slideIndex]
  74. const elements = slide.elements.map(el => {
  75. return elIdList.includes(el.elId) ? { ...el, ...props } : el
  76. })
  77. state.slides[slideIndex].elements = (elements as PPTElement[])
  78. },
  79. // snapshot
  80. [MutationTypes.SET_SNAPSHOT_CURSOR](state, cursor: number) {
  81. state.snapshotCursor = cursor
  82. },
  83. [MutationTypes.SET_SNAPSHOT_LENGTH](state, length: number) {
  84. state.snapshotLength = length
  85. },
  86. // keyBoard
  87. [MutationTypes.SET_CTRL_KEY_STATE](state, isActive: boolean) {
  88. state.ctrlKeyState = isActive
  89. },
  90. [MutationTypes.SET_SHIFT_KEY_STATE](state, isActive: boolean) {
  91. state.shiftKeyState = isActive
  92. },
  93. }