import { Button } from "../../atoms/button"; import { LanguageMenu } from "./language-menu"; import { useIsServer } from "../../../hooks"; import { useUserData } from "../../../user-context"; import { Doc, DocMetadata } from "../../../../../libs/types/document"; import "./index.scss"; import BookmarkMenu from "./bookmark-menu"; import { Overlay, useUIStatus } from "../../../ui-context"; import { useEffect, useState } from "react"; import { KeyedMutator } from "swr"; import { SWRInfiniteResponse } from "swr/infinite"; import { Item } from "../../../plus/collections/api"; // "swr/infinite" doesn't export InfiniteKeyedMutator directly type InfiniteKeyedMutator = SWRInfiniteResponse< T extends (infer I)[] ? I : T >["mutate"]; export const ArticleActions = ({ doc, showTranslations = true, item, scopedMutator, }: { doc?: Doc | DocMetadata; showTranslations?: boolean; item?: Item; scopedMutator?: KeyedMutator | InfiniteKeyedMutator; }) => { const [showArticleActionsMenu, setShowArticleActionsMenu] = useState(false); const userData = useUserData(); const isServer = useIsServer(); const { toggleMobileOverlay } = useUIStatus(); const isAuthenticated = userData && userData.isAuthenticated; const translations = doc?.other_translations || []; const native = doc?.native; function toggleArticleActionsMenu() { setShowArticleActionsMenu(!showArticleActionsMenu); } useEffect( () => toggleMobileOverlay(Overlay.ArticleActions, showArticleActionsMenu), [showArticleActionsMenu, toggleMobileOverlay] ); // @TODO we will need the following when including the language drop-down // const translations = doc.other_translations || []; return ( (((translations && !!translations.length) || (!isServer && isAuthenticated)) && ( <>
    <> {!isServer && isAuthenticated && (
  • )} {showTranslations && translations && !!translations.length && native && (
  • showArticleActionsMenu && toggleArticleActionsMenu() } translations={translations} native={native} />
  • )}
)) || null ); };