61 lines
1.5 KiB
TypeScript
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
|
|
}
|
|
}
|