Skip to content

Commit 3df835c

Browse files
authored
Merge pull request #1515 from MahtabBukhari/Add-Start-Task-button-to-ticket-page
Add Start Task button to ticket page and its whole functionality
2 parents 498b448 + eb49d91 commit 3df835c

File tree

2 files changed

+68
-3
lines changed

2 files changed

+68
-3
lines changed

src/components/common/TicketEditor/TicketEditor.tsx

Lines changed: 67 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,14 @@
22
import React, { useCallback, useEffect, useMemo, useState } from 'react';
33
import { observer } from 'mobx-react-lite';
44
import { useStores } from 'store';
5-
import { EuiGlobalToastList, EuiFlexGroup, EuiFlexItem, EuiPanel, EuiIcon } from '@elastic/eui';
5+
import {
6+
EuiGlobalToastList,
7+
EuiFlexGroup,
8+
EuiFlexItem,
9+
EuiPanel,
10+
EuiIcon,
11+
EuiLoadingSpinner
12+
} from '@elastic/eui';
613
import { renderMarkdown } from 'people/utils/RenderMarkdown.tsx';
714
import styled from 'styled-components';
815
import history from 'config/history.ts';
@@ -292,8 +299,9 @@ const TicketEditor = observer(
292299
const [activeMode, setActiveMode] = useState<'preview' | 'edit'>('edit');
293300
const [isThinking, setIsThinking] = useState<'speed' | 'thinking'>('thinking');
294301
const [isButtonDisabled, setIsButtonDisabled] = useState(true);
295-
const { main } = useStores();
302+
const { chat, main } = useStores();
296303
const [isCreatingBounty, setIsCreatingBounty] = useState(false);
304+
const [isStartingTask, setIsStartingTask] = useState(false);
297305
const [isOptionsMenuVisible, setIsOptionsMenuVisible] = useState(false);
298306
const [lastLogLine, setLastLogLine] = useState('');
299307
const ui = uiStore;
@@ -628,6 +636,55 @@ const TicketEditor = observer(
628636
}
629637
};
630638

639+
const handleStartTask = async () => {
640+
if (isStartingTask) return;
641+
642+
setIsStartingTask(true);
643+
try {
644+
const newChat = await chat.createChat(workspaceUUID as string, 'New Chat');
645+
const question = `${versionTicketData.name}\n\n${versionTicketData.description}`;
646+
647+
if (newChat && newChat.id) {
648+
const sentMessage = await chat.sendMessage(
649+
newChat.id,
650+
question,
651+
'gpt-4o',
652+
websocketSessionId,
653+
workspaceUUID,
654+
'Build',
655+
undefined
656+
);
657+
if (sentMessage) {
658+
chat.addMessage(sentMessage);
659+
setToasts([
660+
{
661+
id: `${Date.now()}-start-task-success`,
662+
title: 'Task Started',
663+
color: 'success',
664+
text: 'Hive chat session started successfully!'
665+
}
666+
]);
667+
} else {
668+
throw new Error('Failed to start task');
669+
}
670+
671+
window.open(`/workspace/${workspaceUUID}/hivechat/${newChat.id}`, '_blank');
672+
}
673+
} catch (error) {
674+
console.error('Error starting task:', error);
675+
setToasts([
676+
{
677+
id: `${Date.now()}-start-task-error`,
678+
title: 'Error',
679+
color: 'danger',
680+
text: 'Failed to start task. Please try again.'
681+
}
682+
]);
683+
} finally {
684+
setIsStartingTask(false);
685+
}
686+
};
687+
631688
const handleDeleteTicket = async () => {
632689
const success = await main.deleteTicket(ticketData.uuid);
633690
if (success) {
@@ -927,6 +984,14 @@ const TicketEditor = observer(
927984
SW Run: {swwfLink}
928985
</ActionButton>
929986
)}
987+
<ActionButton
988+
color="primary"
989+
onClick={handleStartTask}
990+
disabled={isStartingTask}
991+
data-testid="start-task-btn"
992+
>
993+
{isStartingTask ? <EuiLoadingSpinner size="m" /> : 'Start Task'}
994+
</ActionButton>
930995
<ActionButton
931996
color="#49C998"
932997
onClick={handleTicketBuilder}

src/people/hiveChat/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1094,7 +1094,7 @@ export const HiveChatView: React.FC = observer(() => {
10941094

10951095
useEffect(() => {
10961096
const checkForNewArtifacts = async () => {
1097-
if (!chatId || !isArtifactLoggingEnabled || messages?.length === 0) return;
1097+
if (!chatId || !isArtifactLoggingEnabled || !messages || messages.length === 0) return;
10981098

10991099
const latestMessage = messages[messages.length - 1];
11001100
if (latestMessage && latestMessage.id !== lastProcessedMessageId) {

0 commit comments

Comments
 (0)