Skip to content

Commit f204c7f

Browse files
create setComponent.js and
provide a test for it
1 parent 06730a9 commit f204c7f

File tree

6 files changed

+225
-92
lines changed

6 files changed

+225
-92
lines changed
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
// Jest Snapshot v1, https://goo.gl/fbAQLP
2+
3+
exports[`showMorePlugin MoreButtonPlugin : 1`] = `
4+
<div
5+
ctx={Object {}}
6+
customProp="customProp"
7+
openTabIDs={
8+
Array [
9+
"1",
10+
"2",
11+
]
12+
}
13+
selectedTabID="1"
14+
>
15+
button children
16+
</div>
17+
`;
18+
19+
exports[`showMorePlugin TablistOverflow : 1`] = `
20+
<div
21+
customProp="customProp"
22+
id="TablistOverflow"
23+
>
24+
tablist
25+
<div
26+
id="MoreButtonPlugin"
27+
/>
28+
</div>
29+
`;
30+
31+
exports[`showMorePlugin TablistView : 1`] = `
32+
<div
33+
className=" rc-dyn-tabs-responsive"
34+
>
35+
tablist view children
36+
</div>
37+
`;

src/plugins/moreButtonPlugin/button/button.test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -353,7 +353,7 @@ describe('TABS COMPONENT:', () => {
353353
act(() => {
354354
render(
355355
<div>
356-
<Button hiddenTabIDs={'1,2'} instance={userProxy} />
356+
<Button hiddenTabIDs={'1,2'} instance={ins.userProxy} />
357357
</div>,
358358
container,
359359
);

src/plugins/moreButtonPlugin/index.js

Lines changed: 6 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -1,58 +1,9 @@
1-
import React, {memo} from 'react';
21
import ShowMoreTabs from './show-more-tabs/index.js';
32
import moreButtonPlugin_buttonComponent from './button/index.js';
43
import moreButtonPlugin_iconComponent from './icon.js';
5-
import PropTypes from 'prop-types';
6-
function ShowMoreButton(deps, props) {
7-
const {useForceUpdate, useRootState} = deps.components;
8-
useForceUpdate();
9-
const {openTabIDs, selectedTabID} = useRootState();
10-
return (
11-
<ShowMoreTabs {...props} ctx={deps.ctx} openTabIDs={openTabIDs} selectedTabID={selectedTabID}>
12-
{props.children}
13-
</ShowMoreTabs>
14-
);
15-
}
16-
ShowMoreButton.propTypes /* remove-proptypes */ = {
17-
children: PropTypes.element,
18-
openTabIDs: PropTypes.array,
19-
selectedTabID: PropTypes.string,
20-
};
21-
function setTablistOverflow(ctx, components) {
22-
components.MoreButtonPlugin = memo(ShowMoreButton.bind(undefined, {ctx, components}), () => true);
23-
if (!components.OriginalTablistOverflow) {
24-
components.OriginalTablistOverflow = components.TablistOverflow;
25-
components.TablistOverflow = function (props) {
26-
return (
27-
<components.OriginalTablistOverflow {...props}>
28-
{props.children}
29-
<components.MoreButtonPlugin />
30-
</components.OriginalTablistOverflow>
31-
);
32-
};
33-
}
34-
}
35-
function setTablistView(ctx, components) {
36-
components.TablistView = components.TablistViewFactory.bind(undefined, (ins) => ({
37-
tablistViewPropsManager: () => {
38-
let {className} = components.tablistViewPropsManager(ins);
39-
className += ' rc-dyn-tabs-responsive';
40-
return {className};
41-
},
42-
}));
43-
}
44-
function setDefaultOptions(ctx, components) {
45-
ctx.optionsManager.options = Object.assign(
46-
{
47-
moreButtonPlugin_buttonComponent: moreButtonPlugin_buttonComponent({ctx, components}),
48-
moreButtonPlugin_iconComponent,
49-
moreButtonPlugin_buttonTooltip: 'show more',
50-
},
51-
ctx.optionsManager.options,
52-
);
53-
}
54-
export default function ResponsiveFactory(ctx, components) {
55-
setDefaultOptions(ctx, components);
56-
setTablistView(ctx, components);
57-
setTablistOverflow(ctx, components);
58-
}
4+
import setComponents from './setComponents.js';
5+
export default setComponents.bind(undefined, {
6+
moreButtonPlugin_buttonComponent,
7+
ShowMoreTabs,
8+
moreButtonPlugin_iconComponent,
9+
});

src/plugins/moreButtonPlugin/index.test.js

Lines changed: 0 additions & 36 deletions
This file was deleted.
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
import React, {memo} from 'react';
2+
import PropTypes from 'prop-types';
3+
export default function setComponents(deps, ctx, components) {
4+
const {moreButtonPlugin_buttonComponent, ShowMoreTabs, moreButtonPlugin_iconComponent} = deps;
5+
setComponents.setDefaultOptions(ctx, components, moreButtonPlugin_buttonComponent, moreButtonPlugin_iconComponent);
6+
setComponents.setTablistView(components);
7+
setComponents.setMoreButtonPlugin(ctx, components, ShowMoreTabs, setComponents.ShowMoreButton, memo);
8+
setComponents.setTablistOverflow(components);
9+
}
10+
export const ShowMoreButton = (setComponents.ShowMoreButton = function (deps, props) {
11+
const {
12+
ShowMoreTabs,
13+
components: {useForceUpdate, useRootState},
14+
} = deps;
15+
useForceUpdate();
16+
const {openTabIDs, selectedTabID} = useRootState();
17+
return (
18+
<ShowMoreTabs {...props} ctx={deps.ctx} openTabIDs={openTabIDs} selectedTabID={selectedTabID}>
19+
{props.children}
20+
</ShowMoreTabs>
21+
);
22+
});
23+
ShowMoreButton.propTypes /* remove-proptypes */ = {
24+
children: PropTypes.element,
25+
openTabIDs: PropTypes.array,
26+
selectedTabID: PropTypes.string,
27+
};
28+
export const setMoreButtonPlugin = (setComponents.setMoreButtonPlugin = function (
29+
ctx,
30+
components,
31+
ShowMoreTabs,
32+
ShowMoreButton,
33+
memo,
34+
) {
35+
components.MoreButtonPlugin = memo(ShowMoreButton.bind(undefined, {ctx, components, ShowMoreTabs}), () => true);
36+
});
37+
export const setTablistOverflow = (setComponents.setTablistOverflow = function (components) {
38+
if (!components.OriginalTablistOverflow) {
39+
components.OriginalTablistOverflow = components.TablistOverflow;
40+
components.TablistOverflow = function (props) {
41+
return (
42+
<components.OriginalTablistOverflow {...props}>
43+
{props.children}
44+
<components.MoreButtonPlugin />
45+
</components.OriginalTablistOverflow>
46+
);
47+
};
48+
}
49+
});
50+
export const setTablistView = (setComponents.setTablistView = function (components) {
51+
components.TablistView = components.TablistViewFactory.bind(undefined, (ins) => ({
52+
tablistViewPropsManager: () => {
53+
let {className} = components.tablistViewPropsManager(ins);
54+
className += ' rc-dyn-tabs-responsive';
55+
return {className};
56+
},
57+
}));
58+
});
59+
export const setDefaultOptions = (setComponents.setDefaultOptions = function (
60+
ctx,
61+
components,
62+
moreButtonPlugin_buttonComponent,
63+
moreButtonPlugin_iconComponent,
64+
) {
65+
ctx.optionsManager.options = Object.assign(
66+
{
67+
moreButtonPlugin_buttonComponent: moreButtonPlugin_buttonComponent({ctx, components}),
68+
moreButtonPlugin_iconComponent,
69+
moreButtonPlugin_buttonTooltip: 'show more',
70+
},
71+
ctx.optionsManager.options,
72+
);
73+
});
Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
/* eslint-disable react/prop-types */
2+
import React from 'react';
3+
import renderer from 'react-test-renderer';
4+
import showMorePlugin, {
5+
ShowMoreButton,
6+
setMoreButtonPlugin,
7+
setTablistOverflow,
8+
setTablistView,
9+
setDefaultOptions,
10+
} from './setComponents.js';
11+
beforeAll(() => {});
12+
beforeEach(() => {});
13+
afterEach(() => {});
14+
afterAll(() => {
15+
showMorePlugin.ShowMoreButton = ShowMoreButton;
16+
showMorePlugin.setMoreButtonPlugin = setMoreButtonPlugin;
17+
showMorePlugin.setTablistOverflow = setTablistOverflow;
18+
showMorePlugin.setTablistView = setTablistView;
19+
showMorePlugin.setDefaultOptions = setDefaultOptions;
20+
});
21+
describe('showMorePlugin ', () => {
22+
test('MoreButtonPlugin : ', () => {
23+
const ctx = {};
24+
const components = {useForceUpdate: () => {}, useRootState: () => ({openTabIDs: ['1', '2'], selectedTabID: '1'})};
25+
const ShowMoreTabs = (props) => <div {...props}>{props.children}</div>;
26+
const memo = jest.fn((fn) => fn);
27+
setMoreButtonPlugin(ctx, components, ShowMoreTabs, ShowMoreButton, memo);
28+
const Com = <components.MoreButtonPlugin customProp="customProp">button children</components.MoreButtonPlugin>;
29+
const tree = renderer.create(Com).toJSON();
30+
expect(tree).toMatchSnapshot();
31+
expect(memo.mock.calls.length).toBe(1);
32+
expect(typeof memo.mock.calls[0][0]).toBe('function');
33+
expect(memo.mock.calls[0][1]()).toBe(true);
34+
});
35+
test('setTablistOverflow only works if the OriginalTablistOverflow property is not existed : ', () => {
36+
const components = {TablistOverflow: '', OriginalTablistOverflow: 1};
37+
setTablistOverflow(components);
38+
expect(components.TablistOverflow).toBe('');
39+
});
40+
test('TablistOverflow : ', () => {
41+
const TablistOverflow = (props) => (
42+
<div id="TablistOverflow" {...props}>
43+
{props.children}
44+
</div>
45+
);
46+
const MoreButtonPlugin = () => <div id="MoreButtonPlugin"></div>;
47+
const components = {TablistOverflow, MoreButtonPlugin};
48+
setTablistOverflow(components);
49+
const Com = <components.TablistOverflow customProp="customProp">tablist</components.TablistOverflow>;
50+
const tree = renderer.create(Com).toJSON();
51+
expect(tree).toMatchSnapshot();
52+
expect(components.OriginalTablistOverflow).toEqual(TablistOverflow);
53+
});
54+
test('TablistView : ', () => {
55+
const components = {
56+
tablistViewPropsManager: () => ({className: ''}),
57+
TablistViewFactory: (getDeps, props) => {
58+
const {tablistViewPropsManager} = getDeps();
59+
return <div {...tablistViewPropsManager()}>{props.children}</div>;
60+
},
61+
};
62+
setTablistView(components);
63+
const Com = <components.TablistView>tablist view children</components.TablistView>;
64+
const tree = renderer.create(Com).toJSON();
65+
expect(tree).toMatchSnapshot();
66+
});
67+
test('setDefaultOptions : ', () => {
68+
const ctx = {
69+
optionsManager: {
70+
options: {},
71+
},
72+
};
73+
const components = {};
74+
const moreButtonPlugin_buttonComponent = jest.fn((obj) =>
75+
obj.components && obj.ctx ? 'moreButtonPlugin_buttonComponent' : '',
76+
);
77+
const moreButtonPlugin_iconComponent = 'moreButtonPlugin_iconComponent';
78+
setDefaultOptions(ctx, components, moreButtonPlugin_buttonComponent, moreButtonPlugin_iconComponent);
79+
expect(ctx.optionsManager.options.moreButtonPlugin_iconComponent).toBe('moreButtonPlugin_iconComponent');
80+
expect(ctx.optionsManager.options.moreButtonPlugin_buttonComponent).toBe('moreButtonPlugin_buttonComponent');
81+
expect(ctx.optionsManager.options.moreButtonPlugin_buttonTooltip).toBe('show more');
82+
expect(moreButtonPlugin_buttonComponent.mock.calls.length).toBe(1);
83+
expect(moreButtonPlugin_buttonComponent.mock.calls[0][0]).toEqual({ctx, components});
84+
});
85+
test('constructor : ', () => {
86+
showMorePlugin.ShowMoreButton = jest.fn(() => {});
87+
showMorePlugin.setMoreButtonPlugin = jest.fn(() => {});
88+
showMorePlugin.setTablistOverflow = jest.fn(() => {});
89+
showMorePlugin.setTablistView = jest.fn(() => {});
90+
showMorePlugin.setDefaultOptions = jest.fn(() => {});
91+
const deps = {
92+
moreButtonPlugin_buttonComponent: 'moreButtonPlugin_buttonComponent',
93+
ShowMoreTabs: 'ShowMoreTabs',
94+
moreButtonPlugin_iconComponent: 'moreButtonPlugin_iconComponent',
95+
};
96+
const ctx = {};
97+
const components = {};
98+
showMorePlugin(deps, ctx, components);
99+
expect(showMorePlugin.setDefaultOptions.mock.calls.length).toBe(1);
100+
expect(showMorePlugin.setTablistView.mock.calls.length).toBe(1);
101+
expect(showMorePlugin.setMoreButtonPlugin.mock.calls.length).toBe(1);
102+
expect(showMorePlugin.setTablistOverflow.mock.calls.length).toBe(1);
103+
expect(showMorePlugin.setDefaultOptions).toHaveBeenCalledBefore(showMorePlugin.setTablistView);
104+
expect(showMorePlugin.setTablistView).toHaveBeenCalledBefore(showMorePlugin.setMoreButtonPlugin);
105+
expect(showMorePlugin.setMoreButtonPlugin).toHaveBeenCalledBefore(showMorePlugin.setTablistOverflow);
106+
expect(showMorePlugin.setMoreButtonPlugin.mock.calls[0][3]).toEqual(showMorePlugin.ShowMoreButton);
107+
});
108+
});

0 commit comments

Comments
 (0)