Skip to content

Commit d107f2e

Browse files
committed
feat: add context menu option to delete report files and enhance report viewer functionality
1 parent b819ebf commit d107f2e

File tree

5 files changed

+43
-6
lines changed

5 files changed

+43
-6
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how
1111
### Added
1212

1313
- Added Trunk Support to improve Code Quality
14+
- Added context menu (right click) option to delete report files
1415

1516
### Changed
1617

package.json

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,11 @@
3939
"command": "magento-log-viewer.refreshReportFiles",
4040
"title": "Refresh Report Files",
4141
"icon": "$(refresh)"
42+
},
43+
{
44+
"command": "magento-log-viewer.deleteReportFile",
45+
"title": "Delete Report File",
46+
"icon": "$(trash)"
4247
}
4348
],
4449
"configuration": {
@@ -117,6 +122,13 @@
117122
"when": "view == reportFiles && magentoLogViewer.hasMagentoRoot",
118123
"group": "navigation"
119124
}
125+
],
126+
"view/item/context": [
127+
{
128+
"command": "magento-log-viewer.deleteReportFile",
129+
"when": "view == reportFiles && viewItem == reportItem",
130+
"group": "navigation"
131+
}
120132
]
121133
}
122134
},

src/extension.ts

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import * as vscode from 'vscode';
2-
import { promptMagentoProjectSelection, showErrorMessage, activateExtension, isValidPath } from './helpers';
2+
import { promptMagentoProjectSelection, showErrorMessage, activateExtension, isValidPath, deleteReportFile } from './helpers';
3+
import { LogItem, ReportViewerProvider } from './logViewer';
34

45
export function activate(context: vscode.ExtensionContext): void {
56
const config = vscode.workspace.getConfiguration();
@@ -13,7 +14,18 @@ export function activate(context: vscode.ExtensionContext): void {
1314
showErrorMessage('Magento root path is not set or is not a directory.');
1415
return;
1516
}
16-
activateExtension(context, magentoRoot);
17+
const reportViewerProvider = new ReportViewerProvider(magentoRoot);
18+
activateExtension(context, magentoRoot, reportViewerProvider);
19+
20+
vscode.commands.registerCommand('magento-log-viewer.deleteReportFile', (logItem: LogItem) => {
21+
if (logItem && logItem.command && logItem.command.arguments && logItem.command.arguments[0]) {
22+
const filePath = logItem.command.arguments[0];
23+
deleteReportFile(filePath);
24+
reportViewerProvider.refresh();
25+
} else {
26+
showErrorMessage('Failed to delete report file: Invalid file path.');
27+
}
28+
});
1729
}
1830
}
1931

src/helpers.ts

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ export function selectMagentoRootFolder(config: vscode.WorkspaceConfiguration, c
2525
updateConfig(config, 'magentoLogViewer.magentoRoot', folderUri[0].fsPath).then(() => {
2626
showInformationMessage('Magento root folder successfully saved!');
2727
updateConfig(config, 'magentoLogViewer.isMagentoProject', 'Yes');
28-
activateExtension(context, folderUri[0].fsPath);
28+
activateExtension(context, folderUri[0].fsPath, new ReportViewerProvider(folderUri[0].fsPath));
2929
});
3030
}
3131
});
@@ -57,9 +57,8 @@ export function showErrorMessage(message: string): void {
5757
}
5858

5959
// Activates the extension by setting up the log viewer and file system watcher.
60-
export function activateExtension(context: vscode.ExtensionContext, magentoRoot: string): void {
60+
export function activateExtension(context: vscode.ExtensionContext, magentoRoot: string, reportViewerProvider: ReportViewerProvider): void {
6161
const logViewerProvider = new LogViewerProvider(magentoRoot);
62-
const reportViewerProvider = new ReportViewerProvider(magentoRoot);
6362

6463
const logTreeView = vscode.window.createTreeView('logFiles', { treeDataProvider: logViewerProvider });
6564
const reportTreeView = vscode.window.createTreeView('reportFiles', { treeDataProvider: reportViewerProvider });
@@ -127,6 +126,16 @@ export function clearAllLogFiles(logViewerProvider: LogViewerProvider, magentoRo
127126
});
128127
}
129128

129+
// Deletes a report file.
130+
export function deleteReportFile(filePath: string): void {
131+
try {
132+
fs.unlinkSync(filePath);
133+
showInformationMessage(`Report file ${filePath} deleted successfully.`);
134+
} catch (error) {
135+
showErrorMessage(`Failed to delete report file ${filePath}: ${error instanceof Error ? error.message : String(error)}`);
136+
}
137+
}
138+
130139
// Updates the badge count for the tree view based on the number of log entries.
131140
export function updateBadge(treeView: vscode.TreeView<unknown>, logViewerProvider: LogViewerProvider, reportViewerProvider: ReportViewerProvider, magentoRoot: string): void {
132141
const updateBadgeCount = () => {

src/logViewer.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,10 @@ export class ReportViewerProvider implements vscode.TreeDataProvider<LogItem>, v
235235
}
236236

237237
private getLogItems(dir: string, label: string): LogItem[] {
238-
return getLogItems(dir, parseReportTitle, getIconForReport);
238+
return getLogItems(dir, parseReportTitle, getIconForReport).map(item => {
239+
item.contextValue = 'reportItem';
240+
return item;
241+
});
239242
}
240243

241244
getLogFilesWithoutUpdatingBadge(dir: string): LogItem[] {

0 commit comments

Comments
 (0)