Skip to content

Commit 75ed1cf

Browse files
New: Add option to return React.Fragment
1 parent 412f235 commit 75ed1cf

File tree

5 files changed

+61
-38
lines changed

5 files changed

+61
-38
lines changed

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@
99
"commitmsg": "commitlint -E GIT_PARAMS",
1010
"lint": "tslint --project .",
1111
"lint:fix": "tslint --fix --project .",
12-
"test": "jest --config ./config/jest.config.js"
12+
"test": "jest --config ./config/jest.config.js",
13+
"test:watch": "jest --config ./config/jest.config.js --watch"
1314
},
1415
"repository": {
1516
"type": "git",

src/config.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ export interface Config {
6565
dom?: DOMConfig
6666
overrides?: SelectorsToElement,
6767
generatesKeys?: boolean,
68+
useFragment?: boolean,
6869
}
6970

7071
/**
@@ -86,6 +87,7 @@ const defaultConfig: Config = {
8687
ADD_ATTR: ['key'],
8788
},
8889
generatesKeys: false,
90+
useFragment: false,
8991
}
9092

9193
export function getConfig(config?: Partial<Config>): Config {

src/react.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,8 +98,8 @@ function transform(element: EnrichedElement, options: Config) {
9898
}
9999
}
100100

101-
export function render(nodes: NodeListOf<Node & ChildNode>, options: Config): React.ReactNode[] {
102-
const elements = []
101+
export function render(nodes: NodeListOf<Node & ChildNode>, options: Config): React.ReactNode[] | React.ReactFragment {
102+
const elements: React.ReactNode[] = []
103103

104104
for (let i = 0; i < nodes.length; i++) {
105105
const node = nodes.item(i)
@@ -111,5 +111,8 @@ export function render(nodes: NodeListOf<Node & ChildNode>, options: Config): Re
111111
}
112112
}
113113

114+
if (options.useFragment) {
115+
return React.createElement(React.Fragment, null, ...elements)
116+
}
114117
return elements
115118
}

tests/config.spec.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ describe('Options', () => {
1212
RETURN_DOM_IMPORT: false,
1313
},
1414
generatesKeys: false,
15+
useFragment: false,
1516
})
1617
})
1718

@@ -30,6 +31,7 @@ describe('Options', () => {
3031
RETURN_DOM_IMPORT: false,
3132
},
3233
generatesKeys: false,
34+
useFragment: false,
3335
})
3436
})
3537

@@ -47,6 +49,7 @@ describe('Options', () => {
4749
RETURN_DOM_IMPORT: false,
4850
},
4951
generatesKeys: false,
52+
useFragment: false,
5053
})
5154
})
5255
})

tests/react.spec.ts

Lines changed: 49 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -3,46 +3,12 @@ import * as React from 'react'
33

44
import { render } from '../src/react'
55

6-
function shallowWrapper(elements: React.ReactNode[]) {
6+
function shallowWrapper(elements: React.ReactNode[] | React.ReactFragment) {
77
return shallow(React.createElement('div', null, elements))
88
}
99

1010
describe('React', () => {
1111
describe('#render', () => {
12-
describe('generatesKeys', () => {
13-
it('should use key if provided', () => {
14-
const div = document.createElement('div')
15-
const link = document.createElement('a')
16-
link.textContent = 'Link'
17-
link.setAttribute('key', 'link')
18-
div.appendChild(link)
19-
20-
const wrapper = shallowWrapper(render(div.childNodes, { generatesKeys: true }))
21-
expect(wrapper.find('a').key()).toEqual('link')
22-
})
23-
24-
it('should use id if provided and key is not here', () => {
25-
const div = document.createElement('div')
26-
const link = document.createElement('a')
27-
link.textContent = 'Link'
28-
link.setAttribute('id', 'link')
29-
div.appendChild(link)
30-
31-
const wrapper = shallowWrapper(render(div.childNodes, { generatesKeys: true }))
32-
expect(wrapper.find('a').key()).toEqual('link')
33-
})
34-
35-
it('should use a random key if key nor id are specified', () => {
36-
const div = document.createElement('div')
37-
const link = document.createElement('a')
38-
link.textContent = 'Link'
39-
div.appendChild(link)
40-
41-
const wrapper = shallowWrapper(render(div.childNodes, { generatesKeys: true }))
42-
expect(wrapper.find('a').key()).toHaveLength(5)
43-
})
44-
})
45-
4612
it('should render a element node', () => {
4713
const div = document.createElement('div')
4814
const link = document.createElement('a')
@@ -97,4 +63,52 @@ describe('React', () => {
9763
expect(wrapper.find('span').key()).toEqual('test')
9864
})
9965
})
66+
67+
describe('Options', () => {
68+
describe('#useFragment', () => {
69+
it('should return a Fragment', () => {
70+
const div = document.createElement('div')
71+
const link = document.createElement('a')
72+
link.textContent = 'Link'
73+
div.appendChild(link)
74+
75+
const wrapper = shallowWrapper(render(div.childNodes, { useFragment: true }))
76+
expect(wrapper.find('a').text()).toEqual('Link')
77+
})
78+
})
79+
80+
describe('#generatesKeys', () => {
81+
it('should use key if provided', () => {
82+
const div = document.createElement('div')
83+
const link = document.createElement('a')
84+
link.textContent = 'Link'
85+
link.setAttribute('key', 'link')
86+
div.appendChild(link)
87+
88+
const wrapper = shallowWrapper(render(div.childNodes, { generatesKeys: true }))
89+
expect(wrapper.find('a').key()).toEqual('link')
90+
})
91+
92+
it('should use id if provided and key is not here', () => {
93+
const div = document.createElement('div')
94+
const link = document.createElement('a')
95+
link.textContent = 'Link'
96+
link.setAttribute('id', 'link')
97+
div.appendChild(link)
98+
99+
const wrapper = shallowWrapper(render(div.childNodes, { generatesKeys: true }))
100+
expect(wrapper.find('a').key()).toEqual('link')
101+
})
102+
103+
it('should use a random key if key nor id are specified', () => {
104+
const div = document.createElement('div')
105+
const link = document.createElement('a')
106+
link.textContent = 'Link'
107+
div.appendChild(link)
108+
109+
const wrapper = shallowWrapper(render(div.childNodes, { generatesKeys: true }))
110+
expect(wrapper.find('a').key()).toHaveLength(5)
111+
})
112+
})
113+
})
100114
})

0 commit comments

Comments
 (0)