mirror of
				https://github.com/crater-invoice/crater.git
				synced 2025-11-03 22:13:18 -05: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
 | 
						||
  }
 | 
						||
}
 |