mirror of
https://github.com/crater-invoice/crater.git
synced 2025-10-28 12:11:08 -04:00
65 lines
1.6 KiB
JavaScript
Executable File
65 lines
1.6 KiB
JavaScript
Executable File
import { pick } from '../helpers'
|
||
|
||
export default class Column {
|
||
constructor (columnComponent) {
|
||
const properties = pick(columnComponent, [
|
||
'show', 'label', 'dataType', 'sortable', 'sortBy', 'filterable',
|
||
'filterOn', 'hidden', 'formatter', 'cellClass', 'headerClass', 'sortAs'
|
||
])
|
||
|
||
for (const property in properties) {
|
||
this[property] = columnComponent[property]
|
||
}
|
||
|
||
this.template = columnComponent.$scopedSlots.default
|
||
}
|
||
|
||
isFilterable () {
|
||
return this.filterable
|
||
}
|
||
|
||
getFilterFieldName () {
|
||
return this.filterOn || this.show
|
||
}
|
||
|
||
isSortable () {
|
||
return this.sortable
|
||
}
|
||
|
||
getSortPredicate (sortOrder, allColumns) {
|
||
const sortFieldName = this.getSortFieldName()
|
||
|
||
const sortColumn = allColumns.find(column => (column.sortAs === sortFieldName || column.show === sortFieldName))
|
||
|
||
const dataType = sortColumn.dataType
|
||
|
||
if (dataType.startsWith('date') || dataType === 'numeric') {
|
||
return (row1, row2) => {
|
||
const value1 = row1.getSortableValue(sortFieldName)
|
||
const value2 = row2.getSortableValue(sortFieldName)
|
||
|
||
if (sortOrder === 'desc') {
|
||
return value2 < value1 ? -1 : 1
|
||
}
|
||
|
||
return value1 < value2 ? -1 : 1
|
||
}
|
||
}
|
||
|
||
return (row1, row2) => {
|
||
const value1 = row1.getSortableValue(sortFieldName)
|
||
const value2 = row2.getSortableValue(sortFieldName)
|
||
|
||
if (sortOrder === 'desc') {
|
||
return value2.localeCompare(value1)
|
||
}
|
||
|
||
return value1.localeCompare(value2)
|
||
}
|
||
}
|
||
|
||
getSortFieldName () {
|
||
return this.sortBy || this.sortAs || this.show
|
||
}
|
||
}
|