diff --git a/models/test-management/src/index.ts b/models/test-management/src/index.ts index 6b3a4dac7c..57cabf7eab 100644 --- a/models/test-management/src/index.ts +++ b/models/test-management/src/index.ts @@ -119,7 +119,7 @@ function defineApplication (builder: Builder): void { } ] }, - navHeaderComponent: testManagement.component.NewTestCaseHeader + navHeaderComponent: testManagement.component.TestManagementSpaceHeader }, testManagement.app.TestManagement ) diff --git a/plugins/test-management-assets/assets/icons.svg b/plugins/test-management-assets/assets/icons.svg index 961c3705a9..6fb417124a 100644 --- a/plugins/test-management-assets/assets/icons.svg +++ b/plugins/test-management-assets/assets/icons.svg @@ -49,4 +49,7 @@ + + + diff --git a/plugins/test-management-assets/src/index.ts b/plugins/test-management-assets/src/index.ts index 5498b02acc..8a50befa21 100644 --- a/plugins/test-management-assets/src/index.ts +++ b/plugins/test-management-assets/src/index.ts @@ -26,7 +26,7 @@ loadMetadata(testManagement.icon, { Home: `${icons}#home`, Estimation: `${icons}#testCase`, TestSuite: `${icons}#testSuite`, - TestProject: `${icons}#testCase`, + TestProject: `${icons}#project`, TestSuites: `${icons}#testSuite`, TestRuns: `${icons}#testRun`, RedCircle: `${icons}#red-circle`, diff --git a/plugins/test-management-resources/src/components/TestManagementSpaceHeader.svelte b/plugins/test-management-resources/src/components/TestManagementSpaceHeader.svelte new file mode 100644 index 0000000000..92ff76cdd5 --- /dev/null +++ b/plugins/test-management-resources/src/components/TestManagementSpaceHeader.svelte @@ -0,0 +1,132 @@ + + + +{#if loading} + +{:else} +
+ {#if hasProject} + { + void handleDropdownItemSelected(ev.detail) + }} + /> + {:else} +
+{/if} diff --git a/plugins/test-management-resources/src/components/test-case/NewTestCaseHeader.svelte b/plugins/test-management-resources/src/components/test-case/NewTestCaseHeader.svelte deleted file mode 100644 index 7730d978e3..0000000000 --- a/plugins/test-management-resources/src/components/test-case/NewTestCaseHeader.svelte +++ /dev/null @@ -1,45 +0,0 @@ - - - -
-
diff --git a/plugins/test-management-resources/src/index.ts b/plugins/test-management-resources/src/index.ts index 46a23aec10..3776daf5b4 100644 --- a/plugins/test-management-resources/src/index.ts +++ b/plugins/test-management-resources/src/index.ts @@ -14,7 +14,7 @@ // import { type Resources } from '@hcengineering/platform' -import NewTestCaseHeader from './components/test-case/NewTestCaseHeader.svelte' +import TestManagementSpaceHeader from './components/TestManagementSpaceHeader.svelte' import CreateProject from './components/project/CreateProject.svelte' import ProjectSpacePresenter from './components/project/ProjectSpacePresenter.svelte' import CreateTestSuite from './components/test-suite/CreateTestSuite.svelte' @@ -34,7 +34,7 @@ import { resolveLocation, getTestSuiteLink } from './navigation' export default async (): Promise => ({ component: { - NewTestCaseHeader, + TestManagementSpaceHeader, CreateProject, ProjectSpacePresenter, CreateTestSuite, diff --git a/plugins/test-management-resources/src/navigation.ts b/plugins/test-management-resources/src/navigation.ts index 9ffc30c818..775011ce07 100644 --- a/plugins/test-management-resources/src/navigation.ts +++ b/plugins/test-management-resources/src/navigation.ts @@ -14,10 +14,18 @@ import testManagement, { testManagementId, type TestSuite, type TestProject } from '@hcengineering/test-management' import { type Doc, type Ref } from '@hcengineering/core' import { getClient } from '@hcengineering/presentation' -import { getCurrentResolvedLocation, getPanelURI, type Location, type ResolvedLocation } from '@hcengineering/ui' +import { + getCurrentResolvedLocation, + getLocation, + getPanelURI, + type Location, + type ResolvedLocation +} from '@hcengineering/ui' import view, { type ObjectPanel } from '@hcengineering/view' import { accessDeniedStore } from '@hcengineering/view-resources' +const SUITE_KEY = 'attachedTo' + export function getPanelFragment (object: Pick): string { const hierarchy = getClient().getHierarchy() const objectPanelMixin = hierarchy.classHierarchyMixin(object._class, view.mixin.ObjectPanel) @@ -59,7 +67,7 @@ export function getTestSuiteLink (testSuite: Ref): Location { testSuite === undefined ? undefined : { - attachedTo: testSuite + [SUITE_KEY]: testSuite } return loc @@ -71,6 +79,11 @@ export function getTestSuiteIdFromFragment (fragment: string): Ref | return props[6] != null ? (props[6] as Ref) : undefined } +export function getTestSuiteIdFromLocation (): Ref { + const location = getLocation() + return (location?.query?.[SUITE_KEY] as Ref) ?? testManagement.ids.NoParent +} + export async function resolveLocation (loc: Location): Promise { if (loc.path[2] !== testManagementId) { return undefined diff --git a/plugins/test-management-resources/src/utils.ts b/plugins/test-management-resources/src/utils.ts index 8862576b0b..63fa18bb32 100644 --- a/plugins/test-management-resources/src/utils.ts +++ b/plugins/test-management-resources/src/utils.ts @@ -21,6 +21,8 @@ import { type TestProject, type TestCase, type TestSuite } from '@hcengineering/ import CreateTestSuiteComponent from './components/test-suite/CreateTestSuite.svelte' import EditTestSuiteComponent from './components/test-suite/EditTestSuite.svelte' +import CreateTestCase from './components/test-case/CreateTestCase.svelte' +import CreateProject from './components/project/CreateProject.svelte' export async function getPreviousAssignees (objectId: Ref | undefined): Promise>> { if (objectId === undefined) { @@ -62,6 +64,14 @@ export async function showEditTestSuitePopup (suite: Ref): Promise, testSuiteId: Ref): Promise { + showPopup(CreateTestCase, { space, testSuiteId }, 'top') +} + +export async function showCreateProjectPopup (): Promise { + showPopup(CreateProject, {}, 'top') +} + export async function CreateChildTestSuiteAction (doc: TestSuite): Promise { await showCreateTestSuitePopup(doc.space, doc._id) } diff --git a/plugins/test-management/src/plugin.ts b/plugins/test-management/src/plugin.ts index 6e7d69838c..e5104633ed 100644 --- a/plugins/test-management/src/plugin.ts +++ b/plugins/test-management/src/plugin.ts @@ -166,7 +166,7 @@ export const testManagementPlugin = plugin(testManagementId, { TestCaseSearchIcon: '' as AnyComponent, TestCases: '' as AnyComponent, CreateProject: '' as AnyComponent, - NewTestCaseHeader: '' as AnyComponent, + TestManagementSpaceHeader: '' as AnyComponent, TestCaseStatusIcon: '' as AnyComponent, PriorityIconPresenter: '' as AnyComponent, TestCaseStatusPresenter: '' as AnyComponent,