2019-11-18 07:42:32 +00:00
|
|
|
<template>
|
2021-02-10 10:29:37 +00:00
|
|
|
<thead class="p-datatable-thead" role="rowgroup">
|
2020-03-05 08:59:07 +00:00
|
|
|
<template v-if="!columnGroup">
|
2021-02-10 10:29:37 +00:00
|
|
|
<tr role="row">
|
|
|
|
<template v-for="(col,i) of columns" :key="columnProp(col, 'columnKey')||columnProp(col, 'field')||i">
|
|
|
|
<DTHeaderCell v-if="rowGroupMode !== 'subheader' || (groupRowsBy !== columnProp(col, 'field'))" :column="col"
|
|
|
|
@column-click="$emit('column-click', $event)" @column-mousedown="$emit('column-mousedown', $event)"
|
|
|
|
@column-dragstart="$emit('column-dragstart', $event)" @column-dragover="$emit('column-dragover', $event)" @column-dragleave="$emit('column-dragleave', $event)" @column-drop="$emit('column-drop', $event)"
|
|
|
|
:resizableColumns="resizableColumns" @column-resizestart="$emit('column-resizestart', $event)"
|
|
|
|
:sortMode="sortMode" :sortField="sortField" :sortOrder="sortOrder" :multiSortMeta="multiSortMeta"
|
2021-02-16 22:02:24 +00:00
|
|
|
:allRowsSelected="allRowsSelected" :empty="empty" @checkbox-change="$emit('checkbox-change', $event)"
|
2021-02-16 21:52:57 +00:00
|
|
|
:filters="filters" :filterDisplay="filterDisplay" :filtersStore="filtersStore" @filter-change="$emit('filter-change', $event)" @filter-apply="$emit('filter-apply')"
|
2021-02-10 10:29:37 +00:00
|
|
|
@operator-change="$emit('operator-change',$event)" @matchmode-change="$emit('matchmode-change', $event)" @constraint-add="$emit('constraint-add', $event)"
|
|
|
|
@constraint-remove="$emit('constraint-remove', $event)" @apply-click="$emit('apply-click',$event)"/>
|
2020-03-05 08:59:07 +00:00
|
|
|
</template>
|
|
|
|
</tr>
|
2021-02-10 10:29:37 +00:00
|
|
|
<tr v-if="filterDisplay === 'row'" role="row">
|
|
|
|
<template v-for="(col,i) of columns" :key="columnProp(col, 'columnKey')||columnProp(col, 'field')||i">
|
2021-02-16 21:52:57 +00:00
|
|
|
<th :style="getFilterColumnHeaderStyle(col)" :class="getFilterColumnHeaderClass(col)">
|
|
|
|
<DTColumnFilter v-if="col.children && col.children.filter" :field="columnProp(col,'filterField')||columnProp(col,'field')" :type="columnProp(col,'dataType')" display="row"
|
|
|
|
:showMenu="columnProp(col,'showFilterMenu')" :filterElement="col.children && col.children.filter"
|
|
|
|
:filterHeaderTemplate="col.children && col.children.filterheader" :filterFooterTemplate="col.children && col.children.filterfooter"
|
|
|
|
:filterClearTemplate="col.children && col.children.filterclear" :filterApplyTemplate="col.children && col.children.filterapply"
|
|
|
|
:filters="filters" :filtersStore="filtersStore" @filter-change="$emit('filter-change', $event)" @filter-apply="$emit('filter-apply')" :filterMenuStyle="columnProp(col,'filterMenuStyle')" :filterMenuClass="columnProp(col,'filterMenuClass')"
|
|
|
|
:showOperator="columnProp(col,'showFilterOperator')" :showClearButton="columnProp(col,'showClearButton')" :showApplyButton="columnProp(col,'showApplyButton')"
|
|
|
|
:showMatchModes="columnProp(col,'showFilterMatchModes')" :showAddButton="columnProp(col,'showAddButton')" :matchModeOptions="columnProp(col,'filterMatchModeOptions')" :maxConstraints="columnProp(col,'maxConstraints')"
|
|
|
|
@operator-change="$emit('operator-change',$event)" @matchmode-change="$emit('matchmode-change', $event)"
|
|
|
|
@constraint-add="$emit('constraint-add', $event)" @constraint-remove="$emit('constraint-remove', $event)" @apply-click="$emit('apply-click',$event)"/>
|
|
|
|
</th>
|
2020-03-05 08:59:07 +00:00
|
|
|
</template>
|
|
|
|
</tr>
|
|
|
|
</template>
|
2019-11-18 07:42:32 +00:00
|
|
|
<template v-else>
|
2021-02-10 10:29:37 +00:00
|
|
|
<tr v-for="(row,i) of columnGroup.children.default()" :key="i" role="row">
|
|
|
|
<template v-for="(col,j) of row.children.default()" :key="columnProp(col, 'columnKey')||columnProp(col, 'field')||j">
|
|
|
|
<DTHeaderCell v-if="rowGroupMode !== 'subheader' || (groupRowsBy !== columnProp(col, 'field'))" :column="col"
|
|
|
|
@column-click="$emit('column-click', $event)" @column-mousedown="$emit('column-mousedown', $event)"
|
|
|
|
:sortMode="sortMode" :sortField="sortField" :sortOrder="sortOrder" :multiSortMeta="multiSortMeta"
|
2021-02-16 22:02:24 +00:00
|
|
|
:allRowsSelected="allRowsSelected" :empty="empty" @checkbox-change="$emit('checkbox-change', $event)"
|
2021-02-16 21:52:57 +00:00
|
|
|
:filters="filters" :filterDisplay="filterDisplay" :filtersStore="filtersStore" @filter-change="$emit('filter-change', $event)" @filter-apply="$emit('filter-apply')"
|
2021-02-10 10:29:37 +00:00
|
|
|
@operator-change="$emit('operator-change',$event)" @matchmode-change="$emit('matchmode-change', $event)" @constraint-add="$emit('constraint-add', $event)"
|
|
|
|
@constraint-remove="$emit('constraint-remove', $event)" @apply-click="$emit('apply-click',$event)"/>
|
|
|
|
</template>
|
2019-11-18 07:42:32 +00:00
|
|
|
</tr>
|
|
|
|
</template>
|
|
|
|
</thead>
|
|
|
|
</template>
|
|
|
|
|
|
|
|
<script>
|
2021-02-18 11:03:15 +00:00
|
|
|
import HeaderCell from './HeaderCell.vue';
|
|
|
|
import ColumnFilter from './ColumnFilter.vue';
|
2019-11-18 07:42:32 +00:00
|
|
|
|
|
|
|
export default {
|
2020-10-21 18:03:17 +00:00
|
|
|
emits: ['column-click', 'column-mousedown', 'column-dragstart', 'column-dragover', 'column-dragleave', 'column-drop',
|
2021-02-10 10:29:37 +00:00
|
|
|
'column-resizestart', 'checkbox-change', 'filter-change', 'filter-apply',
|
2021-02-08 11:20:52 +00:00
|
|
|
'operator-change', 'matchmode-change', 'constraint-add', 'constraint-remove', 'filter-clear', 'apply-click'],
|
2019-11-18 07:42:32 +00:00
|
|
|
props: {
|
|
|
|
columnGroup: {
|
|
|
|
type: null,
|
|
|
|
default: null
|
|
|
|
},
|
|
|
|
columns: {
|
|
|
|
type: null,
|
|
|
|
default: null
|
|
|
|
},
|
|
|
|
rowGroupMode: {
|
|
|
|
type: String,
|
|
|
|
default: null
|
|
|
|
},
|
|
|
|
groupRowsBy: {
|
|
|
|
type: [Array,String],
|
|
|
|
default: null
|
|
|
|
},
|
|
|
|
resizableColumns: {
|
|
|
|
type: Boolean,
|
|
|
|
default: false
|
|
|
|
},
|
|
|
|
allRowsSelected: {
|
|
|
|
type: Boolean,
|
|
|
|
default: false
|
|
|
|
},
|
|
|
|
empty: {
|
|
|
|
type: Boolean,
|
|
|
|
default: false
|
|
|
|
},
|
|
|
|
sortMode: {
|
|
|
|
type: String,
|
|
|
|
default: 'single'
|
|
|
|
},
|
|
|
|
sortField: {
|
2020-12-08 11:16:38 +00:00
|
|
|
type: [String, Function],
|
2019-11-18 07:42:32 +00:00
|
|
|
default: null
|
|
|
|
},
|
|
|
|
sortOrder: {
|
|
|
|
type: Number,
|
|
|
|
default: null
|
|
|
|
},
|
|
|
|
multiSortMeta: {
|
|
|
|
type: Array,
|
|
|
|
default: null
|
2021-02-06 09:26:12 +00:00
|
|
|
},
|
2021-02-10 10:29:37 +00:00
|
|
|
filterDisplay: {
|
|
|
|
type: String,
|
|
|
|
default: null
|
|
|
|
},
|
2021-02-06 09:26:12 +00:00
|
|
|
filters: {
|
|
|
|
type: Object,
|
|
|
|
default: null
|
|
|
|
},
|
2021-02-08 11:07:06 +00:00
|
|
|
filtersStore: {
|
|
|
|
type: Object,
|
|
|
|
default: null
|
2019-11-18 07:42:32 +00:00
|
|
|
}
|
|
|
|
},
|
|
|
|
methods: {
|
2021-02-02 13:21:10 +00:00
|
|
|
columnProp(col, prop) {
|
2021-02-02 13:50:37 +00:00
|
|
|
return col.props ? ((col.type.props[prop].type === Boolean && col.props[prop] === '') ? true : col.props[prop]) : null;
|
2021-02-02 13:21:10 +00:00
|
|
|
},
|
2020-03-16 16:11:49 +00:00
|
|
|
getFilterColumnHeaderClass(column) {
|
2021-02-16 21:52:57 +00:00
|
|
|
return ['p-filter-column', this.columnProp(column, 'filterHeaderClass'), this.columnProp(column, 'class')];
|
|
|
|
},
|
|
|
|
getFilterColumnHeaderStyle(column) {
|
|
|
|
return [this.columnProp(column, 'filterHeaderStyle'), this.columnProp(column, 'style')];
|
2019-11-18 07:42:32 +00:00
|
|
|
}
|
|
|
|
},
|
|
|
|
components: {
|
2021-02-16 21:52:57 +00:00
|
|
|
'DTHeaderCell': HeaderCell,
|
|
|
|
'DTColumnFilter': ColumnFilter
|
2019-11-18 07:42:32 +00:00
|
|
|
}
|
|
|
|
}
|
2020-06-18 09:53:47 +00:00
|
|
|
</script>
|