interface BibleStudyChip { id: number title: string } const activeBibleStudies = useState('bible-study-chips', () => []) export function useFilters() { const { documentsApi } = useTypesenseApi() const toast = useToast() const bibleStudyInput = ref(null) const isValidating = ref(false) const activeCount = computed(() => activeBibleStudies.value.length) async function applyBibleStudyFilter(mainCollection: string) { const val = bibleStudyInput.value if (val === null || val <= 0) return if (activeBibleStudies.value.some(bs => bs.id === val)) { toast.add({ title: 'Estudio ya agregado', description: `El estudio #${val} ya está en el filtro`, color: 'info' }) bibleStudyInput.value = null return } isValidating.value = true try { const res = await documentsApi.multiSearch({ multiSearchParameters: {}, multiSearchSearchesParameter: { searches: [{ collection: mainCollection, q: '*', queryBy: 'title', filterBy: `bible_study:=${val}`, perPage: 1, includeFields: 'bible_study,title' }] } }) const hit = (res?.results?.[0] as { hits?: Array<{ document: { title?: string } }> })?.hits?.[0] if (hit) { activeBibleStudies.value = [...activeBibleStudies.value, { id: val, title: hit.document.title || '' }] bibleStudyInput.value = null } else { toast.add({ title: 'Estudio no encontrado', description: `No existe el estudio #${val}`, color: 'warning' }) } } catch (err) { console.error('Error validando bible_study', err) } finally { isValidating.value = false } } function removeBibleStudyFilter(id: number) { activeBibleStudies.value = activeBibleStudies.value.filter(bs => bs.id !== id) } function clearAllBibleStudyFilters() { activeBibleStudies.value = [] } return { activeBibleStudies, activeCount, bibleStudyInput, isValidating, applyBibleStudyFilter, removeBibleStudyFilter, clearAllBibleStudyFilters } }