diff --git a/src/effect.ts b/src/effect.ts index 7aad9cb..ac7f896 100644 --- a/src/effect.ts +++ b/src/effect.ts @@ -9,7 +9,8 @@ type SourceValue = export const effect = | Events)[]>( sources: [...S], - callback: (values: { [K in keyof S]: SourceValue }) => void + callback: (values: { [K in keyof S]: SourceValue }) => void, + { trigger }: { trigger?: boolean } = {} ): Effect => { const { use, dispose } = system() @@ -42,6 +43,10 @@ export const effect = | Events)[]>( } }) + if (trigger) { + updateValues() + } + return { use, dispose diff --git a/test/effect.test.ts b/test/effect.test.ts index debbeb0..0daa1ab 100644 --- a/test/effect.test.ts +++ b/test/effect.test.ts @@ -63,4 +63,14 @@ describe('effect', () => { expect(mockSub).toHaveBeenCalledTimes(2) expect(mockDispose).toHaveBeenCalledTimes(1) }) + it('triggers as expected', () => { + const exampleEvents = createEvents<{ something: number; else: string[] }>() + const exampleSignal = signal(() => 10) + + const mockSub = mock(() => ({})) + + effect([exampleEvents, exampleSignal], mockSub, { trigger: true }) + + expect(mockSub).toHaveBeenCalledTimes(1) + }) })