import React, { useCallback } from 'react';
import styled from 'styled-components';
import {
pluginKey as maxContentSizePluginKey,
MaxContentSizePluginState,
} from '../../plugins/max-content-size';
import { MobileScrollPluginState } from '../../plugins/mobile-scroll/types';
import { mobileScrollPluginKey } from '../../plugins/mobile-scroll/plugin-factory';
import WithPluginState from '../WithPluginState';
import WithFlash from '../WithFlash';
import ContentStyles from '../ContentStyles';
import { ClickAreaMobile as ClickArea } from '../Addon';
import { EditorView } from 'prosemirror-view';
export interface MobileEditorProps {
isMaxContentSizeReached?: boolean;
maxHeight?: number;
}
const MobileEditor: any = styled.div`
min-height: 30px;
width: 100%;
max-width: inherit;
box-sizing: border-box;
word-wrap: break-word;
div > .ProseMirror {
outline: none;
white-space: pre-wrap;
padding: 0;
margin: 0;
}
`;
MobileEditor.displayName = 'MobileEditor';
const ContentArea = styled(ContentStyles)``;
ContentArea.displayName = 'ContentArea';
export type MobileAppearanceProps = React.PropsWithChildren<{
editorView: EditorView | null;
maxHeight?: number;
persistScrollGutter?: boolean;
}>;
export function MobileAppearance({
editorView,
maxHeight,
persistScrollGutter,
children,
}: MobileAppearanceProps) {
const render = useCallback(
({
maxContentSize,
mobileScroll,
}: {
maxContentSize?: MaxContentSizePluginState;
mobileScroll?: MobileScrollPluginState;
}) => {
const maxContentSizeReached = Boolean(
maxContentSize?.maxContentSizeReached,
);
let minHeight = 100;
if (mobileScroll) {
const { keyboardHeight, windowHeight, mobilePaddingTop } = mobileScroll;
/*
We calculate the min-height based on the windowHeight - keyboardHeight - paddingTop.
This is needed due to scrolling issues when there is no content to scroll (like, only having 1 paragraph),
but if the clickable area is bigger than the windowHeight - keyboard (including toolbar) then the view
is scrolled nevertheless, and it gives the sensation that the content was lost.
*/
const keyboardHeightVh = (keyboardHeight * 100) / windowHeight;
const paddingVh = (mobilePaddingTop * 100) / windowHeight;
minHeight = 100 - keyboardHeightVh - paddingVh;
}
return (
{children}
);
},
[children, maxHeight, editorView, persistScrollGutter],
);
return (
);
}