Skip to content

Commit

Permalink
feat(queries): allow overriding queries in getQueriesForElement (#67)
Browse files Browse the repository at this point in the history
* feat(queries): allow overriding queries in getQueriesForElement

* feat(queries): remove array option
  • Loading branch information
alexkrolick authored and Kent C. Dodds committed Jul 9, 2018
1 parent 256f899 commit e0200af
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 2 deletions.
31 changes: 31 additions & 0 deletions src/__tests__/get-queries-for-element.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import {getQueriesForElement} from '../get-queries-for-element'
import {queries} from '..'

test('uses default queries', () => {
const container = document.createElement('div')
const boundQueries = getQueriesForElement(container)
expect(Object.keys(boundQueries)).toEqual(Object.keys(queries))
})

test('accepts custom queries', () => {
const container = document.createElement('div')
const customQuery = jest.fn()
const boundQueries = getQueriesForElement(container, {
...queries,
customQuery,
})
expect(boundQueries.customQuery).toBeDefined()
})

test('binds functions to container', () => {
const container = document.createElement('div')
const mock = jest.fn()
function customQuery(element) {
return mock(element)
}
const boundQueries = getQueriesForElement(container, {
customQuery,
})
boundQueries.customQuery()
expect(mock).toHaveBeenCalledWith(container)
})
13 changes: 11 additions & 2 deletions src/get-queries-for-element.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,15 @@
import * as queries from './queries'
import * as defaultQueries from './queries'

function getQueriesForElement(element) {
/**
* @typedef {{[key: string]: Function}} FuncMap
*/

/**
* @param {HTMLElement} element container
* @param {FuncMap} queries object of functions
* @returns {FuncMap} returns object of functions bound to container
*/
function getQueriesForElement(element, queries = defaultQueries) {
return Object.entries(queries).reduce((helpers, [key, fn]) => {
helpers[key] = fn.bind(null, element)
return helpers
Expand Down
3 changes: 3 additions & 0 deletions typings/get-queries-for-element.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,7 @@ export type BoundFunctions<T> = {[P in keyof T]: BoundFunction<T[P]>}

export function getQueriesForElement(
element: HTMLElement,
queriesToBind:
| BoundFunctions<typeof queries>
| BoundFunctions<typeof queries>[],
): BoundFunctions<typeof queries>

0 comments on commit e0200af

Please sign in to comment.