Skip to content

Commit aef5320

Browse files
committed
feat: Enhance task suggestions to include category information
1 parent ab819fd commit aef5320

File tree

1 file changed

+28
-11
lines changed

1 file changed

+28
-11
lines changed

ui/src/pages/TaskList/TaskList.tsx

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,9 @@ const TaskList = () => {
5757
const [selectedDate, setSelectedDate] = useState<Date | undefined>(
5858
new Date(),
5959
);
60-
const [taskSuggestions, setTaskSuggestions] = useState<string[]>([]);
60+
const [taskSuggestions, setTaskSuggestions] = useState<
61+
{ title: string; category_id: string | null }[]
62+
>([]);
6163
const [showSuggestions, setShowSuggestions] = useState(false);
6264
const [selectedSuggestionIndex, setSelectedSuggestionIndex] = useState(-1);
6365
const debounceTimeoutRef = useRef<number | null>(null);
@@ -79,7 +81,7 @@ const TaskList = () => {
7981

8082
const { data, error } = await supabase
8183
.from("tasks")
82-
.select("title")
84+
.select("title, category_id")
8385
.eq("user_id", user.id)
8486
.ilike("title", `%${query}%`)
8587
.neq("title", query)
@@ -91,11 +93,22 @@ const TaskList = () => {
9193
return;
9294
}
9395

94-
const uniqueTitles = Array.from(
95-
new Set(data?.map((task) => task.title as string) || []),
96-
);
97-
setTaskSuggestions(uniqueTitles);
98-
setShowSuggestions(uniqueTitles.length > 0);
96+
const uniqueSuggestions =
97+
data?.reduce(
98+
(acc: { title: string; category_id: string | null }[], task) => {
99+
const existing = acc.find((item) => item.title === task.title);
100+
if (!existing) {
101+
acc.push({
102+
title: task.title as string,
103+
category_id: task.category_id as string | null,
104+
});
105+
}
106+
return acc;
107+
},
108+
[],
109+
) || [];
110+
setTaskSuggestions(uniqueSuggestions);
111+
setShowSuggestions(uniqueSuggestions.length > 0);
99112
},
100113
[user?.id],
101114
);
@@ -340,7 +353,10 @@ const TaskList = () => {
340353
};
341354

342355
// 提案を選択
343-
const selectSuggestion = async (suggestion: string) => {
356+
const selectSuggestion = async (suggestion: {
357+
title: string;
358+
category_id: string | null;
359+
}) => {
344360
setShowSuggestions(false);
345361
setSelectedSuggestionIndex(-1);
346362
setNewTaskTitle("");
@@ -350,10 +366,11 @@ const TaskList = () => {
350366

351367
startTransition(async () => {
352368
const newTask = {
353-
title: suggestion,
369+
title: suggestion.title,
354370
description: "",
355371
user_id: user.id,
356372
estimated_minute: null,
373+
category_id: suggestion.category_id,
357374
task_date: convertDateStringToDate(
358375
selectedDate
359376
.toLocaleString("ja-JP", { timeZone: "Asia/Tokyo" })
@@ -536,15 +553,15 @@ const TaskList = () => {
536553
<div className="absolute top-full left-0 right-0 z-50 mt-1 bg-white border border-gray-200 rounded-md shadow-lg max-h-48 overflow-y-auto">
537554
{taskSuggestions.map((suggestion, index) => (
538555
<div
539-
key={suggestion}
556+
key={suggestion.title}
540557
className={cn(
541558
"px-3 py-2 cursor-pointer hover:bg-gray-100",
542559
selectedSuggestionIndex === index &&
543560
"bg-blue-50 text-blue-600",
544561
)}
545562
onClick={() => selectSuggestion(suggestion)}
546563
>
547-
{suggestion}
564+
{suggestion.title}
548565
</div>
549566
))}
550567
</div>

0 commit comments

Comments
 (0)