Share page skeleton

This commit is contained in:
eikek 2021-10-03 01:32:56 +02:00
parent aa21e7a74c
commit 97922340d9
10 changed files with 231 additions and 7 deletions

View File

@ -32,6 +32,7 @@ import Page.ManageData.Data
import Page.NewInvite.Data import Page.NewInvite.Data
import Page.Queue.Data import Page.Queue.Data
import Page.Register.Data import Page.Register.Data
import Page.Share.Data
import Page.Upload.Data import Page.Upload.Data
import Page.UserSettings.Data import Page.UserSettings.Data
import Url exposing (Url) import Url exposing (Url)
@ -52,6 +53,7 @@ type alias Model =
, uploadModel : Page.Upload.Data.Model , uploadModel : Page.Upload.Data.Model
, newInviteModel : Page.NewInvite.Data.Model , newInviteModel : Page.NewInvite.Data.Model
, itemDetailModel : Page.ItemDetail.Data.Model , itemDetailModel : Page.ItemDetail.Data.Model
, shareModel : Page.Share.Data.Model
, navMenuOpen : Bool , navMenuOpen : Bool
, userMenuOpen : Bool , userMenuOpen : Bool
, subs : Sub Msg , subs : Sub Msg
@ -85,6 +87,9 @@ init key url flags_ settings =
( loginm, loginc ) = ( loginm, loginc ) =
Page.Login.Data.init flags (Page.loginPageReferrer page) Page.Login.Data.init flags (Page.loginPageReferrer page)
( shm, shc ) =
Page.Share.Data.init (Page.shareId page) flags
homeViewMode = homeViewMode =
if settings.searchMenuVisible then if settings.searchMenuVisible then
Page.Home.Data.SearchView Page.Home.Data.SearchView
@ -106,6 +111,7 @@ init key url flags_ settings =
, uploadModel = Page.Upload.Data.emptyModel , uploadModel = Page.Upload.Data.emptyModel
, newInviteModel = Page.NewInvite.Data.emptyModel , newInviteModel = Page.NewInvite.Data.emptyModel
, itemDetailModel = Page.ItemDetail.Data.emptyModel , itemDetailModel = Page.ItemDetail.Data.emptyModel
, shareModel = shm
, navMenuOpen = False , navMenuOpen = False
, userMenuOpen = False , userMenuOpen = False
, subs = Sub.none , subs = Sub.none
@ -120,6 +126,7 @@ init key url flags_ settings =
, Cmd.map ManageDataMsg mdc , Cmd.map ManageDataMsg mdc
, Cmd.map CollSettingsMsg csc , Cmd.map CollSettingsMsg csc
, Cmd.map LoginMsg loginc , Cmd.map LoginMsg loginc
, Cmd.map ShareMsg shc
] ]
) )
@ -162,6 +169,7 @@ type Msg
| UploadMsg Page.Upload.Data.Msg | UploadMsg Page.Upload.Data.Msg
| NewInviteMsg Page.NewInvite.Data.Msg | NewInviteMsg Page.NewInvite.Data.Msg
| ItemDetailMsg Page.ItemDetail.Data.Msg | ItemDetailMsg Page.ItemDetail.Data.Msg
| ShareMsg Page.Share.Data.Msg
| Logout | Logout
| LogoutResp (Result Http.Error ()) | LogoutResp (Result Http.Error ())
| SessionCheckResp (Result Http.Error AuthResult) | SessionCheckResp (Result Http.Error AuthResult)

View File

