in src/frontends/live_api_react/frontend/src/components/side-panel/SidePanel.tsx [32:84]
export default function SidePanel() {
const { connected, client } = useLiveAPIContext();
const [open, setOpen] = useState(true);
const loggerRef = useRef<HTMLDivElement>(null);
const loggerLastHeightRef = useRef<number>(-1);
const { log, logs } = useLoggerStore();
const [textInput, setTextInput] = useState("");
const [selectedOption, setSelectedOption] = useState<{
value: string;
label: string;
} | null>(null);
const inputRef = useRef<HTMLTextAreaElement>(null);
//scroll the log to the bottom when new logs come in
useEffect(() => {
if (loggerRef.current) {
const el = loggerRef.current;
const scrollHeight = el.scrollHeight;
if (scrollHeight !== loggerLastHeightRef.current) {
el.scrollTop = scrollHeight;
loggerLastHeightRef.current = scrollHeight;
}
}
}, [logs]);
// listen for log events and store them
useEffect(() => {
client.on("log", log);
return () => {
client.off("log", log);
};
}, [client, log]);
const handleSubmit = () => {
client.send([{ text: textInput }]);
setTextInput("");
if (inputRef.current) {
inputRef.current.innerText = "";
}
};
return (
<div className={`side-panel ${open ? "open" : ""}`}>
<header className="top">
<h2>Console</h2>
{open ? (
<button className="opener" onClick={() => setOpen(false)}>
<RiSidebarFoldLine color="#b4b8bb" />
</button>
) : (
<button className="opener" onClick={() => setOpen(true)}>