useLockElement.ts 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import { useStore } from 'vuex'
  2. import { Ref, computed } from 'vue'
  3. import { State, MutationTypes } from '@/store'
  4. import { PPTElement, Slide } from '@/types/slides'
  5. import useHistorySnapshot from '@/hooks/useHistorySnapshot'
  6. export default () => {
  7. const store = useStore<State>()
  8. const activeElementIdList = computed(() => store.state.activeElementIdList)
  9. const currentSlide: Ref<Slide> = computed(() => store.getters.currentSlide)
  10. const { addHistorySnapshot } = useHistorySnapshot()
  11. const lockElement = () => {
  12. const newElementList: PPTElement[] = JSON.parse(JSON.stringify(currentSlide.value.elements))
  13. for(const element of newElementList) {
  14. if(activeElementIdList.value.includes(element.id)) element.lock = true
  15. }
  16. store.commit(MutationTypes.UPDATE_SLIDE, { elements: newElementList })
  17. addHistorySnapshot()
  18. }
  19. const unlockElement = (handleElement: PPTElement) => {
  20. const newElementList: PPTElement[] = JSON.parse(JSON.stringify(currentSlide.value.elements))
  21. if(handleElement.groupId) {
  22. for(const element of newElementList) {
  23. if(element.groupId === handleElement.groupId) element.lock = false
  24. }
  25. return newElementList
  26. }
  27. for(const element of newElementList) {
  28. if(element.id === handleElement.id) {
  29. element.lock = false
  30. break
  31. }
  32. }
  33. store.commit(MutationTypes.UPDATE_SLIDE, { elements: newElementList })
  34. addHistorySnapshot()
  35. }
  36. return {
  37. lockElement,
  38. unlockElement,
  39. }
  40. }