42 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Vue
		
	
	
			
		
		
	
	
			42 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Vue
		
	
	
| import classNames from '../_util/classNames';
 | |
| import type { TableLocale } from './interface';
 | |
| 
 | |
| interface DefaultExpandIconProps<RecordType> {
 | |
|   prefixCls: string;
 | |
|   onExpand: (record: RecordType, e: MouseEvent) => void;
 | |
|   record: RecordType;
 | |
|   expanded: boolean;
 | |
|   expandable: boolean;
 | |
| }
 | |
| 
 | |
| function renderExpandIcon(locale: TableLocale) {
 | |
|   return function expandIcon<RecordType>({
 | |
|     prefixCls,
 | |
|     onExpand,
 | |
|     record,
 | |
|     expanded,
 | |
|     expandable,
 | |
|   }: DefaultExpandIconProps<RecordType>) {
 | |
|     const iconPrefix = `${prefixCls}-row-expand-icon`;
 | |
| 
 | |
|     return (
 | |
|       <button
 | |
|         type="button"
 | |
|         onClick={e => {
 | |
|           onExpand(record, e!);
 | |
|           e.stopPropagation();
 | |
|         }}
 | |
|         class={classNames(iconPrefix, {
 | |
|           [`${iconPrefix}-spaced`]: !expandable,
 | |
|           [`${iconPrefix}-expanded`]: expandable && expanded,
 | |
|           [`${iconPrefix}-collapsed`]: expandable && !expanded,
 | |
|         })}
 | |
|         aria-label={expanded ? locale.collapse : locale.expand}
 | |
|         aria-expanded={expanded}
 | |
|       />
 | |
|     );
 | |
|   };
 | |
| }
 | |
| 
 | |
| export default renderExpandIcon;
 |