Add action
This commit is contained in:
@@ -66,6 +66,7 @@
|
||||
"onCommand:codeQLDatabasesExperimental.setSelectedItemContextMenu",
|
||||
"onCommand:codeQLDatabasesExperimental.renameItemContextMenu",
|
||||
"onCommand:codeQLDatabasesExperimental.openOnGitHubContextMenu",
|
||||
"onCommand:codeQLDatabasesExperimental.removeItemContextMenu",
|
||||
"onCommand:codeQL.quickQuery",
|
||||
"onCommand:codeQL.restartQueryServer",
|
||||
"onWebviewPanel:resultsView",
|
||||
@@ -392,6 +393,10 @@
|
||||
"command": "codeQLDatabasesExperimental.openOnGitHubContextMenu",
|
||||
"title": "Open on GitHub"
|
||||
},
|
||||
{
|
||||
"command": "codeQLDatabasesExperimental.removeItemContextMenu",
|
||||
"title": "Remove"
|
||||
},
|
||||
{
|
||||
"command": "codeQLDatabases.chooseDatabaseFolder",
|
||||
"title": "Choose Database from Folder",
|
||||
@@ -791,6 +796,10 @@
|
||||
}
|
||||
],
|
||||
"view/item/context": [
|
||||
{
|
||||
"command": "codeQLDatabasesExperimental.removeItemContextMenu",
|
||||
"when": "view == codeQLDatabasesExperimental && viewItem =~ /canBeRemoved/"
|
||||
},
|
||||
{
|
||||
"command": "codeQLDatabasesExperimental.setSelectedItemContextMenu",
|
||||
"when": "view == codeQLDatabasesExperimental && viewItem =~ /canBeSelected/"
|
||||
@@ -1043,6 +1052,10 @@
|
||||
"command": "codeQLDatabasesExperimental.openOnGitHubContextMenu",
|
||||
"when": "false"
|
||||
},
|
||||
{
|
||||
"command": "codeQLDatabasesExperimental.removeItemContextMenu",
|
||||
"when": "false"
|
||||
},
|
||||
{
|
||||
"command": "codeQLDatabases.setCurrentDatabase",
|
||||
"when": "false"
|
||||
|
||||
@@ -22,7 +22,10 @@ import {
|
||||
LocalDatabaseDbItem,
|
||||
LocalListDbItem,
|
||||
RemoteUserDefinedListDbItem,
|
||||
DbItem,
|
||||
DbItemKind,
|
||||
} from "../db-item";
|
||||
import { mapDbItemToSelectedDbItem } from "../db-item-selection";
|
||||
|
||||
export class DbConfigStore extends DisposableObject {
|
||||
public readonly onDidChangeConfig: AppEvent<void>;
|
||||
@@ -88,6 +91,84 @@ export class DbConfigStore extends DisposableObject {
|
||||
await this.writeConfig(config);
|
||||
}
|
||||
|
||||
public async removeDbItem(dbItem: DbItem): Promise<void> {
|
||||
if (!this.config) {
|
||||
throw Error("Cannot remove item if config is not loaded");
|
||||
}
|
||||
|
||||
const config: DbConfig = cloneDbConfig(this.config);
|
||||
const selectedItem: SelectedDbItem | undefined = config.selected;
|
||||
|
||||
// Remove item from databases
|
||||
switch (dbItem.kind) {
|
||||
case DbItemKind.LocalList:
|
||||
config.databases.local.lists = config.databases.local.lists.filter(
|
||||
(list) => list.name !== dbItem.listName,
|
||||
);
|
||||
break;
|
||||
case DbItemKind.RemoteUserDefinedList:
|
||||
config.databases.remote.repositoryLists =
|
||||
config.databases.remote.repositoryLists.filter(
|
||||
(list) => list.name !== dbItem.listName,
|
||||
);
|
||||
break;
|
||||
case DbItemKind.LocalDatabase:
|
||||
if (dbItem.parentListName) {
|
||||
const parent = config.databases.local.lists.find(
|
||||
(list) => list.name === dbItem.parentListName,
|
||||
);
|
||||
if (!parent) {
|
||||
throw Error(`Cannot find parent list '${dbItem.parentListName}'`);
|
||||
} else {
|
||||
parent.databases = parent.databases.filter(
|
||||
(db) => db.name !== dbItem.databaseName,
|
||||
);
|
||||
}
|
||||
}
|
||||
config.databases.local.databases =
|
||||
config.databases.local.databases.filter(
|
||||
(db) => db.name !== dbItem.databaseName,
|
||||
);
|
||||
break;
|
||||
case DbItemKind.RemoteRepo:
|
||||
if (dbItem.parentListName) {
|
||||
const parent = config.databases.remote.repositoryLists.find(
|
||||
(list) => list.name === dbItem.parentListName,
|
||||
);
|
||||
if (!parent) {
|
||||
throw Error(`Cannot find parent list '${dbItem.parentListName}'`);
|
||||
} else {
|
||||
parent.repositories = parent.repositories.filter(
|
||||
(repo) => repo !== dbItem.repoFullName,
|
||||
);
|
||||
}
|
||||
}
|
||||
config.databases.remote.repositories =
|
||||
config.databases.remote.repositories.filter(
|
||||
(repo) => repo !== dbItem.repoFullName,
|
||||
);
|
||||
break;
|
||||
case DbItemKind.RemoteOwner:
|
||||
config.databases.remote.owners = config.databases.remote.owners.filter(
|
||||
(owner) => owner !== dbItem.ownerName,
|
||||
);
|
||||
break;
|
||||
default:
|
||||
throw Error(`Type '${dbItem.kind}' cannot be removed`);
|
||||
}
|
||||
|
||||
// Remove item from selected
|
||||
const mappedItem = mapDbItemToSelectedDbItem(dbItem);
|
||||
if (
|
||||
selectedItem &&
|
||||
JSON.stringify(mappedItem) === JSON.stringify(selectedItem)
|
||||
) {
|
||||
config.selected = undefined;
|
||||
}
|
||||
|
||||
await this.writeConfig(config);
|
||||
}
|
||||
|
||||
public async addRemoteRepo(
|
||||
repoNwo: string,
|
||||
parentList?: string,
|
||||
|
||||
@@ -80,15 +80,15 @@ export function mapDbItemToSelectedDbItem(
|
||||
case DbItemKind.LocalDatabase:
|
||||
return {
|
||||
kind: SelectedDbItemKind.LocalDatabase,
|
||||
listName: dbItem?.parentListName,
|
||||
databaseName: dbItem.databaseName,
|
||||
listName: dbItem?.parentListName,
|
||||
};
|
||||
|
||||
case DbItemKind.RemoteRepo:
|
||||
return {
|
||||
kind: SelectedDbItemKind.RemoteRepository,
|
||||
listName: dbItem?.parentListName,
|
||||
repositoryName: dbItem.repoFullName,
|
||||
listName: dbItem?.parentListName,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -75,6 +75,10 @@ export class DbManager {
|
||||
}
|
||||
}
|
||||
|
||||
public async removeDbItem(dbItem: DbItem): Promise<void> {
|
||||
await this.dbConfigStore.removeDbItem(dbItem);
|
||||
}
|
||||
|
||||
public async updateDbItemExpandedState(
|
||||
dbItem: DbItem,
|
||||
itemExpanded: boolean,
|
||||
|
||||
@@ -107,6 +107,12 @@ export class DbPanel extends DisposableObject {
|
||||
(treeViewItem: DbTreeViewItem) => this.renameItem(treeViewItem),
|
||||
),
|
||||
);
|
||||
this.push(
|
||||
commandRunner(
|
||||
"codeQLDatabasesExperimental.removeItemContextMenu",
|
||||
(treeViewItem: DbTreeViewItem) => this.removeItem(treeViewItem),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
private async openConfigFile(): Promise<void> {
|
||||
@@ -363,6 +369,15 @@ export class DbPanel extends DisposableObject {
|
||||
await this.dbManager.renameList(dbItem, newName);
|
||||
}
|
||||
|
||||
private async removeItem(treeViewItem: DbTreeViewItem): Promise<void> {
|
||||
if (treeViewItem.dbItem === undefined) {
|
||||
throw new Error(
|
||||
"Not a removable database item. Please select a valid item.",
|
||||
);
|
||||
}
|
||||
await this.dbManager.removeDbItem(treeViewItem.dbItem);
|
||||
}
|
||||
|
||||
private async onDidCollapseElement(
|
||||
event: TreeViewExpansionEvent<DbTreeViewItem>,
|
||||
): Promise<void> {
|
||||
|
||||
Reference in New Issue
Block a user