66 lines
1.5 KiB
JavaScript
66 lines
1.5 KiB
JavaScript
import { browser } from '$app/env';
|
|
import { readable } from "svelte/store";
|
|
import { compose, applyMiddleware } from "redux";
|
|
|
|
import { calc_ship_req } from "../dux/utils";
|
|
|
|
let composeEnhancers = compose;
|
|
|
|
if(browser) {
|
|
composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__;
|
|
}
|
|
|
|
import shipDux from "../dux";
|
|
|
|
export default () => {
|
|
let saved;
|
|
|
|
if(browser) saved = window.localStorage.getItem('aotds-shipyard');
|
|
|
|
if( saved ) {
|
|
saved = JSON.parse(saved);
|
|
}
|
|
else {
|
|
saved = undefined;
|
|
}
|
|
console.log(saved);
|
|
|
|
|
|
const duxStore = shipDux.createStore(saved, (mw) =>
|
|
composeEnhancers(applyMiddleware(mw))
|
|
);
|
|
|
|
duxStore.dispatch(
|
|
duxStore.actions.set_ship_reqs(calc_ship_req(duxStore.getState()))
|
|
);
|
|
|
|
Object.entries(duxStore.actions).forEach( ([type,action]) => {
|
|
duxStore.dispatch[ type ] = payload => duxStore.dispatch( action(payload) )
|
|
});
|
|
|
|
let previous = undefined;
|
|
duxStore.subscribe( () => {
|
|
let current = duxStore.getState();
|
|
if ( previous === current ) return;
|
|
previous = current;
|
|
console.log(current);
|
|
|
|
if(browser)window.localStorage.setItem(
|
|
'aotds-shipyard', JSON.stringify(current)
|
|
);
|
|
});
|
|
|
|
const state = readable(duxStore.getState(), (set) =>
|
|
duxStore.subscribe(() => {
|
|
set(duxStore.getState());
|
|
})
|
|
);
|
|
|
|
return {
|
|
subscribe: state.subscribe,
|
|
dispatch: duxStore.dispatch,
|
|
actions: duxStore.actions,
|
|
selectors: duxStore.selectors,
|
|
};
|
|
};
|