import React, { useState } from "react"; import { Modal, Button, CloseButton } from "react-bootstrap"; import StorageImage from "./StorageImage"; import ProfileLink from "./ProfileLink"; import UploadPhoto from "./UploadPhoto"; import { HiOutlinePhotograph } from "react-icons/hi"; import { AiFillYoutube } from "react-icons/ai"; import "./PostModal.css"; import { handleTextareaChange, addPhoto, delPhoto } from "./helper"; import { useSelector } from "react-redux"; import { upload } from "../backend/backend"; const PostModal = (props) => { const { show, onClose, setText, isYoutubeBtnPressed, placeholder } = props; const user = useSelector((state) => state.currentUser); const userID = useSelector((state) => state.user.id); const WELCOME_TEXT = `For adding YouTube video do the following: 1. copy link of the video from the addresse bar of your browser 2. press YouTube button again to upload the YouTube video to your post 3. add your text for the post 4. push the post button`; const INIT_POST = { userID: `${userID}`, text: "", isPhoto: false, photoURL: "", isYoutube: false, youtubeURL: "", likes: [], }; const [post, setPost] = useState(INIT_POST); function handleChange(e) { const value = handleTextareaChange({ e: e, state: post, setState: setPost, }); setPostBtnEnabled(value); } function setPostBtnEnabled(value) { if (value === "") setBtnEnabled(false); else setBtnEnabled(true); setText(value); } const [isBtnEnabled, setBtnEnabled] = useState(false); let variant, disabled; if (isBtnEnabled) { variant = "primary"; disabled = false; } else { variant = "secondary"; disabled = true; } const [showUploadPhotoDlg, setShowUploadPhotoDlg] = useState(false); function addPhotoToPost(file) { addPhoto({ state: post, setState: setPost, file: file, userID: userID, }); setBtnEnabled(true); } function deletePhoto() { delPhoto({ state: post, setState: setPost, user: user, userID: userID, sideEffect: setPostBtnAsSideEffect, }); } function setPostBtnAsSideEffect() { if (post.text === "" && !post.isYoutube) setBtnEnabled(false); } function uploadPost() { upload(post).then(() => { setPost(INIT_POST); setText(""); onClose(); }); } function addYoutubeVideo() { const url = post.text; const URL_PATTERN = "https://www.youtube.com/watch?v="; const MOBILE_URL_PATTERN = "https://m.youtube.com/watch?v="; if (!url.startsWith(URL_PATTERN) && !url.startsWith(MOBILE_URL_PATTERN)) return; let patternLength; if (url.startsWith(URL_PATTERN)) patternLength = URL_PATTERN.length; else patternLength = MOBILE_URL_PATTERN.length; const videoID = url.slice(patternLength); const youtubeURL = `https://www.youtube.com/embed/${videoID}`; const newPost = { ...post }; newPost.isYoutube = true; newPost.youtubeURL = youtubeURL; newPost.text = ""; setPost(newPost); setText(""); setBtnEnabled(true); } function deleteYoutubeVideo() { const newPost = { ...post }; newPost.isYoutube = false; newPost.youtubeURL = ""; setPost(newPost); if (post.text === "" && !post.isPhoto) setBtnEnabled(false); } function getPlaceholder() { if (isYoutubeBtnPressed && !post.isYoutube) return WELCOME_TEXT; else return placeholder; } function getRows() { if (getPlaceholder() === WELCOME_TEXT && post.text === "") return 7; else return 3; } return ( <>
Create Post
{post.isPhoto && (
)} {post.isYoutube && (
)}
Add to your post
); }; export default PostModal;