Skip to content

Commit e0200af

Browse files
alexkrolickKent C. Dodds
authored and
Kent C. Dodds
committed
feat(queries): allow overriding queries in getQueriesForElement (#67)
* feat(queries): allow overriding queries in getQueriesForElement * feat(queries): remove array option
1 parent 256f899 commit e0200af

File tree

3 files changed

+45
-2
lines changed

3 files changed

+45
-2
lines changed
+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import {getQueriesForElement} from '../get-queries-for-element'
2+
import {queries} from '..'
3+
4+
test('uses default queries', () => {
5+
const container = document.createElement('div')
6+
const boundQueries = getQueriesForElement(container)
7+
expect(Object.keys(boundQueries)).toEqual(Object.keys(queries))
8+
})
9+
10+
test('accepts custom queries', () => {
11+
const container = document.createElement('div')
12+
const customQuery = jest.fn()
13+
const boundQueries = getQueriesForElement(container, {
14+
...queries,
15+
customQuery,
16+
})
17+
expect(boundQueries.customQuery).toBeDefined()
18+
})
19+
20+
test('binds functions to container', () => {
21+
const container = document.createElement('div')
22+
const mock = jest.fn()
23+
function customQuery(element) {
24+
return mock(element)
25+
}
26+
const boundQueries = getQueriesForElement(container, {
27+
customQuery,
28+
})
29+
boundQueries.customQuery()
30+
expect(mock).toHaveBeenCalledWith(container)
31+
})

src/get-queries-for-element.js

+11-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,15 @@
1-
import * as queries from './queries'
1+
import * as defaultQueries from './queries'
22

3-
function getQueriesForElement(element) {
3+
/**
4+
* @typedef {{[key: string]: Function}} FuncMap
5+
*/
6+
7+
/**
8+
* @param {HTMLElement} element container
9+
* @param {FuncMap} queries object of functions
10+
* @returns {FuncMap} returns object of functions bound to container
11+
*/
12+
function getQueriesForElement(element, queries = defaultQueries) {
413
return Object.entries(queries).reduce((helpers, [key, fn]) => {
514
helpers[key] = fn.bind(null, element)
615
return helpers

typings/get-queries-for-element.d.ts

+3
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,7 @@ export type BoundFunctions<T> = {[P in keyof T]: BoundFunction<T[P]>}
1212

1313
export function getQueriesForElement(
1414
element: HTMLElement,
15+
queriesToBind:
16+
| BoundFunctions<typeof queries>
17+
| BoundFunctions<typeof queries>[],
1518
): BoundFunctions<typeof queries>

0 commit comments

Comments
 (0)