Last active
December 10, 2018 14:51
-
-
Save oyilmaztekin/7180888978712ab86cf00acb725c5b1d to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| const tabManager = ( function () { | |
| const _tabElements = [] | |
| function _detectUrlType(src){ | |
| const urlStructure = {} | |
| if(src.startsWith("http")){ | |
| urlStructure["type"] = "remote" | |
| urlStructure["url"] = src | |
| } | |
| else{ | |
| urlStructure["type"] = "module" | |
| urlStructure["url"] = src | |
| } | |
| return urlStructure | |
| } | |
| function createTabs(src) { | |
| const strc = _detectUrlType(src) | |
| const {url, type} = strc | |
| if( !!type && !!url ) { | |
| if ( type === "remote" ) { | |
| _createRemoteTabs(strc) | |
| } else if (type === "module") { | |
| _createModuleTabs(strc) | |
| } | |
| } | |
| return _tabElements | |
| } | |
| function _createModuleTabs(strc){ | |
| // inject module props in here | |
| _pushIntotabElements(strc) | |
| return strc | |
| } | |
| function _createRemoteTabs(strc){ | |
| // inject remote props in here | |
| _pushIntotabElements(strc) | |
| return strc | |
| } | |
| function _pushIntotabElements(strc){ | |
| if(!!_tabElements.length) { | |
| const newww = _tabElements.filter(e => e.url === strc.url) | |
| if( !!!newww.length ) _tabElements.push(strc) | |
| } else { | |
| _tabElements.push(strc) | |
| } | |
| _makeThisVisible(strc) | |
| } | |
| function _makeThisVisible(strc) { | |
| // We wont create this tab again. We will only make this state to visible | |
| _tabElements.forEach(el => { | |
| if( el.url === strc.url ) { | |
| el["visible"] = true | |
| } | |
| else { | |
| el["visible"] = false | |
| } | |
| }) | |
| return _tabElements | |
| } | |
| function removeTabFromTheNode(strc) { | |
| _tabElements.forEach((el,idx) => { | |
| if( el.url === strc ) { | |
| if ( _tabElements[idx]["visible"] === true && _tabElements[idx-1] ){ | |
| _tabElements[idx-1]["visible"] = true | |
| } | |
| else if ( _tabElements[idx]["visible"] === true && _tabElements[idx+1] ){ | |
| _tabElements[idx+1]["visible"] = true | |
| } | |
| _tabElements.splice(idx,1) | |
| } | |
| }) | |
| return _tabElements | |
| } | |
| return { | |
| create: createTabs, | |
| remove: removeTabFromTheNode | |
| }; | |
| })() | |
| const remote1 = "https://124.123.1.1/module1" | |
| const remote3 = "https://124.123.1.1/module3" | |
| const module1 = "/module2" | |
| const module2 = "/module3" | |
| const remote2 = "https://tac.com.tr/iframeModule" | |
| // tabManager.create(module1) | |
| // tabManager.create(module2) | |
| // tabManager.create(remote2) | |
| // tabManager.create(remote1) | |
| // tabManager.create(module1) | |
| // tabManager.create(module2) | |
| // tabManager.create(remote3) | |
| // tabManager.create(remote1) | |
| // tabManager.create(module1) | |
| // tabManager.create(module2) | |
| // tabManager.create(remote3) | |
| // tabManager.create(remote1) | |
| // tabManager.create(module1) | |
| // tabManager.create(module2) | |
| // tabManager.create(remote3) | |
| // tabManager.remove(remote3) | |
| // tabManager.remove(remote1) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment