@@ -12,6 +12,7 @@ import {
1212 DecimalColumnFormatter ,
1313 IntegerColumnFormatter ,
1414} from '@deephaven/jsapi-utils' ;
15+ import merge from 'lodash.merge' ;
1516import UserLayoutUtils from './UserLayoutUtils' ;
1617import type LayoutStorage from './LayoutStorage' ;
1718
@@ -36,6 +37,26 @@ export class LocalWorkspaceStorage implements WorkspaceStorage {
3637 return undefined ;
3738 }
3839
40+ static getJSONServerConfig (
41+ serverConfigValues : Map < string , string > | undefined ,
42+ key : string
43+ ) : Record < string , unknown > | undefined {
44+ const value = serverConfigValues ?. get ( key ) ;
45+
46+ if ( value == null ) {
47+ return undefined ;
48+ }
49+
50+ try {
51+ return JSON . parse ( value ) ;
52+ } catch ( e ) {
53+ log . error (
54+ `Unable to parse JSON server config for key ${ key } . Value: ${ value } `
55+ ) ;
56+ return undefined ;
57+ }
58+ }
59+
3960 static makeDefaultWorkspaceSettings (
4061 serverConfigValues : ServerConfigValues
4162 ) : WorkspaceSettings {
@@ -57,13 +78,20 @@ export class LocalWorkspaceStorage implements WorkspaceStorage {
5778 showEmptyStrings : true ,
5879 showNullStrings : true ,
5980 showExtraGroupColumn : true ,
60- defaultNotebookSettings : {
81+ notebookSettings : {
6182 isMinimapEnabled : false ,
83+ formatOnSave : false ,
84+ python : {
85+ linter : {
86+ isEnabled : true ,
87+ // Omit default config so default settings are used if the user never changes them
88+ } ,
89+ } ,
6290 } ,
6391 webgl : true ,
6492 webglEditable : true ,
65- gridDensity : 'regular' as const ,
66- } ;
93+ gridDensity : 'regular' ,
94+ } satisfies WorkspaceSettings ;
6795 const serverSettings = {
6896 defaultDateTimeFormat : serverConfigValues ?. get ( 'dateTimeFormat' ) ,
6997 formatter : [ ] ,
@@ -108,15 +136,28 @@ export class LocalWorkspaceStorage implements WorkspaceStorage {
108136 serverConfigValues ,
109137 'showExtraGroupColumn'
110138 ) ,
111- defaultNotebookSettings :
112- serverConfigValues ?. get ( 'isMinimapEnabled' ) !== undefined
113- ? {
114- isMinimapEnabled : LocalWorkspaceStorage . getBooleanServerConfig (
115- serverConfigValues ,
116- 'isMinimapEnabled'
117- ) as boolean ,
118- }
119- : undefined ,
139+ notebookSettings : {
140+ isMinimapEnabled : LocalWorkspaceStorage . getBooleanServerConfig (
141+ serverConfigValues ,
142+ 'web.user.notebookSettings.isMinimapEnabled'
143+ ) ,
144+ formatOnSave : LocalWorkspaceStorage . getBooleanServerConfig (
145+ serverConfigValues ,
146+ 'web.user.notebookSettings.formatOnSave'
147+ ) ,
148+ python : {
149+ linter : {
150+ isEnabled : LocalWorkspaceStorage . getBooleanServerConfig (
151+ serverConfigValues ,
152+ 'web.user.notebookSettings.python.linter.isEnabled'
153+ ) ,
154+ config : LocalWorkspaceStorage . getJSONServerConfig (
155+ serverConfigValues ,
156+ 'web.user.notebookSettings.python.linter.config'
157+ ) ,
158+ } ,
159+ } ,
160+ } ,
120161 webgl : LocalWorkspaceStorage . getBooleanServerConfig (
121162 serverConfigValues ,
122163 'web.webgl'
@@ -125,19 +166,9 @@ export class LocalWorkspaceStorage implements WorkspaceStorage {
125166 serverConfigValues ,
126167 'web.webgl.editable'
127168 ) ,
128- } ;
169+ } satisfies Partial < WorkspaceSettings > ;
129170
130- const keys = Object . keys ( serverSettings ) as Array <
131- keyof typeof serverSettings
132- > ;
133- for ( let i = 0 ; i < keys . length ; i += 1 ) {
134- const key = keys [ i ] ;
135- if ( serverSettings [ key ] !== undefined ) {
136- // @ts -expect-error override default for defined server settings
137- settings [ key ] = serverSettings [ key ] ;
138- }
139- }
140- return settings ;
171+ return merge ( { } , settings , serverSettings ) ;
141172 }
142173
143174 static async makeWorkspaceData (
0 commit comments