// @flow import { observer } from "mobx-react"; import * as React from "react"; import { useTranslation } from "react-i18next"; import { Link } from "react-router-dom"; import styled from "styled-components"; import Document from "models/Document"; import DocumentBreadcrumb from "components/DocumentBreadcrumb"; import DocumentTasks from "components/DocumentTasks"; import Flex from "components/Flex"; import Time from "components/Time"; import useCurrentUser from "hooks/useCurrentUser"; import useStores from "hooks/useStores"; const Container = styled(Flex)` justify-content: ${(props) => (props.rtl ? "flex-end" : "flex-start")}; color: ${(props) => props.theme.textTertiary}; font-size: 13px; white-space: nowrap; overflow: hidden; min-width: 0; `; const Viewed = styled.span` text-overflow: ellipsis; overflow: hidden; `; const Modified = styled.span` color: ${(props) => props.theme.textTertiary}; font-weight: ${(props) => (props.highlight ? "600" : "400")}; `; type Props = {| showCollection?: boolean, showPublished?: boolean, showLastViewed?: boolean, showNestedDocuments?: boolean, document: Document, children: React.Node, to?: string, |}; function DocumentMeta({ showPublished, showCollection, showLastViewed, showNestedDocuments, document, children, to, ...rest }: Props) { const { t } = useTranslation(); const { collections } = useStores(); const user = useCurrentUser(); const { modifiedSinceViewed, updatedAt, updatedBy, createdAt, publishedAt, archivedAt, deletedAt, isDraft, lastViewedAt, isTasks, isTemplate, } = document; // Prevent meta information from displaying if updatedBy is not available. // Currently the situation where this is true is rendering share links. if (!updatedBy) { return null; } const collection = collections.get(document.collectionId); const lastUpdatedByCurrentUser = user.id === updatedBy.id; let content; if (deletedAt) { content = ( {t("deleted")} ); } else if (archivedAt) { content = ( {t("archived")} ); } else if (createdAt === updatedAt) { content = ( {t("created")} ); } else if (publishedAt && (publishedAt === updatedAt || showPublished)) { content = ( {t("published")} ); } else if (isDraft) { content = ( {t("saved")} ); } else { content = ( {t("updated")} ); } const nestedDocumentsCount = collection ? collection.getDocumentChildren(document.id).length : 0; const canShowProgressBar = isTasks && !isTemplate; const timeSinceNow = () => { if (isDraft || !showLastViewed) { return null; } if (!lastViewedAt) { return ( • {t("Never viewed")} ); } return ( • {t("Viewed")} ); }; return ( {lastUpdatedByCurrentUser ? t("You") : updatedBy.name}  {to ? {content} : content} {showCollection && collection && (  {t("in")}  )} {showNestedDocuments && nestedDocumentsCount > 0 && (  • {nestedDocumentsCount}{" "} {t("nested document", { count: nestedDocumentsCount })} )}  {timeSinceNow()} {canShowProgressBar && ( <>  •  )} {children} ); } export default observer(DocumentMeta);