feat(model): keep an overdue feature's bar running to the now week
This commit is contained in:
@@ -8,8 +8,8 @@ import type { RawPlan, RawFeature, Plan, FeatureRow, Marker, MilestoneLine } fro
|
|||||||
* Re-estimate (ADR-0001). The full slip history (`◯` + every `△`) is preserved.
|
* Re-estimate (ADR-0001). The full slip history (`◯` + every `△`) is preserved.
|
||||||
*/
|
*/
|
||||||
export function buildPlan(raw: RawPlan, today: Date | string = new Date()): Plan {
|
export function buildPlan(raw: RawPlan, today: Date | string = new Date()): Plan {
|
||||||
const rows = raw.features.map(buildRow)
|
|
||||||
const nowWeek = mondayOf(today)
|
const nowWeek = mondayOf(today)
|
||||||
|
const rows = raw.features.map((f) => buildRow(f, nowWeek))
|
||||||
|
|
||||||
const milestones = raw.milestones.map((m): MilestoneLine => {
|
const milestones = raw.milestones.map((m): MilestoneLine => {
|
||||||
const week = mondayOf(m.week)
|
const week = mondayOf(m.week)
|
||||||
@@ -43,7 +43,7 @@ export function buildPlan(raw: RawPlan, today: Date | string = new Date()): Plan
|
|||||||
return { title: raw.title, weeks, rows, milestones, nowWeek, nowInRange }
|
return { title: raw.title, weeks, rows, milestones, nowWeek, nowInRange }
|
||||||
}
|
}
|
||||||
|
|
||||||
function buildRow(f: RawFeature): FeatureRow {
|
function buildRow(f: RawFeature, nowWeek: WeekId): FeatureRow {
|
||||||
const startWeek = mondayOf(f.start)
|
const startWeek = mondayOf(f.start)
|
||||||
const originalWeek = mondayOf(f.original)
|
const originalWeek = mondayOf(f.original)
|
||||||
const deliveredWeek = f.delivered ? mondayOf(f.delivered) : undefined
|
const deliveredWeek = f.delivered ? mondayOf(f.delivered) : undefined
|
||||||
@@ -62,7 +62,11 @@ function buildRow(f: RawFeature): FeatureRow {
|
|||||||
markers.push({ week: originalWeek, kind: 'original' })
|
markers.push({ week: originalWeek, kind: 'original' })
|
||||||
}
|
}
|
||||||
|
|
||||||
const barEndWeek = [startWeek, ...markers.map((m) => m.week)].reduce((a, b) => (a > b ? a : b))
|
const intrinsicEnd = [startWeek, ...markers.map((m) => m.week)].reduce((a, b) => (a > b ? a : b))
|
||||||
|
// A delivered Feature's bar ends at its delivery. An undelivered Feature that
|
||||||
|
// is already past its furthest estimate keeps "running" up to now (overdue),
|
||||||
|
// so its bar extends to the now week; otherwise it ends at the last marker.
|
||||||
|
const barEndWeek = delivered || intrinsicEnd > nowWeek ? intrinsicEnd : nowWeek
|
||||||
|
|
||||||
return {
|
return {
|
||||||
name: f.name,
|
name: f.name,
|
||||||
|
|||||||
Reference in New Issue
Block a user