77 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Vue
		
	
	
			
		
		
	
	
			77 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Vue
		
	
	
| import type { PreviewGroupPreview } from '../vc-image/src/PreviewGroup';
 | |
| import PreviewGroup from '../vc-image/src/PreviewGroup';
 | |
| import type { ExtractPropTypes } from 'vue';
 | |
| import { computed, defineComponent } from 'vue';
 | |
| import useConfigInject from '../config-provider/hooks/useConfigInject';
 | |
| 
 | |
| import RotateLeftOutlined from '@ant-design/icons-vue/RotateLeftOutlined';
 | |
| import RotateRightOutlined from '@ant-design/icons-vue/RotateRightOutlined';
 | |
| import ZoomInOutlined from '@ant-design/icons-vue/ZoomInOutlined';
 | |
| import ZoomOutOutlined from '@ant-design/icons-vue/ZoomOutOutlined';
 | |
| import CloseOutlined from '@ant-design/icons-vue/CloseOutlined';
 | |
| import LeftOutlined from '@ant-design/icons-vue/LeftOutlined';
 | |
| import RightOutlined from '@ant-design/icons-vue/RightOutlined';
 | |
| import SwapOutlined from '@ant-design/icons-vue/SwapOutlined';
 | |
| import { getTransitionName } from '../_util/transition';
 | |
| import useStyle from './style';
 | |
| import { anyType } from '../_util/type';
 | |
| 
 | |
| export const icons = {
 | |
|   rotateLeft: <RotateLeftOutlined />,
 | |
|   rotateRight: <RotateRightOutlined />,
 | |
|   zoomIn: <ZoomInOutlined />,
 | |
|   zoomOut: <ZoomOutOutlined />,
 | |
|   close: <CloseOutlined />,
 | |
|   left: <LeftOutlined />,
 | |
|   right: <RightOutlined />,
 | |
|   flipX: <SwapOutlined />,
 | |
|   flipY: <SwapOutlined rotate={90} />,
 | |
| };
 | |
| const previewGroupProps = () => ({
 | |
|   previewPrefixCls: String,
 | |
|   preview: anyType<boolean | PreviewGroupPreview>(),
 | |
| });
 | |
| export type ImageGroupProps = Partial<ExtractPropTypes<ReturnType<typeof previewGroupProps>>>;
 | |
| 
 | |
| const InternalPreviewGroup = defineComponent({
 | |
|   compatConfig: { MODE: 3 },
 | |
|   name: 'AImagePreviewGroup',
 | |
|   inheritAttrs: false,
 | |
|   props: previewGroupProps(),
 | |
|   setup(props, { attrs, slots }) {
 | |
|     const { prefixCls, rootPrefixCls } = useConfigInject('image', props);
 | |
|     const previewPrefixCls = computed(() => `${prefixCls.value}-preview`);
 | |
|     const [wrapSSR, hashId] = useStyle(prefixCls);
 | |
|     const mergedPreview = computed(() => {
 | |
|       const { preview } = props;
 | |
|       if (preview === false) {
 | |
|         return preview;
 | |
|       }
 | |
|       const _preview = typeof preview === 'object' ? preview : {};
 | |
| 
 | |
|       return {
 | |
|         ..._preview,
 | |
|         rootClassName: hashId.value,
 | |
|         transitionName: getTransitionName(rootPrefixCls.value, 'zoom', _preview.transitionName),
 | |
|         maskTransitionName: getTransitionName(
 | |
|           rootPrefixCls.value,
 | |
|           'fade',
 | |
|           _preview.maskTransitionName,
 | |
|         ),
 | |
|       };
 | |
|     });
 | |
|     return () => {
 | |
|       return wrapSSR(
 | |
|         <PreviewGroup
 | |
|           {...{ ...attrs, ...props }}
 | |
|           preview={mergedPreview.value}
 | |
|           icons={icons}
 | |
|           previewPrefixCls={previewPrefixCls.value}
 | |
|           v-slots={slots}
 | |
|         ></PreviewGroup>,
 | |
|       );
 | |
|     };
 | |
|   },
 | |
| });
 | |
| export default InternalPreviewGroup;
 |