Files
twenty_crm/front/src/modules/command-menu/components/CommandMenuItem.tsx
Charles Bochet 6ced8434bd Uniformize folder structure (#693)
* Uniformize folder structure

* Fix icons

* Fix icons

* Fix tests

* Fix tests
2023-07-16 14:29:28 -07:00

73 lines
1.5 KiB
TypeScript

import React from 'react';
import { ReactNode } from 'react';
import { useNavigate } from 'react-router-dom';
import { IconArrowUpRight } from '@/ui/icon';
import { useCommandMenu } from '../hooks/useCommandMenu';
import {
StyledIconAndLabelContainer,
StyledIconContainer,
StyledMenuItem,
StyledShortCut,
StyledShortcutsContainer,
} from './CommandMenuStyles';
export type OwnProps = {
label: string;
to?: string;
onClick?: () => void;
icon?: ReactNode;
shortcuts?: Array<string>;
};
export function CommandMenuItem({
label,
to,
onClick,
icon,
shortcuts,
}: OwnProps) {
const navigate = useNavigate();
const { closeCommandMenu } = useCommandMenu();
if (to && !icon) {
icon = <IconArrowUpRight />;
}
const onItemClick = () => {
closeCommandMenu();
if (onClick) {
onClick();
return;
}
if (to) {
navigate(to);
return;
}
};
return (
<StyledMenuItem onSelect={onItemClick}>
<StyledIconAndLabelContainer>
<StyledIconContainer>{icon}</StyledIconContainer>
{label}
</StyledIconAndLabelContainer>
<StyledShortcutsContainer>
{shortcuts &&
shortcuts.map((shortcut, index) => {
const prefix = index > 0 ? 'then' : '';
return (
<React.Fragment key={index}>
{prefix}
<StyledShortCut>{shortcut}</StyledShortCut>
</React.Fragment>
);
})}
</StyledShortcutsContainer>
</StyledMenuItem>
);
}