diff --git a/assets/preview.less b/assets/preview.less
index dc7eff3..9648ec3 100644
--- a/assets/preview.less
+++ b/assets/preview.less
@@ -25,7 +25,8 @@
}
}
- &-img {
+ &-img,
+ &-video {
max-width: 100%;
max-height: 70%;
}
diff --git a/docs/demo/previewvideo.md b/docs/demo/previewvideo.md
new file mode 100644
index 0000000..bbffcaa
--- /dev/null
+++ b/docs/demo/previewvideo.md
@@ -0,0 +1,8 @@
+---
+title: previewvideo
+nav:
+ title: Demo
+ path: /demo
+---
+
+
diff --git a/docs/examples/previewvideo.tsx b/docs/examples/previewvideo.tsx
new file mode 100644
index 0000000..7cb0f47
--- /dev/null
+++ b/docs/examples/previewvideo.tsx
@@ -0,0 +1,42 @@
+import Image from '@rc-component/image';
+import * as React from 'react';
+import '../../assets/index.less';
+import { defaultIcons } from './common';
+
+export default function PreviewVideo() {
+ return (
+
+
+
+
+
PreviewGroup
+
+
+
+
+
+ );
+}
diff --git a/src/Image.tsx b/src/Image.tsx
index 8b23034..a1d7ce5 100644
--- a/src/Image.tsx
+++ b/src/Image.tsx
@@ -117,6 +117,7 @@ const ImageInternal: CompoundedComponent = props => {
const canPreview = !!preview;
const {
+ type: previewType = 'image',
src: previewSrc,
open: previewOpen,
onOpenChange: onPreviewOpenChange,
@@ -178,8 +179,9 @@ const ImageInternal: CompoundedComponent = props => {
() => ({
...imgCommonProps,
src,
+ type: previewType,
}),
- [src, imgCommonProps],
+ [src, imgCommonProps, previewType],
);
const imageId = useRegisterImage(canPreview, registerData);
@@ -266,6 +268,7 @@ const ImageInternal: CompoundedComponent = props => {
prefixCls={previewPrefixCls}
onClose={onPreviewClose}
mousePosition={mousePosition}
+ type={previewType}
src={src}
alt={alt}
imageInfo={{ width, height }}
diff --git a/src/Preview/index.tsx b/src/Preview/index.tsx
index 02d2252..75ebf80 100644
--- a/src/Preview/index.tsx
+++ b/src/Preview/index.tsx
@@ -72,7 +72,8 @@ export interface InternalPreviewConfig {
/** Better to use `classNames.root` instead */
rootClassName?: string;
- // Image
+ // Media
+ type?: 'image' | 'video';
src?: string;
alt?: string;
@@ -121,7 +122,7 @@ export interface PreviewProps extends InternalPreviewConfig {
};
fallback?: string;
- // Preview image
+ // Preview media
imgCommonProps?: React.ImgHTMLAttributes;
width?: string | number;
height?: string | number;
@@ -165,6 +166,7 @@ const Preview: React.FC = props => {
const {
prefixCls,
rootClassName,
+ type = 'image',
src,
alt,
imageInfo,
@@ -425,13 +427,24 @@ const Preview: React.FC = props => {
{/* Body */}
{/* Preview Image */}
- {imageRender
- ? imageRender(imgNode, {
- transform,
- image,
- ...(groupContext ? { current } : {}),
- })
- : imgNode}
+ {type === 'image' &&
+ (imageRender
+ ? imageRender(imgNode, {
+ transform,
+ image,
+ ...(groupContext ? { current } : {}),
+ })
+ : imgNode)}
+ {type === 'video' && (
+
+ )}
{/* Close Button */}
@@ -454,37 +467,38 @@ const Preview: React.FC = props => {
/>
)}
- {/* Footer */}
-
+ {type === 'image' && (
+
+ )}
);
}}
diff --git a/src/PreviewGroup.tsx b/src/PreviewGroup.tsx
index 59e2dcb..9eff685 100644
--- a/src/PreviewGroup.tsx
+++ b/src/PreviewGroup.tsx
@@ -67,7 +67,7 @@ const Group: React.FC = ({
const [keepOpenIndex, setKeepOpenIndex] = useState(false);
// >>> Image
- const { src, ...imgCommonProps } = mergedItems[current]?.data || {};
+ const { src, type, ...imgCommonProps } = mergedItems[current]?.data || {};
// >>> Visible
const [isShowPreview, setShowPreview] = useMergedState(!!previewOpen, {
value: previewOpen,
@@ -136,6 +136,7 @@ const Group: React.FC = ({
mousePosition={mousePosition}
imgCommonProps={imgCommonProps}
src={src}
+ type={type}
fallback={fallback}
icons={icons}
current={current}
diff --git a/src/interface.ts b/src/interface.ts
index 42120a7..ed0bcd2 100644
--- a/src/interface.ts
+++ b/src/interface.ts
@@ -13,7 +13,7 @@ export type ImageElementProps = Pick<
| 'srcSet'
| 'useMap'
| 'alt'
->;
+> & { type?: 'image' | 'video' };
export type PreviewImageElementProps = {
data: ImageElementProps;