items.mjs 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. // Utilities
  2. import { computed } from 'vue';
  3. import { getPropertyFromItem, propsFactory } from "../../../util/index.mjs"; // Types
  4. // Composables
  5. export const makeDataTableItemsProps = propsFactory({
  6. items: {
  7. type: Array,
  8. default: () => []
  9. },
  10. itemValue: {
  11. type: [String, Array, Function],
  12. default: 'id'
  13. },
  14. itemSelectable: {
  15. type: [String, Array, Function],
  16. default: null
  17. },
  18. rowProps: [Object, Function],
  19. cellProps: [Object, Function],
  20. returnObject: Boolean
  21. }, 'DataTable-items');
  22. export function transformItem(props, item, index, columns) {
  23. const value = props.returnObject ? item : getPropertyFromItem(item, props.itemValue);
  24. const selectable = getPropertyFromItem(item, props.itemSelectable, true);
  25. const itemColumns = columns.reduce((obj, column) => {
  26. if (column.key != null) obj[column.key] = getPropertyFromItem(item, column.value);
  27. return obj;
  28. }, {});
  29. return {
  30. type: 'item',
  31. key: props.returnObject ? getPropertyFromItem(item, props.itemValue) : value,
  32. index,
  33. value,
  34. selectable,
  35. columns: itemColumns,
  36. raw: item
  37. };
  38. }
  39. export function transformItems(props, items, columns) {
  40. return items.map((item, index) => transformItem(props, item, index, columns));
  41. }
  42. export function useDataTableItems(props, columns) {
  43. const items = computed(() => transformItems(props, props.items, columns.value));
  44. return {
  45. items
  46. };
  47. }
  48. //# sourceMappingURL=items.mjs.map