Ver código fonte

Support deleting local data

Cadel Watson 4 meses atrás
pai
commit
58de406cc8
2 arquivos alterados com 54 adições e 2 exclusões
  1. 20 0
      js/app.js
  2. 34 2
      src/Main.elm

+ 20 - 0
js/app.js

@@ -20,6 +20,20 @@ function getSetData(db, setCode, callback) {
     };
 }
 
+function deleteSetData(db, setCode, callback) {
+    const transaction = db.transaction(["sets"], "readwrite");
+    const objectStore = transaction.objectStore("sets");
+    const request = objectStore.delete(setCode);
+
+    request.onerror = (event) => {
+        alert("Database error")
+    };
+
+    request.onsuccess = (event) => {
+        callback(setCode)
+    }
+}
+
 function saveSetData(db, setData) {
     const transaction = db.transaction(["sets"], "readwrite");
 
@@ -67,6 +81,8 @@ openDBRequest.onsuccess = (event) => {
             }
         });
 
+        console.log(app.ports);
+
         app.ports.sendDoesSetHaveLocalData.subscribe((setCode) => {
             getSetData(database, setCode, (data) => {
                 app.ports.receiveDoesSetHaveLocalData.send(JSON.stringify(data));
@@ -77,6 +93,10 @@ openDBRequest.onsuccess = (event) => {
             saveSetData(database, setData);
         })
 
+        app.ports.sendDeleteLocalData.subscribe((setCode) => {
+            deleteSetData(database, setCode, (setCode) => app.ports.receiveDidDeleteLocalData.send(setCode))
+        })
+
     })
 };
 

+ 34 - 2
src/Main.elm

@@ -69,6 +69,7 @@ type SetLoadStatus
     | NoLocalData
     | HasLocalData Database.Database
     | FetchingRemoteData
+    | DeletingLocalData
 
 
 type alias ChooseSetModel =
@@ -143,6 +144,8 @@ type Msg
     | IOGotSets (Result String (List String))
     | IOFetchSetData String
     | IOGotSetData (Result String ( String, Maybe Database.Database ))
+    | IODeleteSetData String -- Delete by set code
+    | IOGotDeleteSetData String -- Successful deletion by set code
     | PortReceiveDoesSetHaveLocalData String
     | StartDraft String Database.Database
     | OpenCardExplorer String Database.Database
@@ -260,6 +263,16 @@ update msg model =
                     , API.getSetData setCode IOGotSetData
                     )
 
+                IODeleteSetData setCode ->
+                    ( ChooseSet { mdl | sets = Dict.insert setCode DeletingLocalData mdl.sets }
+                    , sendDeleteLocalData (Encode.string setCode)
+                    )
+
+                IOGotDeleteSetData setCode ->
+                    ( ChooseSet { mdl | sets = Dict.insert setCode NoLocalData mdl.sets }
+                    , Cmd.none
+                    )
+
                 IOGotSetData (Ok ( setCode, Just database )) ->
                     ( ChooseSet { mdl | sets = Dict.insert setCode (HasLocalData database) mdl.sets }
                     , sendSaveLocalData (Database.encode ( setCode, database ))
@@ -340,6 +353,12 @@ update msg model =
                 IOFetchSetData _ ->
                     ( Ready mdl, Cmd.none )
 
+                IODeleteSetData setCode ->
+                    ( Ready mdl, Cmd.none )
+
+                IOGotDeleteSetData setCode ->
+                    ( Ready mdl, Cmd.none )
+
                 PortReceiveDoesSetHaveLocalData _ ->
                     ( Ready mdl, Cmd.none )
 
@@ -402,13 +421,17 @@ viewChooseSet model =
                 CheckingLocalData ->
                     text "Loading..."
 
+                DeletingLocalData ->
+                    text "Deleting..."
+
                 NoLocalData ->
                     Button.make "Download" (IOFetchSetData setCode) |> Button.view
 
                 HasLocalData database ->
-                    div []
+                    div [ class "flex gap-2" ]
                         [ Button.make "Explore" (OpenCardExplorer setCode database) |> Button.view
                         , Button.make "View draft" (StartDraft setCode database) |> Button.view
+                        , Button.make "Delete" (IODeleteSetData setCode) |> Button.view
                         ]
     in
     div [ class "w-full h-full bg-slate-100 flex justify-center items-center" ]
@@ -1011,7 +1034,10 @@ viewKeyedCard model wasChosen { name, frontImage, backImage } =
 
 subscriptions : Model -> Sub Msg
 subscriptions _ =
-    receiveDoesSetHaveLocalData PortReceiveDoesSetHaveLocalData
+    Sub.batch
+        [ receiveDoesSetHaveLocalData PortReceiveDoesSetHaveLocalData
+        , receiveDidDeleteLocalData IOGotDeleteSetData
+        ]
 
 
 
@@ -1025,3 +1051,9 @@ port receiveDoesSetHaveLocalData : (String -> msg) -> Sub msg
 
 
 port sendSaveLocalData : Encode.Value -> Cmd msg
+
+
+port sendDeleteLocalData : Encode.Value -> Cmd msg
+
+
+port receiveDidDeleteLocalData : (String -> msg) -> Sub msg