// @flow import { observer } from "mobx-react"; import { ArchiveIcon, EditIcon, GoToIcon, ShapesIcon, TrashIcon, } from "outline-icons"; 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 CollectionIcon from "components/CollectionIcon"; import Flex from "components/Flex"; import useStores from "hooks/useStores"; import BreadcrumbMenu from "menus/BreadcrumbMenu"; import { collectionUrl } from "utils/routeHelpers"; type Props = {| document: Document, children?: React.Node, onlyText: boolean, |}; function Icon({ document }) { const { t } = useTranslation(); if (document.isDeleted) { return ( <>   {t("Trash")} ); } if (document.isArchived) { return ( <>   {t("Archive")} ); } if (document.isDraft) { return ( <>   {t("Drafts")} ); } if (document.isTemplate) { return ( <>   {t("Templates")} ); } return null; } const Breadcrumb = ({ document, children, onlyText }: Props) => { const { collections } = useStores(); const { t } = useTranslation(); if (!collections.isLoaded) { return; } let collection = collections.get(document.collectionId); if (!collection) { collection = { id: document.collectionId, name: t("Deleted Collection"), color: "currentColor", }; } const path = collection.pathToDocument ? collection.pathToDocument(document.id).slice(0, -1) : []; if (onlyText === true) { return ( <> {collection.name} {path.map((n) => ( {n.title} ))} ); } const isNestedDocument = path.length > 1; const lastPath = path.length ? path[path.length - 1] : undefined; const menuPath = isNestedDocument ? path.slice(0, -1) : []; return (   {collection.name} {isNestedDocument && ( <> )} {lastPath && ( <> {" "} {lastPath.title} )} {children} ); }; export const Slash = styled(GoToIcon)` flex-shrink: 0; fill: ${(props) => props.theme.divider}; `; const SmallSlash = styled(GoToIcon)` width: 12px; height: 12px; vertical-align: middle; flex-shrink: 0; fill: ${(props) => props.theme.slate}; opacity: 0.5; `; const Crumb = styled(Link)` color: ${(props) => props.theme.text}; font-size: 15px; height: 24px; text-overflow: ellipsis; white-space: nowrap; overflow: hidden; &:hover { text-decoration: underline; } `; const CollectionName = styled(Link)` display: flex; flex-shrink: 1; color: ${(props) => props.theme.text}; font-size: 15px; font-weight: 500; white-space: nowrap; overflow: hidden; min-width: 0; svg { flex-shrink: 0; } `; const CategoryName = styled(CollectionName)` flex-shrink: 0; `; export default observer(Breadcrumb);