Skip to content

Commit 10e2e1b

Browse files
committed
Merge branch 'develop'
2 parents bfb61d2 + 66314a0 commit 10e2e1b

File tree

7 files changed

+58
-24
lines changed

7 files changed

+58
-24
lines changed

examples/TodoList/src/App.fs

+19-4
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,29 @@ module App
22

33
open Oxpecker.Solid
44
open Components
5+
open Oxpecker.Solid.Router
56

67
[<SolidComponent>]
78
let App() : HtmlElement =
8-
TodoList()
9-
//TodoListStore()
9+
div(){
10+
TodoList()
11+
//TodoListStore()
12+
br()
13+
br()
14+
A(href="/about", class'="block text-right") {
15+
"About"
16+
}
17+
}
1018

1119
[<SolidComponent>]
1220
let About() : HtmlElement =
13-
h1() {
14-
"TodoList example made with Oxpecker.Solid!"
21+
Fragment() {
22+
h1() {
23+
"TodoList example made with Oxpecker.Solid!"
24+
}
25+
br()
26+
br()
27+
A(href="/", class'="block text-right") {
28+
"Back"
29+
}
1530
}

src/Oxpecker.Solid.FablePlugin/Library.fs

+16-11
Original file line numberDiff line numberDiff line change
@@ -25,17 +25,22 @@ module internal rec AST =
2525
let (|CallTag|_|) condition =
2626
function
2727
| Call(Import(importInfo, LambdaType(_, DeclaredType(typ, _)), _), callInfo, _, range) when condition importInfo ->
28-
let tagName = typ.FullName.Split('.') |> Seq.last
29-
let finalTagName =
30-
if tagName = "Fragment" then
31-
""
32-
elif tagName.EndsWith("'") then
33-
tagName.Substring(0, tagName.Length - 1)
34-
elif tagName.EndsWith("`1") then
35-
tagName.Substring(0, tagName.Length - 2)
36-
else
37-
tagName
38-
Some(AutoImport finalTagName, callInfo, range)
28+
let tagImport =
29+
match callInfo.Args with
30+
| Let(_, LibraryTagImport(imp, _), _) :: _ -> LibraryImport imp
31+
| _ ->
32+
let tagName = typ.FullName.Split('.') |> Seq.last
33+
let finalTagName =
34+
if tagName = "Fragment" then
35+
""
36+
elif tagName.EndsWith("'") then
37+
tagName.Substring(0, tagName.Length - 1)
38+
elif tagName.EndsWith("`1") then
39+
tagName.Substring(0, tagName.Length - 2)
40+
else
41+
tagName
42+
AutoImport finalTagName
43+
Some(tagImport, callInfo, range)
3944
| _ -> None
4045

4146
let (|TagNoChildren|_|) (expr: Expr) =

src/Oxpecker.Solid.FablePlugin/Oxpecker.Solid.FablePlugin.fsproj

+3-3
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@
1717
<PackageTags>Oxpecker;F#;FSharp;Plugin;fable-javascript;Compiler;Fable;Solid;Solidjs</PackageTags>
1818
<Authors>Vladimir Shchur</Authors>
1919
<PackageReadmeFile>README.md</PackageReadmeFile>
20-
<Version>0.2.0</Version>
21-
<PackageVersion>0.2.0</PackageVersion>
22-
<PackageReleaseNotes>Solid router support</PackageReleaseNotes>
20+
<Version>0.2.2</Version>
21+
<PackageVersion>0.2.2</PackageVersion>
22+
<PackageReleaseNotes>Fixed jsx for Solid A element</PackageReleaseNotes>
2323
</PropertyGroup>
2424

2525
<ItemGroup>

src/Oxpecker.Solid/Oxpecker.Solid.fsproj

+3-3
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@
1818
<PackageTags>Oxpecker;F#;FSharp;Fable;fable-javascript;Web;Framework;Solid;Solidjs</PackageTags>
1919
<Authors>Vladimir Shchur</Authors>
2020
<PackageReadmeFile>README.md</PackageReadmeFile>
21-
<Version>0.2.1</Version>
22-
<PackageVersion>0.2.1</PackageVersion>
23-
<PackageReleaseNotes>Fable output got minimized</PackageReleaseNotes>
21+
<Version>0.2.2</Version>
22+
<PackageVersion>0.2.2</PackageVersion>
23+
<PackageReleaseNotes>Fixed jsx for Solid A element</PackageReleaseNotes>
2424
</PropertyGroup>
2525

2626
<ItemGroup>

src/Oxpecker.Solid/SolidRouterBindings.fs

+12-2
Original file line numberDiff line numberDiff line change
@@ -75,12 +75,16 @@ module Bindings =
7575
[<Import("Route", "@solidjs/router")>]
7676
type Route() =
7777
interface HtmlElement
78+
[<Erase>]
7879
member this.path
7980
with set (value: string) = ()
81+
[<Erase>]
8082
member this.component'
8183
with set (value: unit -> HtmlElement) = ()
84+
[<Erase>]
8285
member this.matchFilters
8386
with set (value: obj) = ()
87+
[<Erase>]
8488
member this.preload
8589
with set (value: RoutePreloadFunc) = ()
8690
member inline _.Combine
@@ -107,16 +111,22 @@ module Bindings =
107111
[<Import("Router", "@solidjs/router")>]
108112
type Router() =
109113
interface HtmlElement
114+
[<Erase>]
110115
member this.root
111116
with set (value: RootProps -> HtmlElement) = ()
117+
[<Erase>]
112118
member this.base'
113119
with set (value: string) = ()
120+
[<Erase>]
114121
member this.actionBase
115122
with set (value: string) = ()
123+
[<Erase>]
116124
member this.preload
117125
with set (value: bool) = ()
126+
[<Erase>]
118127
member this.explicitLinks
119128
with set (value: bool) = ()
129+
[<Erase>]
120130
member this.url
121131
with set (value: string) = ()
122132
member inline _.Combine
@@ -151,7 +161,7 @@ module Bindings =
151161
runExpr Unchecked.defaultof<_>
152162
this
153163

154-
[<Erase>]
164+
[<Import("A", "@solidjs/router")>]
155165
type A() =
156166
inherit RegularNode()
157167
[<Erase>]
@@ -176,7 +186,7 @@ module Bindings =
176186
member this.end'
177187
with set (value: bool) = ()
178188

179-
[<Erase>]
189+
[<Import("Navigate", "@solidjs/router")>]
180190
type Navigate() =
181191
inherit RegularNode()
182192
[<Erase>]

tests/Oxpecker.Solid.Tests/SolidCases/Router/Router.expected

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Route, Router } from "@solidjs/router";
1+
import { Route, Router, A } from "@solidjs/router";
22
import { App1 } from "./App1.fs.js";
33
import { App2 } from "./App2.fs.js";
44
import { lazy } from "solid-js";
@@ -9,6 +9,9 @@ export function Root(props) {
99
Root header
1010
</h1>
1111
{props.children}
12+
<A href="/about">
13+
About
14+
</A>
1215
</>;
1316
}
1417

tests/Oxpecker.Solid.Tests/SolidCases/Router/Router.fs

+1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ let Root (props: RootProps) : HtmlElement =
1010
Fragment() {
1111
h1() { "Root header" }
1212
props.children
13+
A(href="/about") { "About" }
1314
}
1415

1516
[<SolidComponent>]

0 commit comments

Comments
 (0)