import type { FC } from 'react'; import React, { useState, useCallback } from 'react'; import { LoadingSpinner } from '@growi/ui/dist/components'; import { useTranslation } from 'next-i18next'; import DropdownToggle from 'reactstrap/esm/DropdownToggle'; import Popover from 'reactstrap/esm/Popover'; import PopoverBody from 'reactstrap/esm/PopoverBody'; import UncontrolledTooltip from 'reactstrap/esm/UncontrolledTooltip'; import { useSWRxBookmarkedUsers } from '~/stores/bookmark'; import { useIsGuestUser } from '~/stores/context'; import { BookmarkFolderMenu } from '../Bookmarks/BookmarkFolderMenu'; import UserPictureList from '../Common/UserPictureList'; import styles from './BookmarkButtons.module.scss'; import popoverStyles from './user-list-popover.module.scss'; interface Props { pageId: string, isBookmarked?: boolean, bookmarkCount: number, } export const BookmarkButtons: FC = (props: Props) => { const { t } = useTranslation(); const { pageId, isBookmarked, bookmarkCount, } = props; const [isBookmarkFolderMenuOpen, setBookmarkFolderMenuOpen] = useState(false); const [isBookmarkUsersPopoverOpen, setBookmarkUsersPopoverOpen] = useState(false); const { data: isGuestUser } = useIsGuestUser(); const { data: bookmarkedUsers, isLoading: isLoadingBookmarkedUsers } = useSWRxBookmarkedUsers(isBookmarkUsersPopoverOpen ? pageId : null); const unbookmarkHandler = () => { setBookmarkFolderMenuOpen(false); }; const toggleBookmarkFolderMenuHandler = () => { setBookmarkFolderMenuOpen(v => !v); }; const toggleBookmarkUsersPopover = () => { setBookmarkUsersPopoverOpen(v => !v); }; const getTooltipMessage = useCallback(() => { if (isGuestUser) { return 'Not available for guest'; } return 'tooltip.bookmark'; }, [isGuestUser]); if (pageId == null) { return <>; } return (
bookmark {t(getTooltipMessage())} { isLoadingBookmarkedUsers && } { !isLoadingBookmarkedUsers && bookmarkedUsers != null && ( <> { bookmarkedUsers.length > 0 ? (
) : t('No users have bookmarked yet') } ) }
); };