// @flow import { observer } from "mobx-react"; import { TableOfContentsIcon, EditIcon, GlobeIcon, PlusIcon, MoreIcon, } from "outline-icons"; import * as React from "react"; import { Trans, useTranslation } from "react-i18next"; import { Link } from "react-router-dom"; import styled from "styled-components"; import Document from "models/Document"; import DocumentShare from "scenes/DocumentShare"; import { Action, Separator } from "components/Actions"; import Badge from "components/Badge"; import Breadcrumb, { Slash } from "components/Breadcrumb"; import Button from "components/Button"; import Collaborators from "components/Collaborators"; import Fade from "components/Fade"; import Header from "components/Header"; import Modal from "components/Modal"; import Tooltip from "components/Tooltip"; import useStores from "hooks/useStores"; import DocumentMenu from "menus/DocumentMenu"; import NewChildDocumentMenu from "menus/NewChildDocumentMenu"; import TemplatesMenu from "menus/TemplatesMenu"; import { metaDisplay } from "utils/keyboard"; import { newDocumentUrl, editDocumentUrl } from "utils/routeHelpers"; type Props = {| document: Document, isDraft: boolean, isEditing: boolean, isRevision: boolean, isSaving: boolean, isPublishing: boolean, publishingIsDisabled: boolean, savingIsDisabled: boolean, onDiscard: () => void, onSave: ({ done?: boolean, publish?: boolean, autosave?: boolean, }) => void, |}; function DocumentHeader({ document, isEditing, isDraft, isPublishing, isRevision, isSaving, savingIsDisabled, publishingIsDisabled, onSave, }: Props) { const { t } = useTranslation(); const { auth, ui, shares, policies } = useStores(); const [showShareModal, setShowShareModal] = React.useState(false); const handleSave = React.useCallback(() => { onSave({ done: true }); }, [onSave]); const handlePublish = React.useCallback(() => { onSave({ done: true, publish: true }); }, [onSave]); const handleShareLink = React.useCallback( async (ev: SyntheticEvent<>) => { await document.share(); setShowShareModal(true); }, [document] ); const handleCloseShareModal = React.useCallback(() => { setShowShareModal(false); }, []); const share = shares.getByDocumentId(document.id); const isPubliclyShared = share && share.published; const isNew = document.isNew; const isTemplate = document.isTemplate; const can = policies.abilities(document.id); const canShareDocument = auth.team && auth.team.sharing && can.share; const canToggleEmbeds = auth.team && auth.team.documentEmbeds; const canEdit = can.update && !isEditing; return ( <>
{!isEditing && ( <> )} {isEditing && ( <> )} {canEdit && ( )} {canEdit && can.createChildDocument && ( ( )} /> )} {canEdit && isTemplate && !isDraft && !isRevision && ( )} {can.update && isDraft && !isRevision && ( )} {!isEditing && ( <> (