feat: melhoria componentes de data
This commit is contained in:
parent
84383c3bbf
commit
642ccf4c1a
21 changed files with 6888 additions and 4607 deletions
|
|
@ -0,0 +1,73 @@
|
|||
import dayjs from "dayjs"
|
||||
import type { CelulaCalendario, EntradaDataHora } from "./useDataHora"
|
||||
|
||||
/**
|
||||
* Gera as 42 células (6 semanas) do calendário para o mês de referência.
|
||||
* Preenche dias do mês anterior, atual e posterior para alinhar a grade.
|
||||
*/
|
||||
export function gerarCelulas(
|
||||
referencia: dayjs.Dayjs,
|
||||
diaSelecionado: dayjs.Dayjs | null,
|
||||
min?: string,
|
||||
max?: string,
|
||||
): CelulaCalendario[] {
|
||||
const inicio = referencia.startOf("month")
|
||||
const fim = referencia.endOf("month")
|
||||
const hoje = dayjs()
|
||||
const minDt = min ? dayjs(min).startOf("day") : null
|
||||
const maxDt = max ? dayjs(max).startOf("day") : null
|
||||
const lista: CelulaCalendario[] = []
|
||||
|
||||
for (let i = inicio.day() - 1; i >= 0; i--) {
|
||||
const d = inicio.subtract(i + 1, "day")
|
||||
lista.push({
|
||||
dia: d.date(),
|
||||
data: d,
|
||||
atual: false,
|
||||
hoje: false,
|
||||
selecionado: false,
|
||||
desabilitado: true,
|
||||
})
|
||||
}
|
||||
|
||||
for (let d = inicio; d.isBefore(fim) || d.isSame(fim, "day"); d = d.add(1, "day")) {
|
||||
lista.push({
|
||||
dia: d.date(),
|
||||
data: d,
|
||||
atual: true,
|
||||
hoje: d.isSame(hoje, "day"),
|
||||
selecionado: diaSelecionado !== null && d.isSame(diaSelecionado, "day"),
|
||||
desabilitado: (minDt !== null && d.isBefore(minDt)) || (maxDt !== null && d.isAfter(maxDt)),
|
||||
})
|
||||
}
|
||||
|
||||
let extra = 1
|
||||
while (lista.length < 42) {
|
||||
const d = fim.add(extra++, "day")
|
||||
lista.push({
|
||||
dia: d.date(),
|
||||
data: d,
|
||||
atual: false,
|
||||
hoje: false,
|
||||
selecionado: false,
|
||||
desabilitado: true,
|
||||
})
|
||||
}
|
||||
|
||||
return lista
|
||||
}
|
||||
|
||||
/**
|
||||
* Formata um valor ISO para exibição no campo.
|
||||
* @param valor - string ISO 8601 ou null
|
||||
* @param modo - "data" exibe apenas a data, "dataHora" inclui hora
|
||||
*/
|
||||
export function formatarValor(
|
||||
valor: string | null,
|
||||
modo: EntradaDataHora["opcoes"]["modo"],
|
||||
): string {
|
||||
if (!valor) return ""
|
||||
return modo === "data"
|
||||
? dayjs(valor).format("DD/MM/YYYY")
|
||||
: dayjs(valor).format("DD/MM/YYYY HH:mm")
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue