import React = require('react');
import { observer } from 'mobx-react';
import { computed, action, observable } from 'mobx';
import { CurrentUserUtils } from '../server/authentication/models/current_user_utils';
import { FieldValue, Cast, StrCast } from '../new_fields/Types';
import { Doc, DocListCast } from '../new_fields/Doc';
import { Docs } from '../client/documents/Documents';
import { CollectionView } from '../client/views/collections/CollectionView';
import { DocumentView } from '../client/views/nodes/DocumentView';
import { emptyPath, emptyFunction, returnFalse, returnOne, returnEmptyString, returnTrue } from '../Utils';
import { Transform } from '../client/util/Transform';
import { library } from '@fortawesome/fontawesome-svg-core';
import { faPenNib, faHighlighter, faEraser, faMousePointer, faBreadSlice, faTrash, faCheck, faLongArrowAltLeft } from '@fortawesome/free-solid-svg-icons';
import { Scripting } from '../client/util/Scripting';
import { CollectionFreeFormView } from '../client/views/collections/collectionFreeForm/CollectionFreeFormView';
import GestureOverlay from '../client/views/GestureOverlay';
import { InkingControl } from '../client/views/InkingControl';
import { InkTool } from '../new_fields/InkField';
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import "./MobileInterface.scss";
import { SelectionManager } from '../client/util/SelectionManager';
import { DateField } from '../new_fields/DateField';
import { GestureUtils } from '../pen-gestures/GestureUtils';
import { DocServer } from '../client/DocServer';
import { DocumentDecorations } from '../client/views/DocumentDecorations';
import { OverlayView } from '../client/views/OverlayView';
import { DictationOverlay } from '../client/views/DictationOverlay';
import SharingManager from '../client/util/SharingManager';
import { PreviewCursor } from '../client/views/PreviewCursor';
import { ContextMenu } from '../client/views/ContextMenu';
import { RadialMenu } from '../client/views/nodes/RadialMenu';
import PDFMenu from '../client/views/pdf/PDFMenu';
import MarqueeOptionsMenu from '../client/views/collections/collectionFreeForm/MarqueeOptionsMenu';
import GoogleAuthenticationManager from '../client/apis/GoogleAuthenticationManager';
import { listSpec } from '../new_fields/Schema';
import { Id } from '../new_fields/FieldSymbols';
import { DocumentManager } from '../client/util/DocumentManager';
import RichTextMenu from '../client/util/RichTextMenu';
import { WebField } from "../new_fields/URLField";
import { FieldResult } from "../new_fields/Doc";
import { List } from '../new_fields/List';
library.add(faLongArrowAltLeft);
@observer
export default class MobileInterface extends React.Component {
@observable static Instance: MobileInterface;
@computed private get userDoc() { return CurrentUserUtils.UserDocument; }
@computed private get mainContainer() { return this.userDoc ? FieldValue(Cast(this.userDoc.activeMobile, Doc)) : CurrentUserUtils.GuestMobile; }
// @observable private currentView: "main" | "ink" | "upload" = "main";
private mainDoc: any = CurrentUserUtils.setupMobileDoc(this.userDoc);
@observable private renderView?: () => JSX.Element;
// private inkDoc?: Doc;
public drawingInk: boolean = false;
// private uploadDoc?: Doc;
constructor(props: Readonly<{}>) {
super(props);
MobileInterface.Instance = this;
}
@action
componentDidMount = () => {
library.add(...[faPenNib, faHighlighter, faEraser, faMousePointer]);
if (this.userDoc && !this.mainContainer) {
this.userDoc.activeMobile = this.mainDoc;
}
}
@action
switchCurrentView = (doc: (userDoc: Doc) => Doc, renderView?: () => JSX.Element, onSwitch?: () => void) => {
if (!this.userDoc) return;
this.userDoc.activeMobile = doc(this.userDoc);
onSwitch && onSwitch();
this.renderView = renderView;
}
onSwitchInking = () => {
InkingControl.Instance.switchTool(InkTool.Pen);
MobileInterface.Instance.drawingInk = true;
DocServer.Mobile.dispatchOverlayTrigger({
enableOverlay: true,
width: window.innerWidth,
height: window.innerHeight
});
}
onSwitchUpload = async () => {
let width = 300;
let height = 300;
// get width and height of the collection doc
if (this.mainContainer) {
const data = Cast(this.mainContainer.data, listSpec(Doc));
if (data) {
const collectionDoc = await data[1]; // this should be the collection doc since the positions should be locked
const docView = DocumentManager.Instance.getDocumentView(collectionDoc);
if (docView) {
width = docView.nativeWidth ? docView.nativeWidth : 300;
height = docView.nativeHeight ? docView.nativeHeight : 300;
}
}
}
DocServer.Mobile.dispatchOverlayTrigger({
enableOverlay: true,
width: width,
height: height,
text: "Documents uploaded from mobile will show here",
});
}
renderDefaultContent = () => {
if (this.mainContainer) {
return