1- const desktopViews = [
1+ interface Element {
2+ type : string ;
3+ size ?: number ;
4+ }
5+
6+ interface View {
7+ id : string ;
8+ name : string ;
9+ elements : Element [ ] ;
10+ }
11+
12+ const desktopViews : View [ ] = [
213 {
314 id : 'summary' ,
415 name : 'Summary' ,
@@ -55,8 +66,12 @@ const androidViews = [
5566// FIXME: Decide depending on what kind of device is being viewed, not from which device it is being viewed.
5667const defaultViews = ! process . env . VUE_APP_ON_ANDROID ? desktopViews : androidViews ;
5768
69+ interface State {
70+ views : View [ ] ;
71+ }
72+
5873// initial state
59- const _state = {
74+ const _state : State = {
6075 views : [ ] ,
6176} ;
6277
@@ -66,48 +81,56 @@ const getters = {};
6681// actions
6782const actions = {
6883 async load ( { commit } ) {
69- commit ( 'loadViews' ) ;
84+ let views : View [ ] ;
85+ if ( typeof localStorage !== 'undefined' ) {
86+ const views_json = localStorage . views ;
87+ if ( views_json && views_json . length >= 1 ) {
88+ views = JSON . parse ( views_json ) ;
89+ }
90+ }
91+ if ( ! views ) {
92+ views = defaultViews ;
93+ }
94+ commit ( 'loadViews' , views ) ;
7095 } ,
71- async save ( { state, commit } ) {
96+ async save ( { state, dispatch } ) {
7297 localStorage . views = JSON . stringify ( state . views ) ;
73- // After save, reload views
74- commit ( 'loadViews ') ;
98+ // After save, reload views from localStorage
99+ await dispatch ( 'load ') ;
75100 } ,
76101} ;
77102
78103// mutations
79104const mutations = {
80- loadViews ( state ) {
81- const views_json = localStorage . views ;
82- if ( views_json && views_json . length >= 1 ) {
83- state . views = JSON . parse ( views_json ) ;
84- } else {
85- state . views = defaultViews ;
86- }
105+ loadViews ( state : State , views : View [ ] ) {
106+ state . views = views ;
87107 console . log ( 'Loaded views:' , state . views ) ;
88108 } ,
89- setElements ( state , { view_id, elements } ) {
109+ clearViews ( state : State ) {
110+ state . views = [ ] ;
111+ } ,
112+ setElements ( state : State , { view_id, elements } ) {
90113 state . views . find ( v => v . id == view_id ) . elements = elements ;
91114 } ,
92- restoreDefaults ( state ) {
115+ restoreDefaults ( state : State ) {
93116 state . views = defaultViews ;
94117 } ,
95- addView ( state , view ) {
118+ addView ( state : State , view : View ) {
96119 state . views . push ( { ...view , elements : [ ] } ) ;
97120 } ,
98- removeView ( state , { view_id } ) {
121+ removeView ( state : State , { view_id } ) {
99122 const idx = state . views . map ( v => v . id ) . indexOf ( view_id ) ;
100123 state . views . splice ( idx , 1 ) ;
101124 } ,
102- editView ( state , { view_id, el_id, type } ) {
125+ editView ( state : State , { view_id, el_id, type } ) {
103126 console . log ( view_id , el_id , type ) ;
104127 console . log ( state . views ) ;
105128 state . views . find ( v => v . id == view_id ) . elements [ el_id ] . type = type ;
106129 } ,
107- addVisualization ( state , { view_id, type } ) {
130+ addVisualization ( state : State , { view_id, type } ) {
108131 state . views . find ( v => v . id == view_id ) . elements . push ( { type : type } ) ;
109132 } ,
110- removeVisualization ( state , { view_id, el_id } ) {
133+ removeVisualization ( state : State , { view_id, el_id } ) {
111134 state . views . find ( v => v . id == view_id ) . elements . splice ( el_id , 1 ) ;
112135 } ,
113136} ;
0 commit comments