Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
{
"cSpell.words": [
"cohinline",
"facetified",
"Gameface",
"gamepad"
],
Expand Down
35 changes: 34 additions & 1 deletion packages/@react-facet/core/src/hooks/useFacetWrapMemo.spec.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { useFacetWrapMemo } from './useFacetWrapMemo'
import { useFacetEffect } from './useFacetEffect'
import { useFacetMap } from './useFacetMap'
import { createFacet } from '../facet'
import { FacetProp, NO_VALUE, Value } from '../types'
import { EqualityCheck, FacetProp, NO_VALUE, Value } from '../types'

it('wraps a value, updating the facet when it changes', () => {
const mock = jest.fn()
Expand Down Expand Up @@ -203,3 +203,36 @@ describe('does not trigger effect updates on re-renders for the same value', ()
testEffectUpdatesOnStaticValue({ key: 'value' }, false)
})
})

it('allows changing the equality check', () => {
const mock = jest.fn()

const ComponentWithFacetEffect: React.FC<{ value: string; equalityCheck?: EqualityCheck<string> }> = ({
value,
equalityCheck,
}) => {
const facetValue = useFacetWrapMemo(value, equalityCheck)

useFacetEffect(
(value) => {
mock(value)
},
[],
[facetValue],
)
return <span />
}

const alwaysFalse = () => () => false

const dom = render(<ComponentWithFacetEffect value="value" />)
expect(mock).toHaveBeenCalledTimes(1)
expect(mock).toHaveBeenCalledWith('value')

mock.mockClear()

// as we change the equality check, it should re-initialize the inline facet, causing an update
dom.rerender(<ComponentWithFacetEffect value="value" equalityCheck={alwaysFalse} />)
expect(mock).toHaveBeenCalledTimes(1)
expect(mock).toHaveBeenCalledWith('value')
})
2 changes: 1 addition & 1 deletion packages/@react-facet/core/src/hooks/useFacetWrapMemo.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ export function useFacetWrapMemo<T extends Value>(
const inlineFacet = useMemo(
() => createFacet<T>({ initialValue: isFacet(prop) ? prop.get() : prop, equalityCheck }),
// eslint-disable-next-line react-hooks/exhaustive-deps
[],
[equalityCheck],
)

useEffect(() => {
Expand Down
Loading