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