clean up a bunch of shit and use recoil to avoid the prop drilling

This commit is contained in:
talksik
2022-05-05 04:28:20 -05:00
parent 35899cf885
commit 4f8922678c
4 changed files with 35 additions and 36 deletions
@@ -1,9 +1,9 @@
import { Avatar, Menu } from "antd";
import { GlobalHotKeys, KeyMap } from "react-hotkeys"; import { GlobalHotKeys, KeyMap } from "react-hotkeys";
import { HeadsetMicSharp, VideocamSharp } from "@mui/icons-material"; import { HeadsetMicSharp, VideocamSharp } from "@mui/icons-material";
import { useCallback, useEffect, useMemo, useRef, useState } from "react"; import { useCallback, useEffect, useMemo, useRef, useState } from "react";
import { $selectedOutputMode } from "../../controller/recoil"; import { $selectedOutputMode } from "../../controller/recoil";
import { Avatar } from "antd";
import { FaSearch } from "react-icons/fa"; import { FaSearch } from "react-icons/fa";
import Logo from "../Logo"; import Logo from "../Logo";
import { useGetUserDetails } from "../../controller/index"; import { useGetUserDetails } from "../../controller/index";
@@ -41,3 +41,15 @@ export const $maxNumberActiveStreams = atom<number>({
key: "MAX_NUMBER_ACTIVE_STREAMS", key: "MAX_NUMBER_ACTIVE_STREAMS",
default: 0, default: 0,
}); });
type DesktopMode = "flowState" | "overlayOnly" | "terminal" | "terminalDetails";
export const $desktopMode = atom<DesktopMode>({
key: "DESKTOP_MODE",
default: "terminal",
});
export const $selectedLineId = atom<string>({
key: "SELECTED_LINE_ID",
default: null,
});
+7 -32
View File
@@ -1,6 +1,8 @@
import { import {
$desktopMode,
$maxNumberActiveStreams, $maxNumberActiveStreams,
$numberActiveLines, $numberActiveLines,
$selectedLineId,
} from "../../controller/recoil"; } from "../../controller/recoil";
import Channels, { import Channels, {
DimensionChangeRequest, DimensionChangeRequest,
@@ -11,13 +13,13 @@ import Channels, {
} from "../../electron/constants"; } from "../../electron/constants";
import React, { useState } from "react"; import React, { useState } from "react";
import { useCallback, useEffect, useMemo } from "react"; import { useCallback, useEffect, useMemo } from "react";
import { useRecoilState, useRecoilValue } from "recoil";
import LineDetailsTerminal from "../lineDetailsTerminal"; import LineDetailsTerminal from "../lineDetailsTerminal";
import NirvanaHeader from "../../components/header/index"; import NirvanaHeader from "../../components/header/index";
import NirvanaTerminal from "../terminal"; import NirvanaTerminal from "../terminal";
import Overlay from "../overlay"; import Overlay from "../overlay";
import { Radio } from "antd"; import { Radio } from "antd";
import { useRecoilValue } from "recoil";
export interface ILineDetails { export interface ILineDetails {
lineId: string; lineId: string;
@@ -219,12 +221,9 @@ const testLines: ILineDetails[] = [
), ),
]; ];
type DesktopMode = "flowState" | "overlayOnly" | "terminal" | "terminalDetails";
export default function NirvanaRouter() { export default function NirvanaRouter() {
const [selectedLineId, setSelectedLineId] = useState<string>(null); const [selectedLineId, setSelectedLineId] = useRecoilState($selectedLineId);
const [desktopMode, setDesktopMode] = const [desktopMode, setDesktopMode] = useRecoilState($desktopMode);
useState<DesktopMode>("terminalDetails");
const numberOfOverlayColumns = useRecoilValue($numberActiveLines); const numberOfOverlayColumns = useRecoilValue($numberActiveLines);
const numberOfOverlayRows = useRecoilValue($maxNumberActiveStreams); const numberOfOverlayRows = useRecoilValue($maxNumberActiveStreams);
@@ -235,7 +234,7 @@ export default function NirvanaRouter() {
"window blurring now, should be always on top and then ill tell main process to change dimensions" "window blurring now, should be always on top and then ill tell main process to change dimensions"
); );
// todo: just in testing mode // todo: just in testing mode
// setDesktopMode("overlayOnly"); setDesktopMode("overlayOnly");
}); });
}, [setDesktopMode]); }, [setDesktopMode]);
@@ -301,15 +300,6 @@ export default function NirvanaRouter() {
}); });
}, [desktopMode, numberOfOverlayColumns, numberOfOverlayRows]); }, [desktopMode, numberOfOverlayColumns, numberOfOverlayRows]);
/** show user line details */
const handleSelectLine = useCallback(
(lineId: string) => {
setSelectedLineId(lineId);
setDesktopMode("terminalDetails");
},
[setSelectedLineId, setDesktopMode]
);
const handleToggleFlowState = useCallback(() => { const handleToggleFlowState = useCallback(() => {
setDesktopMode("flowState"); setDesktopMode("flowState");
}, [setDesktopMode]); }, [setDesktopMode]);
@@ -323,24 +313,9 @@ export default function NirvanaRouter() {
<div className="flex flex-col h-screen"> <div className="flex flex-col h-screen">
<NirvanaHeader onHeaderFocus={() => setDesktopMode("terminal")} /> <NirvanaHeader onHeaderFocus={() => setDesktopMode("terminal")} />
<Radio.Group
value={desktopMode}
onChange={(e) => setDesktopMode(e.target.value)}
>
<Radio.Button value={"terminal"}>terminal</Radio.Button>
<Radio.Button value={"terminalDetails"}>
terminal and details
</Radio.Button>
<Radio.Button value={"flowState"}>flow state</Radio.Button>
<Radio.Button value={"overlayOnly"}>overlay only</Radio.Button>
</Radio.Group>
<div className="flex flex-row flex-1"> <div className="flex flex-row flex-1">
{(desktopMode === "terminal" || desktopMode === "terminalDetails") && ( {(desktopMode === "terminal" || desktopMode === "terminalDetails") && (
<NirvanaTerminal <NirvanaTerminal allLines={testLines} />
handleSelectLine={handleSelectLine}
allLines={testLines}
/>
)} )}
{desktopMode === "terminalDetails" && selectedLine && ( {desktopMode === "terminalDetails" && selectedLine && (
+15 -3
View File
@@ -1,4 +1,5 @@
import { useMemo, useState } from "react"; import { $desktopMode, $selectedLineId } from "../../controller/recoil";
import { useCallback, useMemo, useState } from "react";
import { FaPlus } from "react-icons/fa"; import { FaPlus } from "react-icons/fa";
import { FiActivity } from "react-icons/fi"; import { FiActivity } from "react-icons/fi";
@@ -6,16 +7,18 @@ import { ILineDetails } from "../router";
import IconButton from "../../components/Button/IconButton/index"; import IconButton from "../../components/Button/IconButton/index";
import LineRow from "../../components/lines/lineRow.tsx/index"; import LineRow from "../../components/lines/lineRow.tsx/index";
import NewLineModal from "./newLine"; import NewLineModal from "./newLine";
import { useSetRecoilState } from "recoil";
export default function NirvanaTerminal({ export default function NirvanaTerminal({
handleSelectLine,
allLines, allLines,
}: { }: {
handleSelectLine: (lineId: string) => void;
allLines: ILineDetails[]; allLines: ILineDetails[];
}) { }) {
const [isModalVisible, setIsModalVisible] = useState<boolean>(false); const [isModalVisible, setIsModalVisible] = useState<boolean>(false);
const setSelectedLineId = useSetRecoilState($selectedLineId);
const setDesktopMode = useSetRecoilState($desktopMode);
// todo: sort/order based on activity and activity date and currently broadcasting/live // todo: sort/order based on activity and activity date and currently broadcasting/live
const toggleTunedLines = useMemo( const toggleTunedLines = useMemo(
@@ -28,6 +31,15 @@ export default function NirvanaTerminal({
[] []
); );
/** show user line details */
const handleSelectLine = useCallback(
(lineId: string) => {
setSelectedLineId(lineId);
setDesktopMode("terminalDetails");
},
[setSelectedLineId, setDesktopMode]
);
return ( return (
<div className="flex flex-col bg-white w-[400px]"> <div className="flex flex-col bg-white w-[400px]">
{/* modal for creating new line */} {/* modal for creating new line */}