Skip to content

Commit 9bcefb6

Browse files
authored
Merge pull request #48 from MetabobProject/fix/open-more-details
Fix webview sidebar more details opening
2 parents 0d2fab7 + eb9b771 commit 9bcefb6

File tree

5 files changed

+47
-66
lines changed

5 files changed

+47
-66
lines changed

ext-src/commands/DetailDocument.ts

+31-33
Original file line numberDiff line numberDiff line change
@@ -58,39 +58,37 @@ export function activateDetailSuggestionCommand(context: vscode.ExtensionContext
5858
endorsed: copiedAnalyzeValue[key].isEndorsed || false,
5959
};
6060

61-
setTimeout(() => {
62-
getExtensionEventEmitter().fire({
63-
type: 'FIX_SUGGESTION',
64-
data: {
65-
path: args.path,
66-
id: args.id,
67-
vuln: args.vuln,
68-
isFix: false,
69-
isReset: false,
70-
},
71-
});
72-
73-
getExtensionEventEmitter().fire({
74-
type: 'Analysis_Completed',
75-
data: {
76-
shouldResetRecomendation: false,
77-
shouldMoveToAnalyzePage: false,
78-
...copiedAnalyzeValue,
79-
},
80-
});
81-
82-
extensionEventEmitter.fire({
83-
type: 'CURRENT_FILE',
84-
data: { ...documentMetaData.editor.document },
85-
});
86-
87-
getExtensionEventEmitter().fire({
88-
type: 'CURRENT_PROJECT',
89-
data: {
90-
name: currentWorkSpaceFolder,
91-
},
92-
});
93-
}, 500);
61+
getExtensionEventEmitter().fire({
62+
type: 'FIX_SUGGESTION',
63+
data: {
64+
path: args.path,
65+
id: args.id,
66+
vuln: args.vuln,
67+
isFix: false,
68+
isReset: false,
69+
},
70+
});
71+
72+
getExtensionEventEmitter().fire({
73+
type: 'Analysis_Completed',
74+
data: {
75+
shouldResetRecomendation: false,
76+
shouldMoveToAnalyzePage: false,
77+
...copiedAnalyzeValue,
78+
},
79+
});
80+
81+
extensionEventEmitter.fire({
82+
type: 'CURRENT_FILE',
83+
data: { ...documentMetaData.editor.document },
84+
});
85+
86+
getExtensionEventEmitter().fire({
87+
type: 'CURRENT_PROJECT',
88+
data: {
89+
name: currentWorkSpaceFolder,
90+
},
91+
});
9492

9593
await setAnalyzeState.set(copiedAnalyzeValue);
9694

ext-src/extension.ts

+1
Original file line numberDiff line numberDiff line change
@@ -462,6 +462,7 @@ export function activate(context: vscode.ExtensionContext): void {
462462
context,
463463
extensionEventEmitter,
464464
),
465+
{ webviewOptions: { retainContextWhenHidden: true } },
465466
),
466467
);
467468
}

ext-src/providers/recommendation.provider.ts

+10-31
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,14 @@ export class RecommendationWebView implements WebviewViewProvider {
7676
this.activateWebviewMessageListener();
7777
this.activateExtensionEventListener();
7878
this.sendDefaultEvents();
79+
this._view.onDidChangeVisibility(() => {
80+
if (this._view?.visible === false) {
81+
this._view.webview.postMessage({
82+
type: 'VISIBILITY_LOST',
83+
data: {},
84+
})
85+
}
86+
}, null, this.extensionContext.subscriptions);
7987
}
8088

8189
sendDefaultEvents() {
@@ -116,42 +124,13 @@ export class RecommendationWebView implements WebviewViewProvider {
116124
}
117125
}
118126

119-
intervalHandler() {
120-
if (this?._view === null || this?._view === undefined || !this?._view.webview) {
121-
return;
122-
}
123-
124-
if (!this._view.visible) {
125-
return;
126-
}
127-
128-
for (let i = 0; i < this.eventEmitterQueue.length; i++) {
129-
const event = this.eventEmitterQueue[i];
130-
if (event) {
131-
this?._view?.webview?.postMessage(event);
132-
}
133-
}
134-
135-
clearInterval(this.interval);
136-
}
137-
138127
activateExtensionEventListener(): void {
139-
const self = this;
140128
this.extensionEventEmitter.event(event => {
141129
if (this?._view === null || this?._view === undefined || !this?._view.webview) {
142130
return;
143131
}
144132

145-
if (this._view.visible === false) {
146-
this.eventEmitterQueue.push(event);
147-
if (this.interval !== undefined) {
148-
this.interval = setInterval(this.intervalHandler.bind(self), 300);
149-
}
150-
return;
151-
}
152-
153-
this.eventEmitterQueue = [];
154-
this._view.webview.postMessage(event);
133+
this?._view?.webview?.postMessage(event);
155134
});
156135
}
157136

@@ -420,7 +399,7 @@ export class RecommendationWebView implements WebviewViewProvider {
420399

421400
this._view.webview.postMessage({
422401
type: 'Analysis_Completed',
423-
data: { shouldResetRecomendation: true, shouldMoveToAnalyzePage: true, ...getanalyzeState },
402+
data: { shouldResetRecomendation: true, shouldMoveToAnalyzePage: false, ...getanalyzeState },
424403
});
425404
}
426405

src/context/UserContext.tsx

+3-1
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,6 @@ const AccountSettingProvider = ({ children }: Props): JSX.Element => {
108108
currentFile,
109109
} = payload;
110110

111-
setApplicationState(ApplicationWebviewState.ANALYZE_MODE);
112111

113112
if (hasOpenTextDocuments) {
114113
setHasOpenTextDocuments(hasOpenTextDocuments);
@@ -217,6 +216,9 @@ const AccountSettingProvider = ({ children }: Props): JSX.Element => {
217216
}
218217
setCurrentEditor(filename);
219218
break;
219+
case EventDataType.VISIBILITY_LOST:
220+
setApplicationState(ApplicationWebviewState.ANALYZE_MODE);
221+
break;
220222
default:
221223
break;
222224
}

src/types.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ export enum EventDataType {
2424
CURRENT_FILE = 'CURRENT_FILE',
2525
CURRENT_PROJECT = 'CURRENT_PROJECT',
2626
INIT_DATA_UPON_NEW_FILE_OPEN = 'INIT_DATA_UPON_NEW_FILE_OPEN',
27-
ANALYSIS_COMPLETED_EMPTY_PROBLEMS = 'Analysis_Completed_Empty_Problems'
27+
ANALYSIS_COMPLETED_EMPTY_PROBLEMS = 'Analysis_Completed_Empty_Problems',
28+
VISIBILITY_LOST = 'VISIBILITY_LOST',
2829
}
2930

3031
export enum ApplicationWebviewState {

0 commit comments

Comments
 (0)