IB-AR-Neural-Style-Transfers / artficial.webapp / src / components / Artwork / CreateArtwork / Step1 / Step1.js
Step1.js
Raw
import React, { useState } from "react";
import { Link } from "react-router-dom";
import { Image, CloudinaryContext } from "cloudinary-react";
import { Center, Flex, Stack } from "@chakra-ui/react";
import axios from "axios";
import { Spinner } from "@chakra-ui/react";
import { motion } from "framer-motion";
import { useNavigate } from "react-router-dom";

import { Button, Heading, Text } from "@chakra-ui/react";
import {
  Box,
  FormControl,
  FormLabel,
  Input,
  FormHelperText,
} from "@chakra-ui/react";
import { Checkbox, useColorModeValue } from "@chakra-ui/react";

const Step1 = () => {
  const [imageSelected, setImageSelected] = React.useState("");
  const [formData, setFormData] = useState({});
  const [errors, setErrors] = useState({});
  const [uploadedUrl, setUploadedUrl] = useState("");
  const [loading, setLoading] = useState(false);
  const [error, setError] = useState(false);
  const [isImageSelected, setIsImageSelected] = useState(false);



  const uploadImage = () => {
    setLoading(true);
    const formData = new FormData();
    formData.append("file", imageSelected);
    formData.append("upload_preset", "kf2dcmgt");
    axios
      .post("https://api.cloudinary.com/v1_1/dlx4hhpw2/image/upload", formData)
      .then((response) => {
        // console.log(response);
        setLoading(false);
        setUploadedUrl(response.data.secure_url);
        setIsImageSelected(true);
      });
    
  };

  return (
    <motion.Flex
      minH={"100vh"}
      align={"center"}
      justify={"center"}
      bg={useColorModeValue("gray.50", "gray.800")}
      initial={{ opacity: 0 }}
      animate={{ opacity: 1 }}
      exit={{ opacity: 0, transition: { duration: 0.1 } }}>
      <Stack spacing={8} mx={"auto"} maxW={"lg"} py={12} px={6}>
        <Stack align={"center"}>
          <Heading fontSize={"4xl"}>Provide a content image.</Heading>
          <Text fontSize={"lg"} color={"gray.600"}>
            Upload your image <Link color={"blue.400"}> to get started</Link> 
          </Text>
        </Stack>
        <Box
          rounded={"lg"}
          bg={useColorModeValue("white", "gray.700")}
          boxShadow={"lg"}
          p={8}>
           
            <Stack spacing={4}>
              <Center>
                <Text color={"gray.500"} fontSize={{ base: "sm", sm: "md" }}>
                   You can upload image of any resolution and size. 
                </Text>
              </Center>
              <Center>
                <Text color={"gray.500"} fontSize={{ base: "sm", sm: "md" }}>
                  <input
                    type="file"
                    onChange={(e) => {
                      setImageSelected(e.target.files[0]);
                    }}
                  />
                  <Button onClick={uploadImage}>Upload</Button>
                </Text>
              </Center>
              <Stack>
                <Center>
                  {loading ? (
                    <Spinner color="red.500" />
                  ) : (
                    <Image
                      style={{ width: 200 }}
                      cloudName="dlx4hhpw2"
                      publicId={uploadedUrl}
                    />
                  )}
                </Center>
                <Box as={"form"} mt={10}>
                  <Link to="/createartwork/step2" state={{ uploadedUrl }}>
                    <Button
                      fontFamily={"heading"}
                      mt={8}
                      w={"full"}
                      bgGradient="linear(to-r, red.400,pink.400)"
                      color={"white"}
                      _hover={{
                        bgGradient: "linear(to-r, red.400,pink.400)",
                        boxShadow: "xl",
                      }} disabled={!isImageSelected}>
                      Proceed
                    </Button>
                  </Link>
                </Box>
              </Stack>
            </Stack>
        
        </Box>
      </Stack>
    </motion.Flex>
  );
};

export default Step1;