Skip to content
This repository was archived by the owner on Jul 19, 2022. It is now read-only.

Commit 00fdbbd

Browse files
committed
Add Catalog Route and render Catalog page
Add a new Catalog Route to render the Catalog page on /catalog (this is intended to eventually be the front page of Unison Share)
1 parent cb13e9a commit 00fdbbd

File tree

6 files changed

+104
-40
lines changed

6 files changed

+104
-40
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
"scripts": {
1010
"build": "webpack --mode production --config webpack.prod.js",
1111
"clean": "rm -rf dist",
12-
"start": "webpack serve --mode development --port 1234 --config webpack.dev.js",
12+
"start": "echo 'Please use either `npm run start:unisonLocal` or `npm run start:unisonShare`'",
1313
"start:unisonLocal": "webpack serve --mode development --port 1234 --config webpack.unisonLocal.dev.js",
1414
"start:unisonShare": "webpack serve --mode development --port 1234 --config webpack.unisonShare.dev.js",
1515
"test": "elm-test",

src/Project.elm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ type alias Project a =
1414

1515

1616
type alias ProjectListing =
17-
Project ()
17+
Project {}
1818

1919

2020
decodeList : Decode.Decoder (List ProjectListing)

src/UnisonShare/App.elm

Lines changed: 46 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import UI.Page as Page
2828
import UI.Sidebar as Sidebar
2929
import UI.Tooltip as Tooltip
3030
import UnisonShare.AppModal as AppModal
31+
import UnisonShare.Page.Catalog as Catalog
3132
import UnisonShare.Route as Route exposing (Route)
3233
import Url exposing (Url)
3334
import Workspace
@@ -44,6 +45,7 @@ type alias Model =
4445
, codebaseTree : CodebaseTree.Model
4546
, workspace : Workspace.Model
4647
, perspectiveLanding : PerspectiveLanding.Model
48+
, catalog : Catalog.Model
4749
, appModal : AppModal.Model
4850
, keyboardShortcut : KeyboardShortcut.Model
4951
, env : Env
@@ -74,6 +76,9 @@ init env route navKey =
7476
|> Maybe.map (Api.perform env.apiBasePath)
7577
|> Maybe.withDefault Cmd.none
7678

79+
( catalog, _ ) =
80+
Catalog.init env
81+
7782
model =
7883
{ navKey = navKey
7984
, route = route
@@ -84,6 +89,7 @@ init env route navKey =
8489
, keyboardShortcut = KeyboardShortcut.init env.operatingSystem
8590
, env = env
8691
, sidebarToggled = False
92+
, catalog = catalog
8793
}
8894
in
8995
( model
@@ -110,6 +116,7 @@ type Msg
110116
| ToggleSidebar
111117
-- sub msgs
112118
| AppModalMsg AppModal.Msg
119+
| CatalogMsg Catalog.Msg
113120
| WorkspaceMsg Workspace.Msg
114121
| PerspectiveLandingMsg PerspectiveLanding.Msg
115122
| CodebaseTreeMsg CodebaseTree.Msg
@@ -134,6 +141,13 @@ update msg ({ env } as model) =
134141
{ env | perspective = Perspective.nextFromParams env.perspective params }
135142
in
136143
case route of
144+
Route.Catalog ->
145+
let
146+
( catalog, cmd ) =
147+
Catalog.init model.env
148+
in
149+
( { model | catalog = catalog }, Cmd.map CatalogMsg cmd )
150+
137151
Route.Definition params ref ->
138152
let
139153
( workspace, cmd ) =
@@ -204,6 +218,13 @@ update msg ({ env } as model) =
204218
in
205219
( newModel, Cmd.batch [ Cmd.map AppModalMsg amCmd, cmd ] )
206220

221+
CatalogMsg cMsg ->
222+
let
223+
( catalog, cmd ) =
224+
Catalog.update cMsg model.catalog
225+
in
226+
( { model | catalog = catalog }, Cmd.map CatalogMsg cmd )
227+
207228
WorkspaceMsg wMsg ->
208229
let
209230
( workspace, wCmd, outMsg ) =
@@ -646,30 +667,45 @@ viewAppError error =
646667
view : Model -> Browser.Document Msg
647668
view model =
648669
let
649-
pageContent =
670+
appHeader =
671+
viewAppHeader model
672+
673+
withSidebar pageContent =
674+
Page.SidebarLayout
675+
{ header = viewAppHeader model
676+
, sidebar = viewMainSidebar model
677+
, sidebarToggled = model.sidebarToggled
678+
, content = Page.PageContent [ pageContent ]
679+
}
680+
681+
page =
650682
case model.route of
683+
Route.Catalog ->
684+
let
685+
( m, _ ) =
686+
Catalog.init model.env
687+
in
688+
-- Html.map CatalogMsg (Catalog.view appHeader m)
689+
Catalog.view appHeader m
690+
651691
Route.Perspective _ ->
652692
Html.map PerspectiveLandingMsg
653693
(PerspectiveLanding.view
654694
model.env
655695
model.perspectiveLanding
656696
)
697+
|> withSidebar
698+
|> Page.view
657699

658700
Route.Definition _ _ ->
659701
Html.map WorkspaceMsg (Workspace.view model.workspace)
660-
661-
page =
662-
Page.SidebarLayout
663-
{ header = viewAppHeader model
664-
, sidebar = viewMainSidebar model
665-
, sidebarToggled = model.sidebarToggled
666-
, content = Page.PageContent [ pageContent ]
667-
}
702+
|> withSidebar
703+
|> Page.view
668704
in
669705
{ title = "Unison Share"
670706
, body =
671707
[ div [ id "app" ]
672-
[ Page.view page
708+
[ page
673709
, Html.map AppModalMsg (AppModal.view model.env model.appModal)
674710
]
675711
]

src/UnisonShare/Page/Catalog.elm

Lines changed: 12 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ import Http
99
import Project exposing (ProjectListing)
1010
import RemoteData exposing (RemoteData(..), WebData)
1111
import UI
12+
import UI.AppHeader exposing (AppHeader)
13+
import UI.Page as Page exposing (Page)
1214

1315

1416

@@ -88,22 +90,13 @@ projectsToCatalog _ =
8890
-- VIEW
8991

9092

91-
viewLoaded : LoadedModel -> Html Msg
92-
viewLoaded _ =
93-
div [] [ text "Catalog" ]
94-
95-
96-
view : Model -> Html Msg
97-
view model =
98-
case model of
99-
NotAsked ->
100-
UI.nothing
101-
102-
Loading ->
103-
UI.nothing
104-
105-
Failure _ ->
106-
div [ class "" ] [ text "Error..." ]
107-
108-
Success m ->
109-
viewLoaded m
93+
view : AppHeader msg -> Model -> Html msg
94+
view appHeader _ =
95+
let
96+
page =
97+
Page.FullLayout
98+
{ header = appHeader
99+
, content = Page.PageContent [ div [] [ text "Catalog" ] ]
100+
}
101+
in
102+
Page.view page

src/UnisonShare/PreApp.elm

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,16 @@ init flags url navKey =
3232
route =
3333
Route.fromUrl flags.basePath url
3434

35+
perspectiveParams =
36+
route
37+
|> Route.perspectiveParams
38+
|> Maybe.withDefault (Perspective.ByCodebase Perspective.Relative)
39+
3540
preEnv =
3641
{ flags = flags
3742
, route = route
3843
, navKey = navKey
39-
, perspectiveParams = Route.perspectiveParams route
44+
, perspectiveParams = perspectiveParams
4045
}
4146

4247
perspectiveToAppInit perspective =

src/UnisonShare/Route.elm

Lines changed: 38 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import HashQualified exposing (HashQualified(..))
2222
import List.Nonempty as NEL
2323
import Parser exposing ((|.), (|=), Parser, end, oneOf, succeed)
2424
import Perspective exposing (CodebasePerspectiveParam(..), PerspectiveParams(..))
25-
import Route.Parsers as RP exposing (b, reference, slash)
25+
import Route.Parsers as RP exposing (b, reference, s, slash)
2626
import Url exposing (Url)
2727
import Url.Builder exposing (relative)
2828

@@ -72,13 +72,17 @@ import Url.Builder exposing (relative)
7272

7373

7474
type Route
75-
= Perspective PerspectiveParams
75+
= Catalog
76+
| Perspective PerspectiveParams
7677
| Definition PerspectiveParams Reference
7778

7879

7980
updatePerspectiveParams : Route -> PerspectiveParams -> Route
8081
updatePerspectiveParams route params =
8182
case route of
83+
Catalog ->
84+
Catalog
85+
8286
Perspective _ ->
8387
Perspective params
8488

@@ -90,6 +94,11 @@ updatePerspectiveParams route params =
9094
-- PARSER ---------------------------------------------------------------------
9195

9296

97+
catalog : Parser Route
98+
catalog =
99+
succeed Catalog |. slash |. s "catalog"
100+
101+
93102
perspective : Parser Route
94103
perspective =
95104
succeed Perspective |. slash |= RP.perspectiveParams |. end
@@ -102,7 +111,7 @@ definition =
102111

103112
toRoute : Parser Route
104113
toRoute =
105-
oneOf [ b perspective, b definition ]
114+
oneOf [ b catalog, b perspective, b definition ]
106115

107116

108117
{-| In environments like Unison Local, the UI is served with a base path
@@ -151,14 +160,17 @@ fromUrl basePath url =
151160
-- HELPERS --------------------------------------------------------------------
152161

153162

154-
perspectiveParams : Route -> PerspectiveParams
163+
perspectiveParams : Route -> Maybe PerspectiveParams
155164
perspectiveParams route =
156165
case route of
166+
Catalog ->
167+
Nothing
168+
157169
Perspective nsRef ->
158-
nsRef
170+
Just nsRef
159171

160172
Definition nsRef _ ->
161-
nsRef
173+
Just nsRef
162174

163175

164176

@@ -167,7 +179,13 @@ perspectiveParams route =
167179

168180
toDefinition : Route -> Reference -> Route
169181
toDefinition oldRoute ref =
170-
Definition (perspectiveParams oldRoute) ref
182+
let
183+
params =
184+
oldRoute
185+
|> perspectiveParams
186+
|> Maybe.withDefault (ByCodebase Relative)
187+
in
188+
Definition params ref
171189

172190

173191
toUrlString : Route -> String
@@ -217,6 +235,9 @@ toUrlString route =
217235

218236
path =
219237
case route of
238+
Catalog ->
239+
[ "catalog" ]
240+
220241
Perspective pp ->
221242
perspectiveParamsToPath pp False
222243

@@ -255,7 +276,13 @@ navigateToPerspective navKey perspectiveParams_ =
255276

256277
navigateToCurrentPerspective : Nav.Key -> Route -> Cmd msg
257278
navigateToCurrentPerspective navKey oldRoute =
258-
navigateToPerspective navKey (perspectiveParams oldRoute)
279+
let
280+
params =
281+
oldRoute
282+
|> perspectiveParams
283+
|> Maybe.withDefault (ByCodebase Relative)
284+
in
285+
navigateToPerspective navKey params
259286

260287

261288
navigateToLatestCodebase : Nav.Key -> Cmd msg
@@ -273,6 +300,9 @@ replacePerspective navKey perspectiveParams_ oldRoute =
273300
let
274301
newRoute =
275302
case oldRoute of
303+
Catalog ->
304+
Catalog
305+
276306
Perspective _ ->
277307
Perspective perspectiveParams_
278308

0 commit comments

Comments
 (0)