2727-fix(front): CommandMenu and KeyboardMenu invoke handled (#2783)
* 2727-fix(front): CommandMenu and KeyboardMenu invoke handled * Fix Command Menu and bug on metadata re-render --------- Co-authored-by: Charles Bochet <charles@twenty.com>
This commit is contained in:
@ -4,6 +4,7 @@ import { useRecoilValue } from 'recoil';
|
|||||||
|
|
||||||
import { useOpenActivityRightDrawer } from '@/activities/hooks/useOpenActivityRightDrawer';
|
import { useOpenActivityRightDrawer } from '@/activities/hooks/useOpenActivityRightDrawer';
|
||||||
import { CommandMenuSelectableListEffect } from '@/command-menu/components/CommandMenuSelectableListEffect';
|
import { CommandMenuSelectableListEffect } from '@/command-menu/components/CommandMenuSelectableListEffect';
|
||||||
|
import { useKeyboardShortcutMenu } from '@/keyboard-shortcut-menu/hooks/useKeyboardShortcutMenu';
|
||||||
import { useFindManyRecords } from '@/object-record/hooks/useFindManyRecords';
|
import { useFindManyRecords } from '@/object-record/hooks/useFindManyRecords';
|
||||||
import { Person } from '@/people/types/Person';
|
import { Person } from '@/people/types/Person';
|
||||||
import { IconNotes } from '@/ui/display/icon';
|
import { IconNotes } from '@/ui/display/icon';
|
||||||
@ -89,6 +90,7 @@ export const CommandMenu = () => {
|
|||||||
const isCommandMenuOpened = useRecoilValue(isCommandMenuOpenedState);
|
const isCommandMenuOpened = useRecoilValue(isCommandMenuOpenedState);
|
||||||
const [search, setSearch] = useState('');
|
const [search, setSearch] = useState('');
|
||||||
const commandMenuCommands = useRecoilValue(commandMenuCommandsState);
|
const commandMenuCommands = useRecoilValue(commandMenuCommandsState);
|
||||||
|
const { closeKeyboardShortcutMenu } = useKeyboardShortcutMenu();
|
||||||
|
|
||||||
const handleSearchChange = (event: React.ChangeEvent<HTMLInputElement>) => {
|
const handleSearchChange = (event: React.ChangeEvent<HTMLInputElement>) => {
|
||||||
setSearch(event.target.value);
|
setSearch(event.target.value);
|
||||||
@ -97,6 +99,7 @@ export const CommandMenu = () => {
|
|||||||
useScopedHotkeys(
|
useScopedHotkeys(
|
||||||
'ctrl+k,meta+k',
|
'ctrl+k,meta+k',
|
||||||
() => {
|
() => {
|
||||||
|
closeKeyboardShortcutMenu();
|
||||||
setSearch('');
|
setSearch('');
|
||||||
toggleCommandMenu();
|
toggleCommandMenu();
|
||||||
},
|
},
|
||||||
@ -108,6 +111,7 @@ export const CommandMenu = () => {
|
|||||||
'esc',
|
'esc',
|
||||||
() => {
|
() => {
|
||||||
setSearch('');
|
setSearch('');
|
||||||
|
closeKeyboardShortcutMenu();
|
||||||
closeCommandMenu();
|
closeCommandMenu();
|
||||||
},
|
},
|
||||||
AppHotkeyScope.CommandMenu,
|
AppHotkeyScope.CommandMenu,
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
import { useRecoilValue } from 'recoil';
|
import { useRecoilValue } from 'recoil';
|
||||||
|
|
||||||
|
import { useCommandMenu } from '@/command-menu/hooks/useCommandMenu';
|
||||||
import { useScopedHotkeys } from '@/ui/utilities/hotkey/hooks/useScopedHotkeys';
|
import { useScopedHotkeys } from '@/ui/utilities/hotkey/hooks/useScopedHotkeys';
|
||||||
import { AppHotkeyScope } from '@/ui/utilities/hotkey/types/AppHotkeyScope';
|
import { AppHotkeyScope } from '@/ui/utilities/hotkey/types/AppHotkeyScope';
|
||||||
|
|
||||||
@ -20,9 +21,11 @@ export const KeyboardShortcutMenu = () => {
|
|||||||
const isKeyboardShortcutMenuOpened = useRecoilValue(
|
const isKeyboardShortcutMenuOpened = useRecoilValue(
|
||||||
isKeyboardShortcutMenuOpenedState,
|
isKeyboardShortcutMenuOpenedState,
|
||||||
);
|
);
|
||||||
|
const { closeCommandMenu } = useCommandMenu();
|
||||||
useScopedHotkeys(
|
useScopedHotkeys(
|
||||||
'shift+?,meta+?',
|
'shift+?,meta+?',
|
||||||
() => {
|
() => {
|
||||||
|
closeCommandMenu();
|
||||||
toggleKeyboardShortcutMenu();
|
toggleKeyboardShortcutMenu();
|
||||||
},
|
},
|
||||||
AppHotkeyScope.KeyboardShortcutMenu,
|
AppHotkeyScope.KeyboardShortcutMenu,
|
||||||
@ -30,7 +33,7 @@ export const KeyboardShortcutMenu = () => {
|
|||||||
);
|
);
|
||||||
|
|
||||||
useScopedHotkeys(
|
useScopedHotkeys(
|
||||||
'Esc',
|
'esc',
|
||||||
() => {
|
() => {
|
||||||
closeKeyboardShortcutMenu();
|
closeKeyboardShortcutMenu();
|
||||||
},
|
},
|
||||||
|
|||||||
@ -1,7 +1,23 @@
|
|||||||
|
import { useEffect } from 'react';
|
||||||
|
import { useRecoilState } from 'recoil';
|
||||||
|
|
||||||
import { useFindManyObjectMetadataItems } from '@/object-metadata/hooks/useFindManyObjectMetadataItems';
|
import { useFindManyObjectMetadataItems } from '@/object-metadata/hooks/useFindManyObjectMetadataItems';
|
||||||
|
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
|
||||||
|
import { isDeeplyEqual } from '~/utils/isDeeplyEqual';
|
||||||
|
|
||||||
export const ObjectMetadataItemsLoadEffect = () => {
|
export const ObjectMetadataItemsLoadEffect = () => {
|
||||||
useFindManyObjectMetadataItems();
|
const { objectMetadataItems: newObjectMetadataItems } =
|
||||||
|
useFindManyObjectMetadataItems();
|
||||||
|
|
||||||
|
const [objectMetadataItems, setObjectMetadataItems] = useRecoilState(
|
||||||
|
objectMetadataItemsState,
|
||||||
|
);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (!isDeeplyEqual(objectMetadataItems, newObjectMetadataItems)) {
|
||||||
|
setObjectMetadataItems(newObjectMetadataItems);
|
||||||
|
}
|
||||||
|
}, [newObjectMetadataItems, objectMetadataItems, setObjectMetadataItems]);
|
||||||
|
|
||||||
return <></>;
|
return <></>;
|
||||||
};
|
};
|
||||||
|
|||||||
@ -3,25 +3,31 @@ import { useRecoilValue } from 'recoil';
|
|||||||
import { currentWorkspaceState } from '@/auth/states/currentWorkspaceState';
|
import { currentWorkspaceState } from '@/auth/states/currentWorkspaceState';
|
||||||
import { ObjectMetadataItemsLoadEffect } from '@/object-metadata/components/ObjectMetadataItemsLoadEffect';
|
import { ObjectMetadataItemsLoadEffect } from '@/object-metadata/components/ObjectMetadataItemsLoadEffect';
|
||||||
import { ObjectMetadataItemsRelationPickerEffect } from '@/object-metadata/components/ObjectMetadataItemsRelationPickerEffect';
|
import { ObjectMetadataItemsRelationPickerEffect } from '@/object-metadata/components/ObjectMetadataItemsRelationPickerEffect';
|
||||||
|
import { useFindManyObjectMetadataItems } from '@/object-metadata/hooks/useFindManyObjectMetadataItems';
|
||||||
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
|
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
|
||||||
import { RelationPickerScope } from '@/ui/input/components/internal/relation-picker/scopes/RelationPickerScope';
|
import { RelationPickerScope } from '@/ui/input/components/internal/relation-picker/scopes/RelationPickerScope';
|
||||||
|
|
||||||
export const ObjectMetadataItemsProvider = ({
|
export const ObjectMetadataItemsProvider = ({
|
||||||
children,
|
children,
|
||||||
}: React.PropsWithChildren) => {
|
}: React.PropsWithChildren) => {
|
||||||
|
useFindManyObjectMetadataItems();
|
||||||
|
|
||||||
const objectMetadataItems = useRecoilValue(objectMetadataItemsState);
|
const objectMetadataItems = useRecoilValue(objectMetadataItemsState);
|
||||||
const currentWorkspace = useRecoilValue(currentWorkspaceState);
|
const currentWorkspace = useRecoilValue(currentWorkspaceState);
|
||||||
|
|
||||||
return objectMetadataItems.length < 1 && currentWorkspace ? (
|
return (
|
||||||
<>
|
<>
|
||||||
<ObjectMetadataItemsLoadEffect />
|
<ObjectMetadataItemsLoadEffect />
|
||||||
</>
|
{objectMetadataItems.length < 1 && currentWorkspace ? (
|
||||||
) : (
|
<></>
|
||||||
<>
|
) : (
|
||||||
<ObjectMetadataItemsRelationPickerEffect />
|
<>
|
||||||
<RelationPickerScope relationPickerScopeId="relation-picker">
|
<ObjectMetadataItemsRelationPickerEffect />
|
||||||
{children}
|
<RelationPickerScope relationPickerScopeId="relation-picker">
|
||||||
</RelationPickerScope>
|
{children}
|
||||||
|
</RelationPickerScope>
|
||||||
|
</>
|
||||||
|
)}
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -1,8 +1,6 @@
|
|||||||
import { useMemo } from 'react';
|
import { useMemo } from 'react';
|
||||||
import { useQuery } from '@apollo/client';
|
import { useQuery } from '@apollo/client';
|
||||||
import { useRecoilCallback } from 'recoil';
|
|
||||||
|
|
||||||
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
|
|
||||||
import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar';
|
import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar';
|
||||||
import {
|
import {
|
||||||
FieldFilter,
|
FieldFilter,
|
||||||
@ -10,7 +8,6 @@ import {
|
|||||||
ObjectMetadataItemsQuery,
|
ObjectMetadataItemsQuery,
|
||||||
ObjectMetadataItemsQueryVariables,
|
ObjectMetadataItemsQueryVariables,
|
||||||
} from '~/generated-metadata/graphql';
|
} from '~/generated-metadata/graphql';
|
||||||
import { isDeeplyEqual } from '~/utils/isDeeplyEqual';
|
|
||||||
import { logError } from '~/utils/logError';
|
import { logError } from '~/utils/logError';
|
||||||
|
|
||||||
import { FIND_MANY_OBJECT_METADATA_ITEMS } from '../graphql/queries';
|
import { FIND_MANY_OBJECT_METADATA_ITEMS } from '../graphql/queries';
|
||||||
@ -50,24 +47,6 @@ export const useFindManyObjectMetadataItems = ({
|
|||||||
},
|
},
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
onCompleted: useRecoilCallback(
|
|
||||||
({ snapshot, set }) =>
|
|
||||||
(data) => {
|
|
||||||
const objectMetadataItems =
|
|
||||||
mapPaginatedObjectMetadataItemsToObjectMetadataItems({
|
|
||||||
pagedObjectMetadataItems: data,
|
|
||||||
});
|
|
||||||
|
|
||||||
const actualObjectMetadataItems = snapshot
|
|
||||||
.getLoadable(objectMetadataItemsState)
|
|
||||||
.getValue();
|
|
||||||
|
|
||||||
if (!isDeeplyEqual(objectMetadataItems, actualObjectMetadataItems)) {
|
|
||||||
set(objectMetadataItemsState, objectMetadataItems);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
[],
|
|
||||||
),
|
|
||||||
});
|
});
|
||||||
|
|
||||||
const objectMetadataItems = useMemo(() => {
|
const objectMetadataItems = useMemo(() => {
|
||||||
|
|||||||
Reference in New Issue
Block a user