import { PROPOSAL_UI_CONFIG, filterSprintProposals, listProposalKeys, proposalReasonLabel, } from '../utils/steeringProposals.js' import { backlogKindLabel, resolveBacklogVocabulary } from '../utils/resolveBacklogVocabulary.js' import { PriorityBadge } from './PriorityBadge.jsx' export function SteeringProposalsPanel({ proposalsByKey = {}, proposalKeys = null, backlogVocabulary = null, canManage = false, onAcceptBacklogProposal, busy = false, filterContext = {}, }) { const vocabulary = resolveBacklogVocabulary(backlogVocabulary) const keys = proposalKeys || listProposalKeys(proposalsByKey) if (!keys.length) { return null } return ( <> {keys.map((proposalKey) => { const config = PROPOSAL_UI_CONFIG[proposalKey] || { title: proposalKey, lead: 'Steuerungsvorschlag', acceptLabel: 'Übernehmen', scopeTypes: ['backlog_item'], } let items = proposalsByKey[proposalKey] || [] if (proposalKey === 'sprint_commit' && filterContext.workCycleId) { items = filterSprintProposals(items, filterContext.workCycleId) } if (!items.length) return null const ranker = items[0]?.ranker_key || 'heuristic_v0' return (

{config.title}

{config.lead} Ranker: {ranker}.

    {items.map((proposal) => (
  1. {proposal.rank}. {proposal.title}

    {proposalReasonLabel(proposal)}

    {proposal.dependency_blocked && (

    Abhängigkeit offen

    )} {proposal.scope_type === 'roadmap_item' && (

    Gate ohne Plan — Arbeitspaket anlegen oder Eingang committen

    )}
    {proposal.item_kind && ( {backlogKindLabel(vocabulary, proposal.item_kind)} )} {proposal.priority && } {canManage && proposal.scope_type === 'backlog_item' && config.scopeTypes.includes('backlog_item') && ( )}
  2. ))}
) })} ) }