+ Objectives
+
+ setFilter('all')}>
+ All ({inScope.length})
+
+ setFilter('p0')}>
+ P0 only
+
+ setFilter('partial')}>
+ Partial only
+
+ setFilter('missing')}>
+ Missing / stub
+
+
+
+ {(['p0', 'p1', 'p2'] as ObjectivePriority[]).map((p) => {
+ const rows = groupedByPriority[p]
+ if (rows.length === 0) return null
+ return (
+
+
+ {PRIORITY_LABEL[p]} ({rows.length})
+
+
+
+
+ | ID |
+ Status |
+ Title |
+ Owner |
+
+
+
+ {rows.map((o) => (
+ setActiveObjective(o)}
+ >
+ {o.id.toUpperCase()}
+
+
+ {STATUS_ICON[o.status]}
+ {STATUS_LABEL[o.status]}
+
+ |
+ {o.title}
+ {o.owner ?? '—'}
+
+ ))}
+
+
+
+ )
+ })}
+
+ {deferred.length > 0 && (
+
+
+ Deferred to Game 2 — Age of Kzzykt ({deferred.length})
+
+
+ These objectives are explicitly future-scope. They are not part of
+ the Age of Dwarves Early Access release.
+
+
+
+
+ | ID |
+ Priority |
+ Title |
+
+
+
+ {deferred.map((o) => (
+ setActiveObjective(o)}
+ >
+ {o.id.toUpperCase()}
+
+
+ {o.priority.toUpperCase()}
+
+ |
+ {o.title}
+
+ ))}
+
+
+
+ )}
+
+
+