Showing posts with label CONTAXT API. Show all posts
Showing posts with label CONTAXT API. Show all posts

Sunday, January 14, 2024

Context Api With Stepper with Form Data

January 14, 2024 0

 Context Api With Stepper with Form Data


// App.js

import { Step, StepLabel, Stepper } from "@mui/material";
import BasicDetails from "./Page/Property Registration/Basicdetails";
import LocationDetails from "./Page/Property Registration/Locationdetails";
import PropertyDetails from "./Page/Property Registration/Propertydetails";
import { multiStepContext } from "./StepContext";
import { useContext } from "react";
import DisplayData from "./Page/Property Registration/Displaydata";

function App() {

  const { currentStep, finalData } = useContext(multiStepContext);
  function showStep(step) {
    switch (step) {
      case 1:
        return <BasicDetails />
      case 2:
        return <LocationDetails />
      case 3:
        return <PropertyDetails />
    }
  }
  return (
    <div style={{ textAlign: "center" }}>
      <h1>Hello Print</h1>
      <Stepper style={{ width: '80%', paddingLeft: '10%' }} activeStep={currentStep - 1} orientation="horizontal" >
        <Step>
          <StepLabel>Basic Details</StepLabel>
        </Step>
        <Step>
          <StepLabel>Location Details</StepLabel>
        </Step>
        <Step>
          <StepLabel>Property Details</StepLabel>
        </Step>
      </Stepper>

      {showStep(currentStep)}
      {
        finalData.length > 0 ? <DisplayData /> : ''
      }
    </div>

  );
}

export default App;

// index.js

import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';
import StepContext from './StepContext';

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
  <StepContext>
    <React.StrictMode>
      <App />
    </React.StrictMode>
  </StepContext>

);

// If you want to start measuring performance in your app, pass a function
// to log results (for example: reportWebVitals(console.log))
// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
reportWebVitals();

// StepContext.js

import React, { useState } from "react";
import App from './App';

export const multiStepContext = React.createContext();

const StepContext = () => {
    const [currentStep, setStep] = useState(1);
    const [userData, setUserData] = useState([]);
    const [finalData, setFinalData] = useState([]);

    function submitData() {
        setFinalData(finalData => [...finalData, userData]);
        setUserData('');
        setStep(1);
        console.log("User All Data :- ", userData);
    }
    return (
        <div>
            <multiStepContext.Provider value={{ currentStep, setStep, userData, setUserData, finalData, setFinalData, submitData }} >
                <App />
            </multiStepContext.Provider>
        </div>
    );
}

export default StepContext;


//Create Page  using Stepper

Page :- 1 ( Basicdetails.jsx)


import { Box, Button, TextField } from "@mui/material";
import { multiStepContext } from "../../StepContext";
import { useContext } from "react";


export default function BasicDetails() {
    const { setStep, userData, setUserData } = useContext(multiStepContext);
    return (
        <>
            <h1>Basic Details</h1>
            <Box>
                <TextField label="First Name" variant="outlined" value={userData['firstname']} color="secondary"
                    onChange={(e) => setUserData({ ...userData, "firstname": e.target.value })} />
            </Box>
            <Box>
                <TextField label="Last Name" variant="outlined" value={userData['lastname']} color="secondary"
                    onChange={(e) => setUserData({ ...userData, "lastname": e.target.value })} />
            </Box>
            <Box>
                <TextField label="Contact Number" variant="outlined" value={userData['contactno']} color="secondary"
                    onChange={(e) => setUserData({ ...userData, "contactno": e.target.value })} />
            </Box>

            <Box>
                <Button variant="contained" color="primary" onClick={() => setStep(2)}>Next</Button>
            </Box>
        </>
    );
}


                                             Page :- 2 ( Locationdetails.jsx)

import { Box, Button, TextField } from "@mui/material";
import { useContext } from "react";
import { multiStepContext } from "../../StepContext";

export default function LocationDetails() {
    const { setStep, userData, setUserData } = useContext(multiStepContext);
    return (
        <>
            <h1>Location Details</h1>
            <Box>
                <TextField label="Location" variant="outlined" value={userData['location']} color="secondary"
                    onChange={(e) => setUserData({ ...userData, "location": e.target.value })} />
            </Box>
            <Box>
                <TextField label="City" variant="outlined" value={userData['city']} color="secondary"
                    onChange={(e) => setUserData({ ...userData, "city": e.target.value })} />
            </Box>
            <Box>
                <TextField label="State" variant="outlined" value={userData['state']} color="secondary"
                    onChange={(e) => setUserData({ ...userData, "state": e.target.value })} />
            </Box>

            <Box>
                <Button variant="contained" color="secondary" onClick={() => setStep(1)}>Back</Button>
                <span> </span>
                <Button variant="contained" color="primary" onClick={() => setStep(3)}>Next</Button>
            </Box>

        </>
    );
}

Page :- 3 ( Propertydetails.jsx)

import { Box, Button, TextField } from "@mui/material";
import { useContext } from "react";
import { multiStepContext } from "../../StepContext";

export default function PropertyDetails() {
    const { setStep, userData, setUserData, submitData } = useContext(multiStepContext);
    return (
        <>
            <h1>Property Details</h1>
            <Box>
                <TextField label="Property Name" variant="outlined" value={userData['propertyname']} color="secondary"
                    onChange={(e) => setUserData({ ...userData, "propertyname": e.target.value })} />
            </Box>
            <Box>
                <TextField label="Property type" variant="outlined" value={userData['propertytype']} color="secondary"
                    onChange={(e) => setUserData({ ...userData, "propertytype": e.target.value })} />
            </Box>
            <Box>
                <TextField label="Price" variant="outlined" value={userData['price']} color="secondary"
                    onChange={(e) => setUserData({ ...userData, "price": e.target.value })} />
            </Box>

            <Box>
                <Button variant="contained" color="secondary" onClick={() => setStep(2)}>Back</Button>
                <span> </span>
                <Button variant="contained" color="primary" onClick={submitData}>Submit</Button>
            </Box>
        </>
    );
}


//Display page
                                                Displaydata.jsx


import { useContext } from "react";
import { multiStepContext } from "../../StepContext";
import { Table, TableBody, TableCell, TableContainer, TableRow, TableHead } from "@mui/material";


export default function DisplayData() {
    const { finalData } = useContext(multiStepContext);
    return (
        <>
            <h1>Display All Data from ContextApi</h1>

            <TableContainer>
                <Table>
                    <TableHead>
                        <TableRow>
                            <TableCell>First Name</TableCell>
                            <TableCell>Last Name</TableCell>
                            <TableCell>Contact</TableCell>
                            <TableCell>Location</TableCell>
                            <TableCell>City</TableCell>
                            <TableCell>State</TableCell>
                            <TableCell>Property Name</TableCell>
                            <TableCell>Property Type</TableCell>
                            <TableCell>Price</TableCell>
                        </TableRow>
                    </TableHead>
                    <TableBody>
                        {
                            finalData.map((data) => (
                                <TableRow key={data.firstname}>
                                    <TableCell>{data.firstname}</TableCell>
                                    <TableCell>{data.lastname}</TableCell>
                                    <TableCell>{data.contact}</TableCell>
                                    <TableCell>{data.location}</TableCell>
                                    <TableCell>{data.city}</TableCell>
                                    <TableCell>{data.state}</TableCell>
                                    <TableCell>{data.propertyname}</TableCell>
                                    <TableCell>{data.propertytype}</TableCell>
                                    <TableCell>{data.price}</TableCell>
                                </TableRow>

                            ))
                        }
                    </TableBody>
                </Table>
            </TableContainer>
        </>
    );
}