Skip to content

Instantly share code, notes, and snippets.

@oyilmaztekin
Last active December 10, 2018 14:51
Show Gist options
  • Select an option

  • Save oyilmaztekin/7180888978712ab86cf00acb725c5b1d to your computer and use it in GitHub Desktop.

Select an option

Save oyilmaztekin/7180888978712ab86cf00acb725c5b1d to your computer and use it in GitHub Desktop.
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