Merge branch 'master' of gitlab.cip.ifi.lmu.de:jost/UniWorX

This commit is contained in:
Steffen Jost 2019-06-06 10:13:39 +02:00
commit 1cc314b653
4 changed files with 40 additions and 14 deletions

View File

@ -38,6 +38,7 @@ export class AsyncTable {
change: [],
select: [],
};
_ignoreRequest = false;
constructor(element, app) {
if (!element) {
@ -174,6 +175,10 @@ export class AsyncTable {
}
}, INPUT_DEBOUNCE);
input.addEventListener('input', debouncedInput);
input.addEventListener('input', () => {
// set flag to ignore any currently pending requests (not debounced)
this._ignoreRequest = true;
});
});
this._tableFilterInputs.input.forEach((input) => {
@ -183,6 +188,10 @@ export class AsyncTable {
}
}, INPUT_DEBOUNCE);
input.addEventListener('input', debouncedInput);
input.addEventListener('input', () => {
// set flag to ignore any currently pending requests (not debounced)
this._ignoreRequest = true;
});
});
this._tableFilterInputs.change.forEach((input) => {
@ -224,6 +233,7 @@ export class AsyncTable {
}
};
}
this._ignoreRequest = false;
this._updateTableFrom(url, callback);
}
@ -340,8 +350,13 @@ export class AsyncTable {
url: url,
headers: headers,
}).then(
(response) => this._app.htmlHelpers.parseResponse(response)
(response) => this._app.htmlHelpers.parseResponse(response),
).then((response) => {
// check if request should be ignored
if (this._ignoreRequest) {
return false;
}
setLocalStorageParameter('currentTableUrl', url.href);
// reset table
this._removeListeners();

View File

@ -689,7 +689,7 @@ jsonField hide = Field{..}
inputType
| hide = "hidden"
| otherwise = "text"
fieldParse [v] [] = return . bimap (SomeMessage . MsgJSONFieldDecodeFailure) Just . eitherDecodeStrict' $ encodeUtf8 v
fieldParse [encodeUtf8 -> v] [] = return . bimap (SomeMessage . MsgJSONFieldDecodeFailure) Just $ eitherDecodeStrict' v <|> eitherDecodeStrict' (urlDecode True v)
fieldParse [] [] = return $ Right Nothing
fieldParse _ _ = return . Left $ SomeMessage MsgValueRequired
fieldView theId name attrs val isReq = liftWidgetT [whamlet|

View File

@ -641,8 +641,12 @@ dbTable PSValidator{..} dbtable@DBTable{ dbtIdent = dbtIdent'@(toPathPiece -> db
, fieldEnctype = UrlEncoded
}
piPrevious <- lift . runInputMaybe $ ireq (jsonField True) (wIdent "pagination")
let piPreviousRes = maybe FormMissing FormSuccess piPrevious
piPreviousPost <- lift . runInputPost $ iopt (jsonField True) (wIdent "pagination")
piPreviousGet <- lift . runInputGet $ iopt (jsonField True) (wIdent "pagination")
let
piPreviousRes = maybe FormMissing FormSuccess $ piPreviousPost <|> piPreviousGet
$logDebugS "dbTable" [st|#{wIdent "pagination"}: #{tshow piPreviousRes}|]
previousKeys <- throwExceptT . runMaybeT $ encodedSecretBoxOpen =<< MaybeT (lift . lookupPostParam $ wIdent "previous")
piInput <- lift . runInputGetResult $ PaginationInput

View File

@ -626,18 +626,25 @@ formResult' (FormFailure _) = Nothing
formResult' (FormSuccess x) = Just x
runInputGetMaybe, runInputPostMaybe, runInputMaybe :: MonadHandler m => FormInput m a -> m (Maybe a)
runInputGetMaybe form = do
res <- runInputGetResult form
return $ case res of
FormSuccess suc -> Just suc
_other -> Nothing
runInputPostMaybe form = do
res <- runInputPostResult form
return $ case res of
FormSuccess suc -> Just suc
_other -> Nothing
runInputGetMaybe = fmap formResult' . runInputGetResult
runInputPostMaybe = fmap formResult' . runInputPostResult
runInputMaybe form = runMaybeT $ MaybeT (runInputPostMaybe form) <|> MaybeT (runInputGetMaybe form)
runInputResult :: MonadHandler m => FormInput m a -> m (FormResult a)
runInputResult form = do
postRes <- runInputPostResult form
getRes <- runInputGetResult form
return $ case (postRes, getRes) of
(FormSuccess a, _) -> FormSuccess a
(_, FormSuccess b) -> FormSuccess b
(postRes', _) -> postRes'
runInput :: (MonadHandler m, RenderMessage (HandlerSite m) FormMessage) => FormInput m a -> m a
runInput = runInputResult >=> \case
FormFailure errs -> invalidArgs errs
FormMissing -> invalidArgsI [MsgValueRequired]
FormSuccess a -> return a
hoistAForm :: HandlerSite m ~ HandlerSite n => (forall a. m a -> n a) -> AForm m b -> AForm n b
hoistAForm f (AForm g) = AForm (\x y z ->f $ g x y z)