Refactor selection method to allow all types of DbItem lists

This commit is contained in:
Nora
2022-12-05 16:21:35 +01:00
parent 9362881e22
commit 7a2f976199

View File

@@ -1,4 +1,4 @@
import { DbItem, DbItemKind } from "./db-item";
import { DbItem, DbItemKind, LocalDbItem, RemoteDbItem } from "./db-item";
export function getSelectedDbItem(dbItems: DbItem[]): DbItem | undefined {
for (const dbItem of dbItems) {
@@ -7,34 +7,38 @@ export function getSelectedDbItem(dbItems: DbItem[]): DbItem | undefined {
dbItem.kind === DbItemKind.RootLocal
) {
for (const child of dbItem.children) {
switch (child.kind) {
case DbItemKind.LocalList:
if (child.selected) {
return child;
}
for (const database of child.databases) {
if (database.selected) {
return database;
}
}
break;
case DbItemKind.RemoteUserDefinedList:
if (child.selected) {
return child;
}
for (const repo of child.repos) {
if (repo.selected) {
return repo;
}
}
break;
default:
if (child.selected) {
return child;
}
}
const selectedItem = extractSelected(child);
if (selectedItem) return selectedItem;
}
} else {
const selectedItem = extractSelected(dbItem);
if (selectedItem) return selectedItem;
}
}
return undefined;
}
function extractSelected(
dbItem: RemoteDbItem | LocalDbItem,
): DbItem | undefined {
if (dbItem.selected) {
return dbItem;
}
switch (dbItem.kind) {
case DbItemKind.LocalList:
for (const database of dbItem.databases) {
if (database.selected) {
return database;
}
}
break;
case DbItemKind.RemoteUserDefinedList:
for (const repo of dbItem.repos) {
if (repo.selected) {
return repo;
}
}
break;
}
return undefined;
}