Closes #9423 https://github.com/user-attachments/assets/0d93f170-8c4f-43ff-a0ca-3d2874d44820
83 lines
3.2 KiB
TypeScript
83 lines
3.2 KiB
TypeScript
import { RecordActionMenuEntriesSetter } from '@/action-menu/actions/record-actions/components/RecordActionMenuEntriesSetter';
|
|
import { RecordAgnosticActionsSetterEffect } from '@/action-menu/actions/record-agnostic-actions/components/RecordAgnosticActionsSetterEffect';
|
|
import { ActionMenuConfirmationModals } from '@/action-menu/components/ActionMenuConfirmationModals';
|
|
import { ActionMenuContext } from '@/action-menu/contexts/ActionMenuContext';
|
|
import { ActionMenuComponentInstanceContext } from '@/action-menu/states/contexts/ActionMenuComponentInstanceContext';
|
|
import { useCommandMenu } from '@/command-menu/hooks/useCommandMenu';
|
|
import { useCommandMenuHotKeys } from '@/command-menu/hooks/useCommandMenuHotKeys';
|
|
import { isCommandMenuOpenedState } from '@/command-menu/states/isCommandMenuOpenedState';
|
|
import { ContextStoreComponentInstanceContext } from '@/context-store/states/contexts/ContextStoreComponentInstanceContext';
|
|
import { AppHotkeyScope } from '@/ui/utilities/hotkey/types/AppHotkeyScope';
|
|
import { useListenClickOutside } from '@/ui/utilities/pointer-event/hooks/useListenClickOutside';
|
|
import { useIsFeatureEnabled } from '@/workspace/hooks/useIsFeatureEnabled';
|
|
import styled from '@emotion/styled';
|
|
import { useRef } from 'react';
|
|
import { useRecoilValue } from 'recoil';
|
|
import { useIsMobile } from 'twenty-ui';
|
|
import { FeatureFlagKey } from '~/generated/graphql';
|
|
|
|
const StyledCommandMenu = styled.div`
|
|
background: ${({ theme }) => theme.background.secondary};
|
|
border-left: 1px solid ${({ theme }) => theme.border.color.medium};
|
|
box-shadow: ${({ theme }) => theme.boxShadow.strong};
|
|
font-family: ${({ theme }) => theme.font.family};
|
|
height: 100%;
|
|
overflow: hidden;
|
|
padding: 0;
|
|
position: fixed;
|
|
right: 0%;
|
|
top: 0%;
|
|
width: ${() => (useIsMobile() ? '100%' : '500px')};
|
|
z-index: 30;
|
|
`;
|
|
|
|
export const CommandMenuContainer = ({
|
|
children,
|
|
}: {
|
|
children: React.ReactNode;
|
|
}) => {
|
|
const { toggleCommandMenu, closeCommandMenu } = useCommandMenu();
|
|
|
|
const isWorkflowEnabled = useIsFeatureEnabled(
|
|
FeatureFlagKey.IsWorkflowEnabled,
|
|
);
|
|
const isCommandMenuOpened = useRecoilValue(isCommandMenuOpenedState);
|
|
|
|
const commandMenuRef = useRef<HTMLDivElement>(null);
|
|
|
|
useCommandMenuHotKeys();
|
|
|
|
useListenClickOutside({
|
|
refs: [commandMenuRef],
|
|
callback: closeCommandMenu,
|
|
listenerId: 'COMMAND_MENU_LISTENER_ID',
|
|
hotkeyScope: AppHotkeyScope.CommandMenuOpen,
|
|
});
|
|
|
|
return (
|
|
<ContextStoreComponentInstanceContext.Provider
|
|
value={{ instanceId: 'command-menu' }}
|
|
>
|
|
<ActionMenuComponentInstanceContext.Provider
|
|
value={{ instanceId: 'command-menu' }}
|
|
>
|
|
<ActionMenuContext.Provider
|
|
value={{
|
|
isInRightDrawer: false,
|
|
onActionExecutedCallback: toggleCommandMenu,
|
|
}}
|
|
>
|
|
<RecordActionMenuEntriesSetter />
|
|
{isWorkflowEnabled && <RecordAgnosticActionsSetterEffect />}
|
|
<ActionMenuConfirmationModals />
|
|
{isCommandMenuOpened && (
|
|
<StyledCommandMenu ref={commandMenuRef} className="command-menu">
|
|
{children}
|
|
</StyledCommandMenu>
|
|
)}
|
|
</ActionMenuContext.Provider>
|
|
</ActionMenuComponentInstanceContext.Provider>
|
|
</ContextStoreComponentInstanceContext.Provider>
|
|
);
|
|
};
|