@koi-design/uxd-ui 14.0.44 → 14.0.46
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +190 -1
- package/es/components/Table/BaseTable.vue.d.ts +2 -0
- package/es/components/Table/BodyTable.vue.d.ts +2 -0
- package/es/components/Table/HeadTable.vue.d.ts +2 -0
- package/es/components/Table/Table.mjs +15 -1
- package/es/components/Table/Table.mjs.map +1 -1
- package/es/components/Table/Table.type.d.ts +5 -0
- package/es/components/Table/Table.type.mjs +4 -0
- package/es/components/Table/Table.type.mjs.map +1 -1
- package/es/components/Table/Table.vue.d.ts +13 -0
- package/es/components/Table/TableBox.vue.d.ts +4 -0
- package/es/components/Table/hooks/useDraggable.mjs +37 -6
- package/es/components/Table/hooks/useDraggable.mjs.map +1 -1
- package/es/components/Table/tableUnits/DraggableIcon.mjs +17 -3
- package/es/components/Table/tableUnits/DraggableIcon.mjs.map +1 -1
- package/es/components/Table/tableUnits/DraggableIcon.vue.d.ts +1 -0
- package/es/components/Table/tableUnits/ExpandRows.vue.d.ts +1 -0
- package/es/components/Table/tableUnits/TableBody.vue.d.ts +2 -0
- package/es/components/Table/tableUnits/TableCell.mjs +4 -3
- package/es/components/Table/tableUnits/TableCell.mjs.map +1 -1
- package/es/components/Table/tableUnits/TableCell.vue.d.ts +1 -0
- package/es/components/Table/tableUnits/TableRow.vue.d.ts +1 -0
- package/lib/components/Table/BaseTable.vue.d.ts +2 -0
- package/lib/components/Table/BodyTable.vue.d.ts +2 -0
- package/lib/components/Table/HeadTable.vue.d.ts +2 -0
- package/lib/components/Table/Table.js +15 -1
- package/lib/components/Table/Table.js.map +1 -1
- package/lib/components/Table/Table.type.d.ts +5 -0
- package/lib/components/Table/Table.type.js +4 -0
- package/lib/components/Table/Table.type.js.map +1 -1
- package/lib/components/Table/Table.vue.d.ts +13 -0
- package/lib/components/Table/TableBox.vue.d.ts +4 -0
- package/lib/components/Table/hooks/useDraggable.js +37 -6
- package/lib/components/Table/hooks/useDraggable.js.map +1 -1
- package/lib/components/Table/tableUnits/DraggableIcon.js +17 -3
- package/lib/components/Table/tableUnits/DraggableIcon.js.map +1 -1
- package/lib/components/Table/tableUnits/DraggableIcon.vue.d.ts +1 -0
- package/lib/components/Table/tableUnits/ExpandRows.vue.d.ts +1 -0
- package/lib/components/Table/tableUnits/TableBody.vue.d.ts +2 -0
- package/lib/components/Table/tableUnits/TableCell.js +4 -3
- package/lib/components/Table/tableUnits/TableCell.js.map +1 -1
- package/lib/components/Table/tableUnits/TableCell.vue.d.ts +1 -0
- package/lib/components/Table/tableUnits/TableRow.vue.d.ts +1 -0
- package/package.json +1 -1
- package/types/components/Table/BaseTable.vue.d.ts +2 -0
- package/types/components/Table/BodyTable.vue.d.ts +2 -0
- package/types/components/Table/HeadTable.vue.d.ts +2 -0
- package/types/components/Table/Table.type.d.ts +5 -0
- package/types/components/Table/Table.vue.d.ts +13 -0
- package/types/components/Table/TableBox.vue.d.ts +4 -0
- package/types/components/Table/tableUnits/DraggableIcon.vue.d.ts +1 -0
- package/types/components/Table/tableUnits/ExpandRows.vue.d.ts +1 -0
- package/types/components/Table/tableUnits/TableBody.vue.d.ts +2 -0
- package/types/components/Table/tableUnits/TableCell.vue.d.ts +1 -0
- package/types/components/Table/tableUnits/TableRow.vue.d.ts +1 -0
- package/uxd-ui.esm.min.mjs +6 -6
- package/uxd-ui.esm.mjs +78 -14
- package/uxd-ui.umd.js +78 -14
- package/uxd-ui.umd.min.js +6 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Table.type.js","sources":["../../../../src/components/Table/Table.type.ts"],"sourcesContent":["import type { Component, ComputedRef, CSSProperties, ExtractPropTypes, PropType, Ref, Slot, Slots, VNodeChild } from 'vue';\nimport type { JSX } from 'vue/jsx-runtime';\nimport { normalSizeMap } from '../../utils/globalType';\nimport { oneOf } from '../../utils/propsValidators';\nimport type { EmitFn, NormalSizeMap } from '../../utils/globalType';\nimport type { TableLocal } from '../locale/default';\nimport type { PaginationProps } from '../Pagination/Pagination.type';\nimport type Table from './Table.vue';\nimport type { RowData } from './hooks/useDraggable';\n\nexport type ColumnFixed = boolean | 'left' | 'right';\nexport type ColumnAlign = 'left' | 'right' | 'center';\nexport type ColumnSortOrder = 'ascend' | 'descend';\nexport type ColumnSortFn = (a: any, b: any) => number;\nexport interface ColumnFilter {\n label: string;\n value: string | number;\n}\nexport type ColumnFilterFn = (value: string | number, row: any) => boolean;\nexport interface ColumnSlotParams {\n row: any;\n index: number;\n rowKey: string | number;\n pagination: Partial<PaginationProps>;\n column: InnerColumn;\n}\n\nexport interface TableColProps {\n width: string;\n key: string;\n fixed: boolean;\n minWidth: string;\n resizeWidth: string;\n className: string;\n}\n\nexport interface ColumnFilterSlotParams {\n selectedKeys: (string | number)[];\n setSelectedKeys: (keys: (string | number)[]) => void;\n confirm: () => void;\n column: InnerColumn;\n}\n\nexport interface TableColumnSkeleton {\n type: 'circle' | 'rect' | 'text' | 'p' | 'image';\n style: CSSProperties;\n}\nexport interface TableColumn {\n key: string;\n title?: string;\n dataIndex?: string;\n width?: number | string;\n minWidth?: number;\n children?: TableColumn[];\n fixed?: ColumnFixed;\n align?: ColumnAlign;\n ellipsis?: boolean;\n sortable?: boolean | 'custom';\n sortOrder?: ColumnSortOrder;\n sortDirections?: ColumnSortOrder[];\n sortFn?: ColumnSortFn;\n filterable?: boolean;\n filters?: ColumnFilter[];\n filterFn?: ColumnFilterFn;\n filterIcon?: string | Component;\n filterIconStyle?: CSSProperties;\n filterMultiple?: boolean;\n filteredValue?: (string | number)[];\n onFilterDropdownVisibleChange?: (visible: boolean) => void;\n slot?: string;\n titleSlot?: string;\n filterSlot?: string;\n render?: (param: ColumnSlotParams) => VNodeChild | JSX.Element;\n titleRender?: (column: TableColumn) => VNodeChild | JSX.Element;\n filterRender?: (param: ColumnFilterSlotParams) => VNodeChild | JSX.Element;\n resizable?: boolean;\n customCell?: (row: any, index: number) => Record<string, any>;\n className?: string;\n hideSummary?: boolean;\n summarySlot?: string;\n summaryRender?: (sum?: number) => VNodeChild | JSX.Element;\n customSummaryCell?: () => Record<string, any>;\n autoSummary?: boolean;\n tips?: string;\n skeleton?: TableColumnSkeleton[];\n\n // draggable?: boolean;\n // handleDragStart?: (event: MouseEvent, param: ColumnSlotParams) => void;\n // render?: (param: ColumnSlotParams, handleDragStart?: (event: MouseEvent, DragParam: ColumnSlotParams) => void) => VNodeChild | JSX.Element;\n}\n\nexport interface InnerColumn extends TableColumn {\n _index?: number;\n rowSpan?: number;\n colSpan?: number;\n children?: InnerColumn[];\n type?: string;\n summaryRender?: (sum?: number) => VNodeChild | JSX.Element;\n left?: number;\n right?: number;\n lastLeft?: boolean;\n firstRight?: boolean;\n _isRightEdge?: boolean;\n}\n\nexport type SelectionType = 'checkbox' | 'radio';\nexport interface SelectionMenu {\n key: string;\n text: string;\n onSelect?: (rows: any[]) => void;\n}\nexport interface SelectionConfig {\n selectedKeys: (string | number)[] | undefined;\n type?: SelectionType;\n setSelectionProps?: (row: any, index: any) => Record<string, any>;\n selectionMenus?: SelectionMenu[];\n hideDefaultMenus?: boolean;\n onChange?: (keys: (string | number)[], selectedRows: any[]) => void;\n onSelect?: (data: any, checked: boolean, selectedRows: any[], event: any) => void;\n onSelectMultiple?: (checked: boolean, selectedRows: any[], changeRows: any[]) => void;\n onSelectAll?: (checked: boolean, selectedRows: any[], changeRows: any[]) => void;\n onSelectInvert?: (keys: (string | number)[]) => void;\n columnWidth?: number;\n fixed?: ColumnFixed;\n showCheckAll?: boolean;\n}\n\nexport interface DraggableConfig {\n fixed?: ColumnFixed;\n onDragDrop: (sourceRowKey: string | number, targetRowKey: string | number) => void;\n}\n\nexport type PaginationPosition = 'top' | 'bottom' | 'both' | undefined;\nexport type PaginationAlign = 'left' | 'right' | undefined;\nexport interface PaginationConfig extends Partial<PaginationProps> {\n position: PaginationPosition;\n align: PaginationAlign;\n}\n\nexport interface InnerDataItem {\n _index: number;\n _key: string | number;\n _isSkeleton?: boolean;\n dataRef: Record<string, any>;\n children?: InnerColumn[];\n}\n\nexport type RowClassName = (row: Record<string, any>, index: number) => string;\nexport type GetRowKey = (row: Record<string, any>, index: number) => string | number;\n\nexport const tableProps = {\n data: {\n type: Array as PropType<Record<string, any>[]>,\n default: () => [] as Record<string, any>[]\n },\n columns: {\n type: Array as PropType<TableColumn[]>,\n default: () => [] as TableColumn[]\n },\n border: {\n type: Boolean,\n default: false\n },\n showHeader: {\n type: Boolean,\n default: true\n },\n width: {\n type: [Number, String]\n },\n maxHeight: {\n type: [Number, String]\n },\n loading: {\n type: Boolean,\n default: false\n },\n size: {\n type: String as PropType<NormalSizeMap>,\n default: 'default',\n validator: oneOf(normalSizeMap)\n },\n disabledHover: {\n type: Boolean,\n default: false\n },\n rowKey: {\n type: [Function, String] as PropType<string | GetRowKey>,\n default: 'key'\n },\n rowClassName: {\n type: Function as PropType<RowClassName>\n },\n expandIcon: {\n type: String\n },\n defaultExpandAllRows: {\n type: Boolean,\n default: false\n },\n expandedRowKeys: {\n type: Array as PropType<string[]>\n },\n treeIconColumnIndex: {\n type: Number\n },\n defaultShowAllChildren: {\n type: Boolean,\n default: false\n },\n showChildrenRowKeys: {\n type: Array as PropType<string[]>\n },\n indentSize: {\n type: Number,\n default: 20\n },\n selection: {\n type: Object as PropType<SelectionConfig>\n },\n locale: {\n type: Object as PropType<TableLocal>\n },\n stripe: {\n type: Boolean,\n default: false\n },\n showPagination: {\n type: Boolean,\n default: false\n },\n pagination: {\n type: Object as PropType<PaginationConfig>\n },\n showSummary: {\n type: Boolean,\n default: false\n },\n expandFix: {\n type: Boolean,\n default: false\n },\n expandIndent: {\n type: Boolean,\n default: true\n },\n draggable: {\n type: Object as PropType<DraggableConfig>\n },\n headerSticky: {\n type: Number,\n default: undefined as undefined\n },\n variant: {\n type: String as PropType<'surface' | 'ghost' | 'border'>,\n default: 'ghost'\n },\n radius: {\n type: Boolean,\n default: false\n },\n loadingType: {\n type: String as PropType<'spinner' | 'skeleton'>,\n default: 'spinner'\n },\n skeletonRows: {\n type: Number,\n default: 3\n }\n};\nexport type TableProps = ExtractPropTypes<typeof tableProps>;\n\nexport type SaveRef = (key: string) => (el: any) => void;\nexport type TableRefs = Record<string, any>;\nexport interface ExpandParams {\n row: any;\n rowKey: string | number;\n async?: boolean;\n done?: () => void;\n tree?: boolean;\n}\nexport interface TableContext {\n prefixCls: ComputedRef<string>;\n locale: ComputedRef<TableLocal>;\n data: ComputedRef<InnerDataItem[]>;\n saveRef: SaveRef;\n tableRefs: TableRefs;\n showResizeLine: Ref<boolean>;\n props: {\n showHeader: Ref<boolean>;\n maxHeight: Ref<string | number | undefined>;\n expandIcon: Ref<string | undefined>;\n rowClassName: Ref<RowClassName>;\n indentSize: Ref<number>;\n emptyText: ComputedRef<string>;\n showSummary: Ref<boolean>;\n disabledHover: Ref<boolean>;\n expandIndent: Ref<boolean>;\n headerSticky: Ref<number | undefined>;\n loading: Ref<boolean>;\n width: Ref<string | number | undefined>;\n };\n slots: Slots;\n expand: {\n expandedRowRender: ComputedRef<Slot | undefined>;\n expandedRowKeys: Ref<(string | number)[]>;\n showChildrenRowKeys: Ref<(string | number)[]>;\n isRowExpanded: (rowKey: string | number, tree: boolean) => boolean;\n expandIconColumnIndex: ComputedRef<number>;\n handleExpandChange: ({ row, rowKey, async, done, tree }: ExpandParams, e: Event) => void;\n isTreeTable: ComputedRef<boolean>;\n };\n size: {\n tableWidth: Ref<number>;\n resizeColumns: Ref<InnerColumn[]>;\n columnWidths: Ref<Record<string, number>>;\n syncColumnWidth: (width: number, column: InnerColumn) => void;\n // sizesMap: Record<string, number>;\n isScrollX: ComputedRef<boolean>;\n setResizeWidth: (column: InnerColumn, width: number) => void;\n handleColumnResize: (columnWidth: number, changeWidth: number, column: InnerColumn, event: Event) => void;\n debouncedHandleResize: any;\n };\n fixed: {\n isColumnFixed: ComputedRef<boolean>;\n currentHoverKey: Ref<string | number | null>;\n };\n draggable: {\n setRowRefs: (val: RowData) => void;\n };\n rowEvents: {\n onRowMouseEnter: (data: Record<string, any>, index: number, e: Event) => void;\n onRowMouseLeave: (data: Record<string, any>, index: number, e: Event) => void;\n onRowClick: (data: Record<string, any>, index: number, e: Event) => void;\n onRowDoubleClick: (data: Record<string, any>, index: number, e: Event) => void;\n onRowContextMenu: (data: Record<string, any>, index: number, e: Event) => void;\n };\n headerEvents: {\n onHeaderCellClick: (column: InnerColumn, e: any) => void;\n };\n filterAndSorter: {\n hasAction: (column: InnerColumn) => boolean;\n hasSorters: (column: InnerColumn) => boolean;\n hasFilters: (column: InnerColumn) => boolean;\n isSortColumn: (column: InnerColumn) => boolean;\n isAscend: (column: InnerColumn) => boolean;\n isDescend: (column: InnerColumn) => boolean;\n isFiltered: (column: InnerColumn) => boolean;\n hasAscend: (column: InnerColumn) => boolean;\n hasDescend: (column: InnerColumn) => boolean;\n toggleSortOrder: (column: InnerColumn) => void;\n setColumnFilter: (column: InnerColumn, selectedKeys: (string | number)[]) => void;\n };\n isSummary: boolean;\n pagination: PaginationProps;\n}\n\nconst rowEmitFn = (data: Record<string, any>, index: number, e: Event) => typeof data === 'object' && typeof index === 'number' && e instanceof Event;\nexport const tableEmits = {\n 'row-mouseenter': rowEmitFn,\n 'row-mouseleave': rowEmitFn,\n 'row-click': rowEmitFn,\n 'row-doubleclick': rowEmitFn,\n 'row-contextmenu': rowEmitFn,\n 'header-click': (column: TableColumn, e: Event) => typeof column === 'object' && e instanceof Event,\n 'column-resize': (columnWidth: number, changeWidth: number, column: InnerColumn, event: Event) =>\n typeof columnWidth === 'number' && typeof changeWidth === 'number' && typeof column === 'object' && event instanceof Event,\n expand: (expanded: boolean, row: Record<string, any>, type: string) =>\n typeof expanded === 'boolean' && typeof row === 'object' && typeof type === 'string',\n 'async-expand': (row: any, done: (() => void) | undefined, keys: (string | number)[]) =>\n typeof row === 'object' && Array.isArray(keys) && typeof done === 'function',\n change: (\n pagination: PaginationProps,\n sort: { column: TableColumn | null; order: ColumnSortOrder | null },\n filter: Record<string, (string | number)[]> | null\n ) => !(pagination === null && sort === null && filter === null)\n};\n\nexport type TableEmits = typeof tableEmits;\nexport type TableEmit = EmitFn<TableEmits>;\nexport type TableInstanceType = InstanceType<typeof Table>;\n"],"names":["oneOf","normalSizeMap"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Table.type.js","sources":["../../../../src/components/Table/Table.type.ts"],"sourcesContent":["import type { Component, ComputedRef, CSSProperties, ExtractPropTypes, PropType, Ref, Slot, Slots, VNodeChild } from 'vue';\nimport type { JSX } from 'vue/jsx-runtime';\nimport { normalSizeMap } from '../../utils/globalType';\nimport { oneOf } from '../../utils/propsValidators';\nimport type { EmitFn, NormalSizeMap } from '../../utils/globalType';\nimport type { TableLocal } from '../locale/default';\nimport type { PaginationProps } from '../Pagination/Pagination.type';\nimport type Table from './Table.vue';\nimport type { RowData } from './hooks/useDraggable';\n\nexport type ColumnFixed = boolean | 'left' | 'right';\nexport type ColumnAlign = 'left' | 'right' | 'center';\nexport type ColumnSortOrder = 'ascend' | 'descend';\nexport type ColumnSortFn = (a: any, b: any) => number;\nexport interface ColumnFilter {\n label: string;\n value: string | number;\n}\nexport type ColumnFilterFn = (value: string | number, row: any) => boolean;\nexport interface ColumnSlotParams {\n row: any;\n index: number;\n rowKey: string | number;\n pagination: Partial<PaginationProps>;\n column: InnerColumn;\n}\n\nexport interface TableColProps {\n width: string;\n key: string;\n fixed: boolean;\n minWidth: string;\n resizeWidth: string;\n className: string;\n}\n\nexport interface ColumnFilterSlotParams {\n selectedKeys: (string | number)[];\n setSelectedKeys: (keys: (string | number)[]) => void;\n confirm: () => void;\n column: InnerColumn;\n}\n\nexport interface TableColumnSkeleton {\n type: 'circle' | 'rect' | 'text' | 'p' | 'image';\n style: CSSProperties;\n}\nexport interface TableColumn {\n key: string;\n title?: string;\n dataIndex?: string;\n width?: number | string;\n minWidth?: number;\n children?: TableColumn[];\n fixed?: ColumnFixed;\n align?: ColumnAlign;\n ellipsis?: boolean;\n sortable?: boolean | 'custom';\n sortOrder?: ColumnSortOrder;\n sortDirections?: ColumnSortOrder[];\n sortFn?: ColumnSortFn;\n filterable?: boolean;\n filters?: ColumnFilter[];\n filterFn?: ColumnFilterFn;\n filterIcon?: string | Component;\n filterIconStyle?: CSSProperties;\n filterMultiple?: boolean;\n filteredValue?: (string | number)[];\n onFilterDropdownVisibleChange?: (visible: boolean) => void;\n slot?: string;\n titleSlot?: string;\n filterSlot?: string;\n render?: (param: ColumnSlotParams) => VNodeChild | JSX.Element;\n titleRender?: (column: TableColumn) => VNodeChild | JSX.Element;\n filterRender?: (param: ColumnFilterSlotParams) => VNodeChild | JSX.Element;\n resizable?: boolean;\n customCell?: (row: any, index: number) => Record<string, any>;\n className?: string;\n hideSummary?: boolean;\n summarySlot?: string;\n summaryRender?: (sum?: number) => VNodeChild | JSX.Element;\n customSummaryCell?: () => Record<string, any>;\n autoSummary?: boolean;\n tips?: string;\n skeleton?: TableColumnSkeleton[];\n\n // draggable?: boolean;\n // handleDragStart?: (event: MouseEvent, param: ColumnSlotParams) => void;\n // render?: (param: ColumnSlotParams, handleDragStart?: (event: MouseEvent, DragParam: ColumnSlotParams) => void) => VNodeChild | JSX.Element;\n}\n\nexport interface InnerColumn extends TableColumn {\n _index?: number;\n rowSpan?: number;\n colSpan?: number;\n children?: InnerColumn[];\n type?: string;\n summaryRender?: (sum?: number) => VNodeChild | JSX.Element;\n left?: number;\n right?: number;\n lastLeft?: boolean;\n firstRight?: boolean;\n _isRightEdge?: boolean;\n}\n\nexport type SelectionType = 'checkbox' | 'radio';\nexport interface SelectionMenu {\n key: string;\n text: string;\n onSelect?: (rows: any[]) => void;\n}\nexport interface SelectionConfig {\n selectedKeys: (string | number)[] | undefined;\n type?: SelectionType;\n setSelectionProps?: (row: any, index: any) => Record<string, any>;\n selectionMenus?: SelectionMenu[];\n hideDefaultMenus?: boolean;\n onChange?: (keys: (string | number)[], selectedRows: any[]) => void;\n onSelect?: (data: any, checked: boolean, selectedRows: any[], event: any) => void;\n onSelectMultiple?: (checked: boolean, selectedRows: any[], changeRows: any[]) => void;\n onSelectAll?: (checked: boolean, selectedRows: any[], changeRows: any[]) => void;\n onSelectInvert?: (keys: (string | number)[]) => void;\n columnWidth?: number;\n fixed?: ColumnFixed;\n showCheckAll?: boolean;\n}\n\nexport interface DraggableConfig {\n fixed?: ColumnFixed;\n onDragDrop: (sourceRowKey: string | number, targetRowKey: string | number) => void;\n}\n\nexport type PaginationPosition = 'top' | 'bottom' | 'both' | undefined;\nexport type PaginationAlign = 'left' | 'right' | undefined;\nexport interface PaginationConfig extends Partial<PaginationProps> {\n position: PaginationPosition;\n align: PaginationAlign;\n}\n\nexport interface InnerDataItem {\n _index: number;\n _key: string | number;\n _isSkeleton?: boolean;\n dataRef: Record<string, any>;\n children?: InnerColumn[];\n}\n\nexport type RowClassName = (row: Record<string, any>, index: number) => string;\nexport type GetRowKey = (row: Record<string, any>, index: number) => string | number;\n\nexport const tableProps = {\n data: {\n type: Array as PropType<Record<string, any>[]>,\n default: () => [] as Record<string, any>[]\n },\n columns: {\n type: Array as PropType<TableColumn[]>,\n default: () => [] as TableColumn[]\n },\n border: {\n type: Boolean,\n default: false\n },\n showHeader: {\n type: Boolean,\n default: true\n },\n width: {\n type: [Number, String]\n },\n maxHeight: {\n type: [Number, String]\n },\n loading: {\n type: Boolean,\n default: false\n },\n size: {\n type: String as PropType<NormalSizeMap>,\n default: 'default',\n validator: oneOf(normalSizeMap)\n },\n disabledHover: {\n type: Boolean,\n default: false\n },\n rowKey: {\n type: [Function, String] as PropType<string | GetRowKey>,\n default: 'key'\n },\n rowClassName: {\n type: Function as PropType<RowClassName>\n },\n expandIcon: {\n type: String\n },\n defaultExpandAllRows: {\n type: Boolean,\n default: false\n },\n expandedRowKeys: {\n type: Array as PropType<string[]>\n },\n treeIconColumnIndex: {\n type: Number\n },\n defaultShowAllChildren: {\n type: Boolean,\n default: false\n },\n showChildrenRowKeys: {\n type: Array as PropType<string[]>\n },\n indentSize: {\n type: Number,\n default: 20\n },\n selection: {\n type: Object as PropType<SelectionConfig>\n },\n locale: {\n type: Object as PropType<TableLocal>\n },\n stripe: {\n type: Boolean,\n default: false\n },\n showPagination: {\n type: Boolean,\n default: false\n },\n pagination: {\n type: Object as PropType<PaginationConfig>\n },\n showSummary: {\n type: Boolean,\n default: false\n },\n expandFix: {\n type: Boolean,\n default: false\n },\n expandIndent: {\n type: Boolean,\n default: true\n },\n draggable: {\n type: Object as PropType<DraggableConfig>\n },\n headerSticky: {\n type: Number,\n default: undefined as undefined\n },\n variant: {\n type: String as PropType<'surface' | 'ghost' | 'border'>,\n default: 'ghost'\n },\n radius: {\n type: Boolean,\n default: false\n },\n loadingType: {\n type: String as PropType<'spinner' | 'skeleton'>,\n default: 'spinner'\n },\n skeletonRows: {\n type: Number,\n default: 3\n },\n cellEmptyText: {\n type: String,\n default: ''\n }\n};\nexport type TableProps = ExtractPropTypes<typeof tableProps>;\n\nexport type SaveRef = (key: string) => (el: any) => void;\nexport type TableRefs = Record<string, any>;\nexport interface ExpandParams {\n row: any;\n rowKey: string | number;\n async?: boolean;\n done?: () => void;\n tree?: boolean;\n}\nexport interface TableContext {\n prefixCls: ComputedRef<string>;\n locale: ComputedRef<TableLocal>;\n data: ComputedRef<InnerDataItem[]>;\n saveRef: SaveRef;\n tableRefs: TableRefs;\n showResizeLine: Ref<boolean>;\n props: {\n showHeader: Ref<boolean>;\n maxHeight: Ref<string | number | undefined>;\n expandIcon: Ref<string | undefined>;\n rowClassName: Ref<RowClassName>;\n indentSize: Ref<number>;\n emptyText: ComputedRef<string>;\n cellEmptyText: Ref<string>;\n showSummary: Ref<boolean>;\n disabledHover: Ref<boolean>;\n expandIndent: Ref<boolean>;\n headerSticky: Ref<number | undefined>;\n loading: Ref<boolean>;\n width: Ref<string | number | undefined>;\n };\n slots: Slots;\n expand: {\n expandedRowRender: ComputedRef<Slot | undefined>;\n expandedRowKeys: Ref<(string | number)[]>;\n showChildrenRowKeys: Ref<(string | number)[]>;\n isRowExpanded: (rowKey: string | number, tree: boolean) => boolean;\n expandIconColumnIndex: ComputedRef<number>;\n handleExpandChange: ({ row, rowKey, async, done, tree }: ExpandParams, e: Event) => void;\n isTreeTable: ComputedRef<boolean>;\n };\n size: {\n tableWidth: Ref<number>;\n resizeColumns: Ref<InnerColumn[]>;\n columnWidths: Ref<Record<string, number>>;\n syncColumnWidth: (width: number, column: InnerColumn) => void;\n // sizesMap: Record<string, number>;\n isScrollX: ComputedRef<boolean>;\n setResizeWidth: (column: InnerColumn, width: number) => void;\n handleColumnResize: (columnWidth: number, changeWidth: number, column: InnerColumn, event: Event) => void;\n debouncedHandleResize: any;\n };\n fixed: {\n isColumnFixed: ComputedRef<boolean>;\n currentHoverKey: Ref<string | number | null>;\n };\n draggable: {\n setRowRefs: (val: RowData) => void;\n };\n rowEvents: {\n onRowMouseEnter: (data: Record<string, any>, index: number, e: Event) => void;\n onRowMouseLeave: (data: Record<string, any>, index: number, e: Event) => void;\n onRowClick: (data: Record<string, any>, index: number, e: Event) => void;\n onRowDoubleClick: (data: Record<string, any>, index: number, e: Event) => void;\n onRowContextMenu: (data: Record<string, any>, index: number, e: Event) => void;\n };\n headerEvents: {\n onHeaderCellClick: (column: InnerColumn, e: any) => void;\n };\n filterAndSorter: {\n hasAction: (column: InnerColumn) => boolean;\n hasSorters: (column: InnerColumn) => boolean;\n hasFilters: (column: InnerColumn) => boolean;\n isSortColumn: (column: InnerColumn) => boolean;\n isAscend: (column: InnerColumn) => boolean;\n isDescend: (column: InnerColumn) => boolean;\n isFiltered: (column: InnerColumn) => boolean;\n hasAscend: (column: InnerColumn) => boolean;\n hasDescend: (column: InnerColumn) => boolean;\n toggleSortOrder: (column: InnerColumn) => void;\n setColumnFilter: (column: InnerColumn, selectedKeys: (string | number)[]) => void;\n };\n isSummary: boolean;\n pagination: PaginationProps;\n}\n\nconst rowEmitFn = (data: Record<string, any>, index: number, e: Event) => typeof data === 'object' && typeof index === 'number' && e instanceof Event;\nexport const tableEmits = {\n 'row-mouseenter': rowEmitFn,\n 'row-mouseleave': rowEmitFn,\n 'row-click': rowEmitFn,\n 'row-doubleclick': rowEmitFn,\n 'row-contextmenu': rowEmitFn,\n 'header-click': (column: TableColumn, e: Event) => typeof column === 'object' && e instanceof Event,\n 'column-resize': (columnWidth: number, changeWidth: number, column: InnerColumn, event: Event) =>\n typeof columnWidth === 'number' && typeof changeWidth === 'number' && typeof column === 'object' && event instanceof Event,\n expand: (expanded: boolean, row: Record<string, any>, type: string) =>\n typeof expanded === 'boolean' && typeof row === 'object' && typeof type === 'string',\n 'async-expand': (row: any, done: (() => void) | undefined, keys: (string | number)[]) =>\n typeof row === 'object' && Array.isArray(keys) && typeof done === 'function',\n change: (\n pagination: PaginationProps,\n sort: { column: TableColumn | null; order: ColumnSortOrder | null },\n filter: Record<string, (string | number)[]> | null\n ) => !(pagination === null && sort === null && filter === null)\n};\n\nexport type TableEmits = typeof tableEmits;\nexport type TableEmit = EmitFn<TableEmits>;\nexport type TableInstanceType = InstanceType<typeof Table>;\n"],"names":["oneOf","normalSizeMap"],"mappings":"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"}
|
|
@@ -118,6 +118,10 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
|
|
|
118
118
|
type: NumberConstructor;
|
|
119
119
|
default: number;
|
|
120
120
|
};
|
|
121
|
+
cellEmptyText: {
|
|
122
|
+
type: StringConstructor;
|
|
123
|
+
default: string;
|
|
124
|
+
};
|
|
121
125
|
}>, {
|
|
122
126
|
prefixCls: import("vue").ComputedRef<string>;
|
|
123
127
|
saveRef: SaveRef;
|
|
@@ -300,6 +304,10 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
|
|
|
300
304
|
type: NumberConstructor;
|
|
301
305
|
default: number;
|
|
302
306
|
};
|
|
307
|
+
cellEmptyText: {
|
|
308
|
+
type: StringConstructor;
|
|
309
|
+
default: string;
|
|
310
|
+
};
|
|
303
311
|
}>> & Readonly<{
|
|
304
312
|
onChange?: (pagination: import("@koi-design/uxd-ui/es/components/Pagination").PaginationProps, sort: {
|
|
305
313
|
column: TableColumn | null;
|
|
@@ -336,6 +344,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
|
|
|
336
344
|
headerSticky: number;
|
|
337
345
|
loadingType: "spinner" | "skeleton";
|
|
338
346
|
skeletonRows: number;
|
|
347
|
+
cellEmptyText: string;
|
|
339
348
|
}, {}, {
|
|
340
349
|
TableBox: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
341
350
|
columns: {
|
|
@@ -4780,6 +4789,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
|
|
|
4780
4789
|
target: HTMLElement;
|
|
4781
4790
|
width: number;
|
|
4782
4791
|
}) => void;
|
|
4792
|
+
cellEmptyText: import("vue").Ref<string, string>;
|
|
4783
4793
|
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
4784
4794
|
prefixCls: {
|
|
4785
4795
|
type: StringConstructor;
|
|
@@ -6082,6 +6092,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
|
|
|
6082
6092
|
target: HTMLElement;
|
|
6083
6093
|
width: number;
|
|
6084
6094
|
}) => void;
|
|
6095
|
+
cellEmptyText: import("vue").Ref<string, string>;
|
|
6085
6096
|
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
6086
6097
|
prefixCls: {
|
|
6087
6098
|
type: StringConstructor;
|
|
@@ -11720,6 +11731,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
|
|
|
11720
11731
|
target: HTMLElement;
|
|
11721
11732
|
width: number;
|
|
11722
11733
|
}) => void;
|
|
11734
|
+
cellEmptyText: import("vue").Ref<string, string>;
|
|
11723
11735
|
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
11724
11736
|
prefixCls: {
|
|
11725
11737
|
type: StringConstructor;
|
|
@@ -13022,6 +13034,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
|
|
|
13022
13034
|
target: HTMLElement;
|
|
13023
13035
|
width: number;
|
|
13024
13036
|
}) => void;
|
|
13037
|
+
cellEmptyText: import("vue").Ref<string, string>;
|
|
13025
13038
|
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
13026
13039
|
prefixCls: {
|
|
13027
13040
|
type: StringConstructor;
|
|
@@ -4443,6 +4443,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
|
|
|
4443
4443
|
target: HTMLElement;
|
|
4444
4444
|
width: number;
|
|
4445
4445
|
}) => void;
|
|
4446
|
+
cellEmptyText: import("vue").Ref<string, string>;
|
|
4446
4447
|
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
4447
4448
|
prefixCls: {
|
|
4448
4449
|
type: StringConstructor;
|
|
@@ -5745,6 +5746,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
|
|
|
5745
5746
|
target: HTMLElement;
|
|
5746
5747
|
width: number;
|
|
5747
5748
|
}) => void;
|
|
5749
|
+
cellEmptyText: import("vue").Ref<string, string>;
|
|
5748
5750
|
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
5749
5751
|
prefixCls: {
|
|
5750
5752
|
type: StringConstructor;
|
|
@@ -11383,6 +11385,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
|
|
|
11383
11385
|
target: HTMLElement;
|
|
11384
11386
|
width: number;
|
|
11385
11387
|
}) => void;
|
|
11388
|
+
cellEmptyText: import("vue").Ref<string, string>;
|
|
11386
11389
|
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
11387
11390
|
prefixCls: {
|
|
11388
11391
|
type: StringConstructor;
|
|
@@ -12685,6 +12688,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
|
|
|
12685
12688
|
target: HTMLElement;
|
|
12686
12689
|
width: number;
|
|
12687
12690
|
}) => void;
|
|
12691
|
+
cellEmptyText: import("vue").Ref<string, string>;
|
|
12688
12692
|
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
12689
12693
|
prefixCls: {
|
|
12690
12694
|
type: StringConstructor;
|
|
@@ -45,12 +45,22 @@ function useDraggable(props, tableRefs) {
|
|
|
45
45
|
}, {
|
|
46
46
|
flush: "post"
|
|
47
47
|
});
|
|
48
|
+
const getClientY = (event) => {
|
|
49
|
+
if ("touches" in event && event.touches.length > 0) {
|
|
50
|
+
return event.touches[0].clientY;
|
|
51
|
+
}
|
|
52
|
+
if ("clientY" in event) {
|
|
53
|
+
return event.clientY;
|
|
54
|
+
}
|
|
55
|
+
return 0;
|
|
56
|
+
};
|
|
48
57
|
const setRowRefsTranslate = (event) => {
|
|
49
58
|
const currentRowData = rowDataMap.value[sourceRowKey];
|
|
50
59
|
const {
|
|
51
60
|
height: currentHeight
|
|
52
61
|
} = currentRowData.rowRef[0].value.getBoundingClientRect();
|
|
53
|
-
const
|
|
62
|
+
const clientY = getClientY(event);
|
|
63
|
+
const realClientY = clientY + tableRefs.bodyTable.wrapRef.scrollTop;
|
|
54
64
|
const safeTranslateY = Math.max(relativeMinY, Math.min(realClientY - dragStartPosition, relativeMaxY));
|
|
55
65
|
currentRowData.rowRef.forEach((currentItem) => {
|
|
56
66
|
currentItem.value.style.transform = `translateY(${safeTranslateY}px)`;
|
|
@@ -66,7 +76,7 @@ function useDraggable(props, tableRefs) {
|
|
|
66
76
|
height,
|
|
67
77
|
top
|
|
68
78
|
} = rowData.rowRef[0].value.getBoundingClientRect();
|
|
69
|
-
const position = top + Number((height / 2).toFixed(2)) <
|
|
79
|
+
const position = top + Number((height / 2).toFixed(2)) < clientY ? 1 : -1;
|
|
70
80
|
if (!(sort + position)) {
|
|
71
81
|
let translateY = currentHeight;
|
|
72
82
|
let index = Math.min(targetIndex, rowData.index);
|
|
@@ -99,10 +109,11 @@ function useDraggable(props, tableRefs) {
|
|
|
99
109
|
}
|
|
100
110
|
};
|
|
101
111
|
const handleBodyScrollY = (event) => {
|
|
102
|
-
|
|
112
|
+
const clientY = getClientY(event);
|
|
113
|
+
if (bodyTop + bodyHeight > clientY && clientY > bodyTop) {
|
|
103
114
|
clearBodyScrollY();
|
|
104
115
|
} else if (!scrollTimer) {
|
|
105
|
-
const px =
|
|
116
|
+
const px = clientY < bodyTop ? -3 : 3;
|
|
106
117
|
scrollTimer = setInterval(() => {
|
|
107
118
|
tableRefs.bodyTable.setScrollTop(Math.max(0, Math.min(tableRefs.bodyTable.wrapRef.scrollTop + px, tableHeight - bodyHeight)));
|
|
108
119
|
setRowRefsTranslate(event);
|
|
@@ -115,6 +126,13 @@ function useDraggable(props, tableRefs) {
|
|
|
115
126
|
setRowRefsTranslate(event);
|
|
116
127
|
}
|
|
117
128
|
};
|
|
129
|
+
const handleTouchmove = (event) => {
|
|
130
|
+
event.preventDefault();
|
|
131
|
+
handleBodyScrollY(event);
|
|
132
|
+
if (!scrollTimer) {
|
|
133
|
+
setRowRefsTranslate(event);
|
|
134
|
+
}
|
|
135
|
+
};
|
|
118
136
|
const disableWheel = (e) => {
|
|
119
137
|
e.preventDefault();
|
|
120
138
|
};
|
|
@@ -141,11 +159,15 @@ function useDraggable(props, tableRefs) {
|
|
|
141
159
|
window.removeEventListener("mousemove", handleMousemove);
|
|
142
160
|
window.removeEventListener("mouseup", clearDrag);
|
|
143
161
|
window.removeEventListener("mousewheel", disableWheel);
|
|
162
|
+
window.removeEventListener("touchmove", handleTouchmove);
|
|
163
|
+
window.removeEventListener("touchend", clearDrag);
|
|
164
|
+
window.removeEventListener("touchcancel", clearDrag);
|
|
144
165
|
};
|
|
145
166
|
const handleDragStart = (event, param) => {
|
|
146
167
|
const bodyTable = tableRefs.bodyTable.wrapRef;
|
|
147
168
|
sourceRowKey = param.rowKey.toString();
|
|
148
|
-
|
|
169
|
+
const clientY = getClientY(event);
|
|
170
|
+
dragStartPosition = clientY + bodyTable.scrollTop;
|
|
149
171
|
const sortRowData = Object.values(rowDataMap.value).sort((a, b) => a.index - b.index);
|
|
150
172
|
const {
|
|
151
173
|
top
|
|
@@ -162,12 +184,21 @@ function useDraggable(props, tableRefs) {
|
|
|
162
184
|
bodyTop = bodyTopInner;
|
|
163
185
|
bodyHeight = bodyHeightInner;
|
|
164
186
|
tableHeight = tableHeightInner;
|
|
165
|
-
|
|
187
|
+
if ("touches" in event) {
|
|
188
|
+
handleTouchmove(event);
|
|
189
|
+
} else {
|
|
190
|
+
handleMousemove(event);
|
|
191
|
+
}
|
|
166
192
|
window.addEventListener("mousemove", handleMousemove);
|
|
167
193
|
window.addEventListener("mouseup", clearDrag);
|
|
168
194
|
window.addEventListener("mousewheel", disableWheel, {
|
|
169
195
|
passive: false
|
|
170
196
|
});
|
|
197
|
+
window.addEventListener("touchmove", handleTouchmove, {
|
|
198
|
+
passive: false
|
|
199
|
+
});
|
|
200
|
+
window.addEventListener("touchend", clearDrag);
|
|
201
|
+
window.addEventListener("touchcancel", clearDrag);
|
|
171
202
|
event.preventDefault();
|
|
172
203
|
};
|
|
173
204
|
const draggableColumn = vue.computed(() => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDraggable.js","sources":["../../../../../src/components/Table/hooks/useDraggable.tsx"],"sourcesContent":["import { computed, ref, watch } from 'vue';\nimport type { Ref } from 'vue';\nimport type { ColumnSlotParams, InnerColumn, TableProps, TableRefs } from '../Table.type';\nimport DraggableIcon from '../tableUnits/DraggableIcon.vue';\n\nexport interface RowData {\n rowKey: string | number;\n index: number;\n data: Record<string, any>;\n rowRef: Ref<HTMLElement>[];\n}\n\nexport interface BodyScrollMethod {\n handle: null | ((e: any) => void);\n}\n\nexport default function useDraggable(props: TableProps, tableRefs: TableRefs) {\n let sourceRowKey: string | number = '';\n let targetIndex = 0;\n let dragStartPosition = 0;\n let relativeMinY = 0;\n let relativeMaxY = 0;\n const rowDataMap = ref<Record<string, RowData>>({});\n\n const setRowRefs = (val: RowData) => {\n if (props.draggable) {\n const historyRowData = rowDataMap.value[val.rowKey.toString()];\n if (historyRowData) {\n const { rowRef } = historyRowData;\n historyRowData.index = val.index;\n\n if (rowRef[rowRef.length - 1].value) {\n rowRef.push(...val.rowRef);\n } else {\n rowRef.splice(rowRef.length - 2, 1, val.rowRef[0]);\n }\n } else {\n rowDataMap.value[val.rowKey.toString()] = val;\n }\n }\n };\n const clearRowRefs = () => {\n if (props.draggable) {\n Object.keys(rowDataMap.value).forEach((key) => {\n const rowData = rowDataMap.value[key];\n if (rowData.rowRef.every((item) => !item.value)) {\n delete rowDataMap.value[key];\n }\n });\n }\n };\n watch(\n () => props.data,\n () => {\n clearRowRefs();\n },\n { flush: 'post' }\n );\n\n const setRowRefsTranslate = (event: MouseEvent) => {\n const currentRowData = rowDataMap.value[sourceRowKey];\n const { height: currentHeight } = currentRowData.rowRef[0].value.getBoundingClientRect();\n const realClientY = event.clientY + (tableRefs.bodyTable as any).wrapRef.scrollTop;\n const safeTranslateY = Math.max(relativeMinY, Math.min(realClientY - dragStartPosition, relativeMaxY));\n currentRowData.rowRef.forEach((currentItem) => {\n currentItem.value.style.transform = `translateY(${safeTranslateY}px)`;\n currentItem.value.style.position = 'relative';\n currentItem.value.style.zIndex = '999';\n });\n targetIndex = currentRowData.index;\n Object.keys(rowDataMap.value).forEach((rowKey) => {\n if (rowKey !== sourceRowKey) {\n const rowData = rowDataMap.value[rowKey];\n const sort = rowData.index < currentRowData.index ? 1 : -1;\n\n const { height, top } = rowData.rowRef[0].value.getBoundingClientRect();\n const position = top + Number((height / 2).toFixed(2)) < event.clientY ? 1 : -1;\n\n if (!(sort + position)) {\n let translateY = currentHeight;\n let index = Math.min(targetIndex, rowData.index);\n if (sort === -1) {\n translateY = -currentHeight;\n index = Math.max(targetIndex, rowData.index);\n }\n targetIndex = index;\n rowData.rowRef.forEach((rowRefItem) => {\n rowRefItem.value.style.transform = `translateY(${translateY}px)`;\n rowRefItem.value.style.transition = 'transform 0.3s';\n });\n } else {\n rowData.rowRef.forEach((rowRefItem) => {\n rowRefItem.value.style.transform = 'none';\n rowRefItem.value.style.transition = 'transform 0.3s';\n });\n }\n }\n });\n };\n\n let bodyTop = 0;\n let bodyHeight = 0;\n let tableHeight = 0;\n let scrollTimer: any | null = null;\n const clearBodyScrollY = () => {\n if (scrollTimer) {\n clearInterval(scrollTimer);\n scrollTimer = null;\n }\n };\n const handleBodyScrollY = (event: MouseEvent) => {\n if (bodyTop + bodyHeight > event.clientY && event.clientY > bodyTop) {\n clearBodyScrollY();\n } else if (!scrollTimer) {\n const px = event.clientY < bodyTop ? -3 : 3;\n scrollTimer = setInterval(() => {\n (tableRefs.bodyTable as any).setScrollTop(\n Math.max(0, Math.min((tableRefs.bodyTable as any).wrapRef.scrollTop + px, tableHeight - bodyHeight))\n );\n setRowRefsTranslate(event);\n }, 10);\n }\n };\n const handleMousemove = (event: MouseEvent) => {\n handleBodyScrollY(event);\n\n if (!scrollTimer) {\n setRowRefsTranslate(event);\n }\n };\n\n const disableWheel = (e: Event) => {\n e.preventDefault();\n };\n\n const clearDrag = () => {\n let targetRowKey = sourceRowKey;\n Object.values(rowDataMap.value).forEach((rowData) => {\n if (rowData.index === targetIndex) {\n targetRowKey = rowData.rowKey.toString();\n }\n rowData.rowRef.forEach((rowRefItem) => {\n rowRefItem.value.style.transform = 'none';\n rowRefItem.value.style.transition = 'none';\n rowRefItem.value.style.position = 'unset';\n rowRefItem.value.style.zIndex = 'auto';\n });\n });\n if (targetRowKey !== sourceRowKey) {\n if (props.draggable.onDragDrop) {\n props.draggable.onDragDrop(sourceRowKey, targetRowKey);\n }\n }\n sourceRowKey = '';\n clearBodyScrollY();\n window.removeEventListener('mousemove', handleMousemove);\n window.removeEventListener('mouseup', clearDrag);\n window.removeEventListener('mousewheel', disableWheel);\n };\n const handleDragStart = (event: MouseEvent, param: ColumnSlotParams) => {\n const bodyTable = (tableRefs.bodyTable as any).wrapRef;\n\n sourceRowKey = param.rowKey.toString();\n\n dragStartPosition = event.clientY + bodyTable.scrollTop;\n\n const sortRowData = Object.values(rowDataMap.value).sort((a, b) => a.index - b.index);\n const { top } = rowDataMap.value[sourceRowKey].rowRef[0].value.getBoundingClientRect();\n relativeMinY = sortRowData[0].rowRef[0].value.getBoundingClientRect().top - top;\n relativeMaxY = sortRowData[sortRowData.length - 1].rowRef[0].value.getBoundingClientRect().top - top;\n const { top: bodyTopInner, height: bodyHeightInner } = bodyTable.getBoundingClientRect();\n const { height: tableHeightInner } = bodyTable.children[0].getBoundingClientRect();\n bodyTop = bodyTopInner;\n bodyHeight = bodyHeightInner;\n tableHeight = tableHeightInner;\n\n handleMousemove(event);\n\n window.addEventListener('mousemove', handleMousemove);\n window.addEventListener('mouseup', clearDrag);\n window.addEventListener('mousewheel', disableWheel, { passive: false });\n\n event.preventDefault();\n };\n\n const draggableColumn = computed(() => {\n if (props.draggable) {\n const column: InnerColumn = {\n key: 'draggable-column',\n type: 'draggable',\n width: 50,\n align: 'center',\n render: (param) => {\n return <DraggableIcon onDragStart={(event: MouseEvent) => handleDragStart(event, param)} />;\n }\n // handleDragStart\n };\n if ('fixed' in props.draggable) {\n column.fixed = props.draggable.fixed;\n } else if (props.columns.some((x) => x.fixed === 'left' || x.fixed === true)) {\n column.fixed = 'left';\n }\n return column;\n }\n return null;\n });\n return {\n setRowRefs,\n draggableColumn\n };\n}\n"],"names":["useDraggable","props","tableRefs","sourceRowKey","targetIndex","dragStartPosition","relativeMinY","relativeMaxY","rowDataMap","ref","setRowRefs","val","draggable","historyRowData","value","rowKey","toString","rowRef","index","length","push","splice","clearRowRefs","Object","keys","forEach","key","rowData","every","item","watch","data","flush","setRowRefsTranslate","event","currentRowData","height","currentHeight","getBoundingClientRect","realClientY","clientY","bodyTable","wrapRef","scrollTop","safeTranslateY","Math","max","min","currentItem","style","transform","position","zIndex","sort","top","Number","toFixed","translateY","rowRefItem","transition","bodyTop","bodyHeight","tableHeight","scrollTimer","clearBodyScrollY","clearInterval","handleBodyScrollY","px","setInterval","setScrollTop","handleMousemove","disableWheel","e","preventDefault","clearDrag","targetRowKey","values","onDragDrop","window","removeEventListener","handleDragStart","param","sortRowData","a","b","bodyTopInner","bodyHeightInner","tableHeightInner","children","addEventListener","passive","draggableColumn","computed","column","type","width","align","render","_createVNode","DraggableIcon","fixed","columns","some","x"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useDraggable.js","sources":["../../../../../src/components/Table/hooks/useDraggable.tsx"],"sourcesContent":["import { computed, ref, watch } from 'vue';\nimport type { Ref } from 'vue';\nimport type { ColumnSlotParams, InnerColumn, TableProps, TableRefs } from '../Table.type';\nimport DraggableIcon from '../tableUnits/DraggableIcon.vue';\n\nexport interface RowData {\n rowKey: string | number;\n index: number;\n data: Record<string, any>;\n rowRef: Ref<HTMLElement>[];\n}\n\nexport interface BodyScrollMethod {\n handle: null | ((e: any) => void);\n}\n\nexport default function useDraggable(props: TableProps, tableRefs: TableRefs) {\n let sourceRowKey: string | number = '';\n let targetIndex = 0;\n let dragStartPosition = 0;\n let relativeMinY = 0;\n let relativeMaxY = 0;\n const rowDataMap = ref<Record<string, RowData>>({});\n\n const setRowRefs = (val: RowData) => {\n if (props.draggable) {\n const historyRowData = rowDataMap.value[val.rowKey.toString()];\n if (historyRowData) {\n const { rowRef } = historyRowData;\n historyRowData.index = val.index;\n\n if (rowRef[rowRef.length - 1].value) {\n rowRef.push(...val.rowRef);\n } else {\n rowRef.splice(rowRef.length - 2, 1, val.rowRef[0]);\n }\n } else {\n rowDataMap.value[val.rowKey.toString()] = val;\n }\n }\n };\n const clearRowRefs = () => {\n if (props.draggable) {\n Object.keys(rowDataMap.value).forEach((key) => {\n const rowData = rowDataMap.value[key];\n if (rowData.rowRef.every((item) => !item.value)) {\n delete rowDataMap.value[key];\n }\n });\n }\n };\n watch(\n () => props.data,\n () => {\n clearRowRefs();\n },\n { flush: 'post' }\n );\n\n // Extract clientY from mouse or touch event\n const getClientY = (event: MouseEvent | TouchEvent): number => {\n if ('touches' in event && event.touches.length > 0) {\n // Touch event - get Y coordinate from first touch point\n return event.touches[0].clientY;\n }\n if ('clientY' in event) {\n // Mouse event - use clientY directly\n return event.clientY;\n }\n return 0;\n };\n\n const setRowRefsTranslate = (event: MouseEvent | TouchEvent) => {\n const currentRowData = rowDataMap.value[sourceRowKey];\n const { height: currentHeight } = currentRowData.rowRef[0].value.getBoundingClientRect();\n const clientY = getClientY(event);\n const realClientY = clientY + (tableRefs.bodyTable as any).wrapRef.scrollTop;\n const safeTranslateY = Math.max(relativeMinY, Math.min(realClientY - dragStartPosition, relativeMaxY));\n currentRowData.rowRef.forEach((currentItem) => {\n currentItem.value.style.transform = `translateY(${safeTranslateY}px)`;\n currentItem.value.style.position = 'relative';\n currentItem.value.style.zIndex = '999';\n });\n targetIndex = currentRowData.index;\n Object.keys(rowDataMap.value).forEach((rowKey) => {\n if (rowKey !== sourceRowKey) {\n const rowData = rowDataMap.value[rowKey];\n const sort = rowData.index < currentRowData.index ? 1 : -1;\n\n const { height, top } = rowData.rowRef[0].value.getBoundingClientRect();\n const position = top + Number((height / 2).toFixed(2)) < clientY ? 1 : -1;\n\n if (!(sort + position)) {\n let translateY = currentHeight;\n let index = Math.min(targetIndex, rowData.index);\n if (sort === -1) {\n translateY = -currentHeight;\n index = Math.max(targetIndex, rowData.index);\n }\n targetIndex = index;\n rowData.rowRef.forEach((rowRefItem) => {\n rowRefItem.value.style.transform = `translateY(${translateY}px)`;\n rowRefItem.value.style.transition = 'transform 0.3s';\n });\n } else {\n rowData.rowRef.forEach((rowRefItem) => {\n rowRefItem.value.style.transform = 'none';\n rowRefItem.value.style.transition = 'transform 0.3s';\n });\n }\n }\n });\n };\n\n let bodyTop = 0;\n let bodyHeight = 0;\n let tableHeight = 0;\n let scrollTimer: any | null = null;\n const clearBodyScrollY = () => {\n if (scrollTimer) {\n clearInterval(scrollTimer);\n scrollTimer = null;\n }\n };\n const handleBodyScrollY = (event: MouseEvent | TouchEvent) => {\n const clientY = getClientY(event);\n if (bodyTop + bodyHeight > clientY && clientY > bodyTop) {\n clearBodyScrollY();\n } else if (!scrollTimer) {\n const px = clientY < bodyTop ? -3 : 3;\n scrollTimer = setInterval(() => {\n (tableRefs.bodyTable as any).setScrollTop(\n Math.max(0, Math.min((tableRefs.bodyTable as any).wrapRef.scrollTop + px, tableHeight - bodyHeight))\n );\n setRowRefsTranslate(event);\n }, 10);\n }\n };\n\n // Handle mouse move event\n const handleMousemove = (event: MouseEvent) => {\n handleBodyScrollY(event);\n\n if (!scrollTimer) {\n setRowRefsTranslate(event);\n }\n };\n\n // Handle touch move event for mobile devices\n const handleTouchmove = (event: TouchEvent) => {\n // Prevent default scrolling behavior during drag\n event.preventDefault();\n handleBodyScrollY(event);\n\n if (!scrollTimer) {\n setRowRefsTranslate(event);\n }\n };\n\n const disableWheel = (e: Event) => {\n e.preventDefault();\n };\n\n const clearDrag = () => {\n let targetRowKey = sourceRowKey;\n Object.values(rowDataMap.value).forEach((rowData) => {\n if (rowData.index === targetIndex) {\n targetRowKey = rowData.rowKey.toString();\n }\n rowData.rowRef.forEach((rowRefItem) => {\n rowRefItem.value.style.transform = 'none';\n rowRefItem.value.style.transition = 'none';\n rowRefItem.value.style.position = 'unset';\n rowRefItem.value.style.zIndex = 'auto';\n });\n });\n if (targetRowKey !== sourceRowKey) {\n if (props.draggable.onDragDrop) {\n props.draggable.onDragDrop(sourceRowKey, targetRowKey);\n }\n }\n sourceRowKey = '';\n clearBodyScrollY();\n // Remove mouse event listeners\n window.removeEventListener('mousemove', handleMousemove);\n window.removeEventListener('mouseup', clearDrag);\n window.removeEventListener('mousewheel', disableWheel);\n // Remove touch event listeners\n window.removeEventListener('touchmove', handleTouchmove);\n window.removeEventListener('touchend', clearDrag);\n window.removeEventListener('touchcancel', clearDrag);\n };\n const handleDragStart = (event: MouseEvent | TouchEvent, param: ColumnSlotParams) => {\n const bodyTable = (tableRefs.bodyTable as any).wrapRef;\n\n sourceRowKey = param.rowKey.toString();\n\n // Get clientY from mouse or touch event\n const clientY = getClientY(event);\n dragStartPosition = clientY + bodyTable.scrollTop;\n\n const sortRowData = Object.values(rowDataMap.value).sort((a, b) => a.index - b.index);\n const { top } = rowDataMap.value[sourceRowKey].rowRef[0].value.getBoundingClientRect();\n relativeMinY = sortRowData[0].rowRef[0].value.getBoundingClientRect().top - top;\n relativeMaxY = sortRowData[sortRowData.length - 1].rowRef[0].value.getBoundingClientRect().top - top;\n const { top: bodyTopInner, height: bodyHeightInner } = bodyTable.getBoundingClientRect();\n const { height: tableHeightInner } = bodyTable.children[0].getBoundingClientRect();\n bodyTop = bodyTopInner;\n bodyHeight = bodyHeightInner;\n tableHeight = tableHeightInner;\n\n // Initialize position\n if ('touches' in event) {\n handleTouchmove(event as TouchEvent);\n } else {\n handleMousemove(event as MouseEvent);\n }\n\n // Add mouse event listeners for desktop\n window.addEventListener('mousemove', handleMousemove);\n window.addEventListener('mouseup', clearDrag);\n window.addEventListener('mousewheel', disableWheel, { passive: false });\n\n // Add touch event listeners for mobile\n window.addEventListener('touchmove', handleTouchmove, { passive: false });\n window.addEventListener('touchend', clearDrag);\n window.addEventListener('touchcancel', clearDrag);\n\n event.preventDefault();\n };\n\n const draggableColumn = computed(() => {\n if (props.draggable) {\n const column: InnerColumn = {\n key: 'draggable-column',\n type: 'draggable',\n width: 50,\n align: 'center',\n render: (param) => {\n return <DraggableIcon onDragStart={(event: MouseEvent | TouchEvent) => handleDragStart(event, param)} />;\n }\n // handleDragStart\n };\n if ('fixed' in props.draggable) {\n column.fixed = props.draggable.fixed;\n } else if (props.columns.some((x) => x.fixed === 'left' || x.fixed === true)) {\n column.fixed = 'left';\n }\n return column;\n }\n return null;\n });\n return {\n setRowRefs,\n draggableColumn\n };\n}\n"],"names":["useDraggable","props","tableRefs","sourceRowKey","targetIndex","dragStartPosition","relativeMinY","relativeMaxY","rowDataMap","ref","setRowRefs","val","draggable","historyRowData","value","rowKey","toString","rowRef","index","length","push","splice","clearRowRefs","Object","keys","forEach","key","rowData","every","item","watch","data","flush","getClientY","event","touches","clientY","setRowRefsTranslate","currentRowData","height","currentHeight","getBoundingClientRect","realClientY","bodyTable","wrapRef","scrollTop","safeTranslateY","Math","max","min","currentItem","style","transform","position","zIndex","sort","top","Number","toFixed","translateY","rowRefItem","transition","bodyTop","bodyHeight","tableHeight","scrollTimer","clearBodyScrollY","clearInterval","handleBodyScrollY","px","setInterval","setScrollTop","handleMousemove","handleTouchmove","preventDefault","disableWheel","e","clearDrag","targetRowKey","values","onDragDrop","window","removeEventListener","handleDragStart","param","sortRowData","a","b","bodyTopInner","bodyHeightInner","tableHeightInner","children","addEventListener","passive","draggableColumn","computed","column","type","width","align","render","_createVNode","DraggableIcon","fixed","columns","some","x"],"mappings":"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"}
|
|
@@ -19,9 +19,22 @@ const _sfc_main = vue.defineComponent({
|
|
|
19
19
|
const handleDragStart = (e) => {
|
|
20
20
|
emit("dragStart", e);
|
|
21
21
|
};
|
|
22
|
+
const handleTouchStart = (e) => {
|
|
23
|
+
e.preventDefault();
|
|
24
|
+
const touch = e.touches[0];
|
|
25
|
+
const syntheticEvent = {
|
|
26
|
+
...e,
|
|
27
|
+
clientY: touch.clientY,
|
|
28
|
+
clientX: touch.clientX,
|
|
29
|
+
preventDefault: () => e.preventDefault(),
|
|
30
|
+
stopPropagation: () => e.stopPropagation()
|
|
31
|
+
};
|
|
32
|
+
emit("dragStart", syntheticEvent);
|
|
33
|
+
};
|
|
22
34
|
return {
|
|
23
35
|
prefixCls,
|
|
24
|
-
handleDragStart
|
|
36
|
+
handleDragStart,
|
|
37
|
+
handleTouchStart
|
|
25
38
|
};
|
|
26
39
|
}
|
|
27
40
|
});
|
|
@@ -30,13 +43,14 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
30
43
|
const _component_UIcon = vue.resolveComponent("UIcon");
|
|
31
44
|
return vue.openBlock(), vue.createBlock(_component_UIcon, {
|
|
32
45
|
class: vue.normalizeClass([`${_ctx.prefixCls}-draggable-icon`]),
|
|
33
|
-
onMousedown: _ctx.handleDragStart
|
|
46
|
+
onMousedown: _ctx.handleDragStart,
|
|
47
|
+
onTouchstart: _ctx.handleTouchStart
|
|
34
48
|
}, {
|
|
35
49
|
default: vue.withCtx(() => [
|
|
36
50
|
vue.createVNode(_component_GripVertical)
|
|
37
51
|
]),
|
|
38
52
|
_: 1
|
|
39
|
-
}, 8, ["class", "onMousedown"]);
|
|
53
|
+
}, 8, ["class", "onMousedown", "onTouchstart"]);
|
|
40
54
|
}
|
|
41
55
|
var DraggableIcon = /* @__PURE__ */ pluginVue_exportHelper["default"](_sfc_main, [["render", _sfc_render], ["__file", "/Users/admin/Documents/uxd/uxd-ui/src/components/Table/tableUnits/DraggableIcon.vue"]]);
|
|
42
56
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DraggableIcon.js","sources":["../../../../../src/components/Table/tableUnits/DraggableIcon.vue"],"sourcesContent":["<template>\n <UIcon :class=\"[`${prefixCls}-draggable-icon`]\" @mousedown=\"handleDragStart\">\n <GripVertical />\n </UIcon>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, inject } from 'vue';\nimport UIcon from '@uxd-ui/components/Icon';\nimport { GripVertical } from 'lucide-vue-next';\nimport type { TableContext } from '../Table.type';\n\nexport default defineComponent({\n name: 'ExpandIcon',\n components: {\n UIcon,\n GripVertical\n },\n emits: ['dragStart'],\n setup(props, { emit }) {\n const { prefixCls } = inject<TableContext>('tableContext', {} as TableContext);\n\n const handleDragStart = (e: DragEvent) => {\n emit('dragStart', e);\n };\n\n return {\n prefixCls,\n handleDragStart\n };\n }\n});\n</script>\n"],"names":["defineComponent","UIcon","GripVertical","inject","_createBlock","_normalizeClass","_createVNode"],"mappings":";;;;;;;;;AAYA,MAAK,YAAaA,oBAAa;AAAA,EAC7B,MAAM;AAAA,EACN,YAAY;AAAA,WACVC;AAAA,kBACAC;AAAA;AACF,EACA,OAAO,CAAC,WAAW;AAAA,EACnB,MAAM,OAAO,EAAE,QAAQ;UACf,EAAE,cAAcC,WAAqB,gBAAgB,EAAkB;
|
|
1
|
+
{"version":3,"file":"DraggableIcon.js","sources":["../../../../../src/components/Table/tableUnits/DraggableIcon.vue"],"sourcesContent":["<template>\n <UIcon :class=\"[`${prefixCls}-draggable-icon`]\" @mousedown=\"handleDragStart\" @touchstart=\"handleTouchStart\">\n <GripVertical />\n </UIcon>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, inject } from 'vue';\nimport UIcon from '@uxd-ui/components/Icon';\nimport { GripVertical } from 'lucide-vue-next';\nimport type { TableContext } from '../Table.type';\n\nexport default defineComponent({\n name: 'ExpandIcon',\n components: {\n UIcon,\n GripVertical\n },\n emits: ['dragStart'],\n setup(props, { emit }) {\n const { prefixCls } = inject<TableContext>('tableContext', {} as TableContext);\n\n // Handle mouse drag start\n const handleDragStart = (e: DragEvent) => {\n emit('dragStart', e);\n };\n\n // Handle touch drag start for mobile devices\n const handleTouchStart = (e: TouchEvent) => {\n // Prevent default scrolling behavior\n e.preventDefault();\n // Convert touch event to a compatible format\n // Create a synthetic event object that mimics MouseEvent structure\n const touch = e.touches[0];\n const syntheticEvent = {\n ...e,\n clientY: touch.clientY,\n clientX: touch.clientX,\n preventDefault: () => e.preventDefault(),\n stopPropagation: () => e.stopPropagation()\n } as any;\n emit('dragStart', syntheticEvent);\n };\n\n return {\n prefixCls,\n handleDragStart,\n handleTouchStart\n };\n }\n});\n</script>\n"],"names":["defineComponent","UIcon","GripVertical","inject","_createBlock","_normalizeClass","_createVNode"],"mappings":";;;;;;;;;AAYA,MAAK,YAAaA,oBAAa;AAAA,EAC7B,MAAM;AAAA,EACN,YAAY;AAAA,WACVC;AAAA,kBACAC;AAAA;AACF,EACA,OAAO,CAAC,WAAW;AAAA,EACnB,MAAM,OAAO,EAAE,QAAQ;UACf,EAAE,cAAcC,WAAqB,gBAAgB,EAAkB;UAGvE,kBAAkB,CAAC,MAAiB;WACnC,aAAa,CAAC;AAAA;UAIf,mBAAmB,CAAC,MAAkB;QAExC;YAGI,QAAQ,EAAE,QAAQ;YAClB,iBAAiB;AAAA,QACrB,GAAG;AAAA,QACH,SAAS,MAAM;AAAA,QACf,SAAS,MAAM;AAAA,QACf,gBAAgB,MAAM,EAAE;AAAe,QACvC,iBAAiB,MAAM,EAAE;AAAgB;WAEtC,aAAa,cAAc;AAAA;WAG3B;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA;AACF;AAEJ,CAAC;;;;0BAjDCC,gBAEQ;IAFA,OAAKC,uBAAM,+BAAS;IAAqB,aAAW;IAAkB,cAAY;;yBACxF,MAAgB;AAAA,MAAhBC,gBAAgB;;;;;;;;;"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
declare const _default: import("vue").DefineComponent<{}, {
|
|
2
2
|
prefixCls: import("vue").ComputedRef<string>;
|
|
3
3
|
handleDragStart: (e: DragEvent) => void;
|
|
4
|
+
handleTouchStart: (e: TouchEvent) => void;
|
|
4
5
|
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, "dragStart"[], "dragStart", import("vue").PublicProps, Readonly<{}> & Readonly<{
|
|
5
6
|
onDragStart?: (...args: any[]) => any;
|
|
6
7
|
}>, {}, {}, {
|
|
@@ -209,6 +209,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
|
|
|
209
209
|
target: HTMLElement;
|
|
210
210
|
width: number;
|
|
211
211
|
}) => void;
|
|
212
|
+
cellEmptyText: import("vue").Ref<string, string>;
|
|
212
213
|
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
213
214
|
prefixCls: {
|
|
214
215
|
type: StringConstructor;
|
|
@@ -174,6 +174,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
|
|
|
174
174
|
target: HTMLElement;
|
|
175
175
|
width: number;
|
|
176
176
|
}) => void;
|
|
177
|
+
cellEmptyText: import("vue").Ref<string, string>;
|
|
177
178
|
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
178
179
|
prefixCls: {
|
|
179
180
|
type: StringConstructor;
|
|
@@ -1476,6 +1477,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
|
|
|
1476
1477
|
target: HTMLElement;
|
|
1477
1478
|
width: number;
|
|
1478
1479
|
}) => void;
|
|
1480
|
+
cellEmptyText: import("vue").Ref<string, string>;
|
|
1479
1481
|
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
1480
1482
|
prefixCls: {
|
|
1481
1483
|
type: StringConstructor;
|
|
@@ -60,7 +60,7 @@ const _sfc_main = vue.defineComponent({
|
|
|
60
60
|
setup(props) {
|
|
61
61
|
const {
|
|
62
62
|
prefixCls: tablePrefixCls,
|
|
63
|
-
props: { indentSize },
|
|
63
|
+
props: { indentSize, cellEmptyText },
|
|
64
64
|
expand: { handleExpandChange, isRowExpanded },
|
|
65
65
|
filterAndSorter: { hasAction, hasSorters, hasFilters, isSortColumn },
|
|
66
66
|
size: { syncColumnWidth },
|
|
@@ -175,7 +175,8 @@ const _sfc_main = vue.defineComponent({
|
|
|
175
175
|
cellRef,
|
|
176
176
|
ellipsisSpanRef,
|
|
177
177
|
isOverflow,
|
|
178
|
-
checkWidth
|
|
178
|
+
checkWidth,
|
|
179
|
+
cellEmptyText
|
|
179
180
|
};
|
|
180
181
|
}
|
|
181
182
|
});
|
|
@@ -265,7 +266,7 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
265
266
|
]),
|
|
266
267
|
_: 1
|
|
267
268
|
}, 8, ["title", "disabled"])) : (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 1 }, [
|
|
268
|
-
vue.createTextVNode(vue.toDisplayString(_ctx.displayCell), 1)
|
|
269
|
+
vue.createTextVNode(vue.toDisplayString(_ctx.displayCell || _ctx.cellEmptyText), 1)
|
|
269
270
|
], 64))
|
|
270
271
|
], 64))
|
|
271
272
|
], 64))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableCell.js","sources":["../../../../../src/components/Table/tableUnits/TableCell.vue"],"sourcesContent":["<template>\n <ResizeObserver @resize=\"checkWidth\">\n <td\n v-if=\"showCell\"\n ref=\"cellRef\"\n v-bind=\"tdProps\"\n :class=\"{\n [`${prefixCls}-cell-custom`]: !!(tdProps as any)?.class,\n [`${column.className}`]: !!column.className,\n [`${prefixCls}-cell-ellipsis`]: !!column.ellipsis,\n [`${prefixCls}-cell-break-word`]: !!column.width,\n [`${tablePrefixCls}-column-has-actions`]: hasAction(column),\n [`${tablePrefixCls}-column-has-sorters`]: hasSorters(column),\n [`${tablePrefixCls}-column-has-filters`]: hasFilters(column),\n [`${tablePrefixCls}-column-sort`]: isSortColumn(column)\n }\"\n :style=\"tdStyle\"\n >\n <USkeleton v-if=\"skeleton\" :class=\"`${prefixCls}-skeleton-wrap`\" active>\n <template v-if=\"column.skeleton\">\n <USkeletonItem\n v-for=\"(_, ski) in Array(column.skeleton.length)\"\n :key=\"ski\"\n :type=\"column.skeleton[ski].type\"\n :style=\"column.skeleton[ski].style\"\n />\n </template>\n <USkeletonItem v-else type=\"text\" style=\"width: 50%\" />\n </USkeleton>\n <template v-else>\n <template v-if=\"expandIcon\">\n <span :class=\"`${prefixCls}-indent indent-level-${indent}`\" :style=\"{ paddingLeft: `${indentSize * indent}px` }\" />\n <ExpandIcon\n need-indent-spaced\n :expandable=\"!!(data as any).children\"\n :need-loading=\"(data as any).children === true\"\n :row-key=\"rowKey\"\n :expanded=\"isRowExpanded(rowKey, true)\"\n @expand=\"handleExpand\"\n @async-expand=\"handleAsyncExpand\"\n />\n </template>\n <Render\n v-if=\"isRender\"\n :render=\"\n () => {\n return renderFn?.({\n row: data,\n index,\n rowKey,\n pagination,\n column\n });\n }\n \"\n />\n <template v-else>\n <template v-if=\"column.ellipsis && displayCell\">\n <UTooltip :title=\"displayCell.toString()\" :disabled=\"!isOverflow\" :mouse-enter-delay=\"0.5\">\n <span ref=\"ellipsisSpanRef\">\n {{ displayCell }}\n </span>\n </UTooltip>\n </template>\n <template v-else>\n {{ displayCell }}\n </template>\n </template>\n </template>\n </td>\n </ResizeObserver>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, inject, computed, watch, ref, nextTick } from 'vue';\nimport type { PropType, CSSProperties } from 'vue';\nimport { get } from 'lodash-unified';\nimport UTooltip from '@uxd-ui/components/Tooltip';\nimport USkeleton from '@uxd-ui/components/Skeleton';\nimport Render from '../../base/Render';\nimport ExpandIcon from './ExpandIcon.vue';\nimport type { InnerColumn, TableContext } from '../Table.type';\nimport { getStyle } from '../../../utils';\nimport ResizeObserver from '../../base/ResizeObserver';\n\nconst USkeletonItem = USkeleton.Item;\n\nexport default defineComponent({\n name: 'TableCell',\n components: {\n Render,\n ExpandIcon,\n UTooltip,\n USkeleton,\n USkeletonItem,\n ResizeObserver\n },\n props: {\n prefixCls: {\n type: String\n },\n column: {\n type: Object as PropType<InnerColumn>,\n required: true\n },\n data: {\n type: Object as PropType<Record<string, any>>,\n required: true\n },\n rowKey: {\n type: [String, Number],\n required: true\n },\n index: {\n type: Number,\n required: true\n },\n indent: {\n type: Number,\n default: 20\n },\n expandIcon: {\n type: Boolean,\n default: false\n },\n skeleton: {\n type: Boolean,\n default: false\n }\n },\n setup(props) {\n const {\n prefixCls: tablePrefixCls,\n props: { indentSize },\n expand: { handleExpandChange, isRowExpanded },\n filterAndSorter: { hasAction, hasSorters, hasFilters, isSortColumn },\n // size: { sizesMap },\n size: { syncColumnWidth },\n pagination\n } = inject<TableContext>('tableContext', {} as TableContext);\n\n const cellRef = ref();\n const ellipsisSpanRef = ref();\n const isOverflow = ref(false);\n const isMinWidth = ref(false);\n\n const renderFn = computed(() => {\n const { render } = props.column;\n return render || null;\n });\n\n const isRender = computed(() => {\n return renderFn.value !== null;\n });\n\n const displayCell = computed(() => {\n const { key, dataIndex } = props.column;\n const record = props.data;\n return get(record, dataIndex || key);\n });\n\n const tdProps = ref({});\n const showCell = ref(true);\n\n watch(\n () => [props.column, props.data, props.index],\n () => {\n const { customCell } = props.column;\n const attrs = {} as Record<string, any>;\n // if (ellipsis && !render) {\n // attrs.title = displayCell.value;\n // }\n if (customCell) {\n const { data, index } = props;\n const _props = customCell(data, index);\n const { colSpan, rowSpan } = _props;\n showCell.value = colSpan !== 0 && rowSpan !== 0;\n Object.keys(_props).forEach((key) => {\n attrs[key] = _props[key];\n });\n }\n tdProps.value = attrs;\n },\n { immediate: true }\n );\n\n const tdStyle = computed(() => {\n const style = {} as CSSProperties;\n const { align, left, right } = props.column;\n if (align) {\n style.textAlign = align;\n }\n if (left !== undefined) {\n style.left = `${left}px`;\n }\n if (right !== undefined) {\n style.right = `${right}px`;\n }\n if (isMinWidth.value) {\n style.width = `${props.column.minWidth}px`;\n }\n return style;\n });\n\n const handleExpand = (e: any) => {\n handleExpandChange({ row: props.data, rowKey: props.rowKey, tree: true }, e);\n };\n\n const handleAsyncExpand = (e: any, done: () => void) => {\n handleExpandChange(\n {\n row: props.data,\n rowKey: props.rowKey,\n async: true,\n tree: true,\n done\n },\n e\n );\n };\n\n const checkWidth = ({ target, width }: { target: HTMLElement; width: number }) => {\n nextTick(() => {\n if (ellipsisSpanRef.value) {\n const cell = target;\n const padding = (Number.parseInt(getStyle(cell, 'paddingLeft')) || 0) + (Number.parseInt(getStyle(cell, 'paddingRight')) || 0);\n const span = ellipsisSpanRef.value;\n const range = document.createRange();\n range.setStart(span, 0);\n range.setEnd(span, span.childNodes.length);\n const rangeWidth = range.getBoundingClientRect().width;\n\n // const cellWidth = Number(getStyle(cell, 'width'));\n if (rangeWidth + padding > width) {\n isOverflow.value = true;\n } else {\n isOverflow.value = false;\n }\n }\n });\n if (props.index === 0) {\n syncColumnWidth(width, props.column);\n }\n };\n\n // onMounted(() => {\n // checkOverflow(cellRef.value);\n // });\n\n return {\n tablePrefixCls,\n isRender,\n renderFn,\n displayCell,\n tdProps,\n tdStyle,\n indentSize,\n handleExpand,\n handleAsyncExpand,\n isRowExpanded,\n showCell,\n hasAction,\n hasSorters,\n hasFilters,\n isSortColumn,\n pagination,\n cellRef,\n ellipsisSpanRef,\n isOverflow,\n checkWidth\n };\n }\n});\n</script>\n"],"names":["USkeleton","defineComponent","Render","ExpandIcon","UTooltip","ResizeObserver","inject","ref","computed","get","getStyle","_createBlock","_createElementBlock","_mergeProps","_normalizeClass","_Fragment","_normalizeStyle","_createElementVNode","_createVNode","_a"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TableCell.js","sources":["../../../../../src/components/Table/tableUnits/TableCell.vue"],"sourcesContent":["<template>\n <ResizeObserver @resize=\"checkWidth\">\n <td\n v-if=\"showCell\"\n ref=\"cellRef\"\n v-bind=\"tdProps\"\n :class=\"{\n [`${prefixCls}-cell-custom`]: !!(tdProps as any)?.class,\n [`${column.className}`]: !!column.className,\n [`${prefixCls}-cell-ellipsis`]: !!column.ellipsis,\n [`${prefixCls}-cell-break-word`]: !!column.width,\n [`${tablePrefixCls}-column-has-actions`]: hasAction(column),\n [`${tablePrefixCls}-column-has-sorters`]: hasSorters(column),\n [`${tablePrefixCls}-column-has-filters`]: hasFilters(column),\n [`${tablePrefixCls}-column-sort`]: isSortColumn(column)\n }\"\n :style=\"tdStyle\"\n >\n <USkeleton v-if=\"skeleton\" :class=\"`${prefixCls}-skeleton-wrap`\" active>\n <template v-if=\"column.skeleton\">\n <USkeletonItem\n v-for=\"(_, ski) in Array(column.skeleton.length)\"\n :key=\"ski\"\n :type=\"column.skeleton[ski].type\"\n :style=\"column.skeleton[ski].style\"\n />\n </template>\n <USkeletonItem v-else type=\"text\" style=\"width: 50%\" />\n </USkeleton>\n <template v-else>\n <template v-if=\"expandIcon\">\n <span :class=\"`${prefixCls}-indent indent-level-${indent}`\" :style=\"{ paddingLeft: `${indentSize * indent}px` }\" />\n <ExpandIcon\n need-indent-spaced\n :expandable=\"!!(data as any).children\"\n :need-loading=\"(data as any).children === true\"\n :row-key=\"rowKey\"\n :expanded=\"isRowExpanded(rowKey, true)\"\n @expand=\"handleExpand\"\n @async-expand=\"handleAsyncExpand\"\n />\n </template>\n <Render\n v-if=\"isRender\"\n :render=\"\n () => {\n return renderFn?.({\n row: data,\n index,\n rowKey,\n pagination,\n column\n });\n }\n \"\n />\n <template v-else>\n <template v-if=\"column.ellipsis && displayCell\">\n <UTooltip :title=\"displayCell.toString()\" :disabled=\"!isOverflow\" :mouse-enter-delay=\"0.5\">\n <span ref=\"ellipsisSpanRef\">\n {{ displayCell }}\n </span>\n </UTooltip>\n </template>\n <template v-else>\n {{ displayCell || cellEmptyText }}\n </template>\n </template>\n </template>\n </td>\n </ResizeObserver>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, inject, computed, watch, ref, nextTick } from 'vue';\nimport type { PropType, CSSProperties } from 'vue';\nimport { get } from 'lodash-unified';\nimport UTooltip from '@uxd-ui/components/Tooltip';\nimport USkeleton from '@uxd-ui/components/Skeleton';\nimport Render from '../../base/Render';\nimport ExpandIcon from './ExpandIcon.vue';\nimport type { InnerColumn, TableContext } from '../Table.type';\nimport { getStyle } from '../../../utils';\nimport ResizeObserver from '../../base/ResizeObserver';\n\nconst USkeletonItem = USkeleton.Item;\n\nexport default defineComponent({\n name: 'TableCell',\n components: {\n Render,\n ExpandIcon,\n UTooltip,\n USkeleton,\n USkeletonItem,\n ResizeObserver\n },\n props: {\n prefixCls: {\n type: String\n },\n column: {\n type: Object as PropType<InnerColumn>,\n required: true\n },\n data: {\n type: Object as PropType<Record<string, any>>,\n required: true\n },\n rowKey: {\n type: [String, Number],\n required: true\n },\n index: {\n type: Number,\n required: true\n },\n indent: {\n type: Number,\n default: 20\n },\n expandIcon: {\n type: Boolean,\n default: false\n },\n skeleton: {\n type: Boolean,\n default: false\n }\n },\n setup(props) {\n const {\n prefixCls: tablePrefixCls,\n props: { indentSize, cellEmptyText },\n expand: { handleExpandChange, isRowExpanded },\n filterAndSorter: { hasAction, hasSorters, hasFilters, isSortColumn },\n // size: { sizesMap },\n size: { syncColumnWidth },\n pagination\n } = inject<TableContext>('tableContext', {} as TableContext);\n\n const cellRef = ref();\n const ellipsisSpanRef = ref();\n const isOverflow = ref(false);\n const isMinWidth = ref(false);\n\n const renderFn = computed(() => {\n const { render } = props.column;\n return render || null;\n });\n\n const isRender = computed(() => {\n return renderFn.value !== null;\n });\n\n const displayCell = computed(() => {\n const { key, dataIndex } = props.column;\n const record = props.data;\n return get(record, dataIndex || key);\n });\n\n const tdProps = ref({});\n const showCell = ref(true);\n\n watch(\n () => [props.column, props.data, props.index],\n () => {\n const { customCell } = props.column;\n const attrs = {} as Record<string, any>;\n // if (ellipsis && !render) {\n // attrs.title = displayCell.value;\n // }\n if (customCell) {\n const { data, index } = props;\n const _props = customCell(data, index);\n const { colSpan, rowSpan } = _props;\n showCell.value = colSpan !== 0 && rowSpan !== 0;\n Object.keys(_props).forEach((key) => {\n attrs[key] = _props[key];\n });\n }\n tdProps.value = attrs;\n },\n { immediate: true }\n );\n\n const tdStyle = computed(() => {\n const style = {} as CSSProperties;\n const { align, left, right } = props.column;\n if (align) {\n style.textAlign = align;\n }\n if (left !== undefined) {\n style.left = `${left}px`;\n }\n if (right !== undefined) {\n style.right = `${right}px`;\n }\n if (isMinWidth.value) {\n style.width = `${props.column.minWidth}px`;\n }\n return style;\n });\n\n const handleExpand = (e: any) => {\n handleExpandChange({ row: props.data, rowKey: props.rowKey, tree: true }, e);\n };\n\n const handleAsyncExpand = (e: any, done: () => void) => {\n handleExpandChange(\n {\n row: props.data,\n rowKey: props.rowKey,\n async: true,\n tree: true,\n done\n },\n e\n );\n };\n\n const checkWidth = ({ target, width }: { target: HTMLElement; width: number }) => {\n nextTick(() => {\n if (ellipsisSpanRef.value) {\n const cell = target;\n const padding = (Number.parseInt(getStyle(cell, 'paddingLeft')) || 0) + (Number.parseInt(getStyle(cell, 'paddingRight')) || 0);\n const span = ellipsisSpanRef.value;\n const range = document.createRange();\n range.setStart(span, 0);\n range.setEnd(span, span.childNodes.length);\n const rangeWidth = range.getBoundingClientRect().width;\n\n // const cellWidth = Number(getStyle(cell, 'width'));\n if (rangeWidth + padding > width) {\n isOverflow.value = true;\n } else {\n isOverflow.value = false;\n }\n }\n });\n if (props.index === 0) {\n syncColumnWidth(width, props.column);\n }\n };\n\n // onMounted(() => {\n // checkOverflow(cellRef.value);\n // });\n\n return {\n tablePrefixCls,\n isRender,\n renderFn,\n displayCell,\n tdProps,\n tdStyle,\n indentSize,\n handleExpand,\n handleAsyncExpand,\n isRowExpanded,\n showCell,\n hasAction,\n hasSorters,\n hasFilters,\n isSortColumn,\n pagination,\n cellRef,\n ellipsisSpanRef,\n isOverflow,\n checkWidth,\n cellEmptyText\n };\n }\n});\n</script>\n"],"names":["USkeleton","defineComponent","Render","ExpandIcon","UTooltip","ResizeObserver","inject","ref","computed","get","getStyle","_createBlock","_createElementBlock","_mergeProps","_normalizeClass","_Fragment","_normalizeStyle","_createElementVNode","_createVNode","_a"],"mappings":"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"}
|
|
@@ -56,6 +56,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
|
|
|
56
56
|
target: HTMLElement;
|
|
57
57
|
width: number;
|
|
58
58
|
}) => void;
|
|
59
|
+
cellEmptyText: import("vue").Ref<string, string>;
|
|
59
60
|
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
60
61
|
prefixCls: {
|
|
61
62
|
type: StringConstructor;
|
|
@@ -155,6 +155,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
|
|
|
155
155
|
target: HTMLElement;
|
|
156
156
|
width: number;
|
|
157
157
|
}) => void;
|
|
158
|
+
cellEmptyText: import("vue").Ref<string, string>;
|
|
158
159
|
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
159
160
|
prefixCls: {
|
|
160
161
|
type: StringConstructor;
|
package/package.json
CHANGED
|
@@ -4410,6 +4410,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
|
|
|
4410
4410
|
target: HTMLElement;
|
|
4411
4411
|
width: number;
|
|
4412
4412
|
}) => void;
|
|
4413
|
+
cellEmptyText: import("vue").Ref<string, string>;
|
|
4413
4414
|
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
4414
4415
|
prefixCls: {
|
|
4415
4416
|
type: StringConstructor;
|
|
@@ -5712,6 +5713,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
|
|
|
5712
5713
|
target: HTMLElement;
|
|
5713
5714
|
width: number;
|
|
5714
5715
|
}) => void;
|
|
5716
|
+
cellEmptyText: import("vue").Ref<string, string>;
|
|
5715
5717
|
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
5716
5718
|
prefixCls: {
|
|
5717
5719
|
type: StringConstructor;
|
|
@@ -4429,6 +4429,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
|
|
|
4429
4429
|
target: HTMLElement;
|
|
4430
4430
|
width: number;
|
|
4431
4431
|
}) => void;
|
|
4432
|
+
cellEmptyText: import("vue").Ref<string, string>;
|
|
4432
4433
|
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
4433
4434
|
prefixCls: {
|
|
4434
4435
|
type: StringConstructor;
|
|
@@ -5731,6 +5732,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
|
|
|
5731
5732
|
target: HTMLElement;
|
|
5732
5733
|
width: number;
|
|
5733
5734
|
}) => void;
|
|
5735
|
+
cellEmptyText: import("vue").Ref<string, string>;
|
|
5734
5736
|
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
5735
5737
|
prefixCls: {
|
|
5736
5738
|
type: StringConstructor;
|
|
@@ -4426,6 +4426,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
|
|
|
4426
4426
|
target: HTMLElement;
|
|
4427
4427
|
width: number;
|
|
4428
4428
|
}) => void;
|
|
4429
|
+
cellEmptyText: import("vue").Ref<string, string>;
|
|
4429
4430
|
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
4430
4431
|
prefixCls: {
|
|
4431
4432
|
type: StringConstructor;
|
|
@@ -5728,6 +5729,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
|
|
|
5728
5729
|
target: HTMLElement;
|
|
5729
5730
|
width: number;
|
|
5730
5731
|
}) => void;
|
|
5732
|
+
cellEmptyText: import("vue").Ref<string, string>;
|
|
5731
5733
|
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
5732
5734
|
prefixCls: {
|
|
5733
5735
|
type: StringConstructor;
|