{"version":3,"file":"table-grid.mjs","sources":["../../../../../../packages/components/table-v2/src/table-grid.tsx"],"sourcesContent":["import { computed, defineComponent, inject, ref, unref } from 'vue'\nimport {\n  DynamicSizeGrid,\n  FixedSizeGrid,\n} from '@lit-element/components/virtual-list'\nimport { isNumber, isObject } from '@lit-element/utils'\nimport { Header } from './components'\nimport { TableV2InjectionKey } from './tokens'\nimport { tableV2GridProps } from './grid'\nimport { sum } from './utils'\n\nimport type { UnwrapRef } from 'vue'\nimport type {\n  DynamicSizeGridInstance,\n  GridDefaultSlotParams,\n  GridItemKeyGetter,\n  GridItemRenderedEvtParams,\n  GridScrollOptions,\n  ResetAfterIndex,\n  Alignment as ScrollStrategy,\n} from '@lit-element/components/virtual-list'\nimport type { TableV2HeaderInstance } from './components'\nimport type { TableV2GridProps } from './grid'\n\nconst COMPONENT_NAME = 'LtTableV2Grid'\n\nconst useTableGrid = (props: TableV2GridProps) => {\n  const headerRef = ref<TableV2HeaderInstance>()\n  const bodyRef = ref<DynamicSizeGridInstance>()\n\n  const totalHeight = computed(() => {\n    const { data, rowHeight, estimatedRowHeight } = props\n\n    if (estimatedRowHeight) {\n      return\n    }\n\n    return data.length * (rowHeight as number)\n  })\n\n  const fixedRowHeight = computed(() => {\n    const { fixedData, rowHeight } = props\n\n    return (fixedData?.length || 0) * (rowHeight as number)\n  })\n\n  const headerHeight = computed(() => sum(props.headerHeight))\n\n  const gridHeight = computed(() => {\n    const { height } = props\n    return Math.max(0, height - unref(headerHeight) - unref(fixedRowHeight))\n  })\n\n  const hasHeader = computed(() => {\n    return unref(headerHeight) + unref(fixedRowHeight) > 0\n  })\n\n  const itemKey: GridItemKeyGetter = ({ data, rowIndex }) =>\n    data[rowIndex][props.rowKey]\n\n  function onItemRendered({\n    rowCacheStart,\n    rowCacheEnd,\n    rowVisibleStart,\n    rowVisibleEnd,\n  }: GridItemRenderedEvtParams) {\n    props.onRowsRendered?.({\n      rowCacheStart,\n      rowCacheEnd,\n      rowVisibleStart,\n      rowVisibleEnd,\n    })\n  }\n\n  function resetAfterRowIndex(index: number, forceUpdate: boolean) {\n    bodyRef.value?.resetAfterRowIndex(index, forceUpdate)\n  }\n\n  function scrollTo(x: number, y: number): void\n  function scrollTo(options: GridScrollOptions): void\n  function scrollTo(leftOrOptions: number | GridScrollOptions, top?: number) {\n    const header$ = unref(headerRef)\n    const body$ = unref(bodyRef)\n\n    if (isObject(leftOrOptions)) {\n      header$?.scrollToLeft(leftOrOptions.scrollLeft)\n      body$?.scrollTo(leftOrOptions)\n    } else {\n      header$?.scrollToLeft(leftOrOptions)\n      body$?.scrollTo({\n        scrollLeft: leftOrOptions,\n        scrollTop: top,\n      })\n    }\n  }\n\n  function scrollToTop(scrollTop: number) {\n    unref(bodyRef)?.scrollTo({\n      scrollTop,\n    })\n  }\n\n  function scrollToRow(row: number, strategy: ScrollStrategy) {\n    unref(bodyRef)?.scrollToItem(row, 1, strategy)\n  }\n\n  function forceUpdate() {\n    unref(bodyRef)?.$forceUpdate()\n    unref(headerRef)?.$forceUpdate()\n  }\n\n  return {\n    bodyRef,\n    forceUpdate,\n    fixedRowHeight,\n    gridHeight,\n    hasHeader,\n    headerHeight,\n    headerRef,\n    totalHeight,\n\n    itemKey,\n    onItemRendered,\n    resetAfterRowIndex,\n    scrollTo,\n    scrollToTop,\n    scrollToRow,\n  }\n}\n\nconst TableGrid = defineComponent({\n  name: COMPONENT_NAME,\n  props: tableV2GridProps,\n  setup(props, { slots, expose }) {\n    const { ns } = inject(TableV2InjectionKey)!\n\n    const {\n      bodyRef,\n      fixedRowHeight,\n      gridHeight,\n      hasHeader,\n      headerRef,\n      headerHeight,\n      totalHeight,\n\n      forceUpdate,\n      itemKey,\n      onItemRendered,\n      resetAfterRowIndex,\n      scrollTo,\n      scrollToTop,\n      scrollToRow,\n    } = useTableGrid(props)\n\n    expose({\n      forceUpdate,\n      /**\n       * @description fetch total height\n       */\n      totalHeight,\n      /**\n       * @description scroll to a position\n       */\n      scrollTo,\n      /**\n       * @description scroll vertically to position y\n       */\n      scrollToTop,\n      /**\n       * @description scroll to a given row\n       * @params row {Number} which row to scroll to\n       * @params strategy {ScrollStrategy} use what strategy to scroll to\n       */\n      scrollToRow,\n      /**\n       * @description reset rendered state after row index\n       */\n      resetAfterRowIndex,\n    })\n\n    const getColumnWidth = () => props.bodyWidth\n\n    return () => {\n      const {\n        cache,\n        columns,\n        data,\n        fixedData,\n        useIsScrolling,\n        scrollbarAlwaysOn,\n        scrollbarEndGap,\n        scrollbarStartGap,\n        style,\n        rowHeight,\n        bodyWidth,\n        estimatedRowHeight,\n        headerWidth,\n        height,\n        width,\n\n        getRowHeight,\n        onScroll,\n      } = props\n\n      const isDynamicRowEnabled = isNumber(estimatedRowHeight)\n      const Grid = isDynamicRowEnabled ? DynamicSizeGrid : FixedSizeGrid\n      const _headerHeight = unref(headerHeight)\n\n      return (\n        <div role=\"table\" class={[ns.e('table'), props.class]} style={style}>\n          <Grid\n            ref={bodyRef}\n            // special attrs\n            data={data}\n            useIsScrolling={useIsScrolling}\n            itemKey={itemKey}\n            // column attrs\n            columnCache={0}\n            columnWidth={isDynamicRowEnabled ? getColumnWidth : bodyWidth}\n            totalColumn={1}\n            // row attrs\n            totalRow={data.length}\n            rowCache={cache}\n            rowHeight={isDynamicRowEnabled ? getRowHeight : rowHeight}\n            // DOM attrs\n            width={width}\n            height={unref(gridHeight)}\n            class={ns.e('body')}\n            role=\"rowgroup\"\n            scrollbarStartGap={scrollbarStartGap}\n            scrollbarEndGap={scrollbarEndGap}\n            scrollbarAlwaysOn={scrollbarAlwaysOn}\n            // handlers\n            onScroll={onScroll}\n            onItemRendered={onItemRendered}\n            perfMode={false}\n          >\n            {{\n              default: (params: GridDefaultSlotParams) => {\n                const rowData = data[params.rowIndex]\n                return slots.row?.({\n                  ...params,\n                  columns,\n                  rowData,\n                })\n              },\n            }}\n          </Grid>\n          {unref(hasHeader) && (\n            <Header\n              ref={headerRef}\n              class={ns.e('header-wrapper')}\n              columns={columns}\n              headerData={data}\n              headerHeight={props.headerHeight}\n              fixedHeaderData={fixedData}\n              rowWidth={headerWidth}\n              rowHeight={rowHeight}\n              width={width}\n              height={Math.min(_headerHeight + unref(fixedRowHeight), height)}\n            >\n              {{\n                dynamic: slots.header,\n                fixed: slots.row,\n              }}\n            </Header>\n          )}\n        </div>\n      )\n    }\n  },\n})\n\nexport default TableGrid\n\nexport type TableGridRowSlotParams = {\n  columns: TableV2GridProps['columns']\n  rowData: any\n} & GridDefaultSlotParams\n\nexport type TableGridInstance = InstanceType<typeof TableGrid> &\n  UnwrapRef<{\n    forceUpdate: () => void\n    /**\n     * @description fetch total height\n     */\n    totalHeight: number\n\n    /**\n     * @description scrollTo a position\n     * @param { number | ScrollToOptions } arg1\n     * @param { number } arg2\n     */\n    scrollTo(leftOrOptions: number | GridScrollOptions, top?: number): void\n\n    /**\n     * @description scroll vertically to position y\n     */\n    scrollToTop(scrollTop: number): void\n    /**\n     * @description scroll to a given row\n     * @params row {Number} which row to scroll to\n     * @params @optional strategy {ScrollStrategy} use what strategy to scroll to\n     */\n    scrollToRow(row: number, strategy: ScrollStrategy): void\n    /**\n     * @description reset rendered state after row index\n     * @param { number } rowIndex\n     * @param { boolean } forceUpdate\n     */\n    resetAfterRowIndex: ResetAfterIndex\n  }>\n"],"names":["COMPONENT_NAME","useTableGrid","props","headerRef","ref","bodyRef","totalHeight","computed","data","rowHeight","estimatedRowHeight","length","fixedRowHeight","fixedData","headerHeight","sum","gridHeight","height","Math","max","unref","hasHeader","itemKey","rowIndex","rowKey","onItemRendered","rowCacheStart","rowCacheEnd","rowVisibleStart","rowVisibleEnd","onRowsRendered","resetAfterRowIndex","scrollTo","top","leftOrOptions","header$","scrollToLeft","body$","scrollLeft","scrollTop","scrollToTop","scrollToRow","forceUpdate","$forceUpdate","TableGrid","name","setup","expose","ns","inject","cache","columns","useIsScrolling","_createVNode","bodyWidth","headerWidth","width","getRowHeight","onScroll","isDynamicRowEnabled","DynamicSizeGrid","FixedSizeGrid","e","class","style","Grid","Header","default","params","row","rowData"],"mappings":"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"}