vue-componentes/src/componentes/EliTabela/colunasStorage.ts
2026-02-17 11:33:44 -03:00

61 lines
1.5 KiB
TypeScript

export type EliTabelaColunasConfig = {
/** Rotulos das colunas visiveis (em ordem). */
visiveis: string[]
/** Rotulos das colunas invisiveis. */
invisiveis: string[]
}
const STORAGE_PREFIX = "eli:tabela"
export function storageKeyColunas(nomeTabela: string) {
return `${STORAGE_PREFIX}:${nomeTabela}:colunas`
}
function normalizarConfig(valor: unknown): EliTabelaColunasConfig {
if (!valor || typeof valor !== "object") {
return { visiveis: [], invisiveis: [] }
}
const v = valor as EliTabelaColunasConfig
const visiveis = Array.isArray(v.visiveis)
? v.visiveis.filter((x: unknown) => typeof x === "string")
: []
const invisiveis = Array.isArray(v.invisiveis)
? v.invisiveis.filter((x: unknown) => typeof x === "string")
: []
return { visiveis, invisiveis }
}
export function carregarConfigColunas(
nomeTabela: string,
): EliTabelaColunasConfig {
try {
const raw = window.localStorage.getItem(storageKeyColunas(nomeTabela))
if (!raw) return { visiveis: [], invisiveis: [] }
return normalizarConfig(JSON.parse(raw))
} catch {
return { visiveis: [], invisiveis: [] }
}
}
export function salvarConfigColunas(
nomeTabela: string,
config: EliTabelaColunasConfig,
) {
try {
window.localStorage.setItem(
storageKeyColunas(nomeTabela),
JSON.stringify(normalizarConfig(config)),
)
} catch {
// ignore
}
}
export function limparConfigColunas(nomeTabela: string) {
try {
window.localStorage.removeItem(storageKeyColunas(nomeTabela))
} catch {
// ignore
}
}