useGlobalFilters
Signature
function useGlobalFilters(options: UseGlobalFiltersOptions): UseGlobalFiltersReturn
Gestisce i filtri globali del foglio (periodo, cliente, reparto, testo libero) con autosave debounced 1000ms verso foglidicalcolo.filtriglobali (JSONB).
I filtri globali sono usati da useSpreadsheetERP per filtrare in modo coordinato le sorgenti con usaFiltriGlobali: true.
Opzioni
interface UseGlobalFiltersOptions {
initialFilters?: GlobalFilters
idfolio: Ref<number | null>
}
| Opzione | Descrizione |
|---|---|
initialFilters | Filtri iniziali (es. dal foglio appena caricato) |
idfolio | ID foglio corrente. Se null, l'autosave è disabilitato |
Risultato
interface UseGlobalFiltersReturn {
filtri: Ref<GlobalFilters>
setFilter(key: string, value: unknown): void
resetFilters(): void
setFiltriFromFoglio(foglio: FoglioDettaglio): void
salvaFiltri(): Promise<void>
}
GlobalFilters
interface GlobalFilters {
periodo?: {
da: string // ISO date "2026-01-01"
a: string // ISO date "2026-01-31"
}
idcliente?: number | null
idreparto?: number | null
testoLibero?: string
[key: string]: unknown // estendibile per filtri custom
}
L'index signature [key: string]: unknown permette di aggiungere filtri custom specifici del business (es. idmagazzino, idsede).
Comportamento
setFilter(key, value)
Imposta un singolo filtro mantenendo gli altri. È superficiale: per filtri composti (es. periodo), passa l'oggetto intero.
gf.setFilter('idcliente', 42)
gf.setFilter('periodo', { da: '2026-01-01', a: '2026-12-31' })
resetFilters()
Resetta filtri.value a {}. Triggera l'autosave (cancella i filtri sul DB).
setFiltriFromFoglio(foglio)
Sovrascrive filtri.value con foglio.filtriglobali. Usato da SpreadsheetEditor dopo il load del foglio per popolare i filtri dal DB.
salvaFiltri()
Forza un salvataggio immediato (senza debounce):
await gf.salvaFiltri()
// → PATCH /foglidicalcolo?idfolio=eq.{id} con { filtriglobali: filtri.value }
Non chiamato direttamente: l'autosave debounced lo invoca automaticamente. Usalo solo se vuoi forzare il flush prima di una operazione critica.
Autosave debounced
const debouncedSalva = debounce(salvaFiltri, 1000)
watch(filtri, () => {
if (idfolio.value !== null) debouncedSalva()
}, { deep: true })
L'autosave non parte se idfolio === null (foglio non ancora caricato/creato).
Esempio
<script setup lang="ts">
import { ref } from 'vue'
import { useGlobalFilters } from '@pzeta/vue-foglidicalcolo'
const idfolio = ref<number | null>(42)
const gf = useGlobalFilters({ idfolio })
// Imposta periodo
gf.setFilter('periodo', {
da: '2026-01-01',
a: '2026-12-31',
})
// Imposta cliente
gf.setFilter('idcliente', 15)
// Dopo 1 secondo: PATCH /foglidicalcolo?idfolio=eq.42 con i filtri aggiornati
</script>
<template>
<input
type="date"
:value="gf.filtri.value.periodo?.da"
@change="gf.setFilter('periodo', { ...gf.filtri.value.periodo, da: $event.target.value })"
/>
<button @click="gf.resetFilters">Reset filtri</button>
</template>
Integrazione con useSpreadsheetERP
Quando useGlobalFilters.filtri cambia, useSpreadsheetERP (che ha filtriGlobali come Ref<GlobalFilters>) triggera automaticamente debouncedRefreshAll() per ricaricare le sorgenti che ereditano dai filtri globali.
const gf = useGlobalFilters({ idfolio })
const erp = useSpreadsheetERP({
idfolio,
filtriGlobali: gf.filtri, // ← reattivo
sorgentiConfig: ...,
})
gf.setFilter('idcliente', 42)
// → autosave debounced 1000ms (DB) + erp refreshAll debounced 500ms (UI)
Tipi correlati
GlobalFilters— modello datiFoglioDettaglio— sorgente disetFiltriFromFogliouseSpreadsheetERP— consumatore dei filtri