Skip to content

Commit f94cf01

Browse files
committed
fix: user types
1 parent 6805f67 commit f94cf01

5 files changed

Lines changed: 260 additions & 32 deletions

File tree

src/components/Projects/AddTaskModal.stories.tsx

Lines changed: 78 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -98,20 +98,73 @@ const mockSprints = [
9898
];
9999

100100
const mockAssignees = [
101+
// Digital Colleagues
101102
{
102103
id: 1,
103-
name: 'John Doe',
104-
email: 'john@example.com',
104+
name: 'HR Business Partner',
105+
model: null,
106+
capabilities: [],
107+
knowledge: null,
108+
coreKnowledge: null,
109+
description: null,
110+
jobDescription: null,
111+
workInstructions: null,
112+
capabilityLevel: 1,
113+
systemMsg: null,
114+
identity: 1,
115+
metadata: null,
116+
updatedAt: '2025-11-20T19:16:27.180Z',
117+
createdAt: '2025-11-20T19:15:06.620Z',
105118
},
106119
{
107120
id: 2,
108-
name: 'Jane Smith',
109-
email: 'jane@example.com',
121+
name: 'Technical Support Bot',
122+
model: null,
123+
capabilities: [],
124+
knowledge: null,
125+
coreKnowledge: null,
126+
description: null,
127+
jobDescription: null,
128+
workInstructions: null,
129+
capabilityLevel: 2,
130+
systemMsg: null,
131+
identity: 2,
132+
metadata: null,
133+
updatedAt: '2025-11-20T19:16:27.180Z',
134+
createdAt: '2025-11-20T19:15:06.620Z',
110135
},
136+
// Users
111137
{
112-
id: 3,
113-
name: 'Bob Johnson',
114-
email: 'bob@example.com',
138+
id: '99ccf092-f9a0-4325-9343-58ebe4d5eb04',
139+
email: 'rob.ellison@example.com',
140+
emailVerified: null,
141+
name: 'Rob Ellison',
142+
image: null,
143+
role: 'user',
144+
enabled: true,
145+
accounts: [],
146+
sessions: [],
147+
updatedAt: '2026-02-16T23:47:00.735Z',
148+
createdAt: '2025-12-15T16:52:22.363Z',
149+
enableAPIKey: null,
150+
apiKey: null,
151+
collection: 'users',
152+
},
153+
{
154+
id: 'a1b2c3d4-e5f6-4g5h-6i7j-8k9l0m1n2o3p',
155+
email: 'sarah.johnson@example.com',
156+
emailVerified: null,
157+
name: 'Sarah Johnson',
158+
image: null,
159+
role: 'user',
160+
enabled: true,
161+
accounts: [],
162+
sessions: [],
163+
updatedAt: '2026-02-16T23:47:00.735Z',
164+
createdAt: '2025-12-15T16:52:22.363Z',
165+
enableAPIKey: null,
166+
apiKey: null,
167+
collection: 'users',
115168
},
116169
];
117170

@@ -147,3 +200,21 @@ export const NoEpics: Story = {
147200
assignees: mockAssignees,
148201
},
149202
};
203+
204+
export const MixedAssignees: Story = {
205+
args: {
206+
isOpen: true,
207+
onClose: action('onClose'),
208+
onAddTask: action('onAddTask'),
209+
epics: mockEpics,
210+
sprints: mockSprints,
211+
assignees: mockAssignees,
212+
},
213+
parameters: {
214+
docs: {
215+
description: {
216+
story: 'Demonstrates the modal with both Digital Colleagues and Users as assignees. Digital Colleagues will show with a different badge than Users.',
217+
},
218+
},
219+
},
220+
};

