mirror of
https://github.com/hcengineering/platform.git
synced 2025-04-13 03:40:48 +00:00
TSK-1194: Fix filter (#2990)
Signed-off-by: Andrey Sobolev <haiodo@gmail.com>
This commit is contained in:
parent
62b18e1ce8
commit
fecff25fd6
@ -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>)
|
||||
|
@ -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)
|
||||
}
|
||||
|
@ -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) {
|
||||
|
@ -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}
|
||||
|
Loading…
Reference in New Issue
Block a user