Skip to content

Commit c51676f

Browse files
feat: customize NMRium Preferences and workspace using URL query string
close #22
1 parent 5c2ccd3 commit c51676f

2 files changed

Lines changed: 33 additions & 11 deletions

File tree

src/NMRiumWrapper.tsx

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { useEffect, useState } from 'react';
66
import events from './events';
77
import observableEvents from './observables';
88
import useActions from './hooks/useActions';
9+
import { usePreferences } from './hooks/usePreferences';
910

1011
const styles = {
1112
container: css`
@@ -38,9 +39,8 @@ const testData = {
3839

3940
export default function NMRiumWrapper() {
4041
const [data, setDate] = useState<NMRiumData>();
41-
42+
const { workspace, preferences } = usePreferences();
4243
const actionHandler = useActions();
43-
4444
useEffect(() => {
4545
const unsubscribe = observableEvents.subscribe('load', (_data) => {
4646
// eslint-disable-next-line no-console
@@ -84,15 +84,8 @@ export default function NMRiumWrapper() {
8484
<NMRium
8585
data={data}
8686
onDataChange={actionHandler}
87-
preferences={{
88-
toolBarButtons: {
89-
import: true,
90-
exportAs: true,
91-
},
92-
panels: {
93-
multipleSpectraAnalysisPanel: { hidden: true },
94-
},
95-
}}
87+
preferences={preferences}
88+
workspace={workspace}
9689
/>
9790
</div>
9891
</div>

src/hooks/usePreferences.ts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import { NMRiumPreferences, NMRiumWorkspace } from 'nmrium';
2+
import { useLayoutEffect, useState } from 'react';
3+
4+
export function usePreferences() {
5+
const [configuration, setConfiguration] = useState<{
6+
preferences: NMRiumPreferences;
7+
workspace: NMRiumWorkspace;
8+
}>({ preferences: {}, workspace: 'default' });
9+
10+
useLayoutEffect(() => {
11+
const { href } = window.location;
12+
const parameters = new URL(href).searchParams;
13+
14+
let preferences: NMRiumPreferences = {};
15+
let workspace: NMRiumWorkspace = 'default';
16+
17+
if (parameters.has('workspace')) {
18+
workspace = parameters.get('workspace') as NMRiumWorkspace;
19+
}
20+
if (parameters.has('preferences')) {
21+
preferences = JSON.parse(
22+
parameters.get('preferences') || '',
23+
) as NMRiumPreferences;
24+
}
25+
setConfiguration({ preferences, workspace });
26+
}, []);
27+
28+
return configuration;
29+
}

0 commit comments

Comments
 (0)