mirror of
https://github.com/hcengineering/platform.git
synced 2025-04-13 03:40:48 +00:00
UBER-1038: Fix flicking during issue creation (#3826)
Signed-off-by: Andrey Sobolev <haiodo@gmail.com>
This commit is contained in:
parent
f9e34e9101
commit
4e558f0cfe
@ -419,7 +419,7 @@ export class LiveQuery extends TxProcessor implements Client {
|
||||
|
||||
for (const queries of this.queries) {
|
||||
const isTx = hierarchy.isDerived(queries[0], core.class.Tx)
|
||||
const isMixin = hierarchy.isDerived(tx.mixin, queries[0])
|
||||
|
||||
for (const q of queries[1]) {
|
||||
if (isTx) {
|
||||
// handle add since Txes are immutable
|
||||
@ -455,9 +455,9 @@ export class LiveQuery extends TxProcessor implements Client {
|
||||
await this.sort(q, tx)
|
||||
const udoc = q.result.find((p) => p._id === tx.objectId)
|
||||
await this.updatedDocCallback(udoc, q)
|
||||
} else if (isMixin) {
|
||||
} else if (queries[0] === tx.mixin) {
|
||||
// Mixin potentially added to object we doesn't have in out results
|
||||
const doc = await this.client.findOne(q._class, { _id: tx.objectId }, q.options)
|
||||
const doc = await this.client.findOne(q._class, { ...q.query, _id: tx.objectId }, q.options)
|
||||
if (doc !== undefined) {
|
||||
await this.handleDocAdd(q, doc, false)
|
||||
}
|
||||
|
@ -62,7 +62,7 @@
|
||||
|
||||
$: queryNoLookup = noLookup(resultQuery)
|
||||
|
||||
let fastQueryIds: Ref<Doc>[] = []
|
||||
let fastQueryIds: Set<Ref<Doc>> = new Set()
|
||||
|
||||
let categoryQueryOptions: Partial<FindOptions<Doc>>
|
||||
$: categoryQueryOptions = {
|
||||
@ -79,46 +79,20 @@
|
||||
queryNoLookup,
|
||||
(res) => {
|
||||
fastDocs = res
|
||||
fastQueryIds = res.map((it) => it._id)
|
||||
fastQueryIds = new Set(res.map((it) => it._id))
|
||||
},
|
||||
{ ...categoryQueryOptions, limit: 1000 }
|
||||
)
|
||||
$: {
|
||||
let doQuery = false
|
||||
let _idQuery: DocumentQuery<Doc>['_id'] = { $nin: fastQueryIds }
|
||||
$: docsQuerySlow.query(
|
||||
_class,
|
||||
queryNoLookup,
|
||||
(res) => {
|
||||
slowDocs = res
|
||||
},
|
||||
categoryQueryOptions
|
||||
)
|
||||
|
||||
if (fastQueryIds.length > 0) {
|
||||
doQuery = true
|
||||
|
||||
if (typeof resultQuery._id === 'object' && resultQuery._id?.$in !== undefined) {
|
||||
const inIds = new Set(resultQuery._id.$in)
|
||||
fastQueryIds.forEach((it) => inIds.delete(it))
|
||||
_idQuery = { $in: Array.from(inIds) }
|
||||
if (inIds.size === 0) {
|
||||
doQuery = false
|
||||
}
|
||||
} else if (typeof resultQuery._id === 'object' && resultQuery._id?.$nin !== undefined) {
|
||||
const ninIds = new Set(resultQuery._id.$in)
|
||||
fastQueryIds.forEach((it) => ninIds.add(it))
|
||||
_idQuery = { $nin: Array.from(ninIds) }
|
||||
}
|
||||
}
|
||||
|
||||
if (doQuery) {
|
||||
docsQuerySlow.query(
|
||||
_class,
|
||||
{ ...queryNoLookup, _id: _idQuery },
|
||||
(res) => {
|
||||
slowDocs = res
|
||||
},
|
||||
categoryQueryOptions
|
||||
)
|
||||
} else {
|
||||
docsQuerySlow.unsubscribe()
|
||||
}
|
||||
}
|
||||
|
||||
$: docs = [...fastDocs, ...slowDocs]
|
||||
$: docs = [...fastDocs, ...slowDocs.filter((it) => !fastQueryIds.has(it._id))]
|
||||
|
||||
function getProjection (fields: string[], query: DocumentQuery<Doc>): Record<string, number> {
|
||||
const res: Record<string, number> = {}
|
||||
|
Loading…
Reference in New Issue
Block a user