68 lines
1.8 KiB
TypeScript
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)
|
|
}
|
|
}
|