diff --git a/models/tracker/src/migration.ts b/models/tracker/src/migration.ts index 26cd3caaf5..ee7fb977a4 100644 --- a/models/tracker/src/migration.ts +++ b/models/tracker/src/migration.ts @@ -21,7 +21,6 @@ import core, { DocumentUpdate, Ref, SortingOrder, - StatusCategory, TxCreateDoc, TxOperations, TxResult, @@ -41,6 +40,7 @@ import { Project, TimeReportDayType, calcRank, + createStatuses, genRanks } from '@hcengineering/tracker' import { DOMAIN_TRACKER } from '.' @@ -54,14 +54,6 @@ enum DeprecatedIssueStatus { Canceled } -interface CreateProjectIssueStatusesArgs { - tx: TxOperations - projectId: Ref - categories: StatusCategory[] - defaultStatusId?: Ref - defaultCategoryId?: Ref -} - const categoryByDeprecatedIssueStatus = { [DeprecatedIssueStatus.Backlog]: tracker.issueStatusCategory.Backlog, [DeprecatedIssueStatus.Todo]: tracker.issueStatusCategory.Unstarted, @@ -70,30 +62,6 @@ const categoryByDeprecatedIssueStatus = { [DeprecatedIssueStatus.Canceled]: tracker.issueStatusCategory.Canceled } as const -async function createProjectIssueStatuses ({ - tx, - projectId: attachedTo, - categories, - defaultStatusId, - defaultCategoryId = tracker.issueStatusCategory.Backlog -}: CreateProjectIssueStatusesArgs): Promise { - const issueStatusRanks = [...genRanks(categories.length)] - - for (const [i, statusCategory] of categories.entries()) { - const { _id: category, defaultStatusName } = statusCategory - const rank = issueStatusRanks[i] - - if (defaultStatusName !== undefined) { - await tx.createDoc( - tracker.class.IssueStatus, - attachedTo, - { ofAttribute: tracker.attribute.IssueStatus, name: defaultStatusName, category, rank }, - category === defaultCategoryId ? defaultStatusId : undefined - ) - } - } -} - async function createDefaultProject (tx: TxOperations): Promise { const current = await tx.findOne(tracker.class.Project, { _id: tracker.project.DefaultProject @@ -106,7 +74,6 @@ async function createDefaultProject (tx: TxOperations): Promise { // Create new if not deleted by customers. if (current === undefined && currentDeleted === undefined) { const defaultStatusId: Ref = generateId() - const categories = await tx.findAll(core.class.StatusCategory, {}, { sort: { order: SortingOrder.Ascending } }) await tx.createDoc( tracker.class.Project, @@ -126,14 +93,20 @@ async function createDefaultProject (tx: TxOperations): Promise { }, tracker.project.DefaultProject ) - await createProjectIssueStatuses({ tx, projectId: tracker.project.DefaultProject, categories, defaultStatusId }) + await createStatuses( + tx, + tracker.project.DefaultProject, + tracker.class.IssueStatus, + tracker.attribute.IssueStatus, + defaultStatusId + ) } } async function fixProjectIssueStatusesOrder (tx: TxOperations, project: Project): Promise { const statuses = await tx.findAll( tracker.class.IssueStatus, - { attachedTo: project._id }, + { space: project._id }, { lookup: { category: core.class.StatusCategory } } ) statuses.sort((a, b) => (a.$lookup?.category?.order ?? 0) - (b.$lookup?.category?.order ?? 0)) @@ -167,13 +140,11 @@ async function upgradeProjectIssueStatuses (tx: TxOperations): Promise { const projects = await tx.findAll(tracker.class.Project, { issueStatuses: undefined }) if (projects.length > 0) { - const categories = await tx.findAll(core.class.StatusCategory, {}, { sort: { order: SortingOrder.Ascending } }) - for (const project of projects) { const defaultStatusId: Ref = generateId() await tx.update(project, { issueStatuses: 0, defaultIssueStatus: defaultStatusId }) - await createProjectIssueStatuses({ tx, projectId: project._id, categories, defaultStatusId }) + await createStatuses(tx, project._id, tracker.class.IssueStatus, tracker.attribute.IssueStatus, defaultStatusId) } } } diff --git a/packages/core/src/status.ts b/packages/core/src/status.ts index f7b271839d..7d263ccfbc 100644 --- a/packages/core/src/status.ts +++ b/packages/core/src/status.ts @@ -26,7 +26,7 @@ export interface StatusCategory extends Doc { icon: Asset label: IntlString color: number - defaultStatusName?: string + defaultStatusName: string order: number // category order } /** diff --git a/plugins/tracker-resources/src/components/issues/StatusEditor.svelte b/plugins/tracker-resources/src/components/issues/StatusEditor.svelte index 621271dba8..3b14812eec 100644 --- a/plugins/tracker-resources/src/components/issues/StatusEditor.svelte +++ b/plugins/tracker-resources/src/components/issues/StatusEditor.svelte @@ -67,7 +67,7 @@ showPopup( SelectPopup, - { value: statusesInfo, placeholder: tracker.string.SetStatus, searchable: true }, + { value: statusesInfo, placeholder: tracker.string.SetStatus }, eventToHTMLElement(event), changeStatus ) diff --git a/plugins/tracker-resources/src/components/projects/CreateProject.svelte b/plugins/tracker-resources/src/components/projects/CreateProject.svelte index 78bb3dc26c..a62997be94 100644 --- a/plugins/tracker-resources/src/components/projects/CreateProject.svelte +++ b/plugins/tracker-resources/src/components/projects/CreateProject.svelte @@ -15,19 +15,11 @@ dispatch('close')}> @@ -232,14 +258,13 @@ - {#if project === undefined || statusCategories === undefined || $statusStore.statuses.length === 0} + {#if project === undefined || statusCategories === undefined || projectStatuses.length === 0} {:else}
{#each statusCategories as category} - {@const statuses = - $statusStore.statuses.filter((s) => s.space === projectId && s.category === category._id) ?? []} + {@const statuses = projectStatuses.filter((s) => s.category === category._id) ?? []} {@const isSingle = statuses.length === 1}