import { FaSitemap } from 'react-icons/fa';
import { LuLink, LuUnlink } from 'react-icons/lu';
import { PiTextTBold, PiTextTSlashBold } from 'react-icons/pi';
import { useDispatch } from '../../context/DispatchContext.js';
import { useShareData } from '../../context/ShareDataContext.js';
import type { ActionsButtonsPopoverProps } from '../../elements/ActionsButtonsPopover.js';
import { useActiveSpectrumRangesViewState } from '../../hooks/useActiveSpectrumRangesViewState.js';
import { booleanToString } from '../../utility/booleanToString.js';
interface UseAssignmentsPopoverActionsButtonsOptions {
isAssignButtonVisible?: boolean;
isUnAssignButtonVisible?: boolean;
isAssignLabelButtonVisible?: boolean;
isUnAssignLabelButtonVisible?: boolean;
isToggleMultiplicityTreeButtonVisible?: boolean;
onAssign: () => void;
onUnAssign: () => void;
rangeId: string;
}
export function useAssignmentsPopoverActionsButtons(
options: UseAssignmentsPopoverActionsButtonsOptions,
): ActionsButtonsPopoverProps['buttons'] {
const {
rangeId,
onAssign,
onUnAssign,
isAssignButtonVisible,
isUnAssignButtonVisible,
isAssignLabelButtonVisible,
isUnAssignLabelButtonVisible,
isToggleMultiplicityTreeButtonVisible = false,
} = options;
const dispatch = useDispatch();
const { setData: addNewAssignmentLabel } = useShareData();
const { showMultiplicityTrees } = useActiveSpectrumRangesViewState();
function removeAssignmentLabel() {
dispatch({
type: 'CHANGE_1D_SIGNAL_ASSIGNMENT_LABEL',
payload: {
value: '',
rangeId,
},
});
}
function handleShowJGraph() {
dispatch({
type: 'TOGGLE_RANGES_VIEW_PROPERTY',
payload: { key: 'showMultiplicityTrees' },
});
}
const actionsButtons: ActionsButtonsPopoverProps['buttons'] = [
{
icon: ,
title: `${booleanToString(!showMultiplicityTrees)} J Graph`,
onClick: handleShowJGraph,
visible: isToggleMultiplicityTreeButtonVisible && !showMultiplicityTrees,
},
{
icon: ,
onClick: onAssign,
intent: 'success',
title: 'Assign multiplet',
visible: isAssignButtonVisible,
},
{
icon: ,
onClick: onUnAssign,
intent: 'danger',
title: 'Unassign multiplet',
visible: isUnAssignButtonVisible,
},
{
icon: ,
onClick: () => addNewAssignmentLabel(rangeId),
intent: 'success',
title: 'Add assignment label',
visible: isAssignLabelButtonVisible,
},
{
icon: ,
onClick: removeAssignmentLabel,
intent: 'danger',
title: 'Remove assignment label',
visible: isUnAssignLabelButtonVisible,
},
];
return actionsButtons;
}