diff --git a/models/attachment/src/index.ts b/models/attachment/src/index.ts index a81b312ed0..274cc3dffa 100644 --- a/models/attachment/src/index.ts +++ b/models/attachment/src/index.ts @@ -64,11 +64,11 @@ export function createModel (builder: Builder): void { presenter: attachment.component.AttachmentPresenter }) - builder.mixin(attachment.class.Attachment, core.class.Class, view.mixin.AttributeEditor, { + builder.mixin(attachment.class.Attachment, core.class.Class, view.mixin.CollectionEditor, { editor: attachment.component.Attachments }) - builder.mixin(attachment.class.Photo, core.class.Class, view.mixin.AttributeEditor, { + builder.mixin(attachment.class.Photo, core.class.Class, view.mixin.CollectionEditor, { editor: attachment.component.Photos }) diff --git a/models/contact/src/index.ts b/models/contact/src/index.ts index 12d1e7f8e7..d9f1c464b4 100644 --- a/models/contact/src/index.ts +++ b/models/contact/src/index.ts @@ -181,6 +181,14 @@ export function createModel (builder: Builder): void { editor: contact.component.OrganizationEditor }) + builder.mixin(contact.class.Person, core.class.Class, view.mixin.AttributeEditor, { + editor: contact.component.PersonEditor + }) + + builder.mixin(contact.class.Employee, core.class.Class, view.mixin.AttributeEditor, { + editor: contact.component.PersonEditor + }) + builder.mixin(contact.class.Channel, core.class.Class, view.mixin.AttributePresenter, { presenter: contact.component.ChannelsPresenter }) diff --git a/models/contact/src/plugin.ts b/models/contact/src/plugin.ts index 90b5a09b97..bb175b2de9 100644 --- a/models/contact/src/plugin.ts +++ b/models/contact/src/plugin.ts @@ -35,6 +35,7 @@ export default mergeIds(contactId, contact, { OrganizationPresenter: '' as AnyComponent, Contacts: '' as AnyComponent, EmployeeAccountPresenter: '' as AnyComponent, + PersonEditor: '' as AnyComponent, OrganizationEditor: '' as AnyComponent }, string: { @@ -47,7 +48,6 @@ export default mergeIds(contactId, contact, { Location: '' as IntlString, Channel: '' as IntlString, ChannelProvider: '' as IntlString, - Person: '' as IntlString, Employee: '' as IntlString, Value: '' as IntlString, Phone: '' as IntlString, diff --git a/models/inventory/src/index.ts b/models/inventory/src/index.ts index ce45442896..899927b8d0 100644 --- a/models/inventory/src/index.ts +++ b/models/inventory/src/index.ts @@ -86,7 +86,7 @@ export function createModel (builder: Builder): void { presenter: inventory.component.VariantPresenter }) - builder.mixin(inventory.class.Variant, core.class.Class, view.mixin.AttributeEditor, { + builder.mixin(inventory.class.Variant, core.class.Class, view.mixin.CollectionEditor, { editor: inventory.component.Variants }) diff --git a/models/lead/src/index.ts b/models/lead/src/index.ts index 514fc41ba0..c1a87d4161 100644 --- a/models/lead/src/index.ts +++ b/models/lead/src/index.ts @@ -185,7 +185,7 @@ export function createModel (builder: Builder): void { presenter: lead.component.LeadPresenter }) - builder.mixin(lead.class.Lead, core.class.Class, view.mixin.AttributeEditor, { + builder.mixin(lead.class.Lead, core.class.Class, view.mixin.CollectionEditor, { editor: lead.component.Leads }) diff --git a/models/recruit/src/index.ts b/models/recruit/src/index.ts index 02316989e0..fd0319af94 100644 --- a/models/recruit/src/index.ts +++ b/models/recruit/src/index.ts @@ -133,7 +133,7 @@ export function createModel (builder: Builder): void { } }) - builder.mixin(recruit.class.Applicant, core.class.Class, view.mixin.AttributeEditor, { + builder.mixin(recruit.class.Applicant, core.class.Class, view.mixin.CollectionEditor, { editor: recruit.component.Applications }) diff --git a/models/recruit/src/review.ts b/models/recruit/src/review.ts index 06fea95bb0..c56ac6f4c2 100644 --- a/models/recruit/src/review.ts +++ b/models/recruit/src/review.ts @@ -43,7 +43,7 @@ export function createReviewModel (builder: Builder): void { } }) - builder.mixin(recruit.class.Review, core.class.Class, view.mixin.AttributeEditor, { + builder.mixin(recruit.class.Review, core.class.Class, view.mixin.CollectionEditor, { editor: recruit.component.Reviews }) @@ -135,7 +135,7 @@ function createTableViewlet (builder: Builder): void { config: reviewTableConfig }) - builder.mixin(recruit.class.Opinion, core.class.Class, view.mixin.AttributeEditor, { + builder.mixin(recruit.class.Opinion, core.class.Class, view.mixin.CollectionEditor, { editor: recruit.component.Opinions }) } diff --git a/models/tags/src/index.ts b/models/tags/src/index.ts index e1a5d6ae1f..5e5c8d0d76 100644 --- a/models/tags/src/index.ts +++ b/models/tags/src/index.ts @@ -84,7 +84,7 @@ export class TTagCategory extends TDoc implements TagCategory { export function createModel (builder: Builder): void { builder.createModel(TTagElement, TTagReference, TTagCategory) - builder.mixin(tags.class.TagReference, core.class.Class, view.mixin.AttributeEditor, { + builder.mixin(tags.class.TagReference, core.class.Class, view.mixin.CollectionEditor, { editor: tags.component.Tags }) diff --git a/models/task/src/index.ts b/models/task/src/index.ts index 35bbdd9c3f..06e415e555 100644 --- a/models/task/src/index.ts +++ b/models/task/src/index.ts @@ -39,7 +39,8 @@ import presentation from '@anticrm/model-presentation' import view, { actionTemplates as viewTemplates, createAction, template } from '@anticrm/model-view' import { IntlString } from '@anticrm/platform' import { ViewAction } from '@anticrm/view' -import type { +import { + DOMAIN_STATE, DoneState, DoneStateTemplate, Issue, @@ -65,7 +66,6 @@ export { createKanbanTemplate, createSequence, taskOperation } from './migration export { default } from './plugin' export const DOMAIN_TASK = 'task' as Domain -export const DOMAIN_STATE = 'state' as Domain export const DOMAIN_KANBAN = 'kanban' as Domain @Model(task.class.State, core.class.Doc, DOMAIN_STATE, [task.interface.DocWithRank]) @UX(task.string.TaskState, task.icon.TaskState, undefined, 'rank') @@ -454,7 +454,7 @@ export function createModel (builder: Builder): void { task.viewlet.Kanban ) - builder.mixin(task.class.TodoItem, core.class.Class, view.mixin.AttributeEditor, { + builder.mixin(task.class.TodoItem, core.class.Class, view.mixin.CollectionEditor, { editor: task.component.Todos }) diff --git a/models/view/src/index.ts b/models/view/src/index.ts index dac42cbabe..c0620be313 100644 --- a/models/view/src/index.ts +++ b/models/view/src/index.ts @@ -24,6 +24,7 @@ import type { ActionCategory, AttributeEditor, AttributePresenter, + CollectionEditor, HTMLPresenter, IgnoreActions, KeyBinding, @@ -77,6 +78,11 @@ export class TAttributeEditor extends TClass implements AttributeEditor { editor!: AnyComponent } +@Mixin(view.mixin.CollectionEditor, core.class.Class) +export class TCollectionEditor extends TClass implements CollectionEditor { + editor!: AnyComponent +} + @Mixin(view.mixin.AttributePresenter, core.class.Class) export class TAttributePresenter extends TClass implements AttributePresenter { presenter!: AnyComponent @@ -210,6 +216,7 @@ export function createModel (builder: Builder): void { builder.createModel( TAttributeEditor, TAttributePresenter, + TCollectionEditor, TObjectEditor, TViewletDescriptor, TViewlet, @@ -252,6 +259,10 @@ export function createModel (builder: Builder): void { editor: view.component.NumberTypeEditor }) + builder.mixin(core.class.RefTo, core.class.Class, view.mixin.ObjectEditor, { + editor: view.component.RefEditor + }) + builder.createDoc( view.class.ActionCategory, core.space.Model, diff --git a/models/view/src/plugin.ts b/models/view/src/plugin.ts index 340adcb963..36f5b859bb 100644 --- a/models/view/src/plugin.ts +++ b/models/view/src/plugin.ts @@ -77,7 +77,8 @@ export default mergeIds(viewId, view, { StringTypeEditor: '' as AnyComponent, BooleanTypeEditor: '' as AnyComponent, NumberTypeEditor: '' as AnyComponent, - DateTypeEditor: '' as AnyComponent + DateTypeEditor: '' as AnyComponent, + RefEditor: '' as AnyComponent }, string: { Table: '' as IntlString, diff --git a/plugins/contact-resources/src/components/PersonEditor.svelte b/plugins/contact-resources/src/components/PersonEditor.svelte new file mode 100644 index 0000000000..ba5ef76aa9 --- /dev/null +++ b/plugins/contact-resources/src/components/PersonEditor.svelte @@ -0,0 +1,30 @@ + + + + diff --git a/plugins/contact-resources/src/index.ts b/plugins/contact-resources/src/index.ts index dc4f101c93..f942d786e9 100644 --- a/plugins/contact-resources/src/index.ts +++ b/plugins/contact-resources/src/index.ts @@ -37,6 +37,7 @@ import SocialEditor from './components/SocialEditor.svelte' import contact from './plugin' import EmployeeAccountPresenter from './components/EmployeeAccountPresenter.svelte' import OrganizationEditor from './components/OrganizationEditor.svelte' +import PersonEditor from './components/PersonEditor.svelte' import OrganizationSelector from './components/OrganizationSelector.svelte' export { Channels, ChannelsEditor, ContactPresenter, ChannelsView, OrganizationSelector, ChannelsDropdown } @@ -58,6 +59,7 @@ async function queryContact ( export default async (): Promise => ({ component: { + PersonEditor, OrganizationEditor, ContactPresenter, PersonPresenter, diff --git a/plugins/contact-resources/src/plugin.ts b/plugins/contact-resources/src/plugin.ts index 39e2611e76..520c102229 100644 --- a/plugins/contact-resources/src/plugin.ts +++ b/plugins/contact-resources/src/plugin.ts @@ -33,6 +33,7 @@ export default mergeIds(contactId, contact, { CreateOrganizations: '' as IntlString, Organizations: '' as IntlString, Organization: '' as IntlString, + Person: '' as IntlString, SelectFolder: '' as IntlString, OrganizationsFolder: '' as IntlString, PersonsFolder: '' as IntlString, diff --git a/plugins/task-resources/src/components/TaskHeader.svelte b/plugins/task-resources/src/components/TaskHeader.svelte index 31fb9982f1..879e2097ed 100644 --- a/plugins/task-resources/src/components/TaskHeader.svelte +++ b/plugins/task-resources/src/components/TaskHeader.svelte @@ -17,7 +17,6 @@ import contact from '@anticrm/contact' import core, { Class, Doc, Mixin, Ref, RefTo } from '@anticrm/core' import { AttributesBar, getClient, KeyedAttribute, UserBox } from '@anticrm/presentation' - import { Label } from '@anticrm/ui' import { Task } from '@anticrm/task' import task from '../plugin' import { DocAttributeBar } from '@anticrm/view-resources' @@ -78,38 +77,10 @@ {:else} -
- - -
- -
-
- + {/if}