From cabfa876f1d7b53b857e1cb66f20ab46a1e006e9 Mon Sep 17 00:00:00 2001 From: hamed musallam Date: Wed, 15 May 2024 09:49:04 +0200 Subject: [PATCH] feat: implement settings migration feat: update nmr-load-save to version 0.32.0 refactor: read and write settings in local storage --- package-lock.json | 16 +-- package.json | 2 +- src/component/1d-2d/FieldEdition.tsx | 2 +- src/component/2d/Chart2D.tsx | 2 +- src/component/header/Header.tsx | 19 +-- src/component/hooks/useSaveSettings.tsx | 28 ++--- src/component/hooks/useWorkspaceAction.ts | 113 ++++++++++++++++++ src/component/main/InnerNMRium.tsx | 3 + .../modal/setting/GeneralSettings.tsx | 26 ++-- src/component/modal/setting/WorkspaceItem.tsx | 3 - .../preferences/actions/addWorkspace.ts | 34 +----- .../preferences/actions/initPreferences.ts | 5 +- .../preferences/actions/removeWorkspace.ts | 5 - .../preferences/actions/setActiveWorkspace.ts | 4 - .../preferences/actions/setPreferences.ts | 16 --- .../reducer/preferences/preferencesReducer.ts | 59 ++++----- src/component/utility/PreferencesHelper.ts | 6 +- src/component/workspaces/assignment.ts | 1 - src/component/workspaces/basic.ts | 1 - src/component/workspaces/embedded.ts | 1 - src/component/workspaces/exercise.ts | 1 - src/component/workspaces/prediction.ts | 1 - src/component/workspaces/process1D.ts | 1 - src/component/workspaces/simulation.ts | 1 - 24 files changed, 194 insertions(+), 156 deletions(-) create mode 100644 src/component/hooks/useWorkspaceAction.ts diff --git a/package-lock.json b/package-lock.json index f9394d369..ef4256fe2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -42,7 +42,7 @@ "ml-tree-similarity": "^2.2.0", "multiplet-analysis": "^2.1.2", "nmr-correlation": "^2.3.3", - "nmr-load-save": "0.31.1-pre.1715757737", + "nmr-load-save": "0.32.0", "nmr-processing": "^12.3.1", "nmredata": "^0.9.9", "numeral": "^2.0.6", @@ -10344,9 +10344,9 @@ } }, "node_modules/nmr-load-save": { - "version": "0.31.0", - "resolved": "https://registry.npmjs.org/nmr-load-save/-/nmr-load-save-0.31.0.tgz", - "integrity": "sha512-2Hhu2WoODYAyvBJX/8mtlxgfgYmxf8/AyKszKk5bPUQctLK77woIv0mMmaiuXeEupE3a1JcHHu2SoDoX+r40Aw==", + "version": "0.32.0", + "resolved": "https://registry.npmjs.org/nmr-load-save/-/nmr-load-save-0.32.0.tgz", + "integrity": "sha512-6nJdm/tboC6BaQHXVdcu4nJv0ZuEaCSap2t0BbFWEvTmwkv1w6ecwqTntHou/4eyJeRG5XBnhP3osYRcFY1pmA==", "dependencies": { "@lukeed/uuid": "^2.0.1", "@types/lodash.merge": "^4.6.9", @@ -10359,12 +10359,12 @@ "jcampconverter": "^9.6.4", "jeolconverter": "^1.0.3", "lodash.merge": "^4.6.2", - "ml-spectra-processing": "^14.3.0", + "ml-spectra-processing": "^14.5.0", "nmr-correlation": "^2.3.3", - "nmr-processing": "^12.2.0", + "nmr-processing": "^12.3.1", "nmredata": "^0.9.9", - "openchemlib": "^8.9.0", - "openchemlib-utils": "^5.16.3", + "openchemlib": "^8.10.0", + "openchemlib-utils": "^5.19.1", "sdf-parser": "^6.0.1", "varian-converter": "^1.0.0" } diff --git a/package.json b/package.json index a944ae2b8..c08195c41 100644 --- a/package.json +++ b/package.json @@ -90,7 +90,7 @@ "ml-tree-similarity": "^2.2.0", "multiplet-analysis": "^2.1.2", "nmr-correlation": "^2.3.3", - "nmr-load-save": "0.31.1-pre.1715757737", + "nmr-load-save": "0.32.0", "nmr-processing": "^12.3.1", "nmredata": "^0.9.9", "numeral": "^2.0.6", diff --git a/src/component/1d-2d/FieldEdition.tsx b/src/component/1d-2d/FieldEdition.tsx index 1250f75ec..5ac6f8239 100644 --- a/src/component/1d-2d/FieldEdition.tsx +++ b/src/component/1d-2d/FieldEdition.tsx @@ -1,6 +1,6 @@ /** @jsxImportSource @emotion/react */ -import { css } from '@emotion/react'; import { Popover, PopoverProps } from '@blueprintjs/core'; +import { css } from '@emotion/react'; import { Formik } from 'formik'; import { ReactNode, useState } from 'react'; import * as Yup from 'yup'; diff --git a/src/component/2d/Chart2D.tsx b/src/component/2d/Chart2D.tsx index d6659400d..3534adafb 100644 --- a/src/component/2d/Chart2D.tsx +++ b/src/component/2d/Chart2D.tsx @@ -4,6 +4,7 @@ import { memo } from 'react'; import SpectrumInfoBlock from '../1d-2d/components/SpectrumInfoBlock'; import { useChartData } from '../context/ChartContext'; import { usePreferences } from '../context/PreferencesContext'; +import { ShareDataProvider } from '../context/ShareDataContext'; import { Margin } from '../reducer/Reducer'; import XAxis from './XAxis'; @@ -13,7 +14,6 @@ import { FTContainer } from './ft/FTContainer'; import IndicationLines from './zones/IndicationLines'; import Zones from './zones/Zones'; import ZonesAssignmentsLabels from './zones/ZonesAssignmentsLabels'; -import { ShareDataProvider } from '../context/ShareDataContext'; interface Chart2DProps { spectra?: Spectrum1D[]; diff --git a/src/component/header/Header.tsx b/src/component/header/Header.tsx index 8191ae9ac..9420b7ef0 100644 --- a/src/component/header/Header.tsx +++ b/src/component/header/Header.tsx @@ -1,6 +1,6 @@ /** @jsxImportSource @emotion/react */ import { css } from '@emotion/react'; -import { useMemo, useCallback, memo } from 'react'; +import { useMemo, memo } from 'react'; import { FaRegWindowMaximize, FaQuestionCircle, @@ -22,6 +22,7 @@ import DropDownButton, { DropDownListItem, } from '../elements/dropDownButton/DropDownButton'; import { useSaveSettings } from '../hooks/useSaveSettings'; +import { useWorkspaceAction } from '../hooks/useWorkspaceAction'; import { LogsHistoryModal } from '../modal/LogsHistoryModal'; import AboutUsModal from '../modal/aboutUs/AboutUsModal'; import GeneralSettingsModal from '../modal/setting/GeneralSettings'; @@ -89,8 +90,8 @@ function HeaderInner(props: HeaderInnerProps) { display: { general }, }, workspace, - dispatch, } = usePreferences(); + const { setActiveWorkspace } = useWorkspaceAction(); const fullscreen = useFullscreen(); const workspacesList = useWorkspacesList(); @@ -123,17 +124,9 @@ function HeaderInner(props: HeaderInnerProps) { } }, [selectedOptionPanel]); - const changeWorkspaceHandler = useCallback( - (option: DropDownListItem) => { - dispatch({ - type: 'SET_ACTIVE_WORKSPACE', - payload: { - workspace: option.key, - }, - }); - }, - [dispatch], - ); + function changeWorkspaceHandler(option: DropDownListItem) { + setActiveWorkspace(option.key); + } function renderItem(item) { return ; diff --git a/src/component/hooks/useSaveSettings.tsx b/src/component/hooks/useSaveSettings.tsx index 81aa49831..e434bdce6 100644 --- a/src/component/hooks/useSaveSettings.tsx +++ b/src/component/hooks/useSaveSettings.tsx @@ -10,6 +10,8 @@ import { useToaster } from '../context/ToasterContext'; import FormikInput from '../elements/formik/FormikInput'; import ConfirmationDialog from '../elements/popup/Modal/ConfirmDialog'; +import { useWorkspaceAction } from './useWorkspaceAction'; + const schema = Yup.object().shape({ workspaceName: Yup.string().required(), }); @@ -48,17 +50,13 @@ export function useSaveSettings() { const toaster = useToaster(); const [isOpenDialog, openDialog, closeDialog] = useOnOff(false); const settingsRef = useRef(); - const { dispatch, current } = usePreferences(); + const { current } = usePreferences(); const formRef = useRef>(null); + const { saveWorkspace, addNewWorkspace } = useWorkspaceAction(); + + function handleAddNewWorkspace({ workspaceName }) { + addNewWorkspace(workspaceName, settingsRef.current); - function addNewWorkspace({ workspaceName }) { - dispatch({ - type: 'ADD_WORKSPACE', - payload: { - workspaceKey: workspaceName, - data: settingsRef.current, - }, - }); closeDialog(); toaster.show({ message: 'Preferences saved successfully', @@ -72,10 +70,8 @@ export function useSaveSettings() { if (current.source !== 'user') { openDialog(); } else { - dispatch({ - type: 'SET_PREFERENCES', - ...(values && { payload: values }), - }); + saveWorkspace(values); + closeDialog(); } }, @@ -84,7 +80,11 @@ export function useSaveSettings() { message: 'Please enter a new user workspace name in order to save your changes locally', render: (props) => ( - + ), buttons: [ { diff --git a/src/component/hooks/useWorkspaceAction.ts b/src/component/hooks/useWorkspaceAction.ts new file mode 100644 index 000000000..b8ecec37a --- /dev/null +++ b/src/component/hooks/useWorkspaceAction.ts @@ -0,0 +1,113 @@ +import { v4 } from '@lukeed/uuid'; +import lodashMerge from 'lodash/merge'; +import { Workspace } from 'nmr-load-save'; + +import { usePreferences } from '../context/PreferencesContext'; +import { + Settings, + readSettings, + updateSettings, +} from '../reducer/preferences/preferencesReducer'; +import { workspaceDefaultProperties } from '../workspaces/workspaceDefaultProperties'; + +export function useWorkspaceAction() { + const { dispatch, current, workspace } = usePreferences(); + + function setActiveWorkspace(workspace: string) { + const settings = readSettings() || { + currentWorkspace: null, + version: 0, + workspaces: {}, + }; + settings.currentWorkspace = workspace; + updateSettings(settings); + + dispatch({ + type: 'SET_ACTIVE_WORKSPACE', + payload: { + workspace, + }, + }); + } + + function addNewWorkspace( + workspaceName: string, + data?: Omit, + ) { + const workSpaceData = data ?? current; + const newWorkSpace = lodashMerge( + {}, + workspaceDefaultProperties, + workSpaceData, + { + version: 1, + label: workspaceName, + source: 'user', + }, + ); + const workspaceKey = v4(); + const localData = readSettings() || { workspaces: {} }; + const settings = { + ...localData, + currentWorkspace: workspaceKey, + workspaces: { ...localData?.workspaces, [workspaceKey]: newWorkSpace }, + }; + updateSettings(settings as Settings); + + dispatch({ + type: 'ADD_WORKSPACE', + payload: { + workspaceKey, + data: newWorkSpace, + }, + }); + } + + function removeWorkspace(key: string) { + const settings = readSettings(); + if (settings) { + // eslint-disable-next-line @typescript-eslint/no-dynamic-delete + delete settings.workspaces[key]; + if (key === settings.currentWorkspace) { + settings.currentWorkspace = 'default'; + } + + updateSettings(settings); + } + dispatch({ + type: 'REMOVE_WORKSPACE', + payload: { + workspace: key, + }, + }); + } + + function saveWorkspace(data?: Partial) { + if (data) { + const settings = readSettings() || { + version: 0, + currentWorkspace: null, + workspaces: {}, + }; + + updateSettings({ + ...settings, + workspaces: { + ...settings.workspaces, + [workspace.current]: data, + }, + } as Settings); + } + dispatch({ + type: 'SET_PREFERENCES', + ...(data && { payload: data }), + }); + } + + return { + addNewWorkspace, + removeWorkspace, + saveWorkspace, + setActiveWorkspace, + }; +} diff --git a/src/component/main/InnerNMRium.tsx b/src/component/main/InnerNMRium.tsx index c824728aa..2655ee912 100644 --- a/src/component/main/InnerNMRium.tsx +++ b/src/component/main/InnerNMRium.tsx @@ -20,6 +20,7 @@ import { defaultGetSpinner, SpinnerProvider } from '../loader/SpinnerContext'; import preferencesReducer, { preferencesInitialState, initPreferencesState, + readSettings, } from '../reducer/preferences/preferencesReducer'; import { getBlob } from '../utility/export'; @@ -58,12 +59,14 @@ export function InnerNMRium({ }, [isFullScreen]); useEffect(() => { + const settings = readSettings(); dispatchPreferences({ type: 'INIT_PREFERENCES', payload: { preferences, workspace, customWorkspaces, + currentWorkspace: settings?.currentWorkspace, dispatch: dispatchPreferences, }, }); diff --git a/src/component/modal/setting/GeneralSettings.tsx b/src/component/modal/setting/GeneralSettings.tsx index 37a9a1171..22a7b072a 100644 --- a/src/component/modal/setting/GeneralSettings.tsx +++ b/src/component/modal/setting/GeneralSettings.tsx @@ -28,6 +28,7 @@ import DropDownButton, { DropDownListItem, } from '../../elements/dropDownButton/DropDownButton'; import { useSaveSettings } from '../../hooks/useSaveSettings'; +import { useWorkspaceAction } from '../../hooks/useWorkspaceAction'; import { getPreferencesByWorkspace } from '../../reducer/preferences/utilities/getPreferencesByWorkspace'; import PredefinedWorkspaces from '../../workspaces'; @@ -104,6 +105,8 @@ function GeneralSettingsModal({ height }: GeneralSettingsModalProps) { originalWorkspaces, ...preferences } = usePreferences(); + const { addNewWorkspace, removeWorkspace, setActiveWorkspace } = + useWorkspaceAction(); const { saveSettings, SaveSettingsModal } = useSaveSettings(); const toaster = useToaster(); const refForm = useRef>(null); @@ -136,14 +139,9 @@ function GeneralSettingsModal({ height }: GeneralSettingsModalProps) { closeDialog?.(); } function addWorkSpaceHandler(name) { - dispatch({ - type: 'ADD_WORKSPACE', - payload: { - workspaceKey: name, - data: refForm.current?.values, - }, - }); + addNewWorkspace(name, refForm.current?.values); } + async function applyPreferencesHandler() { const errors = await refForm.current?.validateForm(); if (Object.keys(errors || {}).length > 0) { @@ -160,21 +158,11 @@ function GeneralSettingsModal({ height }: GeneralSettingsModalProps) { } function deleteWorkSpaceHandler(key) { - dispatch({ - type: 'REMOVE_WORKSPACE', - payload: { - workspace: key, - }, - }); + removeWorkspace(key); } function ChangeWorkspaceHandler(option: DropDownListItem) { - dispatch({ - type: 'SET_ACTIVE_WORKSPACE', - payload: { - workspace: option.key, - }, - }); + setActiveWorkspace(option.key); } function renderItem(item) { diff --git a/src/component/modal/setting/WorkspaceItem.tsx b/src/component/modal/setting/WorkspaceItem.tsx index e165017a0..914dc430d 100644 --- a/src/component/modal/setting/WorkspaceItem.tsx +++ b/src/component/modal/setting/WorkspaceItem.tsx @@ -105,9 +105,6 @@ function WorkspaceItem({ item, onSave, onDelete }: WorkspaceItemProps) { )} - {item.version && !item.isReadOnly && ( - V{item.version} - )} )} diff --git a/src/component/reducer/preferences/actions/addWorkspace.ts b/src/component/reducer/preferences/actions/addWorkspace.ts index 62f891c50..e3c958ced 100644 --- a/src/component/reducer/preferences/actions/addWorkspace.ts +++ b/src/component/reducer/preferences/actions/addWorkspace.ts @@ -1,9 +1,5 @@ -import { v4 } from '@lukeed/uuid'; import { Draft } from 'immer'; -import lodashMerge from 'lodash/merge'; -import { getLocalStorage, storeData } from '../../../utility/LocalStorage'; -import { workspaceDefaultProperties } from '../../../workspaces/workspaceDefaultProperties'; import { AddWorkspaceAction, PreferencesState, @@ -15,31 +11,9 @@ export function addWorkspace( action: AddWorkspaceAction, ) { const { workspaceKey, data } = action.payload; - - // eslint-disable-next-line unicorn/prefer-logical-operator-over-ternary - const workSpaceData = data - ? data - : draft.workspaces?.[draft.workspace.current]; - - if (workSpaceData) { - const newWorkSpace = lodashMerge( - {}, - workspaceDefaultProperties, - workSpaceData, - { - version: 1, - label: workspaceKey, - source: 'user', - }, - ); - const newWorkspaceKey = v4(); - const localData = getLocalStorage('nmr-general-settings'); - localData.currentWorkspace = newWorkspaceKey; - localData.workspaces[newWorkspaceKey] = newWorkSpace; - storeData('nmr-general-settings', JSON.stringify(localData)); - draft.workspaces[newWorkspaceKey] = newWorkSpace as WorkspaceWithSource; - draft.originalWorkspaces[newWorkspaceKey] = - newWorkSpace as WorkspaceWithSource; - draft.workspace.current = newWorkspaceKey as any; + if (data) { + draft.workspaces[workspaceKey] = data as WorkspaceWithSource; + draft.originalWorkspaces[workspaceKey] = data as WorkspaceWithSource; + draft.workspace.current = workspaceKey as any; } } diff --git a/src/component/reducer/preferences/actions/initPreferences.ts b/src/component/reducer/preferences/actions/initPreferences.ts index 5530c3cc5..97feaf843 100644 --- a/src/component/reducer/preferences/actions/initPreferences.ts +++ b/src/component/reducer/preferences/actions/initPreferences.ts @@ -1,7 +1,6 @@ import { Draft } from 'immer'; import type { NMRiumWorkspace } from '../../../main'; -import { getLocalStorage } from '../../../utility/LocalStorage'; import { PreferencesState, WORKSPACES_KEYS } from '../preferencesReducer'; import { initWorkspace } from '../utilities/initWorkspace'; import { mapWorkspaces } from '../utilities/mapWorkspaces'; @@ -15,12 +14,12 @@ function getWorkspace( export function initPreferences(draft: Draft, action) { if (action.payload) { - const localData = getLocalStorage('nmr-general-settings'); const { dispatch, workspace, customWorkspaces: cw, preferences, + currentWorkspace, } = action.payload; const customWorkspaces = mapWorkspaces(cw, { source: 'custom' }); @@ -53,7 +52,7 @@ export function initPreferences(draft: Draft, action) { base: _workspace, }; } else { - const _workspace = getWorkspace(draft, localData.currentWorkspace); + const _workspace = getWorkspace(draft, currentWorkspace); draft.workspace = { current: _workspace, base: null }; } diff --git a/src/component/reducer/preferences/actions/removeWorkspace.ts b/src/component/reducer/preferences/actions/removeWorkspace.ts index 68d23ee68..3eed3da2c 100644 --- a/src/component/reducer/preferences/actions/removeWorkspace.ts +++ b/src/component/reducer/preferences/actions/removeWorkspace.ts @@ -1,6 +1,5 @@ import { Draft } from 'immer'; -import { getLocalStorage, storeData } from '../../../utility/LocalStorage'; import { PreferencesState, WorkspaceAction } from '../preferencesReducer'; export function removeWorkspace( @@ -13,10 +12,6 @@ export function removeWorkspace( draft.workspace.current = 'default'; } - const localData = getLocalStorage('nmr-general-settings'); // eslint-disable-next-line @typescript-eslint/no-dynamic-delete delete draft.workspaces[workspace]; - // eslint-disable-next-line @typescript-eslint/no-dynamic-delete - delete localData.workspaces[workspace]; - storeData('nmr-general-settings', JSON.stringify(localData)); } diff --git a/src/component/reducer/preferences/actions/setActiveWorkspace.ts b/src/component/reducer/preferences/actions/setActiveWorkspace.ts index 4ac04f61d..2733d0a31 100644 --- a/src/component/reducer/preferences/actions/setActiveWorkspace.ts +++ b/src/component/reducer/preferences/actions/setActiveWorkspace.ts @@ -1,6 +1,5 @@ import { Draft } from 'immer'; -import { getLocalStorage, storeData } from '../../../utility/LocalStorage'; import { PreferencesState, WorkspaceAction } from '../preferencesReducer'; export function setActiveWorkspace( @@ -9,9 +8,6 @@ export function setActiveWorkspace( ) { if (action.payload) { const { workspace } = action.payload; - const localData = getLocalStorage('nmr-general-settings'); draft.workspace.current = workspace; - localData.currentWorkspace = workspace; - storeData('nmr-general-settings', JSON.stringify(localData)); } } diff --git a/src/component/reducer/preferences/actions/setPreferences.ts b/src/component/reducer/preferences/actions/setPreferences.ts index 5b2cc75fe..489796bd7 100644 --- a/src/component/reducer/preferences/actions/setPreferences.ts +++ b/src/component/reducer/preferences/actions/setPreferences.ts @@ -1,12 +1,10 @@ import { Draft } from 'immer'; import cloneDeep from 'lodash/cloneDeep'; -import { getLocalStorage, storeData } from '../../../utility/LocalStorage'; import { PreferencesState } from '../preferencesReducer'; import { getActiveWorkspace } from '../utilities/getActiveWorkspace'; export function setPreferences(draft: Draft, action) { - const localData = getLocalStorage('nmr-general-settings'); const currentWorkspacePreferences = getActiveWorkspace(draft); if (action.payload) { @@ -18,20 +16,6 @@ export function setPreferences(draft: Draft, action) { }; } - if (draft.workspaces[draft.workspace.current].source === 'user') { - draft.workspaces[draft.workspace.current].version++; - storeData( - 'nmr-general-settings', - JSON.stringify({ - ...localData, - workspaces: { - ...localData.workspaces, - [draft.workspace.current]: draft.workspaces[draft.workspace.current], - }, - }), - ); - } - draft.originalWorkspaces[draft.workspace.current] = cloneDeep( draft.workspaces[draft.workspace.current], ); diff --git a/src/component/reducer/preferences/preferencesReducer.ts b/src/component/reducer/preferences/preferencesReducer.ts index e3cb2344d..65344d361 100644 --- a/src/component/reducer/preferences/preferencesReducer.ts +++ b/src/component/reducer/preferences/preferencesReducer.ts @@ -1,5 +1,7 @@ import { Draft, produce } from 'immer'; import { + CURRENT_EXPORT_VERSION, + migrateSettings, MultipleSpectraAnalysisPreferences, Workspace, WorkSpaceSource, @@ -9,11 +11,7 @@ import { SplitPaneSize } from 'react-science/ui'; import { MatrixOptions } from '../../../data/types/data1d/MatrixOptions'; import type { NMRiumWorkspace, NMRiumPreferences } from '../../main'; -import { - getLocalStorage, - removeData, - storeData, -} from '../../utility/LocalStorage'; +import { getLocalStorage, storeData } from '../../utility/LocalStorage'; import Workspaces from '../../workspaces'; import { ActionType } from '../types/ActionType'; @@ -39,13 +37,19 @@ import { setVerticalSplitterPosition } from './actions/setVerticalSplitterPositi import { setWorkspace } from './actions/setWorkspace'; import { mapWorkspaces } from './utilities/mapWorkspaces'; -const LOCAL_STORAGE_VERSION = 17; +const LOCAL_STORAGE_SETTINGS_KEY = 'nmr-general-settings'; export const WORKSPACES_KEYS = { componentKey: `nmrium-component-workspace`, nmriumKey: `nmrium-file-workspace`, }; +export interface Settings { + version: number; + workspaces: Record; + currentWorkspace; +} + type InitPreferencesAction = ActionType< 'INIT_PREFERENCES', { @@ -188,7 +192,7 @@ export interface PreferencesState { } export const preferencesInitialState: PreferencesState = { - version: LOCAL_STORAGE_VERSION, + version: CURRENT_EXPORT_VERSION, workspaces: {}, originalWorkspaces: {}, dispatch: () => null, @@ -198,36 +202,33 @@ export const preferencesInitialState: PreferencesState = { }, }; +export function readSettings(): Settings { + const localData = getLocalStorage(LOCAL_STORAGE_SETTINGS_KEY) || { + version: CURRENT_EXPORT_VERSION, + currentWorkspace: null, + workspaces: {}, + }; + return migrateSettings(localData); +} + +export function updateSettings(settings: Settings) { + storeData(LOCAL_STORAGE_SETTINGS_KEY, JSON.stringify(settings)); +} + export function initPreferencesState( state: PreferencesState, ): PreferencesState { - const nmrLocalStorageVersion = getLocalStorage( - 'nmr-local-storage-version', - false, - ); - - const localData = getLocalStorage('nmr-general-settings'); - - // remove old nmr-local-storage-version key - if (nmrLocalStorageVersion && localData?.version) { - removeData('nmr-local-storage-version'); - } - + const localData = getLocalStorage(LOCAL_STORAGE_SETTINGS_KEY); + const settings = readSettings(); // if the local setting version != current settings version number - if (!localData?.version || localData?.version !== LOCAL_STORAGE_VERSION) { - removeData('nmr-general-settings'); - - const data = { - version: LOCAL_STORAGE_VERSION, - workspaces: {}, - }; - storeData('nmr-general-settings', JSON.stringify(data)); + if (localData?.version !== CURRENT_EXPORT_VERSION) { + updateSettings(settings); } const predefinedWorkspaces = mapWorkspaces(Workspaces as any, { source: 'predefined', }); - const localWorkspaces = mapWorkspaces(localData?.workspaces || {}, { + const localWorkspaces = mapWorkspaces(settings?.workspaces || {}, { source: 'user', }); @@ -236,7 +237,7 @@ export function initPreferencesState( originalWorkspaces: { ...predefinedWorkspaces, ...localWorkspaces }, workspaces: { ...predefinedWorkspaces, ...localWorkspaces }, workspace: { - current: localData?.currentWorkspace || 'default', + current: settings?.currentWorkspace || 'default', base: null, }, }; diff --git a/src/component/utility/PreferencesHelper.ts b/src/component/utility/PreferencesHelper.ts index 9a661aa6b..d13c7681d 100644 --- a/src/component/utility/PreferencesHelper.ts +++ b/src/component/utility/PreferencesHelper.ts @@ -1,7 +1,9 @@ -import { getLocalStorage, getValue } from './LocalStorage'; +import { readSettings } from '../reducer/preferences/preferencesReducer'; + +import { getValue } from './LocalStorage'; function GetPreference(preferences, key) { - const localData = getLocalStorage('nmr-general-settings'); + const localData = readSettings() || {}; const val = getValue(preferences, `panels.[${key}]`) || getValue(localData, `panels.[${key}]`); diff --git a/src/component/workspaces/assignment.ts b/src/component/workspaces/assignment.ts index b718f191c..3caf03d35 100644 --- a/src/component/workspaces/assignment.ts +++ b/src/component/workspaces/assignment.ts @@ -1,7 +1,6 @@ import { InnerWorkspace } from 'nmr-load-save'; export const assignment: InnerWorkspace = { - version: 2, label: 'NMR spectra assignment', visible: true, display: { diff --git a/src/component/workspaces/basic.ts b/src/component/workspaces/basic.ts index 909859e7b..9798eb967 100644 --- a/src/component/workspaces/basic.ts +++ b/src/component/workspaces/basic.ts @@ -1,7 +1,6 @@ import { InnerWorkspace } from 'nmr-load-save'; export const basic: InnerWorkspace = { - version: 2, label: 'Simple NMR analysis', visible: true, display: { diff --git a/src/component/workspaces/embedded.ts b/src/component/workspaces/embedded.ts index 32daeef9b..d1d95c6cb 100644 --- a/src/component/workspaces/embedded.ts +++ b/src/component/workspaces/embedded.ts @@ -1,7 +1,6 @@ import { InnerWorkspace } from 'nmr-load-save'; export const embedded: InnerWorkspace = { - version: 1, label: 'Embedded', display: { general: { diff --git a/src/component/workspaces/exercise.ts b/src/component/workspaces/exercise.ts index 70c4827c3..f277bd958 100644 --- a/src/component/workspaces/exercise.ts +++ b/src/component/workspaces/exercise.ts @@ -1,7 +1,6 @@ import { InnerWorkspace } from 'nmr-load-save'; export const exercise: InnerWorkspace = { - version: 2, label: 'Exercise', display: { general: { diff --git a/src/component/workspaces/prediction.ts b/src/component/workspaces/prediction.ts index 939ce4942..a7bef42ac 100644 --- a/src/component/workspaces/prediction.ts +++ b/src/component/workspaces/prediction.ts @@ -1,7 +1,6 @@ import { InnerWorkspace } from 'nmr-load-save'; export const prediction: InnerWorkspace = { - version: 1, label: 'Prediction', general: { dimmedSpectraOpacity: 0.5, diff --git a/src/component/workspaces/process1D.ts b/src/component/workspaces/process1D.ts index eca3ab8a3..78665b6c3 100644 --- a/src/component/workspaces/process1D.ts +++ b/src/component/workspaces/process1D.ts @@ -1,7 +1,6 @@ import { InnerWorkspace } from 'nmr-load-save'; export const process1D: InnerWorkspace = { - version: 2, label: '1D multiple spectra analysis', visible: true, display: { diff --git a/src/component/workspaces/simulation.ts b/src/component/workspaces/simulation.ts index 9bea3f354..a72a8c59d 100644 --- a/src/component/workspaces/simulation.ts +++ b/src/component/workspaces/simulation.ts @@ -1,7 +1,6 @@ import { InnerWorkspace } from 'nmr-load-save'; export const simulation: InnerWorkspace = { - version: 1, label: 'Simulation', general: { dimmedSpectraOpacity: 0.5,