useSectionHandler.ts 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. import { storeToRefs } from 'pinia'
  2. import { nanoid } from 'nanoid'
  3. import { useSlidesStore } from '@/store'
  4. import useHistorySnapshot from '@/hooks/useHistorySnapshot'
  5. import useSlideHandler from '@/hooks/useSlideHandler'
  6. export default () => {
  7. const slidesStore = useSlidesStore()
  8. const { slides } = storeToRefs(slidesStore)
  9. const { addHistorySnapshot } = useHistorySnapshot()
  10. const { deleteSlide } = useSlideHandler()
  11. const createSection = () => {
  12. slidesStore.updateSlide({
  13. sectionTag: {
  14. id: nanoid(6),
  15. },
  16. })
  17. addHistorySnapshot()
  18. }
  19. const removeSection = (sectionId: string) => {
  20. if (!sectionId) return
  21. const slide = slides.value.find(slide => slide.sectionTag?.id === sectionId)!
  22. slidesStore.removeSlideProps({
  23. id: slide.id,
  24. propName: 'sectionTag',
  25. })
  26. addHistorySnapshot()
  27. }
  28. const removeAllSection = () => {
  29. const _slides = slides.value.map(slide => {
  30. if (slide.sectionTag) delete slide.sectionTag
  31. return slide
  32. })
  33. slidesStore.setSlides(_slides)
  34. addHistorySnapshot()
  35. }
  36. const removeSectionSlides = (sectionId: string) => {
  37. let startIndex = 0
  38. if (sectionId) {
  39. startIndex = slides.value.findIndex(slide => slide.sectionTag?.id === sectionId)
  40. }
  41. const ids: string[] = []
  42. for (let i = startIndex; i < slides.value.length; i++) {
  43. const slide = slides.value[i]
  44. if (i !== startIndex && slide.sectionTag) break
  45. ids.push(slide.id)
  46. }
  47. deleteSlide(ids)
  48. }
  49. const updateSectionTitle = (sectionId: string, title: string) => {
  50. if (!title) return
  51. if (sectionId === 'default') {
  52. slidesStore.updateSlide({
  53. sectionTag: {
  54. id: nanoid(6),
  55. title,
  56. },
  57. }, slides.value[0].id)
  58. }
  59. else {
  60. const slide = slides.value.find(slide => slide.sectionTag?.id === sectionId)
  61. if (!slide) return
  62. slidesStore.updateSlide({
  63. sectionTag: {
  64. ...slide.sectionTag!,
  65. title,
  66. },
  67. }, slide.id)
  68. }
  69. addHistorySnapshot()
  70. }
  71. return {
  72. createSection,
  73. removeSection,
  74. removeAllSection,
  75. removeSectionSlides,
  76. updateSectionTitle,
  77. }
  78. }