@@ -3,17 +3,17 @@ module FillInTheGaps where
33import Prelude
44
55import Data.Array as A
6−import Data.Maybe (Maybe(..), fromMaybe)
6+import Data.Maybe (fromMaybe)
77import Data.String (Pattern(..), split)
88import Data.Tuple.Nested ((/\))
99import Effect (Effect)
10−import Effect.Unsafe (unsafePerformEffect)
1110import Justifill (justifill)
1211import Partial.Unsafe (unsafeCrashWith)
1312import React.Basic (JSX, ReactComponent, element)
1413import React.Basic.DOM as R
15−import React.Basic.Hooks (ReactChildren, componentWithChildren, reactChildrenToArray, useState)
14+import React.Basic.Hooks (component, useState)
1615import React.Basic.Hooks as React
16+import Yoga.Helpers (intersperse)
1717import Yoga.InlineCode.Component as InlineCode
1818
1919data Segment = Filler String | Hole String
@@ -36,19 +36,17 @@ updateLine idx v arr = fromMaybe [] (A.modifyAt idx f arr)
3636 Filler s -> unsafeCrashWith "Updated a filler"
3737 Hole _ -> Hole v
3838
39−
40−fillInTheGaps :: ReactComponent { children :: ReactChildren String }
41−fillInTheGaps = unsafePerformEffect do
39+mkFillInTheGaps :: Effect (ReactComponent { code :: String })
40+mkFillInTheGaps = do
4241 ic <- InlineCode.makeComponent
43− componentWithChildren "InlineCodeWithChildren" \{ children } -> React.do
42+ component "FillInTheGaps" \{ code } -> React.do
4443 let
4544 separator = "???"
46− child = children # reactChildrenToArray # A.head # fromMaybe "gurki"
47− lines = split (Pattern "\n") child
48− rawSegments = split (Pattern separator)
45+ lines = split (Pattern "\n") code
46+ rawSegments = split (Pattern separator) >>> intersperse separator
4947 toSegment = case _ of
5048 x | x == separator -> Hole ""
5149 other -> Filler other
5250 initialSegments = lines <#> \line -> rawSegments line <#> toSegment
53− (segments :: Array (Array Segment)) /\ modifySegments <- useState initialSegments
51+ segments /\ modifySegments <- useState initialSegments
5452 pure $ renderSegments ic (modifySegments) segments