|
1 | 1 | import type { UndoPartial } from '@deephaven/utils'; |
2 | 2 | import { memoize } from 'proxy-memoize'; |
3 | | -import type { RootState, WorkspaceSettings } from './store'; |
| 3 | +import type { RootState } from './store'; |
| 4 | +import _ from 'lodash'; |
4 | 5 |
|
5 | 6 | const EMPTY_OBJECT = Object.freeze({}); |
6 | 7 |
|
@@ -55,58 +56,24 @@ export const getWorkspace = <State extends RootState>( |
55 | 56 | return workspace; |
56 | 57 | }; |
57 | 58 |
|
58 | | -/** |
59 | | - * Helpter function to replace settings values |
60 | | - * Any nested objects under workspace settings need to be handled here |
61 | | - * @param key the key of the setting to replace |
62 | | - * @param settings current settings object |
63 | | - * @param customizedSettings customized settings to apply |
64 | | - */ |
65 | | -const replaceSettings = ( |
66 | | - key: keyof WorkspaceSettings, |
67 | | - settings: WorkspaceSettings, |
68 | | - customizedSettings: UndoPartial<WorkspaceSettings> |
69 | | -): void => { |
70 | | - let newSettings = customizedSettings[key]; |
71 | | - if (key === 'notebookSettings') { |
72 | | - const customizedLinter = |
73 | | - customizedSettings.notebookSettings?.python?.linter; |
74 | | - const settingsLinter = settings.notebookSettings?.python?.linter; |
75 | | - newSettings = { |
76 | | - ...settings.notebookSettings, |
77 | | - ...customizedSettings.notebookSettings, |
78 | | - python: { |
79 | | - linter: { |
80 | | - isEnabled: customizedLinter?.isEnabled ?? settingsLinter?.isEnabled, |
81 | | - config: customizedLinter?.config ?? settingsLinter?.config, |
82 | | - }, |
83 | | - }, |
84 | | - }; |
85 | | - } |
86 | | - // @ts-expect-error assign non-undefined customized settings to settings |
87 | | - settings[key] = newSettings; |
88 | | -}; |
89 | | - |
90 | 59 | // Settings |
91 | 60 | export const getSettings = memoize( |
92 | 61 | <State extends RootState>( |
93 | 62 | store: State |
94 | 63 | ): UndoPartial<State['workspace']['data']['settings']> => { |
95 | 64 | const customizedSettings = getWorkspace(store)?.data.settings ?? {}; |
96 | 65 |
|
97 | | - const settings = { ...getDefaultWorkspaceSettings(store) }; |
98 | | - const keys = Object.keys(customizedSettings) as (keyof WorkspaceSettings)[]; |
99 | | - for (let i = 0; i < keys.length; i += 1) { |
100 | | - const key = keys[i]; |
101 | | - if (customizedSettings[key] !== undefined) { |
102 | | - replaceSettings( |
103 | | - key, |
104 | | - settings, |
105 | | - customizedSettings as UndoPartial<WorkspaceSettings> |
106 | | - ); |
| 66 | + return _.mergeWith( |
| 67 | + {}, |
| 68 | + getDefaultWorkspaceSettings(store), |
| 69 | + customizedSettings, |
| 70 | + (objValue, srcValue) => { |
| 71 | + if (Array.isArray(objValue) && Array.isArray(srcValue)) { |
| 72 | + return srcValue; |
| 73 | + } |
| 74 | + return undefined; |
107 | 75 | } |
108 | | - } |
109 | | - return settings as UndoPartial<State['workspace']['data']['settings']>; |
| 76 | + ) as UndoPartial<State['workspace']['data']['settings']>; |
110 | 77 | } |
111 | 78 | ); |
112 | 79 |
|
|
0 commit comments