mirror of
https://github.com/TheAnachronism/docspell.git
synced 2025-07-04 16:48:26 +00:00
Select item in detail view
This commit is contained in:
@ -12,10 +12,10 @@ module Comp.ItemDetail exposing
|
||||
, view2
|
||||
)
|
||||
|
||||
import Browser.Navigation as Nav
|
||||
import Comp.ItemDetail.Model exposing (Msg(..), UpdateResult)
|
||||
import Comp.ItemDetail.Update
|
||||
import Comp.ItemDetail.View2
|
||||
import Data.Environment as Env
|
||||
import Data.Flags exposing (Flags)
|
||||
import Data.ItemNav exposing (ItemNav)
|
||||
import Data.UiSettings exposing (UiSettings)
|
||||
@ -33,11 +33,11 @@ emptyModel =
|
||||
Comp.ItemDetail.Model.emptyModel
|
||||
|
||||
|
||||
update : Nav.Key -> Flags -> ItemNav -> UiSettings -> Msg -> Model -> UpdateResult
|
||||
update : ItemNav -> Env.Update -> Msg -> Model -> UpdateResult
|
||||
update =
|
||||
Comp.ItemDetail.Update.update
|
||||
|
||||
|
||||
view2 : Texts -> Flags -> ItemNav -> UiSettings -> Model -> Html Msg
|
||||
view2 : Texts -> ItemNav -> Env.View -> Model -> Html Msg
|
||||
view2 =
|
||||
Comp.ItemDetail.View2.view
|
||||
|
@ -57,6 +57,7 @@ import Comp.SimpleTextInput
|
||||
import Comp.TagDropdown
|
||||
import Data.Direction exposing (Direction)
|
||||
import Data.Fields exposing (Field)
|
||||
import Data.ItemIds exposing (ItemIdChange)
|
||||
import DatePicker exposing (DatePicker)
|
||||
import Dict exposing (Dict)
|
||||
import File exposing (File)
|
||||
@ -367,6 +368,7 @@ type Msg
|
||||
| ToggleShowQrAttach String
|
||||
| PrintElement String
|
||||
| SetNameMsg Comp.SimpleTextInput.Msg
|
||||
| ToggleSelectItem
|
||||
|
||||
|
||||
type SaveNameState
|
||||
@ -381,22 +383,23 @@ type alias UpdateResult =
|
||||
, sub : Sub Msg
|
||||
, linkTarget : LinkTarget
|
||||
, removedItem : Maybe String
|
||||
, selectionChange : ItemIdChange
|
||||
}
|
||||
|
||||
|
||||
resultModel : Model -> UpdateResult
|
||||
resultModel model =
|
||||
UpdateResult model Cmd.none Sub.none Comp.LinkTarget.LinkNone Nothing
|
||||
UpdateResult model Cmd.none Sub.none Comp.LinkTarget.LinkNone Nothing Data.ItemIds.noChange
|
||||
|
||||
|
||||
resultModelCmd : ( Model, Cmd Msg ) -> UpdateResult
|
||||
resultModelCmd ( model, cmd ) =
|
||||
UpdateResult model cmd Sub.none Comp.LinkTarget.LinkNone Nothing
|
||||
UpdateResult model cmd Sub.none Comp.LinkTarget.LinkNone Nothing Data.ItemIds.noChange
|
||||
|
||||
|
||||
resultModelCmdSub : ( Model, Cmd Msg, Sub Msg ) -> UpdateResult
|
||||
resultModelCmdSub ( model, cmd, sub ) =
|
||||
UpdateResult model cmd sub Comp.LinkTarget.LinkNone Nothing
|
||||
UpdateResult model cmd sub Comp.LinkTarget.LinkNone Nothing Data.ItemIds.noChange
|
||||
|
||||
|
||||
personMatchesOrg : Model -> Bool
|
||||
|
@ -20,7 +20,6 @@ import Api.Model.OptionalDate exposing (OptionalDate)
|
||||
import Api.Model.OptionalId exposing (OptionalId)
|
||||
import Api.Model.OptionalText exposing (OptionalText)
|
||||
import Api.Model.StringList exposing (StringList)
|
||||
import Browser.Navigation as Nav
|
||||
import Comp.AttachmentMeta
|
||||
import Comp.CustomFieldMultiInput
|
||||
import Comp.DatePicker
|
||||
@ -58,10 +57,12 @@ import Comp.SimpleTextInput
|
||||
import Comp.TagDropdown
|
||||
import Data.CustomFieldChange exposing (CustomFieldChange(..))
|
||||
import Data.Direction
|
||||
import Data.Environment as Env
|
||||
import Data.EquipmentOrder
|
||||
import Data.Fields exposing (Field)
|
||||
import Data.Flags exposing (Flags)
|
||||
import Data.FolderOrder
|
||||
import Data.ItemIds
|
||||
import Data.ItemNav exposing (ItemNav)
|
||||
import Data.PersonOrder
|
||||
import Data.PersonUse
|
||||
@ -74,7 +75,6 @@ import Http
|
||||
import Page exposing (Page(..))
|
||||
import Ports
|
||||
import Set exposing (Set)
|
||||
import Time
|
||||
import Util.File exposing (makeFileId)
|
||||
import Util.List
|
||||
import Util.Maybe
|
||||
@ -82,8 +82,8 @@ import Util.String
|
||||
import Util.Tag
|
||||
|
||||
|
||||
update : Nav.Key -> Flags -> ItemNav -> UiSettings -> Msg -> Model -> UpdateResult
|
||||
update key flags inav settings msg model =
|
||||
update : ItemNav -> Env.Update -> Msg -> Model -> UpdateResult
|
||||
update inav env msg model =
|
||||
case msg of
|
||||
Init ->
|
||||
let
|
||||
@ -91,10 +91,10 @@ update key flags inav settings msg model =
|
||||
Comp.DatePicker.init
|
||||
|
||||
( im, ic ) =
|
||||
Comp.ItemMail.init flags
|
||||
Comp.ItemMail.init env.flags
|
||||
|
||||
( cm, cc ) =
|
||||
Comp.CustomFieldMultiInput.init flags
|
||||
Comp.CustomFieldMultiInput.init env.flags
|
||||
in
|
||||
resultModelCmd
|
||||
( { model
|
||||
@ -106,30 +106,26 @@ update key flags inav settings msg model =
|
||||
, customFieldsModel = cm
|
||||
}
|
||||
, Cmd.batch
|
||||
[ getOptions flags
|
||||
[ getOptions env.flags
|
||||
, Cmd.map ItemDatePickerMsg dpc
|
||||
, Cmd.map DueDatePickerMsg dpc
|
||||
, Cmd.map ItemMailMsg ic
|
||||
, Cmd.map CustomFieldMsg cc
|
||||
, Api.getSentMails flags model.item.id SentMailsResp
|
||||
, Api.getSentMails env.flags model.item.id SentMailsResp
|
||||
]
|
||||
)
|
||||
|
||||
SetItem item ->
|
||||
let
|
||||
res1 =
|
||||
update key
|
||||
flags
|
||||
inav
|
||||
settings
|
||||
update inav
|
||||
env
|
||||
(TagDropdownMsg (Comp.TagDropdown.setSelected item.tags))
|
||||
model
|
||||
|
||||
res2 =
|
||||
update key
|
||||
flags
|
||||
inav
|
||||
settings
|
||||
update inav
|
||||
env
|
||||
(DirDropdownMsg
|
||||
(Comp.Dropdown.SetSelection
|
||||
(Data.Direction.fromString item.direction
|
||||
@ -141,10 +137,8 @@ update key flags inav settings msg model =
|
||||
res1.model
|
||||
|
||||
res3 =
|
||||
update key
|
||||
flags
|
||||
inav
|
||||
settings
|
||||
update inav
|
||||
env
|
||||
(OrgDropdownMsg
|
||||
(Comp.Dropdown.SetSelection
|
||||
(item.corrOrg
|
||||
@ -156,10 +150,8 @@ update key flags inav settings msg model =
|
||||
res2.model
|
||||
|
||||
res4 =
|
||||
update key
|
||||
flags
|
||||
inav
|
||||
settings
|
||||
update inav
|
||||
env
|
||||
(CorrPersonMsg
|
||||
(Comp.Dropdown.SetSelection
|
||||
(item.corrPerson
|
||||
@ -171,10 +163,8 @@ update key flags inav settings msg model =
|
||||
res3.model
|
||||
|
||||
res5 =
|
||||
update key
|
||||
flags
|
||||
inav
|
||||
settings
|
||||
update inav
|
||||
env
|
||||
(ConcPersonMsg
|
||||
(Comp.Dropdown.SetSelection
|
||||
(item.concPerson
|
||||
@ -186,10 +176,8 @@ update key flags inav settings msg model =
|
||||
res4.model
|
||||
|
||||
res6 =
|
||||
update key
|
||||
flags
|
||||
inav
|
||||
settings
|
||||
update inav
|
||||
env
|
||||
(ConcEquipMsg
|
||||
(Comp.Dropdown.SetSelection
|
||||
(item.concEquipment
|
||||
@ -201,13 +189,11 @@ update key flags inav settings msg model =
|
||||
res5.model
|
||||
|
||||
res7 =
|
||||
update key flags inav settings AddFilesReset res6.model
|
||||
update inav env AddFilesReset res6.model
|
||||
|
||||
res8 =
|
||||
update key
|
||||
flags
|
||||
inav
|
||||
settings
|
||||
update inav
|
||||
env
|
||||
(FolderDropdownMsg
|
||||
(Comp.Dropdown.SetSelection
|
||||
(item.folder
|
||||
@ -219,16 +205,14 @@ update key flags inav settings msg model =
|
||||
res7.model
|
||||
|
||||
res9 =
|
||||
update key
|
||||
flags
|
||||
inav
|
||||
settings
|
||||
update inav
|
||||
env
|
||||
(CustomFieldMsg (Comp.CustomFieldMultiInput.setValues item.customfields))
|
||||
res8.model
|
||||
|
||||
proposalCmd =
|
||||
if item.state == "created" then
|
||||
Api.getItemProposals flags item.id GetProposalResp
|
||||
Api.getItemProposals env.flags item.id GetProposalResp
|
||||
|
||||
else
|
||||
Cmd.none
|
||||
@ -265,11 +249,11 @@ update key flags inav settings msg model =
|
||||
, res7.cmd
|
||||
, res8.cmd
|
||||
, res9.cmd
|
||||
, getOptions flags
|
||||
, getOptions env.flags
|
||||
, proposalCmd
|
||||
, Api.getSentMails flags item.id SentMailsResp
|
||||
, Api.getPersons flags "" Data.PersonOrder.NameAsc GetPersonResp
|
||||
, Cmd.map CustomFieldMsg (Comp.CustomFieldMultiInput.initCmd flags)
|
||||
, Api.getSentMails env.flags item.id SentMailsResp
|
||||
, Api.getPersons env.flags "" Data.PersonOrder.NameAsc GetPersonResp
|
||||
, Cmd.map CustomFieldMsg (Comp.CustomFieldMultiInput.initCmd env.flags)
|
||||
]
|
||||
, sub =
|
||||
Sub.batch
|
||||
@ -285,6 +269,7 @@ update key flags inav settings msg model =
|
||||
]
|
||||
, linkTarget = Comp.LinkTarget.LinkNone
|
||||
, removedItem = Nothing
|
||||
, selectionChange = Data.ItemIds.noChange
|
||||
}
|
||||
|
||||
SetActiveAttachment pos ->
|
||||
@ -322,7 +307,7 @@ update key flags inav settings msg model =
|
||||
resultModel model
|
||||
|
||||
else
|
||||
resultModelCmd ( model, Api.itemDetail flags model.item.id GetItemResp )
|
||||
resultModelCmd ( model, Api.itemDetail env.flags model.item.id GetItemResp )
|
||||
|
||||
FolderDropdownMsg m ->
|
||||
let
|
||||
@ -337,7 +322,7 @@ update key flags inav settings msg model =
|
||||
|
||||
save =
|
||||
if isDropdownChangeMsg m then
|
||||
setFolder flags newModel idref
|
||||
setFolder env.flags newModel idref
|
||||
|
||||
else
|
||||
Cmd.none
|
||||
@ -354,7 +339,7 @@ update key flags inav settings msg model =
|
||||
|
||||
save =
|
||||
if Comp.TagDropdown.isChangeMsg m then
|
||||
saveTags flags newModel
|
||||
saveTags env.flags newModel
|
||||
|
||||
else
|
||||
Cmd.none
|
||||
@ -371,7 +356,7 @@ update key flags inav settings msg model =
|
||||
|
||||
save =
|
||||
if isDropdownChangeMsg m then
|
||||
setDirection flags newModel
|
||||
setDirection env.flags newModel
|
||||
|
||||
else
|
||||
Cmd.none
|
||||
@ -393,7 +378,7 @@ update key flags inav settings msg model =
|
||||
|
||||
save =
|
||||
if isDropdownChangeMsg m then
|
||||
setCorrOrg flags newModel idref
|
||||
setCorrOrg env.flags newModel idref
|
||||
|
||||
else
|
||||
Cmd.none
|
||||
@ -413,7 +398,7 @@ update key flags inav settings msg model =
|
||||
|
||||
save =
|
||||
if isDropdownChangeMsg m then
|
||||
setCorrPerson flags newModel idref
|
||||
setCorrPerson env.flags newModel idref
|
||||
|
||||
else
|
||||
Cmd.none
|
||||
@ -433,7 +418,7 @@ update key flags inav settings msg model =
|
||||
|
||||
save =
|
||||
if isDropdownChangeMsg m then
|
||||
setConcPerson flags newModel idref
|
||||
setConcPerson env.flags newModel idref
|
||||
|
||||
else
|
||||
Cmd.none
|
||||
@ -453,7 +438,7 @@ update key flags inav settings msg model =
|
||||
|
||||
save =
|
||||
if isDropdownChangeMsg m then
|
||||
setConcEquip flags newModel idref
|
||||
setConcEquip env.flags newModel idref
|
||||
|
||||
else
|
||||
Cmd.none
|
||||
@ -468,7 +453,7 @@ update key flags inav settings msg model =
|
||||
( setter, value, save ) =
|
||||
case result.change of
|
||||
Comp.SimpleTextInput.ValueUpdated v ->
|
||||
( setName flags { model | nameModel = Maybe.withDefault "" v }, v, Saving )
|
||||
( setName env.flags { model | nameModel = Maybe.withDefault "" v }, v, Saving )
|
||||
|
||||
Comp.SimpleTextInput.ValueUnchanged ->
|
||||
( Cmd.none, Nothing, model.nameState )
|
||||
@ -478,6 +463,7 @@ update key flags inav settings msg model =
|
||||
, sub = Sub.map SetNameMsg result.sub
|
||||
, linkTarget = Comp.LinkTarget.LinkNone
|
||||
, removedItem = Nothing
|
||||
, selectionChange = Data.ItemIds.noChange
|
||||
}
|
||||
|
||||
SetNotes str ->
|
||||
@ -509,22 +495,22 @@ update key flags inav settings msg model =
|
||||
resultModel model
|
||||
|
||||
SaveNotes ->
|
||||
resultModelCmd ( model, setNotes flags model )
|
||||
resultModelCmd ( model, setNotes env.flags model )
|
||||
|
||||
ConfirmItem ->
|
||||
let
|
||||
resetCmds =
|
||||
resetHiddenFields settings flags model.item.id ResetHiddenMsg
|
||||
resetHiddenFields env.settings env.flags model.item.id ResetHiddenMsg
|
||||
in
|
||||
resultModelCmd
|
||||
( { model | mobileItemMenuOpen = False }
|
||||
, Cmd.batch (Api.setConfirmed flags model.item.id SaveResp :: resetCmds)
|
||||
, Cmd.batch (Api.setConfirmed env.flags model.item.id SaveResp :: resetCmds)
|
||||
)
|
||||
|
||||
UnconfirmItem ->
|
||||
resultModelCmd
|
||||
( { model | mobileItemMenuOpen = False }
|
||||
, Api.setUnconfirmed flags model.item.id SaveResp
|
||||
, Api.setUnconfirmed env.flags model.item.id SaveResp
|
||||
)
|
||||
|
||||
ItemDatePickerMsg m ->
|
||||
@ -538,13 +524,13 @@ update key flags inav settings msg model =
|
||||
newModel =
|
||||
{ model | itemDatePicker = dp, itemDate = Just (Comp.DatePicker.midOfDay date) }
|
||||
in
|
||||
resultModelCmd ( newModel, setDate flags newModel newModel.itemDate )
|
||||
resultModelCmd ( newModel, setDate env.flags newModel newModel.itemDate )
|
||||
|
||||
_ ->
|
||||
resultModel { model | itemDatePicker = dp }
|
||||
|
||||
RemoveDate ->
|
||||
resultModelCmd ( { model | itemDate = Nothing }, setDate flags model Nothing )
|
||||
resultModelCmd ( { model | itemDate = Nothing }, setDate env.flags model Nothing )
|
||||
|
||||
DueDatePickerMsg m ->
|
||||
let
|
||||
@ -557,18 +543,18 @@ update key flags inav settings msg model =
|
||||
newModel =
|
||||
{ model | dueDatePicker = dp, dueDate = Just (Comp.DatePicker.midOfDay date) }
|
||||
in
|
||||
resultModelCmd ( newModel, setDueDate flags newModel newModel.dueDate )
|
||||
resultModelCmd ( newModel, setDueDate env.flags newModel newModel.dueDate )
|
||||
|
||||
_ ->
|
||||
resultModel { model | dueDatePicker = dp }
|
||||
|
||||
RemoveDueDate ->
|
||||
resultModelCmd ( { model | dueDate = Nothing }, setDueDate flags model Nothing )
|
||||
resultModelCmd ( { model | dueDate = Nothing }, setDueDate env.flags model Nothing )
|
||||
|
||||
DeleteItemConfirmed ->
|
||||
let
|
||||
cmd =
|
||||
Api.deleteItem flags model.item.id (DeleteResp model.item.id)
|
||||
Api.deleteItem env.flags model.item.id (DeleteResp model.item.id)
|
||||
in
|
||||
resultModelCmd ( { model | itemModal = Nothing }, cmd )
|
||||
|
||||
@ -583,22 +569,22 @@ update key flags inav settings msg model =
|
||||
}
|
||||
|
||||
SetCorrOrgSuggestion idname ->
|
||||
resultModelCmd ( model, setCorrOrg flags model (Just idname) )
|
||||
resultModelCmd ( model, setCorrOrg env.flags model (Just idname) )
|
||||
|
||||
SetCorrPersonSuggestion idname ->
|
||||
resultModelCmd ( model, setCorrPerson flags model (Just idname) )
|
||||
resultModelCmd ( model, setCorrPerson env.flags model (Just idname) )
|
||||
|
||||
SetConcPersonSuggestion idname ->
|
||||
resultModelCmd ( model, setConcPerson flags model (Just idname) )
|
||||
resultModelCmd ( model, setConcPerson env.flags model (Just idname) )
|
||||
|
||||
SetConcEquipSuggestion idname ->
|
||||
resultModelCmd ( model, setConcEquip flags model (Just idname) )
|
||||
resultModelCmd ( model, setConcEquip env.flags model (Just idname) )
|
||||
|
||||
SetItemDateSuggestion date ->
|
||||
resultModelCmd ( model, setDate flags model (Just date) )
|
||||
resultModelCmd ( model, setDate env.flags model (Just date) )
|
||||
|
||||
SetDueDateSuggestion date ->
|
||||
resultModelCmd ( model, setDueDate flags model (Just date) )
|
||||
resultModelCmd ( model, setDueDate env.flags model (Just date) )
|
||||
|
||||
GetFolderResp (Ok fs) ->
|
||||
let
|
||||
@ -613,7 +599,7 @@ update key flags inav settings msg model =
|
||||
|> List.map mkIdName
|
||||
|> Comp.Dropdown.SetOptions
|
||||
in
|
||||
update key flags inav settings (FolderDropdownMsg opts) model_
|
||||
update inav env (FolderDropdownMsg opts) model_
|
||||
|
||||
GetFolderResp (Err _) ->
|
||||
resultModel model
|
||||
@ -636,7 +622,7 @@ update key flags inav settings msg model =
|
||||
opts =
|
||||
Comp.Dropdown.SetOptions orgs.items
|
||||
in
|
||||
update key flags inav settings (OrgDropdownMsg opts) model
|
||||
update inav env (OrgDropdownMsg opts) model
|
||||
|
||||
GetOrgResp (Err _) ->
|
||||
resultModel model
|
||||
@ -673,18 +659,14 @@ update key flags inav settings msg model =
|
||||
{ model | allPersons = personDict }
|
||||
|
||||
res1 =
|
||||
update key
|
||||
flags
|
||||
inav
|
||||
settings
|
||||
update inav
|
||||
env
|
||||
(CorrPersonMsg (Comp.Dropdown.SetOptions corrRefs))
|
||||
model_
|
||||
|
||||
res2 =
|
||||
update key
|
||||
flags
|
||||
inav
|
||||
settings
|
||||
update inav
|
||||
env
|
||||
(ConcPersonMsg (Comp.Dropdown.SetOptions concRefs))
|
||||
res1.model
|
||||
in
|
||||
@ -693,6 +675,7 @@ update key flags inav settings msg model =
|
||||
, sub = Sub.batch [ res1.sub, res2.sub ]
|
||||
, linkTarget = Comp.LinkTarget.LinkNone
|
||||
, removedItem = Nothing
|
||||
, selectionChange = Data.ItemIds.noChange
|
||||
}
|
||||
|
||||
GetPersonResp (Err _) ->
|
||||
@ -706,14 +689,14 @@ update key flags inav settings msg model =
|
||||
equips.items
|
||||
)
|
||||
in
|
||||
update key flags inav settings (ConcEquipMsg opts) model
|
||||
update inav env (ConcEquipMsg opts) model
|
||||
|
||||
GetEquipResp (Err _) ->
|
||||
resultModel model
|
||||
|
||||
SaveResp (Ok res) ->
|
||||
if res.success then
|
||||
resultModelCmd ( model, Api.itemDetail flags model.item.id GetItemResp )
|
||||
resultModelCmd ( model, Api.itemDetail env.flags model.item.id GetItemResp )
|
||||
|
||||
else
|
||||
resultModel model
|
||||
@ -742,10 +725,10 @@ update key flags inav settings msg model =
|
||||
result_ =
|
||||
case inav.next of
|
||||
Just id ->
|
||||
resultModelCmd ( model, Page.set key (ItemDetailPage id) )
|
||||
resultModelCmd ( model, Page.set env.key (ItemDetailPage id) )
|
||||
|
||||
Nothing ->
|
||||
resultModelCmd ( model, Page.set key (SearchPage Nothing) )
|
||||
resultModelCmd ( model, Page.set env.key (SearchPage Nothing) )
|
||||
in
|
||||
{ result_ | removedItem = Just removedId }
|
||||
|
||||
@ -756,7 +739,7 @@ update key flags inav settings msg model =
|
||||
resultModel model
|
||||
|
||||
GetItemResp (Ok item) ->
|
||||
update key flags inav settings (SetItem item) model
|
||||
update inav env (SetItem item) model
|
||||
|
||||
GetItemResp (Err _) ->
|
||||
resultModel model
|
||||
@ -770,7 +753,7 @@ update key flags inav settings msg model =
|
||||
ItemMailMsg m ->
|
||||
let
|
||||
( im, ic, fa ) =
|
||||
Comp.ItemMail.update flags m model.itemMail
|
||||
Comp.ItemMail.update env.flags m model.itemMail
|
||||
in
|
||||
case fa of
|
||||
Comp.ItemMail.FormNone ->
|
||||
@ -798,7 +781,7 @@ update key flags inav settings msg model =
|
||||
( { model | mailSending = True }
|
||||
, Cmd.batch
|
||||
[ Cmd.map ItemMailMsg ic
|
||||
, Api.sendMail flags mail SendMailResp
|
||||
, Api.sendMail env.flags mail SendMailResp
|
||||
]
|
||||
)
|
||||
|
||||
@ -850,7 +833,7 @@ update key flags inav settings msg model =
|
||||
MailSendFailed br.message
|
||||
}
|
||||
, if br.success then
|
||||
Api.itemDetail flags model.item.id GetItemResp
|
||||
Api.itemDetail env.flags model.item.id GetItemResp
|
||||
|
||||
else
|
||||
Cmd.none
|
||||
@ -895,7 +878,7 @@ update key flags inav settings msg model =
|
||||
Nothing ->
|
||||
let
|
||||
( am, ac ) =
|
||||
Comp.AttachmentMeta.init flags id
|
||||
Comp.AttachmentMeta.init env.flags id
|
||||
|
||||
nextMeta =
|
||||
Dict.insert id am model.attachMeta
|
||||
@ -925,7 +908,7 @@ update key flags inav settings msg model =
|
||||
DeleteAttachConfirmed attachId ->
|
||||
let
|
||||
cmd =
|
||||
Api.deleteAttachment flags attachId DeleteAttachResp
|
||||
Api.deleteAttachment env.flags attachId DeleteAttachResp
|
||||
in
|
||||
resultModelCmd ( { model | attachModal = Nothing }, cmd )
|
||||
|
||||
@ -934,7 +917,7 @@ update key flags inav settings msg model =
|
||||
|
||||
DeleteAttachResp (Ok res) ->
|
||||
if res.success then
|
||||
update key flags inav settings ReloadItem model
|
||||
update inav env ReloadItem model
|
||||
|
||||
else
|
||||
resultModel model
|
||||
@ -980,7 +963,7 @@ update key flags inav settings msg model =
|
||||
SelectView svm ->
|
||||
let
|
||||
cmd =
|
||||
Api.deleteAttachments flags svm.ids DeleteAttachResp
|
||||
Api.deleteAttachments env.flags svm.ids DeleteAttachResp
|
||||
in
|
||||
resultModelCmd ( { model | attachModal = Nothing, viewMode = SimpleView }, cmd )
|
||||
|
||||
@ -1029,7 +1012,7 @@ update key flags inav settings msg model =
|
||||
List.map makeFileId model.selectedFiles
|
||||
|
||||
uploads =
|
||||
Cmd.batch (Api.uploadAmend flags model.item.id model.selectedFiles AddFilesUploadResp)
|
||||
Cmd.batch (Api.uploadAmend env.flags model.item.id model.selectedFiles AddFilesUploadResp)
|
||||
|
||||
tracker =
|
||||
Sub.batch <| List.map (\id -> Http.track id (AddFilesProgress id)) fileids
|
||||
@ -1112,7 +1095,7 @@ update key flags inav settings msg model =
|
||||
case result of
|
||||
Just ( src, trg, _ ) ->
|
||||
if src /= trg then
|
||||
Api.moveAttachmentBefore flags
|
||||
Api.moveAttachmentBefore env.flags
|
||||
model.item.id
|
||||
(MoveAttachment src trg)
|
||||
SaveResp
|
||||
@ -1130,7 +1113,7 @@ update key flags inav settings msg model =
|
||||
Just mm ->
|
||||
let
|
||||
( mm_, mc_, mv ) =
|
||||
Comp.DetailEdit.update flags lm mm
|
||||
Comp.DetailEdit.update env.flags lm mm
|
||||
|
||||
( model_, cmd_ ) =
|
||||
case mv of
|
||||
@ -1138,7 +1121,7 @@ update key flags inav settings msg model =
|
||||
( { model | modalEdit = Nothing }, Cmd.none )
|
||||
|
||||
Just _ ->
|
||||
( model, Api.itemDetail flags model.item.id GetItemResp )
|
||||
( model, Api.itemDetail env.flags model.item.id GetItemResp )
|
||||
|
||||
Nothing ->
|
||||
( { model | modalEdit = Just mm_ }, Cmd.none )
|
||||
@ -1180,7 +1163,7 @@ update key flags inav settings msg model =
|
||||
Just oid ->
|
||||
let
|
||||
( m, c ) =
|
||||
Comp.DetailEdit.editOrg flags oid Comp.OrgForm.emptyModel
|
||||
Comp.DetailEdit.editOrg env.flags oid Comp.OrgForm.emptyModel
|
||||
in
|
||||
resultModelCmd ( { model | modalEdit = Just m }, Cmd.map ModalEditMsg c )
|
||||
|
||||
@ -1198,7 +1181,7 @@ update key flags inav settings msg model =
|
||||
Just eid ->
|
||||
let
|
||||
( m, c ) =
|
||||
Comp.DetailEdit.editEquip flags eid Comp.EquipmentForm.emptyModel
|
||||
Comp.DetailEdit.editEquip env.flags eid Comp.EquipmentForm.emptyModel
|
||||
in
|
||||
resultModelCmd ( { model | modalEdit = Just m }, Cmd.map ModalEditMsg c )
|
||||
|
||||
@ -1209,7 +1192,7 @@ update key flags inav settings msg model =
|
||||
let
|
||||
( pm, pc ) =
|
||||
Comp.DetailEdit.initCorrPerson
|
||||
flags
|
||||
env.flags
|
||||
model.item.id
|
||||
Comp.PersonForm.emptyModel
|
||||
in
|
||||
@ -1222,7 +1205,7 @@ update key flags inav settings msg model =
|
||||
let
|
||||
( p, c ) =
|
||||
Comp.DetailEdit.initConcPerson
|
||||
flags
|
||||
env.flags
|
||||
model.item.id
|
||||
Comp.PersonForm.emptyModel
|
||||
in
|
||||
@ -1242,7 +1225,7 @@ update key flags inav settings msg model =
|
||||
Just pid ->
|
||||
let
|
||||
( m, c ) =
|
||||
Comp.DetailEdit.editPerson flags pid Comp.PersonForm.emptyModel
|
||||
Comp.DetailEdit.editPerson env.flags pid Comp.PersonForm.emptyModel
|
||||
in
|
||||
resultModelCmd ( { model | modalEdit = Just m }, Cmd.map ModalEditMsg c )
|
||||
|
||||
@ -1318,7 +1301,7 @@ update key flags inav settings msg model =
|
||||
resultModelCmd
|
||||
( model
|
||||
, Api.setAttachmentName
|
||||
flags
|
||||
env.flags
|
||||
m.id
|
||||
(Util.Maybe.fromString m.newName)
|
||||
EditAttachNameResp
|
||||
@ -1370,15 +1353,15 @@ update key flags inav settings msg model =
|
||||
in
|
||||
if keys == Just Comp.KeyInput.ctrlC then
|
||||
if model.item.state == "created" then
|
||||
update key flags inav settings ConfirmItem model_
|
||||
update inav env ConfirmItem model_
|
||||
|
||||
else
|
||||
update key flags inav settings UnconfirmItem model_
|
||||
update inav env UnconfirmItem model_
|
||||
|
||||
else if keys == Just Comp.KeyInput.ctrlPoint then
|
||||
case inav.next of
|
||||
Just id ->
|
||||
resultModelCmd ( model_, Page.set key (ItemDetailPage id) )
|
||||
resultModelCmd ( model_, Page.set env.key (ItemDetailPage id) )
|
||||
|
||||
Nothing ->
|
||||
resultModel model_
|
||||
@ -1386,7 +1369,7 @@ update key flags inav settings msg model =
|
||||
else if keys == Just Comp.KeyInput.ctrlComma then
|
||||
case inav.prev of
|
||||
Just id ->
|
||||
resultModelCmd ( model_, Page.set key (ItemDetailPage id) )
|
||||
resultModelCmd ( model_, Page.set env.key (ItemDetailPage id) )
|
||||
|
||||
Nothing ->
|
||||
resultModel model_
|
||||
@ -1405,7 +1388,7 @@ update key flags inav settings msg model =
|
||||
let
|
||||
model_ =
|
||||
{ model
|
||||
| menuOpen = settings.sideMenuVisible
|
||||
| menuOpen = env.settings.sideMenuVisible
|
||||
}
|
||||
in
|
||||
resultModel model_
|
||||
@ -1416,12 +1399,13 @@ update key flags inav settings msg model =
|
||||
, sub = Sub.none
|
||||
, linkTarget = lt
|
||||
, removedItem = Nothing
|
||||
, selectionChange = Data.ItemIds.noChange
|
||||
}
|
||||
|
||||
CustomFieldMsg lm ->
|
||||
let
|
||||
result =
|
||||
Comp.CustomFieldMultiInput.update flags lm model.customFieldsModel
|
||||
Comp.CustomFieldMultiInput.update env.flags lm model.customFieldsModel
|
||||
|
||||
cmd_ =
|
||||
Cmd.map CustomFieldMsg result.cmd
|
||||
@ -1438,7 +1422,7 @@ update key flags inav settings msg model =
|
||||
( Cmd.none, model.customFieldSavingIcon )
|
||||
|
||||
FieldValueRemove field ->
|
||||
( Api.deleteCustomValue flags
|
||||
( Api.deleteCustomValue env.flags
|
||||
model.item.id
|
||||
field.id
|
||||
(CustomFieldRemoveResp field.id)
|
||||
@ -1446,7 +1430,7 @@ update key flags inav settings msg model =
|
||||
)
|
||||
|
||||
FieldValueChange field value ->
|
||||
( Api.putCustomValue flags
|
||||
( Api.putCustomValue env.flags
|
||||
model.item.id
|
||||
(CustomFieldValue field.id value)
|
||||
(CustomFieldSaveResp field value)
|
||||
@ -1497,7 +1481,7 @@ update key flags inav settings msg model =
|
||||
if res.success then
|
||||
resultModelCmd
|
||||
( model_
|
||||
, Api.itemDetail flags model.item.id GetItemResp
|
||||
, Api.itemDetail env.flags model.item.id GetItemResp
|
||||
)
|
||||
|
||||
else
|
||||
@ -1551,7 +1535,7 @@ update key flags inav settings msg model =
|
||||
ReprocessFileConfirmed id ->
|
||||
let
|
||||
cmd =
|
||||
Api.reprocessItem flags model.item.id [ id ] ReprocessFileResp
|
||||
Api.reprocessItem env.flags model.item.id [ id ] ReprocessFileResp
|
||||
in
|
||||
resultModelCmd ( { model | attachModal = Nothing }, cmd )
|
||||
|
||||
@ -1572,7 +1556,7 @@ update key flags inav settings msg model =
|
||||
ReprocessItemConfirmed ->
|
||||
let
|
||||
cmd =
|
||||
Api.reprocessItem flags model.item.id [] ReprocessFileResp
|
||||
Api.reprocessItem env.flags model.item.id [] ReprocessFileResp
|
||||
in
|
||||
resultModelCmd ( { model | itemModal = Nothing }, cmd )
|
||||
|
||||
@ -1594,9 +1578,9 @@ update key flags inav settings msg model =
|
||||
)
|
||||
|
||||
RestoreItem ->
|
||||
resultModelCmd ( model, Api.restoreItem flags model.item.id SaveResp )
|
||||
resultModelCmd ( model, Api.restoreItem env.flags model.item.id SaveResp )
|
||||
|
||||
ToggleShowQrItem id ->
|
||||
ToggleShowQrItem _ ->
|
||||
let
|
||||
sqm =
|
||||
model.showQrModel
|
||||
@ -1606,7 +1590,7 @@ update key flags inav settings msg model =
|
||||
in
|
||||
resultModel { model | showQrModel = next, mobileItemMenuOpen = False }
|
||||
|
||||
ToggleShowQrAttach id ->
|
||||
ToggleShowQrAttach _ ->
|
||||
let
|
||||
sqm =
|
||||
model.showQrModel
|
||||
@ -1619,6 +1603,16 @@ update key flags inav settings msg model =
|
||||
PrintElement id ->
|
||||
resultModelCmd ( model, Ports.printElement id )
|
||||
|
||||
ToggleSelectItem ->
|
||||
let
|
||||
res =
|
||||
resultModel { model | mobileItemMenuOpen = False }
|
||||
|
||||
newSelection =
|
||||
Data.ItemIds.toggle env.selectedItems model.item.id
|
||||
in
|
||||
{ res | selectionChange = newSelection }
|
||||
|
||||
|
||||
|
||||
--- Helper
|
||||
|
@ -27,8 +27,10 @@ import Comp.ItemDetail.SingleAttachment
|
||||
import Comp.ItemMail
|
||||
import Comp.MenuBar as MB
|
||||
import Comp.SentMails
|
||||
import Data.Environment as Env
|
||||
import Data.Flags exposing (Flags)
|
||||
import Data.Icons as Icons
|
||||
import Data.ItemIds
|
||||
import Data.ItemNav exposing (ItemNav)
|
||||
import Data.UiSettings exposing (UiSettings)
|
||||
import Html exposing (..)
|
||||
@ -39,13 +41,13 @@ import Page exposing (Page(..))
|
||||
import Styles as S
|
||||
|
||||
|
||||
view : Texts -> Flags -> ItemNav -> UiSettings -> Model -> Html Msg
|
||||
view texts flags inav settings model =
|
||||
view : Texts -> ItemNav -> Env.View -> Model -> Html Msg
|
||||
view texts inav env model =
|
||||
div [ class "flex flex-col h-full" ]
|
||||
[ header texts settings inav model
|
||||
[ header texts inav env model
|
||||
|
||||
-- , menuBar texts inav settings model
|
||||
, body texts flags inav settings model
|
||||
, body texts env.flags inav env.settings model
|
||||
, itemModal texts model
|
||||
]
|
||||
|
||||
@ -60,25 +62,35 @@ itemModal texts model =
|
||||
span [ class "hidden" ] []
|
||||
|
||||
|
||||
header : Texts -> UiSettings -> ItemNav -> Model -> Html Msg
|
||||
header texts settings inav model =
|
||||
header : Texts -> ItemNav -> Env.View -> Model -> Html Msg
|
||||
header texts inav env model =
|
||||
div [ class "my-3" ]
|
||||
[ Comp.ItemDetail.ItemInfoHeader.view texts.itemInfoHeader
|
||||
settings
|
||||
env.settings
|
||||
model
|
||||
(menuBar texts inav settings model)
|
||||
(menuBar texts inav env model)
|
||||
]
|
||||
|
||||
|
||||
menuBar : Texts -> ItemNav -> UiSettings -> Model -> Html Msg
|
||||
menuBar texts inav settings model =
|
||||
menuBar : Texts -> ItemNav -> Env.View -> Model -> Html Msg
|
||||
menuBar texts inav env model =
|
||||
let
|
||||
keyDescr name =
|
||||
if settings.itemDetailShortcuts && model.menuOpen then
|
||||
if env.settings.itemDetailShortcuts && model.menuOpen then
|
||||
" " ++ texts.key ++ "'" ++ name ++ "'."
|
||||
|
||||
else
|
||||
""
|
||||
|
||||
isSelected =
|
||||
Data.ItemIds.isMember env.selectedItems model.item.id
|
||||
|
||||
foldSelected fsel funsel =
|
||||
if isSelected then
|
||||
fsel
|
||||
|
||||
else
|
||||
funsel
|
||||
in
|
||||
MB.view
|
||||
{ start =
|
||||
@ -210,7 +222,18 @@ menuBar texts inav settings model =
|
||||
, toggleMenu = ToggleMobileItemMenu
|
||||
, menuOpen = model.mobileItemMenuOpen
|
||||
, items =
|
||||
[ { icon = i [ class "fa fa-envelope font-thin" ] []
|
||||
[ { icon =
|
||||
foldSelected
|
||||
(i [ class "fa fa-check-square dark:text-lime-400 text-lime-600" ] [])
|
||||
(i [ class "fa fa-tasks" ] [])
|
||||
, label = foldSelected texts.deselectItem texts.selectItem
|
||||
, disabled = False
|
||||
, attrs =
|
||||
[ href "#"
|
||||
, onClick ToggleSelectItem
|
||||
]
|
||||
}
|
||||
, { icon = i [ class "fa fa-envelope font-thin" ] []
|
||||
, label = texts.sendMail
|
||||
, disabled = False
|
||||
, attrs =
|
||||
@ -281,13 +304,28 @@ menuBar texts inav settings model =
|
||||
]
|
||||
, end =
|
||||
[ MB.CustomElement <|
|
||||
a
|
||||
[ href "#"
|
||||
, onClick ToggleSelectItem
|
||||
, title (foldSelected texts.deselectItem texts.selectItem)
|
||||
, class "hidden md:flex flex-row items-center h-full "
|
||||
, classList
|
||||
[ ( S.greenButton, isSelected )
|
||||
, ( S.secondaryBasicButton, not isSelected )
|
||||
]
|
||||
]
|
||||
[ foldSelected
|
||||
(i [ class "fa fa-square-check" ] [])
|
||||
(i [ class "fa fa-list-check" ] [])
|
||||
]
|
||||
, MB.CustomElement <|
|
||||
a
|
||||
[ class S.secondaryBasicButton
|
||||
, href "#"
|
||||
, onClick UnconfirmItem
|
||||
, title texts.unconfirmItemMetadata
|
||||
, classList [ ( "hidden", model.item.state == "created" ) ]
|
||||
, class "hidden md:block"
|
||||
, class "hidden"
|
||||
, classList [ ( "md:block", model.item.state /= "created" ) ]
|
||||
]
|
||||
[ i [ class "fa fa-eye-slash font-thin" ] []
|
||||
]
|
||||
|
@ -1594,8 +1594,8 @@ searchTabs texts ddd flags settings selectedItems model =
|
||||
i [ class "fa fa-check mr-2" ] []
|
||||
|
||||
else
|
||||
i [ class "fa fa-list mr-2" ] []
|
||||
, text "Show selection"
|
||||
i [ class "fa fa-list-check mr-2" ] []
|
||||
, text texts.showSelection
|
||||
]
|
||||
, a
|
||||
[ class "flex flex-row items-center"
|
||||
@ -1604,7 +1604,7 @@ searchTabs texts ddd flags settings selectedItems model =
|
||||
, Html.Events.onClick ClearSelection
|
||||
]
|
||||
[ i [ class "fa fa-times mr-2" ] []
|
||||
, text "Clear selection"
|
||||
, text texts.clearSelection
|
||||
]
|
||||
]
|
||||
]
|
||||
|
Reference in New Issue
Block a user