Skip to content
Snippets Groups Projects
JSONCard.tsx 1.27 KiB
import { useState } from "react";
import JSONView from "./JSONView";
import { ArrowDown, ArrowUp } from "lucide-react";
import { Card, CardContent, CardHeader } from "./ui/card";

interface JSONCardProps {
  header: string;
  json: string;
  showCollapseButton: boolean;
}

const JSONCard: React.FC<JSONCardProps> = ({
  header,
  json,
  showCollapseButton,
}) => {
  const [isDataHidden, setIsDataHidden] = useState(true);

  if (!json || json === "{}") return null;

  const handleHideData = () => {
    setIsDataHidden(!isDataHidden);
  };
  const jsonToObj = JSON.parse(json);

  return (
    <Card
      className="overflow-hidden pb-0"
      data-testid="account-json-metadata-dropdown"
    >
      <CardHeader className="p-0">
        <div
          onClick={handleHideData}
          className="flex justify-between p-2 hover:bg-rowHover cursor-pointer px-4"
        >
          <div className="text-lg">{header}</div>
          {showCollapseButton ? (
            isDataHidden ? (
              <ArrowDown />
            ) : (
              <ArrowUp />
            )
          ) : null}
        </div>
      </CardHeader>
      <CardContent hidden={isDataHidden && showCollapseButton}>
        <JSONView json={jsonToObj} />
      </CardContent>
    </Card>
  );
};

export default JSONCard;