import { ShareAssetType } from '@/api/asset_interfaces';
import { AppTooltip } from '@/components/ui/tooltip';
import React, { useMemo } from 'react';
import { useMemoizedFn } from '@/hooks';
import { Button } from '@/components/ui/buttons';
import { cn } from '@/lib/classMerge';
import { Star } from '@/components/ui/icons';
import { Star as StarFilled } from '@/components/ui/icons/NucleoIconFilled';
import { cva } from 'class-variance-authority';
import {
useAddUserFavorite,
useDeleteUserFavorite,
useGetUserFavorites
} from '@/api/buster_rest/users';
const favoriteStarVariants = cva('transition-colors', {
variants: {
variant: {
default: 'text-icon-color hover:text-foreground',
tertiary: 'text-text-tertiary hover:text-icon-color'
},
isFavorited: {
true: 'text-yellow-500! hover:text-yellow-500!',
false: ''
}
},
defaultVariants: {
variant: 'default',
isFavorited: false
}
});
export const FavoriteStar: React.FC<{
id: string;
type: ShareAssetType;
title: string;
className?: string;
iconStyle?: 'default' | 'tertiary';
}> = React.memo(({ title: name, id, type, className = '', iconStyle = 'default' }) => {
const { isFavorited, onFavoriteClick } = useFavoriteStar({ id, type, name });
const tooltipText = isFavorited ? 'Remove from favorites' : 'Add to favorites';
return (
);
});
FavoriteStar.displayName = 'FavoriteStar';
export const useFavoriteStar = ({
id,
type,
name
}: {
id: string;
type: ShareAssetType;
name: string;
}) => {
const { data: userFavorites } = useGetUserFavorites();
const { mutateAsync: removeItemFromFavorite } = useDeleteUserFavorite();
const { mutateAsync: addItemToFavorite } = useAddUserFavorite();
const isFavorited = useMemo(() => {
return userFavorites?.some((favorite) => favorite.id === id || favorite.collection_id === id);
}, [userFavorites, id]);
console.log('userFavorites', isFavorited, userFavorites);
const onFavoriteClick = useMemoizedFn(async (e?: React.MouseEvent) => {
e?.stopPropagation();
e?.preventDefault();
if (!isFavorited)
return await addItemToFavorite({
asset_type: type,
id,
name
});
await removeItemFromFavorite(id);
});
return useMemo(
() => ({
isFavorited,
onFavoriteClick
}),
[isFavorited, onFavoriteClick]
);
};