diff --git a/models/core/src/core.ts b/models/core/src/core.ts index 23750ccd8f..532d4c7366 100644 --- a/models/core/src/core.ts +++ b/models/core/src/core.ts @@ -75,3 +75,6 @@ export class TTypeBoolean extends TType {} @Model(core.class.TypeTimestamp, core.class.Type) export class TTypeTimestamp extends TType {} + +@Model(core.class.TypeDate, core.class.Type) +export class TTypeDate extends TType {} diff --git a/models/core/src/index.ts b/models/core/src/index.ts index 02bdece3bc..f998dc7726 100644 --- a/models/core/src/index.ts +++ b/models/core/src/index.ts @@ -15,7 +15,7 @@ import { Builder } from '@anticrm/model' import core from './component' -import { TAttribute, TClass, TDoc, TMixin, TObj, TType, TTypeString, TTypeBoolean, TTypeTimestamp, TAttachedDoc } from './core' +import { TAttribute, TClass, TDoc, TMixin, TObj, TType, TTypeString, TTypeBoolean, TTypeTimestamp, TTypeDate, TAttachedDoc } from './core' import { TSpace, TAccount, TState, TSpaceWithStates, TDocWithState } from './security' import { TTx, TTxCreateDoc, TTxMixin, TTxUpdateDoc, TTxCUD, TTxPutBag, TTxRemoveDoc, TTxBulkWrite, TTxCollectionCUD } from './tx' @@ -49,6 +49,7 @@ export function createModel (builder: Builder): void { TTypeString, TTypeBoolean, TTypeTimestamp, + TTypeDate, TState ) } diff --git a/models/core/src/security.ts b/models/core/src/security.ts index a2588a9775..16772ee23d 100644 --- a/models/core/src/security.ts +++ b/models/core/src/security.ts @@ -15,7 +15,7 @@ import type { Account, Arr, Domain, Ref, Space, State } from '@anticrm/core' import { DOMAIN_MODEL } from '@anticrm/core' -import { Implements, Model, Prop, TypeState, TypeString } from '@anticrm/model' +import { Implements, Model, Prop, TypeBoolean, TypeState, TypeString } from '@anticrm/model' import type { IntlString } from '@anticrm/platform' import core from './component' import { TDoc } from './core' @@ -29,8 +29,12 @@ export class TSpace extends TDoc implements Space { @Prop(TypeString(), 'Name' as IntlString) name!: string + @Prop(TypeString(), 'Description' as IntlString) description!: string + + @Prop(TypeBoolean(), 'Private' as IntlString) private!: boolean + members!: Arr> } diff --git a/models/recruit/src/index.ts b/models/recruit/src/index.ts index 880c18f7dd..a8869a0ea7 100644 --- a/models/recruit/src/index.ts +++ b/models/recruit/src/index.ts @@ -15,8 +15,8 @@ import activity from '@anticrm/activity' import type { Employee } from '@anticrm/contact' -import type { Doc, Domain, FindOptions, Ref } from '@anticrm/core' -import { Builder, Model, Prop, TypeBoolean, TypeString, UX } from '@anticrm/model' +import type { Doc, Domain, FindOptions, Ref, Timestamp } from '@anticrm/core' +import { Builder, Model, Prop, TypeBoolean, TypeDate, TypeString, UX } from '@anticrm/model' import chunter from '@anticrm/model-chunter' import contact, { TPerson } from '@anticrm/model-contact' import core, { TAttachedDoc, TDocWithState, TSpace, TSpaceWithStates } from '@anticrm/model-core' @@ -30,7 +30,22 @@ export const DOMAIN_RECRUIT = 'recruit' as Domain @Model(recruit.class.Vacancy, core.class.SpaceWithStates) @UX(recruit.string.Vacancy, recruit.icon.Vacancy) -export class TVacancy extends TSpaceWithStates implements Vacancy {} +export class TVacancy extends TSpaceWithStates implements Vacancy { + @Prop(TypeString(), 'Full description' as IntlString) + fullDescription?: string + + @Prop(TypeString(), 'Attachments' as IntlString) + attachments?: number + + @Prop(TypeDate(), 'Due date' as IntlString, recruit.icon.Calendar) + dueTo?: Timestamp + + @Prop(TypeString(), 'Location' as IntlString, recruit.icon.Location) + location?: string + + @Prop(TypeString(), 'Company' as IntlString, recruit.icon.Company) + company?: string +} @Model(recruit.class.Candidates, core.class.Space) @UX(recruit.string.CandidatePools, recruit.icon.RecruitApplication) @@ -109,7 +124,8 @@ export function createModel (builder: Builder): void { label: recruit.string.Vacancies, spaceClass: recruit.class.Vacancy, addSpaceLabel: recruit.string.CreateVacancy, - createComponent: recruit.component.CreateVacancy + createComponent: recruit.component.CreateVacancy, + component: recruit.component.EditVacancy }, { label: recruit.string.CandidatePools, diff --git a/models/recruit/src/plugin.ts b/models/recruit/src/plugin.ts index bc191cca68..be7e39d7e2 100644 --- a/models/recruit/src/plugin.ts +++ b/models/recruit/src/plugin.ts @@ -43,7 +43,8 @@ export default mergeIds(recruitId, recruit, { EditCandidate: '' as AnyComponent, KanbanCard: '' as AnyComponent, ApplicationPresenter: '' as AnyComponent, - ApplicationsPresenter: '' as AnyComponent + ApplicationsPresenter: '' as AnyComponent, + EditVacancy: '' as AnyComponent }, space: { CandidatesPublic: '' as Ref diff --git a/models/view/src/index.ts b/models/view/src/index.ts index a7725a7a61..269352b971 100644 --- a/models/view/src/index.ts +++ b/models/view/src/index.ts @@ -109,6 +109,14 @@ export function createModel (builder: Builder): void { presenter: view.component.TimestampPresenter }) + builder.mixin(core.class.TypeDate, core.class.Class, view.mixin.AttributePresenter, { + presenter: view.component.DatePresenter + }) + + builder.mixin(core.class.TypeDate, core.class.Class, view.mixin.AttributeEditor, { + editor: view.component.DateEditor + }) + builder.mixin(core.class.State, core.class.Class, view.mixin.AttributeEditor, { editor: view.component.StateEditor }) diff --git a/models/view/src/plugin.ts b/models/view/src/plugin.ts index c1199def19..58a1d2f0a7 100644 --- a/models/view/src/plugin.ts +++ b/models/view/src/plugin.ts @@ -34,7 +34,8 @@ export default mergeIds(viewId, view, { StatePresenter: '' as AnyComponent, StateEditor: '' as AnyComponent, TimestampPresenter: '' as AnyComponent, - + DateEditor: '' as AnyComponent, + DatePresenter: '' as AnyComponent, TableView: '' as AnyComponent, KanbanView: '' as AnyComponent } diff --git a/packages/core/src/component.ts b/packages/core/src/component.ts index 1b8cff025c..5754615a95 100644 --- a/packages/core/src/component.ts +++ b/packages/core/src/component.ts @@ -46,6 +46,7 @@ export default plugin(coreId, { TypeString: '' as Ref>>, TypeBoolean: '' as Ref>>, TypeTimestamp: '' as Ref>>, + TypeDate: '' as Ref>>, Bag: '' as Ref>>> }, interface: { diff --git a/packages/model/src/dsl.ts b/packages/model/src/dsl.ts index 757ef455e7..c09e9fcd3a 100644 --- a/packages/model/src/dsl.ts +++ b/packages/model/src/dsl.ts @@ -298,6 +298,13 @@ export function TypeTimestamp (): Type { return { _class: core.class.TypeTimestamp, label: 'TypeTimestamp' as IntlString } } +/** + * @public + */ +export function TypeDate (): Type { + return { _class: core.class.TypeDate, label: 'TypeDate' as IntlString } +} + /** * @public */ diff --git a/packages/presentation/src/components/AttributeBarEditor.svelte b/packages/presentation/src/components/AttributeBarEditor.svelte index 11b2aca048..e31f99d9e9 100644 --- a/packages/presentation/src/components/AttributeBarEditor.svelte +++ b/packages/presentation/src/components/AttributeBarEditor.svelte @@ -25,7 +25,7 @@ // export let _class: Ref> export let key: string export let object: Doc - export let maxWidth: string + export let maxWidth: string | undefined = undefined export let focus: boolean = false export let minimize: boolean = false export let showHeader: boolean = true @@ -59,7 +59,7 @@
{#if !minimize} -
+
{#if showHeader}