Skip to content

Commit a6c955a

Browse files
committed
Component generation bug fixes, adding feliz constructors for union cases
1 parent fee8952 commit a6c955a

File tree

6 files changed

+76
-8
lines changed

6 files changed

+76
-8
lines changed

.idea/.idea.Dash.NET/.idea/.gitignore

+13
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/.idea.Dash.NET/.idea/encodings.xml

+4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/.idea.Dash.NET/.idea/indexLayout.xml

+8
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/.idea.Dash.NET/.idea/vcs.xml

+6
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Dash.NET.ComponentGeneration/ASTGeneration.fs

+39-6
Original file line numberDiff line numberDiff line change
@@ -350,11 +350,11 @@ let createComponentAST (log: Core.Logger) (parameters: ComponentParameters) =
350350
|||> List.zip3
351351
|> List.map (fun (psafe, pname, prop) ->
352352
let pConvert =
353-
match prop.propType with
353+
match prop.propType |> Option.map SafeReactPropType.unwrapObjectOf with
354354
| Some (Array _)
355355
| Some (Bool _)
356356
| Some (Number _)
357-
| Some (String _)->
357+
| Some (String _) ->
358358
SynExpr.CreateIdentString "p"
359359

360360
| Some (Object _)
@@ -422,10 +422,43 @@ let createComponentAST (log: Core.Logger) (parameters: ComponentParameters) =
422422
let propTypeName =
423423
SafeReactPropType.tryGetFSharpTypeName ptype
424424
|> Option.defaultValue ([ptname])
425-
functionPattern pname [("p", appType propTypeName)]
426-
|> binding (application [ SynExpr.CreateIdentString "Prop"; application [SynExpr.CreateIdentString psafe; SynExpr.CreateIdentString "p"] |> SynExpr.CreateParen])
427-
|> withXMLDocLet (prop |> generateComponentPropDescription |> toXMLDoc)
428-
|> SynMemberDefn.CreateStaticMember))
425+
426+
match ptype |> SafeReactPropType.unwrapObjectOf with
427+
| Union (_, Some utypes)
428+
| FlowUnion (_, Some utypes) ->
429+
utypes
430+
|> List.indexed
431+
|> List.map (fun (i, case) ->
432+
let caseTypeName =
433+
case
434+
|> SafeReactPropType.tryGetFSharpTypeName
435+
|> Option.defaultValue ([sprintf "%sCase%dType" ptname i])
436+
437+
let caseName =
438+
caseTypeName
439+
|> List.rev
440+
|> List.map String.toPascalCase
441+
|> List.reduce (sprintf "%s%s")
442+
443+
functionPattern pname [("p", appType caseTypeName)]
444+
|> binding
445+
( application
446+
[ SynExpr.CreateIdentString "Prop"
447+
application
448+
[ SynExpr.CreateIdentString psafe
449+
application
450+
[ SynExpr.CreateLongIdent (LongIdentWithDots.Create [ ptname; caseName ])
451+
SynExpr.CreateIdentString "p"] |> SynExpr.CreateParen ] |> SynExpr.CreateParen ])
452+
|> withXMLDocLet (prop |> generateComponentPropDescription |> toXMLDoc)
453+
|> SynMemberDefn.CreateStaticMember)
454+
455+
| _ ->
456+
functionPattern pname [("p", appType propTypeName)]
457+
|> binding (application [ SynExpr.CreateIdentString "Prop"; application [SynExpr.CreateIdentString psafe; SynExpr.CreateIdentString "p"] |> SynExpr.CreateParen ])
458+
|> withXMLDocLet (prop |> generateComponentPropDescription |> toXMLDoc)
459+
|> SynMemberDefn.CreateStaticMember
460+
|> List.singleton))
461+
|> List.concat
429462

430463
// static member children(value: int) = Children([ Html.Html.text value ])
431464
// static member children(value: string) = Children([ Html.Html.text value ])

src/Dash.NET.ComponentGeneration/ReactMetadata.fs

+6-2
Original file line numberDiff line numberDiff line change
@@ -126,8 +126,13 @@ type SafeReactPropType =
126126
// A type we can't process
127127
| Other of name: string * props: SafeReactPropProps * value: string option
128128

129-
static member tryGetFSharpTypeName (from: SafeReactPropType) =
129+
static member unwrapObjectOf (from: SafeReactPropType) =
130130
match from with
131+
| ObjectOf (_, Some newFrom) -> newFrom
132+
| _ -> from
133+
134+
static member tryGetFSharpTypeName (from: SafeReactPropType) =
135+
match from |> SafeReactPropType.unwrapObjectOf with
131136
| Array _ -> Some ["list"; "obj"]
132137
| Bool _ -> Some ["bool"]
133138
| Number _ -> Some ["IConvertible"]
@@ -148,7 +153,6 @@ type SafeReactPropType =
148153
| FlowArray _
149154
| FlowObject _ -> None
150155

151-
152156
// A type we can't process
153157
| Other _ -> Some ["obj"]
154158

0 commit comments

Comments
 (0)