mirror of
https://github.com/littensy/charm.git
synced 2026-10-20 17:51:37 +00:00
refactor: use setCurrentSub instead of pauseTracking
This commit is contained in:
parent
571d2c0d91
commit
a53683d59e
9 changed files with 21 additions and 24 deletions
|
|
@ -25,9 +25,9 @@ local function simpleMapped(source: () -> { Entry }, mapper: (Entry, number) ->
|
|||
local nextState = {}
|
||||
|
||||
for index, value in state do
|
||||
local prevSub = setCurrentSub(nil)
|
||||
local currentSub = setCurrentSub(nil)
|
||||
local success, valueOut, keyOut = pcall(mapper, value, index)
|
||||
setCurrentSub(prevSub)
|
||||
setCurrentSub(currentSub)
|
||||
|
||||
if success then
|
||||
nextState[keyOut] = valueOut
|
||||
|
|
|
|||
|
|
@ -16,9 +16,9 @@ local function listen<T>(selector: () -> T, listener: (state: T, previous: T?, d
|
|||
current = selector()
|
||||
|
||||
if current ~= previous then
|
||||
local prevSub = setCurrentSub(nil)
|
||||
local currentSub = setCurrentSub(nil)
|
||||
local success, result: unknown = pcall(listener, current, previous, dispose)
|
||||
setCurrentSub(prevSub)
|
||||
setCurrentSub(currentSub)
|
||||
|
||||
if not success then
|
||||
error(`listen() encountered an error: {result}`)
|
||||
|
|
|
|||
|
|
@ -16,9 +16,9 @@ local function mapped<KI, VI, KO, VO>(selector: () -> { [KI]: VI }, mapper: (ite
|
|||
local keyCache: { [KI]: KO } = {}
|
||||
|
||||
local function map(value: VI, key: KI): (VO, KO)
|
||||
local prevSub = setCurrentSub(nil)
|
||||
local currentSub = setCurrentSub(nil)
|
||||
local success, valueOut, keyOut = pcall(mapper, value, key)
|
||||
setCurrentSub(prevSub)
|
||||
setCurrentSub(currentSub)
|
||||
|
||||
if not success then
|
||||
error(`mapped() transform function failed: {valueOut}`)
|
||||
|
|
|
|||
|
|
@ -46,9 +46,9 @@ local function observe<K, V>(selector: () -> { [K]: V }, observer: (item: V, key
|
|||
currentItems = selector()
|
||||
|
||||
if currentItems ~= previousItems then
|
||||
local prevSub = setCurrentSub(nil)
|
||||
local currentSub = setCurrentSub(nil)
|
||||
local success, result: unknown = pcall(updateScopes, currentItems, previousItems)
|
||||
setCurrentSub(prevSub)
|
||||
setCurrentSub(currentSub)
|
||||
|
||||
if not success then
|
||||
error(`observe() encountered an error: {result}`, 2)
|
||||
|
|
|
|||
|
|
@ -14,9 +14,9 @@ local function subscribe<T>(selector: () -> T, listener: (state: T, lastState: T
|
|||
if mounted then
|
||||
mounted = false
|
||||
elseif current ~= previous then
|
||||
local prevSub = setCurrentSub(nil)
|
||||
local currentSub = setCurrentSub(nil)
|
||||
local success, result: unknown = pcall(listener, current, previous)
|
||||
setCurrentSub(prevSub)
|
||||
setCurrentSub(currentSub)
|
||||
|
||||
if not success then
|
||||
error(`subscribe() encountered an error: {result}`)
|
||||
|
|
|
|||
|
|
@ -3,9 +3,9 @@ local signals = require("./signals")
|
|||
local setCurrentSub = signals.setCurrentSub
|
||||
|
||||
local function untracked<T, Args...>(callback: ((Args...) -> T) | (Args...) -> (), ...: Args...): T
|
||||
local prevSub = setCurrentSub(nil)
|
||||
local currentSub = setCurrentSub(nil)
|
||||
local success, result = pcall(callback, ...)
|
||||
setCurrentSub(prevSub)
|
||||
setCurrentSub(currentSub)
|
||||
|
||||
if not success then
|
||||
error(result)
|
||||
|
|
|
|||
|
|
@ -5,8 +5,7 @@ local computed = signals.computed
|
|||
local effect = signals.effect
|
||||
local effectScope = signals.effectScope
|
||||
local endBatch = signals.endBatch
|
||||
local pauseTracking = signals.pauseTracking
|
||||
local resumeTracking = signals.resumeTracking
|
||||
local setCurrentSub = signals.setCurrentSub
|
||||
local onEffectCleanup = signals.onEffectCleanup
|
||||
local signal = signals.signal
|
||||
local startBatch = signals.startBatch
|
||||
|
|
@ -203,9 +202,9 @@ test("should duplicate subscribers do not affect the notify order", function()
|
|||
|
||||
effect(function()
|
||||
table.insert(order, "a")
|
||||
pauseTracking()
|
||||
local currentSub = setCurrentSub(nil)
|
||||
local isOne = src2() == 1
|
||||
resumeTracking()
|
||||
setCurrentSub(currentSub)
|
||||
if isOne then
|
||||
src1()
|
||||
end
|
||||
|
|
|
|||
|
|
@ -3,8 +3,7 @@ local suite = require("@tests/suite")
|
|||
|
||||
local computed = signals.computed
|
||||
local effect = signals.effect
|
||||
local pauseTracking = signals.pauseTracking
|
||||
local resumeTracking = signals.resumeTracking
|
||||
local setCurrentSub = signals.setCurrentSub
|
||||
local signal = signals.signal
|
||||
local test = suite.test
|
||||
|
||||
|
|
@ -17,9 +16,9 @@ type ReactionOptions<T = unknown> = {
|
|||
}
|
||||
|
||||
local function untracked<T>(callback: () -> T): T
|
||||
pauseTracking()
|
||||
local currentSub = setCurrentSub(nil)
|
||||
local success, result = pcall(callback)
|
||||
resumeTracking()
|
||||
setCurrentSub(currentSub)
|
||||
if not success then
|
||||
error(result)
|
||||
end
|
||||
|
|
|
|||
|
|
@ -2,17 +2,16 @@ local signals = require("../../src/signals")
|
|||
local suite = require("@tests/suite")
|
||||
|
||||
local computed = signals.computed
|
||||
local pauseTracking = signals.pauseTracking
|
||||
local resumeTracking = signals.resumeTracking
|
||||
local setCurrentSub = signals.setCurrentSub
|
||||
local signal = signals.signal
|
||||
local test = suite.test
|
||||
|
||||
test("should pause tracking", function()
|
||||
local src, setSrc = signal(0)
|
||||
local c = computed(function()
|
||||
pauseTracking()
|
||||
local currentSub = setCurrentSub(nil)
|
||||
local value = src()
|
||||
resumeTracking()
|
||||
setCurrentSub(currentSub)
|
||||
return value
|
||||
end)
|
||||
assert(c() == 0, "should not track src")
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue