From 973847807f2059322e480be9654eab1c97dbba71 Mon Sep 17 00:00:00 2001 From: Eike Kettner Date: Sun, 24 May 2020 11:39:20 +0200 Subject: [PATCH] Update add item view with upload progress info --- modules/webapp/src/main/elm/App/Update.elm | 25 +- .../webapp/src/main/elm/Comp/ItemDetail.elm | 364 ++++++++++-------- modules/webapp/src/main/elm/Main.elm | 4 +- .../src/main/elm/Page/ItemDetail/Update.elm | 10 +- 4 files changed, 226 insertions(+), 177 deletions(-) diff --git a/modules/webapp/src/main/elm/App/Update.elm b/modules/webapp/src/main/elm/App/Update.elm index 2abce4df..60a7ffd1 100644 --- a/modules/webapp/src/main/elm/App/Update.elm +++ b/modules/webapp/src/main/elm/App/Update.elm @@ -74,7 +74,7 @@ updateWithSub msg model = updateNewInvite m model |> noSub ItemDetailMsg m -> - updateItemDetail m model |> noSub + updateItemDetail m model VersionResp (Ok info) -> ( { model | version = info }, Cmd.none ) |> noSub @@ -172,17 +172,20 @@ updateWithSub msg model = ( { model | navMenuOpen = not model.navMenuOpen }, Cmd.none, Sub.none ) -updateItemDetail : Page.ItemDetail.Data.Msg -> Model -> ( Model, Cmd Msg ) +updateItemDetail : Page.ItemDetail.Data.Msg -> Model -> ( Model, Cmd Msg, Sub Msg ) updateItemDetail lmsg model = let inav = Page.Home.Data.itemNav model.itemDetailModel.detail.item.id model.homeModel - ( lm, lc ) = + ( lm, lc, ls ) = Page.ItemDetail.Update.update model.key model.flags inav.next lmsg model.itemDetailModel in - ( { model | itemDetailModel = lm } + ( { model + | itemDetailModel = lm + } , Cmd.map ItemDetailMsg lc + , Sub.map ItemDetailMsg ls ) @@ -341,7 +344,19 @@ initPage model page = updateQueue Page.Queue.Data.StopRefresh model ItemDetailPage id -> - updateItemDetail (Page.ItemDetail.Data.Init id) model + let + updateDetail m__ = + let + ( m, c, s ) = + updateItemDetail (Page.ItemDetail.Data.Init id) m__ + in + ( { m | subs = Sub.batch [ m.subs, s ] }, c ) + in + Util.Update.andThen1 + [ updateDetail + , updateQueue Page.Queue.Data.StopRefresh + ] + model noSub : ( Model, Cmd Msg ) -> ( Model, Cmd Msg, Sub Msg ) diff --git a/modules/webapp/src/main/elm/Comp/ItemDetail.elm b/modules/webapp/src/main/elm/Comp/ItemDetail.elm index 5a883321..b4e32739 100644 --- a/modules/webapp/src/main/elm/Comp/ItemDetail.elm +++ b/modules/webapp/src/main/elm/Comp/ItemDetail.elm @@ -393,7 +393,12 @@ isSuccessAll model = |> List.all (\id -> Set.member id model.completed) -update : Nav.Key -> Flags -> Maybe String -> Msg -> Model -> ( Model, Cmd Msg ) +noSub : ( Model, Cmd Msg ) -> ( Model, Cmd Msg, Sub Msg ) +noSub ( m, c ) = + ( m, c, Sub.none ) + + +update : Nav.Key -> Flags -> Maybe String -> Msg -> Model -> ( Model, Cmd Msg, Sub Msg ) update key flags next msg model = case msg of Init -> @@ -404,22 +409,23 @@ update key flags next msg model = ( im, ic ) = Comp.ItemMail.init flags in - ( { model | itemDatePicker = dp, dueDatePicker = dp, itemMail = im, visibleAttach = 0 } - , Cmd.batch - [ getOptions flags - , Cmd.map ItemDatePickerMsg dpc - , Cmd.map DueDatePickerMsg dpc - , Cmd.map ItemMailMsg ic - , Api.getSentMails flags model.item.id SentMailsResp - ] - ) + noSub + ( { model | itemDatePicker = dp, dueDatePicker = dp, itemMail = im, visibleAttach = 0 } + , Cmd.batch + [ getOptions flags + , Cmd.map ItemDatePickerMsg dpc + , Cmd.map DueDatePickerMsg dpc + , Cmd.map ItemMailMsg ic + , Api.getSentMails flags model.item.id SentMailsResp + ] + ) SetItem item -> let - ( m1, c1 ) = + ( m1, c1, s1 ) = update key flags next (TagDropdownMsg (Comp.Dropdown.SetSelection item.tags)) model - ( m2, c2 ) = + ( m2, c2, s2 ) = update key flags next @@ -433,7 +439,7 @@ update key flags next msg model = ) m1 - ( m3, c3 ) = + ( m3, c3, s3 ) = update key flags next @@ -447,7 +453,7 @@ update key flags next msg model = ) m2 - ( m4, c4 ) = + ( m4, c4, s4 ) = update key flags next @@ -461,7 +467,7 @@ update key flags next msg model = ) m3 - ( m5, c5 ) = + ( m5, c5, s5 ) = update key flags next @@ -475,7 +481,7 @@ update key flags next msg model = ) m4 - ( m6, c6 ) = + ( m6, c6, s6 ) = update key flags next @@ -489,7 +495,7 @@ update key flags next msg model = ) m5 - ( m7, c7 ) = + ( m7, c7, s7 ) = update key flags next AddFilesReset m6 proposalCmd = @@ -520,20 +526,21 @@ update key flags next msg model = , proposalCmd , Api.getSentMails flags item.id SentMailsResp ] + , Sub.batch [ s1, s2, s3, s4, s5, s6, s7 ] ) SetActiveAttachment pos -> - ( { model | visibleAttach = pos, sentMailsOpen = False }, Cmd.none ) + noSub ( { model | visibleAttach = pos, sentMailsOpen = False }, Cmd.none ) ToggleMenu -> - ( { model | menuOpen = not model.menuOpen }, Cmd.none ) + noSub ( { model | menuOpen = not model.menuOpen }, Cmd.none ) ReloadItem -> if model.item.id == "" then - ( model, Cmd.none ) + noSub ( model, Cmd.none ) else - ( model, Api.itemDetail flags model.item.id GetItemResp ) + noSub ( model, Api.itemDetail flags model.item.id GetItemResp ) TagDropdownMsg m -> let @@ -550,7 +557,7 @@ update key flags next msg model = else Cmd.none in - ( newModel, Cmd.batch [ save, Cmd.map TagDropdownMsg c2 ] ) + noSub ( newModel, Cmd.batch [ save, Cmd.map TagDropdownMsg c2 ] ) DirDropdownMsg m -> let @@ -567,7 +574,7 @@ update key flags next msg model = else Cmd.none in - ( newModel, Cmd.batch [ save, Cmd.map DirDropdownMsg c2 ] ) + noSub ( newModel, Cmd.batch [ save, Cmd.map DirDropdownMsg c2 ] ) OrgDropdownMsg m -> let @@ -587,7 +594,7 @@ update key flags next msg model = else Cmd.none in - ( newModel, Cmd.batch [ save, Cmd.map OrgDropdownMsg c2 ] ) + noSub ( newModel, Cmd.batch [ save, Cmd.map OrgDropdownMsg c2 ] ) CorrPersonMsg m -> let @@ -607,7 +614,7 @@ update key flags next msg model = else Cmd.none in - ( newModel, Cmd.batch [ save, Cmd.map CorrPersonMsg c2 ] ) + noSub ( newModel, Cmd.batch [ save, Cmd.map CorrPersonMsg c2 ] ) ConcPersonMsg m -> let @@ -627,7 +634,7 @@ update key flags next msg model = else Cmd.none in - ( newModel, Cmd.batch [ save, Cmd.map ConcPersonMsg c2 ] ) + noSub ( newModel, Cmd.batch [ save, Cmd.map ConcPersonMsg c2 ] ) ConcEquipMsg m -> let @@ -647,42 +654,45 @@ update key flags next msg model = else Cmd.none in - ( newModel, Cmd.batch [ save, Cmd.map ConcEquipMsg c2 ] ) + noSub ( newModel, Cmd.batch [ save, Cmd.map ConcEquipMsg c2 ] ) SetName str -> - ( { model | nameModel = str }, Cmd.none ) + noSub ( { model | nameModel = str }, Cmd.none ) SaveName -> - ( model, setName flags model ) + noSub ( model, setName flags model ) SetNotes str -> - ( { model | notesModel = Util.Maybe.fromString str } - , Cmd.none - ) + noSub + ( { model | notesModel = Util.Maybe.fromString str } + , Cmd.none + ) ToggleNotes -> - ( { model - | notesField = - if model.notesField == ViewNotes then - HideNotes + noSub + ( { model + | notesField = + if model.notesField == ViewNotes then + HideNotes - else - ViewNotes - } - , Cmd.none - ) + else + ViewNotes + } + , Cmd.none + ) ToggleEditNotes -> - ( { model - | notesField = - if isEditNotes model.notesField then - ViewNotes + noSub + ( { model + | notesField = + if isEditNotes model.notesField then + ViewNotes - else - EditNotes Comp.MarkdownInput.init - } - , Cmd.none - ) + else + EditNotes Comp.MarkdownInput.init + } + , Cmd.none + ) NotesEditMsg lm -> case model.notesField of @@ -691,21 +701,25 @@ update key flags next msg model = ( lm2, str ) = Comp.MarkdownInput.update (Maybe.withDefault "" model.notesModel) lm em in - ( { model | notesField = EditNotes lm2, notesModel = Util.Maybe.fromString str } - , Cmd.none - ) + noSub + ( { model | notesField = EditNotes lm2, notesModel = Util.Maybe.fromString str } + , Cmd.none + ) - _ -> - ( model, Cmd.none ) + HideNotes -> + noSub ( model, Cmd.none ) + + ViewNotes -> + noSub ( model, Cmd.none ) SaveNotes -> - ( model, setNotes flags model ) + noSub ( model, setNotes flags model ) ConfirmItem -> - ( model, Api.setConfirmed flags model.item.id SaveResp ) + noSub ( model, Api.setConfirmed flags model.item.id SaveResp ) UnconfirmItem -> - ( model, Api.setUnconfirmed flags model.item.id SaveResp ) + noSub ( model, Api.setUnconfirmed flags model.item.id SaveResp ) ItemDatePickerMsg m -> let @@ -718,13 +732,13 @@ update key flags next msg model = newModel = { model | itemDatePicker = dp, itemDate = Just (Comp.DatePicker.midOfDay date) } in - ( newModel, setDate flags newModel newModel.itemDate ) + noSub ( newModel, setDate flags newModel newModel.itemDate ) _ -> - ( { model | itemDatePicker = dp }, Cmd.none ) + noSub ( { model | itemDatePicker = dp }, Cmd.none ) RemoveDate -> - ( { model | itemDate = Nothing }, setDate flags model Nothing ) + noSub ( { model | itemDate = Nothing }, setDate flags model Nothing ) DueDatePickerMsg m -> let @@ -737,13 +751,13 @@ update key flags next msg model = newModel = { model | dueDatePicker = dp, dueDate = Just (Comp.DatePicker.midOfDay date) } in - ( newModel, setDueDate flags newModel newModel.dueDate ) + noSub ( newModel, setDueDate flags newModel newModel.dueDate ) _ -> - ( { model | dueDatePicker = dp }, Cmd.none ) + noSub ( { model | dueDatePicker = dp }, Cmd.none ) RemoveDueDate -> - ( { model | dueDate = Nothing }, setDueDate flags model Nothing ) + noSub ( { model | dueDate = Nothing }, setDueDate flags model Nothing ) DeleteItemConfirm m -> let @@ -757,41 +771,41 @@ update key flags next msg model = else Cmd.none in - ( { model | deleteItemConfirm = cm }, cmd ) + noSub ( { model | deleteItemConfirm = cm }, cmd ) RequestDelete -> update key flags next (DeleteItemConfirm Comp.YesNoDimmer.activate) model SetCorrOrgSuggestion idname -> - ( model, setCorrOrg flags model (Just idname) ) + noSub ( model, setCorrOrg flags model (Just idname) ) SetCorrPersonSuggestion idname -> - ( model, setCorrPerson flags model (Just idname) ) + noSub ( model, setCorrPerson flags model (Just idname) ) SetConcPersonSuggestion idname -> - ( model, setConcPerson flags model (Just idname) ) + noSub ( model, setConcPerson flags model (Just idname) ) SetConcEquipSuggestion idname -> - ( model, setConcEquip flags model (Just idname) ) + noSub ( model, setConcEquip flags model (Just idname) ) SetItemDateSuggestion date -> - ( model, setDate flags model (Just date) ) + noSub ( model, setDate flags model (Just date) ) SetDueDateSuggestion date -> - ( model, setDueDate flags model (Just date) ) + noSub ( model, setDueDate flags model (Just date) ) GetTagsResp (Ok tags) -> let tagList = Comp.Dropdown.SetOptions tags.items - ( m1, c1 ) = + ( m1, c1, s1 ) = update key flags next (TagDropdownMsg tagList) model in - ( m1, c1 ) + ( m1, c1, s1 ) GetTagsResp (Err _) -> - ( model, Cmd.none ) + noSub ( model, Cmd.none ) GetOrgResp (Ok orgs) -> let @@ -801,23 +815,23 @@ update key flags next msg model = update key flags next (OrgDropdownMsg opts) model GetOrgResp (Err _) -> - ( model, Cmd.none ) + noSub ( model, Cmd.none ) GetPersonResp (Ok ps) -> let opts = Comp.Dropdown.SetOptions ps.items - ( m1, c1 ) = + ( m1, c1, s1 ) = update key flags next (CorrPersonMsg opts) model - ( m2, c2 ) = + ( m2, c2, s2 ) = update key flags next (ConcPersonMsg opts) m1 in - ( m2, Cmd.batch [ c1, c2 ] ) + ( m2, Cmd.batch [ c1, c2 ], Sub.batch [ s1, s2 ] ) GetPersonResp (Err _) -> - ( model, Cmd.none ) + noSub ( model, Cmd.none ) GetEquipResp (Ok equips) -> let @@ -830,44 +844,44 @@ update key flags next msg model = update key flags next (ConcEquipMsg opts) model GetEquipResp (Err _) -> - ( model, Cmd.none ) + noSub ( model, Cmd.none ) SaveResp (Ok res) -> if res.success then - ( model, Api.itemDetail flags model.item.id GetItemResp ) + noSub ( model, Api.itemDetail flags model.item.id GetItemResp ) else - ( model, Cmd.none ) + noSub ( model, Cmd.none ) SaveResp (Err _) -> - ( model, Cmd.none ) + noSub ( model, Cmd.none ) DeleteResp (Ok res) -> if res.success then case next of Just id -> - ( model, Page.set key (ItemDetailPage id) ) + noSub ( model, Page.set key (ItemDetailPage id) ) Nothing -> - ( model, Page.set key HomePage ) + noSub ( model, Page.set key HomePage ) else - ( model, Cmd.none ) + noSub ( model, Cmd.none ) DeleteResp (Err _) -> - ( model, Cmd.none ) + noSub ( model, Cmd.none ) GetItemResp (Ok item) -> update key flags next (SetItem item) model GetItemResp (Err _) -> - ( model, Cmd.none ) + noSub ( model, Cmd.none ) GetProposalResp (Ok ip) -> - ( { model | itemProposals = ip }, Cmd.none ) + noSub ( { model | itemProposals = ip }, Cmd.none ) GetProposalResp (Err _) -> - ( model, Cmd.none ) + noSub ( model, Cmd.none ) ItemMailMsg m -> let @@ -876,16 +890,17 @@ update key flags next msg model = in case fa of Comp.ItemMail.FormNone -> - ( { model | itemMail = im }, Cmd.map ItemMailMsg ic ) + noSub ( { model | itemMail = im }, Cmd.map ItemMailMsg ic ) Comp.ItemMail.FormCancel -> - ( { model - | itemMail = Comp.ItemMail.clear im - , mailOpen = False - , mailSendResult = Nothing - } - , Cmd.map ItemMailMsg ic - ) + noSub + ( { model + | itemMail = Comp.ItemMail.clear im + , mailOpen = False + , mailSendResult = Nothing + } + , Cmd.map ItemMailMsg ic + ) Comp.ItemMail.FormSend sm -> let @@ -895,12 +910,13 @@ update key flags next msg model = , conn = sm.conn } in - ( { model | mailSending = True } - , Cmd.batch - [ Cmd.map ItemMailMsg ic - , Api.sendMail flags mail SendMailResp - ] - ) + noSub + ( { model | mailSending = True } + , Cmd.batch + [ Cmd.map ItemMailMsg ic + , Api.sendMail flags mail SendMailResp + ] + ) ToggleMail -> let @@ -914,12 +930,13 @@ update key flags next msg model = else Nothing in - ( { model - | mailOpen = newOpen - , mailSendResult = sendResult - } - , Cmd.none - ) + noSub + ( { model + | mailOpen = newOpen + , mailSendResult = sendResult + } + , Cmd.none + ) SendMailResp (Ok br) -> let @@ -930,56 +947,59 @@ update key flags next msg model = else model.itemMail in - ( { model - | itemMail = mm - , mailSending = False - , mailSendResult = Just br - } - , if br.success then - Api.itemDetail flags model.item.id GetItemResp + noSub + ( { model + | itemMail = mm + , mailSending = False + , mailSendResult = Just br + } + , if br.success then + Api.itemDetail flags model.item.id GetItemResp - else - Cmd.none - ) + else + Cmd.none + ) SendMailResp (Err err) -> let errmsg = Util.Http.errorToString err in - ( { model - | mailSendResult = Just (BasicResult False errmsg) - , mailSending = False - } - , Cmd.none - ) + noSub + ( { model + | mailSendResult = Just (BasicResult False errmsg) + , mailSending = False + } + , Cmd.none + ) SentMailsMsg m -> let sm = Comp.SentMails.update m model.sentMails in - ( { model | sentMails = sm }, Cmd.none ) + noSub ( { model | sentMails = sm }, Cmd.none ) ToggleSentMails -> - ( { model | sentMailsOpen = not model.sentMailsOpen, visibleAttach = -1 }, Cmd.none ) + noSub ( { model | sentMailsOpen = not model.sentMailsOpen, visibleAttach = -1 }, Cmd.none ) SentMailsResp (Ok list) -> let sm = Comp.SentMails.initMails list.items in - ( { model | sentMails = sm }, Cmd.none ) + noSub ( { model | sentMails = sm }, Cmd.none ) SentMailsResp (Err _) -> - ( model, Cmd.none ) + noSub ( model, Cmd.none ) AttachMetaClick id -> case Dict.get id model.attachMeta of Just _ -> - ( { model | attachMetaOpen = not model.attachMetaOpen } - , Cmd.none - ) + noSub + ( { model | attachMetaOpen = not model.attachMetaOpen } + , Cmd.none + ) Nothing -> let @@ -989,9 +1009,10 @@ update key flags next msg model = nextMeta = Dict.insert id am model.attachMeta in - ( { model | attachMeta = nextMeta, attachMetaOpen = True } - , Cmd.map (AttachMetaMsg id) ac - ) + noSub + ( { model | attachMeta = nextMeta, attachMetaOpen = True } + , Cmd.map (AttachMetaMsg id) ac + ) AttachMetaMsg id lmsg -> case Dict.get id model.attachMeta of @@ -1000,17 +1021,19 @@ update key flags next msg model = am = Comp.AttachmentMeta.update lmsg cm in - ( { model | attachMeta = Dict.insert id am model.attachMeta } - , Cmd.none - ) + noSub + ( { model | attachMeta = Dict.insert id am model.attachMeta } + , Cmd.none + ) Nothing -> - ( model, Cmd.none ) + noSub ( model, Cmd.none ) TogglePdfNativeView -> - ( { model | pdfNativeView = not model.pdfNativeView } - , Cmd.none - ) + noSub + ( { model | pdfNativeView = not model.pdfNativeView } + , Cmd.none + ) DeleteAttachConfirm attachId lmsg -> let @@ -1024,17 +1047,17 @@ update key flags next msg model = else Cmd.none in - ( { model | deleteAttachConfirm = cm }, cmd ) + noSub ( { model | deleteAttachConfirm = cm }, cmd ) DeleteAttachResp (Ok res) -> if res.success then update key flags next ReloadItem model else - ( model, Cmd.none ) + noSub ( model, Cmd.none ) DeleteAttachResp (Err _) -> - ( model, Cmd.none ) + noSub ( model, Cmd.none ) RequestDeleteAttachment id -> update key @@ -1044,9 +1067,10 @@ update key flags next msg model = model AddFilesToggle -> - ( { model | addFilesOpen = not model.addFilesOpen } - , Cmd.none - ) + noSub + ( { model | addFilesOpen = not model.addFilesOpen } + , Cmd.none + ) AddFilesMsg lm -> let @@ -1056,20 +1080,22 @@ update key flags next msg model = nextFiles = model.selectedFiles ++ df in - ( { model | addFilesModel = dm, selectedFiles = nextFiles } - , Cmd.map AddFilesMsg dc - ) + noSub + ( { model | addFilesModel = dm, selectedFiles = nextFiles } + , Cmd.map AddFilesMsg dc + ) AddFilesReset -> - ( { model - | selectedFiles = [] - , addFilesModel = Comp.Dropzone.init Comp.Dropzone.defaultSettings - , completed = Set.empty - , errored = Set.empty - , loading = Set.empty - } - , Cmd.none - ) + noSub + ( { model + | selectedFiles = [] + , addFilesModel = Comp.Dropzone.init Comp.Dropzone.defaultSettings + , completed = Set.empty + , errored = Set.empty + , loading = Set.empty + } + , Cmd.none + ) AddFilesSubmitUpload -> let @@ -1085,7 +1111,10 @@ update key flags next msg model = ( cm2, _, _ ) = Comp.Dropzone.update (Comp.Dropzone.setActive False) model.addFilesModel in - ( { model | loading = Set.fromList fileids, addFilesModel = cm2 }, uploads ) + ( { model | loading = Set.fromList fileids, addFilesModel = cm2 } + , uploads + , tracker + ) AddFilesUploadResp fileid (Ok res) -> let @@ -1109,9 +1138,10 @@ update key flags next msg model = newModel = { model | completed = compl, errored = errs, loading = load } in - ( newModel - , Ports.setProgress ( fileid, 100 ) - ) + noSub + ( newModel + , Ports.setProgress ( fileid, 100 ) + ) AddFilesUploadResp fileid (Err _) -> let @@ -1121,7 +1151,7 @@ update key flags next msg model = load = Set.remove fileid model.loading in - ( { model | errored = errs, loading = load }, Cmd.none ) + noSub ( { model | errored = errs, loading = load }, Cmd.none ) AddFilesProgress fileid progress -> let @@ -1142,7 +1172,7 @@ update key flags next msg model = else Ports.setProgress ( fileid, percent ) in - ( model, updateBars ) + noSub ( model, updateBars ) diff --git a/modules/webapp/src/main/elm/Main.elm b/modules/webapp/src/main/elm/Main.elm index 1d2f45d2..0206cee9 100644 --- a/modules/webapp/src/main/elm/Main.elm +++ b/modules/webapp/src/main/elm/Main.elm @@ -58,7 +58,9 @@ init flags url key = Nothing -> Cmd.none in - ( m, Cmd.batch [ cmd, Api.versionInfo flags VersionResp, sessionCheck ] ) + ( m + , Cmd.batch [ cmd, Api.versionInfo flags VersionResp, sessionCheck ] + ) viewDoc : Model -> Document Msg diff --git a/modules/webapp/src/main/elm/Page/ItemDetail/Update.elm b/modules/webapp/src/main/elm/Page/ItemDetail/Update.elm index 6c916d67..60ca8453 100644 --- a/modules/webapp/src/main/elm/Page/ItemDetail/Update.elm +++ b/modules/webapp/src/main/elm/Page/ItemDetail/Update.elm @@ -7,25 +7,27 @@ import Data.Flags exposing (Flags) import Page.ItemDetail.Data exposing (Model, Msg(..)) -update : Nav.Key -> Flags -> Maybe String -> Msg -> Model -> ( Model, Cmd Msg ) +update : Nav.Key -> Flags -> Maybe String -> Msg -> Model -> ( Model, Cmd Msg, Sub Msg ) update key flags next msg model = case msg of Init id -> let - ( lm, lc ) = + ( lm, lc, ls ) = Comp.ItemDetail.update key flags next Comp.ItemDetail.Init model.detail in ( { model | detail = lm } , Cmd.batch [ Api.itemDetail flags id ItemResp, Cmd.map ItemDetailMsg lc ] + , Sub.map ItemDetailMsg ls ) ItemDetailMsg lmsg -> let - ( lm, lc ) = + ( lm, lc, ls ) = Comp.ItemDetail.update key flags next lmsg model.detail in ( { model | detail = lm } , Cmd.map ItemDetailMsg lc + , Sub.map ItemDetailMsg ls ) ItemResp (Ok item) -> @@ -36,4 +38,4 @@ update key flags next msg model = update key flags next (ItemDetailMsg lmsg) model ItemResp (Err _) -> - ( model, Cmd.none ) + ( model, Cmd.none, Sub.none )