tree view component

PHOTO EMBED

Thu Feb 15 2024 13:22:13 GMT+0000 (Coordinated Universal Time)

Saved by @Ajay1212

import React, { useState } from "react";
import { FaChevronDown, FaChevronRight } from "react-icons/fa";

const TreeNode = ({ node }) => {
  const [isExpanded, setIsExpanded] = useState(false);

  const handleToggle = () => {
    setIsExpanded(!isExpanded);
  };

  return (
    <div className="">
      <div
        onClick={handleToggle}
        className="flex items-center px-4  group rounded-md hover:text-blue-600 hover:bg-blue-200 text-base font-serif">
        {Object.keys(node).length > 1 ? (
          <span className="mr-2 text-xs ">
            {isExpanded ? <FaChevronDown /> : <FaChevronRight />}
          </span>
        ) : (
          <span className="ml-5"></span>
        )}
        {node.name}
      </div>
      {isExpanded && (
        <div className="ml-5 ">
          {Object.keys(node).map((key) => {
            if (Array.isArray(node[key])) {
              return node[key].map((child) => (
                <TreeNode key={child.name} node={child} />
              ));
            }
            return null;
          })}
        </div>
      )}
    </div>
  );
};

// Define the Tree component
const Tree = ({ data }) => {
  return (
    <div className="">
      {data.map((node) => (
        <TreeNode key={node.id} node={node} />
      ))}
    </div>
  );
};

const states = [
  {
    name: "Gujarat",
    districts: [
      {
        name: "Surat",
        cities: [
          {
            name: "varachha",
            area: [
              { name: "yogivhowk" },
              { name: "varachha" },
              { name: "puna" },
            ],
          },
          {
            name: "kamrej",
            area: [{ name: "tapi" }, { name: "choryashi" }],
          },
        ],
      },
      { name: "Rajkot", cities: [{ name: "jetpur" }, { name: "gondal" }] },
    ],
  },
  {
    name: "Rajasthan",
    districts: [
      {
        name: "Surat",
        cities: [
          {
            name: "varachha",
            area: [
              { name: "yogivhowk" },
              { name: "varachha" },
              { name: "puna" },
            ],
          },
          {
            name: "kamrej",
          },
        ],
      },
      { name: "Rajkot", cities: [{ name: "jetpur" }, { name: "gondal" }] },
    ],
  },
  {
    name: "Bihar",
    districts: [
      {
        name: "Surat",
        cities: [
          {
            name: "varachha",
            area: [
              { name: "yogivhowk" },
              { name: "varachha" },
              { name: "puna" },
            ],
          },
          {
            name: "kamrej",
          },
        ],
      },
      { name: "Rajkot", cities: [{ name: "jetpur" }, { name: "gondal" }] },
    ],
  },
  {
    name: "delhi",
    districts: [
      {
        name: "Surat",
        cities: [
          {
            name: "varachha",
            area: [
              { name: "yogivhowk" },
              { name: "varachha" },
              { name: "puna" },
            ],
          },
          {
            name: "kamrej",
          },
        ],
      },
      { name: "Rajkot", cities: [{ name: "jetpur" }, { name: "gondal" }] },
    ],
  },
];

function App() {
  return (
    <div className="flex flex-col w-60 h-96 border border-gray-300 rounded-md p-4 m-auto mt-52 overflow-y-scroll bg-blue-50">
      <Tree data={states} />
    </div>
  );
}

export default App;
content_copyCOPY