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 @@
-
@@ -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
+}