@@ -64,19 +64,27 @@ export default function ColleaguesView({
6464 setColleagues ( initialColleagues || [ ] )
6565 } , [ initialColleagues ] )
6666
67+ // Ensure props are arrays to prevent iteration errors
68+ const safeAvailableUsers = Array . isArray ( availableUsers ) ? availableUsers : [ ]
69+ const safeExistingDigitalColleagues = Array . isArray ( existingDigitalColleagues )
70+ ? existingDigitalColleagues
71+ : [ ]
72+
6773 // New state for selection flows
6874 const [ currentView , setCurrentView ] = useState <
6975 'main' | 'typeSelection' | 'userSelection' | 'digitalOptions' | 'digitalClone' | 'form' | 'view'
7076 > ( 'main' )
7177
7278 const filteredColleagues = colleagues . filter ( ( colleague ) => {
79+ if ( ! colleague || ! colleague . name ) return false
80+
7381 const matchesSearch =
7482 colleague . name . toLowerCase ( ) . includes ( searchTerm . toLowerCase ( ) ) ||
7583 ( colleague . type === 'human' &&
76- ( colleague . email . toLowerCase ( ) . includes ( searchTerm . toLowerCase ( ) ) ||
77- colleague . role . toLowerCase ( ) . includes ( searchTerm . toLowerCase ( ) ) ) ) ||
84+ ( colleague . email ? .toLowerCase ( ) . includes ( searchTerm . toLowerCase ( ) ) ||
85+ colleague . role ? .toLowerCase ( ) . includes ( searchTerm . toLowerCase ( ) ) ) ) ||
7886 ( colleague . type === 'digital' &&
79- colleague . jobDescription . toLowerCase ( ) . includes ( searchTerm . toLowerCase ( ) ) )
87+ colleague . jobDescription ? .toLowerCase ( ) . includes ( searchTerm . toLowerCase ( ) ) )
8088
8189 const matchesDepartment =
8290 departmentFilter === 'all' ||
@@ -113,6 +121,8 @@ export default function ColleaguesView({
113121
114122 // New handler functions
115123 const handleUserSelect = ( user : UserType ) => {
124+ // Validate user object
125+
116126 // Convert User to HumanColleague
117127 const humanColleague : HumanColleague = {
118128 id : `human-${ Date . now ( ) } ` ,
@@ -124,7 +134,7 @@ export default function ColleaguesView({
124134 phone : user . phone ,
125135 location : user . location ,
126136 timezone : user . timezone ,
127- skills : user . skills ,
137+ skills : user . skills || [ ] ,
128138 bio : user . bio ,
129139 status : 'active' ,
130140 joinedDate : new Date ( ) ,
@@ -137,6 +147,14 @@ export default function ColleaguesView({
137147 }
138148
139149 const handleDigitalColleagueClone = ( clonedColleague : DigitalColleague ) => {
150+ if ( ! clonedColleague || ! clonedColleague . id ) {
151+ console . error (
152+ 'Invalid cloned colleague provided to handleDigitalColleagueClone:' ,
153+ clonedColleague ,
154+ )
155+ return
156+ }
157+
140158 setColleagues ( ( prev ) => [ ...prev , clonedColleague ] )
141159 onColleagueAdd ?.( clonedColleague )
142160 setCurrentView ( 'main' )
@@ -148,6 +166,11 @@ export default function ColleaguesView({
148166 }
149167
150168 const handleSaveColleague = ( colleague : DigitalColleague ) => {
169+ if ( ! colleague || ! colleague . id ) {
170+ console . error ( 'Invalid colleague provided to handleSaveColleague:' , colleague )
171+ return
172+ }
173+
151174 if ( editingColleague ) {
152175 // Update existing colleague
153176 setColleagues ( ( prev ) => prev . map ( ( c ) => ( c . id === colleague . id ? colleague : c ) ) )
@@ -197,14 +220,24 @@ export default function ColleaguesView({
197220 const allDocuments : KnowledgeDocument [ ] = [ ]
198221
199222 // Get documents from existing digital colleagues
200- existingDigitalColleagues . forEach ( ( colleague ) => {
201- allDocuments . push ( ...colleague . knowledge , ...colleague . coreKnowledge )
223+ safeExistingDigitalColleagues . forEach ( ( colleague ) => {
224+ if ( colleague . knowledge && Array . isArray ( colleague . knowledge ) ) {
225+ allDocuments . push ( ...colleague . knowledge )
226+ }
227+ if ( colleague . coreKnowledge && Array . isArray ( colleague . coreKnowledge ) ) {
228+ allDocuments . push ( ...colleague . coreKnowledge )
229+ }
202230 } )
203231
204232 // Get documents from current colleagues in state
205233 colleagues . forEach ( ( colleague ) => {
206234 if ( colleague . type === 'digital' ) {
207- allDocuments . push ( ...colleague . knowledge , ...colleague . coreKnowledge )
235+ if ( colleague . knowledge && Array . isArray ( colleague . knowledge ) ) {
236+ allDocuments . push ( ...colleague . knowledge )
237+ }
238+ if ( colleague . coreKnowledge && Array . isArray ( colleague . coreKnowledge ) ) {
239+ allDocuments . push ( ...colleague . coreKnowledge )
240+ }
208241 }
209242 } )
210243
@@ -230,7 +263,7 @@ export default function ColleaguesView({
230263 if ( currentView === 'userSelection' ) {
231264 return (
232265 < UserSelection
233- users = { availableUsers }
266+ users = { safeAvailableUsers }
234267 onUserSelect = { handleUserSelect }
235268 onCancel = { ( ) => setCurrentView ( 'typeSelection' ) }
236269 />
@@ -250,7 +283,7 @@ export default function ColleaguesView({
250283 if ( currentView === 'digitalClone' ) {
251284 return (
252285 < DigitalColleagueClone
253- digitalColleagues = { existingDigitalColleagues }
286+ digitalColleagues = { safeExistingDigitalColleagues }
254287 onColleagueClone = { handleDigitalColleagueClone }
255288 onCancel = { ( ) => setCurrentView ( 'digitalOptions' ) }
256289 />
@@ -433,7 +466,7 @@ export default function ColleaguesView({
433466 >
434467 { filteredColleagues . map ( ( colleague ) => (
435468 < ColleagueCard
436- key = { colleague . id }
469+ key = { ` ${ colleague } - ${ colleague . id } ` }
437470 colleague = { colleague }
438471 onEdit = { handleEditColleague }
439472 onDelete = { handleDeleteColleague }
0 commit comments