refactor: table
parent
a948e663a9
commit
0d06e328a6
|
@ -70,7 +70,7 @@ export default defineComponent<BodyRowProps<unknown>>({
|
|||
};
|
||||
|
||||
// =========================== onRow ===========================
|
||||
let additionalProps = computed<Record<string, any>>(
|
||||
const additionalProps = computed<Record<string, any>>(
|
||||
() => props.customRow?.(props.record, props.index) || {},
|
||||
);
|
||||
|
||||
|
@ -84,7 +84,7 @@ export default defineComponent<BodyRowProps<unknown>>({
|
|||
}
|
||||
};
|
||||
|
||||
let computeRowClassName = computed(() => {
|
||||
const computeRowClassName = computed(() => {
|
||||
const { record, index, indent } = props;
|
||||
const { rowClassName } = bodyContext;
|
||||
if (typeof rowClassName === 'string') {
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import { CustomizeComponent } from '../interface';
|
||||
import type { CustomizeComponent } from '../interface';
|
||||
import Cell from '../Cell';
|
||||
import { defineComponent } from 'vue';
|
||||
import { useInjectTable } from '../context/TableContext';
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import VCResizeObserver from 'ant-design-vue/es/vc-resize-observer';
|
||||
import { Key } from '../interface';
|
||||
import type { Key } from '../interface';
|
||||
|
||||
export interface MeasureCellProps {
|
||||
columnKey: Key;
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
import classNames from 'ant-design-vue/es/_util/classNames';
|
||||
import { isValidElement, parseStyleText } from 'ant-design-vue/es/_util/props-util';
|
||||
import { CSSProperties, defineComponent, HTMLAttributes } from 'vue';
|
||||
import type { CSSProperties, HTMLAttributes } from 'vue';
|
||||
import { defineComponent } from 'vue';
|
||||
|
||||
import type {
|
||||
DataIndex,
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
import type { HeaderProps } from '../Header/Header';
|
||||
import ColGroup from '../ColGroup';
|
||||
import type { ColumnsType, ColumnType, DefaultRecordType } from '../interface';
|
||||
import type { Ref } from 'vue';
|
||||
import {
|
||||
computed,
|
||||
defineComponent,
|
||||
|
@ -8,7 +9,6 @@ import {
|
|||
onBeforeUnmount,
|
||||
onMounted,
|
||||
ref,
|
||||
Ref,
|
||||
toRef,
|
||||
watchEffect,
|
||||
} from 'vue';
|
||||
|
@ -107,11 +107,11 @@ export default defineComponent<FixedHeaderProps<DefaultRecordType>>({
|
|||
}),
|
||||
};
|
||||
|
||||
columnsWithScrollbar.value = combinationScrollBarSize
|
||||
columnsWithScrollbar.value = combinationScrollBarSize.value
|
||||
? [...props.columns, ScrollBarColumn]
|
||||
: props.columns;
|
||||
|
||||
flattenColumnsWithScrollbar.value = combinationScrollBarSize
|
||||
flattenColumnsWithScrollbar.value = combinationScrollBarSize.value
|
||||
? [...props.flattenColumns, ScrollBarColumn]
|
||||
: props.flattenColumns;
|
||||
});
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import { computed, defineComponent, FunctionalComponent, onBeforeUnmount, watchEffect } from 'vue';
|
||||
import { computed, defineComponent, onBeforeUnmount, watchEffect } from 'vue';
|
||||
import { useInjectTable } from '../context/TableContext';
|
||||
import Cell from './Cell';
|
||||
import Row from './Row';
|
||||
|
@ -7,15 +7,12 @@ export interface SummaryProps {
|
|||
fixed?: boolean | 'top' | 'bottom';
|
||||
}
|
||||
|
||||
export interface SummaryFC extends FunctionalComponent<SummaryProps> {
|
||||
Row: typeof Row;
|
||||
Cell: typeof Cell;
|
||||
}
|
||||
|
||||
let indexGuid = 0;
|
||||
const Summary = defineComponent<SummaryProps>({
|
||||
props: ['fixed'] as any,
|
||||
name: 'Summary',
|
||||
Row,
|
||||
Cell,
|
||||
setup(props, { slots }) {
|
||||
const tableContext = useInjectTable();
|
||||
const uniKey = `table-summary-uni-key-${++indexGuid}`;
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
import Summary from './Summary';
|
||||
import type { DefaultRecordType, StickyOffsets } from '../interface';
|
||||
import { computed, defineComponent, reactive, toRef } from 'vue';
|
||||
import { FlattenColumns, useProvideSummary } from '../context/SummaryContext';
|
||||
import type { FlattenColumns } from '../context/SummaryContext';
|
||||
import { useProvideSummary } from '../context/SummaryContext';
|
||||
import { useInjectTable } from '../context/TableContext';
|
||||
|
||||
export interface FooterProps<RecordType = DefaultRecordType> {
|
||||
|
@ -10,8 +11,8 @@ export interface FooterProps<RecordType = DefaultRecordType> {
|
|||
}
|
||||
|
||||
export default defineComponent({
|
||||
props: ['stickyOffsets', 'flattenColumns'],
|
||||
name: 'Footer',
|
||||
props: ['stickyOffsets', 'flattenColumns'],
|
||||
setup(props, { slots }) {
|
||||
const tableContext = useInjectTable();
|
||||
useProvideSummary(
|
||||
|
|
|
@ -20,7 +20,7 @@ function parseHeaderRows<RecordType>(
|
|||
function fillRowCells(
|
||||
columns: ColumnsType<RecordType>,
|
||||
colIndex: number,
|
||||
rowIndex: number = 0,
|
||||
rowIndex = 0,
|
||||
): number[] {
|
||||
// Init rows
|
||||
rows[rowIndex] = rows[rowIndex] || [];
|
||||
|
@ -35,7 +35,7 @@ function parseHeaderRows<RecordType>(
|
|||
colStart: currentColIndex,
|
||||
};
|
||||
|
||||
let colSpan: number = 1;
|
||||
let colSpan = 1;
|
||||
|
||||
const subColumns = (column as ColumnGroupType<RecordType>).children;
|
||||
if (subColumns && subColumns.length > 0) {
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import { defineComponent } from 'vue';
|
||||
import Cell from '../Cell';
|
||||
import { useInjectTable } from '../context/TableContext';
|
||||
import {
|
||||
import type {
|
||||
CellType,
|
||||
StickyOffsets,
|
||||
ColumnType,
|
||||
|
|
|
@ -29,9 +29,9 @@ import { getCellFixedInfo } from './utils/fixUtil';
|
|||
import StickyScrollBar from './stickyScrollBar';
|
||||
import useSticky from './hooks/useSticky';
|
||||
import FixedHolder from './FixedHolder';
|
||||
import type { CSSProperties } from 'vue';
|
||||
import {
|
||||
computed,
|
||||
CSSProperties,
|
||||
defineComponent,
|
||||
nextTick,
|
||||
onMounted,
|
||||
|
@ -49,7 +49,7 @@ import { toPx } from '../_util/util';
|
|||
import isVisible from '../vc-util/Dom/isVisible';
|
||||
import { getTargetScrollBarSize } from '../_util/getScrollBarSize';
|
||||
import classNames from '../_util/classNames';
|
||||
import { EventHandler } from '../_util/EventInterface';
|
||||
import type { EventHandler } from '../_util/EventInterface';
|
||||
import VCResizeObserver from '../vc-resize-observer';
|
||||
import { useProvideTable } from './context/TableContext';
|
||||
import { useProvideBody } from './context/BodyContext';
|
||||
|
@ -262,9 +262,9 @@ export default defineComponent<TableProps>({
|
|||
};
|
||||
|
||||
// Scroll
|
||||
let scrollXStyle = ref<CSSProperties>({});
|
||||
let scrollYStyle = ref<CSSProperties>({});
|
||||
let scrollTableStyle = ref<CSSProperties>({});
|
||||
const scrollXStyle = ref<CSSProperties>({});
|
||||
const scrollYStyle = ref<CSSProperties>({});
|
||||
const scrollTableStyle = ref<CSSProperties>({});
|
||||
|
||||
watchEffect(() => {
|
||||
if (fixHeader.value) {
|
||||
|
@ -356,7 +356,7 @@ export default defineComponent<TableProps>({
|
|||
};
|
||||
|
||||
const onFullTableResize = ({ width }) => {
|
||||
if (width !== componentWidth) {
|
||||
if (width !== componentWidth.value) {
|
||||
triggerOnScroll();
|
||||
componentWidth.value = fullTableRef.value ? fullTableRef.value.offsetWidth : width;
|
||||
}
|
||||
|
@ -561,7 +561,7 @@ export default defineComponent<TableProps>({
|
|||
>
|
||||
{bodyColGroup}
|
||||
{bodyTable}
|
||||
{!fixFooter && summaryNode && (
|
||||
{!fixFooter.value && summaryNode && (
|
||||
<Footer stickyOffsets={stickyOffsets} flattenColumns={flattenColumns.value}>
|
||||
{summaryNode}
|
||||
</Footer>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import {
|
||||
import type {
|
||||
ColumnType,
|
||||
DefaultRecordType,
|
||||
ColumnsType,
|
||||
|
@ -9,7 +9,8 @@ import {
|
|||
TriggerEventHandler,
|
||||
ExpandedRowRender,
|
||||
} from '../interface';
|
||||
import { inject, InjectionKey, provide } from 'vue';
|
||||
import type { InjectionKey } from 'vue';
|
||||
import { inject, provide } from 'vue';
|
||||
|
||||
export interface BodyContextProps<RecordType = DefaultRecordType> {
|
||||
rowClassName: string | RowClassName<RecordType>;
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
import { inject, InjectionKey, provide } from 'vue';
|
||||
import { Key } from '../interface';
|
||||
import type { InjectionKey } from 'vue';
|
||||
import { inject, provide } from 'vue';
|
||||
import type { Key } from '../interface';
|
||||
|
||||
interface ResizeContextProps {
|
||||
onColumnResize: (columnKey: Key, width: number) => void;
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
import { inject, InjectionKey, provide } from 'vue';
|
||||
import { ColumnType, StickyOffsets } from '../interface';
|
||||
import type { InjectionKey } from 'vue';
|
||||
import { inject, provide } from 'vue';
|
||||
import type { ColumnType, StickyOffsets } from '../interface';
|
||||
|
||||
export type FlattenColumns<RecordType> = readonly (ColumnType<RecordType> & {
|
||||
scrollbar?: boolean;
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
import { inject, InjectionKey, provide } from 'vue';
|
||||
import { GetComponent } from '../interface';
|
||||
import { FixedInfo } from '../utils/fixUtil';
|
||||
import type { InjectionKey } from 'vue';
|
||||
import { inject, provide } from 'vue';
|
||||
import type { GetComponent } from '../interface';
|
||||
import type { FixedInfo } from '../utils/fixUtil';
|
||||
|
||||
export interface TableContextProps {
|
||||
// Table context
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
import { warning } from 'ant-design-vue/es/vc-util/warning';
|
||||
import { computed, ComputedRef, Ref, watchEffect } from 'vue';
|
||||
import type { ComputedRef, Ref } from 'vue';
|
||||
import { computed, watchEffect } from 'vue';
|
||||
import type {
|
||||
ColumnsType,
|
||||
ColumnType,
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
import { computed, defineComponent, onBeforeUnmount, onMounted, ref, Ref, watch } from 'vue';
|
||||
import type { Ref } from 'vue';
|
||||
import { computed, defineComponent, onBeforeUnmount, onMounted, ref, watch } from 'vue';
|
||||
import addEventListenerWrap from '../vc-util/Dom/addEventListener';
|
||||
import { getOffset } from '../vc-util/Dom/css';
|
||||
import classNames from '../_util/classNames';
|
||||
import { MouseEventHandler } from '../_util/EventInterface';
|
||||
import type { MouseEventHandler } from '../_util/EventInterface';
|
||||
import getScrollBarSize from '../_util/getScrollBarSize';
|
||||
import { useInjectTable } from './context/TableContext';
|
||||
import { useLayoutState } from './hooks/useFrame';
|
||||
|
@ -188,7 +189,7 @@ export default defineComponent<StickyScrollBarProps>({
|
|||
<div
|
||||
style={{
|
||||
height: `${scrollbarSize}px`,
|
||||
width: `${bodyWidth}px`,
|
||||
width: `${bodyWidth.value}px`,
|
||||
bottom: `${props.offsetScroll}px`,
|
||||
}}
|
||||
class={`${prefixCls}-sticky-scroll`}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import { FunctionalComponent } from 'vue';
|
||||
import { ColumnType } from '../interface';
|
||||
import type { FunctionalComponent } from 'vue';
|
||||
import type { ColumnType } from '../interface';
|
||||
|
||||
export type ColumnProps<RecordType> = ColumnType<RecordType>;
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import { ColumnType } from '../interface';
|
||||
import { FunctionalComponent } from 'vue';
|
||||
import type { ColumnType } from '../interface';
|
||||
import type { FunctionalComponent } from 'vue';
|
||||
/* istanbul ignore next */
|
||||
/**
|
||||
* This is a syntactic sugar for `columns` prop.
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import { RenderExpandIconProps, Key, GetRowKey } from '../interface';
|
||||
import type { RenderExpandIconProps, Key, GetRowKey } from '../interface';
|
||||
|
||||
export function renderExpandIcon<RecordType>({
|
||||
prefixCls,
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import { Key, DataIndex } from '../interface';
|
||||
import type { Key, DataIndex } from '../interface';
|
||||
|
||||
const INTERNAL_KEY_PREFIX = 'RC_TABLE_KEY';
|
||||
|
||||
|
|
Loading…
Reference in New Issue