Signed-off-by: Max <ai-agent@topdoglabs.com>
This commit is contained in:
parent
1475a13b4d
commit
47724e3fb7
@ -23,6 +23,7 @@ import { Badge } from "@/components/ui/badge"
|
||||
import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter } from "@/components/ui/dialog"
|
||||
import { Textarea } from "@/components/ui/textarea"
|
||||
import { Label } from "@/components/ui/label"
|
||||
import { parseSprintEnd, parseSprintStart } from "@/lib/utils"
|
||||
import { generateAvatarDataUrl } from "@/lib/avatar"
|
||||
import {
|
||||
blobFromDataUrl,
|
||||
@ -588,9 +589,9 @@ export default function Home() {
|
||||
const now = new Date()
|
||||
const currentSprint = sprints.find((s) => {
|
||||
if (s.status !== 'active') return false
|
||||
const sprintEnd = new Date(s.endDate)
|
||||
sprintEnd.setHours(23, 59, 59, 999)
|
||||
return new Date(s.startDate) <= now && sprintEnd >= now
|
||||
const sprintStart = parseSprintStart(s.startDate)
|
||||
const sprintEnd = parseSprintEnd(s.endDate)
|
||||
return sprintStart <= now && sprintEnd >= now
|
||||
})
|
||||
|
||||
// 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 endedSprints = sprints.filter((s) => {
|
||||
if (s.status !== 'active') return false
|
||||
const sprintEnd = new Date(s.endDate)
|
||||
sprintEnd.setHours(23, 59, 59, 999)
|
||||
const sprintEnd = parseSprintEnd(s.endDate)
|
||||
return sprintEnd < now
|
||||
})
|
||||
|
||||
|
||||
@ -25,6 +25,7 @@ import { Badge } from "@/components/ui/badge"
|
||||
import { Button } from "@/components/ui/button"
|
||||
import { Plus, GripVertical, ChevronDown, ChevronRight, Calendar } from "lucide-react"
|
||||
import { format, isValid, parseISO } from "date-fns"
|
||||
import { parseSprintEnd, parseSprintStart } from "@/lib/utils"
|
||||
import { generateAvatarDataUrl } from "@/lib/avatar"
|
||||
|
||||
const priorityColors: Record<string, string> = {
|
||||
@ -310,9 +311,9 @@ export function BacklogView({ searchQuery = "" }: BacklogViewProps) {
|
||||
const now = new Date()
|
||||
const currentSprint = sprints.find((s) => {
|
||||
if (s.status !== "active") return false
|
||||
const sprintEnd = new Date(s.endDate)
|
||||
sprintEnd.setHours(23, 59, 59, 999)
|
||||
return new Date(s.startDate) <= now && sprintEnd >= now
|
||||
const sprintStart = parseSprintStart(s.startDate)
|
||||
const sprintEnd = parseSprintEnd(s.endDate)
|
||||
return sprintStart <= now && sprintEnd >= now
|
||||
})
|
||||
|
||||
// Get other sprints (not current)
|
||||
|
||||
@ -4,3 +4,30 @@ import { twMerge } from "tailwind-merge"
|
||||
export function cn(...inputs: ClassValue[]) {
|
||||
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
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user