Skip to content

Commit d8840b4

Browse files
committed
feat: add unmount-webview
1 parent 6aeef7a commit d8840b4

File tree

5 files changed

+45
-3
lines changed

5 files changed

+45
-3
lines changed

src/main/preload.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { contextBridge, ipcRenderer, IpcRendererEvent } from 'electron';
44

55
export type Channels =
66
| 'mount-webview'
7+
| 'unmount-webview'
78
| 'update-webview-rect'
89
| 'hide-all-webview'
910
| 'clear-all-webview';

src/main/webviewManager.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,22 @@ export function initWebviewManager(win: BrowserWindow) {
5858
webviewMap.set(key, { view, url, hidden: false });
5959
});
6060

61+
ipcMain.on('unmount-webview', (e, info) => {
62+
if (!win) {
63+
console.log('[unmount-webview]', 'cannot get mainWindow');
64+
return;
65+
}
66+
67+
console.log('[unmount-webview] info:', info);
68+
69+
const key = info.key;
70+
const webview = webviewMap.get(key);
71+
if (webview) {
72+
win.removeBrowserView(webview.view);
73+
webviewMap.delete(key);
74+
}
75+
});
76+
6177
ipcMain.on('update-webview-rect', (e, info) => {
6278
console.log('[update-webview-rect] info:', info);
6379

src/renderer/components/SideTree.tsx

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { Menu, Tree, Trigger } from '@arco-design/web-react';
22
import { IconDown, IconPlus } from '@arco-design/web-react/icon';
3-
import React from 'react';
3+
import React, { useState } from 'react';
44
import {
55
generateDefaultNode,
66
WebsiteTreeNode,
@@ -49,6 +49,7 @@ export const SideTree: React.FC = React.memo(() => {
4949
addTreeNodeChildren,
5050
deleteTreeNode,
5151
} = useTreeStore();
52+
const [expandedKeys, setExpandedKeys] = useState<string[]>([]);
5253

5354
return (
5455
<div>
@@ -61,6 +62,10 @@ export const SideTree: React.FC = React.memo(() => {
6162
draggable={true}
6263
blockNode={true}
6364
selectedKeys={selectedNode ? [selectedNode.key] : []}
65+
expandedKeys={expandedKeys}
66+
onExpand={(expandedKeys) => {
67+
setExpandedKeys(expandedKeys);
68+
}}
6469
treeData={treeData}
6570
icons={{
6671
switcherIcon: <IconDown />,
@@ -112,7 +117,13 @@ export const SideTree: React.FC = React.memo(() => {
112117
return;
113118
}
114119

115-
addTreeNodeChildren(node._key!, generateDefaultNode());
120+
const key = node.dataRef.key;
121+
if (!key) {
122+
return;
123+
}
124+
125+
setExpandedKeys([...expandedKeys, key]);
126+
addTreeNodeChildren(key, generateDefaultNode());
116127
}}
117128
/>
118129
);

src/renderer/components/main/WebInvalidUrl.tsx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import React from 'react';
22
import { useEffect } from 'react';
33
import styled from 'styled-components';
44
import webpageSvg from '../../assets/web-page.svg';
5+
import { useTreeStore } from '../../store/tree';
56

67
const WebInvalidUrlRoot = styled.div`
78
height: 100%;
@@ -19,6 +20,12 @@ const WebInvalidUrlRoot = styled.div`
1920

2021
export const WebInvalidUrl: React.FC = React.memo(() => {
2122
useEffect(() => {
23+
const selectedNode = useTreeStore.getState().selectedNode;
24+
if (selectedNode) {
25+
window.electron.ipcRenderer.sendMessage('unmount-webview', {
26+
key: selectedNode.key,
27+
});
28+
}
2229
window.electron.ipcRenderer.sendMessage('hide-all-webview');
2330
}, []);
2431

src/renderer/store/tree.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ export type WebsiteTreeNode = {
1616
};
1717

1818
interface TreeStoreState {
19-
treeData: WebsiteTreeNode[];
2019
selectedNode: WebsiteTreeNode | null;
20+
treeData: WebsiteTreeNode[];
2121
setSelectedNode: (selectedNode: WebsiteTreeNode | null) => void;
2222
setTreeData: (treeData: WebsiteTreeNode[]) => void;
2323
addTreeNode: (treeNode: WebsiteTreeNode) => void;
@@ -49,6 +49,13 @@ const defaultTreeData = [
4949
children: [],
5050
isLeaf: false,
5151
},
52+
{
53+
key: 'webbox',
54+
title: 'webbox',
55+
url: 'https://github.com/msgbyte/webbox',
56+
children: [],
57+
isLeaf: false,
58+
},
5259
];
5360

5461
export const useTreeStore = create<TreeStoreState>()(

0 commit comments

Comments
 (0)