TSK-810 Rename Team -> Project, Project -> Component (#2756)

Signed-off-by: Denis Bykhov <bykhov.denis@gmail.com>
This commit is contained in:
Denis Bykhov
2023-03-17 12:17:53 +06:00
committed by GitHub
parent 26adf14966
commit 0f24fe80d6
110 changed files with 1646 additions and 1324 deletions
@@ -24,7 +24,7 @@
import { ObjectBox } from '@hcengineering/view-resources'
import { getFiltredKeys, isCollectionAttr } from '@hcengineering/view-resources/src/utils'
import tracker from '../../../plugin'
import ProjectEditor from '../../projects/ProjectEditor.svelte'
import ComponentEditor from '../../components/ComponentEditor.svelte'
import SprintEditor from '../../sprints/SprintEditor.svelte'
import AssigneeEditor from '../AssigneeEditor.svelte'
import DueDateEditor from '../DueDateEditor.svelte'
@@ -75,7 +75,7 @@
return res
}
$: updateKeys(['title', 'description', 'priority', 'status', 'number', 'assignee', 'project', 'dueDate', 'sprint'])
$: updateKeys(['title', 'description', 'priority', 'status', 'number', 'assignee', 'component', 'dueDate', 'sprint'])
const employeeAccountQuery = createQuery()
const employeeQuery = createQuery()
@@ -174,9 +174,9 @@
<div class="divider" />
<span class="label">
<Label label={tracker.string.Project} />
<Label label={tracker.string.Component} />
</span>
<ProjectEditor value={issue} />
<ComponentEditor value={issue} />
{#if issue.sprint}
<span class="label">
@@ -16,7 +16,7 @@
import { createEventDispatcher } from 'svelte'
import core, { Account, AttachedData, Doc, generateId, Ref, SortingOrder, WithLookup } from '@hcengineering/core'
import presentation, { getClient, KeyedAttribute } from '@hcengineering/presentation'
import { IssueStatus, IssuePriority, Issue, Team, calcRank } from '@hcengineering/tracker'
import { IssueStatus, IssuePriority, Issue, Project, calcRank } from '@hcengineering/tracker'
import { addNotification, Button, Component, EditBox } from '@hcengineering/ui'
import tags, { TagElement, TagReference } from '@hcengineering/tags'
import tracker from '../../../plugin'
@@ -30,7 +30,7 @@
export let parentIssue: Issue
export let issueStatuses: WithLookup<IssueStatus>[]
export let currentTeam: Team
export let currentProject: Project
const dispatch = createEventDispatcher()
const client = getClient()
@@ -52,7 +52,7 @@
title: '',
description: '',
assignee: null,
project: null,
component: null,
number: 0,
rank: '',
status: '' as Ref<IssueStatus>,
@@ -90,10 +90,10 @@
}
loading = true
try {
const space = currentTeam._id
const space = currentProject._id
const lastOne = await client.findOne<Issue>(tracker.class.Issue, {}, { sort: { rank: SortingOrder.Descending } })
const incResult = await client.updateDoc(
tracker.class.Team,
tracker.class.Project,
core.space.Space,
space,
{ $inc: { sequence: 1 } },
@@ -105,7 +105,7 @@
title: getTitle(newIssue.title),
number: (incResult as any).object.sequence,
rank: calcRank(lastOne, undefined),
project: parentIssue.project,
component: parentIssue.component,
parents: [{ parentId: parentIssue._id, parentTitle: parentIssue.title }, ...parentIssue.parents]
}
@@ -162,8 +162,8 @@
$: thisRef && thisRef.scrollIntoView({ behavior: 'smooth' })
$: canSave = getTitle(newIssue.title ?? '').length > 0
$: if (!newIssue.status && currentTeam?.defaultIssueStatus) {
newIssue.status = currentTeam.defaultIssueStatus
$: if (!newIssue.status && currentProject?.defaultIssueStatus) {
newIssue.status = currentProject.defaultIssueStatus
}
</script>
@@ -194,7 +194,7 @@
{objectId}
refContainer={thisRef}
_class={tracker.class.Issue}
space={currentTeam._id}
space={currentProject._id}
alwaysEdit
showButtons
maxHeight={'20vh'}
@@ -208,7 +208,7 @@
</div>
<div class="mt-4 flex-between">
<div class="buttons-group xsmall-gap">
<!-- <SpaceSelector _class={tracker.class.Team} label={tracker.string.Team} bind:space /> -->
<!-- <SpaceSelector _class={tracker.class.Project} label={tracker.string.Project} bind:space /> -->
<PriorityEditor
value={newIssue}
shouldShowLabel
@@ -241,7 +241,7 @@
labels = labels.filter((it) => it._id !== evt.detail)
}}
/>
<EstimationEditor kind={'no-border'} size={'small'} value={newIssue} {currentTeam} />
<EstimationEditor kind={'no-border'} size={'small'} value={newIssue} {currentProject} />
</div>
<div class="buttons-group small-gap">
<Button label={presentation.string.Cancel} size="small" kind="transparent" on:click={close} />
@@ -20,7 +20,7 @@
import { getResource } from '@hcengineering/platform'
import presentation, { createQuery, getClient, MessageViewer } from '@hcengineering/presentation'
import setting, { settingId } from '@hcengineering/setting'
import type { Issue, IssueStatus, Team } from '@hcengineering/tracker'
import type { Issue, IssueStatus, Project } from '@hcengineering/tracker'
import {
Button,
EditBox,
@@ -55,7 +55,7 @@
const client = getClient()
let issue: WithLookup<Issue> | undefined
let currentTeam: Team | undefined
let currentProject: Project | undefined
let issueStatuses: WithLookup<IssueStatus>[] | undefined
let title = ''
let description = ''
@@ -90,15 +90,15 @@
;[issue] = result
title = issue.title
description = issue.description
currentTeam = issue.$lookup?.space
currentProject = issue.$lookup?.space
},
{ lookup: { attachedTo: tracker.class.Issue, space: tracker.class.Team } }
{ lookup: { attachedTo: tracker.class.Issue, space: tracker.class.Project } }
)
$: currentTeam &&
$: currentProject &&
statusesQuery.query(
tracker.class.IssueStatus,
{ attachedTo: currentTeam._id },
{ attachedTo: currentProject._id },
(statuses) => (issueStatuses = statuses),
{
lookup: { category: tracker.class.IssueStatusCategory },
@@ -106,7 +106,7 @@
}
)
$: issueId = currentTeam && issue && getIssueId(currentTeam, issue)
$: issueId = currentProject && issue && getIssueId(currentProject, issue)
$: canSave = title.trim().length > 0
$: isDescriptionEmpty = !new DOMParser().parseFromString(description, 'text/html').documentElement.innerText?.trim()
$: parentIssue = issue?.$lookup?.attachedTo
@@ -206,7 +206,7 @@
<div class="popupPanel-body__main-content py-10 clear-mins content">
{#if parentIssue}
<div class="mb-6">
{#if currentTeam && issueStatuses}
{#if currentProject && issueStatuses}
<SubIssueSelector {issue} />
{:else}
<Spinner />
@@ -233,7 +233,7 @@
{:else}
{#if parentIssue}
<div class="mb-6">
{#if currentTeam && issueStatuses}
{#if currentProject && issueStatuses}
<SubIssueSelector {issue} />
{:else}
<Spinner />
@@ -252,12 +252,12 @@
{/if}
</div>
<div class="mt-6">
{#key issue._id && currentTeam !== undefined}
{#if currentTeam !== undefined && issueStatuses !== undefined}
{#key issue._id && currentProject !== undefined}
{#if currentProject !== undefined && issueStatuses !== undefined}
<SubIssues
{issue}
issueStatuses={new Map([[currentTeam._id, issueStatuses]])}
teams={new Map([[currentTeam?._id, currentTeam]])}
issueStatuses={new Map([[currentProject._id, issueStatuses]])}
projects={new Map([[currentProject?._id, currentProject]])}
/>
{/if}
{/key}
@@ -306,7 +306,7 @@
</svelte:fragment>
<svelte:fragment slot="custom-attributes">
{#if issue && currentTeam && issueStatuses}
{#if issue && currentProject && issueStatuses}
<ControlPanel {issue} {issueStatuses} {showAllMixins} />
{/if}
@@ -14,7 +14,7 @@
-->
<script lang="ts">
import { Doc, DocumentQuery, Ref, WithLookup } from '@hcengineering/core'
import { Issue, IssueStatus, Team } from '@hcengineering/tracker'
import { Issue, IssueStatus, Project } from '@hcengineering/tracker'
import { Viewlet, ViewOptions } from '@hcengineering/view'
import {
ActionContext,
@@ -33,8 +33,8 @@
export let disableHeader = false
// Extra properties
export let teams: Map<Ref<Team>, Team> | undefined
export let issueStatuses: Map<Ref<Team>, WithLookup<IssueStatus>[]>
export let projects: Map<Ref<Project>, Project> | undefined
export let issueStatuses: Map<Ref<Project>, WithLookup<IssueStatus>[]>
let list: List
@@ -66,7 +66,7 @@
documents={issues}
{query}
flatHeaders={true}
props={{ teams, issueStatuses }}
props={{ projects, issueStatuses }}
{disableHeader}
selectedObjectIds={$selectionStore ?? []}
on:row-focus={(event) => {
@@ -61,7 +61,7 @@
SelectPopup,
{
value: subIssues.map((iss) => {
const team = iss.$lookup?.space
const project = iss.$lookup?.space
const status = iss.$lookup?.status as WithLookup<IssueStatus>
const icon = status.$lookup?.category?.icon
const color = status.color ?? status.$lookup?.category?.color
@@ -70,7 +70,7 @@
id: iss._id,
icon,
isSelected: iss._id === issue._id,
...(team !== undefined ? { text: `${getIssueId(team, iss)} ${iss.title}` } : undefined),
...(project !== undefined ? { text: `${getIssueId(project, iss)} ${iss.title}` } : undefined),
...(color !== undefined ? { iconColor: getPlatformColor(color) } : undefined)
}
}),
@@ -100,7 +100,7 @@
{
sort: { modifiedOn: SortingOrder.Descending },
lookup: {
space: tracker.class.Team,
space: tracker.class.Project,
status: [tracker.class.IssueStatus, { category: tracker.class.IssueStatusCategory }]
}
}
@@ -15,7 +15,7 @@
<script lang="ts">
import { Ref, SortingOrder, toIdMap, WithLookup } from '@hcengineering/core'
import { createQuery } from '@hcengineering/presentation'
import { Issue, IssueStatus, Team, trackerId } from '@hcengineering/tracker'
import { Issue, IssueStatus, Project, trackerId } from '@hcengineering/tracker'
import {
Button,
Chevron,
@@ -41,8 +41,8 @@
import SubIssueList from './SubIssueList.svelte'
export let issue: Issue
export let teams: Map<Ref<Team>, Team>
export let issueStatuses: Map<Ref<Team>, WithLookup<IssueStatus>[]>
export let projects: Map<Ref<Project>, Project>
export let issueStatuses: Map<Ref<Project>, WithLookup<IssueStatus>[]>
let subIssueEditorRef: HTMLDivElement
let isCollapsed = false
@@ -57,17 +57,17 @@
;[viewlet] = res
})
let _teams = teams
let _projects = projects
let _issueStatuses = issueStatuses
const teamsQuery = createQuery()
const projectsQuery = createQuery()
$: if (teams === undefined) {
teamsQuery.query(tracker.class.Team, {}, async (result) => {
_teams = toIdMap(result)
$: if (projects === undefined) {
projectsQuery.query(tracker.class.Project, {}, async (result) => {
_projects = toIdMap(result)
})
} else {
teamsQuery.unsubscribe()
projectsQuery.unsubscribe()
}
const statusesQuery = createQuery()
@@ -76,9 +76,9 @@
tracker.class.IssueStatus,
{},
(statuses) => {
const st = new Map<Ref<Team>, WithLookup<IssueStatus>[]>()
const st = new Map<Ref<Project>, WithLookup<IssueStatus>[]>()
for (const s of statuses) {
const id = s.attachedTo as Ref<Team>
const id = s.attachedTo as Ref<Project>
st.set(id, [...(st.get(id) ?? []), s])
}
_issueStatuses = st
@@ -160,30 +160,30 @@
<div class="mt-1">
{#if issueStatuses}
{#if hasSubIssues && viewOptions && viewlet}
<ExpandCollapse isExpanded={!isCollapsed}>
{#if !isCollapsed}
{#if !isCollapsed}
<ExpandCollapse isExpanded={!isCollapsed}>
<div class="list" class:collapsed={isCollapsed}>
<SubIssueList
teams={_teams}
projects={_projects}
{viewlet}
{viewOptions}
issueStatuses={_issueStatuses}
query={{ attachedTo: issue._id }}
/>
</div>
{/if}
</ExpandCollapse>
</ExpandCollapse>
{/if}
{/if}
<ExpandCollapse isExpanded={!isCollapsed}>
{#if isCreating}
{@const team = teams.get(issue.space)}
{@const project = projects.get(issue.space)}
{@const statuses = issueStatuses.get(issue.space)}
{#if team !== undefined && statuses !== undefined}
{#if project !== undefined && statuses !== undefined}
<div class="pt-4" bind:this={subIssueEditorRef}>
<CreateSubIssue
parentIssue={issue}
issueStatuses={statuses}
currentTeam={team}
currentProject={project}
on:close={() => (isCreating = false)}
/>
</div>
@@ -15,7 +15,7 @@
<script lang="ts">
import { Ref, SortingOrder, WithLookup } from '@hcengineering/core'
import { createQuery } from '@hcengineering/presentation'
import { Issue, IssueStatus, Team } from '@hcengineering/tracker'
import { Issue, IssueStatus, Project } from '@hcengineering/tracker'
import {
Button,
ButtonKind,
@@ -32,7 +32,7 @@
import { subIssueListProvider } from '../../../utils'
export let value: WithLookup<Issue>
export let currentTeam: Team | undefined = undefined
export let currentProject: Project | undefined = undefined
export let kind: ButtonKind = 'link-bordered'
export let size: ButtonSize = 'inline'
@@ -41,22 +41,22 @@
let btn: HTMLElement
$: team = currentTeam
$: project = currentProject
let subIssues: Issue[] = []
let countComplate: number = 0
const teamQuery = createQuery()
$: if (currentTeam === undefined) {
teamQuery.query(
tracker.class.Team,
const projectQuery = createQuery()
$: if (currentProject === undefined) {
projectQuery.query(
tracker.class.Project,
{
_id: value.space
},
(res) => ([team] = res)
(res) => ([project] = res)
)
} else {
teamQuery.unsubscribe()
projectQuery.unsubscribe()
}
const query = createQuery()
const statusesQuery = createQuery()
@@ -117,7 +117,7 @@
SelectPopup,
{
value: subIssues.map((iss) => {
const text = team ? `${getIssueId(team, iss)} ${iss.title}` : iss.title
const text = project ? `${getIssueId(project, iss)} ${iss.title}` : iss.title
return { id: iss._id, text, isSelected: iss._id === value._id, ...getIssueStatusIcon(iss, statuses) }
}),