Untitled
unknown
plain_text
5 months ago
22 kB
2
Indexable
import React, { useEffect, useState } from "react"; import Modal from "react-bootstrap/Modal"; import Button from "react-bootstrap/Button"; import { Calendar, momentLocalizer } from "react-big-calendar"; import moment from "moment"; import "react-big-calendar/lib/css/react-big-calendar.css"; import "./CalendatTab.css"; import ArrowRightAltIcon from "@mui/icons-material/ArrowRightAlt"; import AddIcon from "@mui/icons-material/Add"; import ArrowBackIcon from "@mui/icons-material/ArrowBack"; import Spinner from "react-bootstrap/Spinner"; import { ButtonGroup } from "@material-ui/core"; import Trialcam from "./Trialcam"; import { faL } from "@fortawesome/free-solid-svg-icons"; import { BottomNavigation } from "@mui/material"; const CustomTab = ({ label, active, onClick }) => ( <div className={`tabical ${active ? "active" : ""}`} onClick={onClick}> {label} </div> ); const localizer = momentLocalizer(moment); const CalanderTabAgain = (props) => { const { calanderdata,selfiedata } = props; const [showModal, setShowModal] = useState(false); const [selectedDate, setSelectedDate] = useState(null); const [selectedItems, setSelectedItems] = useState([]); const [events, setEvents] = useState([]); const [selectedImage, setSelectedImage] = useState([]); const [hasimages, setHasImages] = useState(false); const [activeTab, setActiveTab] = useState(0); const handleTabClick = (index) => { setActiveTab(index); }; const [show, setShow] = useState(false); const handleClose = () => { setShow(false); setImageUrl(null); setIsClicked(false); setOpencam(false); }; const handleShow = () => { setImageUrl(null); setShow(true) setIsClicked(false); }; const [date, setDate] = useState(false); const handleClosed = () => setDate(false); ////////////////////////////////////////////// const [imageUrl, setImageUrl] = useState(null); const [loading, setLoading] = useState(false); const [opencam, setOpencam] = useState(false); const [isClicked, setIsClicked] = useState(false); const [imagedata, setImagedata] = useState([]); const [capturedImages, setCapturedImages] = useState([]); const [imageslocal,setImagesLocal]=useState([]); const[shownew,setShowNew]=useState(false); const handleclickopen=()=>{ setShowNew(true); } const handleClickCam = () => { setOpencam(true); }; const handleCapture = (imageSrc) => { setImageUrl(imageSrc); // Update the imageUrl state with the captured image URL }; const handleDivClick = () => { setIsClicked(true); }; const handleImageUpload = () => { // Open the file picker dialog const input = document.createElement("input"); input.type = "file"; input.accept = "image/*"; input.onchange = (e) => { const file = e.target.files[0]; if (file) { const reader = new FileReader(); reader.onloadend = () => { setImageUrl(reader.result); }; reader.readAsDataURL(file); } }; input.click(); }; //////////////////////////////////////////////// // Function to handle item selection const handleItemClick = (item) => { if (selectedItems.includes(item)) { // Item is already selected, deselect it setSelectedItems( selectedItems.filter((selectedItem) => selectedItem !== item) ); } else { // Item is not selected, select it setSelectedItems([...selectedItems, item]); } }; // Function to handle adding outfits to the selected date const handleAddOutfitsToDate = () => { if (selectedDate && selectedItems.length > 0) { const existingEvent = events.find((event) => moment(event.start).isSame(selectedDate, "day") ); if (existingEvent) { // Update existing event with new outfits existingEvent.outfits.push(selectedItems); setEvents([...events]); } else { // Create a new event const newEvent = { title: "Outfits", start: selectedDate, end: selectedDate, allDay: true, outfits: [selectedItems], }; setEvents([...events, newEvent]); } handleCloseModal(); } }; console.log("eventiy", events); const handleSelectSlot = ({ start }) => { const hasImagesForDate = events.some( (event) => moment(event.start).isSame(start, "day") && event.outfits.some((outfit) => outfit.length > 0) ); if (!hasImagesForDate) { setSelectedDate(start); // setShowModal(true); setShow(true); } }; const handleCloseModal = () => { setSelectedDate(null); setShowModal(false); setSelectedItems([]); // Reset selected items when modal is closed }; const Toolbar = ({ label }) => ( <div className="toolbar-container"> <div className="center-label" style={{ textAlign: "center" }}> {/* Always display the month in the center */} {label} </div> </div> ); const CustomDay = ({ children, date }) => { // Check if there are images for the selected date const hasImagesForDate = events.some( (event) => moment(event.start).isSame(date, "day") && event.outfits.some((outfit) => outfit.length > 0) ); // Handle click event only if the cell contains images const handleClick = () => { if (hasImagesForDate) { setSelectedDate(date); setShowModal(true); } }; return ( <div className={`date-cellofmybox ${ hasImagesForDate ? "has-hdhdhimages" : "" }`} onClick={handleClick} > {children} </div> ); }; const dayPropGetter = (date) => { return { className: "date-cellofmybox", }; }; const eventImage = events.length > 0 ? { outfits: events[0]?.outfits ?? [], start: events[0]?.start ? new Date(events[0]?.start) : null, } : { outfits: [], start: null, }; const handleShowed = (image) => { setSelectedImage(image); setSelectedDate(image.start); setDate(true); console.log("selectedImage",selectedImage) }; useEffect(() => { const formattedEvents = selfiedata.map((data, index) => { // Ensure data.date is a valid Date object const date = new Date(data.date); if (!isNaN(date.getTime())) { const startDate = new Date(date.getFullYear(), date.getMonth(), date.getDate()); return { title: `Event ${index + 1}`, start: startDate, end: startDate, outfits: [{ imageUrl: data.imageUrl }], }; } return null; // Return null for invalid dates }).filter(event => event !== null); // Filter out any null events // Combine outfits by date const combinedOutfits = formattedEvents.reduce((acc, event) => { const dateKey = event.start.toISOString().split('T')[0]; // Use ISO date string as key if (!acc[dateKey]) { acc[dateKey] = { title: event.title, start: event.start, end: event.end, outfits: [] }; } acc[dateKey].outfits.push(event.outfits[0]); return acc; }, {}); const combinedEvents = Object.values(combinedOutfits); setEvents(combinedEvents); }, [selfiedata]); // Update CustomEvent component to render images const EventComponent = ({ event}) => { console.log("evevev", event); return ( <div style={{ width: "39px", maxHeight: "60px" }} > {event.outfits && event.outfits.map((outfit, index) => ( <div key={index} onClick={() => handleShowed(outfit)} > <img src={outfit.imageUrl} alt={`Outfit ${index + 1}`} /> </div> ))} </div> ); }; const handleClickSaved = () => { // Add the temporary image URL to the imagedata state if (imagedata) { setCapturedImages((prevImagedata) => [...prevImagedata, imageUrl]); } if(setImagesLocal){ setImagesLocal((prevImagedata) => [...prevImagedata, imageUrl]) } setShow(false); }; console.log("events",events) console.log("calanderdata",calanderdata) console.log("selfiedata",selfiedata) return ( <> {/* {hasimages && ( <div> There are images on selected dates: {events.map((event, index) => ( <div key={index}>{moment(event.start).format('MMMM DD, YYYY')}</div> ))} </div> )} */} {/* <Button variant="primary" onClick={handleclickopen}>calanderTABAGAIN</Button> */} <div style={{ marginBottom: "3rem" }}> <style>{` .rbc-event, .rbc-day-slot .rbc-background-event{ background-color: transparent !important; } `}</style> <Calendar localizer={localizer} events={events} selectable onSelectSlot={handleSelectSlot} startAccessor="start" endAccessor="end" style={{ height: 500, width: "100%" }} components={{ dayWrapper: CustomDay, toolbar: Toolbar, event: (props) => (<EventComponent {...props} /> ) }} dayPropGetter={dayPropGetter} /> </div> <Modal show={show} onHide={handleClose} centered id="mnbvcxLOP"> <Modal.Body style={{ overflow: "hidden" }}> <Modal.Header style={{ margin: "0", padding: "0", alignItems: "center", }} > <ArrowBackIcon onClick={handleClose} style={{ marginBottom: "8px" }} /> <h6 className="calh66">TAKE A SELFIE</h6> </Modal.Header> <div className="cvbnCAL"> We will automatically remove the background for a cleaner look. </div> <div> {imageUrl ? ( <div className="whitieboixxcTAB"> {loading ? ( <div style={{ position: "absolute", top: "50%", left: "50%", transform: "translate(-50%, -50%)", zIndex: 1, }} > <Spinner animation="border" role="status"> <span className="visually-hidden"> Loading... </span> </Spinner> </div> ) : ( <> <img src={imageUrl} alt="Uploaded" style={{ width: "100%", height: "100%", }} /> </> )} </div> ) : opencam ? ( <div className="whitieboixxc"> <Trialcam onCapture={handleCapture} setImagedata={setImagedata} imagedata={imagedata} /> </div> ) : ( <div className="whitieboixxcTAB" onClick={handleDivClick} > {isClicked ? ( <div className="bgroupmar"> <ButtonGroup orientation="vertical" aria-label="Vertical button group" variant="contained" > <Button onClick={handleClickCam}> Photo from Camera </Button> <Button onClick={handleImageUpload}> Photo from Library </Button> </ButtonGroup> </div> ) : ( <div className="alboix">CHOOSE PHOTO</div> )} </div> )} </div> </Modal.Body> <Modal.Footer style={{ padding: "6px" }}> <div className="footer_bnt_collieCAL" onClick={handleClickSaved}> <div className="button_name_fnextCAL" >SAVE</div> <ArrowRightAltIcon sx={{ color: "white" }} /> </div> </Modal.Footer> </Modal> {/* calander date model */} <Modal centered show={date} onHide={handleClosed} id="mnbvcxxc"> <Modal.Body className="bodystylesad" selectedDate={selectedDate}> <Modal.Header style={{ margin: "0", padding: "0", alignItems: "center" }} > <ArrowBackIcon onClick={handleClosed} style={{ marginBottom: "8px" }} /> <h6 className="calh66"> {selectedDate ? moment(selectedDate).format("MMMM DD, YYYY") : " "} </h6> </Modal.Header> {/* Custom tab and content */} <div className="tab_containerTab"> <CustomTab label="OUTFIT" active={activeTab === 0} onClick={() => handleTabClick(0)} /> <CustomTab label="SELFIE" active={activeTab === 1} onClick={() => handleTabClick(1)} /> </div> <div className="tab-contentCalTab"> {activeTab === 0 ? ( <div> <div className="row" style={{ justifyContent: "start", minHeight: "410px" }} > {selectedImage && selectedImage.outfits && selectedImage.outfits.flat().map((items, index) => { return ( <div key={index} className={`col-4 columnthreee d-flex border box-item`} > { Array.isArray(items) &&items.map((subItems, sIndex) => { return ( <img className="nullimageclasse" key={sIndex} src={subItems} alt={`item-${sIndex}`} /> ); })} </div> ); })} </div> <div className="iconad"> <AddIcon onClick={() => setShowModal(true)} style={{ textAlign: "center", marginTop: "10px" }} /> </div> </div> ) : ( <div> <div style={{ minHeight: "410px" , maxHeight:"410px", overflowX:"hidden",overflowY:"auto",scrollbarWidth:"none"}}> {(capturedImages.concat(imageslocal)).length > 0 ? ( <div className="row" style={{ display: "flex", justifyContent: "start" }}> {[...new Set(capturedImages.concat(imageslocal))].map((imageSrc, index) => ( <div key={index} className="col-4 columnthreee d-flex border box-item"> <img className="imgcls12" src={imageSrc} alt={`item-${index}`} /> </div> ))} </div> ) : ( <> <h2>Hello</h2> <h4>No Image Data.</h4> </> )} </div> <div className="iconad"> <AddIcon onClick = {handleShow} style={{ textAlign: "center", marginTop: "10px" }} /> </div> <Modal show={show} onHide={handleClose} centered id="mnbvcxLOP"> <Modal.Body style={{ overflow: "hidden" }}> <Modal.Header style={{ margin: "0", padding: "0", alignItems: "center", }} > <ArrowBackIcon onClick={handleClose} style={{ marginBottom: "8px" }} /> <h6 className="calh66">TAKE A SELFIE</h6> </Modal.Header> <div className="cvbnCAL"> We will automatically remove the background for a cleaner look. </div> <div> {imageUrl ? ( <div className="whitieboixxcTAB"> {loading ? ( <div style={{ position: "absolute", top: "50%", left: "50%", transform: "translate(-50%, -50%)", zIndex: 1, }} > <Spinner animation="border" role="status"> <span className="visually-hidden"> Loading... </span> </Spinner> </div> ) : ( <> <img src={imageUrl} alt="Uploaded" style={{ width: "100%", height: "100%", }} /> </> )} </div> ) : opencam ? ( <div className="whitieboixxc"> <Trialcam onCapture={handleCapture} setImagedata={setImagedata} imagedata={imagedata} /> </div> ) : ( <div className="whitieboixxcTAB" onClick={handleDivClick} > {isClicked ? ( <div className="bgroupmar"> <ButtonGroup orientation="vertical" aria-label="Vertical button group" variant="contained" > <Button onClick={handleClickCam}> Photo from Camera </Button> <Button onClick={handleImageUpload}> Photo from Library </Button> </ButtonGroup> </div> ) : ( <div className="alboix">CHOOSE PHOTO</div> )} </div> )} </div> </Modal.Body> <Modal.Footer style={{ padding: "6px" }}> <div className="footer_bnt_collieCAL" onClick={handleClickSaved}> <div className="button_name_fnextCAL" >SAVE</div> <ArrowRightAltIcon sx={{ color: "white" }} /> </div> </Modal.Footer> </Modal> </div> )} </div> </Modal.Body> {/* <Modal.Footer style={{justifyContent:"center"}}> <AddIcon onClick={() => setShowModal(true)} style={{textAlign:"center"}}/> </Modal.Footer> */} </Modal> </> ); }; export default CalanderTabAgain;
Editor is loading...
Leave a Comment