Skip to content

Commit 230ceef

Browse files
committed
Solid: Improved Select and ErrorBoundary attributes
1 parent 8faa20d commit 230ceef

File tree

6 files changed

+25
-16
lines changed

6 files changed

+25
-16
lines changed

src/Oxpecker.Solid.FablePlugin/Library.fs

+2
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,8 @@ module internal rec AST =
177177
FullName = "Oxpecker.Solid.Builder.HtmlElement"
178178
},
179179
_)) -> (propName, transform expr) :: restResults
180+
| Delegate(args, expr, name, tags) ->
181+
(propName, Delegate(args, transform expr, name, tags)) :: restResults
180182
| _ -> (propName, propValue) :: restResults
181183
else
182184
restResults

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

+3-3
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@
1818
<Authors>Vladimir Shchur and contributors</Authors>
1919
<Copyright>Copyright (c) Vladimir Shchur 2024</Copyright>
2020
<PackageReadmeFile>README.md</PackageReadmeFile>
21-
<Version>0.3.0</Version>
22-
<PackageVersion>0.3.0</PackageVersion>
23-
<PackageReleaseNotes>Support for match and if expressions</PackageReleaseNotes>
21+
<Version>0.4.0</Version>
22+
<PackageVersion>0.4.0</PackageVersion>
23+
<PackageReleaseNotes>Support for delegates in attributes</PackageReleaseNotes>
2424
</PropertyGroup>
2525

2626
<ItemGroup>

src/Oxpecker.Solid/Oxpecker.Solid.fsproj

+3-3
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@
1919
<Authors>Vladimir Shchur and contributors</Authors>
2020
<Copyright>Copyright (c) Vladimir Shchur 2024</Copyright>
2121
<PackageReadmeFile>README.md</PackageReadmeFile>
22-
<Version>0.3.0</Version>
23-
<PackageVersion>0.3.0</PackageVersion>
24-
<PackageReleaseNotes>Support for match and if expressions</PackageReleaseNotes>
22+
<Version>0.4.0</Version>
23+
<PackageVersion>0.4.0</PackageVersion>
24+
<PackageReleaseNotes>Improved Select and ErrorBoundary attributes</PackageReleaseNotes>
2525
</PropertyGroup>
2626

2727
<ItemGroup>

src/Oxpecker.Solid/SolidBindings.fs

+12-7
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,9 @@ module Bindings =
221221
[<Erase>]
222222
member this.onChange
223223
with set (_: Event -> unit) = ()
224+
[<Erase>]
225+
member this.onInput
226+
with set (_: InputEvent -> unit) = ()
224227

225228
type textarea with
226229
[<Erase>]
@@ -512,12 +515,14 @@ module Bindings =
512515
member this.useShadow
513516
with set (value: bool) = ()
514517

518+
module ErrorBoundary =
519+
type Fallback = delegate of err: obj * reset: (unit -> unit) -> HtmlElement
515520
[<Erase>]
516521
type ErrorBoundary() =
517522
interface HtmlContainer
518523
[<Erase>]
519524
member this.fallback
520-
with set (value: HtmlElement) = ()
525+
with set (value: ErrorBoundary.Fallback) = ()
521526

522527
[<Erase>]
523528
type Extensions =
@@ -621,7 +626,7 @@ type Bindings =
621626
static member render(code: unit -> #HtmlElement, element: #Element) : unit = jsNative
622627

623628
[<ImportMember("solid-js/web")>]
624-
static member renderToString(fn: (unit -> #HtmlElement)) : string = jsNative
629+
static member renderToString(fn: unit -> #HtmlElement) : string = jsNative
625630

626631
[<ImportMember("solid-js")>]
627632
static member createSignal(value: 'T) : Signal<'T> = jsNative
@@ -662,22 +667,22 @@ type Bindings =
662667
static member reconcile<'T, 'U>(value: 'T) : ('U -> 'T) = jsNative
663668

664669
[<ImportMember("solid-js/store")>]
665-
static member produce<'T>(fn: ('T -> unit)) : ('T -> 'T) = jsNative
670+
static member produce<'T>(fn: 'T -> unit) : ('T -> 'T) = jsNative
666671

667672
[<ImportMember("solid-js/store")>]
668673
static member unwrap<'T>(item: 'T) : 'T = jsNative
669674

670675
[<ImportMember("solid-js")>]
671-
static member batch<'T>(fn: (unit -> 'T)) : 'T = jsNative
676+
static member batch<'T>(fn: unit -> 'T) : 'T = jsNative
672677

673678
[<ImportMember("solid-js")>]
674-
static member catchError<'T>(tryFn: (unit -> 'T), onError: (obj -> unit)) : 'T = jsNative
679+
static member catchError<'T>(tryFn: unit -> 'T, onError: obj -> unit) : 'T = jsNative
675680

676681
[<ImportMember("solid-js")>]
677-
static member onCleanup(fn: (unit -> unit)) : unit = jsNative
682+
static member onCleanup(fn: unit -> unit) : unit = jsNative
678683

679684
[<ImportMember("solid-js")>]
680-
static member onMount(fn: (unit -> unit)) : unit = jsNative
685+
static member onMount(fn: unit -> unit) : unit = jsNative
681686

682687
[<ImportMember("solid-js")>]
683688
static member useTransition() : (unit -> bool) * ((unit -> unit) -> JS.Promise<unit>) = jsNative

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

+4-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@ import { createSignal } from "solid-js";
22

33
export function Test(show) {
44
const x = createSignal(7)[0];
5-
return <div>
5+
return <ErrorBoundary fallback={(err, _arg) => <div>
6+
{`An error occurred ${err}`}
7+
</div>}>
68
<Show when={show}
79
fallback={<div>
810
World
@@ -28,6 +30,6 @@ export function Test(show) {
2830
</p>
2931
</Match>
3032
</Switch>
31-
</div>;
33+
</ErrorBoundary>;
3234
}
3335

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ open Oxpecker.Solid
55
[<SolidComponent>]
66
let Test (show: bool) =
77
let x, _ = createSignal 7
8-
div() {
8+
ErrorBoundary(fallback= fun err _ -> div() { $"An error occurred {err}" }) {
99
Show(when'=show, fallback = div() { "World" }) {
1010
div() {
1111
"Hello"

0 commit comments

Comments
 (0)