aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/App.vue9
-rw-r--r--src/components/TimeLine.vue8
-rw-r--r--src/lib.ts4
3 files changed, 16 insertions, 5 deletions
diff --git a/src/App.vue b/src/App.vue
index 5bf6458..17760b0 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -39,7 +39,8 @@ import PlusIcon from './components/icon/PlusIcon.vue';
import SettingsIcon from './components/icon/SettingsIcon.vue';
import HelpIcon from './components/icon/HelpIcon.vue';
// Other
-import {HistDate, TimelineState, HistEvent, queryServer, HistEventJson, jsonToHistEvent, cmpHistEvent} from './lib';
+import {HistDate, TimelineState, HistEvent, queryServer, HistEventJson, jsonToHistEvent, cmpHistEvent,
+ timeout} from './lib';
import {useStore} from './store';
import {RBTree, rbtree_shallow_copy} from './rbtree';
@@ -191,7 +192,12 @@ function reduceEvents(){
}
// For getting events from server
const EVENT_REQ_LIMIT = 10;
+let pendingReq = false; // Used to serialise event-req handling
async function onEventReq(startDate: HistDate, endDate: HistDate){
+ while (pendingReq){
+ await timeout(100);
+ }
+ pendingReq = true;
// Exclude exhausted range
if (isExhaustedRange(startDate, endDate)){
return;
@@ -238,6 +244,7 @@ async function onEventReq(startDate: HistDate, endDate: HistDate){
if (eventTree.value.size > EXCESS_EVENTS_THRESHOLD){
reduceEvents();
}
+ pendingReq = false;
}
// For resize handling
diff --git a/src/components/TimeLine.vue b/src/components/TimeLine.vue
index 577413d..88ac62d 100644
--- a/src/components/TimeLine.vue
+++ b/src/components/TimeLine.vue
@@ -254,7 +254,6 @@ const ticks = computed((): Ticks => {
});
// For displayed events
-let pendingReq = false;
const idToEvent = computed(() => { // Maps visible event IDs to HistEvents
let map: Map<number, HistEvent> = new Map();
// Find events to display
@@ -267,10 +266,12 @@ const idToEvent = computed(() => { // Maps visible event IDs to HistEvents
}
map.set(event.id, event);
}
- pendingReq = false;
return map;
});
const idToPos = computed(() => {
+ if (!mounted.value){
+ return new Map();
+ }
let map: Map<number, [number, number, number, number]> = new Map(); // Maps visible event IDs to x/y/w/h
let numUnits = getNumVisibleUnits();
let minorAxisStep = 0;
@@ -283,12 +284,11 @@ const idToPos = computed(() => {
minorAxisStep += 10;
}
// If more events could be displayed, notify parent
- if (map.size < 3 && !pendingReq){
+ if (map.size < 3){
emit('event-req', startDate.value, endDate.value);
} else { // Send displayed event IDs to parent
emit('event-display', [...idToEvent.value.keys()], ID);
}
- pendingReq = true;
//
return map;
});
diff --git a/src/lib.ts b/src/lib.ts
index 4edf2f8..7ea7bb0 100644
--- a/src/lib.ts
+++ b/src/lib.ts
@@ -11,6 +11,10 @@ export const WRITING_MODE_HORZ =
export function moduloPositive(x: number, y: number){
return x - Math.floor(x / y) * y;
}
+// Used to async-await for until after a timeout
+export async function timeout(ms: number){
+ return new Promise(resolve => setTimeout(resolve, ms))
+}
// For calendar conversion. Mostly copied from backend/hist_data/cal.py
export function gregorianToJdn(year: number, month: number, day: number): number {