@@ -22,7 +22,10 @@ import {
2222 LocalDatabaseDbItem ,
2323 LocalListDbItem ,
2424 RemoteUserDefinedListDbItem ,
25+ DbItem ,
26+ DbItemKind ,
2527} from "../db-item" ;
28+ import { mapDbItemToSelectedDbItem } from "../db-item-selection" ;
2629
2730export class DbConfigStore extends DisposableObject {
2831 public readonly onDidChangeConfig : AppEvent < void > ;
@@ -88,6 +91,84 @@ export class DbConfigStore extends DisposableObject {
8891 await this . writeConfig ( config ) ;
8992 }
9093
94+ public async removeDbItem ( dbItem : DbItem ) : Promise < void > {
95+ if ( ! this . config ) {
96+ throw Error ( "Cannot remove item if config is not loaded" ) ;
97+ }
98+
99+ const config : DbConfig = cloneDbConfig ( this . config ) ;
100+ const selectedItem : SelectedDbItem | undefined = config . selected ;
101+
102+ // Remove item from databases
103+ switch ( dbItem . kind ) {
104+ case DbItemKind . LocalList :
105+ config . databases . local . lists = config . databases . local . lists . filter (
106+ ( list ) => list . name !== dbItem . listName ,
107+ ) ;
108+ break ;
109+ case DbItemKind . RemoteUserDefinedList :
110+ config . databases . remote . repositoryLists =
111+ config . databases . remote . repositoryLists . filter (
112+ ( list ) => list . name !== dbItem . listName ,
113+ ) ;
114+ break ;
115+ case DbItemKind . LocalDatabase :
116+ if ( dbItem . parentListName ) {
117+ const parent = config . databases . local . lists . find (
118+ ( list ) => list . name === dbItem . parentListName ,
119+ ) ;
120+ if ( ! parent ) {
121+ throw Error ( `Cannot find parent list '${ dbItem . parentListName } '` ) ;
122+ } else {
123+ parent . databases = parent . databases . filter (
124+ ( db ) => db . name !== dbItem . databaseName ,
125+ ) ;
126+ }
127+ }
128+ config . databases . local . databases =
129+ config . databases . local . databases . filter (
130+ ( db ) => db . name !== dbItem . databaseName ,
131+ ) ;
132+ break ;
133+ case DbItemKind . RemoteRepo :
134+ if ( dbItem . parentListName ) {
135+ const parent = config . databases . remote . repositoryLists . find (
136+ ( list ) => list . name === dbItem . parentListName ,
137+ ) ;
138+ if ( ! parent ) {
139+ throw Error ( `Cannot find parent list '${ dbItem . parentListName } '` ) ;
140+ } else {
141+ parent . repositories = parent . repositories . filter (
142+ ( repo ) => repo !== dbItem . repoFullName ,
143+ ) ;
144+ }
145+ }
146+ config . databases . remote . repositories =
147+ config . databases . remote . repositories . filter (
148+ ( repo ) => repo !== dbItem . repoFullName ,
149+ ) ;
150+ break ;
151+ case DbItemKind . RemoteOwner :
152+ config . databases . remote . owners = config . databases . remote . owners . filter (
153+ ( owner ) => owner !== dbItem . ownerName ,
154+ ) ;
155+ break ;
156+ default :
157+ throw Error ( `Type '${ dbItem . kind } ' cannot be removed` ) ;
158+ }
159+
160+ // Remove item from selected
161+ const mappedItem = mapDbItemToSelectedDbItem ( dbItem ) ;
162+ if (
163+ selectedItem &&
164+ JSON . stringify ( mappedItem ) === JSON . stringify ( selectedItem )
165+ ) {
166+ config . selected = undefined ;
167+ }
168+
169+ await this . writeConfig ( config ) ;
170+ }
171+
91172 public async addRemoteRepo (
92173 repoNwo : string ,
93174 parentList ?: string ,
0 commit comments