From e07d732193719d677cd3e866dc0857f554dc16aa Mon Sep 17 00:00:00 2001
From: Eike Kettner <eike.kettner@posteo.de>
Date: Wed, 17 Feb 2021 22:18:22 +0100
Subject: [PATCH] Show item position in detail view

---
 .../src/main/elm/Comp/ItemDetail/View2.elm    | 13 +++++++
 modules/webapp/src/main/elm/Data/ItemNav.elm  | 38 ++++++++++++++++++-
 .../webapp/src/main/elm/Page/Home/Data.elm    | 11 +-----
 3 files changed, 51 insertions(+), 11 deletions(-)

diff --git a/modules/webapp/src/main/elm/Comp/ItemDetail/View2.elm b/modules/webapp/src/main/elm/Comp/ItemDetail/View2.elm
index 196fcf4a..486566c4 100644
--- a/modules/webapp/src/main/elm/Comp/ItemDetail/View2.elm
+++ b/modules/webapp/src/main/elm/Comp/ItemDetail/View2.elm
@@ -85,6 +85,19 @@ menuBar inav settings model =
                             [ title ("Previous item." ++ keyDescr "Ctrl-,")
                             ]
                         }
+                    , div
+                        [ classList [ ( "hidden", inav.index == Nothing ) ]
+                        , class S.secondaryBasicButtonMain
+                        , class " px-4 py-2 border-t border-b border-r opacity-75"
+                        ]
+                        [ Maybe.map ((+) 1) inav.index
+                            |> Maybe.map String.fromInt
+                            |> Maybe.withDefault ""
+                            |> text
+                        , text " / "
+                        , String.fromInt inav.length
+                            |> text
+                        ]
                     , B.genericButton
                         { label = ""
                         , icon = "fa fa-caret-right"
diff --git a/modules/webapp/src/main/elm/Data/ItemNav.elm b/modules/webapp/src/main/elm/Data/ItemNav.elm
index 6788f6ec..17537056 100644
--- a/modules/webapp/src/main/elm/Data/ItemNav.elm
+++ b/modules/webapp/src/main/elm/Data/ItemNav.elm
@@ -1,7 +1,43 @@
-module Data.ItemNav exposing (ItemNav)
+module Data.ItemNav exposing (ItemNav, fromList)
+
+import Api.Model.ItemLight exposing (ItemLight)
+import Api.Model.ItemLightList exposing (ItemLightList)
+import Util.List
 
 
 type alias ItemNav =
     { prev : Maybe String
     , next : Maybe String
+    , index : Maybe Int
+    , length : Int
+    }
+
+
+fromList : ItemLightList -> String -> ItemNav
+fromList list id =
+    let
+        all : List ItemLight
+        all =
+            List.concatMap .items list.groups
+
+        next =
+            Util.List.findNext (\i -> i.id == id) all
+                |> Maybe.map .id
+
+        prev =
+            Util.List.findPrev (\i -> i.id == id) all
+                |> Maybe.map .id
+
+        len =
+            List.length all
+
+        index : Maybe Int
+        index =
+            Util.List.findIndexed (.id >> (==) id) all
+                |> Maybe.map Tuple.second
+    in
+    { prev = prev
+    , next = next
+    , index = index
+    , length = len
     }
diff --git a/modules/webapp/src/main/elm/Page/Home/Data.elm b/modules/webapp/src/main/elm/Page/Home/Data.elm
index 39dcb7b2..b0bf156c 100644
--- a/modules/webapp/src/main/elm/Page/Home/Data.elm
+++ b/modules/webapp/src/main/elm/Page/Home/Data.elm
@@ -227,16 +227,7 @@ searchTypeString st =
 
 itemNav : String -> Model -> ItemNav
 itemNav id model =
-    let
-        prev =
-            Comp.ItemCardList.prevItem model.itemListModel id
-
-        next =
-            Comp.ItemCardList.nextItem model.itemListModel id
-    in
-    { prev = Maybe.map .id prev
-    , next = Maybe.map .id next
-    }
+    Data.ItemNav.fromList model.itemListModel.results id
 
 
 doSearchCmd : SearchParam -> Model -> Cmd Msg