mirror of
				https://github.com/TheAnachronism/docspell.git
				synced 2025-10-30 21:40:12 +00:00 
			
		
		
		
	Display item notes in card view if configured
The user can set a maximum length of the item notes to display in each card. If set to 0, it is hidden.
This commit is contained in:
		| @@ -15,7 +15,9 @@ case class Flags( | ||||
|     signupMode: SignupConfig.Mode, | ||||
|     docspellAssetPath: String, | ||||
|     integrationEnabled: Boolean, | ||||
|     fullTextSearchEnabled: Boolean | ||||
|     fullTextSearchEnabled: Boolean, | ||||
|     maxPageSize: Int, | ||||
|     maxNoteLength: Int | ||||
| ) | ||||
|  | ||||
| object Flags { | ||||
| @@ -26,7 +28,9 @@ object Flags { | ||||
|       cfg.backend.signup.mode, | ||||
|       s"/app/assets/docspell-webapp/${BuildInfo.version}", | ||||
|       cfg.integrationEndpoint.enabled, | ||||
|       cfg.fullTextSearch.enabled | ||||
|       cfg.fullTextSearch.enabled, | ||||
|       cfg.maxItemPageSize, | ||||
|       cfg.maxNoteLength | ||||
|     ) | ||||
|  | ||||
|   implicit val jsonEncoder: Encoder[Flags] = | ||||
|   | ||||
| @@ -146,7 +146,7 @@ viewQueue model = | ||||
|  | ||||
| viewUserSettings : Model -> Html Msg | ||||
| viewUserSettings model = | ||||
|     Html.map UserSettingsMsg (Page.UserSettings.View.view model.uiSettings model.userSettingsModel) | ||||
|     Html.map UserSettingsMsg (Page.UserSettings.View.view model.flags model.uiSettings model.userSettingsModel) | ||||
|  | ||||
|  | ||||
| viewCollectiveSettings : Model -> Html Msg | ||||
|   | ||||
| @@ -197,6 +197,22 @@ viewItem settings item = | ||||
|                     ) | ||||
|                 ] | ||||
|             ] | ||||
|         , div | ||||
|             [ classList | ||||
|                 [ ( "content", True ) | ||||
|                 , ( "invisible hidden" | ||||
|                   , settings.itemSearchNoteLength | ||||
|                         <= 0 | ||||
|                         || Util.String.isNothingOrBlank item.notes | ||||
|                   ) | ||||
|                 ] | ||||
|             ] | ||||
|             [ span [ class "small-info" ] | ||||
|                 [ Maybe.withDefault "" item.notes | ||||
|                     |> Util.String.ellipsis settings.itemSearchNoteLength | ||||
|                     |> text | ||||
|                 ] | ||||
|             ] | ||||
|         , div [ class "content" ] | ||||
|             [ div [ class "ui horizontal list" ] | ||||
|                 [ div | ||||
|   | ||||
| @@ -12,7 +12,7 @@ import Comp.ColorTagger | ||||
| import Comp.IntField | ||||
| import Data.Color exposing (Color) | ||||
| import Data.Flags exposing (Flags) | ||||
| import Data.UiSettings exposing (StoredUiSettings, UiSettings) | ||||
| import Data.UiSettings exposing (UiSettings) | ||||
| import Dict exposing (Dict) | ||||
| import Html exposing (..) | ||||
| import Html.Attributes exposing (..) | ||||
| @@ -27,6 +27,8 @@ type alias Model = | ||||
|     , tagColors : Dict String Color | ||||
|     , tagColorModel : Comp.ColorTagger.Model | ||||
|     , nativePdfPreview : Bool | ||||
|     , itemSearchNoteLength : Maybe Int | ||||
|     , searchNoteLengthModel : Comp.IntField.Model | ||||
|     } | ||||
|  | ||||
|  | ||||
| @@ -36,7 +38,7 @@ init flags settings = | ||||
|       , searchPageSizeModel = | ||||
|             Comp.IntField.init | ||||
|                 (Just 10) | ||||
|                 (Just 500) | ||||
|                 (Just flags.config.maxPageSize) | ||||
|                 False | ||||
|                 "Page size" | ||||
|       , tagColors = settings.tagCategoryColors | ||||
| @@ -45,6 +47,13 @@ init flags settings = | ||||
|                 [] | ||||
|                 Data.Color.all | ||||
|       , nativePdfPreview = settings.nativePdfPreview | ||||
|       , itemSearchNoteLength = Just settings.itemSearchNoteLength | ||||
|       , searchNoteLengthModel = | ||||
|             Comp.IntField.init | ||||
|                 (Just 0) | ||||
|                 (Just flags.config.maxNoteLength) | ||||
|                 False | ||||
|                 "Max. Note Length" | ||||
|       } | ||||
|     , Api.getTags flags "" GetTagsResp | ||||
|     ) | ||||
| @@ -55,6 +64,7 @@ type Msg | ||||
|     | TagColorMsg Comp.ColorTagger.Msg | ||||
|     | GetTagsResp (Result Http.Error TagList) | ||||
|     | TogglePdfPreview | ||||
|     | NoteLengthMsg Comp.IntField.Msg | ||||
|  | ||||
|  | ||||
|  | ||||
| @@ -80,6 +90,22 @@ update sett msg model = | ||||
|             in | ||||
|             ( model_, nextSettings ) | ||||
|  | ||||
|         NoteLengthMsg lm -> | ||||
|             let | ||||
|                 ( m, n ) = | ||||
|                     Comp.IntField.update lm model.searchNoteLengthModel | ||||
|  | ||||
|                 nextSettings = | ||||
|                     Maybe.map (\len -> { sett | itemSearchNoteLength = len }) n | ||||
|  | ||||
|                 model_ = | ||||
|                     { model | ||||
|                         | searchNoteLengthModel = m | ||||
|                         , itemSearchNoteLength = n | ||||
|                     } | ||||
|             in | ||||
|             ( model_, nextSettings ) | ||||
|  | ||||
|         TagColorMsg lm -> | ||||
|             let | ||||
|                 ( m_, d_ ) = | ||||
| @@ -139,19 +165,32 @@ tagColorViewOpts = | ||||
|     } | ||||
|  | ||||
|  | ||||
| view : UiSettings -> Model -> Html Msg | ||||
| view _ model = | ||||
| view : Flags -> UiSettings -> Model -> Html Msg | ||||
| view flags _ model = | ||||
|     div [ class "ui form" ] | ||||
|         [ div [ class "ui dividing header" ] | ||||
|             [ text "Item Search" | ||||
|             ] | ||||
|         , Html.map SearchPageSizeMsg | ||||
|             (Comp.IntField.viewWithInfo | ||||
|                 "Maximum results in one page when searching items." | ||||
|                 ("Maximum results in one page when searching items. At most " | ||||
|                     ++ String.fromInt flags.config.maxPageSize | ||||
|                     ++ "." | ||||
|                 ) | ||||
|                 model.itemSearchPageSize | ||||
|                 "field" | ||||
|                 model.searchPageSizeModel | ||||
|             ) | ||||
|         , Html.map NoteLengthMsg | ||||
|             (Comp.IntField.viewWithInfo | ||||
|                 ("Maximum size of the item notes to display in card view. Between 0 - " | ||||
|                     ++ String.fromInt flags.config.maxNoteLength | ||||
|                     ++ "." | ||||
|                 ) | ||||
|                 model.itemSearchNoteLength | ||||
|                 "field" | ||||
|                 model.searchNoteLengthModel | ||||
|             ) | ||||
|         , div [ class "ui dividing header" ] | ||||
|             [ text "Item Detail" | ||||
|             ] | ||||
|   | ||||
| @@ -115,10 +115,10 @@ isSuccess model = | ||||
|     Maybe.map .success model.message == Just True | ||||
|  | ||||
|  | ||||
| view : UiSettings -> String -> Model -> Html Msg | ||||
| view settings classes model = | ||||
| view : Flags -> UiSettings -> String -> Model -> Html Msg | ||||
| view flags settings classes model = | ||||
|     div [ class classes ] | ||||
|         [ Html.map UiSettingsFormMsg (Comp.UiSettingsForm.view settings model.formModel) | ||||
|         [ Html.map UiSettingsFormMsg (Comp.UiSettingsForm.view flags settings model.formModel) | ||||
|         , div [ class "ui divider" ] [] | ||||
|         , button | ||||
|             [ class "ui primary button" | ||||
|   | ||||
| @@ -16,6 +16,8 @@ type alias Config = | ||||
|     , docspellAssetPath : String | ||||
|     , integrationEnabled : Bool | ||||
|     , fullTextSearchEnabled : Bool | ||||
|     , maxPageSize : Int | ||||
|     , maxNoteLength : Int | ||||
|     } | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -26,6 +26,7 @@ type alias StoredUiSettings = | ||||
|     { itemSearchPageSize : Maybe Int | ||||
|     , tagCategoryColors : List ( String, String ) | ||||
|     , nativePdfPreview : Bool | ||||
|     , itemSearchNoteLength : Maybe Int | ||||
|     } | ||||
|  | ||||
|  | ||||
| @@ -40,6 +41,7 @@ type alias UiSettings = | ||||
|     { itemSearchPageSize : Int | ||||
|     , tagCategoryColors : Dict String Color | ||||
|     , nativePdfPreview : Bool | ||||
|     , itemSearchNoteLength : Int | ||||
|     } | ||||
|  | ||||
|  | ||||
| @@ -48,6 +50,7 @@ defaults = | ||||
|     { itemSearchPageSize = 60 | ||||
|     , tagCategoryColors = Dict.empty | ||||
|     , nativePdfPreview = False | ||||
|     , itemSearchNoteLength = 0 | ||||
|     } | ||||
|  | ||||
|  | ||||
| @@ -64,6 +67,8 @@ merge given fallback = | ||||
|             ) | ||||
|             fallback.tagCategoryColors | ||||
|     , nativePdfPreview = given.nativePdfPreview | ||||
|     , itemSearchNoteLength = | ||||
|         choose given.itemSearchNoteLength fallback.itemSearchNoteLength | ||||
|     } | ||||
|  | ||||
|  | ||||
| @@ -79,6 +84,7 @@ toStoredUiSettings settings = | ||||
|         Dict.map (\_ -> Data.Color.toString) settings.tagCategoryColors | ||||
|             |> Dict.toList | ||||
|     , nativePdfPreview = settings.nativePdfPreview | ||||
|     , itemSearchNoteLength = Just settings.itemSearchNoteLength | ||||
|     } | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -6,6 +6,7 @@ import Comp.ImapSettingsManage | ||||
| import Comp.NotificationManage | ||||
| import Comp.ScanMailboxManage | ||||
| import Comp.UiSettingsManage | ||||
| import Data.Flags exposing (Flags) | ||||
| import Data.UiSettings exposing (UiSettings) | ||||
| import Html exposing (..) | ||||
| import Html.Attributes exposing (..) | ||||
| @@ -14,8 +15,8 @@ import Page.UserSettings.Data exposing (..) | ||||
| import Util.Html exposing (classActive) | ||||
|  | ||||
|  | ||||
| view : UiSettings -> Model -> Html Msg | ||||
| view settings model = | ||||
| view : Flags -> UiSettings -> Model -> Html Msg | ||||
| view flags 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" ] | ||||
| @@ -51,7 +52,7 @@ view settings model = | ||||
|                         viewScanMailboxManage settings model | ||||
|  | ||||
|                     Just UiSettingsTab -> | ||||
|                         viewUiSettings settings model | ||||
|                         viewUiSettings flags settings model | ||||
|  | ||||
|                     Nothing -> | ||||
|                         [] | ||||
| @@ -72,8 +73,8 @@ makeTab model tab header icon = | ||||
|         ] | ||||
|  | ||||
|  | ||||
| viewUiSettings : UiSettings -> Model -> List (Html Msg) | ||||
| viewUiSettings settings model = | ||||
| viewUiSettings : Flags -> UiSettings -> Model -> List (Html Msg) | ||||
| viewUiSettings flags settings model = | ||||
|     [ h2 [ class "ui header" ] | ||||
|         [ i [ class "cog icon" ] [] | ||||
|         , text "UI Settings" | ||||
| @@ -84,6 +85,7 @@ viewUiSettings settings model = | ||||
|         ] | ||||
|     , Html.map UiSettingsMsg | ||||
|         (Comp.UiSettingsManage.view | ||||
|             flags | ||||
|             settings | ||||
|             "ui segment" | ||||
|             model.uiSettingsModel | ||||
|   | ||||
| @@ -1,6 +1,8 @@ | ||||
| module Util.String exposing | ||||
|     ( crazyEncode | ||||
|     , ellipsis | ||||
|     , isBlank | ||||
|     , isNothingOrBlank | ||||
|     , underscoreToSpace | ||||
|     , withDefault | ||||
|     ) | ||||
| @@ -31,7 +33,7 @@ ellipsis len str = | ||||
|         str | ||||
|  | ||||
|     else | ||||
|         String.left (len - 3) str ++ "..." | ||||
|         String.left (len - 1) str ++ "…" | ||||
|  | ||||
|  | ||||
| withDefault : String -> String -> String | ||||
| @@ -46,3 +48,14 @@ withDefault default str = | ||||
| underscoreToSpace : String -> String | ||||
| underscoreToSpace str = | ||||
|     String.replace "_" " " str | ||||
|  | ||||
|  | ||||
| isBlank : String -> Bool | ||||
| isBlank s = | ||||
|     s == "" || (String.trim s == "") | ||||
|  | ||||
|  | ||||
| isNothingOrBlank : Maybe String -> Bool | ||||
| isNothingOrBlank ms = | ||||
|     Maybe.map isBlank ms | ||||
|         |> Maybe.withDefault True | ||||
|   | ||||
		Reference in New Issue
	
	Block a user