1module Container.Component where
4import Container.Header (mkHeader)
5import Container.Landing (mkLandingPage)
6import Container.Sidebar (mkSidebar, mkSidebarLink)
7import Data.Nullable as Nullable
9import JSS (jss, jssClasses)
10import Milkis.Impl.Window (windowFetch)
11import React.Basic (JSX)
12import React.Basic.DOM as R
13import React.Basic.Hooks (ReactComponent, component, element, useRef, useState, (/\))
14import React.Basic.Hooks as React
15import Yoga.CompileEditor.Component (mkCompileEditor)
16import Yoga.Compiler.Api (apiCompiler)
17import Yoga.Polyfill.SmoothScrolling (smoothScrollPolyfill)
18import Yoga.SVG.Icon (appendIcon, applyflippedIcon, bindIcon, mapIcon)
19import Yoga.Theme.Provider (mkThemeProvider)
20import Yoga.Theme.Styles (makeStylesJSS)
21import Yoga.Theme.Types (CSSTheme)
23mkContainer ∷ Effect (ReactComponent { theme ∷ CSSTheme, kids ∷ Array JSX })
25 themeProvider <- mkThemeProvider
26 containerContent <- mkContainerContent
27 component "Container" \{ theme, kids } -> React.do
29 $ element themeProvider
32 [ element containerContent { kids }
36mkContainerContent ∷ Effect (ReactComponent { kids ∷ Array JSX })
37mkContainerContent = do
41 $ jssClasses \(theme ∷ CSSTheme) ->
44 { color: theme.textColour
46 , flexDirection: "column"
52 { backgroundColor: theme.backgroundColour
54 , minHeight: "calc(100vh - 40px)"
55 , paddingLeft: "100px"
58 , icon: jss { fill: theme.textColour }
60 landingPage <- mkLandingPage
63 sidebarLink <- mkSidebarLink
64 editor <- mkCompileEditor (apiCompiler windowFetch)
65 component "ContainerContent" \{ kids } -> React.do
66 classes <- useStyles {}
67 collapsed /\ modifyCollapsed <- useState true
68 editorRef <- useRef Nullable.null
71 { className: classes.container
73 [ element landingPage {}
78 [ element sidebarLink { name: "Learn", icon: element appendIcon {}, collapsed }
79 , element sidebarLink { name: "Try", icon: element bindIcon {}, collapsed }
80 , element sidebarLink { name: "Share", icon: element applyflippedIcon {}, collapsed }
81 , element sidebarLink { name: "Jobs", icon: element mapIcon {}, collapsed }
85 { className: classes.content
86 , children: [ element editor { initialCode, height: "50vh", language: "purescript" } ] <> kids
98main = log "Let's do this!""""
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list