From 74be20292e59a34e15463655e0a3195585342d35 Mon Sep 17 00:00:00 2001 From: Alf Eaton Date: Wed, 24 Aug 2022 12:49:15 +0100 Subject: [PATCH] Wrap the SourceEditor component in an error boundary (#8605) GitOrigin-RevId: 58e9eed34137a7cf66f301972e066cb5b5bb79e4 --- services/web/frontend/js/utils/EventEmitter.js | 3 +-- services/web/types/current-doc.ts | 9 ++++++--- services/web/types/share-doc.ts | 9 +++++++++ 3 files changed, 16 insertions(+), 5 deletions(-) create mode 100644 services/web/types/share-doc.ts diff --git a/services/web/frontend/js/utils/EventEmitter.js b/services/web/frontend/js/utils/EventEmitter.js index f2ddd5d81e..a2c86e70c3 100644 --- a/services/web/frontend/js/utils/EventEmitter.js +++ b/services/web/frontend/js/utils/EventEmitter.js @@ -20,9 +20,8 @@ // Trigger all events for the foo event (including namespaces): .trigger 'foo' // Remove all listeners for the foo event (including namespaces): .off 'foo' // Remove a listener for the foo event with the bar namespace: .off 'foo.bar' -let EventEmitter -export default EventEmitter = class EventEmitter { +export default class EventEmitter { on(event, callback) { let namespace if (!this.events) { diff --git a/services/web/types/current-doc.ts b/services/web/types/current-doc.ts index 6f1ff6ebea..f99b8b69c1 100644 --- a/services/web/types/current-doc.ts +++ b/services/web/types/current-doc.ts @@ -1,3 +1,5 @@ +import EventEmitter from '../frontend/js/utils/EventEmitter' +import { ShareDoc } from './share-doc' import { EditorFacade } from '../modules/source-editor/frontend/js/extensions/realtime' import { AnyOperation, @@ -8,9 +10,12 @@ import { InsertOperation, } from './change' -export type CurrentDoc = { +// type for the Document class in ide/editor/Document.js +// note: this is a custom EventEmitter class +export interface CurrentDoc extends EventEmitter { doc_id: string docName: string + doc: ShareDoc | null track_changes_as: string | null ranges: { changes: Change[] @@ -25,8 +30,6 @@ export type CurrentDoc = { } attachToCM6: (editor: EditorFacade) => void detachFromCM6: () => void - on: (eventName: string, listener: EventListener) => void - off: (eventName: string) => void submitOp: (op: AnyOperation) => void getSnapshot: () => string } diff --git a/services/web/types/share-doc.ts b/services/web/types/share-doc.ts new file mode 100644 index 0000000000..d071c97f28 --- /dev/null +++ b/services/web/types/share-doc.ts @@ -0,0 +1,9 @@ +import EventEmitter from 'events' + +// type for the Doc class in vendor/libs/sharejs.js +export interface ShareDoc extends EventEmitter { + detach_cm6?: () => void + getText: () => string + insert: (pos: number, insert: string, fromUndo: boolean) => void + del: (pos: number, length: number, fromUndo: boolean) => void +}