Common

useLifeTimer

Composable interno per auto-dismissal con timer, progress tracking e pausa/ripresa.

Composable interno — utilizzato dai componenti Message e Toast della libreria.

Firma TypeScript

export function useLifeTimer(options: UseLifeTimerOptions): LifeTimerResult

export interface UseLifeTimerOptions {
  life: MaybeRef<number | null | undefined>;  // durata in ms
  sticky?: MaybeRef<boolean | undefined>;
  onLifeEnd: () => void;
  progressInterval?: number;  // default: 10ms
  trackProgress?: boolean;    // default: true
}

export interface LifeTimerResult {
  startTimer: () => void;
  stopTimer: () => void;
  resetTimer: () => void;
  pauseTimer: () => void;
  resumeTimer: () => void;
  remainingTime: Ref<number>;
  progressPercentage: ComputedRef<number>;
  isRunning: Ref<boolean>;
  isPaused: Ref<boolean>;
}

Parametri

ParametroTipoDescrizione
options.lifeMaybeRef<number | null | undefined>Durata in ms; se null/0 il timer non parte
options.stickyMaybeRef<boolean>Se true il timer non parte (elemento permanente)
options.onLifeEnd() => voidCallback eseguita alla scadenza del timer
options.progressIntervalnumberIntervallo di aggiornamento progress in ms (default: 10)
options.trackProgressbooleanSe tracciare il progresso (default: true)

Valore di Ritorno

ProprietàTipoDescrizione
startTimer() => voidAvvia il timer
stopTimer() => voidFerma e resetta il timer
resetTimer() => voidFerma e riavvia il timer
pauseTimer() => voidSospende il timer (utile su hover)
resumeTimer() => voidRiprende il timer dopo una pausa
remainingTimeRef<number>Millisecondi rimanenti
progressPercentageComputedRef<number>Percentuale progresso 0-100 (100=inizio, 0=scaduto)
isRunningRef<boolean>True se il timer e attivo
isPausedRef<boolean>True se il timer e in pausa

Esempio

const { startTimer, pauseTimer, resumeTimer, progressPercentage } = useLifeTimer({
  life: () => props.life,
  sticky: () => props.sticky,
  onLifeEnd: () => {
    visible.value = false
    emit('close')
  }
})

onMounted(() => startTimer())

// Pausa su hover per leggere il messaggio
const handleMouseEnter = () => pauseTimer()
const handleMouseLeave = () => resumeTimer()
<!-- Progress bar -->
<div :style="{ width: progressPercentage + '%' }"></div>

Note

  • Il timer non parte se sticky=true oppure life e null/0.
  • resumeTimer calcola correttamente il tempo rimanente sottraendo il tempo trascorso prima della pausa.
  • Il composable esegue cleanup automatico di tutti i timer su onBeforeUnmount.
  • Reagisce ai cambiamenti di life e sticky tramite watcher: se il timer e attivo, lo resetta con i nuovi valori.
  • progressPercentage va da 100 (timer appena avviato) a 0 (timer scaduto), compatibile con progress bar CSS.