Select item in detail view

This commit is contained in:
eikek
2022-02-27 22:31:17 +01:00
parent adcfe10460
commit 834ce7773c
17 changed files with 449 additions and 340 deletions

View File

@ -17,6 +17,7 @@ import Browser.Dom as Dom
import Comp.ItemDetail
import Comp.ItemDetail.Model
import Comp.LinkTarget exposing (LinkTarget)
import Data.ItemIds exposing (ItemIds)
import Http
@ -45,4 +46,5 @@ type alias UpdateResult =
, sub : Sub Msg
, linkTarget : LinkTarget
, removedItem : Maybe String
, selectedItems : ItemIds
}

View File

@ -8,29 +8,26 @@
module Page.ItemDetail.Update exposing (update)
import Api
import Browser.Navigation as Nav
import Comp.ItemDetail
import Comp.ItemDetail.Model
import Comp.LinkTarget
import Data.Flags exposing (Flags)
import Data.Environment as Env
import Data.ItemIds
import Data.ItemNav exposing (ItemNav)
import Data.UiSettings exposing (UiSettings)
import Page exposing (Page(..))
import Page.ItemDetail.Data exposing (Model, Msg(..), UpdateResult)
import Scroll
import Task
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 id ->
let
result =
Comp.ItemDetail.update key
flags
inav
settings
Comp.ItemDetail.update inav
env
Comp.ItemDetail.Model.Init
model.detail
@ -40,19 +37,20 @@ update key flags inav settings msg model =
{ model = { model | detail = result.model }
, cmd =
Cmd.batch
[ Api.itemDetail flags id ItemResp
[ Api.itemDetail env.flags id ItemResp
, Cmd.map ItemDetailMsg result.cmd
, Task.attempt ScrollResult task
]
, sub = Sub.map ItemDetailMsg result.sub
, linkTarget = result.linkTarget
, removedItem = result.removedItem
, selectedItems = env.selectedItems
}
ItemDetailMsg lmsg ->
let
result =
Comp.ItemDetail.update key flags inav settings lmsg model.detail
Comp.ItemDetail.update inav env lmsg model.detail
pageSwitch =
case result.linkTarget of
@ -60,13 +58,14 @@ update key flags inav settings msg model =
Cmd.none
_ ->
Page.set key (SearchPage Nothing)
Page.set env.key (SearchPage Nothing)
in
{ model = { model | detail = result.model }
, cmd = Cmd.batch [ pageSwitch, Cmd.map ItemDetailMsg result.cmd ]
, sub = Sub.map ItemDetailMsg result.sub
, linkTarget = result.linkTarget
, removedItem = result.removedItem
, selectedItems = Data.ItemIds.apply env.selectedItems result.selectionChange
}
ItemResp (Ok item) ->
@ -74,17 +73,28 @@ update key flags inav settings msg model =
lmsg =
Comp.ItemDetail.Model.SetItem item
in
update key flags inav settings (ItemDetailMsg lmsg) model
update inav env (ItemDetailMsg lmsg) model
ItemResp (Err _) ->
UpdateResult model Cmd.none Sub.none Comp.LinkTarget.LinkNone Nothing
unit env model
ScrollResult _ ->
UpdateResult model Cmd.none Sub.none Comp.LinkTarget.LinkNone Nothing
unit env model
UiSettingsUpdated ->
let
lmsg =
ItemDetailMsg Comp.ItemDetail.Model.UiSettingsUpdated
in
update key flags inav settings lmsg model
update inav env lmsg model
unit : Env.Update -> Model -> UpdateResult
unit env model =
{ model = model
, cmd = Cmd.none
, sub = Sub.none
, linkTarget = Comp.LinkTarget.LinkNone
, removedItem = Nothing
, selectedItems = env.selectedItems
}

View File

@ -12,6 +12,7 @@ import Comp.ItemDetail
import Comp.ItemDetail.EditForm
import Comp.ItemDetail.Model
import Comp.MenuBar as MB
import Data.Environment as Env
import Data.Flags exposing (Flags)
import Data.ItemNav exposing (ItemNav)
import Data.UiSettings exposing (UiSettings)
@ -23,13 +24,13 @@ import Page.ItemDetail.Data exposing (..)
import Styles as S
viewSidebar : Texts -> Bool -> Flags -> UiSettings -> Model -> Html Msg
viewSidebar texts visible flags settings model =
viewSidebar : Texts -> Env.View -> Model -> Html Msg
viewSidebar texts env model =
div
[ id "sidebar"
, class S.sidebar
, class S.sidebarBg
, classList [ ( "hidden", not visible ) ]
, classList [ ( "hidden", not env.sidebarVisible ) ]
]
[ div
[ class S.header2
@ -57,16 +58,16 @@ viewSidebar texts visible flags settings model =
, sticky = True
}
, Html.map ItemDetailMsg
(Comp.ItemDetail.EditForm.view2 texts.editForm flags settings model.detail)
(Comp.ItemDetail.EditForm.view2 texts.editForm env.flags env.settings model.detail)
]
viewContent : Texts -> ItemNav -> Flags -> UiSettings -> Model -> Html Msg
viewContent texts inav flags settings model =
viewContent : Texts -> ItemNav -> Env.View -> Model -> Html Msg
viewContent texts inav env model =
div
[ id "content"
, class S.content
]
[ Html.map ItemDetailMsg
(Comp.ItemDetail.view2 texts.itemDetail flags inav settings model.detail)
(Comp.ItemDetail.view2 texts.itemDetail inav env model.detail)
]