Store item selection globally

This commit is contained in:
eikek
2022-02-27 15:00:34 +01:00
parent 203788c746
commit 63e0258db7
13 changed files with 458 additions and 311 deletions

View File

@ -24,6 +24,7 @@ import Data.Fields
import Data.Flags exposing (Flags)
import Data.Icons as Icons
import Data.ItemArrange exposing (ItemArrange)
import Data.ItemIds exposing (ItemIdChange, ItemIds)
import Data.ItemSelection exposing (ItemSelection)
import Data.ItemTemplate as IT
import Data.UiSettings exposing (UiSettings)
@ -49,7 +50,7 @@ type alias Model =
type Msg
= CyclePreview ItemLight
| ToggleSelectItem (Set String) String
| ToggleSelectItem ItemIds String
| ItemDDMsg DD.Msg
| SetLinkTarget LinkTarget
| ToggleRowOpen String
@ -70,7 +71,7 @@ type alias ViewConfig =
type alias UpdateResult =
{ model : Model
, dragModel : DD.Model
, selection : ItemSelection
, selection : ItemIdChange
, linkTarget : LinkTarget
, toggleRow : Maybe String
}
@ -117,25 +118,21 @@ update : DD.Model -> Msg -> Model -> UpdateResult
update ddm msg model =
case msg of
ToggleRowOpen id ->
UpdateResult model ddm Data.ItemSelection.Inactive LinkNone (Just id)
UpdateResult model ddm Data.ItemIds.noChange LinkNone (Just id)
ItemDDMsg lm ->
let
ddd =
DD.update lm ddm
in
UpdateResult model ddd.model Data.ItemSelection.Inactive LinkNone Nothing
UpdateResult model ddd.model Data.ItemIds.noChange LinkNone Nothing
ToggleSelectItem ids id ->
let
newSet =
if Set.member id ids then
Set.remove id ids
else
Set.insert id ids
Data.ItemIds.toggle ids id
in
UpdateResult model ddm (Data.ItemSelection.Active newSet) LinkNone Nothing
UpdateResult model ddm newSet LinkNone Nothing
CyclePreview item ->
let
@ -147,12 +144,12 @@ update ddm msg model =
in
UpdateResult { model | previewAttach = next }
ddm
Data.ItemSelection.Inactive
Data.ItemIds.noChange
LinkNone
Nothing
SetLinkTarget target ->
UpdateResult model ddm Data.ItemSelection.Inactive target Nothing
UpdateResult model ddm Data.ItemIds.noChange target Nothing
@ -532,7 +529,7 @@ viewCard texts cfg settings flags model item =
mkCardAction : Texts -> ViewConfig -> UiSettings -> ItemLight -> List (Attribute Msg)
mkCardAction texts cfg settings item =
mkCardAction texts cfg _ item =
case cfg.selection of
Data.ItemSelection.Inactive ->
case cfg.arrange of
@ -977,7 +974,7 @@ isSelected : ViewConfig -> String -> Bool
isSelected cfg id =
case cfg.selection of
Data.ItemSelection.Active ids ->
Set.member id ids
Data.ItemIds.isMember ids id
Data.ItemSelection.Inactive ->
False

View File

@ -25,6 +25,7 @@ import Comp.ItemCard
import Comp.LinkTarget exposing (LinkTarget)
import Data.Flags exposing (Flags)
import Data.ItemArrange exposing (ItemArrange)
import Data.ItemIds exposing (ItemIdChange)
import Data.ItemSelection exposing (ItemSelection)
import Data.Items
import Data.UiSettings exposing (UiSettings)
@ -83,7 +84,7 @@ type alias UpdateResult =
{ model : Model
, cmd : Cmd Msg
, dragModel : DD.Model
, selection : ItemSelection
, selection : ItemIdChange
, linkTarget : LinkTarget
, toggleOpenRow : Maybe String
}
@ -105,7 +106,7 @@ updateDrag dm _ msg model =
UpdateResult newModel
Cmd.none
dm
Data.ItemSelection.Inactive
Data.ItemIds.noChange
Comp.LinkTarget.LinkNone
Nothing
@ -114,7 +115,7 @@ updateDrag dm _ msg model =
UpdateResult model
Cmd.none
dm
Data.ItemSelection.Inactive
Data.ItemIds.noChange
Comp.LinkTarget.LinkNone
Nothing
@ -126,7 +127,7 @@ updateDrag dm _ msg model =
UpdateResult newModel
Cmd.none
dm
Data.ItemSelection.Inactive
Data.ItemIds.noChange
Comp.LinkTarget.LinkNone
Nothing
@ -153,7 +154,7 @@ updateDrag dm _ msg model =
UpdateResult { model | results = removeItemById id model.results }
Cmd.none
dm
Data.ItemSelection.Inactive
Data.ItemIds.noChange
Comp.LinkTarget.LinkNone
Nothing

View File

@ -24,8 +24,8 @@ import Api.Model.ItemsAndRefs exposing (ItemsAndRefs)
import Api.Model.ReferenceList exposing (ReferenceList)
import Data.Direction exposing (Direction)
import Data.Flags exposing (Flags)
import Data.ItemIds exposing (ItemIds)
import Http
import Set exposing (Set)
type FormChange
@ -49,14 +49,14 @@ type FormChange
multiUpdate :
Flags
-> Set String
-> ItemIds
-> FormChange
-> (Result Http.Error BasicResult -> msg)
-> Cmd msg
multiUpdate flags ids change receive =
let
items =
Set.toList ids
Data.ItemIds.toList ids
in
case change of
CustomValueChange field value ->
@ -159,10 +159,10 @@ multiUpdate flags ids change receive =
ConfirmChange flag ->
if flag then
Api.confirmMultiple flags ids receive
Api.confirmMultiple flags items receive
else
Api.unconfirmMultiple flags ids receive
Api.unconfirmMultiple flags items receive
NoFormChange ->
Cmd.none