2017-07-13 11:34:00 -04:00
|
|
|
module Update.Viewer exposing (getPrevNext, update)
|
2017-05-07 08:31:51 -04:00
|
|
|
|
2017-07-13 11:34:00 -04:00
|
|
|
import List.Extra exposing (elemIndex, getAt)
|
|
|
|
import Mastodon.Model exposing (..)
|
2017-05-07 08:31:51 -04:00
|
|
|
import Types exposing (..)
|
|
|
|
|
|
|
|
|
2017-07-13 11:34:00 -04:00
|
|
|
getPrevNext : Viewer -> ( Maybe Attachment, Maybe Attachment )
|
|
|
|
getPrevNext { attachments, attachment } =
|
|
|
|
let
|
|
|
|
index =
|
|
|
|
Maybe.withDefault -1 <| elemIndex attachment attachments
|
|
|
|
in
|
|
|
|
( getAt (index - 1) attachments, getAt (index + 1) attachments )
|
|
|
|
|
|
|
|
|
2017-05-07 08:31:51 -04:00
|
|
|
update : ViewerMsg -> Maybe Viewer -> ( Maybe Viewer, Cmd Msg )
|
|
|
|
update viewerMsg viewer =
|
|
|
|
case viewerMsg of
|
|
|
|
CloseViewer ->
|
|
|
|
Nothing ! []
|
|
|
|
|
|
|
|
OpenViewer attachments attachment ->
|
|
|
|
(Just <| Viewer attachments attachment) ! []
|
2017-07-13 11:34:00 -04:00
|
|
|
|
|
|
|
PrevAttachment ->
|
|
|
|
case viewer of
|
|
|
|
Just viewer ->
|
|
|
|
case getPrevNext viewer of
|
|
|
|
( Just prev, _ ) ->
|
|
|
|
(Just <| Viewer viewer.attachments prev) ! []
|
|
|
|
|
|
|
|
_ ->
|
|
|
|
Just viewer ! []
|
|
|
|
|
|
|
|
Nothing ->
|
|
|
|
viewer ! []
|
|
|
|
|
|
|
|
NextAttachment ->
|
|
|
|
case viewer of
|
|
|
|
Just viewer ->
|
|
|
|
case getPrevNext viewer of
|
|
|
|
( _, Just next ) ->
|
|
|
|
(Just <| Viewer viewer.attachments next) ! []
|
|
|
|
|
|
|
|
_ ->
|
|
|
|
Just viewer ! []
|
|
|
|
|
|
|
|
Nothing ->
|
|
|
|
viewer ! []
|