<!--
    常规的全页展示数据表格
-->
<script lang="ts">

    import type {FilterFn} from "@ticatec/uniface-element/ListBox";

    import type {ActionsColumn, DataColumn, IndicatorColumn} from "@ticatec/uniface-element/DataTable";
    import {FullListDataManager} from "@ticatec/app-data-manager";
    import {onMount} from "svelte";
    import type {FullListDataService} from "@ticatec/app-data-service";
    import i18nRes from "../i18nRes";
    import type {PageInitialize} from "@ticatec/uniface-micro-frame/common";
    import {useManagedList} from "../common/useManagedList.svelte";
    import LoadDataErrorPage from "../common/LoadDataErrorPage.svelte";
    import SimpleDataTableBoard from "./SimpleDataTableBoard.svelte";
    import type {GetRowFontStyle} from "@ticatec/uniface-element/types";

    interface Props {
        dataManager: FullListDataManager<FullListDataService>;
        initializeData?: PageInitialize;
        indicatorColumn: IndicatorColumn;
        columns: Array<DataColumn>;
        actionsColumn?: ActionsColumn;
        selectedRows?: Array<any>;
        list?: Array<any>;
        filterFn?: FilterFn | null;
        busyIndicator?: string | null;
        rowHeight?: number;
        roundTable?: boolean;
        emptyText?: string;
        getRowFontStyle?: GetRowFontStyle;
        onError?: (ex: any) => void;
    }

    let {
        dataManager,
        initializeData = undefined,
        indicatorColumn,
        columns,
        actionsColumn = undefined,
        selectedRows = $bindable([]),
        list = $bindable([]),
        filterFn = null,
        busyIndicator = null,
        rowHeight = undefined,
        roundTable = false,
        emptyText = undefined,
        getRowFontStyle = undefined,
        onError = undefined
    }: Props = $props();

    const managed = useManagedList({
        dataManager: () => dataManager,
        initializeData: () => initializeData,
        busyIndicator: () => busyIndicator,
        defaultBusyText: i18nRes.app.busyIndicator(),
        onError: () => onError,
        onLoaded: (loadedList) => {
            list = loadedList;
        }
    });

    export function loadList() {
        return managed.load();
    }

    onMount(() => managed.initialize());

</script>
{#if managed.loaded}
    {#if managed.error}
        <LoadDataErrorPage message={managed.error} onRetry={() => managed.initialize()}/>
    {:else }
        <SimpleDataTableBoard {filterFn} {rowHeight} {roundTable} {emptyText} {getRowFontStyle} {indicatorColumn} {columns}
                               {actionsColumn} bind:selectedRows {list}>
        </SimpleDataTableBoard>
    {/if}
{/if}
