Skip to content

Commit e6845d0

Browse files
panelComponent can be either of React element or
React component
1 parent b3b0c0e commit e6845d0

File tree

6 files changed

+39
-27
lines changed

6 files changed

+39
-27
lines changed

src/panel/memoPanel.js

Lines changed: 0 additions & 5 deletions
This file was deleted.

src/panel/panel.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,12 @@ const Panel = memo(function Panel(props) {
55
React.useContext(ForceUpdateContext);
66
const { id, selectedTabID } = props
77
, api = useContext(ApiContext)
8-
, panelProps = panelPropsManager({ isSelected: id === selectedTabID, api, id });
8+
, isSelected = id === selectedTabID
9+
, panelProps = panelPropsManager({ isSelected, api, id })
10+
, PanelComponent = api.getTab(id).panelComponent;
911
return (
1012
<div {...panelProps}>
11-
{api.getTab(id).panelComponent}
13+
<PanelComponent id={id} isSelected={isSelected} api={api.userProxy} ></PanelComponent>
1214
</div>
1315
)
1416
}, (oldProps, newProps) => {

src/panel/panel.tast.js

Lines changed: 0 additions & 1 deletion
This file was deleted.

src/utils/api/api.factory.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,10 @@ const _apiProps = {
7676
return tabId;
7777
};
7878
})(),
79+
setTab: function (id, newData) {
80+
this._setTab(id, newData, this.getOption('defaultPanelComponent'));
81+
return this;
82+
},
7983
open: function (tabObj = missingParamEr('open')) {
8084
const result = this._getOnChangePromise();
8185
this._open(tabObj.id);

src/utils/api/optionManager/defaultOptions.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import React from 'react';
12
const DefaultOptions = function (DefaulTabInnerComponent = null) {
23
this.defaultDirection = 'ltr';
34
this._DefaulTabInnerComponent = DefaulTabInnerComponent;
@@ -20,7 +21,7 @@ DefaultOptions.prototype._getOptions = function () {
2021
onDestroy: function () { },
2122
onInit: function () { },
2223
accessibility: true,
23-
defaultPanelComponent: null
24+
defaultPanelComponent: function (props) { return <div></div>; }
2425
};
2526
let _direction = this.defaultDirection, _tabComponent = this._DefaulTabInnerComponent;
2627
const that = this;

src/utils/api/tabs.js

Lines changed: 29 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,35 @@
11
import React from 'react';
2-
import MemoPanel from '../../panel/memoPanel.js';
32
function Tabs() {
43
this._data = [];
54
}
6-
Tabs.prototype._getDefaultTabData = function (defaultPanelComponent) {
7-
return {
8-
title: "",
9-
tooltip: "",
10-
panelComponent: defaultPanelComponent,
11-
closable: true,
12-
iconClass: "",
13-
disable: false,
14-
id: `tab_${(new (Date)()).getTime()}`
15-
};
5+
Tabs.prototype._checkPanelComponent = function (DefaultPanelComponent, PanelComponent) {
6+
let NewPanelCom = PanelComponent;
7+
if (!PanelComponent)
8+
NewPanelCom = DefaultPanelComponent;
9+
else
10+
if (typeof PanelComponent !== 'function' && React.isValidElement(PanelComponent))
11+
NewPanelCom = function (props) { return PanelComponent; };
12+
return NewPanelCom;
1613
};
14+
Tabs.prototype._prepareTabData = (function () {
15+
const _getDefaultTabData = function (DefaultPanelComponent) {
16+
return {
17+
title: "",
18+
tooltip: "",
19+
panelComponent: DefaultPanelComponent,
20+
closable: true,
21+
iconClass: "",
22+
disable: false,
23+
id: `tab_${(new (Date)()).getTime()}`
24+
};
25+
};
26+
return function (tabData, DefaultPanelComponent) {
27+
tabData.panelComponent = this._checkPanelComponent(DefaultPanelComponent, tabData.panelComponent);
28+
return Object.assign(_getDefaultTabData(DefaultPanelComponent), tabData);
29+
};
30+
})();
1731
Tabs.prototype._addTab = function (tabObj, { defaultPanelComponent }) {
18-
tabObj = Object.assign(this._getDefaultTabData(defaultPanelComponent), tabObj);
19-
this._data.push(tabObj);
32+
this._data.push(this._prepareTabData(tabObj, defaultPanelComponent));
2033
return this;
2134
};
2235
Tabs.prototype._removeTab = function (id) {
@@ -27,16 +40,14 @@ Tabs.prototype._removeTab = function (id) {
2740
Tabs.prototype.getTab = function (id) {
2841
return this._data.find(tab => tab.id === id);
2942
};
30-
Tabs.prototype.setTab = function (id, newData = {}, memoizePanel = true) {
43+
Tabs.prototype._setTab = function (id, newData = {}, DefaultPanelComponent) {
3144
const _index = this._data.findIndex(tab => tab.id === id);
3245
if (_index >= 0) {
46+
newData.panelComponent = this._checkPanelComponent(DefaultPanelComponent, newData.panelComponent);
3347
const oldData = this._data[_index];
3448
newData.id = oldData.id; // can not change id
35-
if (memoizePanel && newData.panelComponent !== oldData.panelComponent && React.isValidElement(newData.panelComponent)) {
36-
newData.panelComponent = <MemoPanel>newData.panelComponent</MemoPanel>;
37-
}
3849
Object.assign(this._data[_index], newData);
3950
}
40-
return newData;
51+
return this;
4152
};
4253
export default Tabs;

0 commit comments

Comments
 (0)