Skip to content

Commit 06db04b

Browse files
adding onFirstSelect event
1 parent ce3cd29 commit 06db04b

File tree

4 files changed

+118
-1
lines changed

4 files changed

+118
-1
lines changed

README.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -523,6 +523,33 @@ const [TabList, PanelList, ready] = useDynTabs({
523523
});
524524
```
525525

526+
### onFirstSelect
527+
528+
<table>
529+
<tbody>
530+
<tr>
531+
<th>type</th>
532+
<th>required</th>
533+
<th>description</th>
534+
</tr>
535+
<tr>
536+
<td>function</td>
537+
<td>false</td>
538+
<td>fires after selecting a tab for the first time. It is not fired for the initial selected tab</td>
539+
</tr>
540+
</tbody>
541+
</table>
542+
543+
**Example**
544+
545+
```js
546+
const [TabList, PanelList, ready] = useDynTabs({
547+
onFirstSelect: function ({currentSelectedTabId, previousSelectedTabId}) {
548+
console.log('[onFirstSelect]');
549+
},
550+
});
551+
```
552+
526553
### onSelect
527554

528555
<table>

package-lock.json

Lines changed: 48 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/utils/api/api.factory.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,12 +185,19 @@ Helper.setNoneEnumProps(_apiProps, {
185185
});
186186
openedTabIDs.length && this.trigger('onOpen', this.userProxy, openedTabIDs);
187187
closedTabIDs.length && this.trigger('onClose', this.userProxy, closedTabIDs);
188-
isSwitched &&
188+
if (isSwitched) {
189+
if (this.activedTabsHistory.tabsId.indexOf(newState.selectedTabID) === -1) {
190+
this.trigger('onFirstSelect', this.userProxy, {
191+
currentSelectedTabId: newState.selectedTabID,
192+
previousSelectedTabId: oldState.selectedTabID,
193+
});
194+
}
189195
this.trigger('onSelect', this.userProxy, {
190196
currentSelectedTabId: newState.selectedTabID,
191197
previousSelectedTabId: oldState.selectedTabID,
192198
perviousSelectedTabId: oldState.selectedTabID,
193199
});
200+
}
194201
}
195202
return this;
196203
},

src/utils/api/api.factory.test.js

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -580,3 +580,38 @@ describe('Api.prototype._getNextSiblingTabId : ', () => {
580580
expect(!obj.helper.filterArrayUntilFirstValue.mock.calls[0][2]).toBe(true);
581581
});
582582
});
583+
describe('Api.prorotype.onChange : ', () => {
584+
it('it should trigger onFirstSelect if isSwitched parameter was true and activedTabsHistory.tabsId does not include new selected tab id', () => {
585+
obj.trigger = jest.fn(() => {});
586+
obj.onChange({
587+
newState: {selectedTabID: '2'},
588+
oldState: {selectedTabID: '1'},
589+
closedTabIDs: [],
590+
openedTabIDs: [],
591+
isSwitched: true,
592+
});
593+
expect(obj.trigger.mock.calls.length).toBe(3);
594+
expect(obj.trigger.mock.calls[0][0]).toBe('onChange');
595+
expect(obj.trigger.mock.calls[1][0]).toBe('onFirstSelect');
596+
expect(obj.trigger.mock.calls[2][0]).toBe('onSelect');
597+
expect(obj.trigger.mock.calls[1][1]).toBe(obj.userProxy);
598+
expect(obj.trigger.mock.calls[1][2]).toEqual({
599+
currentSelectedTabId: '2',
600+
previousSelectedTabId: '1',
601+
});
602+
});
603+
it('it should not trigger onFirstSelect if activedTabsHistory.tabsId includes new selected tab id', () => {
604+
obj.trigger = jest.fn(() => {});
605+
obj.activedTabsHistory.tabsId = ['1', '2'];
606+
obj.onChange({
607+
newState: {selectedTabID: '2'},
608+
oldState: {selectedTabID: '1'},
609+
closedTabIDs: [],
610+
openedTabIDs: [],
611+
isSwitched: true,
612+
});
613+
expect(obj.trigger.mock.calls.length).toBe(2);
614+
expect(obj.trigger.mock.calls[0][0]).toBe('onChange');
615+
expect(obj.trigger.mock.calls[1][0]).toBe('onSelect');
616+
});
617+
});

0 commit comments

Comments
 (0)