diff --git a/changelog.md b/changelog.md index b1d4d99a1d..ba228fa641 100644 --- a/changelog.md +++ b/changelog.md @@ -10,6 +10,7 @@ Platform: - Fix skills/labels selection and show real usage counter - Fix skills/labels activity - Project selector in issue list +- Save last filter for page HR: diff --git a/models/tags/package.json b/models/tags/package.json index a4bb67a759..34335bd51e 100644 --- a/models/tags/package.json +++ b/models/tags/package.json @@ -33,6 +33,7 @@ "@anticrm/tags-resources": "~0.6.0", "@anticrm/ui": "~0.6.0", "@anticrm/model-core": "~0.6.0", + "@anticrm/view": "~0.6.0", "@anticrm/model-view": "~0.6.0" } } diff --git a/models/tags/src/index.ts b/models/tags/src/index.ts index 5ff53bf4a9..1763b17e30 100644 --- a/models/tags/src/index.ts +++ b/models/tags/src/index.ts @@ -104,4 +104,24 @@ export function createModel (builder: Builder): void { builder.mixin(tags.class.TagReference, core.class.Class, view.mixin.AttributeFilter, { component: tags.component.TagsFilter }) + + builder.createDoc( + view.class.FilterMode, + core.space.Model, + { + label: view.string.FilterIsEither, + result: tags.function.FilterTagsInResult + }, + tags.ids.FilterTagsIn + ) + + builder.createDoc( + view.class.FilterMode, + core.space.Model, + { + label: view.string.FilterIsNot, + result: tags.function.FilterTagsNinResult + }, + tags.ids.FilterTagsNin + ) } diff --git a/models/tags/src/plugin.ts b/models/tags/src/plugin.ts index 44b438dc60..a917640a2e 100644 --- a/models/tags/src/plugin.ts +++ b/models/tags/src/plugin.ts @@ -18,6 +18,8 @@ import { TagCategory, tagsId } from '@anticrm/tags' import tags from '@anticrm/tags-resources/src/plugin' import type { AnyComponent } from '@anticrm/ui' import { ViewAction } from '@anticrm/model-view' +// eslint-disable-next-line @typescript-eslint/no-unused-vars +import view from '@anticrm/view' export default mergeIds(tagsId, tags, { // Without it, CLI version is failed with some svelte dependency exception. diff --git a/models/view/src/index.ts b/models/view/src/index.ts index 5b62ff70be..3654fa9954 100644 --- a/models/view/src/index.ts +++ b/models/view/src/index.ts @@ -29,6 +29,7 @@ import type { ClassFilters, CollectionEditor, CollectionPresenter, + FilterMode, HTMLPresenter, IgnoreActions, KeyBinding, @@ -82,6 +83,12 @@ export function classPresenter ( } } +@Model(view.class.FilterMode, core.class.Doc, DOMAIN_MODEL) +export class TFilterMode extends TDoc implements FilterMode { + label!: IntlString + result!: Resource<(values: any[], onUpdate: () => void) => Promise> +} + @Mixin(view.mixin.ClassFilters, core.class.Class) export class TClassFilters extends TClass implements ClassFilters { filters!: (string | KeyFilter)[] @@ -245,6 +252,7 @@ export const actionTemplates = template({ export function createModel (builder: Builder): void { builder.createModel( + TFilterMode, TClassFilters, TAttributeFilter, TAttributeEditor, @@ -510,6 +518,66 @@ export function createModel (builder: Builder): void { component: view.component.TimestampFilter }) + builder.createDoc( + view.class.FilterMode, + core.space.Model, + { + label: view.string.FilterIsEither, + result: view.function.FilterValueInResult + }, + view.ids.FilterValueIn + ) + + builder.createDoc( + view.class.FilterMode, + core.space.Model, + { + label: view.string.FilterIsNot, + result: view.function.FilterValueNinResult + }, + view.ids.FilterValueNin + ) + + builder.createDoc( + view.class.FilterMode, + core.space.Model, + { + label: view.string.FilterIsEither, + result: view.function.FilterObjectInResult + }, + view.ids.FilterObjectIn + ) + + builder.createDoc( + view.class.FilterMode, + core.space.Model, + { + label: view.string.FilterIsNot, + result: view.function.FilterObjectNinResult + }, + view.ids.FilterObjectNin + ) + + builder.createDoc( + view.class.FilterMode, + core.space.Model, + { + label: view.string.Before, + result: view.function.FilterBeforeResult + }, + view.ids.FilterBefore + ) + + builder.createDoc( + view.class.FilterMode, + core.space.Model, + { + label: view.string.After, + result: view.function.FilterAfterResult + }, + view.ids.FilterAfter + ) + classPresenter(builder, core.class.EnumOf, view.component.StringPresenter, view.component.EnumEditor) } diff --git a/models/view/src/plugin.ts b/models/view/src/plugin.ts index 95db3f2e9f..3eab655db5 100644 --- a/models/view/src/plugin.ts +++ b/models/view/src/plugin.ts @@ -13,8 +13,8 @@ // limitations under the License. // -import { Ref } from '@anticrm/core' -import { IntlString, mergeIds } from '@anticrm/platform' +import { ObjQueryType, Ref } from '@anticrm/core' +import { IntlString, mergeIds, Resource } from '@anticrm/platform' import type { AnyComponent } from '@anticrm/ui' import { Action, ViewAction, viewId } from '@anticrm/view' import view from '@anticrm/view-resources/src/plugin' @@ -104,5 +104,25 @@ export default mergeIds(viewId, view, { Navigation: '' as IntlString, Editor: '' as IntlString, MarkdownFormatting: '' as IntlString + }, + function: { + FilterObjectInResult: '' as Resource< + (values: any[], onUpdate: () => void, index: number) => Promise> + >, + FilterObjectNinResult: '' as Resource< + (values: any[], onUpdate: () => void, index: number) => Promise> + >, + FilterValueInResult: '' as Resource< + (values: any[], onUpdate: () => void, index: number) => Promise> + >, + FilterValueNinResult: '' as Resource< + (values: any[], onUpdate: () => void, index: number) => Promise> + >, + FilterBeforeResult: '' as Resource< + (values: any[], onUpdate: () => void, index: number) => Promise> + >, + FilterAfterResult: '' as Resource< + (values: any[], onUpdate: () => void, index: number) => Promise> + > } }) diff --git a/plugins/tags-resources/src/components/TagsFilter.svelte b/plugins/tags-resources/src/components/TagsFilter.svelte index 788b1bad7a..0b5612af82 100644 --- a/plugins/tags-resources/src/components/TagsFilter.svelte +++ b/plugins/tags-resources/src/components/TagsFilter.svelte @@ -12,92 +12,29 @@ // See the License for the specific language governing permissions and // limitations under the License. --> - -