Remove the heart icon button to add the view as a favorite from the top bar (#8769)

closes #8546 

@Bonapara please check the behaviour, if this is what you were looking
for! ;)
This commit is contained in:
nitin
2024-12-03 18:19:00 +05:30
committed by GitHub
parent 3c7805c6d0
commit 9a65e80566
11 changed files with 233 additions and 112 deletions

View File

@ -0,0 +1,125 @@
import { useCreateFavorite } from '@/favorites/hooks/useCreateFavorite';
import { useFavorites } from '@/favorites/hooks/useFavorites';
import { DropdownMenuItemsContainer } from '@/ui/layout/dropdown/components/DropdownMenuItemsContainer';
import { useDropdown } from '@/ui/layout/dropdown/hooks/useDropdown';
import { MenuItemWithOptionDropdown } from '@/ui/navigation/menu-item/components/MenuItemWithOptionDropdown';
import { useSetRecoilComponentStateV2 } from '@/ui/utilities/state/component-state/hooks/useSetRecoilComponentStateV2';
import { View } from '@/views/types/View';
import { useDeleteViewFromCurrentState } from '@/views/view-picker/hooks/useDeleteViewFromCurrentState';
import { useViewPickerMode } from '@/views/view-picker/hooks/useViewPickerMode';
import { viewPickerReferenceViewIdComponentState } from '@/views/view-picker/states/viewPickerReferenceViewIdComponentState';
import { useIsFeatureEnabled } from '@/workspace/hooks/useIsFeatureEnabled';
import { useState } from 'react';
import {
IconHeart,
IconLock,
IconPencil,
IconTrash,
MenuItem,
useIcons,
} from 'twenty-ui';
type ViewPickerOptionDropdownProps = {
isIndexView: boolean;
view: View;
onEdit: (event: React.MouseEvent<HTMLElement>, viewId: string) => void;
handleViewSelect: (viewId: string) => void;
};
export const ViewPickerOptionDropdown = ({
isIndexView,
onEdit,
view,
handleViewSelect,
}: ViewPickerOptionDropdownProps) => {
const { closeDropdown } = useDropdown(`view-picker-options-${view.id}`);
const { getIcon } = useIcons();
const [isHovered, setIsHovered] = useState(false);
const { deleteViewFromCurrentState } = useDeleteViewFromCurrentState();
const setViewPickerReferenceViewId = useSetRecoilComponentStateV2(
viewPickerReferenceViewIdComponentState,
);
const { setViewPickerMode } = useViewPickerMode();
const isFavoriteFolderEnabled = useIsFeatureEnabled(
'IS_FAVORITE_FOLDER_ENABLED',
);
const { sortedFavorites: favorites } = useFavorites();
const { createFavorite } = useCreateFavorite();
const isFavorite = favorites.some(
(favorite) => favorite.recordId === view.id && favorite.workspaceMemberId,
);
const handleDelete = () => {
setViewPickerReferenceViewId(view.id);
deleteViewFromCurrentState();
closeDropdown();
};
const handleAddToFavorites = () => {
if (!isFavorite) {
createFavorite(view, 'view');
}
setViewPickerReferenceViewId(view.id);
setViewPickerMode('favorite-folders-picker');
closeDropdown();
};
return (
<>
<MenuItemWithOptionDropdown
text={view.name}
LeftIcon={getIcon(view.icon)}
onClick={() => handleViewSelect(view.id)}
isIconDisplayedOnHoverOnly={!isIndexView}
RightIcon={!isHovered && isIndexView ? IconLock : null}
onMouseEnter={() => setIsHovered(true)}
onMouseLeave={() => {
setIsHovered(false);
closeDropdown();
}}
dropdownPlacement="bottom-start"
dropdownId={`view-picker-options-${view.id}`}
dropdownContent={
<DropdownMenuItemsContainer>
{isIndexView ? (
isFavoriteFolderEnabled && (
<MenuItem
LeftIcon={IconHeart}
text={isFavorite ? 'Manage favorite' : 'Add to Favorite'}
onClick={handleAddToFavorites}
/>
)
) : (
<>
{isFavoriteFolderEnabled && (
<MenuItem
LeftIcon={IconHeart}
text={isFavorite ? 'Manage favorite' : 'Add to Favorite'}
onClick={handleAddToFavorites}
/>
)}
<MenuItem
LeftIcon={IconPencil}
text="Edit"
onClick={(event) => {
onEdit(event, view.id);
closeDropdown();
}}
/>
<MenuItem
LeftIcon={IconTrash}
text="Delete"
onClick={handleDelete}
accent="danger"
/>
</>
)}
</DropdownMenuItemsContainer>
}
/>
</>
);
};