forked from MapComplete/MapComplete
Only upload changes after 30s, on focus loss or on closing of the popup - this should improve #162 already a lot
This commit is contained in:
parent
3fb2b9adab
commit
df483786b3
4 changed files with 88 additions and 7 deletions
54
Logic/Actors/PendingChangesUploader.ts
Normal file
54
Logic/Actors/PendingChangesUploader.ts
Normal file
|
@ -0,0 +1,54 @@
|
|||
import {Changes} from "../Osm/Changes";
|
||||
import Constants from "../../Models/Constants";
|
||||
import {UIEventSource} from "../UIEventSource";
|
||||
|
||||
export default class PendingChangesUploader{
|
||||
|
||||
private lastChange : Date;
|
||||
|
||||
constructor(changes: Changes, selectedFeature: UIEventSource<any>) {
|
||||
const self = this;
|
||||
this.lastChange = new Date();
|
||||
changes.pending.addCallback(() => {
|
||||
self.lastChange = new Date();
|
||||
|
||||
window.setTimeout(() => {
|
||||
const diff = (new Date().getTime() - self.lastChange.getTime()) / 1000;
|
||||
if(Constants.updateTimeoutSec >= diff - 1){
|
||||
changes.flushChanges("Flushing changes due to timeout");
|
||||
}
|
||||
}, Constants.updateTimeoutSec * 1000);
|
||||
});
|
||||
|
||||
|
||||
selectedFeature
|
||||
.stabilized(10000)
|
||||
.addCallback(feature => {
|
||||
if(feature === undefined){
|
||||
// The popup got closed - we flush
|
||||
changes.flushChanges("Flushing changes due to popup closed");
|
||||
}
|
||||
});
|
||||
|
||||
document.addEventListener('mouseout', e => {
|
||||
// @ts-ignore
|
||||
if (!e.toElement && !e.relatedTarget) {
|
||||
changes.flushChanges("Flushing changes due to focus lost");
|
||||
}
|
||||
});
|
||||
|
||||
window.onbeforeunload = function(e){
|
||||
|
||||
if(changes.pending.data.length == 0){
|
||||
return;
|
||||
}
|
||||
changes.flushChanges("onbeforeunload - probably closing or something similar");
|
||||
e.preventDefault();
|
||||
return "Saving your last changes..."
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue