Store the last tab in a cookie so the server can use it for embedding state

This commit is contained in:
Ken-Håvard Lieng 2017-05-21 09:53:47 +02:00
parent 4cad5a0b33
commit 8684e2dea2
8 changed files with 95 additions and 49 deletions

View file

@ -44,6 +44,7 @@
"fontfaceobserver": "^2.0.9",
"history": "4.5.1",
"immutable": "^3.8.1",
"js-cookie": "^2.1.4",
"lodash": "^4.17.4",
"react": "^15.4.2",
"react-dom": "^15.4.2",

View file

@ -1,3 +1,4 @@
import Cookie from 'js-cookie';
import { setEnvironment } from '../actions/environment';
import { addMessages } from '../actions/message';
import { select, updateSelection } from '../actions/tab';
@ -17,12 +18,12 @@ export default function initialState({ store }) {
});
if (!store.getState().router.route) {
let tab = localStorage.tab;
const tab = Cookie.get('tab');
if (tab) {
tab = JSON.parse(tab);
const [server, name = null] = tab.split(':');
if (find(env.servers, server => server.host === tab.server)) {
store.dispatch(select(tab.server, tab.name, true));
if (find(env.servers, srv => srv.host === server)) {
store.dispatch(select(server, name, true));
} else {
store.dispatch(updateSelection());
}

View file

@ -1,10 +1,11 @@
import Cookie from 'js-cookie';
import debounce from 'lodash/debounce';
import observe from '../util/observe';
import { getSelectedTab } from '../reducers/tab';
const saveTab = debounce(tab => {
localStorage.tab = JSON.stringify(tab);
}, 3000);
const saveTab = debounce(tab =>
Cookie.set('tab', tab.toString(), { expires: 30 })
, 3000);
export default function storage({ store }) {
observe(store, getSelectedTab, tab => {

View file

@ -12,6 +12,14 @@ class Tab extends TabRecord {
isChannel() {
return this.name && this.name.charAt(0) === '#';
}
toString() {
let str = this.server;
if (this.name) {
str += `:${this.name}`;
}
return str;
}
}
const State = Record({

View file

@ -3462,6 +3462,10 @@ js-base64@^2.1.9:
version "2.1.9"
resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.1.9.tgz#f0e80ae039a4bd654b5f281fc93f04a914a7fcce"
js-cookie@^2.1.4:
version "2.1.4"
resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-2.1.4.tgz#da4ec503866f149d164cf25f579ef31015025d8d"
js-tokens@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7"