aboutsummaryrefslogtreecommitdiff
path: root/src/client/views/nodes/formattedText/FormattedTextBox.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/views/nodes/formattedText/FormattedTextBox.tsx')
-rw-r--r--src/client/views/nodes/formattedText/FormattedTextBox.tsx109
1 files changed, 1 insertions, 108 deletions
diff --git a/src/client/views/nodes/formattedText/FormattedTextBox.tsx b/src/client/views/nodes/formattedText/FormattedTextBox.tsx
index 8bf8abafa..66802d198 100644
--- a/src/client/views/nodes/formattedText/FormattedTextBox.tsx
+++ b/src/client/views/nodes/formattedText/FormattedTextBox.tsx
@@ -1,7 +1,6 @@
import { IconProp } from '@fortawesome/fontawesome-svg-core';
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import { Tooltip } from '@mui/material';
-import { isEqual } from 'lodash';
import { action, computed, IReactionDisposer, makeObservable, observable, ObservableSet, reaction, runInAction } from 'mobx';
import { observer } from 'mobx-react';
import { baseKeymap, selectAll } from 'prosemirror-commands';
@@ -21,12 +20,10 @@ import { InkTool } from '../../../../fields/InkField';
import { List } from '../../../../fields/List';
import { PrefetchProxy } from '../../../../fields/Proxy';
import { RichTextField } from '../../../../fields/RichTextField';
-import { RichTextUtils } from '../../../../fields/RichTextUtils';
import { ComputedField } from '../../../../fields/ScriptField';
import { BoolCast, Cast, DocCast, FieldValue, NumCast, ScriptCast, StrCast } from '../../../../fields/Types';
import { GetEffectiveAcl, TraceMobx } from '../../../../fields/util';
import { addStyleSheet, addStyleSheetRule, clearStyleSheetRules, emptyFunction, numberRange, returnFalse, returnZero, setupMoveUpEvents, smoothScroll, unimplementedFunction, Utils } from '../../../../Utils';
-import { GoogleApiClientUtils, Pulls, Pushes } from '../../../apis/google_docs/GoogleApiClientUtils';
import { gptAPICall, GPTCallType } from '../../../apis/gpt/GPT';
import { DocServer } from '../../../DocServer';
import { Docs, DocUtils } from '../../../documents/Documents';
@@ -46,7 +43,6 @@ import { CollectionTreeView } from '../../collections/CollectionTreeView';
import { ContextMenu } from '../../ContextMenu';
import { ContextMenuProps } from '../../ContextMenuItem';
import { ViewBoxAnnotatableComponent } from '../../DocComponent';
-import { DocumentButtonBar } from '../../DocumentButtonBar';
import { Colors } from '../../global/globalEnums';
import { LightboxView } from '../../LightboxView';
import { AnchorMenu } from '../../pdf/AnchorMenu';
@@ -71,9 +67,7 @@ import { RichTextMenu, RichTextMenuPlugin } from './RichTextMenu';
import { RichTextRules } from './RichTextRules';
import { schema } from './schema_rts';
import { SummaryView } from './SummaryView';
-export const GoogleRef = 'googleDocId';
// import * as applyDevTools from 'prosemirror-dev-tools';
-type PullHandler = (exportState: Opt<GoogleApiClientUtils.Docs.ImportResult>, dataDoc: Doc) => void;
export interface FormattedTextBoxProps {}
@observer
@@ -1189,15 +1183,6 @@ export class FormattedTextBox extends ViewBoxAnnotatableComponent<FieldViewProps
this._cachedLinks = newLinks;
}
);
- this._disposers.buttonBar = reaction(
- () => DocumentButtonBar.Instance,
- instance => {
- if (instance) {
- this.pullFromGoogleDoc(this.checkState);
- this.dataDoc[GoogleRef] && this.dataDoc.googleDocUnchanged && runInAction(() => (instance.isAnimatingFetch = true));
- }
- }
- );
this._disposers.editorState = reaction(
() => {
const dataDoc = Doc.IsDelegateField(DocCast(this.layoutDoc?.proto), this.fieldKey) ? DocCast(this.layoutDoc?.proto) : this?.dataDoc;
@@ -1218,24 +1203,6 @@ export class FormattedTextBox extends ViewBoxAnnotatableComponent<FieldViewProps
}
}
);
- this._disposers.pullDoc = reaction(
- () => this._props.Document[Pulls],
- () => {
- if (!DocumentButtonBar.hasPulledHack) {
- DocumentButtonBar.hasPulledHack = true;
- this.pullFromGoogleDoc(this.dataDoc.googleDocUnchanged ? this.checkState : this.updateState);
- }
- }
- );
- this._disposers.pushDoc = reaction(
- () => this._props.Document[Pushes],
- () => {
- if (!DocumentButtonBar.hasPushedHack) {
- DocumentButtonBar.hasPushedHack = true;
- this.pushToGoogleDoc();
- }
- }
- );
this._disposers.search = reaction(
() => Doc.IsSearchMatch(this.Document),
@@ -1295,80 +1262,6 @@ export class FormattedTextBox extends ViewBoxAnnotatableComponent<FieldViewProps
setTimeout(this.tryUpdateScrollHeight, 250);
}
- pushToGoogleDoc = async () => {
- this.pullFromGoogleDoc(async (exportState: Opt<GoogleApiClientUtils.Docs.ImportResult>, dataDoc: Doc) => {
- const modes = GoogleApiClientUtils.Docs.WriteMode;
- let mode = modes.Replace;
- let reference: Opt<GoogleApiClientUtils.Docs.Reference> = Cast(this.dataDoc[GoogleRef], 'string');
- if (!reference) {
- mode = modes.Insert;
- reference = { title: StrCast(this.dataDoc.title) };
- }
- const redo = async () => {
- if (this._editorView && reference) {
- const content = await RichTextUtils.GoogleDocs.Export(this._editorView.state);
- const response = await GoogleApiClientUtils.Docs.write({ reference, content, mode });
- response?.documentId && (this.dataDoc[GoogleRef] = response.documentId);
- const pushSuccess = response !== undefined && !('errors' in response);
- dataDoc.googleDocUnchanged = pushSuccess;
- DocumentButtonBar.Instance.startPushOutcome(pushSuccess);
- }
- };
- const undo = () => {
- if (exportState && reference) {
- const content: GoogleApiClientUtils.Docs.Content = {
- text: exportState.text,
- requests: [],
- };
- GoogleApiClientUtils.Docs.write({ reference, content, mode });
- }
- };
- UndoManager.AddEvent({ undo, redo, prop: '' });
- redo();
- });
- };
-
- pullFromGoogleDoc = async (handler: PullHandler) => {
- const dataDoc = this.dataDoc;
- const documentId = StrCast(dataDoc[GoogleRef]);
- let exportState: Opt<GoogleApiClientUtils.Docs.ImportResult>;
- if (documentId) {
- exportState = await RichTextUtils.GoogleDocs.Import(documentId, dataDoc);
- }
- exportState && UndoManager.RunInBatch(() => handler(exportState, dataDoc), Pulls);
- };
-
- updateState = (exportState: Opt<GoogleApiClientUtils.Docs.ImportResult>, dataDoc: Doc) => {
- let pullSuccess = false;
- if (exportState !== undefined) {
- pullSuccess = true;
- dataDoc[this.fieldKey] = new RichTextField(JSON.stringify(exportState.state.toJSON()));
- setTimeout(() => {
- if (this._editorView) {
- const state = this._editorView.state;
- const end = state.doc.content.size - 1;
- this._editorView.dispatch(state.tr.setSelection(TextSelection.create(state.doc, end, end)));
- }
- }, 0);
- dataDoc.title = exportState.title;
- this.dataDoc.title_custom = true;
- dataDoc.googleDocUnchanged = true;
- } else {
- delete dataDoc[GoogleRef];
- }
- DocumentButtonBar.Instance.startPullOutcome(pullSuccess);
- };
-
- checkState = (exportState: Opt<GoogleApiClientUtils.Docs.ImportResult>, dataDoc: Doc) => {
- if (exportState && this._editorView) {
- const equalContent = isEqual(this._editorView.state.doc, exportState.state.doc);
- const equalTitles = dataDoc.title === exportState.title;
- const unchanged = equalContent && equalTitles;
- dataDoc.googleDocUnchanged = unchanged;
- DocumentButtonBar.Instance.setPullState(unchanged);
- }
- };
-
clipboardTextSerializer = (slice: Slice): string => {
let text = '',
separated = true;
@@ -1462,7 +1355,7 @@ export class FormattedTextBox extends ViewBoxAnnotatableComponent<FieldViewProps
const botOff = docPos.bottom > viewRect.bottom ? docPos.bottom - viewRect.bottom : undefined;
if (((topOff && Math.abs(Math.trunc(topOff)) > 0) || (botOff && Math.abs(Math.trunc(botOff)) > 0)) && scrollRef) {
const shift = Math.min(topOff ?? Number.MAX_VALUE, botOff ?? Number.MAX_VALUE);
- const scrollPos = scrollRef.scrollTop + shift * self._props.ScreenToLocalTransform().Scale;
+ const scrollPos = scrollRef.scrollTop + shift * self.ScreenToLocalBoxXf().Scale;
if (this._focusSpeed !== undefined) {
scrollPos && (this._scrollStopper = smoothScroll(this._focusSpeed, scrollRef, scrollPos, 'ease', this._scrollStopper));
} else {