Merge pull request #14 from littensy/feat/show

Add `show()`
This commit is contained in:
Aaron 2023-09-19 00:27:13 +01:00 committed by GitHub
commit c2d90306b9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 20 additions and 0 deletions

View file

@ -15,6 +15,7 @@ local cleanup = require(script.cleanup)
local untrack = require(script.untrack) local untrack = require(script.untrack)
local derive = require(script.derive) local derive = require(script.derive)
local switch = require(script.switch) local switch = require(script.switch)
local show = require(script.show)
local indexes, values = require(script.maps)() local indexes, values = require(script.maps)()
local spring, update_springs = require(script.spring)() local spring, update_springs = require(script.spring)()
local action = require(script.action)() local action = require(script.action)()
@ -51,6 +52,7 @@ local vide = {
effect = effect, effect = effect,
derive = derive, derive = derive,
switch = switch, switch = switch,
show = show,
indexes = indexes, indexes = indexes,
values = values, values = values,

18
src/show.luau Normal file
View file

@ -0,0 +1,18 @@
if not game then script = require "test/relative-string" end
local switch = require(script.Parent.switch)
local function show<T>(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 ::
(<T>(source: () -> any, component: () -> T) -> () -> T?) &
(<T, U>(source: () -> any, component: () -> T, fallback: () -> U) -> () -> (T | U)?)