Left menu and chip links (#12294)
Small optimization for faster loading (gaining ~80ms - average time of a click) It might seem a little over-engineered but there are a lot of edge cases and I couldn't find a simpler solution I also tried to tackle Link Chips but it's more complex so this will be for another PR
This commit is contained in:
@ -5,6 +5,7 @@ import { useRecordChipData } from '@/object-record/hooks/useRecordChipData';
|
||||
import { recordIndexOpenRecordInState } from '@/object-record/record-index/states/recordIndexOpenRecordInState';
|
||||
import { ObjectRecord } from '@/object-record/types/ObjectRecord';
|
||||
import { ViewOpenRecordInType } from '@/views/types/ViewOpenRecordInType';
|
||||
import { MouseEvent } from 'react';
|
||||
import { useRecoilValue } from 'recoil';
|
||||
import {
|
||||
AvatarChip,
|
||||
@ -13,7 +14,7 @@ import {
|
||||
ChipVariant,
|
||||
LinkAvatarChip,
|
||||
} from 'twenty-ui/components';
|
||||
import { isModifiedEvent } from 'twenty-ui/utilities';
|
||||
import { TriggerEventType } from 'twenty-ui/utilities';
|
||||
|
||||
export type RecordChipProps = {
|
||||
objectNameSingular: string;
|
||||
@ -25,6 +26,7 @@ export type RecordChipProps = {
|
||||
to?: string | undefined;
|
||||
size?: ChipSize;
|
||||
isLabelHidden?: boolean;
|
||||
triggerEvent?: TriggerEventType;
|
||||
};
|
||||
|
||||
export const RecordChip = ({
|
||||
@ -37,6 +39,7 @@ export const RecordChip = ({
|
||||
size,
|
||||
forceDisableClick = false,
|
||||
isLabelHidden = false,
|
||||
triggerEvent = 'MOUSE_DOWN',
|
||||
}: RecordChipProps) => {
|
||||
const { recordChipData } = useRecordChipData({
|
||||
objectNameSingular,
|
||||
@ -47,6 +50,18 @@ export const RecordChip = ({
|
||||
|
||||
const recordIndexOpenRecordIn = useRecoilValue(recordIndexOpenRecordInState);
|
||||
|
||||
const isSidePanelViewOpenRecordInType =
|
||||
recordIndexOpenRecordIn === ViewOpenRecordInType.SIDE_PANEL;
|
||||
|
||||
const handleCustomClick = isSidePanelViewOpenRecordInType
|
||||
? (_event: MouseEvent<HTMLElement>) => {
|
||||
openRecordInCommandMenu({
|
||||
recordId: record.id,
|
||||
objectNameSingular,
|
||||
});
|
||||
}
|
||||
: undefined;
|
||||
|
||||
// TODO temporary until we create a record show page for Workspaces members
|
||||
|
||||
if (
|
||||
@ -67,17 +82,6 @@ export const RecordChip = ({
|
||||
);
|
||||
}
|
||||
|
||||
const isSidePanelViewOpenRecordInType =
|
||||
recordIndexOpenRecordIn === ViewOpenRecordInType.SIDE_PANEL;
|
||||
|
||||
const onClick = isSidePanelViewOpenRecordInType
|
||||
? () =>
|
||||
openRecordInCommandMenu({
|
||||
recordId: record.id,
|
||||
objectNameSingular,
|
||||
})
|
||||
: undefined;
|
||||
|
||||
return (
|
||||
<LinkAvatarChip
|
||||
size={size}
|
||||
@ -95,16 +99,8 @@ export const RecordChip = ({
|
||||
: AvatarChipVariant.Transparent)
|
||||
}
|
||||
to={to ?? getLinkToShowPage(objectNameSingular, record)}
|
||||
onClick={(clickEvent) => {
|
||||
// TODO refactor wrapper event listener to avoid colliding events
|
||||
clickEvent.stopPropagation();
|
||||
|
||||
const isModifiedEventResult = isModifiedEvent(clickEvent);
|
||||
if (isSidePanelViewOpenRecordInType && !isModifiedEventResult) {
|
||||
clickEvent.preventDefault();
|
||||
onClick?.();
|
||||
}
|
||||
}}
|
||||
onClick={handleCustomClick}
|
||||
triggerEvent={triggerEvent}
|
||||
/>
|
||||
);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user