diff --git a/app/html/app.js b/app/html/app.js index d1df72d6..877cb045 100644 --- a/app/html/app.js +++ b/app/html/app.js @@ -12,8 +12,17 @@ exports.create = function (api) { return nest('app.html.app', app) function app (initialTabs) { + var saveTabs = api.settings.sync.get('patchbay.saveTabs') + var _initialTabs + + if (saveTabs) { + _initialTabs = api.settings.sync.get('patchbay.openTabs') + } else { + _initialTabs = api.settings.sync.get('patchbay.defaultTabs') + } + return h('App', api.app.html.tabs({ - initial: initialTabs || api.settings.sync.get('patchbay.defaultTabs') + initial: initialTabs || _initialTabs })) } } diff --git a/app/html/settings/save-tabs.js b/app/html/settings/save-tabs.js new file mode 100644 index 00000000..1c21946b --- /dev/null +++ b/app/html/settings/save-tabs.js @@ -0,0 +1,41 @@ +const nest = require('depnest') +const { h } = require('mutant') + +exports.gives = nest({ + 'app.html.settings': true +}) + + +exports.needs = nest({ + 'app.html.settings': 'map', + 'settings.obs.get': 'first', + 'settings.sync.set': 'first' +}) + +exports.create = function (api) { + return nest({ + 'app.html.settings': saveTabs + }) + + function saveTabs () { + const saveTabs = api.settings.obs.get('patchbay.saveTabs', false) + const toggleSaveTabs = (ev) => { + api.settings.sync.set({ patchbay: { saveTabs: ev.target.checked } }) + } + + return { + group: 'general', + title: 'Save Tabs', + body: h('SaveTabsStyles', [ + h('p', [ + 'Save open tabs when Patchbay is closed', + h('input', { + type: 'checkbox', + checked: saveTabs, + 'ev-change': toggleSaveTabs + }) + ]) + ]) + } + } +} diff --git a/app/html/tabs.js b/app/html/tabs.js index 01d4abde..a0b705d5 100644 --- a/app/html/tabs.js +++ b/app/html/tabs.js @@ -13,7 +13,9 @@ exports.needs = nest({ 'app.sync.goTo': 'first', 'app.sync.locationId': 'first', 'history.obs.store': 'first', - 'history.sync.push': 'first' + 'history.sync.push': 'first', + 'settings.obs.get': 'first', + 'settings.sync.set': 'first' }) exports.create = function (api) { @@ -44,6 +46,27 @@ exports.create = function (api) { return api.app.sync.locationId(loc) !== page.id }) history.set(prunedHistory) + + const defaultTabs = api.settings.obs.get('patchbay.defaultTabs', false) + + const saveTabs = api.settings.obs.get('patchbay.saveTabs', false) + if (saveTabs()) { + const openTabs = api.settings.obs.get('patchbay.openTabs', []) + var _openTabs = openTabs() + + var closedTab = JSON.parse(page.id) + var theTab = Object.values(closedTab)[0] + + if (closedTab.page) { + theTab = '/' + theTab + } + + var index = _openTabs.indexOf(theTab) + if (index !== -1) { + _openTabs.splice(index, 1) + api.settings.sync.set({ patchbay: { openTabs: _openTabs } }) + } + } } const search = api.app.html.searchBar() diff --git a/app/sync/go-to.js b/app/sync/go-to.js index 2d5c8dca..9eff28f5 100644 --- a/app/sync/go-to.js +++ b/app/sync/go-to.js @@ -8,7 +8,9 @@ exports.needs = nest({ 'history.obs.store': 'first', 'history.sync.push': 'first', 'router.async.normalise': 'first', - 'router.async.router': 'first' + 'router.async.router': 'first', + 'settings.obs.get': 'first', + 'settings.sync.set': 'first' }) exports.create = function (api) { @@ -59,6 +61,24 @@ exports.create = function (api) { page.id = page.id || locationId tabs.add(page, !openBackground, split) + // Save Tabs: If enabled then add it to default tabs. + const saveTabs = api.settings.obs.get('patchbay.saveTabs', false) + if (saveTabs()) { + const openTabs = api.settings.obs.get('patchbay.openTabs', []) + var _tabs = openTabs() + + var newTab = Object.values(loc)[0] + if (loc.page) { + newTab = '/' + newTab + } + + if (_tabs.indexOf(newTab) === -1) { + _tabs.push(newTab) + + api.settings.sync.set({ patchbay: { openTabs: _tabs } }) + } + } + if (openBackground) { const history = api.history.obs.store() var _history = history()