From b247103e3872679352e7f3922c325e9cf918192b Mon Sep 17 00:00:00 2001 From: Oleg Ivaniv Date: Wed, 4 Dec 2024 09:01:02 +0100 Subject: [PATCH] feat(editor-ui): Add test metrics management and simplify tags input - Add API endpoints for test metrics CRUD operations - Implement metrics input component with add/delete functionality - Simplify tags input component to use single tag selection --- .../editor-ui/src/api/testDefinition.ee.ts | 82 +++++++++++++++++ .../EditDefinition/MetricsInput.vue | 39 ++++++-- .../EditDefinition/TagsInput.vue | 85 +++--------------- .../composables/useTestDefinitionForm.ts | 78 ++++++++++------ .../src/plugins/i18n/locales/en.json | 2 +- .../editor-ui/src/stores/executions.store.ts | 1 + .../src/stores/testDefinition.store.ee.ts | 51 +++++++++++ .../TestDefinition/TestDefinitionEditView.vue | 88 +++++++++++++++---- 8 files changed, 304 insertions(+), 122 deletions(-) diff --git a/packages/editor-ui/src/api/testDefinition.ee.ts b/packages/editor-ui/src/api/testDefinition.ee.ts index b6fbf78471..e9f2c13fde 100644 --- a/packages/editor-ui/src/api/testDefinition.ee.ts +++ b/packages/editor-ui/src/api/testDefinition.ee.ts @@ -35,6 +35,7 @@ export interface UpdateTestResponse { } const endpoint = '/evaluation/test-definitions'; +const getMetricsEndpoint = (testDefinitionId: string) => `${endpoint}/${testDefinitionId}/metrics`; export async function getTestDefinitions(context: IRestApiContext) { return await makeRestApiRequest<{ count: number; testDefinitions: TestDefinitionRecord[] }>( @@ -71,3 +72,84 @@ export async function updateTestDefinition( export async function deleteTestDefinition(context: IRestApiContext, id: string) { return await makeRestApiRequest<{ success: boolean }>(context, 'DELETE', `${endpoint}/${id}`); } + +// Metrics + +export interface TestMetricRecord { + id: string; + name: string; + testDefinitionId: string; + createdAt?: string; + updatedAt?: string; +} + +export interface CreateTestMetricParams { + testDefinitionId: string; + name: string; +} + +export interface UpdateTestMetricParams { + name: string; + id: string; + testDefinitionId: string; +} + +export interface DeleteTestMetricParams { + testDefinitionId: string; + id: string; +} + +export const getTestMetrics = async (context: IRestApiContext, testDefinitionId: string) => { + return await makeRestApiRequest( + context, + 'GET', + getMetricsEndpoint(testDefinitionId), + ); +}; + +export const getTestMetric = async ( + context: IRestApiContext, + testDefinitionId: string, + id: string, +) => { + return await makeRestApiRequest( + context, + 'GET', + `${getMetricsEndpoint(testDefinitionId)}/${id}`, + ); +}; + +export const createTestMetric = async ( + context: IRestApiContext, + params: CreateTestMetricParams, +) => { + return await makeRestApiRequest( + context, + 'POST', + getMetricsEndpoint(params.testDefinitionId), + { name: params.name }, + ); +}; + +export const updateTestMetric = async ( + context: IRestApiContext, + params: UpdateTestMetricParams, +) => { + return await makeRestApiRequest( + context, + 'PATCH', + `${getMetricsEndpoint(params.testDefinitionId)}/${params.id}`, + { name: params.name }, + ); +}; + +export const deleteTestMetric = async ( + context: IRestApiContext, + params: DeleteTestMetricParams, +) => { + return await makeRestApiRequest( + context, + 'DELETE', + `${getMetricsEndpoint(params.testDefinitionId)}/${params.id}`, + ); +}; diff --git a/packages/editor-ui/src/components/TestDefinition/EditDefinition/MetricsInput.vue b/packages/editor-ui/src/components/TestDefinition/EditDefinition/MetricsInput.vue index e899c8be2d..8ab05479f8 100644 --- a/packages/editor-ui/src/components/TestDefinition/EditDefinition/MetricsInput.vue +++ b/packages/editor-ui/src/components/TestDefinition/EditDefinition/MetricsInput.vue @@ -1,22 +1,30 @@