/* eslint-disable max-len */ import React, { useEffect, useState } from 'react' import { DataTable, DataTableType, Form, FormItem, Select, SelectOption, Switch, Link } from 'react-icecream' import { ComponentSize } from '../../ConfigProvider' import { TableColumnSelectFilterValue } from '../../Table' import originalRecords, { Record } from './shared-records' const BucketTable: DataTableType = DataTable export default function Demo() { const [size, sizeInput] = useSizeInput('default') const [border, borderInput] = useBorderInput('row') const [zebra, zebraInput] = useZebraInput(false) const [idVisible, idVisibleInput] = useIdVisibleInput(true) const [data, dataInput] = useDataInput('default') const [fixHead, fixHeadInput] = useFixHeadInput(true) const [fixColumn, fixColumnInput] = useFixColumnInput('max-content') const [selection, selectionInput] = useSelectionInput(true) const [selectedIds, setSelectedIds] = useState(['1', '2']) useEffect(() => console.log('Selected:', selectedIds), [selectedIds]) const selectionOptions = { selectedIds, onChange: setSelectedIds, fixed: fixColumn ? 'left' as const : undefined } const [pagination, paginationInput] = usePaginationInput(false) const [paginationAligh, paginationAlighInput] = usePaginationAlignInput('right', pagination) const { records, loading, currentPage, pageSize, total, setPageInfo, filterValue, setFilterValue } = useData(pagination) return (
{sizeInput} {borderInput} {zebraInput}
{paginationInput} {paginationAlighInput}
{dataInput} {idVisibleInput} {selectionInput}
{fixHeadInput} {fixColumnInput}
{idVisible && } `这里是空间 ${record.name} 的备注,balabala...`} /> ( 概览 文件 设置 域名 )} />
) } function useSizeInput(defaultValue?: ComponentSize) { const [value, setValue] = useState(defaultValue) const view = ( ) return [value, view] as const } function useBorderInput(defaultValue?: 'row' | 'full' | 'none') { const [value, setValue] = useState(defaultValue) const view = ( ) return [value, view] as const } function useZebraInput(defaultValue: boolean) { const [value, setValue] = useState(defaultValue) const view = return [value, view] as const } function usePaginationInput(defaultValue: boolean) { const [value, setValue] = useState(defaultValue) const view = ( ) return [value, view] as const } function usePaginationAlignInput(defaultValue: 'center' | 'right', pagination: boolean) { const [value, setValue] = useState(defaultValue) const view = pagination && ( ) return [value, view] as const } function useIdVisibleInput(defaultValue: boolean) { const [value, setValue] = useState(defaultValue) const view = ( ) return [value, view] as const } function useDataInput(defaultValue: 'default' | 'empty') { const [value, setValue] = useState(defaultValue) const view = ( setValue(v ? 'default' : 'empty')} /> ) return [value, view] as const } function useFixHeadInput(defaultValue: boolean) { const [value, setValue] = useState(defaultValue) const view = ( ) return [value, view] as const } function useFixColumnInput(defaultValue: 'disabled' | 'max-content' | '1200px') { const [value, setValue] = useState(defaultValue) const view = ( ) return [value, view] as const } function useSelectionInput(defaultValue: boolean) { const [value, setValue] = useState(defaultValue) const view = ( ) return [value, view] as const } function useData(pagination: boolean) { const [{ currentPage, pageSize }, setPageInfo] = useState({ pageSize: 10, currentPage: 0 }) const [loading, setLoading] = useState(false) const [filterValue, setFilterValue] = useState([]) async function handleSetPageInfo(nextCurrentPage: number, nextPageSize: number) { setLoading(true) await new Promise(r => setTimeout(r, 300)) setLoading(false) setPageInfo({ pageSize: nextPageSize, currentPage: nextCurrentPage }) } let records = originalRecords if (pagination) records = records.slice(currentPage * pageSize, (currentPage + 1) * pageSize) records = records.filter(record => (filterValue.length > 0 ? filterValue.indexOf(record.type) > -1 : true)) return { records, currentPage, pageSize, setPageInfo: handleSetPageInfo, total: originalRecords.length, loading, setFilterValue, filterValue } }