flush autosave on unload (#473)

This commit is contained in:
David Luzar 2020-01-20 18:37:42 +01:00 committed by Christopher Chedeau
parent 37e082fcdc
commit d44c4ca2d8
2 changed files with 15 additions and 1 deletions

View File

@ -211,6 +211,11 @@ export class App extends React.Component<{}, AppState> {
e.preventDefault();
};
private onUnload = () => {
this.saveDebounced();
this.saveDebounced.flush();
};
public async componentDidMount() {
document.addEventListener("copy", this.onCopy);
document.addEventListener("paste", this.onPaste);
@ -219,6 +224,7 @@ export class App extends React.Component<{}, AppState> {
document.addEventListener("keydown", this.onKeyDown, false);
document.addEventListener("mousemove", this.getCurrentCursorPosition);
window.addEventListener("resize", this.onResize, false);
window.addEventListener("unload", this.onUnload, false);
let data;
const searchParams = new URLSearchParams(window.location.search);
@ -253,6 +259,7 @@ export class App extends React.Component<{}, AppState> {
false
);
window.removeEventListener("resize", this.onResize, false);
window.removeEventListener("unload", this.onUnload, false);
}
public state: AppState = getDefaultAppState();

View File

@ -57,10 +57,17 @@ export function debounce<T extends any[]>(
timeout: number
) {
let handle = 0;
return (...args: T) => {
let lastArgs: T;
const ret = (...args: T) => {
lastArgs = args;
clearTimeout(handle);
handle = window.setTimeout(() => fn(...args), timeout);
};
ret.flush = () => {
clearTimeout(handle);
fn(...lastArgs);
};
return ret;
}
export function selectNode(node: Element) {