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) statusFields.push(attr)
const v = (query as any)[attr.name] const v = (query as any)[attr.name]
if (v !== undefined) { if (v != null) {
// Only add filter if we have filer inside. // Only add filter if we have filer inside.
if (typeof v === 'string') { if (typeof v === 'string') {
target.push(v as Ref<Status>) target.push(v as Ref<Status>)

View File

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

View File

@ -57,11 +57,11 @@
const statuses = val const statuses = val
const result: (Doc | undefined)[] = [] const result: (Doc | undefined)[] = []
statusesCount = [] 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) => { unique.forEach((label, i) => {
let count = 0 let count = 0
statuses.forEach((state) => { statuses.forEach((state) => {
if (state?.name === label) { if (state?.name?.trim()?.toLocaleLowerCase() === label?.trim()?.toLowerCase()) {
if (!count) result[i] = state if (!count) result[i] = state
count += targets.get(state?._id) ?? 0 count += targets.get(state?._id) ?? 0
} }
@ -76,7 +76,12 @@
await objectsPromise await objectsPromise
} }
targets.clear() 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 } projection: { [filter.key.key]: 1, space: 1 }
}) })
for (const object of baseObjects) { for (const object of baseObjects) {

View File

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