From 3f6d35cbd91bf79033cbc154571569ef597ec61b Mon Sep 17 00:00:00 2001 From: tpoisseau <22891227+tpoisseau@users.noreply.github.com> Date: Tue, 25 Aug 2026 12:24:35 +0200 Subject: [PATCH 1/2] feat(processings): tools integrate operation generation with `getDefaultSettings` from `operator`. --- .../processings_sections_panel.tsx | 2 +- src/component/toolbar/nmr_toolbar.tsx | 2 +- .../core_slots/core_operator_panel_tool.tsx | 36 +++-------- .../core_slots/core_operator_tool.commons.ts | 63 +++++++++++++++++++ .../utility/core_slots/core_operator_tool.tsx | 36 +++-------- 5 files changed, 83 insertions(+), 56 deletions(-) create mode 100644 src/component/utility/core_slots/core_operator_tool.commons.ts diff --git a/src/component/panels/filtersPanel/processings_sections_panel.tsx b/src/component/panels/filtersPanel/processings_sections_panel.tsx index 18b358475..9e0f61820 100644 --- a/src/component/panels/filtersPanel/processings_sections_panel.tsx +++ b/src/component/panels/filtersPanel/processings_sections_panel.tsx @@ -103,7 +103,7 @@ export function ProcessingsSectionsPanel() { {operatorsUI.map((operatorUI) => ( diff --git a/src/component/toolbar/nmr_toolbar.tsx b/src/component/toolbar/nmr_toolbar.tsx index 1ee6f84b3..7020a9ad8 100644 --- a/src/component/toolbar/nmr_toolbar.tsx +++ b/src/component/toolbar/nmr_toolbar.tsx @@ -536,7 +536,7 @@ export default function NMRToolbar() { pluginTools.map((operatorUI) => ( { diff --git a/src/component/utility/core_slots/core_operator_panel_tool.tsx b/src/component/utility/core_slots/core_operator_panel_tool.tsx index 7e43fe1b2..1666cd0a2 100644 --- a/src/component/utility/core_slots/core_operator_panel_tool.tsx +++ b/src/component/utility/core_slots/core_operator_panel_tool.tsx @@ -1,41 +1,23 @@ -import type { ProcessingOperatorId } from '@zakodium/nmr-types'; -import type { - ProcessingOperatorUI, - ProcessingOperatorUIToolProps, -} from '@zakodium/nmrium-core'; -import type { PartialPick } from '@zakodium/utils'; import { ErrorBoundary } from 'react-error-boundary'; -import { useCore } from '../../context/CoreContext.tsx'; import { ToolbarItemError } from '../toolbar_item_error.tsx'; -interface CoreOperatorPanelToolProps { - operator: ProcessingOperatorUI; -} +import type { CoreOperatorToolProps } from './core_operator_tool.commons.ts'; +import { useToolProps } from './core_operator_tool.commons.ts'; -export function CoreOperatorPanelTool( - props: PartialPick< - Omit, 'core'>, - 'spectrum' - > & - CoreOperatorPanelToolProps, -) { - const { spectrum, activeOperatorId, onTriggerOperation, operator } = props; - const core = useCore(); +export function CoreOperatorPanelTool(props: CoreOperatorToolProps) { + const { spectrum, operatorUI } = props; + const toolProps = useToolProps(props); if (!spectrum) return null; - if (!operator.PanelTool) return null; + if (!toolProps) return null; + if (!operatorUI.PanelTool) return null; - const { PanelTool } = operator; + const { PanelTool } = operatorUI; return ( - + ); } diff --git a/src/component/utility/core_slots/core_operator_tool.commons.ts b/src/component/utility/core_slots/core_operator_tool.commons.ts new file mode 100644 index 000000000..fb0233d27 --- /dev/null +++ b/src/component/utility/core_slots/core_operator_tool.commons.ts @@ -0,0 +1,63 @@ +import type { + ProcessingOperatorId, + SpectrumProcessingOperation, +} from '@zakodium/nmr-types'; +import type { + ProcessingOperatorUI, + ProcessingOperatorUIToolProps, +} from '@zakodium/nmrium-core'; +import { generateID } from '@zakodium/nmrium-core'; +import type { PartialPick } from '@zakodium/utils'; +import { assertDefined, assertNotNullish } from '@zakodium/utils'; +import { useEventCallback } from 'usehooks-ts'; + +import { useCore } from '../../context/CoreContext.tsx'; + +interface CoreOperatorToolExtraProps { + operatorUI: ProcessingOperatorUI; + onTriggerOperation: ( + operation: SpectrumProcessingOperation, + ) => void; +} + +export type CoreOperatorToolProps = PartialPick< + Omit, + 'spectrum' +> & + CoreOperatorToolExtraProps; + +export function useToolProps( + props: CoreOperatorToolProps, +): ProcessingOperatorUIToolProps | null { + const { + spectrum, + activeOperatorId, + onTriggerOperation: onTriggerOperationProp, + operatorUI, + } = props; + const core = useCore(); + + const onTriggerOperation = useEventCallback(() => { + const operator = core.getOperator(operatorUI.id); + assertNotNullish(operator); + assertDefined(spectrum); + + onTriggerOperationProp({ + operatorId: operatorUI.id, + uid: generateID(), + settings: operator.getDefaultSettings(spectrum), + options: undefined, + enabled: true, + error: undefined, + }); + }); + + if (!spectrum) return null; + + return { + core, + spectrum, + activeOperatorId, + onTriggerOperation, + }; +} diff --git a/src/component/utility/core_slots/core_operator_tool.tsx b/src/component/utility/core_slots/core_operator_tool.tsx index c6f39063e..2444f902e 100644 --- a/src/component/utility/core_slots/core_operator_tool.tsx +++ b/src/component/utility/core_slots/core_operator_tool.tsx @@ -1,41 +1,23 @@ -import type { ProcessingOperatorId } from '@zakodium/nmr-types'; -import type { - ProcessingOperatorUI, - ProcessingOperatorUIToolProps, -} from '@zakodium/nmrium-core'; -import type { PartialPick } from '@zakodium/utils'; import { ErrorBoundary } from 'react-error-boundary'; -import { useCore } from '../../context/CoreContext.tsx'; import { ToolbarItemError } from '../toolbar_item_error.tsx'; -interface CoreOperatorToolProps { - operator: ProcessingOperatorUI; -} +import type { CoreOperatorToolProps } from './core_operator_tool.commons.ts'; +import { useToolProps } from './core_operator_tool.commons.ts'; -export function CoreOperatorTool( - props: PartialPick< - Omit, 'core'>, - 'spectrum' - > & - CoreOperatorToolProps, -) { - const { spectrum, activeOperatorId, onTriggerOperation, operator } = props; - const core = useCore(); +export function CoreOperatorTool(props: CoreOperatorToolProps) { + const { spectrum, operatorUI } = props; + const toolProps = useToolProps(props); if (!spectrum) return null; - if (!operator.Tool) return null; + if (!toolProps) return null; + if (!operatorUI.Tool) return null; - const { Tool } = operator; + const { Tool } = operatorUI; return ( - + ); } From 2b4cba6d5441c70c00292d15ab09a1592aa06211 Mon Sep 17 00:00:00 2001 From: tpoisseau <22891227+tpoisseau@users.noreply.github.com> Date: Tue, 25 Aug 2026 14:29:45 +0200 Subject: [PATCH 2/2] fix: update core --- package-lock.json | 34 +++++++++++++++++----------------- package.json | 6 +++--- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3becdee76..6a14f4fa4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,9 +14,9 @@ "@hookform/resolvers": "^5.9.1", "@tanstack/react-form": "^1.33.5", "@tanstack/react-store": "^0.11.1", - "@zakodium/nmr-types": "^0.5.25", - "@zakodium/nmrium-core": "^0.7.62", - "@zakodium/nmrium-core-plugins": "^0.7.83", + "@zakodium/nmr-types": "^0.5.26", + "@zakodium/nmrium-core": "^0.7.64", + "@zakodium/nmrium-core-plugins": "^0.7.86", "@zakodium/pdnd-esm": "^1.1.1", "@zakodium/utils": "^0.5.1", "@zip.js/zip.js": "^2.8.53", @@ -3993,9 +3993,9 @@ "license": "MIT" }, "node_modules/@zakodium/nmr-types": { - "version": "0.5.25", - "resolved": "https://registry.npmjs.org/@zakodium/nmr-types/-/nmr-types-0.5.25.tgz", - "integrity": "sha512-Flxfn3CoC7J9mSwEcFFRO0omp9aqbf6t8+M1j4BUWbeLJAw6IZu4mdWSLgHZRvCo/VRF9EW7MlOy3BZdv3RcRQ==", + "version": "0.5.26", + "resolved": "https://registry.npmjs.org/@zakodium/nmr-types/-/nmr-types-0.5.26.tgz", + "integrity": "sha512-Da7K23q8O3EK8gslzyx5Hgd3k4TXq0w8JW+Qt2pDBZNY1M+uyVE97R9vcQKtcZiGVl/O0f57+qJ3kxvqVEnRgQ==", "license": "CC-BY-NC-SA-4.0", "dependencies": { "cheminfo-types": "^1.15.0", @@ -4006,9 +4006,9 @@ } }, "node_modules/@zakodium/nmrium-core": { - "version": "0.7.62", - "resolved": "https://registry.npmjs.org/@zakodium/nmrium-core/-/nmrium-core-0.7.62.tgz", - "integrity": "sha512-bwD4wttFKuXmNNotWuVZI6ddpuO2A0Ul2xi2NIrywHjJiNpJ4HiEX5oBBEboBa+UuuSonhTOKA6iKXbH2jQgWw==", + "version": "0.7.64", + "resolved": "https://registry.npmjs.org/@zakodium/nmrium-core/-/nmrium-core-0.7.64.tgz", + "integrity": "sha512-ZbaXg5s+x3wqpJxbDYz5kqGFggYJ6ftOWntn4g/YhMoWMxnsw1I5bJrXVr9bi8Lx3tv0SqAOhFXFfI6+k4wRuQ==", "license": "CC-BY-NC-SA-4.0", "dependencies": { "@zakodium/utils": "^0.5.1", @@ -4024,13 +4024,13 @@ } }, "node_modules/@zakodium/nmrium-core-plugins": { - "version": "0.7.83", - "resolved": "https://registry.npmjs.org/@zakodium/nmrium-core-plugins/-/nmrium-core-plugins-0.7.83.tgz", - "integrity": "sha512-Y7IFXV7dTcUIxaJrHwWV6HtLcLeBQp0Ehs2VJ+QW54I1GVVd+E7d62Ufa5USAe84N60jrAcli7X46TtGLalfvw==", + "version": "0.7.86", + "resolved": "https://registry.npmjs.org/@zakodium/nmrium-core-plugins/-/nmrium-core-plugins-0.7.86.tgz", + "integrity": "sha512-YJ0o+5qW4aZa3gpoQ0+FnB0l/CZhQBknMOnP6bl1LgrSk786XBsvBN0/mlwCOGyf6OztlDh5jE3dbV701vi5zA==", "license": "CC-BY-NC-SA-4.0", "dependencies": { "@date-fns/utc": "^2.1.1", - "@zakodium/nmrium-core": "^0.7.62", + "@zakodium/nmrium-core": "^0.7.64", "cheminfo-types": "^1.15.0", "convert-to-jcamp": "^7.0.1", "date-fns": "^4.4.0", @@ -4041,7 +4041,7 @@ "linear-sum-assignment": "^1.0.9", "lodash.merge": "^4.6.2", "ml-spectra-processing": "^14.33.0", - "nmr-processing": "^22.23.5", + "nmr-processing": "^22.23.6", "openchemlib": "^9.24.0", "openchemlib-utils": "^8.17.1", "sdf-parser": "^9.0.0", @@ -9703,9 +9703,9 @@ "license": "MIT" }, "node_modules/nmr-processing": { - "version": "22.23.5", - "resolved": "https://registry.npmjs.org/nmr-processing/-/nmr-processing-22.23.5.tgz", - "integrity": "sha512-B/7co/EGOv2TKi8zaVHfZ5SN6zVWzQ1Y+QQKzytV0W5mwe4397zQ/VPQI8LBJzXmW6br2iANYDjfJ63+Ddjq7w==", + "version": "22.23.6", + "resolved": "https://registry.npmjs.org/nmr-processing/-/nmr-processing-22.23.6.tgz", + "integrity": "sha512-Psz5P8ZFR4m6szehlvRRqVPxemV5XD6KW+AVKC1DleC7xnyVdivLR+L+4IyoxzWI6709OyjYdXBndHfpoeG2Sw==", "license": "CC-BY-NC-SA-4.0", "dependencies": { "binary-search": "^1.3.6", diff --git a/package.json b/package.json index ad37e4672..581d99556 100644 --- a/package.json +++ b/package.json @@ -65,9 +65,9 @@ "@hookform/resolvers": "^5.9.1", "@tanstack/react-form": "^1.33.5", "@tanstack/react-store": "^0.11.1", - "@zakodium/nmr-types": "^0.5.25", - "@zakodium/nmrium-core": "^0.7.62", - "@zakodium/nmrium-core-plugins": "^0.7.83", + "@zakodium/nmr-types": "^0.5.26", + "@zakodium/nmrium-core": "^0.7.64", + "@zakodium/nmrium-core-plugins": "^0.7.86", "@zakodium/pdnd-esm": "^1.1.1", "@zakodium/utils": "^0.5.1", "@zip.js/zip.js": "^2.8.53",