flush autosave on unload (#473)
This commit is contained in:
parent
37e082fcdc
commit
d44c4ca2d8
@ -211,6 +211,11 @@ export class App extends React.Component<{}, AppState> {
|
|||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
private onUnload = () => {
|
||||||
|
this.saveDebounced();
|
||||||
|
this.saveDebounced.flush();
|
||||||
|
};
|
||||||
|
|
||||||
public async componentDidMount() {
|
public async componentDidMount() {
|
||||||
document.addEventListener("copy", this.onCopy);
|
document.addEventListener("copy", this.onCopy);
|
||||||
document.addEventListener("paste", this.onPaste);
|
document.addEventListener("paste", this.onPaste);
|
||||||
@ -219,6 +224,7 @@ export class App extends React.Component<{}, AppState> {
|
|||||||
document.addEventListener("keydown", this.onKeyDown, false);
|
document.addEventListener("keydown", this.onKeyDown, false);
|
||||||
document.addEventListener("mousemove", this.getCurrentCursorPosition);
|
document.addEventListener("mousemove", this.getCurrentCursorPosition);
|
||||||
window.addEventListener("resize", this.onResize, false);
|
window.addEventListener("resize", this.onResize, false);
|
||||||
|
window.addEventListener("unload", this.onUnload, false);
|
||||||
|
|
||||||
let data;
|
let data;
|
||||||
const searchParams = new URLSearchParams(window.location.search);
|
const searchParams = new URLSearchParams(window.location.search);
|
||||||
@ -253,6 +259,7 @@ export class App extends React.Component<{}, AppState> {
|
|||||||
false
|
false
|
||||||
);
|
);
|
||||||
window.removeEventListener("resize", this.onResize, false);
|
window.removeEventListener("resize", this.onResize, false);
|
||||||
|
window.removeEventListener("unload", this.onUnload, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public state: AppState = getDefaultAppState();
|
public state: AppState = getDefaultAppState();
|
||||||
|
@ -57,10 +57,17 @@ export function debounce<T extends any[]>(
|
|||||||
timeout: number
|
timeout: number
|
||||||
) {
|
) {
|
||||||
let handle = 0;
|
let handle = 0;
|
||||||
return (...args: T) => {
|
let lastArgs: T;
|
||||||
|
const ret = (...args: T) => {
|
||||||
|
lastArgs = args;
|
||||||
clearTimeout(handle);
|
clearTimeout(handle);
|
||||||
handle = window.setTimeout(() => fn(...args), timeout);
|
handle = window.setTimeout(() => fn(...args), timeout);
|
||||||
};
|
};
|
||||||
|
ret.flush = () => {
|
||||||
|
clearTimeout(handle);
|
||||||
|
fn(...lastArgs);
|
||||||
|
};
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function selectNode(node: Element) {
|
export function selectNode(node: Element) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user