mirror of
https://github.com/pipipi-pikachu/PPTist.git
synced 2025-04-15 02:20:00 +08:00
92 lines
2.2 KiB
TypeScript
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,
|
|
}
|
|
} |