expand.mjs 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. // Composables
  2. import { useProxiedModel } from "../../../composables/proxiedModel.mjs"; // Utilities
  3. import { inject, provide, toRef } from 'vue';
  4. import { propsFactory } from "../../../util/index.mjs"; // Types
  5. export const makeDataTableExpandProps = propsFactory({
  6. expandOnClick: Boolean,
  7. showExpand: Boolean,
  8. expanded: {
  9. type: Array,
  10. default: () => []
  11. }
  12. }, 'DataTable-expand');
  13. export const VDataTableExpandedKey = Symbol.for('vuetify:datatable:expanded');
  14. export function provideExpanded(props) {
  15. const expandOnClick = toRef(props, 'expandOnClick');
  16. const expanded = useProxiedModel(props, 'expanded', props.expanded, v => {
  17. return new Set(v);
  18. }, v => {
  19. return [...v.values()];
  20. });
  21. function expand(item, value) {
  22. const newExpanded = new Set(expanded.value);
  23. if (!value) {
  24. newExpanded.delete(item.value);
  25. } else {
  26. newExpanded.add(item.value);
  27. }
  28. expanded.value = newExpanded;
  29. }
  30. function isExpanded(item) {
  31. return expanded.value.has(item.value);
  32. }
  33. function toggleExpand(item) {
  34. expand(item, !isExpanded(item));
  35. }
  36. const data = {
  37. expand,
  38. expanded,
  39. expandOnClick,
  40. isExpanded,
  41. toggleExpand
  42. };
  43. provide(VDataTableExpandedKey, data);
  44. return data;
  45. }
  46. export function useExpanded() {
  47. const data = inject(VDataTableExpandedKey);
  48. if (!data) throw new Error('foo');
  49. return data;
  50. }
  51. //# sourceMappingURL=expand.mjs.map