{"version":3,"file":"useRows.mjs","sources":["../../../../../../src/components/va-data-table/hooks/useRows.ts"],"sourcesContent":["import { Ref, ref, computed, ExtractPropTypes } from 'vue'\n\nimport { createItemsProp, useItemsTrackByProp } from './useCommonProps'\n\nimport { getValueByPath } from '../../../utils/value-by-key'\n\nimport type {\n  DataTableColumnInternal,\n  DataTableItem,\n  DataTableCell,\n  DataTableRow,\n  DataTableItemKey,\n  DataTableRowData,\n} from '../types'\n\nexport const getItemKey = <T extends Record<string, any>>(source: DataTableItem<T>, itemsTrackBy: string | ((item: DataTableItem<T>) => any)): DataTableItemKey => (\n  typeof itemsTrackBy === 'function'\n    ? itemsTrackBy(source)\n    : getValueByPath(source, itemsTrackBy) || source\n)\n\nexport const createRowsProps = <T extends Record<string, any>>() => ({\n  ...createItemsProp<T>(),\n  ...useItemsTrackByProp,\n})\n\nconst buildTableCell = <Item extends DataTableItem>(\n  rowIndex: number,\n  rowKey: string,\n  rowData: DataTableRowData<Item>,\n  column: DataTableColumnInternal,\n): DataTableCell<Item> => {\n  const source = getValueByPath(rowData, column.key)\n\n  return {\n    rowIndex,\n    rowKey,\n    rowData,\n    column,\n    source: source as string,\n    value: source?.toString?.() || '',\n  }\n}\n\nconst buildTableRow = <Item extends DataTableItem>(\n  source: DataTableItem<Item>,\n  initialIndex: number,\n  itemsTrackBy: string | ((item: DataTableItem<Item>) => any),\n  columns: DataTableColumnInternal[],\n): Omit<DataTableRow<Item>, 'toggleRowDetails' | 'isExpandableRowVisible'> => {\n  const itemKey = getItemKey(source, itemsTrackBy)\n\n  return {\n    initialIndex,\n    itemKey,\n    source,\n    cells: columns.map(column => buildTableCell(initialIndex, itemKey, source, column)),\n    rowData: source,\n  }\n}\n\ntype RowsProps<Item> = Omit<ExtractPropTypes<ReturnType<typeof createRowsProps>>, 'items'> & {\n  items: Item[]\n}\n\nexport const useRows = <Item extends Record<string, any>>(\n  columns: Ref<DataTableColumnInternal[]>,\n  props: RowsProps<Item>,\n) => {\n  const expandableRows = ref<Record<number, boolean>>({})\n\n  const rowsComputed = computed(() => props.items\n    .map((rawItem, index) => ({\n      ...buildTableRow<Item>(rawItem, index, props.itemsTrackBy, columns.value),\n      toggleRowDetails: (show?: boolean) => {\n        if (typeof show === 'boolean') {\n          expandableRows.value[index] = show\n        } else {\n          expandableRows.value[index] = !expandableRows.value[index]\n        }\n      },\n      isExpandableRowVisible: !!expandableRows.value[index],\n    })))\n\n  return {\n    rowsComputed,\n  }\n}\n"],"names":[],"mappings":";;;AAeO,MAAM,aAAa,CAAgC,QAA0B,iBAClF,OAAO,iBAAiB,aACpB,aAAa,MAAM,IACnB,eAAe,QAAQ,YAAY,KAAK;AAGvC,MAAM,kBAAkB,OAAsC;AAAA,EACnE,GAAG,gBAAmB;AAAA,EACtB,GAAG;AACL;AAEA,MAAM,iBAAiB,CACrB,UACA,QACA,SACA,WACwB;;AACxB,QAAM,SAAS,eAAe,SAAS,OAAO,GAAG;AAE1C,SAAA;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAO,sCAAQ,aAAR,oCAAwB;AAAA,EAAA;AAEnC;AAEA,MAAM,gBAAgB,CACpB,QACA,cACA,cACA,YAC4E;AACtE,QAAA,UAAU,WAAW,QAAQ,YAAY;AAExC,SAAA;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO,QAAQ,IAAI,CAAA,WAAU,eAAe,cAAc,SAAS,QAAQ,MAAM,CAAC;AAAA,IAClF,SAAS;AAAA,EAAA;AAEb;AAMa,MAAA,UAAU,CACrB,SACA,UACG;AACG,QAAA,iBAAiB,IAA6B,CAAA,CAAE;AAEhD,QAAA,eAAe,SAAS,MAAM,MAAM,MACvC,IAAI,CAAC,SAAS,WAAW;AAAA,IACxB,GAAG,cAAoB,SAAS,OAAO,MAAM,cAAc,QAAQ,KAAK;AAAA,IACxE,kBAAkB,CAAC,SAAmB;AAChC,UAAA,OAAO,SAAS,WAAW;AACd,uBAAA,MAAM,KAAK,IAAI;AAAA,MAAA,OACzB;AACL,uBAAe,MAAM,KAAK,IAAI,CAAC,eAAe,MAAM,KAAK;AAAA,MAC3D;AAAA,IACF;AAAA,IACA,wBAAwB,CAAC,CAAC,eAAe,MAAM,KAAK;AAAA,IACpD,CAAC;AAEE,SAAA;AAAA,IACL;AAAA,EAAA;AAEJ;"}