diff --git a/src/Falco.Datastar/Ds.fs b/src/Falco.Datastar/Ds.fs index e8e1634..3317026 100644 --- a/src/Falco.Datastar/Ds.fs +++ b/src/Falco.Datastar/Ds.fs @@ -10,7 +10,7 @@ open StarFederation.Datastar.FSharp [] type Ds = static member cdnSrc = - @"https://cdn.jsdelivr.net/gh/starfederation/datastar@1.0.0-RC.6/bundles/datastar.js" + @"https://cdn.jsdelivr.net/gh/starfederation/datastar@1.0.0-RC.7/bundles/datastar.js" /// /// Shorthand for `Elem.script [ Attr.type' "module"; Attr.src cdnSrc ] []` @@ -215,7 +215,7 @@ type Ds = /// Single line output static member jsonSignalsOptions (?signalsFilter:SignalsFilter, ?terse:bool) = let addSignalsFilter signalsFilter dsAttr = - if signalsFilter = SignalsFilter.None + if signalsFilter <> SignalsFilter.None then dsAttr |> DsAttr.addValue (signalsFilter |> SignalsFilter.Serialize) else dsAttr DsAttr.start "json-signals" diff --git a/src/Falco.Datastar/Falco.Datastar.fsproj b/src/Falco.Datastar/Falco.Datastar.fsproj index e04b7d2..ab833a1 100644 --- a/src/Falco.Datastar/Falco.Datastar.fsproj +++ b/src/Falco.Datastar/Falco.Datastar.fsproj @@ -18,8 +18,8 @@ true - Falco.Datastar - 1.2.0 + SpiralOSS.Falco.Datastar + 1.2.1 fsharp;web;falco;falco-sharp;data-star https://github.com/falcoframework/Falco.Datastar Apache-2.0 diff --git a/src/Falco.Datastar/Types.fs b/src/Falco.Datastar/Types.fs index bce9434..a3ca498 100644 --- a/src/Falco.Datastar/Types.fs +++ b/src/Falco.Datastar/Types.fs @@ -25,15 +25,13 @@ type SignalsFilter = StringBuilder() |> _.Append("{ ") |> (fun sb -> - let _ = - match signalFilter.IncludePattern with - | ValueSome includeExp -> sb.Append($"include: /{includeExp}/") - | _ -> sb - let _ = - match signalFilter.ExcludePattern with - | ValueSome excludeExp -> sb.Append($"exclude: /{excludeExp}/") - | _ -> sb - sb + let filters = seq { + if (signalFilter.IncludePattern <> ValueNone) then + signalFilter.IncludePattern |> ValueOption.get |> (fun incStr -> $"include: /{incStr}/") + if (signalFilter.ExcludePattern <> ValueNone) then + signalFilter.ExcludePattern |> ValueOption.get |> (fun excStr -> $"exclude: /{excStr}/") + } + sb.AppendJoin(',', filters) ) |> _.Append(" }") |> _.ToString() diff --git a/test/Falco.Datastar.Tests/DsTests.fs b/test/Falco.Datastar.Tests/DsTests.fs index 2b94d99..70ffbae 100644 --- a/test/Falco.Datastar.Tests/DsTests.fs +++ b/test/Falco.Datastar.Tests/DsTests.fs @@ -7,15 +7,15 @@ open Xunit [] module private Common = - let testElem attr = - Elem.div attr [ Text.raw "div" ] + let renderAttr attr = + Elem.div [ attr ] [ ] |> renderNode module DsTests = [] let ``Ds.bind should create an attribute`` () = - testElem [ Ds.bind "signalPath" ] - |> should equal """
div
""" + renderAttr (Ds.bind "signalPath") + |> should equal """
""" [] let ``Ds.post`` () = @@ -23,11 +23,40 @@ module DsTests = |> should equal """@post('/channel')""" [] - let ``Ds.post with Form `` () = + let ``Ds.post with Form`` () = Ds.post ("/channel", { RequestOptions.Defaults with ContentType = Form }) |> should equal """@post('/channel',{"contentType":"form"})""" [] - let ``Ds.post with SelectedForm `` () = + let ``Ds.post with SelectedForm`` () = Ds.post ("/channel", { RequestOptions.Defaults with ContentType = (SelectedForm "myForm") }) |> should equal """@post('/channel',{"contentType":"form","selector":"myForm"})""" + + [] + let ``Ds.jsonSignalsOptions Exclude`` () = + let filterFiles : SignalsFilter = { IncludePattern = ValueNone; ExcludePattern = ValueSome "files" } + renderAttr (Ds.jsonSignalsOptions filterFiles) + |> should equal """
""" + + [] + let ``Ds.jsonSignalsOptions Include`` () = + let filterFiles : SignalsFilter = { IncludePattern = ValueSome "files"; ExcludePattern = ValueNone } + renderAttr (Ds.jsonSignalsOptions filterFiles) + |> should equal """
""" + + [] + let ``Ds.jsonSignalsOptions Both`` () = + let filterFiles : SignalsFilter = { IncludePattern = ValueSome "files$"; ExcludePattern = ValueSome "^files" } + renderAttr (Ds.jsonSignalsOptions filterFiles) + |> should equal """
""" + + [] + let ``Ds.jsonSignalsOptions Terse`` () = + renderAttr (Ds.jsonSignalsOptions (terse = true)) + |> should equal """
""" + + [] + let ``Ds.jsonSignalsOptions Terse and Both Filters`` () = + let filterFiles : SignalsFilter = { IncludePattern = ValueSome "files$"; ExcludePattern = ValueSome "^files" } + renderAttr (Ds.jsonSignalsOptions (filterFiles, terse = true)) + |> should equal """
"""