Skip to content

Commit 116530c

Browse files
committed
feat: constate divide context status by role
1 parent 0448c11 commit 116530c

File tree

4 files changed

+70
-45
lines changed

4 files changed

+70
-45
lines changed

src/hooks/useMswDevtoolsContext.ts

Lines changed: 0 additions & 45 deletions
This file was deleted.

src/hooks/useMswDevtoolsState.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
"use client"
2+
3+
import { useState, useCallback } from "react"
4+
import { MswDevtoolsContextType } from "../providers/useMswDevtoolsContext"
5+
6+
export const useMswDevtoolsState = (initialState: MswDevtoolsContextType) => {
7+
const [state, setState] = useState(initialState)
8+
const setEnabled = useCallback((isEnabled: boolean) => {
9+
setState((prev) => ({
10+
...prev,
11+
isEnabled,
12+
}))
13+
}, [])
14+
15+
return { state, setEnabled }
16+
}

src/hooks/useMswDevtoolsTabs.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
"use client"
2+
3+
import { useState, useCallback } from "react"
4+
import { Tab } from ".."
5+
6+
export const useMswDevtoolsTabs = () => {
7+
const [tab, setTab] = useState<Tab>("handlers")
8+
const handleTabChange = useCallback((tab: Tab) => {
9+
setTab(tab)
10+
}, [])
11+
12+
return { tab, handleTabChange }
13+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
"use client"
2+
3+
import constate from "constate"
4+
import { SetupWorker } from "msw/lib/browser"
5+
import { useMswDevtoolsState } from "../hooks/useMswDevtoolsState"
6+
import { useMswDevtoolsTabs } from "../hooks/useMswDevtoolsTabs"
7+
8+
export type MswDevtoolsContextType = {
9+
isEnabled: boolean
10+
worker?: SetupWorker
11+
apiUrl: string
12+
}
13+
14+
const [
15+
MswDevToolsProvider,
16+
useApiUrlValue,
17+
useIsEnabledValue,
18+
useWorkerValue,
19+
useEnabledUpdate,
20+
useTabIndex,
21+
] = constate(
22+
(initialState: MswDevtoolsContextType) => {
23+
const { state, setEnabled } = useMswDevtoolsState(initialState)
24+
const { tab, handleTabChange } = useMswDevtoolsTabs()
25+
return { state, setEnabled, tab, handleTabChange }
26+
},
27+
(value) => value.state.apiUrl,
28+
(value) => value.state.isEnabled,
29+
(value) => value.state.worker,
30+
(value) => value.setEnabled,
31+
(value) => ({ tab: value.tab, handleTabChange: value.handleTabChange })
32+
)
33+
34+
export {
35+
MswDevToolsProvider,
36+
useApiUrlValue,
37+
useIsEnabledValue,
38+
useWorkerValue,
39+
useEnabledUpdate,
40+
useTabIndex,
41+
}

0 commit comments

Comments
 (0)