mirror of
https://github.com/hcengineering/platform.git
synced 2025-04-20 23:32:14 +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)
|
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>)
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
|
@ -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) {
|
||||||
|
@ -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}
|
||||||
|
Loading…
Reference in New Issue
Block a user