Skip to content

Commit 78c97e6

Browse files
Added Video in Create post form
Signed-off-by: NishantSinghhhhh <[email protected]>
1 parent a86fc90 commit 78c97e6

File tree

1 file changed

+63
-1
lines changed

1 file changed

+63
-1
lines changed

src/screens/OrgPost/OrgPost.tsx

Lines changed: 63 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,8 @@ function OrgPost(): JSX.Element {
5252
const [currentPage, setCurrentPage] = useState(1);
5353
const postsPerPage = 6;
5454
const [displayPosts, setDisplayPosts] = useState<InterfacePost[]>([]);
55-
55+
const [videoFile, setVideoFile] = useState<File | null>(null);
56+
const [videoPreview, setVideoPreview] = useState('');
5657
const [file, setFile] = useState<File | null>(null);
5758
const { orgId: currentUrl } = useParams();
5859
const [showTitle, setShowTitle] = useState(true);
@@ -385,6 +386,28 @@ function OrgPost(): JSX.Element {
385386
}
386387
}
387388
};
389+
const handleVideoAddMediaChange = async (
390+
e: React.ChangeEvent<HTMLInputElement>,
391+
): Promise<void> => {
392+
const selectedFile = e.target.files?.[0];
393+
if (selectedFile) {
394+
if (!selectedFile.type.startsWith('video/')) {
395+
toast.error('Please select a video file');
396+
return;
397+
}
398+
setVideoFile(selectedFile);
399+
try {
400+
const base64 = await convertToBase64(selectedFile);
401+
setVideoPreview(base64);
402+
} catch {
403+
toast.error('Could not generate video preview');
404+
}
405+
} else {
406+
setVideoFile(null);
407+
setVideoPreview('');
408+
}
409+
};
410+
388411
return (
389412
<>
390413
<Row className={styles.head}>
@@ -515,6 +538,17 @@ function OrgPost(): JSX.Element {
515538
className={`mb-3 ${styles.inputField}`}
516539
/>
517540

541+
<Form.Control
542+
id="videoAddMedia"
543+
name="videoAddMedia"
544+
type="file"
545+
accept="video/*"
546+
placeholder={t('addVideo')}
547+
onChange={handleVideoAddMediaChange}
548+
data-testid="addVideoField"
549+
className={`mb-3 ${styles.inputField}`}
550+
/>
551+
518552
{postformState.addMedia && file && (
519553
<div className={styles.previewOrgPost} data-testid="mediaPreview">
520554
{file.type.startsWith('image') ? (
@@ -549,6 +583,34 @@ function OrgPost(): JSX.Element {
549583
</button>
550584
</div>
551585
)}
586+
587+
{videoPreview && videoFile && (
588+
<div
589+
className={styles.previewOrgPost}
590+
data-testid="videoPreviewContainer"
591+
>
592+
<video controls data-testid="videoPreview">
593+
<source src={videoPreview} type={videoFile.type} />({t('tag')}
594+
)
595+
</video>
596+
<button
597+
className={styles.closeButtonOrgPost}
598+
onClick={(): void => {
599+
setVideoPreview('');
600+
setVideoFile(null);
601+
const fileInput = document.getElementById(
602+
'videoAddMedia',
603+
) as HTMLInputElement;
604+
if (fileInput) {
605+
fileInput.value = '';
606+
}
607+
}}
608+
data-testid="videoMediaCloseButton"
609+
>
610+
<i className="fa fa-times"></i>
611+
</button>
612+
</div>
613+
)}
552614
<Form.Label htmlFor="pinpost" className="mt-3">
553615
{t('pinPost')}
554616
</Form.Label>

0 commit comments

Comments
 (0)