diff --git a/docs/src/theme/ApiItem/index.jsx b/docs/src/theme/ApiItem/index.jsx new file mode 100644 index 000000000..c80cc3987 --- /dev/null +++ b/docs/src/theme/ApiItem/index.jsx @@ -0,0 +1,212 @@ +import React, { useEffect, useState } from "react"; +import OriginalApiItem from "@theme-original/ApiItem"; + +export default function ApiItemWrapper(props) { + const [feedback, setFeedback] = useState(null); + const [comment, setComment] = useState(""); + const [plausibleLoaded, setPlausibleLoaded] = useState(false); + + useEffect(() => { + if (!document.getElementById("plausible-script")) { + const script = document.createElement("script"); + script.src = "https://plausible.io/js/plausible.js"; + script.defer = true; + script.async = true; + script.dataset.domain = window.location.hostname; + script.id = "plausible-script"; + + script.onload = () => { + setPlausibleLoaded(true); + }; + + document.body.appendChild(script); + } else { + setPlausibleLoaded(true); + } + }, []); + + const sendPlausibleEvent = (feedbackValue, commentText = "") => { + if (plausibleLoaded && typeof window.plausible === "function") { + console.log("Sending event:", feedbackValue, commentText); + window.plausible("docs-feedback", { + props: { + feedback: feedbackValue, + comment: commentText, + page: window.location.pathname, + }, + }); + } else { + console.warn("Plausible not loaded yet. Event skipped."); + } + }; + + const handleYes = () => { + setFeedback("yes"); + sendPlausibleEvent("yes"); + }; + + const handleNo = () => { + setFeedback("no"); + sendPlausibleEvent("no"); + }; + + const handleSubmitComment = () => { + sendPlausibleEvent("no", comment); + setFeedback("submitted"); + }; + + return ( + <> + + +
+ {feedback === null && ( +
+
+

+ Was this page useful? +

+
+ + + +
+
+
+ )} + + {feedback === "no" && ( +
+
+
+

+ Help us improve this page +

+
+ +