From 578283d78b883b01d88c270d01188ecbb308633e Mon Sep 17 00:00:00 2001 From: Denis Bykhov <80476319+BykhovDenis@users.noreply.github.com> Date: Tue, 24 May 2022 23:40:37 +0600 Subject: [PATCH] Contacts: Type Filter (#1855) Signed-off-by: Andrey Sobolev Co-authored-by: Andrey Sobolev --- models/contact/src/index.ts | 7 +++-- models/core/src/component.ts | 3 +- models/core/src/core.ts | 4 +-- models/lead/src/index.ts | 7 +++-- models/recruit/src/index.ts | 4 +-- models/view/src/index.ts | 1 + models/view/src/plugin.ts | 3 +- packages/core/lang/en.json | 3 +- packages/core/lang/ru.json | 1 + .../src/components/ClassPresenter.svelte | 22 ++++++++++++++ .../src/components/filter/FilterBar.svelte | 6 +++- .../src/components/filter/ObjectFilter.svelte | 30 ++++++++++--------- plugins/view-resources/src/index.ts | 2 ++ .../src/components/Archive.svelte | 2 +- 14 files changed, 68 insertions(+), 27 deletions(-) create mode 100644 plugins/view-resources/src/components/ClassPresenter.svelte diff --git a/models/contact/src/index.ts b/models/contact/src/index.ts index 2a7c871f8a..925c55b05e 100644 --- a/models/contact/src/index.ts +++ b/models/contact/src/index.ts @@ -68,6 +68,9 @@ export class TContact extends TDoc implements Contact { @Prop(TypeString(), contact.string.Location) @Index(IndexKind.FullText) city!: string + + @Prop(TypeRef(core.class.Class), core.string.ClassLabel) + declare _class: Ref> } @Model(contact.class.Channel, core.class.AttachedDoc, DOMAIN_CHANNEL) @@ -162,7 +165,7 @@ export function createModel (builder: Builder): void { descriptor: view.viewlet.Table, config: [ '', - { key: '$lookup._class.label', label: contact.string.TypeLabel }, + '$lookup._class', 'city', 'attachments', 'modifiedOn', @@ -291,7 +294,7 @@ export function createModel (builder: Builder): void { }) builder.mixin(contact.class.Contact, core.class.Class, view.mixin.ClassFilters, { - filters: ['city', 'modifiedOn'] + filters: ['_class', 'city', 'modifiedOn'] }) builder.createDoc( diff --git a/models/core/src/component.ts b/models/core/src/component.ts index b114cb1d3a..efd2b3ff10 100644 --- a/models/core/src/component.ts +++ b/models/core/src/component.ts @@ -21,6 +21,7 @@ export default mergeIds(coreId, core, { Description: '' as IntlString, Private: '' as IntlString, Archived: '' as IntlString, - ClassLabel: '' as IntlString + ClassLabel: '' as IntlString, + ClassPropertyLabel: '' as IntlString } }) diff --git a/models/core/src/core.ts b/models/core/src/core.ts index 407710b83b..5d07798dc0 100644 --- a/models/core/src/core.ts +++ b/models/core/src/core.ts @@ -45,7 +45,7 @@ import core from './component' // C O R E @Model(core.class.Obj, core.class.Obj) export class TObj implements Obj { - @Prop(TypeRef(core.class.Class), core.string.Class) + @Prop(TypeRef(core.class.Class), core.string.ClassLabel) @Index(IndexKind.Indexed) _class!: Ref> } @@ -86,7 +86,7 @@ export class TAttachedDoc extends TDoc implements AttachedDoc { export class TClass extends TDoc implements Class { kind!: ClassifierKind - @Prop(TypeIntlString(), core.string.ClassLabel) + @Prop(TypeIntlString(), core.string.ClassPropertyLabel) label!: IntlString extends!: Ref> diff --git a/models/lead/src/index.ts b/models/lead/src/index.ts index 2003b6f936..e9d07a40f8 100644 --- a/models/lead/src/index.ts +++ b/models/lead/src/index.ts @@ -15,7 +15,7 @@ // To help typescript locate view plugin properly import type { Employee } from '@anticrm/contact' -import { Doc, FindOptions, IndexKind, Ref } from '@anticrm/core' +import { Class, Doc, FindOptions, IndexKind, Ref } from '@anticrm/core' import type { Customer, Funnel, Lead } from '@anticrm/lead' import { Builder, Collection, Index, Mixin, Model, Prop, TypeRef, TypeString, UX } from '@anticrm/model' import attachment from '@anticrm/model-attachment' @@ -60,6 +60,9 @@ export class TCustomer extends TContact implements Customer { @Prop(TypeString(), core.string.Description) @Index(IndexKind.FullText) description!: string + + @Prop(TypeRef(core.class.Class), core.string.ClassLabel) + declare _class: Ref> } export function createModel (builder: Builder): void { @@ -123,7 +126,7 @@ export function createModel (builder: Builder): void { descriptor: view.viewlet.Table, config: [ '', - { key: '$lookup._class.label', label: contact.string.TypeLabel }, + '$lookup._class', { key: 'leads', presenter: lead.component.LeadsPresenter, label: lead.string.Leads }, 'modifiedOn', '$lookup.channels' diff --git a/models/recruit/src/index.ts b/models/recruit/src/index.ts index e9cf32c215..5972a47d8c 100644 --- a/models/recruit/src/index.ts +++ b/models/recruit/src/index.ts @@ -452,11 +452,11 @@ export function createModel (builder: Builder): void { }) builder.mixin(recruit.mixin.Candidate, core.class.Class, view.mixin.ClassFilters, { - filters: ['title', 'source', 'city', 'skills', 'modifiedOn', 'onsite', 'remote'] + filters: ['_class', 'title', 'source', 'city', 'skills', 'modifiedOn', 'onsite', 'remote'] }) builder.mixin(recruit.class.Applicant, core.class.Class, view.mixin.ClassFilters, { - filters: ['attachedTo', 'assignee', 'modifiedOn'] + filters: ['attachedTo', 'assignee', 'state', 'doneState', 'modifiedOn'] }) createReviewModel(builder) diff --git a/models/view/src/index.ts b/models/view/src/index.ts index 1aeb303b2f..ec1a78c881 100644 --- a/models/view/src/index.ts +++ b/models/view/src/index.ts @@ -275,6 +275,7 @@ export function createModel (builder: Builder): void { classPresenter(builder, core.class.TypeTimestamp, view.component.TimestampPresenter) classPresenter(builder, core.class.TypeDate, view.component.DatePresenter, view.component.DateEditor) classPresenter(builder, core.class.Space, view.component.ObjectPresenter) + classPresenter(builder, core.class.Class, view.component.ClassPresenter) builder.mixin(core.class.TypeString, core.class.Class, view.mixin.ObjectEditor, { editor: view.component.StringTypeEditor diff --git a/models/view/src/plugin.ts b/models/view/src/plugin.ts index 898064a149..2936a693fc 100644 --- a/models/view/src/plugin.ts +++ b/models/view/src/plugin.ts @@ -82,7 +82,8 @@ export default mergeIds(viewId, view, { BooleanTypeEditor: '' as AnyComponent, NumberTypeEditor: '' as AnyComponent, DateTypeEditor: '' as AnyComponent, - RefEditor: '' as AnyComponent + RefEditor: '' as AnyComponent, + ClassPresenter: '' as AnyComponent }, string: { Table: '' as IntlString, diff --git a/packages/core/lang/en.json b/packages/core/lang/en.json index 43e68eda4e..294c2a6541 100644 --- a/packages/core/lang/en.json +++ b/packages/core/lang/en.json @@ -11,7 +11,8 @@ "Description": "Description", "Private": "Private", "Archived": "Archived", - "ClassLabel": "Label", + "ClassLabel": "Type", + "ClassPropertyLabel": "Label", "String": "String", "Markup": "Markup", "Number": "Number", diff --git a/packages/core/lang/ru.json b/packages/core/lang/ru.json index 9ef3d6ccd7..7cfdb0fc8c 100644 --- a/packages/core/lang/ru.json +++ b/packages/core/lang/ru.json @@ -12,6 +12,7 @@ "Private": "Личный", "Archived": "Архивный", "ClassLabel": "Тип", + "ClassPropertyLabel": "Название", "String": "Строка", "Markup": "Разметка", "Number": "Число", diff --git a/plugins/view-resources/src/components/ClassPresenter.svelte b/plugins/view-resources/src/components/ClassPresenter.svelte new file mode 100644 index 0000000000..30ffb2b4a8 --- /dev/null +++ b/plugins/view-resources/src/components/ClassPresenter.svelte @@ -0,0 +1,22 @@ + + + +