Add custom fields to multi-edit form

This commit is contained in:
Eike Kettner
2020-11-22 12:03:28 +01:00
parent 76647d132f
commit ff30ed5558
6 changed files with 165 additions and 22 deletions

View File

@ -18,6 +18,7 @@ import Api.Model.ItemProposals exposing (ItemProposals)
import Api.Model.ReferenceList exposing (ReferenceList)
import Api.Model.Tag exposing (Tag)
import Api.Model.TagList exposing (TagList)
import Comp.CustomFieldMultiInput exposing (FieldResult(..))
import Comp.DatePicker
import Comp.DetailEdit
import Comp.Dropdown exposing (isDropdownChangeMsg)
@ -77,6 +78,7 @@ type alias Model =
, concEquipModel : Comp.Dropdown.Model IdName
, modalEdit : Maybe Comp.DetailEdit.Model
, tagEditMode : TagEditMode
, customFieldModel : Comp.CustomFieldMultiInput.Model
}
@ -102,6 +104,7 @@ type Msg
| GetPersonResp (Result Http.Error ReferenceList)
| GetEquipResp (Result Http.Error EquipmentList)
| GetFolderResp (Result Http.Error FolderList)
| CustomFieldMsg Comp.CustomFieldMultiInput.Msg
init : Model
@ -155,6 +158,7 @@ init =
, dueDatePicker = Comp.DatePicker.emptyModel
, modalEdit = Nothing
, tagEditMode = AddTags
, customFieldModel = Comp.CustomFieldMultiInput.initWith []
}
@ -170,6 +174,7 @@ loadModel flags =
, Api.getPersonsLight flags GetPersonResp
, Api.getEquipments flags "" GetEquipResp
, Api.getFolders flags "" False GetFolderResp
, Cmd.map CustomFieldMsg (Comp.CustomFieldMultiInput.initCmd flags)
, Cmd.map ItemDatePickerMsg dpc
, Cmd.map DueDatePickerMsg dpc
]
@ -547,6 +552,36 @@ update flags msg model =
in
UpdateResult newModel cmd sub NoFormChange
CustomFieldMsg lm ->
let
res =
Comp.CustomFieldMultiInput.update lm model.customFieldModel
model_ =
{ model | customFieldModel = res.model }
cmd_ =
Cmd.map CustomFieldMsg res.cmd
sub_ =
Sub.map CustomFieldMsg res.subs
change =
case res.result of
NoResult ->
NoFormChange
FieldValueRemove cf ->
RemoveCustomValue cf
FieldValueChange cf value ->
CustomValueChange cf value
FieldCreateNew ->
NoFormChange
in
UpdateResult model_ cmd_ sub_ change
nameThrottleSub : Model -> Sub Msg
nameThrottleSub model =
@ -614,6 +649,9 @@ renderEditForm cfg settings model =
ReplaceTags ->
"Tags chosen here *replace* those on selected items."
customFieldSettings =
Comp.CustomFieldMultiInput.ViewSettings False "field"
in
div [ class cfg.menuClass ]
[ div [ class "ui form warning" ]
@ -687,13 +725,18 @@ item visible. This message will disappear then.
"""
]
]
, optional [ Data.Fields.Direction ] <|
div [ class "field" ]
[ label []
[ Icons.directionIcon "grey"
, text "Direction"
]
, Html.map DirDropdownMsg (Comp.Dropdown.view settings model.directionModel)
, optional [ Data.Fields.CustomFields ] <|
h4 [ class "ui dividing header" ]
[ Icons.customFieldIcon ""
, text "Custom Fields"
]
, optional [ Data.Fields.CustomFields ] <|
Html.map CustomFieldMsg
(Comp.CustomFieldMultiInput.view customFieldSettings model.customFieldModel)
, optional [ Data.Fields.Date, Data.Fields.DueDate ] <|
h4 [ class "ui dividing header" ]
[ Icons.itemDatesIcon ""
, text "Item Dates"
]
, optional [ Data.Fields.Date ] <|
div [ class "field" ]
@ -701,7 +744,7 @@ item visible. This message will disappear then.
[ Icons.dateIcon "grey"
, text "Date"
]
, div [ class "ui action input" ]
, div [ class "ui left icon action input" ]
[ Html.map ItemDatePickerMsg
(Comp.DatePicker.viewTime
model.itemDate
@ -711,6 +754,7 @@ item visible. This message will disappear then.
, a [ class "ui icon button", href "", onClick RemoveDate ]
[ i [ class "trash alternate outline icon" ] []
]
, Icons.dateIcon ""
]
]
, optional [ Data.Fields.DueDate ] <|
@ -719,7 +763,7 @@ item visible. This message will disappear then.
[ Icons.dueDateIcon "grey"
, text "Due Date"
]
, div [ class "ui action input" ]
, div [ class "ui left icon action input" ]
[ Html.map DueDatePickerMsg
(Comp.DatePicker.viewTime
model.dueDate
@ -728,6 +772,7 @@ item visible. This message will disappear then.
)
, a [ class "ui icon button", href "", onClick RemoveDueDate ]
[ i [ class "trash alternate outline icon" ] [] ]
, Icons.dueDateIcon ""
]
]
, optional [ Data.Fields.CorrOrg, Data.Fields.CorrPerson ] <|
@ -772,6 +817,14 @@ item visible. This message will disappear then.
]
, Html.map ConcEquipMsg (Comp.Dropdown.view settings model.concEquipModel)
]
, optional [ Data.Fields.Direction ] <|
div [ class "field" ]
[ label []
[ Icons.directionIcon "grey"
, text "Direction"
]
, Html.map DirDropdownMsg (Comp.Dropdown.view settings model.directionModel)
]
]
]

View File

@ -5,9 +5,12 @@ module Comp.ItemDetail.FormChange exposing
import Api
import Api.Model.BasicResult exposing (BasicResult)
import Api.Model.CustomField exposing (CustomField)
import Api.Model.CustomFieldValue exposing (CustomFieldValue)
import Api.Model.IdName exposing (IdName)
import Api.Model.ItemsAndDate exposing (ItemsAndDate)
import Api.Model.ItemsAndDirection exposing (ItemsAndDirection)
import Api.Model.ItemsAndFieldValue exposing (ItemsAndFieldValue)
import Api.Model.ItemsAndName exposing (ItemsAndName)
import Api.Model.ItemsAndRef exposing (ItemsAndRef)
import Api.Model.ItemsAndRefs exposing (ItemsAndRefs)
@ -33,6 +36,8 @@ type FormChange
| DueDateChange (Maybe Int)
| NameChange String
| ConfirmChange Bool
| CustomValueChange CustomField String
| RemoveCustomValue CustomField
multiUpdate :
@ -47,6 +52,20 @@ multiUpdate flags ids change receive =
Set.toList ids
in
case change of
CustomValueChange field value ->
let
data =
ItemsAndFieldValue items (CustomFieldValue field.id value)
in
Api.putCustomValueMultiple flags data receive
RemoveCustomValue field ->
let
data =
ItemsAndName items field.id
in
Api.deleteCustomValueMultiple flags data receive
ReplaceTagChange tags ->
let
data =

View File

@ -728,6 +728,9 @@ renderEditForm settings model =
else
span [ class "invisible hidden" ] []
customFieldSettings =
Comp.CustomFieldMultiInput.ViewSettings True "field"
in
div [ class "ui attached segment" ]
[ div [ class "ui form warning" ]
@ -781,11 +784,11 @@ item visible. This message will disappear then.
]
, optional [ Data.Fields.CustomFields ] <|
Html.map CustomFieldMsg
(Comp.CustomFieldMultiInput.view "field" model.customFieldsModel)
(Comp.CustomFieldMultiInput.view customFieldSettings model.customFieldsModel)
, optional [ Data.Fields.DueDate, Data.Fields.Date ] <|
h4 [ class "ui dividing header" ]
[ Icons.dateIcon ""
, text "Dates"
[ Icons.itemDatesIcon ""
, text "Item Dates"
]
, optional [ Data.Fields.Date ] <|
div [ class "field" ]