// @flow import { observer } from "mobx-react"; import { TableOfContentsIcon, EditIcon, PlusIcon, MoonIcon, MoreIcon, SunIcon, } 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 { Action, Separator } from "components/Actions"; import Badge from "components/Badge"; import Button from "components/Button"; import Collaborators from "components/Collaborators"; import DocumentBreadcrumb from "components/DocumentBreadcrumb"; import Header from "components/Header"; import Tooltip from "components/Tooltip"; import PublicBreadcrumb from "./PublicBreadcrumb"; import ShareButton from "./ShareButton"; import useCurrentTeam from "hooks/useCurrentTeam"; import useMobile from "hooks/useMobile"; import useStores from "hooks/useStores"; import DocumentMenu from "menus/DocumentMenu"; import NewChildDocumentMenu from "menus/NewChildDocumentMenu"; import TableOfContentsMenu from "menus/TableOfContentsMenu"; import TemplatesMenu from "menus/TemplatesMenu"; import { type NavigationNode } from "types"; import { metaDisplay } from "utils/keyboard"; import { newDocumentPath, editDocumentUrl } from "utils/routeHelpers"; type Props = {| document: Document, sharedTree: ?NavigationNode, shareId: ?string, isDraft: boolean, isEditing: boolean, isRevision: boolean, isSaving: boolean, isPublishing: boolean, publishingIsDisabled: boolean, savingIsDisabled: boolean, onSelectTemplate: (template: Document) => void, onDiscard: () => void, onSave: ({ done?: boolean, publish?: boolean, autosave?: boolean, }) => void, headings: { title: string, level: number, id: string }[], |}; function DocumentHeader({ document, shareId, isEditing, isDraft, isPublishing, isRevision, isSaving, savingIsDisabled, publishingIsDisabled, sharedTree, onSelectTemplate, onSave, headings, }: Props) { const { t } = useTranslation(); const team = useCurrentTeam(); const { ui, policies } = useStores(); const { resolvedTheme } = ui; const isMobile = useMobile(); const handleSave = React.useCallback(() => { onSave({ done: true }); }, [onSave]); const handlePublish = React.useCallback(() => { onSave({ done: true, publish: true }); }, [onSave]); const isNew = document.isNewDocument; const isTemplate = document.isTemplate; const can = policies.abilities(document.id); const canToggleEmbeds = team?.documentEmbeds; const canEdit = can.update && !isEditing; const toc = ( ); const appearanceAction = ( )} {canEdit && editAction} {canEdit && can.createChildDocument && !isMobile && ( ( )} /> )} {canEdit && isTemplate && !isDraft && !isRevision && ( )} {can.update && isDraft && !isRevision && ( )} {!isEditing && ( <> (