38 lines
1.2 KiB
JavaScript
38 lines
1.2 KiB
JavaScript
|
|
export const TRACKER_TABLE_COLUMNS = [
|
||
|
|
{ key: 'due', label: 'Due' },
|
||
|
|
{ key: 'expected', label: 'Expected' },
|
||
|
|
{ key: 'previous', label: 'Last Month' },
|
||
|
|
{ key: 'paid', label: 'Paid' },
|
||
|
|
{ key: 'paid_date', label: 'Paid Date' },
|
||
|
|
{ key: 'status', label: 'Status' },
|
||
|
|
{ key: 'action', label: 'Action' },
|
||
|
|
{ key: 'notes', label: 'Notes' },
|
||
|
|
];
|
||
|
|
|
||
|
|
export const TRACKER_TABLE_COLUMN_KEYS = TRACKER_TABLE_COLUMNS.map(column => column.key);
|
||
|
|
export const DEFAULT_TRACKER_TABLE_COLUMNS = [...TRACKER_TABLE_COLUMN_KEYS];
|
||
|
|
|
||
|
|
export function parseTrackerTableColumns(value) {
|
||
|
|
if (Array.isArray(value)) return normalizeTrackerTableColumns(value);
|
||
|
|
if (!value) return DEFAULT_TRACKER_TABLE_COLUMNS;
|
||
|
|
|
||
|
|
try {
|
||
|
|
const parsed = JSON.parse(value);
|
||
|
|
return normalizeTrackerTableColumns(parsed);
|
||
|
|
} catch {
|
||
|
|
return DEFAULT_TRACKER_TABLE_COLUMNS;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
export function normalizeTrackerTableColumns(columns) {
|
||
|
|
const valid = new Set(TRACKER_TABLE_COLUMN_KEYS);
|
||
|
|
return Array.isArray(columns)
|
||
|
|
? columns.filter(column => valid.has(column))
|
||
|
|
.filter((column, index, all) => all.indexOf(column) === index)
|
||
|
|
: DEFAULT_TRACKER_TABLE_COLUMNS;
|
||
|
|
}
|
||
|
|
|
||
|
|
export function trackerTableColumnsToSetting(columns) {
|
||
|
|
return JSON.stringify(normalizeTrackerTableColumns(columns));
|
||
|
|
}
|