Merge pull request #441 from eikek/quick-links

Quick links
This commit is contained in:
mergify[bot] 2020-11-14 12:26:04 +00:00 committed by GitHub
commit 9ce4330b94
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
19 changed files with 763 additions and 389 deletions

View File

@ -4756,7 +4756,7 @@ components:
$ref: "#/components/schemas/IdName"
concPerson:
$ref: "#/components/schemas/IdName"
concEquip:
concEquipment:
$ref: "#/components/schemas/IdName"
folder:
$ref: "#/components/schemas/IdName"

View File

@ -7,6 +7,7 @@ import Api
import App.Data exposing (..)
import Browser exposing (UrlRequest(..))
import Browser.Navigation as Nav
import Comp.LinkTarget
import Data.Flags
import Page exposing (Page(..))
import Page.CollectiveSettings.Data
@ -193,7 +194,7 @@ updateItemDetail lmsg model =
inav =
Page.Home.Data.itemNav model.itemDetailModel.detail.item.id model.homeModel
( lm, lc, ls ) =
result =
Page.ItemDetail.Update.update
model.key
model.flags
@ -201,12 +202,18 @@ updateItemDetail lmsg model =
model.uiSettings
lmsg
model.itemDetailModel
in
( { model
| itemDetailModel = lm
model_ =
{ model
| itemDetailModel = result.model
}
, Cmd.map ItemDetailMsg lc
, Sub.map ItemDetailMsg ls
( hm, hc, hs ) =
updateHome (Page.Home.Data.SetLinkTarget result.linkTarget) model_
in
( hm
, Cmd.batch [ Cmd.map ItemDetailMsg result.cmd, hc ]
, Sub.batch [ Sub.map ItemDetailMsg result.sub, hs ]
)

View File

@ -1,7 +1,9 @@
module Comp.FolderSelect exposing
( Model
, Msg
, deselect
, init
, setSelected
, update
, updateDrop
, view
@ -32,6 +34,23 @@ init selected all =
}
setSelected : String -> Model -> Maybe Msg
setSelected id model =
List.filter (\fi -> fi.id == id) model.all
|> List.head
|> Maybe.map Toggle
deselect : Model -> Maybe Msg
deselect model =
case model.selected of
Just id ->
setSelected id model
Nothing ->
Nothing
--- Update

View File

@ -1,10 +1,19 @@
module Comp.ItemCard exposing (..)
module Comp.ItemCard exposing
( Model
, Msg
, UpdateResult
, ViewConfig
, init
, update
, view
)
import Api
import Api.Model.AttachmentLight exposing (AttachmentLight)
import Api.Model.HighlightEntry exposing (HighlightEntry)
import Api.Model.IdName exposing (IdName)
import Api.Model.ItemLight exposing (ItemLight)
import Data.BasicSize
import Comp.LinkTarget exposing (LinkTarget(..))
import Data.Direction
import Data.Fields
import Data.Icons as Icons
@ -16,7 +25,6 @@ import Html.Events exposing (onClick)
import Markdown
import Page exposing (Page(..))
import Set exposing (Set)
import Util.Html
import Util.ItemDragDrop as DD
import Util.List
import Util.Maybe
@ -33,6 +41,7 @@ type Msg
= CyclePreview ItemLight
| ToggleSelectItem (Set String) String
| ItemDDMsg DD.Msg
| SetLinkTarget LinkTarget
type alias ViewConfig =
@ -45,6 +54,7 @@ type alias UpdateResult =
{ model : Model
, dragModel : DD.Model
, selection : ItemSelection
, linkTarget : LinkTarget
}
@ -89,7 +99,7 @@ update ddm msg model =
ddd =
DD.update lm ddm
in
UpdateResult model ddd.model Data.ItemSelection.Inactive
UpdateResult model ddd.model Data.ItemSelection.Inactive LinkNone
ToggleSelectItem ids id ->
let
@ -100,7 +110,7 @@ update ddm msg model =
else
Set.insert id ids
in
UpdateResult model ddm (Data.ItemSelection.Active newSet)
UpdateResult model ddm (Data.ItemSelection.Active newSet) LinkNone
CyclePreview item ->
let
@ -113,6 +123,10 @@ update ddm msg model =
UpdateResult { model | previewAttach = next }
ddm
Data.ItemSelection.Inactive
LinkNone
SetLinkTarget target ->
UpdateResult model ddm Data.ItemSelection.Inactive target
view : ViewConfig -> UiSettings -> Model -> ItemLight -> Html Msg
@ -204,31 +218,15 @@ metaDataContent settings item =
fieldHidden f =
Data.UiSettings.fieldHidden settings f
corr =
List.filterMap identity [ item.corrOrg, item.corrPerson ]
|> List.map .name
|> List.intersperse ", "
|> String.concat
conc =
List.filterMap identity [ item.concPerson, item.concEquip ]
|> List.map .name
|> List.intersperse ", "
|> String.concat
folder =
Maybe.map .name item.folder
|> Maybe.withDefault ""
dueDate =
Maybe.map Util.Time.formatDateShort item.dueDate
|> Maybe.withDefault ""
in
div [ class "content" ]
[ div [ class "ui horizontal list" ]
[ div [ class "ui horizontal link list" ]
[ div
[ classList
[ ( "item", True )
[ ( "link item", True )
, ( "invisible hidden"
, fieldHidden Data.Fields.CorrOrg
&& fieldHidden Data.Fields.CorrPerson
@ -236,10 +234,9 @@ metaDataContent settings item =
]
, title "Correspondent"
]
[ Icons.correspondentIcon ""
, text " "
, Util.String.withDefault "-" corr |> text
]
(Icons.correspondentIcon ""
:: Comp.LinkTarget.makeCorrLink item SetLinkTarget
)
, div
[ classList
[ ( "item", True )
@ -250,10 +247,9 @@ metaDataContent settings item =
]
, title "Concerning"
]
[ Icons.concernedIcon
, text " "
, Util.String.withDefault "-" conc |> text
]
(Icons.concernedIcon
:: Comp.LinkTarget.makeConcLink item SetLinkTarget
)
, div
[ classList
[ ( "item", True )
@ -262,8 +258,7 @@ metaDataContent settings item =
, title "Folder"
]
[ Icons.folderIcon ""
, text " "
, Util.String.withDefault "-" folder |> text
, Comp.LinkTarget.makeFolderLink item SetLinkTarget
]
]
, div [ class "right floated meta" ]
@ -318,7 +313,7 @@ notesContent settings item =
mainContent : Attribute Msg -> String -> Bool -> UiSettings -> ViewConfig -> ItemLight -> Html Msg
mainContent cardAction cardColor isConfirmed settings cfg item =
mainContent cardAction cardColor isConfirmed settings _ item =
let
dirIcon =
i [ class (Data.Direction.iconFromMaybe item.direction) ] []
@ -429,6 +424,7 @@ previewMenu model item mainAttach =
[ class "ui compact basic icon button"
, href attachUrl
, target "_self"
, title "Open attachment file"
]
[ i [ class "eye icon" ] []
]

View File

@ -14,6 +14,7 @@ import Api.Model.ItemLight exposing (ItemLight)
import Api.Model.ItemLightGroup exposing (ItemLightGroup)
import Api.Model.ItemLightList exposing (ItemLightList)
import Comp.ItemCard
import Comp.LinkTarget exposing (LinkTarget)
import Data.Flags exposing (Flags)
import Data.ItemSelection exposing (ItemSelection)
import Data.Items
@ -75,6 +76,7 @@ type alias UpdateResult =
, cmd : Cmd Msg
, dragModel : DD.Model
, selection : ItemSelection
, linkTarget : LinkTarget
}
@ -91,18 +93,30 @@ updateDrag dm _ msg model =
newModel =
{ model | results = list }
in
UpdateResult newModel Cmd.none dm Data.ItemSelection.Inactive
UpdateResult newModel
Cmd.none
dm
Data.ItemSelection.Inactive
Comp.LinkTarget.LinkNone
AddResults list ->
if list.groups == [] then
UpdateResult model Cmd.none dm Data.ItemSelection.Inactive
UpdateResult model
Cmd.none
dm
Data.ItemSelection.Inactive
Comp.LinkTarget.LinkNone
else
let
newModel =
{ model | results = Data.Items.concat model.results list }
in
UpdateResult newModel Cmd.none dm Data.ItemSelection.Inactive
UpdateResult newModel
Cmd.none
dm
Data.ItemSelection.Inactive
Comp.LinkTarget.LinkNone
ItemCardMsg item lm ->
let
@ -120,6 +134,7 @@ updateDrag dm _ msg model =
Cmd.none
result.dragModel
result.selection
result.linkTarget
@ -134,7 +149,12 @@ type alias ViewConfig =
view : ViewConfig -> UiSettings -> Model -> Html Msg
view cfg settings model =
div [ class "ui container" ]
div
[ classList
[ ( "ui container", True )
, ( "multi-select-mode", isMultiSelectMode cfg )
]
]
(List.map (viewGroup model cfg settings) model.results.groups)
@ -171,3 +191,17 @@ viewItem model cfg settings item =
Comp.ItemCard.view vvcfg settings cardModel item
in
Html.map (ItemCardMsg item) cardHtml
--- Helpers
isMultiSelectMode : ViewConfig -> Bool
isMultiSelectMode cfg =
case cfg.selection of
Data.ItemSelection.Active _ ->
True
Data.ItemSelection.Inactive ->
False

View File

@ -6,7 +6,7 @@ module Comp.ItemDetail exposing
)
import Browser.Navigation as Nav
import Comp.ItemDetail.Model exposing (Msg(..))
import Comp.ItemDetail.Model exposing (Msg(..), UpdateResult)
import Comp.ItemDetail.Update
import Comp.ItemDetail.View exposing (..)
import Data.Flags exposing (Flags)
@ -25,7 +25,7 @@ emptyModel =
Comp.ItemDetail.Model.emptyModel
update : Nav.Key -> Flags -> ItemNav -> UiSettings -> Msg -> Model -> ( Model, Cmd Msg, Sub Msg )
update : Nav.Key -> Flags -> ItemNav -> UiSettings -> Msg -> Model -> UpdateResult
update =
Comp.ItemDetail.Update.update

View File

@ -4,8 +4,12 @@ module Comp.ItemDetail.Model exposing
, Msg(..)
, NotesField(..)
, SaveNameState(..)
, UpdateResult
, emptyModel
, isEditNotes
, resultModel
, resultModelCmd
, resultModelCmdSub
)
import Api.Model.BasicResult exposing (BasicResult)
@ -26,6 +30,7 @@ import Comp.Dropdown
import Comp.Dropzone
import Comp.ItemMail
import Comp.KeyInput
import Comp.LinkTarget exposing (LinkTarget)
import Comp.MarkdownInput
import Comp.SentMails
import Comp.YesNoDimmer
@ -273,9 +278,33 @@ type Msg
| KeyInputMsg Comp.KeyInput.Msg
| ToggleAttachMenu
| UiSettingsUpdated
| SetLinkTarget LinkTarget
type SaveNameState
= Saving
| SaveSuccess
| SaveFailed
type alias UpdateResult =
{ model : Model
, cmd : Cmd Msg
, sub : Sub Msg
, linkTarget : LinkTarget
}
resultModel : Model -> UpdateResult
resultModel model =
UpdateResult model Cmd.none Sub.none Comp.LinkTarget.LinkNone
resultModelCmd : ( Model, Cmd Msg ) -> UpdateResult
resultModelCmd ( model, cmd ) =
UpdateResult model cmd Sub.none Comp.LinkTarget.LinkNone
resultModelCmdSub : ( Model, Cmd Msg, Sub Msg ) -> UpdateResult
resultModelCmdSub ( model, cmd, sub ) =
UpdateResult model cmd sub Comp.LinkTarget.LinkNone

File diff suppressed because it is too large Load Diff

View File

@ -2,6 +2,7 @@ module Comp.ItemDetail.View exposing (view)
import Api
import Api.Model.Attachment exposing (Attachment)
import Api.Model.IdName exposing (IdName)
import Comp.AttachmentMeta
import Comp.DatePicker
import Comp.DetailEdit
@ -11,6 +12,7 @@ import Comp.ItemDetail.AttachmentTabMenu
import Comp.ItemDetail.Model exposing (Model, Msg(..), NotesField(..), SaveNameState(..))
import Comp.ItemMail
import Comp.KeyInput
import Comp.LinkTarget
import Comp.MarkdownInput
import Comp.SentMails
import Comp.YesNoDimmer
@ -519,13 +521,9 @@ renderItemInfo settings model =
[ class "item"
, title "Correspondent"
]
[ Icons.correspondentIcon ""
, List.filterMap identity [ model.item.corrOrg, model.item.corrPerson ]
|> List.map .name
|> String.join ", "
|> Util.String.withDefault "(None)"
|> text
]
(Icons.correspondentIcon ""
:: Comp.LinkTarget.makeCorrLink model.item SetLinkTarget
)
, Data.UiSettings.fieldVisible settings Data.Fields.CorrOrg
|| Data.UiSettings.fieldVisible settings Data.Fields.CorrPerson
)
@ -535,13 +533,9 @@ renderItemInfo settings model =
[ class "item"
, title "Concerning"
]
[ Icons.concernedIcon
, List.filterMap identity [ model.item.concPerson, model.item.concEquipment ]
|> List.map .name
|> String.join ", "
|> Util.String.withDefault "(None)"
|> text
]
(Icons.concernedIcon
:: Comp.LinkTarget.makeConcLink model.item SetLinkTarget
)
, Data.UiSettings.fieldVisible settings Data.Fields.ConcEquip
|| Data.UiSettings.fieldVisible settings Data.Fields.ConcPerson
)
@ -552,9 +546,7 @@ renderItemInfo settings model =
, title "Folder"
]
[ Icons.folderIcon ""
, Maybe.map .name model.item.folder
|> Maybe.withDefault "-"
|> text
, Comp.LinkTarget.makeFolderLink model.item SetLinkTarget
]
, Data.UiSettings.fieldVisible settings Data.Fields.Folder
)
@ -592,7 +584,7 @@ renderItemInfo settings model =
[ text "New!"
]
, div [ class "sub header" ]
[ div [ class "ui horizontal bulleted list" ]
[ div [ class "ui horizontal bulleted link list" ]
(List.filter Tuple.second
[ date
, corr
@ -624,14 +616,12 @@ renderTags settings model =
[ div [ class "ui right aligned fluid container" ] <|
List.map
(\t ->
div
[ classList
Comp.LinkTarget.makeTagLink
(IdName t.id t.name)
[ ( "ui tag label", True )
, ( Data.UiSettings.tagColorString t settings, True )
]
]
[ text t.name
]
SetLinkTarget
)
model.item.tags
]

View File

@ -0,0 +1,105 @@
module Comp.LinkTarget exposing
( LinkTarget(..)
, makeConcLink
, makeCorrLink
, makeFolderLink
, makeTagLink
)
import Api.Model.IdName exposing (IdName)
import Html exposing (..)
import Html.Attributes exposing (..)
import Html.Events exposing (onClick)
type LinkTarget
= LinkCorrOrg IdName
| LinkCorrPerson IdName
| LinkConcPerson IdName
| LinkConcEquip IdName
| LinkFolder IdName
| LinkTag IdName
| LinkNone
makeCorrLink :
{ a | corrOrg : Maybe IdName, corrPerson : Maybe IdName }
-> (LinkTarget -> msg)
-> List (Html msg)
makeCorrLink item tagger =
let
makeOrg idname =
makeLink [] (LinkCorrOrg >> tagger) idname
makePerson idname =
makeLink [] (LinkCorrPerson >> tagger) idname
in
combine (Maybe.map makeOrg item.corrOrg) (Maybe.map makePerson item.corrPerson)
makeConcLink :
{ a | concPerson : Maybe IdName, concEquipment : Maybe IdName }
-> (LinkTarget -> msg)
-> List (Html msg)
makeConcLink item tagger =
let
makePerson idname =
makeLink [] (LinkConcPerson >> tagger) idname
makeEquip idname =
makeLink [] (LinkConcEquip >> tagger) idname
in
combine (Maybe.map makePerson item.concPerson) (Maybe.map makeEquip item.concEquipment)
makeFolderLink :
{ a | folder : Maybe IdName }
-> (LinkTarget -> msg)
-> Html msg
makeFolderLink item tagger =
let
makeFolder idname =
makeLink [] (LinkFolder >> tagger) idname
in
Maybe.map makeFolder item.folder
|> Maybe.withDefault (text "-")
makeTagLink :
IdName
-> List ( String, Bool )
-> (LinkTarget -> msg)
-> Html msg
makeTagLink tagId classes tagger =
makeLink classes (LinkTag >> tagger) tagId
--- Helpers
combine : Maybe (Html msg) -> Maybe (Html msg) -> List (Html msg)
combine ma mb =
case ( ma, mb ) of
( Just a, Just b ) ->
[ a, text ", ", b ]
( Just a, Nothing ) ->
[ a ]
( Nothing, Just b ) ->
[ b ]
( Nothing, Nothing ) ->
[ text "-" ]
makeLink : List ( String, Bool ) -> (IdName -> msg) -> IdName -> Html msg
makeLink classes tagger idname =
a
[ onClick (tagger idname)
, href "#"
, classList classes
]
[ text idname.name
]

View File

@ -191,6 +191,40 @@ getItemSearch model =
}
resetModel : Model -> Model
resetModel model =
let
emptyDropdown dm =
Comp.Dropdown.update (Comp.Dropdown.SetSelection []) dm
|> Tuple.first
emptyFolder fm =
Comp.FolderSelect.deselect fm
|> Maybe.map (\msg -> Comp.FolderSelect.update msg fm)
|> Maybe.map Tuple.first
|> Maybe.withDefault fm
in
{ model
| tagSelection = Comp.TagSelect.emptySelection
, tagSelectModel = Comp.TagSelect.reset model.tagSelectModel
, directionModel = emptyDropdown model.directionModel
, orgModel = emptyDropdown model.orgModel
, corrPersonModel = emptyDropdown model.corrPersonModel
, concPersonModel = emptyDropdown model.concPersonModel
, concEquipmentModel = emptyDropdown model.concEquipmentModel
, folderList = emptyFolder model.folderList
, selectedFolder = Nothing
, inboxCheckbox = False
, fromDate = Nothing
, untilDate = Nothing
, fromDueDate = Nothing
, untilDueDate = Nothing
, nameModel = Nothing
, allNameModel = Nothing
, fulltextModel = Nothing
}
-- Update
@ -220,6 +254,12 @@ type Msg
| ToggleNameHelp
| FolderSelectMsg Comp.FolderSelect.Msg
| GetFolderResp (Result Http.Error FolderList)
| SetCorrOrg IdName
| SetCorrPerson IdName
| SetConcPerson IdName
| SetConcEquip IdName
| SetFolder IdName
| SetTag String
type alias NextState =
@ -237,6 +277,26 @@ update =
updateDrop : DD.Model -> Flags -> UiSettings -> Msg -> Model -> NextState
updateDrop ddm flags settings msg model =
let
resetAndSet : Msg -> NextState
resetAndSet m =
let
reset =
resetModel model
set =
updateDrop ddm
flags
settings
m
reset
in
{ model = set.model
, cmd = set.cmd
, stateChange = True
, dragDrop = set.dragDrop
}
in
case msg of
Init ->
let
@ -278,11 +338,42 @@ updateDrop ddm flags settings msg model =
}
ResetForm ->
{ model = resetModel model
, cmd = Cmd.none
, stateChange = True
, dragDrop = DD.DragDropData ddm Nothing
}
SetCorrOrg id ->
resetAndSet (OrgMsg (Comp.Dropdown.SetSelection [ id ]))
SetCorrPerson id ->
resetAndSet (CorrPersonMsg (Comp.Dropdown.SetSelection [ id ]))
SetConcPerson id ->
resetAndSet (ConcPersonMsg (Comp.Dropdown.SetSelection [ id ]))
SetFolder id ->
case Comp.FolderSelect.setSelected id.id model.folderList of
Just lm ->
resetAndSet (FolderSelectMsg lm)
Nothing ->
{ model = model
, cmd = Cmd.none
, stateChange = False
, dragDrop = DD.DragDropData ddm Nothing
}
SetConcEquip id ->
let
next =
update flags settings Init init
equip =
Equipment id.id id.name 0
in
{ next | stateChange = True }
resetAndSet (ConcEquipmentMsg (Comp.Dropdown.SetSelection [ equip ]))
SetTag id ->
resetAndSet (TagSelectMsg (Comp.TagSelect.toggleTag id))
GetTagsResp (Ok tags) ->
let

View File

@ -5,6 +5,8 @@ module Comp.TagSelect exposing
, Selection
, emptySelection
, init
, reset
, toggleTag
, update
, updateDrop
, viewCats
@ -75,6 +77,19 @@ init sel tags =
}
reset : Model -> Model
reset model =
{ model
| selectedTags = Dict.empty
, selectedCats = Dict.empty
}
toggleTag : String -> Msg
toggleTag id =
ToggleTag id
sumCategories : List TagCount -> List Category
sumCategories tags =
let

View File

@ -25,6 +25,7 @@ import Comp.FixedDropdown
import Comp.ItemCardList
import Comp.ItemDetail.EditMenu exposing (SaveNameState(..))
import Comp.ItemDetail.FormChange exposing (FormChange)
import Comp.LinkTarget exposing (LinkTarget)
import Comp.SearchMenu
import Comp.YesNoDimmer
import Data.Flags exposing (Flags)
@ -174,6 +175,7 @@ type Msg
| ReplaceChangedItemsResp (Result Http.Error ItemLightList)
| DeleteAllResp (Result Http.Error BasicResult)
| UiSettingsUpdated
| SetLinkTarget LinkTarget
type SearchType

View File

@ -6,9 +6,11 @@ import Api.Model.ItemLightList exposing (ItemLightList)
import Api.Model.ItemSearch
import Browser.Navigation as Nav
import Comp.FixedDropdown
import Comp.ItemCard
import Comp.ItemCardList
import Comp.ItemDetail.EditMenu exposing (SaveNameState(..))
import Comp.ItemDetail.FormChange exposing (FormChange(..))
import Comp.LinkTarget exposing (LinkTarget)
import Comp.SearchMenu
import Comp.YesNoDimmer
import Data.Flags exposing (Flags)
@ -46,6 +48,7 @@ update mId key flags settings msg model =
{ model
| searchOffset = 0
, searchType = defaultSearchType flags
, contentOnlySearch = Nothing
}
in
update mId key flags settings (SearchMenuMsg Comp.SearchMenu.ResetForm) nm
@ -85,6 +88,14 @@ update mId key flags settings msg model =
, s2
)
SetLinkTarget lt ->
case linkTargetMsg lt of
Just m ->
update mId key flags settings m model
Nothing ->
( model, Cmd.none, Sub.none )
ItemCardListMsg m ->
let
result =
@ -93,6 +104,10 @@ update mId key flags settings msg model =
m
model.itemListModel
searchMsg =
Maybe.map Util.Update.cmdUnit (linkTargetMsg result.linkTarget)
|> Maybe.withDefault Cmd.none
nextView =
case ( model.viewMode, result.selection ) of
( SelectView svm, Data.ItemSelection.Active ids ) ->
@ -107,7 +122,7 @@ update mId key flags settings msg model =
, viewMode = nextView
, dragDropData = DD.DragDropData result.dragModel Nothing
}
, Cmd.batch [ Cmd.map ItemCardListMsg result.cmd ]
, Cmd.batch [ Cmd.map ItemCardListMsg result.cmd, searchMsg ]
)
ItemSearchResp scroll (Ok list) ->
@ -642,6 +657,31 @@ doSearch flags settings scroll model =
)
linkTargetMsg : LinkTarget -> Maybe Msg
linkTargetMsg linkTarget =
case linkTarget of
Comp.LinkTarget.LinkNone ->
Nothing
Comp.LinkTarget.LinkCorrOrg id ->
Just <| SearchMenuMsg (Comp.SearchMenu.SetCorrOrg id)
Comp.LinkTarget.LinkCorrPerson id ->
Just <| SearchMenuMsg (Comp.SearchMenu.SetCorrPerson id)
Comp.LinkTarget.LinkConcPerson id ->
Just <| SearchMenuMsg (Comp.SearchMenu.SetConcPerson id)
Comp.LinkTarget.LinkConcEquip id ->
Just <| SearchMenuMsg (Comp.SearchMenu.SetConcEquip id)
Comp.LinkTarget.LinkFolder id ->
Just <| SearchMenuMsg (Comp.SearchMenu.SetFolder id)
Comp.LinkTarget.LinkTag id ->
Just <| SearchMenuMsg (Comp.SearchMenu.SetTag id.id)
doSearchMore : Flags -> UiSettings -> Model -> ( Model, Cmd Msg )
doSearchMore flags settings model =
let

