From 3ed3b5ee59862bc1bc5c01e3c7c5946b89365d5a Mon Sep 17 00:00:00 2001 From: Federico Coppede Date: Wed, 8 Oct 2025 08:45:53 -0300 Subject: [PATCH] docs: added feedback component to all docs pages (#10856) This PR adds a feedback box at the bottom of all the docs pages to help us track which pages need to be updated or improved. The feedback box is connected to plausible for event tracking. --------- Co-authored-by: Max Peintner --- docs/src/theme/ApiItem/index.jsx | 212 +++++++++++++++++++++++++++++++ 1 file changed, 212 insertions(+) create mode 100644 docs/src/theme/ApiItem/index.jsx 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 +

+
+ +