|
1 | | -module Lumi.Components where |
| 1 | +module Lumi.Components |
| 2 | + ( LumiProps |
| 3 | + , PropsModifier |
| 4 | + , propsModifier |
| 5 | + , LumiComponent |
| 6 | + , lumiComponent |
| 7 | + , lumiComponentFromHook |
| 8 | + , lumiElement |
| 9 | + ) where |
2 | 10 |
|
3 | 11 | import Prelude |
4 | 12 | import Data.String (toLower) |
5 | 13 | import Effect (Effect) |
6 | 14 | import Lumi.Styles.Theme (LumiTheme) |
7 | 15 | import Prim.Row (class Lacks) |
8 | 16 | import React.Basic.Emotion as Emotion |
9 | | -import React.Basic.Hooks (JSX, ReactComponent, Render, component, element) |
| 17 | +import React.Basic.Hooks (JSX, ReactComponent, Render, component, componentFromHook, element) |
10 | 18 | import Record.Unsafe.Union (unsafeUnion) |
11 | 19 |
|
12 | 20 | type LumiProps props |
@@ -46,9 +54,31 @@ lumiComponent name defaults render = do |
46 | 54 | { name |
47 | 55 | , component: c |
48 | 56 | , defaults |
49 | | - , className: "lumi-component lumi-" <> toLower name |
| 57 | + , className: lumiComponentClassName name |
50 | 58 | } |
51 | 59 |
|
| 60 | +lumiComponentFromHook :: |
| 61 | + forall hooks props r. |
| 62 | + Lacks "children" props => |
| 63 | + Lacks "key" props => |
| 64 | + Lacks "ref" props => |
| 65 | + String -> |
| 66 | + { render :: r -> JSX | props } -> |
| 67 | + (LumiProps ( render :: r -> JSX | props ) -> Render Unit hooks r) -> |
| 68 | + Effect (LumiComponent ( render :: r -> JSX | props )) |
| 69 | +lumiComponentFromHook name defaults propsToHook = do |
| 70 | + c <- componentFromHook name propsToHook |
| 71 | + pure |
| 72 | + $ LumiComponent |
| 73 | + { name |
| 74 | + , component: c |
| 75 | + , defaults |
| 76 | + , className: lumiComponentClassName name |
| 77 | + } |
| 78 | + |
| 79 | +lumiComponentClassName :: String -> String |
| 80 | +lumiComponentClassName name = "lumi-component lumi-" <> toLower name |
| 81 | + |
52 | 82 | -- | Render a `LumiComponent`. Similar to `React.Basic.element`, except the second argument |
53 | 83 | -- | is an update function rather than a plain record for props. This helps reduce |
54 | 84 | -- | the surface area for API updates: |
|
0 commit comments