text: import React, { useEffect, useState } from "react";
  import { useMoralis } from "react-moralis";
  import MoralisDappContext from "./context";
  
  
  function MoralisDappProvider({ children }) {
    const { web3, Moralis, user } = useMoralis();
    const [walletAddress, setWalletAddress] = useState();
    const [chainId, setChainId] = useState();       
    const [contractABI, setContractABI] = useState('[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"itemId","type":"uint256"},{"indexed":true,"internalType":"address","name":"nftContract","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"address","name":"seller","type":"address"},{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"bool","name":"sold","type":"bool"}],"name":"MarketItemCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"itemId","type":"uint256"},{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"MarketItemSold","type":"event"},{"inputs":[{"internalType":"address","name":"nftContract","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"}],"name":"createMarketItem","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"nftContract","type":"address"},{"internalType":"uint256","name":"itemId","type":"uint256"}],"name":"createMarketSale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"fetchMarketItems","outputs":[{"components":[{"internalType":"uint256","name":"itemId","type":"uint256"},{"internalType":"address","name":"nftContract","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"addresspayable","name":"seller","type":"address"},{"internalType":"addresspayable","name":"owner","type":"address"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"bool","name":"sold","type":"bool"}],"internalType":"structmarketPlaceBoilerPlate.MarketItem[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]'); //Smart Contract ABI here
    const [marketAddress, setMarketAddress] = useState("0x06995F53dC0dBE3226e32B6CC19F3056fB870021"); //Smart Contract Address Here
  
  
    useEffect(() => {
      Moralis.onChainChanged(function (chain) {
        setChainId(chain);
      });
  
      Moralis.onAccountsChanged(function (address) {
        setWalletAddress(address[0]);
      });
      // eslint-disable-next-line react-hooks/exhaustive-deps
    }, []);
  
    // eslint-disable-next-line react-hooks/exhaustive-deps
    useEffect(() => setChainId(web3.givenProvider?.chainId));
    useEffect(
      () => setWalletAddress(web3.givenProvider?.selectedAddress || user?.get("ethAddress")),
      [web3, user]
    );
  
    return (
      <MoralisDappContext.Provider value={{ walletAddress, chainId, marketAddress, setMarketAddress, contractABI, setContractABI }}>
        {children}
      </MoralisDappContext.Provider>
    );
  }
  
  function useMoralisDapp() {
    const context = React.useContext(MoralisDappContext);
    if (context === undefined) {
      throw new Error("useMoralisDapp must be used within a MoralisDappProvider");
    }
    return context;
  }
  
  export { MoralisDappProvider, useMoralisDapp };
  