diff --git a/models/tracker/src/plugin.ts b/models/tracker/src/plugin.ts index 4c27d0a1538..51136bdb008 100644 --- a/models/tracker/src/plugin.ts +++ b/models/tracker/src/plugin.ts @@ -72,7 +72,8 @@ export default mergeIds(trackerId, tracker, { IssueKanban: '' as Ref, MilestoneList: '' as Ref, ComponentList: '' as Ref, - ProjectList: '' as Ref + ProjectList: '' as Ref, + ProjectListGrouped: '' as Ref }, ids: { TrackerNotificationGroup: '' as Ref, diff --git a/models/tracker/src/viewlets.ts b/models/tracker/src/viewlets.ts index 65cd94aa0f0..8cb2463fc2a 100644 --- a/models/tracker/src/viewlets.ts +++ b/models/tracker/src/viewlets.ts @@ -20,7 +20,7 @@ import core from '@hcengineering/model-core' import task from '@hcengineering/model-task' import view, { showColorsViewOption } from '@hcengineering/model-view' import tags from '@hcengineering/tags' -import { type BuildModelKey, type ViewOptionsModel } from '@hcengineering/view' +import { type ViewOptionModel, type BuildModelKey, type ViewOptionsModel } from '@hcengineering/view' import tracker from './plugin' export const issuesOptions = (kanban: boolean): ViewOptionsModel => ({ @@ -543,14 +543,42 @@ export function defineViewlets (builder: Builder): void { tracker.viewlet.ComponentList ) + const hideArchivedOption: ViewOptionModel = { + key: 'hideArchived', + type: 'toggle', + defaultValue: false, + actionTarget: 'options', + action: view.function.HideArchived, + label: view.string.HideArchived + } + + const tableOptions: ViewOptionsModel = { + groupBy: [], + orderBy: [], + other: [hideArchivedOption] + } + + const projectListOptions: ViewOptionsModel = { + groupBy: ['createdBy', 'modifiedBy'], + orderBy: [ + ['name', SortingOrder.Ascending], + ['identifier', SortingOrder.Ascending], + ['modifiedOn', SortingOrder.Descending], + ['createdOn', SortingOrder.Descending] + ], + other: [hideArchivedOption] + } + builder.createDoc( view.class.Viewlet, core.space.Model, { attachTo: tracker.class.Project, descriptor: view.viewlet.Table, + viewOptions: tableOptions, configOptions: { - hiddenKeys: ['identifier', 'name', 'description'] + hiddenKeys: ['identifier', 'name', 'description'], + sortable: true }, config: [ { @@ -578,6 +606,44 @@ export function defineViewlets (builder: Builder): void { tracker.viewlet.ProjectList ) + builder.createDoc( + view.class.Viewlet, + core.space.Model, + { + attachTo: tracker.class.Project, + descriptor: view.viewlet.List, + viewOptions: projectListOptions, + configOptions: { + strict: true, + hiddenKeys: ['identifier', 'name', 'description'] + }, + config: [ + { + key: '', + presenter: tracker.component.ProjectPresenter, + props: { + openIssues: true, + shouldUseMargin: true + } + }, + 'members', + { + key: 'defaultAssignee', + props: { kind: 'list' } + }, + { + key: 'modifiedOn', + presenter: tracker.component.ModificationDatePresenter, + displayProps: { fixed: 'right', dividerBefore: true } + } + ], + options: { + showArchived: true + } + }, + tracker.viewlet.ProjectListGrouped + ) + const milestoneOptions: ViewOptionsModel = { groupBy: ['status', 'createdBy', 'modifiedBy'], orderBy: [