mirror of
https://github.com/TheAnachronism/docspell.git
synced 2025-06-22 02:18:26 +00:00
Store item selection globally
This commit is contained in:
@ -1727,42 +1727,42 @@ mergeItems flags items receive =
|
|||||||
|
|
||||||
reprocessMultiple :
|
reprocessMultiple :
|
||||||
Flags
|
Flags
|
||||||
-> Set String
|
-> List String
|
||||||
-> (Result Http.Error BasicResult -> msg)
|
-> (Result Http.Error BasicResult -> msg)
|
||||||
-> Cmd msg
|
-> Cmd msg
|
||||||
reprocessMultiple flags items receive =
|
reprocessMultiple flags items receive =
|
||||||
Http2.authPost
|
Http2.authPost
|
||||||
{ url = flags.config.baseUrl ++ "/api/v1/sec/items/reprocess"
|
{ url = flags.config.baseUrl ++ "/api/v1/sec/items/reprocess"
|
||||||
, account = getAccount flags
|
, account = getAccount flags
|
||||||
, body = Http.jsonBody (Api.Model.IdList.encode (Set.toList items |> IdList))
|
, body = Http.jsonBody (Api.Model.IdList.encode (IdList items))
|
||||||
, expect = Http.expectJson receive Api.Model.BasicResult.decoder
|
, expect = Http.expectJson receive Api.Model.BasicResult.decoder
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
confirmMultiple :
|
confirmMultiple :
|
||||||
Flags
|
Flags
|
||||||
-> Set String
|
-> List String
|
||||||
-> (Result Http.Error BasicResult -> msg)
|
-> (Result Http.Error BasicResult -> msg)
|
||||||
-> Cmd msg
|
-> Cmd msg
|
||||||
confirmMultiple flags ids receive =
|
confirmMultiple flags ids receive =
|
||||||
Http2.authPut
|
Http2.authPut
|
||||||
{ url = flags.config.baseUrl ++ "/api/v1/sec/items/confirm"
|
{ url = flags.config.baseUrl ++ "/api/v1/sec/items/confirm"
|
||||||
, account = getAccount flags
|
, account = getAccount flags
|
||||||
, body = Http.jsonBody (Api.Model.IdList.encode (IdList (Set.toList ids)))
|
, body = Http.jsonBody (Api.Model.IdList.encode (IdList ids))
|
||||||
, expect = Http.expectJson receive Api.Model.BasicResult.decoder
|
, expect = Http.expectJson receive Api.Model.BasicResult.decoder
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
unconfirmMultiple :
|
unconfirmMultiple :
|
||||||
Flags
|
Flags
|
||||||
-> Set String
|
-> List String
|
||||||
-> (Result Http.Error BasicResult -> msg)
|
-> (Result Http.Error BasicResult -> msg)
|
||||||
-> Cmd msg
|
-> Cmd msg
|
||||||
unconfirmMultiple flags ids receive =
|
unconfirmMultiple flags ids receive =
|
||||||
Http2.authPut
|
Http2.authPut
|
||||||
{ url = flags.config.baseUrl ++ "/api/v1/sec/items/unconfirm"
|
{ url = flags.config.baseUrl ++ "/api/v1/sec/items/unconfirm"
|
||||||
, account = getAccount flags
|
, account = getAccount flags
|
||||||
, body = Http.jsonBody (Api.Model.IdList.encode (IdList (Set.toList ids)))
|
, body = Http.jsonBody (Api.Model.IdList.encode (IdList ids))
|
||||||
, expect = Http.expectJson receive Api.Model.BasicResult.decoder
|
, expect = Http.expectJson receive Api.Model.BasicResult.decoder
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1937,28 +1937,28 @@ setConcEquipmentMultiple flags data receive =
|
|||||||
|
|
||||||
deleteAllItems :
|
deleteAllItems :
|
||||||
Flags
|
Flags
|
||||||
-> Set String
|
-> List String
|
||||||
-> (Result Http.Error BasicResult -> msg)
|
-> (Result Http.Error BasicResult -> msg)
|
||||||
-> Cmd msg
|
-> Cmd msg
|
||||||
deleteAllItems flags ids receive =
|
deleteAllItems flags ids receive =
|
||||||
Http2.authPost
|
Http2.authPost
|
||||||
{ url = flags.config.baseUrl ++ "/api/v1/sec/items/deleteAll"
|
{ url = flags.config.baseUrl ++ "/api/v1/sec/items/deleteAll"
|
||||||
, account = getAccount flags
|
, account = getAccount flags
|
||||||
, body = Http.jsonBody (Api.Model.IdList.encode (IdList (Set.toList ids)))
|
, body = Http.jsonBody (Api.Model.IdList.encode (IdList ids))
|
||||||
, expect = Http.expectJson receive Api.Model.BasicResult.decoder
|
, expect = Http.expectJson receive Api.Model.BasicResult.decoder
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
restoreAllItems :
|
restoreAllItems :
|
||||||
Flags
|
Flags
|
||||||
-> Set String
|
-> List String
|
||||||
-> (Result Http.Error BasicResult -> msg)
|
-> (Result Http.Error BasicResult -> msg)
|
||||||
-> Cmd msg
|
-> Cmd msg
|
||||||
restoreAllItems flags ids receive =
|
restoreAllItems flags ids receive =
|
||||||
Http2.authPost
|
Http2.authPost
|
||||||
{ url = flags.config.baseUrl ++ "/api/v1/sec/items/restoreAll"
|
{ url = flags.config.baseUrl ++ "/api/v1/sec/items/restoreAll"
|
||||||
, account = getAccount flags
|
, account = getAccount flags
|
||||||
, body = Http.jsonBody (Api.Model.IdList.encode (IdList (Set.toList ids)))
|
, body = Http.jsonBody (Api.Model.IdList.encode (IdList ids))
|
||||||
, expect = Http.expectJson receive Api.Model.BasicResult.decoder
|
, expect = Http.expectJson receive Api.Model.BasicResult.decoder
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,6 +19,7 @@ import Api.Model.VersionInfo exposing (VersionInfo)
|
|||||||
import Browser exposing (UrlRequest)
|
import Browser exposing (UrlRequest)
|
||||||
import Browser.Navigation exposing (Key)
|
import Browser.Navigation exposing (Key)
|
||||||
import Data.Flags exposing (Flags)
|
import Data.Flags exposing (Flags)
|
||||||
|
import Data.ItemIds exposing (ItemIds)
|
||||||
import Data.ServerEvent exposing (ServerEvent)
|
import Data.ServerEvent exposing (ServerEvent)
|
||||||
import Data.UiSettings exposing (UiSettings)
|
import Data.UiSettings exposing (UiSettings)
|
||||||
import Data.UiTheme exposing (UiTheme)
|
import Data.UiTheme exposing (UiTheme)
|
||||||
@ -69,6 +70,7 @@ type alias Model =
|
|||||||
, langMenuOpen : Bool
|
, langMenuOpen : Bool
|
||||||
, showNewItemsArrived : Bool
|
, showNewItemsArrived : Bool
|
||||||
, jobsWaiting : Int
|
, jobsWaiting : Int
|
||||||
|
, selectedItems : ItemIds
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -133,6 +135,7 @@ init key url flags_ settings =
|
|||||||
, langMenuOpen = False
|
, langMenuOpen = False
|
||||||
, showNewItemsArrived = False
|
, showNewItemsArrived = False
|
||||||
, jobsWaiting = 0
|
, jobsWaiting = 0
|
||||||
|
, selectedItems = Data.ItemIds.empty
|
||||||
}
|
}
|
||||||
, Cmd.batch
|
, Cmd.batch
|
||||||
[ Cmd.map DashboardMsg dbc
|
[ Cmd.map DashboardMsg dbc
|
||||||
|
@ -584,11 +584,20 @@ updateSearch texts lmsg model =
|
|||||||
_ ->
|
_ ->
|
||||||
( Nothing, Nothing )
|
( Nothing, Nothing )
|
||||||
|
|
||||||
|
env =
|
||||||
|
{ bookmarkId = bmId
|
||||||
|
, lastViewedItemId = mid
|
||||||
|
, key = model.key
|
||||||
|
, selectedItems = model.selectedItems
|
||||||
|
, flags = model.flags
|
||||||
|
, settings = model.uiSettings
|
||||||
|
}
|
||||||
|
|
||||||
result =
|
result =
|
||||||
Page.Search.Update.update bmId mid model.key model.flags texts.search model.uiSettings lmsg model.searchModel
|
Page.Search.Update.update texts.search env lmsg model.searchModel
|
||||||
|
|
||||||
model_ =
|
model_ =
|
||||||
{ model | searchModel = result.model }
|
{ model | searchModel = result.model, selectedItems = result.selectedItems }
|
||||||
|
|
||||||
lc =
|
lc =
|
||||||
case result.appEvent of
|
case result.appEvent of
|
||||||
|
@ -549,17 +549,22 @@ viewShareDetail texts shareId itemId model =
|
|||||||
|
|
||||||
viewSearch : Messages -> Maybe String -> Model -> List (Html Msg)
|
viewSearch : Messages -> Maybe String -> Model -> List (Html Msg)
|
||||||
viewSearch texts bmId model =
|
viewSearch texts bmId model =
|
||||||
|
let
|
||||||
|
env =
|
||||||
|
{ sidebarVisible = model.sidebarVisible
|
||||||
|
, flags = model.flags
|
||||||
|
, settings = model.uiSettings
|
||||||
|
, selectedItems = model.selectedItems
|
||||||
|
}
|
||||||
|
in
|
||||||
[ Html.map SearchMsg
|
[ Html.map SearchMsg
|
||||||
(Search.viewSidebar texts.search
|
(Search.viewSidebar texts.search
|
||||||
model.sidebarVisible
|
env
|
||||||
model.flags
|
|
||||||
model.uiSettings
|
|
||||||
model.searchModel
|
model.searchModel
|
||||||
)
|
)
|
||||||
, Html.map SearchMsg
|
, Html.map SearchMsg
|
||||||
(Search.viewContent texts.search
|
(Search.viewContent texts.search
|
||||||
model.flags
|
env
|
||||||
model.uiSettings
|
|
||||||
model.searchModel
|
model.searchModel
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
@ -24,6 +24,7 @@ import Data.Fields
|
|||||||
import Data.Flags exposing (Flags)
|
import Data.Flags exposing (Flags)
|
||||||
import Data.Icons as Icons
|
import Data.Icons as Icons
|
||||||
import Data.ItemArrange exposing (ItemArrange)
|
import Data.ItemArrange exposing (ItemArrange)
|
||||||
|
import Data.ItemIds exposing (ItemIdChange, ItemIds)
|
||||||
import Data.ItemSelection exposing (ItemSelection)
|
import Data.ItemSelection exposing (ItemSelection)
|
||||||
import Data.ItemTemplate as IT
|
import Data.ItemTemplate as IT
|
||||||
import Data.UiSettings exposing (UiSettings)
|
import Data.UiSettings exposing (UiSettings)
|
||||||
@ -49,7 +50,7 @@ type alias Model =
|
|||||||
|
|
||||||
type Msg
|
type Msg
|
||||||
= CyclePreview ItemLight
|
= CyclePreview ItemLight
|
||||||
| ToggleSelectItem (Set String) String
|
| ToggleSelectItem ItemIds String
|
||||||
| ItemDDMsg DD.Msg
|
| ItemDDMsg DD.Msg
|
||||||
| SetLinkTarget LinkTarget
|
| SetLinkTarget LinkTarget
|
||||||
| ToggleRowOpen String
|
| ToggleRowOpen String
|
||||||
@ -70,7 +71,7 @@ type alias ViewConfig =
|
|||||||
type alias UpdateResult =
|
type alias UpdateResult =
|
||||||
{ model : Model
|
{ model : Model
|
||||||
, dragModel : DD.Model
|
, dragModel : DD.Model
|
||||||
, selection : ItemSelection
|
, selection : ItemIdChange
|
||||||
, linkTarget : LinkTarget
|
, linkTarget : LinkTarget
|
||||||
, toggleRow : Maybe String
|
, toggleRow : Maybe String
|
||||||
}
|
}
|
||||||
@ -117,25 +118,21 @@ update : DD.Model -> Msg -> Model -> UpdateResult
|
|||||||
update ddm msg model =
|
update ddm msg model =
|
||||||
case msg of
|
case msg of
|
||||||
ToggleRowOpen id ->
|
ToggleRowOpen id ->
|
||||||
UpdateResult model ddm Data.ItemSelection.Inactive LinkNone (Just id)
|
UpdateResult model ddm Data.ItemIds.noChange LinkNone (Just id)
|
||||||
|
|
||||||
ItemDDMsg lm ->
|
ItemDDMsg lm ->
|
||||||
let
|
let
|
||||||
ddd =
|
ddd =
|
||||||
DD.update lm ddm
|
DD.update lm ddm
|
||||||
in
|
in
|
||||||
UpdateResult model ddd.model Data.ItemSelection.Inactive LinkNone Nothing
|
UpdateResult model ddd.model Data.ItemIds.noChange LinkNone Nothing
|
||||||
|
|
||||||
ToggleSelectItem ids id ->
|
ToggleSelectItem ids id ->
|
||||||
let
|
let
|
||||||
newSet =
|
newSet =
|
||||||
if Set.member id ids then
|
Data.ItemIds.toggle ids id
|
||||||
Set.remove id ids
|
|
||||||
|
|
||||||
else
|
|
||||||
Set.insert id ids
|
|
||||||
in
|
in
|
||||||
UpdateResult model ddm (Data.ItemSelection.Active newSet) LinkNone Nothing
|
UpdateResult model ddm newSet LinkNone Nothing
|
||||||
|
|
||||||
CyclePreview item ->
|
CyclePreview item ->
|
||||||
let
|
let
|
||||||
@ -147,12 +144,12 @@ update ddm msg model =
|
|||||||
in
|
in
|
||||||
UpdateResult { model | previewAttach = next }
|
UpdateResult { model | previewAttach = next }
|
||||||
ddm
|
ddm
|
||||||
Data.ItemSelection.Inactive
|
Data.ItemIds.noChange
|
||||||
LinkNone
|
LinkNone
|
||||||
Nothing
|
Nothing
|
||||||
|
|
||||||
SetLinkTarget target ->
|
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 -> ViewConfig -> UiSettings -> ItemLight -> List (Attribute Msg)
|
||||||
mkCardAction texts cfg settings item =
|
mkCardAction texts cfg _ item =
|
||||||
case cfg.selection of
|
case cfg.selection of
|
||||||
Data.ItemSelection.Inactive ->
|
Data.ItemSelection.Inactive ->
|
||||||
case cfg.arrange of
|
case cfg.arrange of
|
||||||
@ -977,7 +974,7 @@ isSelected : ViewConfig -> String -> Bool
|
|||||||
isSelected cfg id =
|
isSelected cfg id =
|
||||||
case cfg.selection of
|
case cfg.selection of
|
||||||
Data.ItemSelection.Active ids ->
|
Data.ItemSelection.Active ids ->
|
||||||
Set.member id ids
|
Data.ItemIds.isMember ids id
|
||||||
|
|
||||||
Data.ItemSelection.Inactive ->
|
Data.ItemSelection.Inactive ->
|
||||||
False
|
False
|
||||||
|
@ -25,6 +25,7 @@ import Comp.ItemCard
|
|||||||
import Comp.LinkTarget exposing (LinkTarget)
|
import Comp.LinkTarget exposing (LinkTarget)
|
||||||
import Data.Flags exposing (Flags)
|
import Data.Flags exposing (Flags)
|
||||||
import Data.ItemArrange exposing (ItemArrange)
|
import Data.ItemArrange exposing (ItemArrange)
|
||||||
|
import Data.ItemIds exposing (ItemIdChange)
|
||||||
import Data.ItemSelection exposing (ItemSelection)
|
import Data.ItemSelection exposing (ItemSelection)
|
||||||
import Data.Items
|
import Data.Items
|
||||||
import Data.UiSettings exposing (UiSettings)
|
import Data.UiSettings exposing (UiSettings)
|
||||||
@ -83,7 +84,7 @@ type alias UpdateResult =
|
|||||||
{ model : Model
|
{ model : Model
|
||||||
, cmd : Cmd Msg
|
, cmd : Cmd Msg
|
||||||
, dragModel : DD.Model
|
, dragModel : DD.Model
|
||||||
, selection : ItemSelection
|
, selection : ItemIdChange
|
||||||
, linkTarget : LinkTarget
|
, linkTarget : LinkTarget
|
||||||
, toggleOpenRow : Maybe String
|
, toggleOpenRow : Maybe String
|
||||||
}
|
}
|
||||||
@ -105,7 +106,7 @@ updateDrag dm _ msg model =
|
|||||||
UpdateResult newModel
|
UpdateResult newModel
|
||||||
Cmd.none
|
Cmd.none
|
||||||
dm
|
dm
|
||||||
Data.ItemSelection.Inactive
|
Data.ItemIds.noChange
|
||||||
Comp.LinkTarget.LinkNone
|
Comp.LinkTarget.LinkNone
|
||||||
Nothing
|
Nothing
|
||||||
|
|
||||||
@ -114,7 +115,7 @@ updateDrag dm _ msg model =
|
|||||||
UpdateResult model
|
UpdateResult model
|
||||||
Cmd.none
|
Cmd.none
|
||||||
dm
|
dm
|
||||||
Data.ItemSelection.Inactive
|
Data.ItemIds.noChange
|
||||||
Comp.LinkTarget.LinkNone
|
Comp.LinkTarget.LinkNone
|
||||||
Nothing
|
Nothing
|
||||||
|
|
||||||
@ -126,7 +127,7 @@ updateDrag dm _ msg model =
|
|||||||
UpdateResult newModel
|
UpdateResult newModel
|
||||||
Cmd.none
|
Cmd.none
|
||||||
dm
|
dm
|
||||||
Data.ItemSelection.Inactive
|
Data.ItemIds.noChange
|
||||||
Comp.LinkTarget.LinkNone
|
Comp.LinkTarget.LinkNone
|
||||||
Nothing
|
Nothing
|
||||||
|
|
||||||
@ -153,7 +154,7 @@ updateDrag dm _ msg model =
|
|||||||
UpdateResult { model | results = removeItemById id model.results }
|
UpdateResult { model | results = removeItemById id model.results }
|
||||||
Cmd.none
|
Cmd.none
|
||||||
dm
|
dm
|
||||||
Data.ItemSelection.Inactive
|
Data.ItemIds.noChange
|
||||||
Comp.LinkTarget.LinkNone
|
Comp.LinkTarget.LinkNone
|
||||||
Nothing
|
Nothing
|
||||||
|
|
||||||
|
@ -24,8 +24,8 @@ import Api.Model.ItemsAndRefs exposing (ItemsAndRefs)
|
|||||||
import Api.Model.ReferenceList exposing (ReferenceList)
|
import Api.Model.ReferenceList exposing (ReferenceList)
|
||||||
import Data.Direction exposing (Direction)
|
import Data.Direction exposing (Direction)
|
||||||
import Data.Flags exposing (Flags)
|
import Data.Flags exposing (Flags)
|
||||||
|
import Data.ItemIds exposing (ItemIds)
|
||||||
import Http
|
import Http
|
||||||
import Set exposing (Set)
|
|
||||||
|
|
||||||
|
|
||||||
type FormChange
|
type FormChange
|
||||||
@ -49,14 +49,14 @@ type FormChange
|
|||||||
|
|
||||||
multiUpdate :
|
multiUpdate :
|
||||||
Flags
|
Flags
|
||||||
-> Set String
|
-> ItemIds
|
||||||
-> FormChange
|
-> FormChange
|
||||||
-> (Result Http.Error BasicResult -> msg)
|
-> (Result Http.Error BasicResult -> msg)
|
||||||
-> Cmd msg
|
-> Cmd msg
|
||||||
multiUpdate flags ids change receive =
|
multiUpdate flags ids change receive =
|
||||||
let
|
let
|
||||||
items =
|
items =
|
||||||
Set.toList ids
|
Data.ItemIds.toList ids
|
||||||
in
|
in
|
||||||
case change of
|
case change of
|
||||||
CustomValueChange field value ->
|
CustomValueChange field value ->
|
||||||
@ -159,10 +159,10 @@ multiUpdate flags ids change receive =
|
|||||||
|
|
||||||
ConfirmChange flag ->
|
ConfirmChange flag ->
|
||||||
if flag then
|
if flag then
|
||||||
Api.confirmMultiple flags ids receive
|
Api.confirmMultiple flags items receive
|
||||||
|
|
||||||
else
|
else
|
||||||
Api.unconfirmMultiple flags ids receive
|
Api.unconfirmMultiple flags items receive
|
||||||
|
|
||||||
NoFormChange ->
|
NoFormChange ->
|
||||||
Cmd.none
|
Cmd.none
|
||||||
|
31
modules/webapp/src/main/elm/Data/Environment.elm
Normal file
31
modules/webapp/src/main/elm/Data/Environment.elm
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
{-
|
||||||
|
Copyright 2020 Eike K. & Contributors
|
||||||
|
|
||||||
|
SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
|
-}
|
||||||
|
|
||||||
|
|
||||||
|
module Data.Environment exposing (..)
|
||||||
|
|
||||||
|
import Browser.Navigation as Nav
|
||||||
|
import Data.Flags exposing (Flags)
|
||||||
|
import Data.ItemIds exposing (ItemIds)
|
||||||
|
import Data.UiSettings exposing (UiSettings)
|
||||||
|
|
||||||
|
|
||||||
|
type alias Update =
|
||||||
|
{ bookmarkId : Maybe String
|
||||||
|
, lastViewedItemId : Maybe String
|
||||||
|
, key : Nav.Key
|
||||||
|
, selectedItems : ItemIds
|
||||||
|
, flags : Flags
|
||||||
|
, settings : UiSettings
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
type alias View =
|
||||||
|
{ flags : Flags
|
||||||
|
, sidebarVisible : Bool
|
||||||
|
, settings : UiSettings
|
||||||
|
, selectedItems : ItemIds
|
||||||
|
}
|
132
modules/webapp/src/main/elm/Data/ItemIds.elm
Normal file
132
modules/webapp/src/main/elm/Data/ItemIds.elm
Normal file
@ -0,0 +1,132 @@
|
|||||||
|
{-
|
||||||
|
Copyright 2020 Eike K. & Contributors
|
||||||
|
|
||||||
|
SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
|
-}
|
||||||
|
|
||||||
|
|
||||||
|
module Data.ItemIds exposing
|
||||||
|
( ItemIdChange
|
||||||
|
, ItemIds
|
||||||
|
, apply
|
||||||
|
, combine
|
||||||
|
, combineAll
|
||||||
|
, deselect
|
||||||
|
, empty
|
||||||
|
, fromSet
|
||||||
|
, isEmpty
|
||||||
|
, isMember
|
||||||
|
, noChange
|
||||||
|
, select
|
||||||
|
, selectAll
|
||||||
|
, size
|
||||||
|
, toList
|
||||||
|
, toQuery
|
||||||
|
, toggle
|
||||||
|
, union
|
||||||
|
)
|
||||||
|
|
||||||
|
import Data.ItemQuery exposing (ItemQuery)
|
||||||
|
import Set exposing (Set)
|
||||||
|
|
||||||
|
|
||||||
|
type ItemIds
|
||||||
|
= ItemIds (Set String)
|
||||||
|
|
||||||
|
|
||||||
|
empty : ItemIds
|
||||||
|
empty =
|
||||||
|
ItemIds Set.empty
|
||||||
|
|
||||||
|
|
||||||
|
isEmpty : ItemIds -> Bool
|
||||||
|
isEmpty (ItemIds ids) =
|
||||||
|
Set.isEmpty ids
|
||||||
|
|
||||||
|
|
||||||
|
isMember : ItemIds -> String -> Bool
|
||||||
|
isMember (ItemIds ids) id =
|
||||||
|
Set.member id ids
|
||||||
|
|
||||||
|
|
||||||
|
size : ItemIds -> Int
|
||||||
|
size (ItemIds ids) =
|
||||||
|
Set.size ids
|
||||||
|
|
||||||
|
|
||||||
|
fromSet : Set String -> ItemIds
|
||||||
|
fromSet ids =
|
||||||
|
ItemIds ids
|
||||||
|
|
||||||
|
|
||||||
|
union : ItemIds -> ItemIds -> ItemIds
|
||||||
|
union (ItemIds ids1) (ItemIds ids2) =
|
||||||
|
ItemIds (Set.union ids1 ids2)
|
||||||
|
|
||||||
|
|
||||||
|
toList : ItemIds -> List String
|
||||||
|
toList (ItemIds ids) =
|
||||||
|
Set.toList ids
|
||||||
|
|
||||||
|
|
||||||
|
toQuery : ItemIds -> ItemQuery
|
||||||
|
toQuery (ItemIds ids) =
|
||||||
|
Data.ItemQuery.ItemIdIn (Set.toList ids)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
--- Change item ids
|
||||||
|
|
||||||
|
|
||||||
|
type ItemIdChange
|
||||||
|
= ItemIdChange
|
||||||
|
{ remove : Set String
|
||||||
|
, add : Set String
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
apply : ItemIds -> ItemIdChange -> ItemIds
|
||||||
|
apply (ItemIds ids) (ItemIdChange { remove, add }) =
|
||||||
|
ItemIds (Set.diff ids remove |> Set.union add)
|
||||||
|
|
||||||
|
|
||||||
|
noChange : ItemIdChange
|
||||||
|
noChange =
|
||||||
|
ItemIdChange { remove = Set.empty, add = Set.empty }
|
||||||
|
|
||||||
|
|
||||||
|
combine : ItemIdChange -> ItemIdChange -> ItemIdChange
|
||||||
|
combine (ItemIdChange c1) (ItemIdChange c2) =
|
||||||
|
ItemIdChange
|
||||||
|
{ remove = Set.union c1.remove c2.remove
|
||||||
|
, add = Set.union c1.add c2.add
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
combineAll : List ItemIdChange -> ItemIdChange
|
||||||
|
combineAll all =
|
||||||
|
List.foldl combine noChange all
|
||||||
|
|
||||||
|
|
||||||
|
select : String -> ItemIdChange
|
||||||
|
select id =
|
||||||
|
ItemIdChange { add = Set.singleton id, remove = Set.empty }
|
||||||
|
|
||||||
|
|
||||||
|
selectAll : Set String -> ItemIdChange
|
||||||
|
selectAll ids =
|
||||||
|
ItemIdChange { add = ids, remove = Set.empty }
|
||||||
|
|
||||||
|
|
||||||
|
deselect : String -> ItemIdChange
|
||||||
|
deselect id =
|
||||||
|
ItemIdChange { add = Set.empty, remove = Set.singleton id }
|
||||||
|
|
||||||
|
|
||||||
|
toggle : ItemIds -> String -> ItemIdChange
|
||||||
|
toggle ids id =
|
||||||
|
if isMember ids id then
|
||||||
|
deselect id
|
||||||
|
|
||||||
|
else
|
||||||
|
select id
|
@ -11,12 +11,12 @@ module Data.ItemSelection exposing
|
|||||||
, isSelected
|
, isSelected
|
||||||
)
|
)
|
||||||
|
|
||||||
import Set exposing (Set)
|
import Data.ItemIds exposing (ItemIds)
|
||||||
|
|
||||||
|
|
||||||
type ItemSelection
|
type ItemSelection
|
||||||
= Inactive
|
= Inactive
|
||||||
| Active (Set String)
|
| Active ItemIds
|
||||||
|
|
||||||
|
|
||||||
isSelected : String -> ItemSelection -> Bool
|
isSelected : String -> ItemSelection -> Bool
|
||||||
@ -26,7 +26,7 @@ isSelected id set =
|
|||||||
False
|
False
|
||||||
|
|
||||||
Active ids ->
|
Active ids ->
|
||||||
Set.member id ids
|
Data.ItemIds.isMember ids id
|
||||||
|
|
||||||
|
|
||||||
isActive : ItemSelection -> Bool
|
isActive : ItemSelection -> Bool
|
||||||
|
@ -84,8 +84,7 @@ type ConfirmModalValue
|
|||||||
|
|
||||||
|
|
||||||
type alias SelectViewModel =
|
type alias SelectViewModel =
|
||||||
{ ids : Set String
|
{ action : SelectActionMode
|
||||||
, action : SelectActionMode
|
|
||||||
, confirmModal : Maybe ConfirmModalValue
|
, confirmModal : Maybe ConfirmModalValue
|
||||||
, editModel : Comp.ItemDetail.MultiEditMenu.Model
|
, editModel : Comp.ItemDetail.MultiEditMenu.Model
|
||||||
, mergeModel : Comp.ItemMerge.Model
|
, mergeModel : Comp.ItemMerge.Model
|
||||||
@ -97,8 +96,7 @@ type alias SelectViewModel =
|
|||||||
|
|
||||||
initSelectViewModel : Flags -> SelectViewModel
|
initSelectViewModel : Flags -> SelectViewModel
|
||||||
initSelectViewModel flags =
|
initSelectViewModel flags =
|
||||||
{ ids = Set.empty
|
{ action = NoneAction
|
||||||
, action = NoneAction
|
|
||||||
, confirmModal = Nothing
|
, confirmModal = Nothing
|
||||||
, editModel = Comp.ItemDetail.MultiEditMenu.init
|
, editModel = Comp.ItemDetail.MultiEditMenu.init
|
||||||
, mergeModel = Comp.ItemMerge.init []
|
, mergeModel = Comp.ItemMerge.init []
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -18,9 +18,11 @@ import Comp.PowerSearchInput
|
|||||||
import Comp.PublishItems
|
import Comp.PublishItems
|
||||||
import Comp.SearchMenu
|
import Comp.SearchMenu
|
||||||
import Comp.SearchStatsView
|
import Comp.SearchStatsView
|
||||||
|
import Data.Environment as Env
|
||||||
import Data.Flags exposing (Flags)
|
import Data.Flags exposing (Flags)
|
||||||
import Data.Icons as Icons
|
import Data.Icons as Icons
|
||||||
import Data.ItemArrange
|
import Data.ItemArrange
|
||||||
|
import Data.ItemIds exposing (ItemIds)
|
||||||
import Data.ItemSelection
|
import Data.ItemSelection
|
||||||
import Data.SearchMode
|
import Data.SearchMode
|
||||||
import Data.UiSettings exposing (UiSettings)
|
import Data.UiSettings exposing (UiSettings)
|
||||||
@ -36,27 +38,27 @@ import Styles as S
|
|||||||
import Util.Html
|
import Util.Html
|
||||||
|
|
||||||
|
|
||||||
viewSidebar : Texts -> Bool -> Flags -> UiSettings -> Model -> Html Msg
|
viewSidebar : Texts -> Env.View -> Model -> Html Msg
|
||||||
viewSidebar texts visible flags settings model =
|
viewSidebar texts env model =
|
||||||
div
|
div
|
||||||
[ id "sidebar"
|
[ id "sidebar"
|
||||||
, class S.sidebar
|
, class S.sidebar
|
||||||
, class S.sidebarBg
|
, class S.sidebarBg
|
||||||
, classList [ ( "hidden", not visible ) ]
|
, classList [ ( "hidden", not env.sidebarVisible ) ]
|
||||||
]
|
]
|
||||||
[ Page.Search.SideMenu.view texts.sideMenu flags settings model
|
[ Page.Search.SideMenu.view texts.sideMenu env.flags env.settings model
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
viewContent : Texts -> Flags -> UiSettings -> Model -> Html Msg
|
viewContent : Texts -> Env.View -> Model -> Html Msg
|
||||||
viewContent texts flags settings model =
|
viewContent texts env model =
|
||||||
div
|
div
|
||||||
[ id "item-card-list" -- this id is used in scroll-to-card
|
[ id "item-card-list" -- this id is used in scroll-to-card
|
||||||
, class S.content
|
, class S.content
|
||||||
]
|
]
|
||||||
(searchStats texts flags settings model
|
(searchStats texts env.flags env.settings model
|
||||||
++ itemsBar texts flags settings model
|
++ itemsBar texts env model
|
||||||
++ mainView texts flags settings model
|
++ mainView texts env model
|
||||||
++ confirmModal texts model
|
++ confirmModal texts model
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -65,8 +67,8 @@ viewContent texts flags settings model =
|
|||||||
--- Helpers
|
--- Helpers
|
||||||
|
|
||||||
|
|
||||||
mainView : Texts -> Flags -> UiSettings -> Model -> List (Html Msg)
|
mainView : Texts -> Env.View -> Model -> List (Html Msg)
|
||||||
mainView texts flags settings model =
|
mainView texts env model =
|
||||||
let
|
let
|
||||||
otherView =
|
otherView =
|
||||||
case model.viewMode of
|
case model.viewMode of
|
||||||
@ -75,13 +77,13 @@ mainView texts flags settings model =
|
|||||||
MergeSelected ->
|
MergeSelected ->
|
||||||
Just
|
Just
|
||||||
[ div [ class "sm:relative mb-2" ]
|
[ div [ class "sm:relative mb-2" ]
|
||||||
(itemMergeView texts settings svm)
|
(itemMergeView texts env.settings svm)
|
||||||
]
|
]
|
||||||
|
|
||||||
PublishSelected ->
|
PublishSelected ->
|
||||||
Just
|
Just
|
||||||
[ div [ class "sm:relative mb-2" ]
|
[ div [ class "sm:relative mb-2" ]
|
||||||
(itemPublishView texts settings flags svm)
|
(itemPublishView texts env.settings env.flags svm)
|
||||||
]
|
]
|
||||||
|
|
||||||
_ ->
|
_ ->
|
||||||
@ -90,7 +92,7 @@ mainView texts flags settings model =
|
|||||||
PublishView pm ->
|
PublishView pm ->
|
||||||
Just
|
Just
|
||||||
[ div [ class "sm:relative mb-2" ]
|
[ div [ class "sm:relative mb-2" ]
|
||||||
(publishResults texts settings flags model pm)
|
(publishResults texts env.settings env.flags model pm)
|
||||||
]
|
]
|
||||||
|
|
||||||
SearchView ->
|
SearchView ->
|
||||||
@ -101,8 +103,8 @@ mainView texts flags settings model =
|
|||||||
body
|
body
|
||||||
|
|
||||||
Nothing ->
|
Nothing ->
|
||||||
bookmarkQueryWidget texts settings flags model
|
bookmarkQueryWidget texts env.settings env.flags model
|
||||||
++ itemCardList texts flags settings model
|
++ itemCardList texts env model
|
||||||
|
|
||||||
|
|
||||||
bookmarkQueryWidget : Texts -> UiSettings -> Flags -> Model -> List (Html Msg)
|
bookmarkQueryWidget : Texts -> UiSettings -> Flags -> Model -> List (Html Msg)
|
||||||
@ -182,17 +184,17 @@ confirmModal texts model =
|
|||||||
[]
|
[]
|
||||||
|
|
||||||
|
|
||||||
itemsBar : Texts -> Flags -> UiSettings -> Model -> List (Html Msg)
|
itemsBar : Texts -> Env.View -> Model -> List (Html Msg)
|
||||||
itemsBar texts flags settings model =
|
itemsBar texts env model =
|
||||||
case model.viewMode of
|
case model.viewMode of
|
||||||
SearchView ->
|
SearchView ->
|
||||||
[ defaultMenuBar texts flags settings model ]
|
[ defaultMenuBar texts env.flags env.settings model ]
|
||||||
|
|
||||||
SelectView svm ->
|
SelectView svm ->
|
||||||
[ editMenuBar texts model svm ]
|
[ editMenuBar texts model env.selectedItems svm ]
|
||||||
|
|
||||||
PublishView _ ->
|
PublishView _ ->
|
||||||
[ defaultMenuBar texts flags settings model ]
|
[ defaultMenuBar texts env.flags env.settings model ]
|
||||||
|
|
||||||
|
|
||||||
defaultMenuBar : Texts -> Flags -> UiSettings -> Model -> Html Msg
|
defaultMenuBar : Texts -> Flags -> UiSettings -> Model -> Html Msg
|
||||||
@ -427,11 +429,11 @@ defaultMenuBar texts flags settings model =
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
editMenuBar : Texts -> Model -> SelectViewModel -> Html Msg
|
editMenuBar : Texts -> Model -> ItemIds -> SelectViewModel -> Html Msg
|
||||||
editMenuBar texts model svm =
|
editMenuBar texts model selectedItems svm =
|
||||||
let
|
let
|
||||||
selectCount =
|
selectCount =
|
||||||
Set.size svm.ids
|
Data.ItemIds.size selectedItems
|
||||||
|
|
||||||
btnStyle =
|
btnStyle =
|
||||||
S.secondaryBasicButton ++ " text-sm"
|
S.secondaryBasicButton ++ " text-sm"
|
||||||
@ -565,8 +567,8 @@ searchStats texts _ settings model =
|
|||||||
[]
|
[]
|
||||||
|
|
||||||
|
|
||||||
itemCardList : Texts -> Flags -> UiSettings -> Model -> List (Html Msg)
|
itemCardList : Texts -> Env.View -> Model -> List (Html Msg)
|
||||||
itemCardList texts flags settings model =
|
itemCardList texts env model =
|
||||||
let
|
let
|
||||||
previewUrl attach =
|
previewUrl attach =
|
||||||
Api.attachmentPreviewURL attach.id
|
Api.attachmentPreviewURL attach.id
|
||||||
@ -581,15 +583,15 @@ itemCardList texts flags settings model =
|
|||||||
, previewUrlFallback = previewUrlFallback
|
, previewUrlFallback = previewUrlFallback
|
||||||
, attachUrl = .id >> Api.fileURL
|
, attachUrl = .id >> Api.fileURL
|
||||||
, detailPage = .id >> ItemDetailPage
|
, detailPage = .id >> ItemDetailPage
|
||||||
, arrange = settings.itemSearchArrange
|
, arrange = env.settings.itemSearchArrange
|
||||||
, showGroups = settings.itemSearchShowGroups
|
, showGroups = env.settings.itemSearchShowGroups
|
||||||
, rowOpen = \id -> Set.member "all" model.itemRowsOpen || Set.member id model.itemRowsOpen
|
, rowOpen = \id -> Set.member "all" model.itemRowsOpen || Set.member id model.itemRowsOpen
|
||||||
}
|
}
|
||||||
|
|
||||||
itemViewCfg =
|
itemViewCfg =
|
||||||
case model.viewMode of
|
case model.viewMode of
|
||||||
SelectView svm ->
|
SelectView _ ->
|
||||||
viewCfg (Data.ItemSelection.Active svm.ids)
|
viewCfg (Data.ItemSelection.Active env.selectedItems)
|
||||||
|
|
||||||
_ ->
|
_ ->
|
||||||
viewCfg Data.ItemSelection.Inactive
|
viewCfg Data.ItemSelection.Inactive
|
||||||
@ -597,11 +599,11 @@ itemCardList texts flags settings model =
|
|||||||
[ Html.map ItemCardListMsg
|
[ Html.map ItemCardListMsg
|
||||||
(Comp.ItemCardList.view texts.itemCardList
|
(Comp.ItemCardList.view texts.itemCardList
|
||||||
itemViewCfg
|
itemViewCfg
|
||||||
settings
|
env.settings
|
||||||
flags
|
env.flags
|
||||||
model.itemListModel
|
model.itemListModel
|
||||||
)
|
)
|
||||||
, loadMore texts settings model
|
, loadMore texts env.settings model
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user