|
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, |
|
} |
|
} |