src/components/Projects/AddTaskModal.tsx

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -105,9 +105,9 @@ export const AddTaskModal: React.FC<AddTaskModalProps> = ({
105105
const selectedAssignee = assignees.find(a => a.id.toString() === formData.assignee)
106106
if (selectedAssignee) {
107107
if ('collection' in selectedAssignee) {
108-
assigneeValue = { relationTo: 'users' as const, value: selectedAssignee }
108+
assigneeValue = { relationTo: 'users' as const, value: selectedAssignee.id as string }
109109
} else {
110-
assigneeValue = { relationTo: 'digital-colleagues' as const, value: selectedAssignee }
110+
assigneeValue = { relationTo: 'digital-colleagues' as const, value: Number(selectedAssignee.id) }
111111
}
112112
}
113113
}
@@ -284,7 +284,7 @@ export const AddTaskModal: React.FC<AddTaskModalProps> = ({
284284
</div>
285285

286286
<div className="space-y-2">
287-
<Label htmlFor="sprint">Assignee</Label>
287+
<Label htmlFor="assignee">Assignee</Label>
288288
<Select
289289
value={formData.assignee}
290290
onValueChange={(value) => handleChange('assignee', value)}
@@ -294,11 +294,21 @@ export const AddTaskModal: React.FC<AddTaskModalProps> = ({
294294
</SelectTrigger>
295295
<SelectContent>
296296
<SelectItem value="none">No Assignee</SelectItem>
297-
{assignees.map((user) => (
298-
<SelectItem key={user.id} value={user.id.toString()}>
299-
<div className="flex items-center gap-2">{user.name}</div>
300-
</SelectItem>
301-
))}
297+
{assignees.map((assignee) => {
298+
const isUser = 'collection' in assignee
299+
return (
300+
<SelectItem key={assignee.id} value={assignee.id.toString()}>
301+
<div className="flex items-center gap-2">
302+
{assignee.name}
303+
{isUser ? (
304+
<Badge variant="secondary" className="text-xs">User</Badge>
305+
) : (
306+
<Badge variant="outline" className="text-xs">Digital Colleague</Badge>
307+
)}
308+
</div>
309+
</SelectItem>
310+
)
311+
})}
302312
</SelectContent>
303313
</Select>
304314
</div>

src/components/Projects/TaskDetailsModal.stories.tsx

Lines changed: 82 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11

22
import type { Meta, StoryObj } from '@storybook/react';
33
import { TaskDetailsModal } from './TaskDetailsModal';
4+
import { DigitalColleague, User } from '../Foundary/types';
45

56
const meta: Meta<typeof TaskDetailsModal> = {
67
title: 'Projects/Tasks/TaskDetailsModal',
@@ -104,6 +105,77 @@ const mockSprints = [
104105
},
105106
];
106107

108+
const mockTeamMembers: (User | DigitalColleague)[] = [
109+
// Digital Colleagues
110+
{
111+
id: 1,
112+
name: 'HR Business Partner',
113+
model: null,
114+
capabilities: [],
115+
knowledge: null,
116+
coreKnowledge: null,
117+
description: null,
118+
jobDescription: null,
119+
workInstructions: null,
120+
capabilityLevel: 1,
121+
systemMsg: null,
122+
identity: 1,
123+
metadata: null,
124+
updatedAt: '2025-11-20T19:16:27.180Z',
125+
createdAt: '2025-11-20T19:15:06.620Z',
126+
},
127+
{
128+
id: 2,
129+
name: 'Technical Support Bot',
130+
model: null,
131+
capabilities: [],
132+
knowledge: null,
133+
coreKnowledge: null,
134+
description: null,
135+
jobDescription: null,
136+
workInstructions: null,
137+
capabilityLevel: 2,
138+
systemMsg: null,
139+
identity: 2,
140+
metadata: null,
141+
updatedAt: '2025-11-20T19:16:27.180Z',
142+
createdAt: '2025-11-20T19:15:06.620Z',
143+
},
144+
// Users
145+
{
146+
id: '99ccf092-f9a0-4325-9343-58ebe4d5eb04',
147+
email: 'rob.ellison@example.com',
148+
emailVerified: null,
149+
name: 'Rob Ellison',
150+
image: null,
151+
role: 'user',
152+
enabled: true,
153+
accounts: [],
154+
sessions: [],
155+
updatedAt: '2026-02-16T23:47:00.735Z',
156+
createdAt: '2025-12-15T16:52:22.363Z',
157+
enableAPIKey: null,
158+
apiKey: null,
159+
collection: 'users',
160+
},
161+
{
162+
id: 'a1b2c3d4-e5f6-4g5h-6i7j-8k9l0m1n2o3p',
163+
email: 'sarah.johnson@example.com',
164+
emailVerified: null,
165+
name: 'Sarah Johnson',
166+
image: null,
167+
role: 'user',
168+
enabled: true,
169+
accounts: [],
170+
sessions: [],
171+
updatedAt: '2026-02-16T23:47:00.735Z',
172+
createdAt: '2025-12-15T16:52:22.363Z',
173+
enableAPIKey: null,
174+
apiKey: null,
175+
collection: 'users',
176+
},
177+
];
178+
107179
export const Default: Story = {
108180
args: {
109181
isOpen: true,
@@ -122,7 +194,7 @@ export const Default: Story = {
122194
},
123195
epics: mockEpics,
124196
sprints: mockSprints,
125-
colleagues: [],
197+
colleagues: mockTeamMembers,
126198
onClose: () => {},
127199
onUpdateTask: mockUpdateTask,
128200
onDeleteTask: mockDeleteTask,
@@ -147,7 +219,7 @@ export const WithLoadingStates: Story = {
147219
},
148220
epics: mockEpics,
149221
sprints: mockSprints,
150-
colleagues: [],
222+
colleagues: mockTeamMembers,
151223
onClose: () => {},
152224
onUpdateTask: mockUpdateTask,
153225
onDeleteTask: mockDeleteTask,
@@ -172,7 +244,7 @@ export const WithErrorStates: Story = {
172244
},
173245
epics: mockEpics,
174246
sprints: mockSprints,
175-
colleagues: [],
247+
colleagues: mockTeamMembers,
176248
onClose: () => {},
177249
onUpdateTask: mockUpdateTaskFail,
178250
onDeleteTask: mockDeleteTaskFail,
@@ -197,7 +269,7 @@ export const BugTask: Story = {
197269
},
198270
epics: mockEpics,
199271
sprints: mockSprints,
200-
colleagues: [],
272+
colleagues: mockTeamMembers,
201273
onClose: () => {},
202274
onUpdateTask: mockUpdateTask,
203275
onDeleteTask: mockDeleteTask,
@@ -222,7 +294,7 @@ export const CompletedTask: Story = {
222294
},
223295
epics: mockEpics,
224296
sprints: mockSprints,
225-
colleagues: [],
297+
colleagues: mockTeamMembers,
226298
onClose: () => {},
227299
onUpdateTask: mockUpdateTask,
228300
onDeleteTask: mockDeleteTask,
@@ -247,7 +319,7 @@ export const SpikeTask: Story = {
247319
},
248320
epics: mockEpics,
249321
sprints: mockSprints,
250-
colleagues: [],
322+
colleagues: mockTeamMembers,
251323
onClose: () => {},
252324
onUpdateTask: mockUpdateTask,
253325
onDeleteTask: mockDeleteTask,
@@ -272,7 +344,7 @@ export const NoSprint: Story = {
272344
},
273345
epics: mockEpics,
274346
sprints: mockSprints,
275-
colleagues: [],
347+
colleagues: mockTeamMembers,
276348
onClose: () => {},
277349
onUpdateTask: mockUpdateTask,
278350
onDeleteTask: mockDeleteTask,
@@ -297,7 +369,7 @@ export const LongDescription: Story = {
297369
},
298370
epics: mockEpics,
299371
sprints: mockSprints,
300-
colleagues: [],
372+
colleagues: mockTeamMembers,
301373
onClose: () => {},
302374
onUpdateTask: mockUpdateTask,
303375
onDeleteTask: mockDeleteTask,
@@ -335,7 +407,7 @@ This refactoring is critical for improving our security posture, meeting complia
335407
},
336408
epics: mockEpics,
337409
sprints: mockSprints,
338-
colleagues: [],
410+
colleagues: mockTeamMembers,
339411
onClose: () => {},
340412
onUpdateTask: mockUpdateTask,
341413
onDeleteTask: mockDeleteTask,
@@ -377,7 +449,7 @@ Integrate with current user preference system.`,
377449
},
378450
epics: mockEpics,
379451
sprints: mockSprints,
380-
colleagues: [],
452+
colleagues: mockTeamMembers,
381453
onClose: () => {},
382454
onUpdateTask: mockUpdateTask,
383455
onDeleteTask: mockDeleteTask,

0 commit comments

Comments
 (0)