41 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Vue
		
	
	
			
		
		
	
	
			41 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Vue
		
	
	
| import Summary from './Summary';
 | |
| import SummaryRow from './Row';
 | |
| import SummaryCell from './Cell';
 | |
| import type { DefaultRecordType, StickyOffsets } from '../interface';
 | |
| import { computed, defineComponent, reactive, toRef } from 'vue';
 | |
| import type { FlattenColumns } from '../context/SummaryContext';
 | |
| import { useProvideSummary } from '../context/SummaryContext';
 | |
| import { useInjectTable } from '../context/TableContext';
 | |
| 
 | |
| export interface FooterProps<RecordType = DefaultRecordType> {
 | |
|   stickyOffsets: StickyOffsets;
 | |
|   flattenColumns: FlattenColumns<RecordType>;
 | |
| }
 | |
| 
 | |
| export default defineComponent<FooterProps>({
 | |
|   name: 'Footer',
 | |
|   inheritAttrs: false,
 | |
|   props: ['stickyOffsets', 'flattenColumns'] as any,
 | |
|   setup(props, { slots }) {
 | |
|     const tableContext = useInjectTable();
 | |
|     useProvideSummary(
 | |
|       reactive({
 | |
|         stickyOffsets: toRef(props, 'stickyOffsets'),
 | |
|         flattenColumns: toRef(props, 'flattenColumns'),
 | |
|         scrollColumnIndex: computed(() => {
 | |
|           const lastColumnIndex = props.flattenColumns.length - 1;
 | |
|           const scrollColumn = props.flattenColumns[lastColumnIndex];
 | |
|           return scrollColumn?.scrollbar ? lastColumnIndex : null;
 | |
|         }),
 | |
|       }),
 | |
|     );
 | |
|     return () => {
 | |
|       const { prefixCls } = tableContext;
 | |
|       return <tfoot class={`${prefixCls}-summary`}>{slots.default?.()}</tfoot>;
 | |
|     };
 | |
|   },
 | |
| });
 | |
| 
 | |
| export { SummaryRow, SummaryCell };
 | |
| export const FooterComponents = Summary;
 |