11/** @jsxImportSource @emotion /react */
2- import { useState } from 'react' ;
2+ import { useState , useEffect } from 'react' ;
3+ import { useNavigate } from 'react-router-dom' ;
34import { useMutation } from '@tanstack/react-query' ;
5+ import { fetchNotionPages } from '../../api/notionAPI' ;
46import { updateAssistant } from '../../api/assistantAPI' ;
5- import { useNavigate } from 'react-router-dom' ;
67
78import BotStepPDF from './modal/BotStepPDF' ;
89import BotStepNotion from './modal/BotStepNotion' ;
910import BotStepDrive from './modal/BotStepDrive' ;
11+
1012import notionIcon from '../../assets/icons/notion-icon.png' ;
1113import driveIcon from '../../assets/icons/drive.png' ;
1214import arrowIcon from '../../assets/icons/right.svg' ;
@@ -33,17 +35,60 @@ import {
3335 buttonContainerStyle ,
3436} from './BotStep3.styles' ;
3537
36- const BotStep3 = ( { onPrev, assistantData } ) => {
38+ const BotStep3 = ( { onPrev, assistantData, setAssistantData } ) => {
3739 const [ selectedKnowledge , setSelectedKnowledge ] = useState ( null ) ;
3840 const [ selectedActions , setSelectedActions ] = useState ( [ ] ) ;
41+ const [ checked , setChecked ] = useState ( false ) ;
3942 const navigate = useNavigate ( ) ;
4043
41- // 지식 추가 (단일 선택)
42- const toggleKnowledge = ( knowledge ) => {
43- setSelectedKnowledge ( ( prev ) => ( prev === knowledge ? null : knowledge ) ) ;
44+ console . log ( 'assistantData 확인:' , assistantData ) ;
45+
46+ useEffect ( ( ) => {
47+ if ( assistantData . isConnect === 1 ) {
48+ fetchNotionPages ( assistantData . assistantName )
49+ . then ( ( data ) => {
50+ console . log ( 'Notion 페이지 불러오기 성공:' , data ) ;
51+ setAssistantData ( ( prev ) => ( {
52+ ...prev ,
53+ notionPages : data , // Notion 페이지 저장
54+ } ) ) ;
55+ setSelectedKnowledge ( 'Notion' ) ; // 모달 자동 열기
56+ } )
57+ . catch ( ( error ) =>
58+ console . error ( 'Notion 페이지 불러오기 실패:' , error )
59+ ) ;
60+ }
61+ } , [ assistantData . isConnect ] ) ;
62+
63+ // Notion 클릭 핸들러
64+ const handleNotionClick = ( ) => {
65+ if ( ! assistantData . assistantName || ! assistantData . userEmail ) {
66+ alert ( '어시스턴트 정보를 불러올 수 없습니다.' ) ;
67+ return ;
68+ }
69+
70+ if ( checked ) {
71+ setSelectedKnowledge ( 'Notion' ) ;
72+ } else {
73+ setChecked ( true ) ;
74+ const notionAuthURL = `https://www.branchify.site/api/oauth/notion/connect?userEmail=${ encodeURIComponent (
75+ assistantData . userEmail
76+ ) } &assistantName=${ encodeURIComponent (
77+ assistantData . assistantName
78+ ) } `;
79+
80+ const notionWindow = window . open (
81+ notionAuthURL ,
82+ '_blank' ,
83+ 'width=600,height=700'
84+ ) ;
85+ if ( ! notionWindow ) {
86+ alert ( '팝업 차단이 활성화되어 있습니다. 팝업을 허용해주세요.' ) ;
87+ }
88+ }
4489 } ;
4590
46- // 액션 선택 (다중 선택 가능)
91+ // 액션 추가 (다중 선택 가능)
4792 const toggleAction = ( action ) => {
4893 setSelectedActions ( ( prev ) =>
4994 prev . includes ( action )
@@ -52,25 +97,22 @@ const BotStep3 = ({ onPrev, assistantData }) => {
5297 ) ;
5398 } ;
5499
55- console . log ( '🔍 assistantData 확인:' , assistantData ) ;
56- console . log ( '🔍 assistantName 확인:' , assistantData ?. assistantName ) ;
57-
58100 const isFormValid = selectedActions . length > 0 ;
59101
60102 const mutation = useMutation ( {
61103 mutationFn : updateAssistant ,
62104 onSuccess : ( ) => {
63- console . log ( 'Assistant updated successfully ' ) ;
105+ console . log ( 'Assistant 업데이트 성공! ' ) ;
64106 alert ( '봇 생성 완료!' ) ;
65107 navigate ( '/bot/list' ) ;
66108 } ,
67109 onError : ( error ) => {
68- console . error ( 'Error updating assistant :' , error ) ;
110+ console . error ( 'Assistant 업데이트 실패 :' , error ) ;
69111 alert ( '업데이트 실패!' ) ;
70112 } ,
71113 } ) ;
72114
73- const handleCreateBot = async ( ) => {
115+ const handleCreateBot = ( ) => {
74116 if ( ! assistantData . assistantName ) {
75117 alert ( 'Assistant 데이터가 없습니다.' ) ;
76118 return ;
@@ -106,7 +148,7 @@ const BotStep3 = ({ onPrev, assistantData }) => {
106148 < div css = { boxSectionStyle } >
107149 < div
108150 css = { boxStyle ( selectedKnowledge === 'PDF' ) }
109- onClick = { ( ) => toggleKnowledge ( 'PDF' ) }
151+ onClick = { ( ) => setSelectedKnowledge ( 'PDF' ) }
110152 >
111153 < span css = { knowledgeText } > PDF</ span >
112154 < span css = { knowledgeText } > 업로드</ span >
@@ -115,7 +157,7 @@ const BotStep3 = ({ onPrev, assistantData }) => {
115157 css = { boxStyle (
116158 selectedKnowledge === 'Notion'
117159 ) }
118- onClick = { ( ) => toggleKnowledge ( 'Notion' ) }
160+ onClick = { handleNotionClick }
119161 >
120162 < img src = { notionIcon } alt = "Notion" />
121163 < span css = { knowledgeText } > Notion</ span >
@@ -124,7 +166,9 @@ const BotStep3 = ({ onPrev, assistantData }) => {
124166 css = { boxStyle (
125167 selectedKnowledge === 'Drive'
126168 ) }
127- onClick = { ( ) => toggleKnowledge ( 'Drive' ) }
169+ onClick = { ( ) =>
170+ setSelectedKnowledge ( 'Drive' )
171+ }
128172 >
129173 < img src = { driveIcon } alt = "Drive" />
130174 < span css = { knowledgeText } > Drive</ span >
@@ -164,6 +208,7 @@ const BotStep3 = ({ onPrev, assistantData }) => {
164208 </ div >
165209 </ div >
166210 </ div >
211+
167212 < div css = { buttonContainerStyle } >
168213 < span css = { prevTextStyle } onClick = { onPrev } >
169214 이전 페이지로
@@ -189,6 +234,7 @@ const BotStep3 = ({ onPrev, assistantData }) => {
189234 </ div >
190235 </ div >
191236
237+ { /* 모달 렌더링 */ }
192238 { selectedKnowledge && (
193239 < div >
194240 { selectedKnowledge === 'PDF' && (
@@ -198,6 +244,7 @@ const BotStep3 = ({ onPrev, assistantData }) => {
198244 ) }
199245 { selectedKnowledge === 'Notion' && (
200246 < BotStepNotion
247+ assistantName = { assistantData . assistantName }
201248 onClose = { ( ) => setSelectedKnowledge ( null ) }
202249 />
203250 ) }
0 commit comments