Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
B
bit-pm
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
燕伟桐
bit-pm
Commits
e119a670
Unverified
提交
e119a670
authored
5月 22, 2025
作者:
Will Chen
提交者:
GitHub
5月 22, 2025
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Provide a button to clear session data (#231)
Fixes #214 --------- Co-authored-by:
graphite-app[bot]
<
96075541+graphite-app[bot]@users.noreply.github.com
>
上级
830e4ece
隐藏空白字符变更
内嵌
并排
正在显示
5 个修改的文件
包含
60 行增加
和
1 行删除
+60
-1
PreviewPanel.tsx
src/components/preview_panel/PreviewPanel.tsx
+41
-1
session_handlers.ts
src/ipc/handlers/session_handlers.ts
+12
-0
ipc_client.ts
src/ipc/ipc_client.ts
+4
-0
ipc_host.ts
src/ipc/ipc_host.ts
+2
-0
preload.ts
src/preload.ts
+1
-0
没有找到文件。
src/components/preview_panel/PreviewPanel.tsx
浏览文件 @
e119a670
...
...
@@ -5,6 +5,7 @@ import {
previewPanelKeyAtom
,
selectedAppIdAtom
,
}
from
"../../atoms/appAtoms"
;
import
{
IpcClient
}
from
"@/ipc/ipc_client"
;
import
{
CodeView
}
from
"./CodeView"
;
import
{
PreviewIframe
}
from
"./PreviewIframe"
;
...
...
@@ -17,6 +18,7 @@ import {
MoreVertical
,
Cog
,
Power
,
Trash2
,
}
from
"lucide-react"
;
import
{
motion
}
from
"framer-motion"
;
import
{
useEffect
,
useRef
,
useState
,
useCallback
}
from
"react"
;
...
...
@@ -29,6 +31,8 @@ import {
DropdownMenuItem
,
DropdownMenuTrigger
,
}
from
"@/components/ui/dropdown-menu"
;
import
{
showError
,
showSuccess
}
from
"@/lib/toast"
;
import
{
useMutation
}
from
"@tanstack/react-query"
;
type
PreviewMode
=
"preview"
|
"code"
;
...
...
@@ -37,6 +41,7 @@ interface PreviewHeaderProps {
setPreviewMode
:
(
mode
:
PreviewMode
)
=>
void
;
onRestart
:
()
=>
void
;
onCleanRestart
:
()
=>
void
;
onClearSessionData
:
()
=>
void
;
}
interface
ConsoleHeaderProps
{
...
...
@@ -51,6 +56,7 @@ const PreviewHeader = ({
setPreviewMode
,
onRestart
,
onCleanRestart
,
onClearSessionData
,
}:
PreviewHeaderProps
)
=>
(
<
div
className=
"flex items-center justify-between px-4 py-2 border-b border-border"
>
<
div
className=
"relative flex space-x-2 bg-[var(--background-darkest)] rounded-md p-0.5"
>
...
...
@@ -111,6 +117,15 @@ const PreviewHeader = ({
</
span
>
</
div
>
</
DropdownMenuItem
>
<
DropdownMenuItem
onClick=
{
onClearSessionData
}
>
<
Trash2
size=
{
16
}
/>
<
div
className=
"flex flex-col"
>
<
span
>
Clear Preview Data
</
span
>
<
span
className=
"text-xs text-muted-foreground"
>
Clears cookies and local storage for the app preview
</
span
>
</
div
>
</
DropdownMenuItem
>
</
DropdownMenuContent
>
</
DropdownMenu
>
</
div
>
...
...
@@ -146,7 +161,8 @@ export function PreviewPanel() {
const
[
previewMode
,
setPreviewMode
]
=
useAtom
(
previewModeAtom
);
const
selectedAppId
=
useAtomValue
(
selectedAppIdAtom
);
const
[
isConsoleOpen
,
setIsConsoleOpen
]
=
useState
(
false
);
const
{
runApp
,
stopApp
,
restartApp
,
loading
,
app
}
=
useRunApp
();
const
{
runApp
,
stopApp
,
restartApp
,
loading
,
app
,
refreshAppIframe
}
=
useRunApp
();
const
runningAppIdRef
=
useRef
<
number
|
null
>
(
null
);
const
key
=
useAtomValue
(
previewPanelKeyAtom
);
const
appOutput
=
useAtomValue
(
appOutputAtom
);
...
...
@@ -163,6 +179,29 @@ export function PreviewPanel() {
restartApp
({
removeNodeModules
:
true
});
},
[
restartApp
]);
const
useClearSessionData
=
()
=>
{
return
useMutation
({
mutationFn
:
()
=>
{
const
ipcClient
=
IpcClient
.
getInstance
();
return
ipcClient
.
clearSessionData
();
},
onSuccess
:
async
()
=>
{
await
refreshAppIframe
();
showSuccess
(
"Preview data cleared"
);
// Optionally invalidate relevant queries
},
onError
:
(
error
)
=>
{
showError
(
`Error clearing preview data:
${
error
}
`
);
},
});
};
const
{
mutate
:
clearSessionData
}
=
useClearSessionData
();
const
handleClearSessionData
=
useCallback
(()
=>
{
clearSessionData
();
},
[
selectedAppId
,
clearSessionData
]);
useEffect
(()
=>
{
const
previousAppId
=
runningAppIdRef
.
current
;
...
...
@@ -214,6 +253,7 @@ export function PreviewPanel() {
setPreviewMode=
{
setPreviewMode
}
onRestart=
{
handleRestart
}
onCleanRestart=
{
handleCleanRestart
}
onClearSessionData=
{
handleClearSessionData
}
/>
<
div
className=
"flex-1 overflow-hidden"
>
<
PanelGroup
direction=
"vertical"
>
...
...
src/ipc/handlers/session_handlers.ts
0 → 100644
浏览文件 @
e119a670
import
{
ipcMain
,
session
}
from
"electron"
;
export
const
registerSessionHandlers
=
()
=>
{
ipcMain
.
handle
(
"clear-session-data"
,
async
(
_event
)
=>
{
const
defaultAppSession
=
session
.
defaultSession
;
await
defaultAppSession
.
clearStorageData
({
storages
:
[
"cookies"
,
"localstorage"
],
});
console
.
info
(
`[IPC] All session data cleared for default session`
);
});
};
src/ipc/ipc_client.ts
浏览文件 @
e119a670
...
...
@@ -821,4 +821,8 @@ export class IpcClient {
public
async
renameBranch
(
params
:
RenameBranchParams
):
Promise
<
void
>
{
await
this
.
ipcRenderer
.
invoke
(
"rename-branch"
,
params
);
}
async
clearSessionData
():
Promise
<
void
>
{
return
this
.
ipcRenderer
.
invoke
(
"clear-session-data"
);
}
}
src/ipc/ipc_host.ts
浏览文件 @
e119a670
...
...
@@ -17,6 +17,7 @@ import { registerVersionHandlers } from "./handlers/version_handlers";
import
{
registerLanguageModelHandlers
}
from
"./handlers/language_model_handlers"
;
import
{
registerReleaseNoteHandlers
}
from
"./handlers/release_note_handlers"
;
import
{
registerImportHandlers
}
from
"./handlers/import_handlers"
;
import
{
registerSessionHandlers
}
from
"./handlers/session_handlers"
;
export
function
registerIpcHandlers
()
{
// Register all IPC handlers by category
...
...
@@ -39,4 +40,5 @@ export function registerIpcHandlers() {
registerLanguageModelHandlers
();
registerReleaseNoteHandlers
();
registerImportHandlers
();
registerSessionHandlers
();
}
src/preload.ts
浏览文件 @
e119a670
...
...
@@ -74,6 +74,7 @@ const validInvokeChannels = [
"select-app-folder"
,
"check-app-name"
,
"rename-branch"
,
"clear-session-data"
,
]
as
const
;
// Add valid receive channels
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论