From 2619b08ad1be2921d2cdd568f9419852c374df10 Mon Sep 17 00:00:00 2001 From: Gregor Kleen Date: Wed, 25 Nov 2020 18:47:13 +0100 Subject: [PATCH] fix(workflows): prefer payload label from target state Adjust styling --- frontend/src/app.sass | 3 +++ frontend/src/utils/inputs/inputs.sass | 10 ++++++- messages/uniworx/de-de-formal.msg | 2 ++ messages/uniworx/en-eu.msg | 2 ++ src/Handler/Utils/Workflow/EdgeForm.hs | 30 ++++++++++++--------- src/Utils/Form.hs | 3 +++ src/Utils/Workflow/Lint.hs | 1 + templates/widgets/aform/aform.hamlet | 11 +++++--- testdata/recognitions.yaml | 37 +++++++++++++++----------- 9 files changed, 66 insertions(+), 33 deletions(-) diff --git a/frontend/src/app.sass b/frontend/src/app.sass index 7e1414622..0dca25d69 100644 --- a/frontend/src/app.sass +++ b/frontend/src/app.sass @@ -1446,9 +1446,12 @@ pre, tt, code min-width: 45% display: grid grid-template-areas: 'user time' 'action-states action-states' 'payload payload' + margin-right: 10vw &.workflow-history-item__self align-self: flex-end + margin-left: 10vw + margin-right: 0 &:last-child margin-bottom: 0 diff --git a/frontend/src/utils/inputs/inputs.sass b/frontend/src/utils/inputs/inputs.sass index a42071863..a1633f934 100644 --- a/frontend/src/utils/inputs/inputs.sass +++ b/frontend/src/utils/inputs/inputs.sass @@ -49,12 +49,20 @@ color: var(--color-fontsec) font-size: 0.9rem -.form-group--required .form-group-label__caption::after, .form-group__required-marker::before +.form-group--required > .form-group-label > .form-group-label__caption::after, .form-group__required-marker::before content: ' *' color: var(--color-error) font-weight: 600 font-style: normal +.form-group--potentially-required > .form-group-label > .form-group-label__caption::after, .form-group__potentially-required-marker::before + content: ' †' + color: var(--color-warning) + font-weight: 600 + font-style: normal + vertical-align: super + font-size: 80% + .form-group--submit .form-group__input grid-column: 2 diff --git a/messages/uniworx/de-de-formal.msg b/messages/uniworx/de-de-formal.msg index e751e1d2e..2c407b710 100644 --- a/messages/uniworx/de-de-formal.msg +++ b/messages/uniworx/de-de-formal.msg @@ -3095,6 +3095,8 @@ GlobalWorkflowWorkflowWorkflowTitle workflowWorkflowId@CryptoFileNameWorkflowWor SchoolWorkflowWorkflowWorkflowHeading ssh@SchoolId workflowWorkflowId@CryptoFileNameWorkflowWorkflow: Workflow #{ssh}, #{toPathPiece workflowWorkflowId} SchoolWorkflowWorkflowWorkflowTitle ssh@SchoolId workflowWorkflowId@CryptoFileNameWorkflowWorkflow: Workflow #{ssh}, #{toPathPiece workflowWorkflowId} +FormFieldWorkflowDatasetTip: Mindestens ein gekennzeichnetes Feld pro Datensatz muss ausgefüllt werden + ChangelogItemFeature: Feature ChangelogItemBugfix: Bugfix diff --git a/messages/uniworx/en-eu.msg b/messages/uniworx/en-eu.msg index 59a888709..a02887cdb 100644 --- a/messages/uniworx/en-eu.msg +++ b/messages/uniworx/en-eu.msg @@ -3054,6 +3054,8 @@ GlobalWorkflowWorkflowWorkflowTitle workflowWorkflowId: Workflow #{toPathPiece w SchoolWorkflowWorkflowWorkflowHeading ssh workflowWorkflowId: Workflow #{ssh}, #{toPathPiece workflowWorkflowId} SchoolWorkflowWorkflowWorkflowTitle ssh workflowWorkflowId: Workflow #{ssh}, #{toPathPiece workflowWorkflowId} + +FormFieldWorkflowDatasetTip: At least one of the marked fields must be filled WorkflowDefinitionGraph: Specification WorkflowDefinitionKeyDoesNotExist renderedCryptoID: Referenced id does not exist: #{renderedCryptoID} WorkflowDefinitionFiles: Files diff --git a/src/Handler/Utils/Workflow/EdgeForm.hs b/src/Handler/Utils/Workflow/EdgeForm.hs index a0466f725..abb672e4b 100644 --- a/src/Handler/Utils/Workflow/EdgeForm.hs +++ b/src/Handler/Utils/Workflow/EdgeForm.hs @@ -172,18 +172,21 @@ workflowEdgeForm mwwId mPrev = runMaybeT $ do orderedFields' <- flip evalStateT 1 . for orderedFields $ \x@(payloadLabel, _) -> do let generateDisplayLabel = State.state $ \n -> (mr $ MsgWorkflowEdgeFormHiddenPayload n, succ n) - (mayView, payloadDisplayLabel) <- hoist (lift . lift . runDB) . maybeT ((False, ) <$> generateDisplayLabel) $ do - WorkflowPayloadView{..} <- hoistMaybe . Map.lookup payloadLabel $ Map.findWithDefault Map.empty (fromMaybe tState wState) (wgnPayloadView <$> wgNodes graph) - wRoute <- case (mwwId, ctx) of - (Right wwId, Right _) -> do - cID <- encrypt wwId - return $ _WorkflowScopeRoute # (rScope, WorkflowWorkflowR cID WWWorkflowR) - (Left _, Left WorkflowInstance{..}) - -> return $ _WorkflowScopeRoute # (rScope, WorkflowInstanceR workflowInstanceName WIInitiateR) - _other -> error "mwwId and ctx do not agree" - guardM . anyM (Set.toList $ toNullable wpvViewers) $ \role -> - lift . lift $ is _Authorized <$> hasWorkflowRole (mwwId ^? _Right) role wRoute False - (True, ) <$> selectLanguageI18n wpvDisplayLabel + (mayView, payloadDisplayLabel) <- hoist (lift . lift . runDB) . maybeT ((False, ) <$> generateDisplayLabel) $ + let + displayNameFromState s = do + WorkflowPayloadView{..} <- hoistMaybe . Map.lookup payloadLabel $ Map.findWithDefault Map.empty s (wgnPayloadView <$> wgNodes graph) + wRoute <- case (mwwId, ctx) of + (Right wwId, Right _) -> do + cID <- encrypt wwId + return $ _WorkflowScopeRoute # (rScope, WorkflowWorkflowR cID WWWorkflowR) + (Left _, Left WorkflowInstance{..}) + -> return $ _WorkflowScopeRoute # (rScope, WorkflowInstanceR workflowInstanceName WIInitiateR) + _other -> error "mwwId and ctx do not agree" + guardM . anyM (Set.toList $ toNullable wpvViewers) $ \role -> + lift . lift $ is _Authorized <$> hasWorkflowRole (mwwId ^? _Right) role wRoute False + (True, ) <$> selectLanguageI18n wpvDisplayLabel + in displayNameFromState tState <|> maybe mzero displayNameFromState wState return ((mayView, payloadDisplayLabel), x) fields <- for orderedFields' $ \((mayView, payloadDisplayLabel), (payloadLabel, payloadSpecs)) -> (payloadLabel, ) <$> do @@ -234,7 +237,8 @@ workflowEdgeForm mwwId mPrev = runMaybeT $ do fvId <- newIdent let fvLabel = toHtml payloadDisplayLabel fvTooltip = Nothing - fvInput = renderFieldViews FormStandard payloadFieldViews + fvInput = renderFieldViews FormWorkflowDataset $ payloadFieldViews + & traverse . _fvRequired .~ not isOptional fvErrors = bool id addErrMsg doErrMsg Nothing fvRequired = not isOptional in lift . tell $ pure FieldView{..} diff --git a/src/Utils/Form.hs b/src/Utils/Form.hs index bdc5e1c2c..8b10d2e3e 100644 --- a/src/Utils/Form.hs +++ b/src/Utils/Form.hs @@ -890,11 +890,13 @@ wrapForm' btn formWidget FormSettings{..} = do -- | Use this type to pass information to the form template data FormLayout = FormStandard | FormDBTableFilter | FormDBTablePagesize | FormDBTableCsvImport | FormDBTableCsvExport + | FormWorkflowDataset | FormVertical deriving (Eq, Ord, Read, Show, Enum, Bounded, Generic, Typeable) deriving anyclass (Universe, Finite) data AFormMessage = MsgAFormFieldRequiredTip + | MsgAFormFieldWorkflowDatasetTip deriving (Eq, Ord, Read, Show, Generic, Typeable) renderAForm :: (RenderMessage (HandlerSite m) AFormMessage, Monad m) => FormLayout -> FormRender m a @@ -904,6 +906,7 @@ renderAForm formLayout aform fragment = do widget = $(widgetFile "widgets/aform/aform") return (res, widget) where isFormVertical = formLayout == FormVertical + isFormWorkflowDataset = formLayout == FormWorkflowDataset renderWForm :: (RenderMessage (HandlerSite m) AFormMessage, MonadHandler m) => FormLayout -> WForm m (FormResult a) -> -- Form a -- (Synonym unavailable here) (Markup -> MForm m (FormResult a, WidgetT (HandlerSite m) IO ())) diff --git a/src/Utils/Workflow/Lint.hs b/src/Utils/Workflow/Lint.hs index b68dcf946..5c784679c 100644 --- a/src/Utils/Workflow/Lint.hs +++ b/src/Utils/Workflow/Lint.hs @@ -25,6 +25,7 @@ lintWorkflowGraph graph = fromNullable . Set.fromList $ concatMap ($ graph) [ checkEdgesForUnknownGraphNodeLabel -- Future ideas: -- - node with no outgoing edges that isn't final + -- - final node with outgoing edges -- - WorkflowRolePayloadReference for unknown payload -- - wgePayloadRestriction for unknown payload -- - Undefined field order diff --git a/templates/widgets/aform/aform.hamlet b/templates/widgets/aform/aform.hamlet index cffc289a0..9674f2b77 100644 --- a/templates/widgets/aform/aform.hamlet +++ b/templates/widgets/aform/aform.hamlet @@ -18,7 +18,7 @@ $case formLayout
^{fvInput view} $else -
+
$if not (Blaze.null $ fvLabel view)