Skip to content

Commit 8fafb23

Browse files
committed
fix: non-admin inline edit buttons now non-interactive (v2.18.1)
1 parent e126f5c commit 8fafb23

File tree

3 files changed

+65
-34
lines changed

3 files changed

+65
-34
lines changed

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,13 @@
22

33
All notable changes to BluePLM will be documented in this file.
44

5+
## [2.18.1] - 2025-12-31
6+
7+
### Fixed
8+
- **Non-admin inline edit buttons**: Team and workflow role badges are now non-interactive for non-admins (previously appeared clickable but saves would silently fail)
9+
10+
---
11+
512
## [2.18.0] - 2025-12-31
613

714
### Added

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "blue-plm",
3-
"version": "2.18.0",
3+
"version": "2.18.1",
44
"description": "Product Lifecycle Management for everyone who builds",
55
"main": "dist-electron/main.js",
66
"scripts": {

src/components/settings/TeamMembersSettings.tsx

Lines changed: 57 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -4107,17 +4107,25 @@ function UserRow({
41074107
<div className="flex items-center gap-1.5">
41084108
{/* Teams badge */}
41094109
{teams && teams.length > 0 && (user.teams || []).length > 0 ? (
4110-
<button
4111-
onClick={() => onEditTeams?.(user)}
4112-
className={`flex items-center gap-1 px-2 py-1 rounded text-xs whitespace-nowrap transition-colors bg-plm-accent/10 text-plm-accent ${
4113-
canManage ? 'hover:ring-1 hover:ring-plm-accent cursor-pointer' : 'cursor-default'
4114-
}`}
4115-
title={(user.teams || []).map(t => t.name).join(', ')}
4116-
>
4117-
<Users size={12} />
4118-
<span>{(user.teams || []).length} team{(user.teams || []).length !== 1 ? 's' : ''}</span>
4119-
{canManage && <ChevronDown size={12} />}
4120-
</button>
4110+
canManage && onEditTeams ? (
4111+
<button
4112+
onClick={() => onEditTeams(user)}
4113+
className="flex items-center gap-1 px-2 py-1 rounded text-xs whitespace-nowrap transition-colors bg-plm-accent/10 text-plm-accent hover:ring-1 hover:ring-plm-accent cursor-pointer"
4114+
title={(user.teams || []).map(t => t.name).join(', ')}
4115+
>
4116+
<Users size={12} />
4117+
<span>{(user.teams || []).length} team{(user.teams || []).length !== 1 ? 's' : ''}</span>
4118+
<ChevronDown size={12} />
4119+
</button>
4120+
) : (
4121+
<span
4122+
className="flex items-center gap-1 px-2 py-1 rounded text-xs whitespace-nowrap bg-plm-accent/10 text-plm-accent"
4123+
title={(user.teams || []).map(t => t.name).join(', ')}
4124+
>
4125+
<Users size={12} />
4126+
<span>{(user.teams || []).length} team{(user.teams || []).length !== 1 ? 's' : ''}</span>
4127+
</span>
4128+
)
41214129
) : teams && teams.length > 0 && canManage && onEditTeams ? (
41224130
<button
41234131
onClick={() => onEditTeams(user)}
@@ -4139,17 +4147,25 @@ function UserRow({
41394147
{workflowRoles && workflowRoles.length > 0 && (
41404148
<>
41414149
{userWorkflowRoleIds && userWorkflowRoleIds.length > 0 ? (
4142-
<button
4143-
onClick={() => onEditWorkflowRoles?.(user)}
4144-
className={`flex items-center gap-1 px-2 py-1 rounded text-xs whitespace-nowrap transition-colors bg-purple-500/10 text-purple-400 ${
4145-
canManage ? 'hover:ring-1 hover:ring-purple-400 cursor-pointer' : 'cursor-default'
4146-
}`}
4147-
title={userWorkflowRoleIds.map(id => workflowRoles.find(r => r.id === id)?.name).filter(Boolean).join(', ')}
4148-
>
4149-
<Shield size={12} />
4150-
<span>{userWorkflowRoleIds.length} role{userWorkflowRoleIds.length !== 1 ? 's' : ''}</span>
4151-
{canManage && <ChevronDown size={12} />}
4152-
</button>
4150+
canManage && onEditWorkflowRoles ? (
4151+
<button
4152+
onClick={() => onEditWorkflowRoles(user)}
4153+
className="flex items-center gap-1 px-2 py-1 rounded text-xs whitespace-nowrap transition-colors bg-purple-500/10 text-purple-400 hover:ring-1 hover:ring-purple-400 cursor-pointer"
4154+
title={userWorkflowRoleIds.map(id => workflowRoles.find(r => r.id === id)?.name).filter(Boolean).join(', ')}
4155+
>
4156+
<Shield size={12} />
4157+
<span>{userWorkflowRoleIds.length} role{userWorkflowRoleIds.length !== 1 ? 's' : ''}</span>
4158+
<ChevronDown size={12} />
4159+
</button>
4160+
) : (
4161+
<span
4162+
className="flex items-center gap-1 px-2 py-1 rounded text-xs whitespace-nowrap bg-purple-500/10 text-purple-400"
4163+
title={userWorkflowRoleIds.map(id => workflowRoles.find(r => r.id === id)?.name).filter(Boolean).join(', ')}
4164+
>
4165+
<Shield size={12} />
4166+
<span>{userWorkflowRoleIds.length} role{userWorkflowRoleIds.length !== 1 ? 's' : ''}</span>
4167+
</span>
4168+
)
41534169
) : canManage && onEditWorkflowRoles ? (
41544170
<button
41554171
onClick={() => onEditWorkflowRoles(user)}
@@ -4170,17 +4186,25 @@ function UserRow({
41704186
{compact && workflowRoles && workflowRoles.length > 0 && (
41714187
<div className="flex items-center">
41724188
{userWorkflowRoleIds && userWorkflowRoleIds.length > 0 ? (
4173-
<button
4174-
onClick={() => onEditWorkflowRoles?.(user)}
4175-
className={`flex items-center gap-1 px-2 py-1 rounded text-xs whitespace-nowrap transition-colors bg-purple-500/10 text-purple-400 ${
4176-
canManage ? 'hover:ring-1 hover:ring-purple-400 cursor-pointer' : 'cursor-default'
4177-
}`}
4178-
title={userWorkflowRoleIds.map(id => workflowRoles.find(r => r.id === id)?.name).filter(Boolean).join(', ')}
4179-
>
4180-
<Shield size={12} />
4181-
<span>{userWorkflowRoleIds.length} role{userWorkflowRoleIds.length !== 1 ? 's' : ''}</span>
4182-
{canManage && <ChevronDown size={12} />}
4183-
</button>
4189+
canManage && onEditWorkflowRoles ? (
4190+
<button
4191+
onClick={() => onEditWorkflowRoles(user)}
4192+
className="flex items-center gap-1 px-2 py-1 rounded text-xs whitespace-nowrap transition-colors bg-purple-500/10 text-purple-400 hover:ring-1 hover:ring-purple-400 cursor-pointer"
4193+
title={userWorkflowRoleIds.map(id => workflowRoles.find(r => r.id === id)?.name).filter(Boolean).join(', ')}
4194+
>
4195+
<Shield size={12} />
4196+
<span>{userWorkflowRoleIds.length} role{userWorkflowRoleIds.length !== 1 ? 's' : ''}</span>
4197+
<ChevronDown size={12} />
4198+
</button>
4199+
) : (
4200+
<span
4201+
className="flex items-center gap-1 px-2 py-1 rounded text-xs whitespace-nowrap bg-purple-500/10 text-purple-400"
4202+
title={userWorkflowRoleIds.map(id => workflowRoles.find(r => r.id === id)?.name).filter(Boolean).join(', ')}
4203+
>
4204+
<Shield size={12} />
4205+
<span>{userWorkflowRoleIds.length} role{userWorkflowRoleIds.length !== 1 ? 's' : ''}</span>
4206+
</span>
4207+
)
41844208
) : canManage && onEditWorkflowRoles ? (
41854209
<button
41864210
onClick={() => onEditWorkflowRoles(user)}

0 commit comments

Comments
 (0)