Apply tag colors from settings

This commit is contained in:
Eike Kettner
2020-06-08 00:54:47 +02:00
parent 1cd65b7b7c
commit 1dd84c11bd
39 changed files with 375 additions and 341 deletions

View File

@ -5,6 +5,7 @@ import Comp.CollectiveSettingsForm
import Comp.SourceManage
import Comp.UserManage
import Data.Flags exposing (Flags)
import Data.UiSettings exposing (UiSettings)
import Html exposing (..)
import Html.Attributes exposing (..)
import Html.Events exposing (onClick)
@ -14,8 +15,8 @@ import Util.Maybe
import Util.Size
view : Flags -> Model -> Html Msg
view flags model =
view : Flags -> UiSettings -> Model -> Html Msg
view flags settings model =
div [ class "collectivesetting-page ui padded grid" ]
[ div [ class "sixteen wide mobile four wide tablet four wide computer column" ]
[ h4 [ class "ui top attached ablue-comp header" ]
@ -61,13 +62,13 @@ view flags model =
viewSources flags model
Just UserTab ->
viewUsers model
viewUsers settings model
Just InsightsTab ->
viewInsights model
Just SettingsTab ->
viewSettings flags model
viewSettings flags settings model
Nothing ->
[]
@ -164,26 +165,26 @@ viewSources flags model =
]
viewUsers : Model -> List (Html Msg)
viewUsers model =
viewUsers : UiSettings -> Model -> List (Html Msg)
viewUsers settings model =
[ h2 [ class "ui header" ]
[ i [ class "ui user icon" ] []
, div [ class "content" ]
[ text "Users"
]
]
, Html.map UserMsg (Comp.UserManage.view model.userModel)
, Html.map UserMsg (Comp.UserManage.view settings model.userModel)
]
viewSettings : Flags -> Model -> List (Html Msg)
viewSettings flags model =
viewSettings : Flags -> UiSettings -> Model -> List (Html Msg)
viewSettings flags settings model =
[ h2 [ class "ui header" ]
[ i [ class "cog icon" ] []
, text "Settings"
]
, div [ class "ui segment" ]
[ Html.map SettingsFormMsg (Comp.CollectiveSettingsForm.view flags model.settingsModel)
[ Html.map SettingsFormMsg (Comp.CollectiveSettingsForm.view flags settings model.settingsModel)
]
, div
[ classList

View File

@ -27,13 +27,12 @@ type alias Model =
, searchOffset : Int
, moreAvailable : Bool
, moreInProgress : Bool
, uiSettings : UiSettings
}
init : Flags -> Model
init _ =
{ searchMenuModel = Comp.SearchMenu.emptyModel
{ searchMenuModel = Comp.SearchMenu.init
, itemListModel = Comp.ItemCardList.init
, searchInProgress = False
, viewMode = Listing
@ -41,7 +40,6 @@ init _ =
, searchOffset = 0
, moreAvailable = True
, moreInProgress = False
, uiSettings = Data.UiSettings.defaults
}
@ -55,7 +53,6 @@ type Msg
| DoSearch
| ToggleSearchMenu
| LoadMore
| GetUiSettings UiSettings
type ViewMode
@ -77,15 +74,15 @@ itemNav id model =
}
doSearchCmd : Flags -> Int -> Model -> Cmd Msg
doSearchCmd flags offset model =
doSearchCmd : Flags -> UiSettings -> Int -> Model -> Cmd Msg
doSearchCmd flags settings offset model =
let
smask =
Comp.SearchMenu.getItemSearch model.searchMenuModel
mask =
{ smask
| limit = model.uiSettings.itemSearchPageSize
| limit = settings.itemSearchPageSize
, offset = offset
}
in
@ -96,10 +93,10 @@ doSearchCmd flags offset model =
Api.itemSearch flags mask ItemSearchAddResp
resultsBelowLimit : Model -> Bool
resultsBelowLimit model =
resultsBelowLimit : UiSettings -> Model -> Bool
resultsBelowLimit settings model =
let
len =
Data.Items.length model.itemListModel.results
in
len < model.uiSettings.itemSearchPageSize
len < settings.itemSearchPageSize

View File

@ -4,17 +4,18 @@ import Browser.Navigation as Nav
import Comp.ItemCardList
import Comp.SearchMenu
import Data.Flags exposing (Flags)
import Data.UiSettings exposing (UiSettings)
import Page exposing (Page(..))
import Page.Home.Data exposing (..)
import Util.Update
update : Nav.Key -> Flags -> Msg -> Model -> ( Model, Cmd Msg )
update key flags msg model =
update : Nav.Key -> Flags -> UiSettings -> Msg -> Model -> ( Model, Cmd Msg )
update key flags settings msg model =
case msg of
Init ->
Util.Update.andThen1
[ update key flags (SearchMenuMsg Comp.SearchMenu.Init)
[ update key flags settings (SearchMenuMsg Comp.SearchMenu.Init)
]
model
@ -23,19 +24,19 @@ update key flags msg model =
nm =
{ model | searchOffset = 0 }
in
update key flags (SearchMenuMsg Comp.SearchMenu.ResetForm) nm
update key flags settings (SearchMenuMsg Comp.SearchMenu.ResetForm) nm
SearchMenuMsg m ->
let
nextState =
Comp.SearchMenu.update flags m model.searchMenuModel
Comp.SearchMenu.update flags settings m model.searchMenuModel
newModel =
{ model | searchMenuModel = Tuple.first nextState.modelCmd }
( m2, c2 ) =
if nextState.stateChange then
doSearch flags newModel
doSearch flags settings newModel
else
( newModel, Cmd.none )
@ -62,7 +63,7 @@ update key flags msg model =
ItemSearchResp (Ok list) ->
let
noff =
model.uiSettings.itemSearchPageSize
settings.itemSearchPageSize
m =
{ model
@ -72,12 +73,12 @@ update key flags msg model =
, moreAvailable = list.groups /= []
}
in
update key flags (ItemCardListMsg (Comp.ItemCardList.SetResults list)) m
update key flags settings (ItemCardListMsg (Comp.ItemCardList.SetResults list)) m
ItemSearchAddResp (Ok list) ->
let
noff =
model.searchOffset + model.uiSettings.itemSearchPageSize
model.searchOffset + settings.itemSearchPageSize
m =
{ model
@ -88,7 +89,7 @@ update key flags msg model =
, moreAvailable = list.groups /= []
}
in
update key flags (ItemCardListMsg (Comp.ItemCardList.AddResults list)) m
update key flags settings (ItemCardListMsg (Comp.ItemCardList.AddResults list)) m
ItemSearchAddResp (Err _) ->
( { model
@ -109,7 +110,7 @@ update key flags msg model =
nm =
{ model | searchOffset = 0 }
in
doSearch flags nm
doSearch flags settings nm
ToggleSearchMenu ->
( { model | menuCollapsed = not model.menuCollapsed }
@ -118,24 +119,17 @@ update key flags msg model =
LoadMore ->
if model.moreAvailable then
doSearchMore flags model
doSearchMore flags settings model
else
( model, Cmd.none )
GetUiSettings settings ->
let
m_ =
{ model | uiSettings = settings }
in
doSearch flags m_
doSearch : Flags -> Model -> ( Model, Cmd Msg )
doSearch flags model =
doSearch : Flags -> UiSettings -> Model -> ( Model, Cmd Msg )
doSearch flags settings model =
let
cmd =
doSearchCmd flags 0 model
doSearchCmd flags settings 0 model
in
( { model
| searchInProgress = True
@ -146,11 +140,11 @@ doSearch flags model =
)
doSearchMore : Flags -> Model -> ( Model, Cmd Msg )
doSearchMore flags model =
doSearchMore : Flags -> UiSettings -> Model -> ( Model, Cmd Msg )
doSearchMore flags settings model =
let
cmd =
doSearchCmd flags model.searchOffset model
doSearchCmd flags settings model.searchOffset model
in
( { model | moreInProgress = True, viewMode = Listing }
, cmd

View File

@ -2,6 +2,7 @@ module Page.Home.View exposing (view)
import Comp.ItemCardList
import Comp.SearchMenu
import Data.UiSettings exposing (UiSettings)
import Html exposing (..)
import Html.Attributes exposing (..)
import Html.Events exposing (onClick)
@ -9,8 +10,8 @@ import Page exposing (Page(..))
import Page.Home.Data exposing (..)
view : Model -> Html Msg
view model =
view : UiSettings -> Model -> Html Msg
view settings model =
div [ class "home-page ui padded grid" ]
[ div
[ classList
@ -52,7 +53,7 @@ view model =
]
]
, div [ class "ui attached fluid segment" ]
[ Html.map SearchMenuMsg (Comp.SearchMenu.view model.searchMenuModel)
[ Html.map SearchMenuMsg (Comp.SearchMenu.view settings model.searchMenuModel)
]
]
, div
@ -86,7 +87,7 @@ view model =
else
Html.map ItemCardListMsg
(Comp.ItemCardList.view model.itemListModel)
(Comp.ItemCardList.view settings model.itemListModel)
Detail ->
div [] []
@ -101,7 +102,7 @@ view model =
[ classList
[ ( "ui basic tiny button", True )
, ( "disabled", not model.moreAvailable )
, ( "hidden invisible", resultsBelowLimit model )
, ( "hidden invisible", resultsBelowLimit settings model )
]
, disabled (not model.moreAvailable || model.moreInProgress || model.searchInProgress)
, title "Load more items"

View File

@ -1,6 +1,7 @@
module Page.ItemDetail.View exposing (view)
import Comp.ItemDetail
import Data.UiSettings exposing (UiSettings)
import Html exposing (..)
import Html.Attributes exposing (..)
import Page.ItemDetail.Data exposing (Model, Msg(..))
@ -12,8 +13,8 @@ type alias ItemNav =
}
view : ItemNav -> Model -> Html Msg
view inav model =
view : ItemNav -> UiSettings -> Model -> Html Msg
view inav settings model =
div [ class "ui fluid container item-detail-page" ]
[ Html.map ItemDetailMsg (Comp.ItemDetail.view inav model.detail)
[ Html.map ItemDetailMsg (Comp.ItemDetail.view inav settings model.detail)
]

View File

@ -4,6 +4,7 @@ import Comp.EquipmentManage
import Comp.OrgManage
import Comp.PersonManage
import Comp.TagManage
import Data.UiSettings exposing (UiSettings)
import Html exposing (..)
import Html.Attributes exposing (..)
import Html.Events exposing (onClick)
@ -11,8 +12,8 @@ import Page.ManageData.Data exposing (..)
import Util.Html exposing (classActive)
view : Model -> Html Msg
view model =
view : UiSettings -> Model -> Html Msg
view settings model =
div [ class "managedata-page ui padded grid" ]
[ div [ class "sixteen wide mobile four wide tablet four wide computer column" ]
[ h4 [ class "ui top attached ablue-comp header" ]
@ -61,10 +62,10 @@ view model =
viewEquip model
Just OrgTab ->
viewOrg model
viewOrg settings model
Just PersonTab ->
viewPerson model
viewPerson settings model
Nothing ->
[]
@ -97,25 +98,25 @@ viewEquip model =
]
viewOrg : Model -> List (Html Msg)
viewOrg model =
viewOrg : UiSettings -> Model -> List (Html Msg)
viewOrg settings model =
[ h2 [ class "ui header" ]
[ i [ class "ui factory icon" ] []
, div [ class "content" ]
[ text "Organizations"
]
]
, Html.map OrgManageMsg (Comp.OrgManage.view model.orgManageModel)
, Html.map OrgManageMsg (Comp.OrgManage.view settings model.orgManageModel)
]
viewPerson : Model -> List (Html Msg)
viewPerson model =
viewPerson : UiSettings -> Model -> List (Html Msg)
viewPerson settings model =
[ h2 [ class "ui header" ]
[ i [ class "ui user icon" ] []
, div [ class "content" ]
[ text "Person"
]
]
, Html.map PersonManageMsg (Comp.PersonManage.view model.personManageModel)
, Html.map PersonManageMsg (Comp.PersonManage.view settings model.personManageModel)
]

View File

@ -2,7 +2,7 @@ module Page.UserSettings.Data exposing
( Model
, Msg(..)
, Tab(..)
, emptyModel
, init
)
import Comp.ChangePasswordForm
@ -26,17 +26,17 @@ type alias Model =
}
emptyModel : Flags -> ( Model, Cmd Msg )
emptyModel flags =
init : Flags -> UiSettings -> ( Model, Cmd Msg )
init flags settings =
let
( um, uc ) =
Comp.UiSettingsManage.init flags Data.UiSettings.defaults
Comp.UiSettingsManage.init flags settings
in
( { currentTab = Nothing
, changePassModel = Comp.ChangePasswordForm.emptyModel
, emailSettingsModel = Comp.EmailSettingsManage.emptyModel
, imapSettingsModel = Comp.ImapSettingsManage.emptyModel
, notificationModel = Tuple.first (Comp.NotificationForm.init flags)
, notificationModel = Tuple.first (Comp.NotificationForm.init flags settings)
, scanMailboxModel = Tuple.first (Comp.ScanMailboxManage.init flags)
, uiSettingsModel = um
}
@ -60,5 +60,5 @@ type Msg
| NotificationMsg Comp.NotificationForm.Msg
| ImapSettingsMsg Comp.ImapSettingsManage.Msg
| ScanMailboxMsg Comp.ScanMailboxManage.Msg
| GetUiSettings UiSettings
| UiSettingsMsg Comp.UiSettingsManage.Msg
| UpdateSettings

View File

@ -7,11 +7,12 @@ import Comp.NotificationForm
import Comp.ScanMailboxManage
import Comp.UiSettingsManage
import Data.Flags exposing (Flags)
import Data.UiSettings exposing (UiSettings)
import Page.UserSettings.Data exposing (..)
update : Flags -> Msg -> Model -> ( Model, Cmd Msg, Sub Msg )
update flags msg model =
update : Flags -> UiSettings -> Msg -> Model -> ( Model, Cmd Msg, Sub Msg )
update flags settings msg model =
case msg of
SetTab t ->
let
@ -40,7 +41,7 @@ update flags msg model =
let
initCmd =
Cmd.map NotificationMsg
(Tuple.second (Comp.NotificationForm.init flags))
(Tuple.second (Comp.NotificationForm.init flags settings))
in
( m, initCmd, Sub.none )
@ -96,22 +97,18 @@ update flags msg model =
, Sub.none
)
GetUiSettings settings ->
let
( um, uc ) =
Comp.UiSettingsManage.init flags settings
in
( { model | uiSettingsModel = um }
, Cmd.map UiSettingsMsg uc
, Sub.none
)
UiSettingsMsg lm ->
let
( m2, c2, s2 ) =
Comp.UiSettingsManage.update flags lm model.uiSettingsModel
Comp.UiSettingsManage.update flags settings lm model.uiSettingsModel
in
( { model | uiSettingsModel = m2 }
, Cmd.map UiSettingsMsg c2
, Sub.map UiSettingsMsg s2
)
UpdateSettings ->
update flags
settings
(UiSettingsMsg Comp.UiSettingsManage.UpdateSettings)
model

View File

@ -6,6 +6,7 @@ import Comp.ImapSettingsManage
import Comp.NotificationForm
import Comp.ScanMailboxManage
import Comp.UiSettingsManage
import Data.UiSettings exposing (UiSettings)
import Html exposing (..)
import Html.Attributes exposing (..)
import Html.Events exposing (onClick)
@ -13,8 +14,8 @@ import Page.UserSettings.Data exposing (..)
import Util.Html exposing (classActive)
view : Model -> Html Msg
view model =
view : UiSettings -> Model -> Html Msg
view settings model =
div [ class "usersetting-page ui padded grid" ]
[ div [ class "sixteen wide mobile four wide tablet four wide computer column" ]
[ h4 [ class "ui top attached ablue-comp header" ]
@ -38,19 +39,19 @@ view model =
viewChangePassword model
Just EmailSettingsTab ->
viewEmailSettings model
viewEmailSettings settings model
Just NotificationTab ->
viewNotificationForm model
viewNotificationForm settings model
Just ImapSettingsTab ->
viewImapSettings model
viewImapSettings settings model
Just ScanMailboxTab ->
viewScanMailboxManage model
viewScanMailboxManage settings model
Just UiSettingsTab ->
viewUiSettings model
viewUiSettings settings model
Nothing ->
[]
@ -71,8 +72,8 @@ makeTab model tab header icon =
]
viewUiSettings : Model -> List (Html Msg)
viewUiSettings model =
viewUiSettings : UiSettings -> Model -> List (Html Msg)
viewUiSettings settings model =
[ h2 [ class "ui header" ]
[ i [ class "cog icon" ] []
, text "UI Settings"
@ -81,31 +82,36 @@ viewUiSettings model =
[ text "These settings only affect the web ui. They are stored in the browser, "
, text "so they are separated between browsers and devices."
]
, Html.map UiSettingsMsg (Comp.UiSettingsManage.view "ui segment" model.uiSettingsModel)
, Html.map UiSettingsMsg
(Comp.UiSettingsManage.view
settings
"ui segment"
model.uiSettingsModel
)
]
viewEmailSettings : Model -> List (Html Msg)
viewEmailSettings model =
viewEmailSettings : UiSettings -> Model -> List (Html Msg)
viewEmailSettings settings model =
[ h2 [ class "ui header" ]
[ i [ class "mail icon" ] []
, div [ class "content" ]
[ text "E-Mail Settings (Smtp)"
]
]
, Html.map EmailSettingsMsg (Comp.EmailSettingsManage.view model.emailSettingsModel)
, Html.map EmailSettingsMsg (Comp.EmailSettingsManage.view settings model.emailSettingsModel)
]
viewImapSettings : Model -> List (Html Msg)
viewImapSettings model =
viewImapSettings : UiSettings -> Model -> List (Html Msg)
viewImapSettings settings model =
[ h2 [ class "ui header" ]
[ i [ class "mail icon" ] []
, div [ class "content" ]
[ text "E-Mail Settings (Imap)"
]
]
, Html.map ImapSettingsMsg (Comp.ImapSettingsManage.view model.imapSettingsModel)
, Html.map ImapSettingsMsg (Comp.ImapSettingsManage.view settings model.imapSettingsModel)
]
@ -121,8 +127,8 @@ viewChangePassword model =
]
viewNotificationForm : Model -> List (Html Msg)
viewNotificationForm model =
viewNotificationForm : UiSettings -> Model -> List (Html Msg)
viewNotificationForm settings model =
[ h2 [ class "ui header" ]
[ i [ class "ui bullhorn icon" ] []
, div [ class "content" ]
@ -141,12 +147,12 @@ viewNotificationForm model =
, text " days and sends this list via e-mail."
]
, Html.map NotificationMsg
(Comp.NotificationForm.view "segment" model.notificationModel)
(Comp.NotificationForm.view "segment" settings model.notificationModel)
]
viewScanMailboxManage : Model -> List (Html Msg)
viewScanMailboxManage model =
viewScanMailboxManage : UiSettings -> Model -> List (Html Msg)
viewScanMailboxManage settings model =
[ h2 [ class "ui header" ]
[ i [ class "ui envelope open outline icon" ] []
, div [ class "content" ]
@ -171,6 +177,7 @@ viewScanMailboxManage model =
]
, Html.map ScanMailboxMsg
(Comp.ScanMailboxManage.view
settings
model.scanMailboxModel
)
]