import { useObserver } from "mobx-react"; import * as React from "react"; import { useTranslation } from "react-i18next"; import { usePopoverState, PopoverDisclosure } from "reakit/Popover"; import styled from "styled-components"; import Document from "~/models/Document"; import DocumentMeta from "~/components/DocumentMeta"; import DocumentViews from "~/components/DocumentViews"; import Popover from "~/components/Popover"; import useStores from "~/hooks/useStores"; type Props = { document: Document; isDraft: boolean; to?: string; rtl?: boolean; }; function DocumentMetaWithViews({ to, isDraft, document, ...rest }: Props) { const { views } = useStores(); const { t } = useTranslation(); const documentViews = useObserver(() => views.inDocument(document.id)); const totalViewers = documentViews.length; const onlyYou = totalViewers === 1 && documentViews[0].user.id; React.useEffect(() => { if (!document.isDeleted) { views.fetchPage({ documentId: document.id, }); } }, [views, document.id, document.isDeleted]); const popover = usePopoverState({ gutter: 8, placement: "bottom", modal: true, }); return ( {totalViewers && !isDraft ? ( {(props) => ( <>  •  {t("Viewed by")}{" "} {onlyYou ? t("only you") : `${totalViewers} ${ totalViewers === 1 ? t("person") : t("people") }`} )} ) : null} ); } const Meta = styled(DocumentMeta)<{ rtl?: boolean }>` justify-content: ${(props) => (props.rtl ? "flex-end" : "flex-start")}; margin: -12px 0 2em 0; font-size: 14px; position: relative; z-index: 1; a { color: inherit; &:hover { text-decoration: underline; } } @media print { display: none; } `; export default DocumentMetaWithViews;