Forms

IntervalInput

Input per intervalli di tempo PostgreSQL (tipo interval). Mostra campi numerici per ogni unita di tempo (anni, mesi, giorni, ore, minuti, secondi) e serializza in formato PostgreSQL interval.

Import

import { IntervalInput } from '@pzeta/vue-components'

Esempio Base

<script setup lang="ts">
import { ref } from 'vue'
import { IntervalInput } from '@pzeta/vue-components'

const intervalValue = ref<string | null>(null)
</script>

<template>
  <IntervalInput v-model="intervalValue" label="Durata" />
  <p>Valore PostgreSQL: {{ intervalValue }}</p>
</template>

Per default mostra campi per Giorni, Ore e Minuti. Il valore emesso e una stringa nel formato PostgreSQL interval (es. "2 days 4 hours 30 minutes").

Formato Valore

IngressoUscita
null o undefinednull
'2 days 4 hours 30 minutes'stringa PostgreSQL interval
{ days: 2, hours: 4, minutes: 30 }parse automatico → stringa PostgreSQL

La stringa emessa include solo le unita con valore > 0. Esempio: "1 years 6 months", "3 days 2 hours", "45 minutes".

Props

PropTipoDefaultDescrizione
modelValuestring | IntervalValue | nullnullValore corrente (v-model)
labelstringLabel del componente
unitsIntervalUnit[]['days', 'hours', 'minutes']Unita di tempo da mostrare
showUnitSelectorbooleanfalseMostra un select per cambiare l'unita in modalita singleUnit
singleUnitbooleanfalseMostra un solo campo anziche uno per unita
helperTextstringTesto di aiuto
errorstringMessaggio di errore
requiredbooleanfalseCampo obbligatorio
disabledbooleanfalseDisabilita il componente
loadingbooleanfalseMostra stato di caricamento
invalidbooleanfalseForza stato errore
size'small' | 'medium' | 'large''medium'Dimensione degli InputNumber interni
severitySeverity'primary'Colore del tema
classstringClasse CSS aggiuntiva

Tipo IntervalUnit

type IntervalUnit = 'years' | 'months' | 'days' | 'hours' | 'minutes' | 'seconds'

Tipo IntervalValue

interface IntervalValue {
  years?: number
  months?: number
  days?: number
  hours?: number
  minutes?: number
  seconds?: number
}

Emits

EventoPayloadDescrizione
update:modelValuestring | nullAggiornamento valore in formato PostgreSQL interval
focusFocusEventFocus su uno degli input
blurFocusEventBlur da uno degli input

Esempi

Tutte le unita

Solo ore e minuti

Modalita singola unita fissa

Con single-unit viene mostrato un solo campo. Se units ha un solo elemento, quella e l'unita fissa.

Modalita singola unita con selettore

Con show-unit-selector, l'utente puo scegliere l'unita tramite un select. L'ordine degli elementi in units determina l'ordine del select.

Con valore predefinito

Integrazione con PostgreSQL

<script setup lang="ts">
const slaValue = ref<string | null>(null)

async function saveSla() {
  // Il valore e gia in formato PostgreSQL interval
  await db.query(
    'UPDATE ticket SET sla_duration = $1::interval WHERE id = $2',
    [slaValue.value, ticketId.value]
  )
}
</script>

<template>
  <IntervalInput
    v-model="slaValue"
    label="SLA"
    :units="['days', 'hours', 'minutes']"
    helper-text="Tempo massimo per la risoluzione"
  />
</template>

Stati

Label Unita (Localizzate)

IntervalUnitLabel visualizzata
yearsAnni
monthsMesi
daysGiorni
hoursOre
minutesMinuti
secondsSecondi

TypeScript

import type { IntervalInputProps, IntervalValue, IntervalUnit } from '@pzeta/vue-components'

// Formato stringa PostgreSQL interval
const interval = ref<string | null>('2 days 4 hours 30 minutes')

// Oppure oggetto strutturato (accettato in ingresso)
const intervalObj: IntervalValue = {
  days: 2,
  hours: 4,
  minutes: 30,
}

// Unita specifiche
const units: IntervalUnit[] = ['hours', 'minutes']