View File

@ -300,14 +300,19 @@ viewSearchBar flags model =
]
]
[ a
[ class "search-menu-toggle ui blue icon button"
[ classList
[ ( "search-menu-toggle ui icon button", True )
, ( "primary", not (searchMenuFilled model) )
, ( "secondary", searchMenuFilled model )
]
, onClick ToggleSearchMenu
, href "#"
, title "Open search menu"
]
[ i [ class "filter icon" ] []
]
, div [ class "right fitted item" ]
, div [ class "right menu" ]
[ div [ class "fitted item" ]
[ div [ class "ui left icon right action input" ]
[ i
[ classList
@ -340,9 +345,27 @@ viewSearchBar flags model =
(Just searchTypeItem)
model.searchTypeDropdown
)
, a
[ class "ui icon basic button"
, href "#"
, onClick ResetSearch
, title "Reset search form"
]
[ i [ class "undo icon" ] []
]
]
]
]
]
searchMenuFilled : Model -> Bool
searchMenuFilled model =
let
is =
Comp.SearchMenu.getItemSearch model.searchMenuModel
in
is /= Api.Model.ItemSearch.empty
hasMoreSearch : Model -> Bool

View File

@ -1,9 +1,15 @@
module Page.ItemDetail.Data exposing (Model, Msg(..), emptyModel)
module Page.ItemDetail.Data exposing
( Model
, Msg(..)
, UpdateResult
, emptyModel
)
import Api.Model.ItemDetail exposing (ItemDetail)
import Browser.Dom as Dom
import Comp.ItemDetail
import Comp.ItemDetail.Model
import Comp.LinkTarget exposing (LinkTarget)
import Http
@ -24,3 +30,11 @@ type Msg
| ItemResp (Result Http.Error ItemDetail)
| ScrollResult (Result Dom.Error ())
| UiSettingsUpdated
type alias UpdateResult =
{ model : Model
, cmd : Cmd Msg
, sub : Sub Msg
, linkTarget : LinkTarget
}

View File

@ -4,20 +4,22 @@ import Api
import Browser.Navigation as Nav
import Comp.ItemDetail
import Comp.ItemDetail.Model
import Comp.LinkTarget
import Data.Flags exposing (Flags)
import Data.ItemNav exposing (ItemNav)
import Data.UiSettings exposing (UiSettings)
import Page.ItemDetail.Data exposing (Model, Msg(..))
import Page exposing (Page(..))
import Page.ItemDetail.Data exposing (Model, Msg(..), UpdateResult)
import Scroll
import Task
update : Nav.Key -> Flags -> ItemNav -> UiSettings -> Msg -> Model -> ( Model, Cmd Msg, Sub Msg )
update : Nav.Key -> Flags -> ItemNav -> UiSettings -> Msg -> Model -> UpdateResult
update key flags inav settings msg model =
case msg of
Init id ->
let
( lm, lc, ls ) =
result =
Comp.ItemDetail.update key
flags
inav
@ -28,24 +30,35 @@ update key flags inav settings msg model =
task =
Scroll.scroll "main-content" 0 0 0 0
in
( { model | detail = lm }
, Cmd.batch
{ model = { model | detail = result.model }
, cmd =
Cmd.batch
[ Api.itemDetail flags id ItemResp
, Cmd.map ItemDetailMsg lc
, Cmd.map ItemDetailMsg result.cmd
, Task.attempt ScrollResult task
]
, Sub.map ItemDetailMsg ls
)
, sub = Sub.map ItemDetailMsg result.sub
, linkTarget = result.linkTarget
}
ItemDetailMsg lmsg ->
let
( lm, lc, ls ) =
result =
Comp.ItemDetail.update key flags inav settings lmsg model.detail
pageSwitch =
case result.linkTarget of
Comp.LinkTarget.LinkNone ->
Cmd.none
_ ->
Page.set key HomePage
in
( { model | detail = lm }
, Cmd.map ItemDetailMsg lc
, Sub.map ItemDetailMsg ls
)
{ model = { model | detail = result.model }
, cmd = Cmd.batch [ pageSwitch, Cmd.map ItemDetailMsg result.cmd ]
, sub = Sub.map ItemDetailMsg result.sub
, linkTarget = result.linkTarget
}
ItemResp (Ok item) ->
let
@ -55,10 +68,10 @@ update key flags inav settings msg model =
update key flags inav settings (ItemDetailMsg lmsg) model
ItemResp (Err _) ->
( model, Cmd.none, Sub.none )
UpdateResult model Cmd.none Sub.none Comp.LinkTarget.LinkNone
ScrollResult _ ->
( model, Cmd.none, Sub.none )
UpdateResult model Cmd.none Sub.none Comp.LinkTarget.LinkNone
UiSettingsUpdated ->
let

View File

@ -1,4 +1,10 @@
module Util.Update exposing (andThen1, andThen2)
module Util.Update exposing
( andThen1
, andThen2
, cmdUnit
)
import Task
andThen1 : List (a -> ( a, Cmd b )) -> a -> ( a, Cmd b )
@ -36,3 +42,8 @@ andThen2 fs m =
in
List.foldl update init fs
|> combine
cmdUnit : a -> Cmd a
cmdUnit a =
Task.perform (\_ -> a) (Task.succeed ())

View File

@ -93,15 +93,18 @@
padding: 0.8em;
}
.default-layout .ui.card .link.content:hover {
box-shadow: 0 0 0 1px #d4d4d5,0 2px 4px 0 rgba(34,36,38,.12),0 2px 10px 0 rgba(34,36,38,.15);
}
.default-layout .card .card-attachment-nav {
position: absolute;
left: 4px;
top: 4px;
z-index: 8;
}
.default-layout .multi-select-mode .ui.card {
border: 1px dashed rgba(34,36,38, .8);
}
.default-layout .ui.card:hover {
box-shadow: 0 0 0 1px #d4d4d5,0 2px 4px 0 rgba(34,36,38,.12),0 2px 10px 0 rgba(34,36,38,.15);
}
.default-layout .image.ds-card-image {
overflow: auto;
}