From 6831491b904403beb7fd3899b28e0deaa86d767d Mon Sep 17 00:00:00 2001 From: Gregor Kleen Date: Sun, 17 Jul 2016 21:19:52 +0200 Subject: safer deletion --- webgui/src/Main.hs | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) (limited to 'webgui/src') diff --git a/webgui/src/Main.hs b/webgui/src/Main.hs index 252e933..e4b25e6 100644 --- a/webgui/src/Main.hs +++ b/webgui/src/Main.hs @@ -123,9 +123,9 @@ setup Config{..} window (split -> (socketErr, dataUpdate)) = void $ do selectedPrinter <- handleJobTable fJobs - changeEditorStatus <- handleEditor selectedPrinter fJobs + (editorStatus, changeEditorStatus) <- handleEditor selectedPrinter fJobs - handleDraftTable changeEditorStatus + handleDraftTable (editorStatus, changeEditorStatus) where handleSocketErr InvalidMessage = emitError "Received unparseable message from server-side websocket" @@ -242,13 +242,13 @@ setup Config{..} window (split -> (socketErr, dataUpdate)) = void $ do on (whenE (not <$> saveDraft) . UI.click) discardButton $ const discardAction on (whenE saveDraft . UI.click) discardButton $ const clearAction - return modifyStatus + return (editorStatus, modifyStatus) saveable s@EditorState{..} = isRight ePrintout && discardable s printable EditorState{..} = isRight ePrintout && not (null eText) discardable EditorState{..} = not (maybe True null eTitle && null eText) - handleDraftTable changeEditorState = do + handleDraftTable (editorState, changeEditorState) = do -- allowDeletion <- fatal' "Could not find deletion switch" =<< getElementById window "allowDeletion" -- deletion' <- allowDeletion # get UI.checked @@ -257,7 +257,12 @@ setup Config{..} window (split -> (socketErr, dataUpdate)) = void $ do enactDeletion <- fatal' "Could not find deletion button" =<< getElementById window "enactDeletion" - on UI.click enactDeletion . const $ currentValue marking >>= mapM_ (runExceptT . draftDelete) >> updateMarking Set.empty + on UI.click enactDeletion . const $ do + cMarking <- currentValue marking + mapM_ (runExceptT . draftDelete) cMarking + cDraft <- associatedDraft <$> currentValue editorState + when (Set.member cDraft $ Set.map Just cMarking) $ changeEditorState (\s -> s { associatedDraft = Nothing } ) + updateMarking Set.empty -- deletion' <- allowDeletion # get UI.checked let updateMarking' = callFunction (mangle <$> ffi getChecked) >>= updateMarking -- cgit v1.2.3