@ -34,6 +34,8 @@ import Page.Queue.Data
import Page.Queue.Update import Page.Queue.Update
import Page.Register.Data import Page.Register.Data
import Page.Register.Update import Page.Register.Update
import Page.Share.Data
import Page.Share.Update
import Page.Upload.Data import Page.Upload.Data
import Page.Upload.Update import Page.Upload.Update
import Page.UserSettings.Data import Page.UserSettings.Data
@ -114,6 +116,9 @@ updateWithSub msg model =
HomeMsg lm -> HomeMsg lm ->
updateHome lm model updateHome lm model
ShareMsg lm ->
updateShare lm model
LoginMsg lm -> LoginMsg lm ->
updateLogin lm model updateLogin lm model
@ -313,6 +318,23 @@ applyClientSettings model settings =
{ model | uiSettings = settings } { model | uiSettings = settings }
updateShare : Page.Share.Data.Msg -> Model -> ( Model, Cmd Msg, Sub Msg )
updateShare lmsg model =
case Page.shareId model.page of
Just id ->
let
result =
Page.Share.Update.update model.flags id lmsg model.shareModel
in
( { model | shareModel = result.model }
, Cmd.map ShareMsg result.cmd
, Sub.map ShareMsg result.sub
)
Nothing ->
( model, Cmd.none, Sub.none )
updateItemDetail : Page.ItemDetail.Data.Msg -> Model -> ( Model, Cmd Msg, Sub Msg ) updateItemDetail : Page.ItemDetail.Data.Msg -> Model -> ( Model, Cmd Msg, Sub Msg )
updateItemDetail lmsg model = updateItemDetail lmsg model =
let let
@ -568,3 +590,6 @@ initPage model_ page =
, updateQueue Page.Queue.Data.StopRefresh , updateQueue Page.Queue.Data.StopRefresh
] ]
model model
SharePage _ ->
( model, Cmd.none, Sub.none )

View File

