Skip to content

Commit c5e9ba6

Browse files
Ahmed NawafAhmedNawaf
andauthored
add open state to the session storage (#26)
Co-authored-by: sa23sa <74133458+sa23sa@users.noreply.github.com>
1 parent 0d1e3ba commit c5e9ba6

4 files changed

Lines changed: 44 additions & 10 deletions

File tree

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/RemixDevTools/RemixDevTools.tsx

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import clsx from "clsx";
22
import { Logo } from "./components/Logo";
3-
import React, { useEffect, useState } from "react";
3+
import React, { useEffect, useState, useMemo } from "react";
44
import { RDTContextProvider } from "./context/RDTContext";
55
import { tabs } from "./tabs";
66
import { useTimelineHandler } from "./hooks/useTimelineHandler";
@@ -18,9 +18,14 @@ interface Props extends RemixDevToolsProps {
1818
}
1919

2020
const RemixDevTools = ({ defaultOpen, position }: Props) => {
21-
const [isOpen, setIsOpen] = useState(defaultOpen);
22-
const { activeTab, setActiveTab, setShouldConnectWithForge, height } =
23-
useRDTContext();
21+
const {
22+
activeTab,
23+
setActiveTab,
24+
setShouldConnectWithForge,
25+
height,
26+
setPersistOpen,
27+
persistOpen,
28+
} = useRDTContext();
2429
const { enableResize, disableResize, isResizing } = useResize();
2530
useTimelineHandler();
2631
const { isConnected, isConnecting } = useGetSocket();
@@ -29,12 +34,15 @@ const RemixDevTools = ({ defaultOpen, position }: Props) => {
2934
position === "top-left" ||
3035
position === "bottom-left" ||
3136
position === "middle-left";
32-
37+
const isOpen = useMemo(
38+
() => defaultOpen || persistOpen,
39+
[persistOpen, defaultOpen]
40+
);
3341
return (
3442
<div className="remix-dev-tools">
3543
<div
3644
style={{ zIndex: 9999 }}
37-
onClick={() => setIsOpen(!isOpen)}
45+
onClick={() => setPersistOpen(!isOpen)}
3846
className={clsx(
3947
"rdt-fixed rdt-m-1.5 rdt-h-14 rdt-w-14 rdt-cursor-pointer rdt-rounded-full ",
4048
position === "bottom-right" && "rdt-bottom-0 rdt-right-0",

src/RemixDevTools/context/rdtReducer.ts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ export type RemixDevToolsState = {
1515
port: number;
1616
height: number;
1717
};
18+
persistOpen: boolean;
1819
};
1920

2021
export const initialState: RemixDevToolsState = {
@@ -28,6 +29,7 @@ export const initialState: RemixDevToolsState = {
2829
port: 3003,
2930
height: 400,
3031
},
32+
persistOpen: false,
3133
};
3234

3335
export type ReducerActions = Pick<RemixDevToolsActions, "type">["type"];
@@ -109,6 +111,11 @@ type SetShouldConnectToForgeAction = {
109111
payload: boolean;
110112
};
111113

114+
type SetPersistOpenAction = {
115+
type: "SET_PERSIST_OPEN";
116+
payload: boolean;
117+
};
118+
112119
/** Aggregate of all action types */
113120
export type RemixDevToolsActions =
114121
| SetTimelineEvent
@@ -123,7 +130,8 @@ export type RemixDevToolsActions =
123130
| SetRouteWildcards
124131
| SetDevToolsHeight
125132
| SetShouldConnectToForgeAction
126-
| SetIsSubmittedAction;
133+
| SetIsSubmittedAction
134+
| SetPersistOpenAction;
127135

128136
export const rdtReducer = (
129137
state: RemixDevToolsState = initialState,
@@ -269,6 +277,11 @@ export const rdtReducer = (
269277
shouldConnectWithForge: payload,
270278
},
271279
};
280+
case "SET_PERSIST_OPEN":
281+
return {
282+
...state,
283+
persistOpen: payload,
284+
};
272285
default:
273286
return state;
274287
}

src/RemixDevTools/context/useRDTContext.ts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@ const useRDTContext = () => {
1111
throw new Error("useRDTContext must be used within a RDTContextProvider");
1212
}
1313
const { state, dispatch } = context;
14-
const { timeline, settings, showRouteBoundaries, terminals } = state;
14+
const { timeline, settings, showRouteBoundaries, terminals, persistOpen } =
15+
state;
1516
const { activeTab, shouldConnectWithForge, routeWildcards, port, height } =
1617
settings;
1718

@@ -118,6 +119,16 @@ const useRDTContext = () => {
118119
[dispatch]
119120
);
120121

122+
const setPersistOpen = useCallback(
123+
(persistOpen: boolean) => {
124+
dispatch({
125+
type: "SET_PERSIST_OPEN",
126+
payload: persistOpen,
127+
});
128+
},
129+
[dispatch]
130+
);
131+
121132
return {
122133
setTimelineEvent,
123134
setActiveTab,
@@ -139,6 +150,8 @@ const useRDTContext = () => {
139150
clearTerminalOutput,
140151
addTerminalHistory,
141152
setProcessId,
153+
persistOpen,
154+
setPersistOpen,
142155
};
143156
};
144157

0 commit comments

Comments
 (0)