import { DialogFooter } from '@blueprintjs/core';
import type { Spectrum } from '@zakodium/nmrium-core';
import { useRef } from 'react';
import type { DataExportStage } from '../../data/SpectraManager.js';
import { exportAsJcamp } from '../../data/SpectraManager.js';
import { useToaster } from '../context/ToasterContext.js';
import ActionButtons from '../elements/ActionButtons.js';
import type { LabelStyle } from '../elements/Label.js';
import Label from '../elements/Label.js';
import { Select2 } from '../elements/Select2.js';
import { StandardDialog } from '../elements/StandardDialog.tsx';
import { StyledDialogBody } from '../elements/StyledDialogBody.js';
import useSpectrum from '../hooks/useSpectrum.js';
interface ExportDataTypeItem {
label: string;
value: DataExportStage;
}
const originalFidExportDataTypes: ExportDataTypeItem[] = [
{
label: 'Original FID',
value: 'originalFid',
},
];
const originalFtDataTypes: ExportDataTypeItem[] = [
{
label: 'Original FT real',
value: 'originalFtReal',
},
{
label: 'Original FT real and imaginary',
value: 'originalFtRealImaginary',
},
];
const processedDataTypes: ExportDataTypeItem[] = [
{
label: 'Processed real',
value: 'processedReal',
},
{
label: 'Processed real and imaginary',
value: 'processedRealImaginary',
},
];
const labelStyle: LabelStyle = {
wrapper: { display: 'flex', height: '100%', flex: 1 },
container: { alignItems: 'flex-start' },
label: { paddingTop: '5px', width: 80 },
};
interface InnerExportAsJCAMPProps {
closeDialog: () => void;
spectrum?: Spectrum;
}
interface ExportAsJCAMPProps extends InnerExportAsJCAMPProps {
exportActiveSpectrum?: boolean;
}
function ExportAsJcampModal(props: ExportAsJCAMPProps) {
const { spectrum, exportActiveSpectrum = false } = props;
const activeSpectrum = useSpectrum();
if (!exportActiveSpectrum && !spectrum) {
return null;
}
if (exportActiveSpectrum && !activeSpectrum) return null;
const currentSpectrum = exportActiveSpectrum ? activeSpectrum : spectrum;
if (!currentSpectrum) return null;
return ;
}
function getExportDataTypes(spectrum: Spectrum) {
const { originalInfo, filters } = spectrum;
const menuItems: ExportDataTypeItem[] = [];
if (originalInfo?.isFt) {
menuItems.push(...originalFtDataTypes);
}
if (originalInfo?.isFid) {
menuItems.push(...originalFidExportDataTypes);
}
if (filters?.length > 0) {
menuItems.push(...processedDataTypes);
}
return menuItems;
}
function InnerExportAsJcampModal(props: Required) {
const { closeDialog, spectrum } = props;
const toaster = useToaster();
const exportDataTypes = getExportDataTypes(spectrum);
const exportDataAsRef = useRef(exportDataTypes[0].value);
function submitHandler() {
const hideLoading = toaster.showLoading({
message: 'export as JCAMP-DX in progress',
});
try {
exportAsJcamp(spectrum, exportDataAsRef.current);
} catch (error: any) {
toaster.show({ message: error.message, intent: 'danger' });
} finally {
closeDialog?.();
hideLoading();
}
}
function handleChangeExportDataType(item: any) {
exportDataAsRef.current = item.value;
}
return (
{
closeDialog?.();
}}
/>
);
}
export default ExportAsJcampModal;