From d1da0b4ea55502295a1fa5007898d9f6243a11f6 Mon Sep 17 00:00:00 2001 From: Richard Date: Mon, 18 Sep 2023 16:19:53 -0700 Subject: [PATCH] Add `show()` --- src/init.luau | 2 ++ src/show.luau | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+) create mode 100644 src/show.luau diff --git a/src/init.luau b/src/init.luau index 8958dd9..ce28c8c 100644 --- a/src/init.luau +++ b/src/init.luau @@ -15,6 +15,7 @@ local cleanup = require(script.cleanup) local untrack = require(script.untrack) local derive = require(script.derive) local switch = require(script.switch) +local show = require(script.show) local indexes, values = require(script.maps)() local spring, update_springs = require(script.spring)() local action = require(script.action)() @@ -51,6 +52,7 @@ local vide = { effect = effect, derive = derive, switch = switch, + show = show, indexes = indexes, values = values, diff --git a/src/show.luau b/src/show.luau new file mode 100644 index 0000000..1cf60ca --- /dev/null +++ b/src/show.luau @@ -0,0 +1,18 @@ +if not game then script = require "test/relative-string" end + +local switch = require(script.Parent.switch) + +local function show(source: () -> any, component: () -> T, fallback: (() -> T)?): () -> T? + local function truthy() + return not not source() + end + + return switch(truthy) { + [true] = component, + [false] = fallback, + } +end + +return show :: + ((source: () -> any, component: () -> T) -> () -> T?) & + ((source: () -> any, component: () -> T, fallback: () -> U) -> () -> (T | U)?)