+ {effectiveLinearDisplayProperties.has('priority') ? (
+
+ ) : null}
{issue.identifier}
@@ -8573,11 +8536,6 @@ export default function TaskPage(): React.JSX.Element {
{effectiveLinearDisplayProperties.has('state') ? (
) : null}
- {effectiveLinearDisplayProperties.has('priority') ? (
-
- {getLinearPriorityLabel(issue.priority)}
-
- ) : null}
{effectiveLinearDisplayProperties.has('assignee') ? (
{issue.assignee?.displayName ?? 'Unassigned'}
@@ -8589,59 +8547,61 @@ export default function TaskPage(): React.JSX.Element {
) : null}
- {effectiveLinearDisplayProperties.has('labels') ? (
-
- {labels.map((label) => (
-
- {label}
-
- ))}
- {issue.labels.length > labels.length ? (
-
- +{issue.labels.length - labels.length}
-
- ) : null}
-
- ) : null}
+ {effectiveLinearDisplayProperties.has('labels') ? (
+
+ {labels.map((label) => (
+
+ {label}
+
+ ))}
+ {issue.labels.length > labels.length ? (
+
+ +{issue.labels.length - labels.length}
+
+ ) : null}
+
+ ) : null}
+
+ {effectiveLinearDisplayProperties.has('team') ? (
+
-
{teamLabel}
+
+
+
+
+ {issue.assignee?.avatarUrl ? (
+

+ ) : (
+ (issue.assignee?.displayName?.slice(0, 1) ?? '-')
+ )}
+
+
+
+ {issue.assignee?.displayName ?? 'Unassigned'}
+
+
) : null}
@@ -9191,19 +9151,7 @@ export default function TaskPage(): React.JSX.Element {
disabled={newLinearIssueSubmitting}
className="flex items-center gap-1.5 px-2 py-1 rounded-md text-xs border border-border/80 bg-muted/15 hover:bg-muted/50 active:bg-muted transition-colors text-foreground/80 cursor-pointer disabled:opacity-50"
>
-
+
{newLinearIssuePriority === 1
? 'Urgent'
@@ -9240,19 +9188,7 @@ export default function TaskPage(): React.JSX.Element {
}`}
>
{newLinearIssuePriority === p.val && (
diff --git a/src/renderer/src/components/linear-priority-icon.tsx b/src/renderer/src/components/linear-priority-icon.tsx
new file mode 100644
index 00000000000..0741343cc15
--- /dev/null
+++ b/src/renderer/src/components/linear-priority-icon.tsx
@@ -0,0 +1,92 @@
+import React from 'react'
+
+import { cn } from '@/lib/utils'
+
+// Why: mirror Linear's priority glyph shape while keeping color on Orca tokens.
+const LINEAR_PRIORITY_ICON_LABELS: Record = {
+ 0: 'No priority',
+ 1: 'Urgent',
+ 2: 'High',
+ 3: 'Medium',
+ 4: 'Low'
+}
+
+function getLinearPriorityBarCount(priority: number): number {
+ if (priority === 2) {
+ return 3
+ }
+ if (priority === 3) {
+ return 2
+ }
+ if (priority === 4) {
+ return 1
+ }
+ return 0
+}
+
+export function getLinearPriorityIconLabel(priority: number): string {
+ return LINEAR_PRIORITY_ICON_LABELS[priority] ?? `P${priority}`
+}
+
+export function LinearPriorityIcon({
+ priority,
+ className,
+ label = getLinearPriorityIconLabel(priority)
+}: {
+ priority: number
+ className?: string
+ label?: string
+}): React.JSX.Element {
+ if (priority === 1) {
+ return (
+
+ !
+ Priority: {label}
+
+ )
+ }
+
+ if (priority === 0) {
+ return (
+
+
+ Priority: {label}
+
+ )
+ }
+
+ const activeBars = getLinearPriorityBarCount(priority)
+ return (
+
+ {[1, 2, 3].map((bar) => (
+
+ ))}
+ Priority: {label}
+
+ )
+}
diff --git a/src/renderer/src/store/slices/ui.ts b/src/renderer/src/store/slices/ui.ts
index b92914c1af5..0c8595f56c1 100644
--- a/src/renderer/src/store/slices/ui.ts
+++ b/src/renderer/src/store/slices/ui.ts
@@ -1076,9 +1076,11 @@ export const createUISlice: StateCreator = (set, get)
if (query) {
state.prefetchLinearIssues({ kind: 'search', query, limit: LINEAR_TASK_PREFETCH_LIMIT })
} else {
+ // Why: TaskPage no longer exposes Linear preset filters; keep warm
+ // prefetch aligned with the default unsearched issue list.
state.prefetchLinearIssues({
kind: 'list',
- filter: resume?.linearPreset ?? 'all',
+ filter: 'all',
limit: LINEAR_TASK_PREFETCH_LIMIT
})
}