Files
analiticaNucleo/nuxt4-app/app/composables/useInformeLayout.ts
2025-10-01 03:11:10 -06:00

68 lines
1.8 KiB
TypeScript

import { inject, ref, type Ref, type Component, type VNode } from 'vue'
export interface FiltrosResumen {
count: number
summary: string
results: number
}
export interface DatasourceCounts {
[key: string]: number
}
export interface ActiveFilter {
type: string
label: string
value: any
onRemove: () => void
}
export function useInformeLayout() {
const setFiltrosResumenFn = inject<(resumen: FiltrosResumen | null) => void>('setFiltrosResumen')
const setDatasourceCountsFn = inject<(counts: DatasourceCounts) => void>('setDatasourceCounts')
const setFilteredResultsFn = inject<(results: DatasourceCounts) => void>('setFilteredResults')
const setActiveFiltersFn = inject<(filters: ActiveFilter[]) => void>('setActiveFilters')
const filtrosCollapsedRef = inject<Ref<boolean>>('filtrosCollapsed')
const metadatosCollapsedRef = inject<Ref<boolean>>('metadatosCollapsed')
function setFiltrosResumen(count: number, summary: string, results: number) {
if (setFiltrosResumenFn) {
setFiltrosResumenFn({ count, summary, results })
}
}
function clearFiltrosResumen() {
if (setFiltrosResumenFn) {
setFiltrosResumenFn(null)
}
}
function setDatasourceCounts(counts: DatasourceCounts) {
if (setDatasourceCountsFn) {
setDatasourceCountsFn(counts)
}
}
function setFilteredResults(results: DatasourceCounts) {
if (setFilteredResultsFn) {
setFilteredResultsFn(results)
}
}
function setActiveFilters(filters: ActiveFilter[]) {
if (setActiveFiltersFn) {
setActiveFiltersFn(filters)
}
}
return {
setFiltrosResumen,
clearFiltrosResumen,
setDatasourceCounts,
setFilteredResults,
setActiveFilters,
filtrosCollapsed: filtrosCollapsedRef || ref(false),
metadatosCollapsed: metadatosCollapsedRef || ref(false)
}
}