@ -27,6 +27,7 @@ import Page.ManageData.View2 as ManageData
import Page.NewInvite.View2 as NewInvite import Page.NewInvite.View2 as NewInvite
import Page.Queue.View2 as Queue import Page.Queue.View2 as Queue
import Page.Register.View2 as Register import Page.Register.View2 as Register
import Page.Share.View as Share
import Page.Upload.View2 as Upload import Page.Upload.View2 as Upload
import Page.UserSettings.View2 as UserSettings import Page.UserSettings.View2 as UserSettings
import Styles as S import Styles as S
@ -41,14 +42,10 @@ view model =
topNavbar : Model -> Html Msg topNavbar : Model -> Html Msg
topNavbar model = topNavbar model =
case model.flags.account of case Data.Flags.getAccount model.flags of
Just acc -> Just acc ->
if acc.success then
topNavUser acc model topNavUser acc model
else
topNavAnon model
Nothing -> Nothing ->
topNavAnon model topNavAnon model
@ -86,7 +83,16 @@ topNavAnon model =
[ id "top-nav" [ id "top-nav"
, class styleTopNav , class styleTopNav
] ]
[ headerNavItem model [ B.genericButton
{ label = ""
, icon = "fa fa-bars"
, handler = onClick ToggleSidebar
, disabled = not (Page.hasSidebar model.page)
, attrs = [ href "#" ]
, baseStyle = "font-bold inline-flex items-center px-4 py-2"
, activeStyle = "hover:bg-blue-200 dark:hover:bg-bluegray-800 w-12"
}
, headerNavItem model
, div [ class "flex flex-grow justify-end" ] , div [ class "flex flex-grow justify-end" ]
[ langMenu model [ langMenu model
, a , a
@ -157,6 +163,9 @@ mainContent model =
ItemDetailPage id -> ItemDetailPage id ->
viewItemDetail texts id model viewItemDetail texts id model
SharePage id ->
viewShare texts id model
) )
@ -411,6 +420,24 @@ dropdownMenu =
" absolute right-0 bg-white dark:bg-bluegray-800 border dark:border-bluegray-700 dark:text-bluegray-300 shadow-lg opacity-1 transition duration-200 min-w-max " " absolute right-0 bg-white dark:bg-bluegray-800 border dark:border-bluegray-700 dark:text-bluegray-300 shadow-lg opacity-1 transition duration-200 min-w-max "
viewShare : Messages -> String -> Model -> List (Html Msg)
viewShare texts shareId model =
[ Html.map ShareMsg
(Share.viewSidebar texts.share
model.sidebarVisible
model.flags
model.uiSettings
model.shareModel
)
, Html.map ShareMsg
(Share.viewContent texts.share
model.flags
model.uiSettings
model.shareModel
)
]
viewHome : Messages -> Model -> List (Html Msg) viewHome : Messages -> Model -> List (Html Msg)
viewHome texts model = viewHome texts model =
[ Html.map HomeMsg [ Html.map HomeMsg

View File

@ -9,7 +9,9 @@ module Data.Flags exposing
( Config ( Config
, Flags , Flags
, accountString , accountString
, getAccount
, getToken , getToken
, isAuthenticated
, withAccount , withAccount
, withoutAccount , withoutAccount
) )
@ -43,6 +45,24 @@ type alias Flags =
} }
isAuthenticated : Flags -> Bool
isAuthenticated flags =
getAccount flags /= Nothing
getAccount : Flags -> Maybe AuthResult
getAccount flags =
Maybe.andThen
(\ar ->
if ar.success then
Just ar
else
Nothing
)
flags.account
getToken : Flags -> Maybe String getToken : Flags -> Maybe String
getToken flags = getToken flags =
flags.account flags.account

View File

@ -21,6 +21,7 @@ import Messages.Page.ManageData
import Messages.Page.NewInvite import Messages.Page.NewInvite
import Messages.Page.Queue import Messages.Page.Queue
import Messages.Page.Register import Messages.Page.Register
import Messages.Page.Share
import Messages.Page.Upload import Messages.Page.Upload
import Messages.Page.UserSettings import Messages.Page.UserSettings
import Messages.UiLanguage exposing (UiLanguage(..)) import Messages.UiLanguage exposing (UiLanguage(..))
@ -44,6 +45,7 @@ type alias Messages =
, userSettings : Messages.Page.UserSettings.Texts , userSettings : Messages.Page.UserSettings.Texts
, manageData : Messages.Page.ManageData.Texts , manageData : Messages.Page.ManageData.Texts
, home : Messages.Page.Home.Texts , home : Messages.Page.Home.Texts
, share : Messages.Page.Share.Texts
} }
@ -109,6 +111,7 @@ gb =
, userSettings = Messages.Page.UserSettings.gb , userSettings = Messages.Page.UserSettings.gb
, manageData = Messages.Page.ManageData.gb , manageData = Messages.Page.ManageData.gb
, home = Messages.Page.Home.gb , home = Messages.Page.Home.gb
, share = Messages.Page.Share.gb
} }
@ -129,4 +132,5 @@ de =
, userSettings = Messages.Page.UserSettings.de , userSettings = Messages.Page.UserSettings.de
, manageData = Messages.Page.ManageData.de , manageData = Messages.Page.ManageData.de
, home = Messages.Page.Home.de , home = Messages.Page.Home.de
, share = Messages.Page.Share.de
} }

View File

@ -0,0 +1,22 @@
{-
Copyright 2020 Eike K. & Contributors
SPDX-License-Identifier: AGPL-3.0-or-later
-}
module Messages.Page.Share exposing (..)
type alias Texts =
{}
gb : Texts
gb =
{}
de : Texts
de =
{}

View File

