import { Link, useSearchParams } from "react-router";
import type { Project } from "../../../api/types.ts";
import { PageHeader, Panel } from "../../../ui/index.ts";
import type { AgileSprint } from "../api/types.ts";
import { RefreshButton } from "../RefreshButton.tsx";
import { AgileGate } from "./AgileGate.tsx";
import { BoardColumns } from "./BoardColumns.tsx";
import { AgileToolbar } from "./AgileToolbar.tsx";
import { ColumnsMenu } from "./ColumnsMenu.tsx";
import { columnsOf } from "./columns.ts";
import { assigneeOptions, matches, parseSprintIds, selectableSprints, sprintIssues } from "./filters.ts";
import { SprintPicker } from "./SprintPicker.tsx";
import { useAgileView } from "./useAgileView.ts";
import { daysLeft, fmtRange, fmtSp, tasksWord } from "./model.ts";
import "./agile.css";
function SprintHead({ s }: { s: AgileSprint }) {
const left = s.state === "active" ? daysLeft(s.end_date, new Date()) : null;
return (
{s.name}
{fmtRange(s.start_date, s.end_date)}
{left !== null && {left >= 0 ? `осталось ${left} дн.` : "срок прошёл"}}
{s.goal && {s.goal}}
{`${s.count_done} из ${s.count} ${tasksWord(s.count)}`}
{`${fmtSp(s.points_done)} из ${fmtSp(s.points)} SP`}
Нет активного спринта
Бэклог