import type { TableSettings } from "./types"; import Component from "./TableComponent.vue"; import type * as Types from "./types"; import type { RawTableSettings } from "./types"; import type { ComputedRef } from "vue"; import { computed, h, reactive, unref } from "vue"; import { RawData } from "./adapters/RawData"; import type { MaybeRef } from "../../types"; export { AsyncData } from "./adapters/AsyncData"; type AnyRef = MaybeRef | ComputedRef; export function settings(tableSettings: TableSettings): TableSettings { return Object.freeze(tableSettings) as TableSettings; } export function factory(tableSettings: S) { return h(Component, { settings: Object.freeze(tableSettings) }); } export { Component }; export { Types }; /** * Adapters ***/ export function rawDataSettings( rows: D[], rawSettings: Types.RawTableSettings, ): TableSettings { const dataSource = new RawData( rows, rawSettings.resolveRowHeight, rawSettings.resolvePrimaryKey, ); return { ...rawSettings, dataSource } as TableSettings; } export function useRawData( rowsRef: AnyRef, raw: MaybeRef>, ) { return computed(() => { const rows = unref(rowsRef); return rawDataSettings(rows, unref(raw)); }); } /** * @deprecated * @param rows * @param raw * @returns */ export function useRawDataComponent( rowsRef: AnyRef, raw: MaybeRef>, ) { const settings = computed(() => { const rows = unref(rowsRef); return rawDataSettings(rows, unref(raw)); }); const props = reactive({ settings, }); return computed(() => h(Component, props)); }