import { Collection, CollectionAccessType } from '@semble/types';
import { Group, Menu, ActionIcon } from '@mantine/core';
import EditCollectionModal from '../editCollectionModal/EditCollectionModal';
import DeleteCollectionModal from '../deleteCollectionModal/DeleteCollectionModal';
import { BsThreeDots, BsPencilFill, BsTrash2Fill } from 'react-icons/bs';
import { Fragment, useState } from 'react';
import { useAuth } from '@/hooks/useAuth';
import { FiPlus } from 'react-icons/fi';
import AddCardDrawer from '@/features/cards/components/addCardDrawer/AddCardDrawer';
import AddCardToModal from '@/features/cards/components/addCardToModal/AddCardToModal';
import FollowButton from '@/features/follows/components/followButton/FollowButton';
import useGetCardFromMyLibrary from '@/features/cards/lib/queries/useGetCardFromMyLibrary';
import useSembleLibraries from '@/features/semble/lib/queries/useSembleLibraries';
import { IoMdCheckmark } from 'react-icons/io';
import { FaRegNoteSticky } from 'react-icons/fa6';
import { TbPlugConnected } from 'react-icons/tb';
import AddConnectionModal from '@/features/connections/components/addConnectionModal/AddConnectionModal';
interface Props {
collection: Collection & {
rkey: string;
};
}
function AuthenticatedCollectionActions({ collection }: Props) {
const { user } = useAuth();
const [showAddDrawer, setShowAddDrawer] = useState(false);
const [showSaveToLibraryModal, setShowSaveToLibraryModal] = useState(false);
const [showAddConnectionModal, setShowAddConnectionModal] = useState(false);
const isAuthor = user?.handle === collection.author?.handle;
const canAddCard =
collection.accessType === CollectionAccessType.OPEN || isAuthor;
const collectionPageUrl = `${process.env.NEXT_PUBLIC_APP_URL}/profile/${collection.author?.handle}/collections/${collection.rkey}`;
const cardStatus = useGetCardFromMyLibrary({ url: collectionPageUrl });
const isInYourLibrary = cardStatus.data.card?.urlInLibrary;
const { data: librariesData } = useSembleLibraries({
url: collectionPageUrl,
});
const allLibraries =
librariesData?.pages.flatMap((page) => page.libraries ?? []) ?? [];
const urlLibraryCount = allLibraries.length ?? 0;
return (
{
setShowAddConnectionModal(true);
}}
>
{!isAuthor && (
)}
setShowAddConnectionModal(false)}
sourceUrl={collectionPageUrl}
/>
setShowSaveToLibraryModal(false)}
url={collectionPageUrl}
cardId={cardStatus.data.card?.id}
note={cardStatus.data.card?.note?.text}
isInYourLibrary={isInYourLibrary}
urlLibraryCount={urlLibraryCount}
/>
{user && (
setShowAddDrawer(false)}
selectedCollection={collection}
/>
)}
);
}
function AuthorCollectionMenu({ collection }: Props) {
const [showEditModal, setShowEditModal] = useState(false);
const [showDeleteModal, setShowDeleteModal] = useState(false);
return (
setShowEditModal(false)}
collection={{
id: collection.id,
rkey: collection.rkey,
name: collection.name,
description: collection.description,
accessType: collection.accessType,
uri: collection.uri,
authorHandle: collection.author?.handle,
}}
/>
setShowDeleteModal(false)}
collectionId={collection.id}
/>
);
}
export default function CollectionActions(props: Props) {
const { isAuthenticated, user } = useAuth();
const isAuthor =
isAuthenticated && user?.handle === props.collection.author?.handle;
return (
{isAuthenticated && (
)}
{isAuthor && }
);
}