48 lines
1.4 KiB
JavaScript
48 lines
1.4 KiB
JavaScript
|
// Utilities
|
||
|
import { computed } from 'vue';
|
||
|
import { getPropertyFromItem, propsFactory } from "../../../util/index.mjs"; // Types
|
||
|
// Composables
|
||
|
export const makeDataTableItemsProps = propsFactory({
|
||
|
items: {
|
||
|
type: Array,
|
||
|
default: () => []
|
||
|
},
|
||
|
itemValue: {
|
||
|
type: [String, Array, Function],
|
||
|
default: 'id'
|
||
|
},
|
||
|
itemSelectable: {
|
||
|
type: [String, Array, Function],
|
||
|
default: null
|
||
|
},
|
||
|
rowProps: [Object, Function],
|
||
|
cellProps: [Object, Function],
|
||
|
returnObject: Boolean
|
||
|
}, 'DataTable-items');
|
||
|
export function transformItem(props, item, index, columns) {
|
||
|
const value = props.returnObject ? item : getPropertyFromItem(item, props.itemValue);
|
||
|
const selectable = getPropertyFromItem(item, props.itemSelectable, true);
|
||
|
const itemColumns = columns.reduce((obj, column) => {
|
||
|
if (column.key != null) obj[column.key] = getPropertyFromItem(item, column.value);
|
||
|
return obj;
|
||
|
}, {});
|
||
|
return {
|
||
|
type: 'item',
|
||
|
key: props.returnObject ? getPropertyFromItem(item, props.itemValue) : value,
|
||
|
index,
|
||
|
value,
|
||
|
selectable,
|
||
|
columns: itemColumns,
|
||
|
raw: item
|
||
|
};
|
||
|
}
|
||
|
export function transformItems(props, items, columns) {
|
||
|
return items.map((item, index) => transformItem(props, item, index, columns));
|
||
|
}
|
||
|
export function useDataTableItems(props, columns) {
|
||
|
const items = computed(() => transformItems(props, props.items, columns.value));
|
||
|
return {
|
||
|
items
|
||
|
};
|
||
|
}
|
||
|
//# sourceMappingURL=items.mjs.map
|