@ -21,6 +21,7 @@ module Page exposing
, pageName , pageName
, pageToString , pageToString
, set , set
, shareId
, uploadId , uploadId
) )
@ -59,6 +60,7 @@ type Page
| UploadPage (Maybe String) | UploadPage (Maybe String)
| NewInvitePage | NewInvitePage
| ItemDetailPage String | ItemDetailPage String
| SharePage String
isSecured : Page -> Bool isSecured : Page -> Bool
@ -94,6 +96,9 @@ isSecured page =
ItemDetailPage _ -> ItemDetailPage _ ->
True True
SharePage _ ->
False
{-| Currently, all secured pages have a sidebar, except UploadPage. {-| Currently, all secured pages have a sidebar, except UploadPage.
-} -}
@ -103,6 +108,9 @@ hasSidebar page =
UploadPage _ -> UploadPage _ ->
False False
SharePage _ ->
True
_ -> _ ->
isSecured page isSecured page
@ -160,6 +168,9 @@ pageName page =
ItemDetailPage _ -> ItemDetailPage _ ->
"Item" "Item"
SharePage _ ->
"Share"
loginPageReferrer : Page -> LoginData loginPageReferrer : Page -> LoginData
loginPageReferrer page = loginPageReferrer page =
@ -171,6 +182,16 @@ loginPageReferrer page =
emptyLoginData emptyLoginData
shareId : Page -> Maybe String
shareId page =
case page of
SharePage id ->
Just id
_ ->
Nothing
uploadId : Page -> Maybe String uploadId : Page -> Maybe String
uploadId page = uploadId page =
case page of case page of
@ -224,6 +245,9 @@ pageToString page =
ItemDetailPage id -> ItemDetailPage id ->
"/app/item/" ++ id "/app/item/" ++ id
SharePage id ->
"/app/share/" ++ id
pageFromString : String -> Maybe Page pageFromString : String -> Maybe Page
pageFromString str = pageFromString str =
@ -280,6 +304,7 @@ parser =
, Parser.map (UploadPage Nothing) (s pathPrefix </> s "upload") , Parser.map (UploadPage Nothing) (s pathPrefix </> s "upload")
, Parser.map NewInvitePage (s pathPrefix </> s "newinvite") , Parser.map NewInvitePage (s pathPrefix </> s "newinvite")
, Parser.map ItemDetailPage (s pathPrefix </> s "item" </> string) , Parser.map ItemDetailPage (s pathPrefix </> s "item" </> string)
, Parser.map SharePage (s pathPrefix </> s "share" </> string)
] ]

View File

@ -0,0 +1,32 @@
{-
Copyright 2020 Eike K. & Contributors
SPDX-License-Identifier: AGPL-3.0-or-later
-}
module Page.Share.Data exposing (Model, Msg, init)
import Data.Flags exposing (Flags)
type alias Model =
{}
init : Maybe String -> Flags -> ( Model, Cmd Msg )
init shareId flags =
case shareId of
Just id ->
let
_ =
Debug.log "share" id
in
( {}, Cmd.none )
Nothing ->
( {}, Cmd.none )
type Msg
= Msg

View File

@ -0,0 +1,23 @@
{-
Copyright 2020 Eike K. & Contributors
SPDX-License-Identifier: AGPL-3.0-or-later
-}
module Page.Share.Update exposing (UpdateResult, update)
import Data.Flags exposing (Flags)
import Page.Share.Data exposing (..)
type alias UpdateResult =
{ model : Model
, cmd : Cmd Msg
, sub : Sub Msg
}
update : Flags -> String -> Msg -> Model -> UpdateResult
update flags shareId msg model =
UpdateResult model Cmd.none Sub.none

View File

@ -0,0 +1,38 @@
{-
Copyright 2020 Eike K. & Contributors
SPDX-License-Identifier: AGPL-3.0-or-later
-}
module Page.Share.View exposing (viewContent, viewSidebar)
import Data.Flags exposing (Flags)
import Data.UiSettings exposing (UiSettings)
import Html exposing (..)
import Html.Attributes exposing (..)
import Messages.Page.Share exposing (Texts)
import Page.Share.Data exposing (..)
import Styles as S
viewSidebar : Texts -> Bool -> Flags -> UiSettings -> Model -> Html Msg
viewSidebar _ visible _ _ _ =
div
[ id "sidebar"
, classList [ ( "hidden", not visible ) ]
]
[ text "sidebar" ]
viewContent : Texts -> Flags -> UiSettings -> Model -> Html Msg
viewContent texts flags _ model =
div
[ id "content"
, class "h-full flex flex-col"
, class S.content
]
[ h1 [ class S.header1 ]
[ text "Share Page!"
]
]