Skip to content

Commit 23c0504

Browse files
fix: FIT-1097: Viewing Data Manager under Annotators account show disabled state of 'Task State' column; I can't use neither Columns nor Filters (#8955)
Co-authored-by: bmartel <[email protected]>
1 parent 21ac7fc commit 23c0504

File tree

2 files changed

+34
-12
lines changed

2 files changed

+34
-12
lines changed

label_studio/fsm/serializers.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,20 @@ class StateModelSerializer(serializers.Serializer):
2323
created_at = serializers.DateTimeField(read_only=True)
2424
context_data = serializers.JSONField(read_only=True)
2525

26+
def to_representation(self, instance):
27+
"""
28+
Override to exclude triggered_by field for annotators.
29+
"""
30+
data = super().to_representation(instance)
31+
32+
request = self.context.get('request')
33+
if request and hasattr(request, 'user'):
34+
user = request.user
35+
if getattr(user, 'is_annotator', False):
36+
data.pop('triggered_by', None)
37+
38+
return data
39+
2640

2741
class FSMTransitionExecuteRequestSerializer(serializers.Serializer):
2842
"""

web/libs/app-common/src/components/state-chips/state-history-popover-content.tsx

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -98,19 +98,27 @@ export function StateHistoryPopoverContent({ entityType, entityId, isOpen, onClo
9898

9999
{!isLoading && !isError && history.length > 0 && (
100100
<div className="space-y-3">
101-
{history.map((item: StateHistoryItem, index: number) => (
102-
<div key={index} className="pb-3 border-b border-neutral-border last:border-0 last:pb-0">
103-
<div className="flex items-center justify-between mb-2">
104-
<Badge className={getStateColorClass(item.state)}>{formatStateName(item.state)}</Badge>
105-
<Typography variant="body" size="smallest" className="text-neutral-content-subtle">
106-
{formatTimestamp(item.created_at)}
107-
</Typography>
101+
{history.map((item: StateHistoryItem, index: number) => {
102+
const reasonText = item.triggered_by ? formatUserName(item.triggered_by) : item.context_data?.reason;
103+
return (
104+
<div
105+
key={index}
106+
className="flex flex-col gap-2 pb-3 border-b border-neutral-border last:border-0 last:pb-0"
107+
>
108+
<div className="flex items-center justify-between">
109+
<Badge className={getStateColorClass(item.state)}>{formatStateName(item.state)}</Badge>
110+
<Typography variant="body" size="smallest" className="text-neutral-content-subtle">
111+
{formatTimestamp(item.created_at)}
112+
</Typography>
113+
</div>
114+
{reasonText && (
115+
<Typography variant="body" size="smallest" className="text-muted-foreground">
116+
{reasonText}
117+
</Typography>
118+
)}
108119
</div>
109-
<Typography variant="body" size="smallest" className="text-muted-foreground">
110-
{item.triggered_by ? `By: ${formatUserName(item.triggered_by)}` : item.context_data?.reason}
111-
</Typography>
112-
</div>
113-
))}
120+
);
121+
})}
114122
</div>
115123
)}
116124
</div>

0 commit comments

Comments
 (0)