Skip to content

Commit 2e1531d

Browse files
Disable Default Teams delete option
1 parent 006cb65 commit 2e1531d

File tree

2 files changed

+61
-18
lines changed

2 files changed

+61
-18
lines changed

src/frontend/src/components/common/TeamSelector.tsx

Lines changed: 45 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ import {
1818
Radio,
1919
RadioGroup,
2020
Tab,
21-
TabList
21+
TabList,
22+
Tooltip
2223
} from '@fluentui/react-components';
2324
import {
2425
ChevronUpDown16Regular,
@@ -61,7 +62,14 @@ const TeamSelector: React.FC<TeamSelectorProps> = ({
6162
const [selectionLoading, setSelectionLoading] = useState(false);
6263
const [uploadedTeam, setUploadedTeam] = useState<TeamConfig | null>(null);
6364
const [uploadSuccessMessage, setUploadSuccessMessage] = useState<string | null>(null);
64-
65+
// Helper function to check if a team is a default team
66+
const isDefaultTeam = (team: TeamConfig): boolean => {
67+
const defaultTeamIds = ['team-1', 'team-2', 'team-3'];
68+
const defaultTeamNames = ['Human Resources Team', 'Product Marketing Team', 'Retail Customer Success Team'];
69+
70+
return defaultTeamIds.includes(team.team_id) ||
71+
defaultTeamNames.includes(team.name);
72+
};
6573
const loadTeams = async () => {
6674
setLoading(true);
6775
setError(null);
@@ -113,7 +121,7 @@ const TeamSelector: React.FC<TeamSelectorProps> = ({
113121

114122
// For existing teams, do the normal selection process
115123
const result = await TeamService.selectTeam(tempSelectedTeam.team_id);
116-
124+
117125
if (result.success) {
118126
console.log('Team selected:', result.data);
119127
onTeamSelect?.(tempSelectedTeam);
@@ -171,7 +179,7 @@ const TeamSelector: React.FC<TeamSelectorProps> = ({
171179

172180
try {
173181
const success = await TeamService.deleteTeam(teamToDelete.team_id);
174-
182+
175183
if (success) {
176184
setDeleteConfirmOpen(false);
177185
setTeamToDelete(null);
@@ -193,7 +201,7 @@ const TeamSelector: React.FC<TeamSelectorProps> = ({
193201
}
194202
} catch (err: any) {
195203
let errorMessage = 'Failed to delete team configuration. Please try again.';
196-
204+
197205
if (err.response?.status === 404) {
198206
errorMessage = 'Team not found. It may have already been deleted.';
199207
} else if (err.response?.status === 403) {
@@ -261,11 +269,11 @@ const TeamSelector: React.FC<TeamSelectorProps> = ({
261269
if (result.team) {
262270
// Set success message with team name
263271
setUploadSuccessMessage(`${result.team.name} was uploaded`);
264-
272+
265273
setTeams(currentTeams => [result.team!, ...currentTeams]);
266274
setUploadedTeam(result.team);
267275
setTempSelectedTeam(result.team);
268-
276+
269277
setTimeout(() => {
270278
setUploadSuccessMessage(null);
271279
}, 15000);
@@ -313,7 +321,7 @@ const TeamSelector: React.FC<TeamSelectorProps> = ({
313321
event.stopPropagation();
314322

315323
event.currentTarget.classList.remove(styles.dropZoneHover);
316-
324+
317325
const files = event.dataTransfer.files;
318326
if (files.length === 0) return;
319327

@@ -362,11 +370,11 @@ const TeamSelector: React.FC<TeamSelectorProps> = ({
362370
if (result.team) {
363371
// Set success message with team name
364372
setUploadSuccessMessage(`${result.team.name} was uploaded and selected`);
365-
373+
366374
setTeams(currentTeams => [result.team!, ...currentTeams]);
367375
setUploadedTeam(result.team);
368376
setTempSelectedTeam(result.team);
369-
377+
370378
// Clear success message after 15 seconds if user doesn't act
371379
setTimeout(() => {
372380
setUploadSuccessMessage(null);
@@ -399,7 +407,7 @@ const TeamSelector: React.FC<TeamSelectorProps> = ({
399407

400408
const renderTeamCard = (team: TeamConfig, index?: number) => {
401409
const isSelected = tempSelectedTeam?.team_id === team.team_id;
402-
410+
const isDefault = isDefaultTeam(team);
403411
return (
404412
<div
405413
key={team.team_id || `team-${index}`}
@@ -452,13 +460,32 @@ const TeamSelector: React.FC<TeamSelectorProps> = ({
452460
</div>
453461

454462
{/* Three-dot Menu Button */}
455-
<Button
456-
icon={<MoreHorizontal20Regular />}
457-
appearance="subtle"
458-
size="small"
459-
onClick={(e) => handleDeleteTeam(team, e)}
460-
className={styles.moreButton}
461-
/>
463+
{isDefault ? (
464+
<Tooltip
465+
content="Default teams cannot be deleted."
466+
relationship="label"
467+
positioning="above-start"
468+
withArrow
469+
mountNode={document.querySelector('[role="dialog"]') || undefined}
470+
>
471+
<Button
472+
icon={<MoreHorizontal20Regular />}
473+
appearance="subtle"
474+
size="small"
475+
disabled={true}
476+
className={`${styles.moreButton} ${styles.moreButtonDisabled || ''}`}
477+
onClick={(e) => e.stopPropagation()}
478+
/>
479+
</Tooltip>
480+
) : (
481+
<Button
482+
icon={<MoreHorizontal20Regular />}
483+
appearance="subtle"
484+
size="small"
485+
onClick={(e) => handleDeleteTeam(team, e)}
486+
className={styles.moreButton}
487+
/>
488+
)}
462489
</div>
463490
);
464491
};

src/frontend/src/styles/TeamSelector.module.css

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -407,7 +407,23 @@
407407
background-color: var(--colorNeutralBackground3) !important;
408408
color: var(--colorNeutralForeground1) !important;
409409
}
410+
.moreButtonDisabled {
411+
color: var(--colorNeutralForeground4) !important;
412+
background-color: transparent !important;
413+
cursor: not-allowed !important;
414+
opacity: 0.6 !important;
415+
}
416+
417+
.moreButtonDisabled:hover {
418+
background-color: transparent !important;
419+
color: var(--colorNeutralForeground4) !important;
420+
opacity: 0.6 !important;
421+
}
410422

423+
/* Ensure tooltips appear above other dialog content */
424+
:global(.fui-Tooltip) {
425+
z-index: 9999 !important;
426+
}
411427
/* Team Selector Button */
412428
.teamSelectorButton {
413429
width: 100%;

0 commit comments

Comments
 (0)