TSK-1194: Fix filter (#2990)

Signed-off-by: Andrey Sobolev <haiodo@gmail.com>
This commit is contained in:
Andrey Sobolev 2023-04-15 01:12:13 +07:00 committed by GitHub
parent 62b18e1ce8
commit fecff25fd6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 50 additions and 53 deletions

View File

@ -231,7 +231,7 @@ export class StatusMiddleware extends BasePresentationMiddleware implements Pres
statusFields.push(attr)
const v = (query as any)[attr.name]
if (v !== undefined) {
if (v != null) {
// Only add filter if we have filer inside.
if (typeof v === 'string') {
target.push(v as Ref<Status>)

View File

@ -70,7 +70,7 @@
{ placeholder, items, multiselect, selected },
container,
(result) => {
if (result) {
if (result != null) {
if (allowDeselect && selected === result) {
selected = undefined
dispatch('selected', undefined)
@ -83,7 +83,7 @@
mgr?.setFocusPos(focusIndex)
},
(result) => {
if (result) {
if (result != null) {
selected = result
dispatch('selected', result)
}

View File

@ -57,11 +57,11 @@
const statuses = val
const result: (Doc | undefined)[] = []
statusesCount = []
const unique = [...new Set(val.map((v) => v?.name))]
const unique = [...new Set(val.map((v) => v?.name?.trim()?.toLocaleLowerCase()))]
unique.forEach((label, i) => {
let count = 0
statuses.forEach((state) => {
if (state?.name === label) {
if (state?.name?.trim()?.toLocaleLowerCase() === label?.trim()?.toLowerCase()) {
if (!count) result[i] = state
count += targets.get(state?._id) ?? 0
}
@ -76,7 +76,12 @@
await objectsPromise
}
targets.clear()
const baseObjects = await client.findAll(filter.key._class, space ? { space } : {}, {
const spaces = (
await client.findAll(core.class.Space, { archived: true }, { projection: { _id: 1, archived: 1, _class: 1 } })
).map((it) => it._id)
const baseObjects = await client.findAll(filter.key._class, space ? { space } : { space: { $nin: spaces } }, {
projection: { [filter.key.key]: 1, space: 1 }
})
for (const object of baseObjects) {

View File

@ -15,7 +15,7 @@
<script lang="ts">
import { Class, Doc, Ref, Space, WithLookup } from '@hcengineering/core'
import { Asset, IntlString } from '@hcengineering/platform'
import { createQuery, getClient } from '@hcengineering/presentation'
import { createQuery } from '@hcengineering/presentation'
import {
AnyComponent,
Button,
@ -58,29 +58,36 @@
$: query = viewlet?.baseQuery ?? {}
$: searchQuery = search === '' ? query : { $search: search, ...query }
$: searchQuery = search === '' ? query : { ...query, $search: search }
$: resultQuery = searchQuery
const preferenceQuery = createQuery()
let preference: ViewletPreference | undefined
const client = getClient()
let loading = true
let viewlets: WithLookup<Viewlet>[] = []
const viewletQuery = createQuery()
$: viewletQuery.query(
view.class.Viewlet,
{ attachTo: _class, variant: { $exists: false } },
(res) => (viewlets = res),
{
lookup: {
descriptor: view.class.ViewletDescriptor
$: {
viewletQuery.query(
view.class.Viewlet,
{
attachTo: _class,
variant: { $exists: false },
descriptor: { $in: descriptors ?? [view.viewlet.Table] }
},
(res) => {
viewlets = res
},
{
lookup: {
descriptor: view.class.ViewletDescriptor
}
}
}
)
)
}
let key = makeViewletKey()
@ -90,33 +97,16 @@
})
)
$: active = $activeViewlet[key]
$: update(_class, active, descriptors)
$: update(_class, $activeViewlet[key], viewlets)
async function update (
_class: Ref<Class<Doc>>,
active: Ref<Viewlet> | null,
descriptors?: Ref<ViewletDescriptor>[]
viewlets: WithLookup<Viewlet>[]
): Promise<void> {
loading = true
viewlets = await client.findAll(
view.class.Viewlet,
{
attachTo: _class,
variant: { $exists: false },
descriptor: { $in: descriptors ?? [view.viewlet.Table] }
},
{
lookup: {
descriptor: view.class.ViewletDescriptor
}
}
)
preference = undefined
viewlet = viewlets.find((viewlet) => viewlet._id === active) ?? viewlets[0]
setActiveViewletId(viewlet._id)
loading = false
}
$: if (viewlet !== undefined) {
@ -202,22 +192,24 @@
query={searchQuery}
{viewOptions}
on:change={(e) => {
resultQuery = { ...e.detail, ...query }
}}
/>
<Component
is={viewlet.$lookup.descriptor.component}
props={{
_class,
space,
options: viewlet.options,
config: preference?.config ?? viewlet.config,
viewlet,
viewOptions,
viewOptionsConfig: viewlet.viewOptions?.other,
createItemDialog: createComponent,
createItemLabel: createLabel,
query: resultQuery
resultQuery = { ...query, ...e.detail }
}}
/>
{#key viewlet?._id}
<Component
is={viewlet.$lookup.descriptor.component}
props={{
_class,
space,
options: viewlet.options,
config: preference?.config ?? viewlet.config,
viewlet,
viewOptions,
viewOptionsConfig: viewlet.viewOptions?.other,
createItemDialog: createComponent,
createItemLabel: createLabel,
query: resultQuery
}}
/>
{/key}
{/if}