Skip to content

Commit b346495

Browse files
committed
update return home page button
1 parent 0d976aa commit b346495

File tree

4 files changed

+100
-14
lines changed

4 files changed

+100
-14
lines changed

src/frontend_react/src/components/content/HomeInput.tsx

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,33 @@ import "./../../styles/Chat.css"; // Assuming you have a CSS file for additional
1818
import "./../../styles/HomeInput.css";
1919
import { HomeInputProps, quickTasks, QuickTask } from "../../models/homeInput";
2020
import { TaskService } from "../../services/TaskService";
21+
import { NewTaskService } from "../../services/NewTaskService";
2122

2223

2324
const HomeInput: React.FC<HomeInputProps> = ({
2425
onInputSubmit,
2526
onQuickTaskSelect,
26-
}) => {
27-
const [inputValue, setInputValue] = React.useState("");
27+
}) => { const [inputValue, setInputValue] = React.useState("");
2828
const textareaRef = useRef<HTMLTextAreaElement>(null);
2929
const navigate = useNavigate();
3030

31+
/**
32+
* Reset textarea to empty state
33+
*/
34+
const resetTextarea = () => {
35+
setInputValue("");
36+
if (textareaRef.current) {
37+
textareaRef.current.style.height = "auto";
38+
textareaRef.current.focus();
39+
}
40+
};
41+
42+
// Listen for new task reset events
43+
useEffect(() => {
44+
const cleanup = NewTaskService.addResetListener(resetTextarea);
45+
return cleanup;
46+
}, []);
47+
3148
const handleSubmit = async () => {
3249
if (inputValue.trim()) {
3350
try {

src/frontend_react/src/pages/HomePage.tsx

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import { TaskService } from '../services/TaskService';
2525
import { apiService } from '../api/apiService';
2626
import { PlanWithSteps } from '../models';
2727
import HomeInput from '@/components/content/HomeInput';
28+
import { NewTaskService } from '../services/NewTaskService';
2829

2930
/**
3031
* HomePage component - displays task lists and provides navigation
@@ -63,9 +64,16 @@ const HomePage: React.FC = () => {
6364
// Load data on component mount
6465
useEffect(() => {
6566
loadPlansData();
66-
}, [loadPlansData]);
67+
}, [loadPlansData]); /**
68+
* Handle new task creation from the "New task" button
69+
* Resets textarea to empty state on HomePage
70+
*/
71+
const handleNewTaskButton = useCallback(() => {
72+
NewTaskService.handleNewTaskFromHome();
73+
}, []);
74+
6775
/**
68-
* Handle new task creation - placeholder for future implementation
76+
* Handle new task creation from input submission - placeholder for future implementation
6977
*/
7078
const handleNewTask = useCallback((taskName: string) => {
7179
console.log('Creating new task:', taskName);
@@ -116,11 +124,10 @@ const HomePage: React.FC = () => {
116124
<div style={{ flexShrink: 0, display: "flex", overflow: "hidden" }}>
117125
<PanelLeft
118126
panelWidth={280}
119-
panelResize={true}>
120-
<PanelLeftToolbar panelTitle="Tasks" panelIcon={null}>
127+
panelResize={true}> <PanelLeftToolbar panelTitle="Tasks" panelIcon={null}>
121128
<Button
122129
icon={<Add20Regular />}
123-
onClick={() => handleNewTask("New task")}
130+
onClick={handleNewTaskButton}
124131
disabled={plansLoading}
125132
>
126133
New task

src/frontend_react/src/pages/PlanPage.tsx

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import Content from '../coral/components/Content/Content';
1818
import PanelLeft from '../coral/components/Panels/PanelLeft';
1919
import PanelLeftToolbar from '../coral/components/Panels/PanelLeftToolbar';
2020
import TaskList from '../components/content/TaskList';
21+
import { NewTaskService } from '../services/NewTaskService';
2122

2223
/**
2324
* Page component for displaying a specific plan
@@ -38,10 +39,9 @@ const PlanPage: React.FC = () => {
3839

3940
const handleTaskSelect = (taskId: string) => {
4041
console.log(`Selected task ID: ${taskId}`);
41-
};
42-
43-
const handleNewTask = (taskName: string) => {
44-
console.log(`Creating new task: ${taskName}`);
42+
}; const handleNewTask = () => {
43+
// Use NewTaskService to handle navigation to homepage and reset textarea
44+
NewTaskService.handleNewTaskFromPlan(navigate);
4545
};
4646

4747
// Show error if no planId is provided
@@ -60,11 +60,10 @@ const PlanPage: React.FC = () => {
6060
<div style={{ flexShrink: 0, display: "flex", overflow: "hidden" }}>
6161
<PanelLeft
6262
panelWidth={280}
63-
panelResize={true}>
64-
<PanelLeftToolbar panelTitle="" panelIcon={null}>
63+
panelResize={true}> <PanelLeftToolbar panelTitle="" panelIcon={null}>
6564
<Button
6665
icon={<Add20Regular />}
67-
onClick={() => handleNewTask("New task")}
66+
onClick={handleNewTask}
6867
>
6968
New task
7069
</Button>
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
2+
/**
3+
* Service for handling "New Task" button functionality across different pages
4+
* Provides reusable methods for navigating to homepage and resetting textarea
5+
*/
6+
export class NewTaskService {
7+
/**
8+
* Event name for textarea reset functionality
9+
*/
10+
private static readonly RESET_TEXTAREA_EVENT = 'resetTextarea';
11+
12+
/**
13+
* Handle new task action from PlanPage
14+
* Navigates to homepage and resets textarea
15+
* @param navigate - React Router navigate function
16+
*/
17+
static handleNewTaskFromPlan(navigate: (to: string) => void): void {
18+
// Navigate to homepage
19+
navigate('/');
20+
21+
// Emit event to reset textarea after navigation
22+
// Use setTimeout to ensure navigation completes first
23+
setTimeout(() => {
24+
NewTaskService.resetTextarea();
25+
}, 100);
26+
}
27+
28+
/**
29+
* Handle new task action from HomePage
30+
* Resets textarea to empty state
31+
*/
32+
static handleNewTaskFromHome(): void {
33+
NewTaskService.resetTextarea();
34+
}
35+
36+
/**
37+
* Reset textarea to empty state
38+
* Emits a custom event that HomeInput component can listen to
39+
*/
40+
static resetTextarea(): void {
41+
const event = new CustomEvent(NewTaskService.RESET_TEXTAREA_EVENT);
42+
window.dispatchEvent(event);
43+
}
44+
45+
/**
46+
* Add event listener for textarea reset
47+
* Should be called in HomeInput component
48+
* @param callback - Function to call when reset event is triggered
49+
* @returns Cleanup function to remove the event listener
50+
*/
51+
static addResetListener(callback: () => void): () => void {
52+
const handleReset = () => {
53+
callback();
54+
};
55+
56+
window.addEventListener(NewTaskService.RESET_TEXTAREA_EVENT, handleReset);
57+
58+
// Return cleanup function
59+
return () => {
60+
window.removeEventListener(NewTaskService.RESET_TEXTAREA_EVENT, handleReset);
61+
};
62+
}
63+
}

0 commit comments

Comments
 (0)