fix(workflows): prefer payload label from target state

Adjust styling
This commit is contained in:
Gregor Kleen 2020-11-25 18:47:13 +01:00
parent 0a3eaa2994
commit 2619b08ad1
9 changed files with 66 additions and 33 deletions

View File

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

View File

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

View File

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

View File

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

View File

@ -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{..}

View File

@ -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 ()))

View File

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

View File

@ -18,7 +18,7 @@ $case formLayout
<div .form-section-notification :isFormVertical:.form--vertical>
^{fvInput view}
$else
<div .form-group .interactive-fieldset__target :fvRequired view:.form-group--required :not $ fvRequired view:.form-group--optional :isJust $ fvErrors view:.form-group--has-error :isFormVertical:.form--vertical>
<div .form-group .interactive-fieldset__target :fvRequired view && not isFormWorkflowDataset:.form-group--required :fvRequired view && isFormWorkflowDataset:.form-group--potentially-required :not $ fvRequired view:.form-group--optional :isJust $ fvErrors view:.form-group--has-error :isFormVertical:.form--vertical>
$if not (Blaze.null $ fvLabel view)
<label .form-group-label for=#{fvId view}>
<span .form-group-label__caption>
@ -32,5 +32,10 @@ $case formLayout
#{err}
$if formHasRequiredFields && not isFormVertical
<div .form-section-legend>
<span .form-group__required-marker>
_{MsgAFormFieldRequiredTip}
$case formLayout
$of FormWorkflowDataset
<span .form-group__potentially-required-marker>
_{MsgAFormFieldWorkflowDatasetTip}
$of _
<span .form-group__required-marker>
_{MsgAFormFieldRequiredTip}

View File

@ -60,7 +60,7 @@
"titel, englisch": &entitel-form
- "2":
tag: text
label: "Titelvorschlag für Verastaltung, auf Englisch"
label: "Titelvorschlag für Veranstaltung, auf Englisch"
tooltip: null
default: null
optional: false
@ -107,7 +107,7 @@
default: null
optional: false
viewers:
display-label: "Antrag in Bearbeitung (IT-Kompetenz)"
display-label: "Antrag noch unfertig (IT-Kompetenz)"
viewers:
- *student
- *pruefungsamt
@ -187,13 +187,14 @@
- *pruefungsamt
view-actor:
- *pruefungsamt
form: {}
form:
"notizen": *notizen-form
viewers:
display-label: "Antrag abgelehnt (IT-Kompetenz)"
viewers:
- *student
- *pruefungsamt
payload-view: *payload-view-itkompetenz
payload-view: *payload-view-itkompetenz-notizen
"medienkompetenz antrag, student":
final: false
@ -235,7 +236,7 @@
"titel, englisch": *entitel-form
"notizen": *notizen-form
viewers:
display-label: "Antrag in Bearbeitung (Medienkompetenz)"
display-label: "Antrag noch unfertig (Medienkompetenz)"
viewers:
- *student
- *pruefungsamt
@ -315,13 +316,14 @@
- *pruefungsamt
view-actor:
- *pruefungsamt
form: {}
form:
"notizen": *notizen-form
viewers:
display-label: "Antrag abgelehnt (Medienkompetenz)"
viewers:
- *student
- *pruefungsamt
payload-view: *payload-view-medienkompetenz
payload-view: *payload-view-medienkompetenz-notizen
"tutor antrag, student":
final: false
@ -378,7 +380,7 @@
"tutorbeleg": *tutorbeleg-form
"notizen": *notizen-form
viewers:
display-label: "Antrag in Bearbeitung (Tutor)"
display-label: "Antrag noch unfertig (Tutor)"
viewers:
- *student
- *pruefungsamt
@ -452,13 +454,14 @@
- *pruefungsamt
view-actor:
- *pruefungsamt
form: {}
form:
"notizen": *notizen-form
viewers:
display-label: "Antrag abgelehnt (Tutor)"
viewers:
- *student
- *pruefungsamt
payload-view: *payload-view-tutor
payload-view: *payload-view-tutor-notizen
"sozialekompetenz antrag, student":
final: false
@ -500,7 +503,7 @@
"titel, englisch": *entitel-form
"notizen": *notizen-form
viewers:
display-label: "Antrag in Bearbeitung (Sozialekompetenz)"
display-label: "Antrag noch unfertig (Sozialekompetenz)"
viewers:
- *student
- *pruefungsamt
@ -580,13 +583,14 @@
- *pruefungsamt
view-actor:
- *pruefungsamt
form: {}
form:
"notizen": *notizen-form
viewers:
display-label: "Antrag abgelehnt (Sozialekompetenz)"
viewers:
- *student
- *pruefungsamt
payload-view: *payload-view-sozialekompetenz
payload-view: *payload-view-sozialekompetenz-notizen
"englisch antrag, student":
final: false
@ -650,7 +654,7 @@
"englischbeleg": *englischbeleg-form
"notizen": *notizen-form
viewers:
display-label: "Antrag in Bearbeitung (Englisch)"
display-label: "Antrag noch unfertig (Englisch)"
viewers:
- *student
- *pruefungsamt
@ -730,10 +734,11 @@
- *pruefungsamt
view-actor:
- *pruefungsamt
form: {}
form:
"notizen": *notizen-form
viewers:
display-label: "Antrag abgelehnt (Englisch)"
viewers:
- *student
- *pruefungsamt
payload-view: *payload-view-englisch
payload-view: *payload-view-englisch-notizen