@@ -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