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()