|
@@ -56,6 +56,10 @@ export type EditorManager = {
|
|
|
openDocs: OpenDocuments
|
|
openDocs: OpenDocuments
|
|
|
openInitialDoc: (docId: string) => void
|
|
openInitialDoc: (docId: string) => void
|
|
|
jumpToLine: (options: GotoLineOptions) => void
|
|
jumpToLine: (options: GotoLineOptions) => void
|
|
|
|
|
+ wantTrackChanges: boolean
|
|
|
|
|
+ setWantTrackChanges: React.Dispatch<
|
|
|
|
|
+ React.SetStateAction<EditorManager['wantTrackChanges']>
|
|
|
|
|
+ >
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
function hasGotoLine(options: OpenDocOptions): options is GotoLineOptions {
|
|
function hasGotoLine(options: OpenDocOptions): options is GotoLineOptions {
|
|
@@ -107,7 +111,14 @@ export const EditorManagerProvider: FC = ({ children }) => {
|
|
|
const [, setOpening] = useScopeValue<boolean>('editor.opening')
|
|
const [, setOpening] = useScopeValue<boolean>('editor.opening')
|
|
|
const [, setIsInErrorState] = useScopeValue<boolean>('editor.error_state')
|
|
const [, setIsInErrorState] = useScopeValue<boolean>('editor.error_state')
|
|
|
const [, setTrackChanges] = useScopeValue<boolean>('editor.trackChanges')
|
|
const [, setTrackChanges] = useScopeValue<boolean>('editor.trackChanges')
|
|
|
- const [wantTrackChanges] = useScopeValue<boolean>('editor.wantTrackChanges')
|
|
|
|
|
|
|
+ const [wantTrackChanges, setWantTrackChanges] = useScopeValue<boolean>(
|
|
|
|
|
+ 'editor.wantTrackChanges'
|
|
|
|
|
+ )
|
|
|
|
|
+
|
|
|
|
|
+ const wantTrackChangesRef = useRef(wantTrackChanges)
|
|
|
|
|
+ useEffect(() => {
|
|
|
|
|
+ wantTrackChangesRef.current = wantTrackChanges
|
|
|
|
|
+ }, [wantTrackChanges])
|
|
|
|
|
|
|
|
const goToLineEmitter = useScopeEventEmitter('editor:gotoLine')
|
|
const goToLineEmitter = useScopeEventEmitter('editor:gotoLine')
|
|
|
|
|
|
|
@@ -275,9 +286,9 @@ export const EditorManagerProvider: FC = ({ children }) => {
|
|
|
syncTimeoutRef.current = null
|
|
syncTimeoutRef.current = null
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- const want = wantTrackChanges
|
|
|
|
|
|
|
+ const want = wantTrackChangesRef.current
|
|
|
const have = doc.getTrackingChanges()
|
|
const have = doc.getTrackingChanges()
|
|
|
- if (wantTrackChanges === have) {
|
|
|
|
|
|
|
+ if (want === have) {
|
|
|
setTrackChanges(want)
|
|
setTrackChanges(want)
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
@@ -285,7 +296,7 @@ export const EditorManagerProvider: FC = ({ children }) => {
|
|
|
const tryToggle = () => {
|
|
const tryToggle = () => {
|
|
|
const saved = doc.getInflightOp() == null && doc.getPendingOp() == null
|
|
const saved = doc.getInflightOp() == null && doc.getPendingOp() == null
|
|
|
if (saved) {
|
|
if (saved) {
|
|
|
- doc.setTrackingChanges(wantTrackChanges)
|
|
|
|
|
|
|
+ doc.setTrackingChanges(want)
|
|
|
setTrackChanges(want)
|
|
setTrackChanges(want)
|
|
|
} else {
|
|
} else {
|
|
|
syncTimeoutRef.current = window.setTimeout(tryToggle, 100)
|
|
syncTimeoutRef.current = window.setTimeout(tryToggle, 100)
|
|
@@ -294,7 +305,7 @@ export const EditorManagerProvider: FC = ({ children }) => {
|
|
|
|
|
|
|
|
tryToggle()
|
|
tryToggle()
|
|
|
},
|
|
},
|
|
|
- [setTrackChanges, wantTrackChanges]
|
|
|
|
|
|
|
+ [setTrackChanges]
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
const doOpenNewDocument = useCallback(
|
|
const doOpenNewDocument = useCallback(
|
|
@@ -598,6 +609,8 @@ export const EditorManagerProvider: FC = ({ children }) => {
|
|
|
openDocs,
|
|
openDocs,
|
|
|
openInitialDoc,
|
|
openInitialDoc,
|
|
|
jumpToLine,
|
|
jumpToLine,
|
|
|
|
|
+ wantTrackChanges,
|
|
|
|
|
+ setWantTrackChanges,
|
|
|
}),
|
|
}),
|
|
|
[
|
|
[
|
|
|
getEditorType,
|
|
getEditorType,
|
|
@@ -613,6 +626,8 @@ export const EditorManagerProvider: FC = ({ children }) => {
|
|
|
openDocs,
|
|
openDocs,
|
|
|
openInitialDoc,
|
|
openInitialDoc,
|
|
|
jumpToLine,
|
|
jumpToLine,
|
|
|
|
|
+ wantTrackChanges,
|
|
|
|
|
+ setWantTrackChanges,
|
|
|
]
|
|
]
|
|
|
)
|
|
)
|
|
|
|
|
|