upd
This commit is contained in:
@@ -3,26 +3,23 @@ import * as store from './itemsStore.js'
|
||||
interface AddTask { type: 'add', id: number }
|
||||
interface SelectTask { type: 'select', id: number }
|
||||
interface DeselectTask { type: 'deselect', id: number }
|
||||
interface ReorderTask { type: 'reorder', ids: number[] }
|
||||
interface ReorderTask { type: 'reorder', id: number, afterId: number | null }
|
||||
|
||||
type Task = AddTask | SelectTask | DeselectTask | ReorderTask
|
||||
|
||||
class RequestQueue {
|
||||
private addQueue: AddTask[] = []
|
||||
private actionQueue: ReorderTask[] = []
|
||||
private reorderQueue: ReorderTask[] = []
|
||||
private pendingKeys = new Set<string>()
|
||||
private pendingReorder: ReorderTask | null = null
|
||||
|
||||
constructor() {
|
||||
setInterval(() => this.flushAdd(), 10_000)
|
||||
setInterval(() => this.flushActions(), 1_000)
|
||||
setInterval(() => this.flushReorder(), 1_000)
|
||||
}
|
||||
|
||||
enqueue(task: Task): boolean {
|
||||
if (task.type === 'reorder') {
|
||||
this.pendingReorder = task
|
||||
this.actionQueue = this.actionQueue.filter(t => t.type !== 'reorder')
|
||||
this.actionQueue.push(task)
|
||||
this.reorderQueue.push(task)
|
||||
return true
|
||||
}
|
||||
|
||||
@@ -51,13 +48,10 @@ class RequestQueue {
|
||||
}
|
||||
}
|
||||
|
||||
private flushActions(): void {
|
||||
const batch = this.actionQueue.splice(0)
|
||||
this.pendingReorder = null
|
||||
private flushReorder(): void {
|
||||
const batch = this.reorderQueue.splice(0)
|
||||
for (const task of batch) {
|
||||
if (task.type === 'reorder') {
|
||||
store.reorderSelected(task.ids)
|
||||
}
|
||||
store.reorderItem(task.id, task.afterId)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user