// @flow import { observer } from "mobx-react"; import * as React from "react"; import { useTranslation } from "react-i18next"; import styled from "styled-components"; import breakpoint from "styled-components-breakpoint"; import { MAX_TITLE_LENGTH } from "shared/constants"; import { light } from "shared/theme"; import parseTitle from "shared/utils/parseTitle"; import Document from "models/Document"; import ContentEditable from "components/ContentEditable"; import Star, { AnimatedStar } from "components/Star"; import useStores from "hooks/useStores"; import { isModKey } from "utils/keyboard"; type Props = { value: string, document: Document, readOnly: boolean, onChange: (text: string) => void, onGoToNextInput: (insertParagraph?: boolean) => void, onSave: (options: { publish?: boolean, done?: boolean }) => void, }; function EditableTitle({ value, document, readOnly, onChange, onSave, onGoToNextInput, }: Props) { const ref = React.useRef(); const { policies } = useStores(); const { t } = useTranslation(); const can = policies.abilities(document.id); const { emoji } = parseTitle(value); const startsWithEmojiAndSpace = !!(emoji && value.startsWith(`${emoji} `)); const normalizedTitle = !value && readOnly ? document.titleWithDefault : value; const handleKeyDown = React.useCallback( (event: SyntheticKeyboardEvent<>) => { if (event.key === "Enter") { event.preventDefault(); if (isModKey(event)) { onSave({ done: true }); return; } onGoToNextInput(true); return; } if (event.key === "Tab" || event.key === "ArrowDown") { event.preventDefault(); onGoToNextInput(); return; } if (event.key === "p" && isModKey(event) && event.shiftKey) { event.preventDefault(); onSave({ publish: true, done: true }); return; } if (event.key === "s" && isModKey(event)) { event.preventDefault(); onSave({}); return; } }, [onGoToNextInput, onSave] ); return (