1
0
forked from a/lifeto-shop
lifeto-shop/src/lib/columns/column.ts
2025-06-20 00:41:10 -05:00

73 lines
1.5 KiB
TypeScript

import { TricksterItem } from '../trickster'
export const BasicColumns = ['uid', 'Image', 'Name', 'Count'] as const
export const DetailsColumns = ['Desc', 'Use'] as const
export const MoveColumns = ['MoveCount', 'Move'] as const
export const TagColumns = ['All', 'Equip', 'Drill', 'Card', 'Quest', 'Consume', 'Compound'] as const
export const EquipmentColumns = ['MinLvl', 'Slots', 'RefineNumber', 'RefineState'] as const
export const StatsColumns = [
'HV',
'AC',
'LK',
'WT',
'HP',
'MA',
'DP',
'DX',
'MP',
'AP',
'MD',
'DA',
'GunAP',
] as const
export const DebugColumns = []
export const HackColumns = [] as const
export const ColumnNames = [
...BasicColumns,
...MoveColumns,
...DetailsColumns,
...EquipmentColumns,
...StatsColumns,
...TagColumns,
...HackColumns,
] as const
export type ColumnName = (typeof ColumnNames)[number]
const c = (a: ColumnName | ColumnInfo): ColumnName => {
switch (typeof a) {
case 'string':
return a
case 'object':
return a.name
}
}
export const LazyColumn = c
export const ColumnSorter = (a: ColumnName | ColumnInfo, b: ColumnName | ColumnInfo): number => {
const n1 = ColumnNames.indexOf(c(a))
const n2 = ColumnNames.indexOf(c(b))
if (n1 === n2) {
return 0
}
return n1 > n2 ? 1 : -1
}
export interface ColumnInfo {
name: ColumnName
displayName: string
options?: (s: string[]) => string[]
renderer?: any
filtering?: boolean
writable?: boolean
getter(item: TricksterItem): string | number
}