diff --git a/frontend/src/organisms/connection/collection/remove.svelte b/frontend/src/organisms/connection/collection/remove.svelte index 696491c..25c1f13 100644 --- a/frontend/src/organisms/connection/collection/remove.svelte +++ b/frontend/src/organisms/connection/collection/remove.svelte @@ -1,24 +1,43 @@ -
- + +
+ + +
-
- +
+ {#key result} + {#if typeof result === 'number'} + Removed {result} item{result === 1 ? '' : 's'} + {/if} + {/key} +
+
@@ -29,6 +48,12 @@ gap: 0.5rem; } + .options { + display: grid; + gap: 0.5rem; + grid-template: 1fr / 1fr auto; + } + .flex { display: flex; justify-content: space-between; diff --git a/frontend/src/reset.css b/frontend/src/reset.css index 8974ff4..c96057d 100644 --- a/frontend/src/reset.css +++ b/frontend/src/reset.css @@ -61,6 +61,8 @@ button { /* Inputs */ input { font: inherit; +} +input:not([type="checkbox"]) { min-width: 100px; width: 100%; } diff --git a/frontend/src/style.css b/frontend/src/style.css index 64c6b4e..9de9e59 100644 --- a/frontend/src/style.css +++ b/frontend/src/style.css @@ -55,6 +55,7 @@ p strong { border-right: none; display: inline-block; margin: 0; + background-color: #fff; } .field .label { background-color: #eee; @@ -85,6 +86,10 @@ p strong { background-color: rgba(255, 80, 80, 0.3); border-color: rgb(255, 80, 80); } +.field > span.checkbox { + text-align: center; + min-width: 75px; +} .btn { background-color: #00008b; diff --git a/frontend/wailsjs/go/app/App.d.ts b/frontend/wailsjs/go/app/App.d.ts index 4949871..64e2680 100755 --- a/frontend/wailsjs/go/app/App.d.ts +++ b/frontend/wailsjs/go/app/App.d.ts @@ -21,3 +21,5 @@ export function OpenCollection(arg1:string,arg2:string,arg3:string):Promise>; export function OpenDatabase(arg1:string,arg2:string):Promise>; + +export function RemoveItems(arg1:string,arg2:string,arg3:string,arg4:string,arg5:boolean):Promise; diff --git a/frontend/wailsjs/go/app/App.js b/frontend/wailsjs/go/app/App.js index 9fa44d9..79f6903 100755 --- a/frontend/wailsjs/go/app/App.js +++ b/frontend/wailsjs/go/app/App.js @@ -37,3 +37,7 @@ export function OpenConnection(arg1) { export function OpenDatabase(arg1, arg2) { return window['go']['app']['App']['OpenDatabase'](arg1, arg2); } + +export function RemoveItems(arg1, arg2, arg3, arg4, arg5) { + return window['go']['app']['App']['RemoveItems'](arg1, arg2, arg3, arg4, arg5); +} diff --git a/internal/app/collection_remove.go b/internal/app/collection_remove.go new file mode 100644 index 0000000..7e0ea6e --- /dev/null +++ b/internal/app/collection_remove.go @@ -0,0 +1,69 @@ +package app + +import ( + "encoding/json" + "fmt" + "strings" + + "github.com/wailsapp/wails/v2/pkg/runtime" + "go.mongodb.org/mongo-driver/bson" + "go.mongodb.org/mongo-driver/mongo" +) + +func (a *App) RemoveItems(hostKey, dbKey, collKey, jsonData string, many bool) int64 { + var filter bson.M + var err error + jsonData = strings.TrimSpace(jsonData) + + if len(jsonData) == 0 { + sure, _ := runtime.MessageDialog(a.ctx, runtime.MessageDialogOptions{ + Title: "Confirm", + Message: "Are you sure you want to drop all items in " + collKey + "?", + Buttons: []string{"Yes", "No"}, + DefaultButton: "Yes", + CancelButton: "No", + }) + if sure != "Yes" { + return 0 + } + } else { + err = json.Unmarshal([]byte(jsonData), &filter) + if err != nil { + fmt.Println(err.Error()) + runtime.MessageDialog(a.ctx, runtime.MessageDialogOptions{ + Type: runtime.ErrorDialog, + Title: "Couldn't parse JSON", + Message: err.Error(), + }) + return 0 + } + } + + client, ctx, close, err := a.connectToHost(hostKey) + if err != nil { + fmt.Println(err.Error()) + return 0 + } + + defer close() + + var res *mongo.DeleteResult + + if many { + res, err = client.Database(dbKey).Collection(collKey).DeleteMany(ctx, filter) + } else { + res, err = client.Database(dbKey).Collection(collKey).DeleteOne(ctx, filter) + } + + if err != nil { + fmt.Println(err.Error()) + runtime.MessageDialog(a.ctx, runtime.MessageDialogOptions{ + Type: runtime.ErrorDialog, + Title: "Encountered an error while performing query", + Message: err.Error(), + }) + return 0 + } + + return res.DeletedCount +}