PPTist/src/hooks/useSectionHandler.ts
2024-07-28 14:03:26 +08:00

92 lines
2.2 KiB
TypeScript

import { storeToRefs } from 'pinia'
import { nanoid } from 'nanoid'
import { useSlidesStore } from '@/store'
import useHistorySnapshot from '@/hooks/useHistorySnapshot'
import useSlideHandler from '@/hooks/useSlideHandler'
export default () => {
const slidesStore = useSlidesStore()
const { slides } = storeToRefs(slidesStore)
const { addHistorySnapshot } = useHistorySnapshot()
const { deleteSlide } = useSlideHandler()
const createSection = () => {
slidesStore.updateSlide({
sectionTag: {
id: nanoid(6),
},
})
addHistorySnapshot()
}
const removeSection = (sectionId: string) => {
if (!sectionId) return
const slide = slides.value.find(slide => slide.sectionTag?.id === sectionId)!
slidesStore.removeSlideProps({
id: slide.id,
propName: 'sectionTag',
})
addHistorySnapshot()
}
const removeAllSection = () => {
const _slides = slides.value.map(slide => {
if (slide.sectionTag) delete slide.sectionTag
return slide
})
slidesStore.setSlides(_slides)
addHistorySnapshot()
}
const removeSectionSlides = (sectionId: string) => {
let startIndex = 0
if (sectionId) {
startIndex = slides.value.findIndex(slide => slide.sectionTag?.id === sectionId)
}
const ids: string[] = []
for (let i = startIndex; i < slides.value.length; i++) {
const slide = slides.value[i]
if(i !== startIndex && slide.sectionTag) break
ids.push(slide.id)
}
deleteSlide(ids)
}
const updateSectionTitle = (sectionId: string, title: string) => {
if (!title) return
if (sectionId === 'default') {
slidesStore.updateSlide({
sectionTag: {
id: nanoid(6),
title,
},
}, slides.value[0].id)
}
else {
const slide = slides.value.find(slide => slide.sectionTag?.id === sectionId)
if (!slide) return
slidesStore.updateSlide({
sectionTag: {
...slide.sectionTag!,
title,
},
}, slide.id)
}
addHistorySnapshot()
}
return {
createSection,
removeSection,
removeAllSection,
removeSectionSlides,
updateSectionTitle,
}
}