let slidesData = $state([]) let activeIndex = $state(0) let pendingPath = $state(null) function getIndexByPath(path) { return slidesData.findIndex(s => s.path === path) } export const slides = { get all() { return slidesData }, get activeIndex() { return activeIndex }, get active() { return slidesData[activeIndex] ?? null }, get pendingPath() { return pendingPath }, init(siteNavigation) { slidesData = siteNavigation.map(nav => ({ id: nav.id, path: nav.url, title: nav.title, titles: nav.titles || { fr: nav.title }, template: nav.id, data: null, loaded: false, loading: false })) }, setData(path, data) { const idx = getIndexByPath(path) if (idx === -1) return slidesData[idx] = { ...slidesData[idx], template: data.template || slidesData[idx].id, data, loaded: true, loading: false } if (pendingPath === path) { slides.resolvePending() } }, setLoading(path, bool) { const idx = getIndexByPath(path) if (idx === -1) return slidesData[idx] = { ...slidesData[idx], loading: bool } }, slideTo(path) { const idx = getIndexByPath(path) if (idx === -1) return if (slidesData[idx].loaded) { activeIndex = idx pendingPath = null } else { pendingPath = path } }, setActiveIndex(idx) { activeIndex = idx }, resolvePending() { if (!pendingPath) return const idx = getIndexByPath(pendingPath) if (idx !== -1 && slidesData[idx].loaded) { activeIndex = idx pendingPath = null } }, getIndexByPath(path) { return getIndexByPath(path) } }