import styled from "styled-components"; import { defaultBorderRadius, secondaryDark, vscForeground } from "."; import { Outlet } from "react-router-dom"; import Onboarding from "./Onboarding"; import TextDialog from "./TextDialog"; import { useContext } from "react"; import { GUIClientContext } from "../App"; import { useDispatch, useSelector } from "react-redux"; import { RootStore } from "../redux/store"; import { setBottomMessage, setBottomMessageCloseTimeout, setDialogEntryOn, setDialogMessage, setShowDialog, } from "../redux/slices/uiStateSlice"; import { PlusIcon, FolderIcon, BookOpenIcon, ChatBubbleOvalLeftEllipsisIcon, } from "@heroicons/react/24/outline"; import HeaderButtonWithText from "./HeaderButtonWithText"; import { useNavigate } from "react-router-dom"; // #region Styled Components const LayoutTopDiv = styled.div` height: 100%; border-radius: ${defaultBorderRadius}; scrollbar-base-color: transparent; scrollbar-width: thin; `; const BottomMessageDiv = styled.div<{ displayOnBottom: boolean }>` position: fixed; bottom: ${(props) => (props.displayOnBottom ? "50px" : undefined)}; top: ${(props) => (props.displayOnBottom ? undefined : "50px")}; left: 0; right: 0; margin: 8px; margin-top: 0; background-color: ${secondaryDark}; color: ${vscForeground}; border-radius: ${defaultBorderRadius}; padding: 12px; z-index: 100; box-shadow: 0px 0px 2px 0px ${vscForeground}; max-height: 50vh; overflow: scroll; `; const Footer = styled.footer` display: flex; flex-direction: row; gap: 8px; justify-content: right; padding: 8px; align-items: center; margin-top: 8px; border-top: 0.1px solid gray; `; // #endregion const Layout = () => { const navigate = useNavigate(); const client = useContext(GUIClientContext); const dispatch = useDispatch(); const dialogMessage = useSelector( (state: RootStore) => state.uiState.dialogMessage ); const showDialog = useSelector( (state: RootStore) => state.uiState.showDialog ); const dialogEntryOn = useSelector( (state: RootStore) => state.uiState.dialogEntryOn ); // #region Selectors const vscMediaUrl = useSelector( (state: RootStore) => state.config.vscMediaUrl ); const bottomMessage = useSelector( (state: RootStore) => state.uiState.bottomMessage ); const displayBottomMessageOnBottom = useSelector( (state: RootStore) => state.uiState.displayBottomMessageOnBottom ); // #endregion return (
{ client?.sendMainInput(`/feedback ${text}`); dispatch(setShowDialog(false)); }} onClose={() => { dispatch(setShowDialog(false)); }} message={dialogMessage} entryOn={dialogEntryOn} /> { dispatch(setBottomMessageCloseTimeout(undefined)); }} onMouseLeave={(e) => { if (!e.buttons) { dispatch(setBottomMessage(undefined)); } }} hidden={!bottomMessage} > {bottomMessage}
); }; export default Layout;