Signed-off-by: Max <ai-agent@topdoglabs.com>

This commit is contained in:
Max 2026-02-22 11:06:33 -06:00
parent 1475a13b4d
commit 47724e3fb7
3 changed files with 36 additions and 8 deletions

View File

@ -23,6 +23,7 @@ import { Badge } from "@/components/ui/badge"
import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter } from "@/components/ui/dialog" import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter } from "@/components/ui/dialog"
import { Textarea } from "@/components/ui/textarea" import { Textarea } from "@/components/ui/textarea"
import { Label } from "@/components/ui/label" import { Label } from "@/components/ui/label"
import { parseSprintEnd, parseSprintStart } from "@/lib/utils"
import { generateAvatarDataUrl } from "@/lib/avatar" import { generateAvatarDataUrl } from "@/lib/avatar"
import { import {
blobFromDataUrl, blobFromDataUrl,
@ -588,9 +589,9 @@ export default function Home() {
const now = new Date() const now = new Date()
const currentSprint = sprints.find((s) => { const currentSprint = sprints.find((s) => {
if (s.status !== 'active') return false if (s.status !== 'active') return false
const sprintEnd = new Date(s.endDate) const sprintStart = parseSprintStart(s.startDate)
sprintEnd.setHours(23, 59, 59, 999) const sprintEnd = parseSprintEnd(s.endDate)
return new Date(s.startDate) <= now && sprintEnd >= now return sprintStart <= now && sprintEnd >= now
}) })
// Filter tasks to only show current sprint tasks in Kanban (from ALL projects) // Filter tasks to only show current sprint tasks in Kanban (from ALL projects)
@ -618,8 +619,7 @@ export default function Home() {
const now = new Date() const now = new Date()
const endedSprints = sprints.filter((s) => { const endedSprints = sprints.filter((s) => {
if (s.status !== 'active') return false if (s.status !== 'active') return false
const sprintEnd = new Date(s.endDate) const sprintEnd = parseSprintEnd(s.endDate)
sprintEnd.setHours(23, 59, 59, 999)
return sprintEnd < now return sprintEnd < now
}) })

View File

@ -25,6 +25,7 @@ import { Badge } from "@/components/ui/badge"
import { Button } from "@/components/ui/button" import { Button } from "@/components/ui/button"
import { Plus, GripVertical, ChevronDown, ChevronRight, Calendar } from "lucide-react" import { Plus, GripVertical, ChevronDown, ChevronRight, Calendar } from "lucide-react"
import { format, isValid, parseISO } from "date-fns" import { format, isValid, parseISO } from "date-fns"
import { parseSprintEnd, parseSprintStart } from "@/lib/utils"
import { generateAvatarDataUrl } from "@/lib/avatar" import { generateAvatarDataUrl } from "@/lib/avatar"
const priorityColors: Record<string, string> = { const priorityColors: Record<string, string> = {
@ -310,9 +311,9 @@ export function BacklogView({ searchQuery = "" }: BacklogViewProps) {
const now = new Date() const now = new Date()
const currentSprint = sprints.find((s) => { const currentSprint = sprints.find((s) => {
if (s.status !== "active") return false if (s.status !== "active") return false
const sprintEnd = new Date(s.endDate) const sprintStart = parseSprintStart(s.startDate)
sprintEnd.setHours(23, 59, 59, 999) const sprintEnd = parseSprintEnd(s.endDate)
return new Date(s.startDate) <= now && sprintEnd >= now return sprintStart <= now && sprintEnd >= now
}) })
// Get other sprints (not current) // Get other sprints (not current)

View File

@ -4,3 +4,30 @@ import { twMerge } from "tailwind-merge"
export function cn(...inputs: ClassValue[]) { export function cn(...inputs: ClassValue[]) {
return twMerge(clsx(inputs)) return twMerge(clsx(inputs))
} }
const DATE_ONLY_PATTERN = /^\d{4}-\d{2}-\d{2}$/
function parseDateParts(value: string): [number, number, number] {
const [year, month, day] = value.split("-").map(Number)
return [year, month, day]
}
export function parseSprintStart(startDate: string): Date {
if (DATE_ONLY_PATTERN.test(startDate)) {
const [year, month, day] = parseDateParts(startDate)
return new Date(year, month - 1, day, 0, 0, 0, 0)
}
return new Date(startDate)
}
export function parseSprintEnd(endDate: string): Date {
if (DATE_ONLY_PATTERN.test(endDate)) {
const [year, month, day] = parseDateParts(endDate)
return new Date(year, month - 1, day, 23, 59, 59, 999)
}
const parsed = new Date(endDate)
parsed.setHours(23, 59, 59, 999)
return parsed
}