Newer
Older
hello-programmer-world / src / components / RenderFile.tsx
@h.sakamoto h.sakamoto 7 days ago 960 bytes reject request
import readRawText from "@/lib/getRawText";
import { useEffect, useState } from "preact/hooks";

type RenderHtmlProps = {
  path: string;
};

export default function RenderFile(props: RenderHtmlProps) {
  const [htmlContent, setHtmlContent] = useState<string>(
    readRawText(props.path),
  );

  useEffect(() => {
    const text = readRawText(props.path);
    setHtmlContent(text);
  }, [props.path]);

  const path = (() => {
    const path = props.path;

    if (path.startsWith("public")) {
      return path.slice(6);
    }

    if (!path.startsWith("/")) {
      return `/${path}`;
    }

    return path;
  })();

  return (
    <div
      style={{
        border: "1px solid #ccc",
        borderRadius: "8px",
        padding: "16px",
        marginBottom: "var(--base-size-16, 1rem)",
      }}
    >
      <iframe
        src={path}
        style={{
          border: "1px solid #ccc",
          width: "100%",
        }}
      />
    </div>
  );
}