export function useTable()

in seatunnel-ui/src/views/virtual-tables/list/use-table.ts [24:112]


export function useTable() {
  const state = reactive({
    params: {
      pluginName: null,
      datasourceName: null
    },
    list: [],
    loading: false,
    page: 1,
    pageSize: 10,
    itemCount: 0
  })
  const route = useRoute()
  const router = useRouter()

  const getList = async () => {
    const result = await getVirtualTableList({
      pageNo: state.page,
      pageSize: state.pageSize,
      pluginName: state.params.pluginName || '',
      datasourceName: state.params.datasourceName || '',
    })
    state.list = result?.data
    state.itemCount = result?.total
  }

  const updateList = () => {
    if (state.list.length === 1 && state.page > 1) {
      --state.page
    }
    getList()
  }

  const onDelete = async (id: string) => {
    await deleteVirtualTable(id)
    updateList()
  }

  const initSearch = () => {
    const { pluginName, datasourceName } = route.query
    if (pluginName) {
      state.params.pluginName = pluginName as any
      if (datasourceName) {
        state.params.datasourceName = datasourceName as any
      }
    }
  }

  const onSearch = () => {
    const query = (
      state.params.pluginName ? { pluginName: state.params.pluginName } : null
    ) as any

    if (state.params.datasourceName) {
      query.datasourceName = state.params.datasourceName
    }

    if (query) {
      router.replace({ query: { tab: route.query.tab, ...query } })
    }

    state.page = 1
    getList()
  }

  const onPageChange = (page: number) => {
    state.page = page
    getList()
  }

  const onPageSizeChange = (pageSize: number) => {
    state.page = 1
    state.pageSize = pageSize
    getList()
  }

  onMounted(() => {
    initSearch()
    onSearch()
  })

  return {
    state,
    onSearch,
    onDelete,
    onPageChange,
    onPageSizeChange
  }
}