Убрана логика создания нулевой точки в графике полной статистики
All checks were successful
Build and Push Docker Image / build-and-push (push) Successful in 26s

This commit is contained in:
poignatov
2025-12-30 21:00:41 +03:00
parent 0d3a05639c
commit 8ba6a9a78f

View File

@@ -17,8 +17,6 @@ import { getAllProjectsSorted, getProjectColor, sortProjectsLikeCurrentWeek } fr
// Экспортируем для обратной совместимости (если используется в других местах) // Экспортируем для обратной совместимости (если используется в других местах)
export { getProjectColorByIndex } from '../utils/projectUtils' export { getProjectColorByIndex } from '../utils/projectUtils'
const formatWeekKey = ({ year, week }) => `${year}-W${week.toString().padStart(2, '0')}`
const parseWeekKey = (weekKey) => { const parseWeekKey = (weekKey) => {
const [yearStr, weekStr] = weekKey.split('-W') const [yearStr, weekStr] = weekKey.split('-W')
return { year: Number(yearStr), week: Number(weekStr) } return { year: Number(yearStr), week: Number(weekStr) }
@@ -34,36 +32,6 @@ const compareWeekKeys = (a, b) => {
return weekA - weekB return weekA - weekB
} }
// Возвращает понедельник ISO-недели
const getDateOfISOWeek = (week, year) => {
const simple = new Date(year, 0, 1 + (week - 1) * 7)
const dayOfWeek = simple.getDay() || 7 // Sunday -> 7
if (dayOfWeek !== 1) {
simple.setDate(simple.getDate() + (1 - dayOfWeek))
}
simple.setHours(0, 0, 0, 0)
return simple
}
const getISOWeekInfo = (date) => {
const target = new Date(date.getTime())
target.setHours(0, 0, 0, 0)
target.setDate(target.getDate() + 4 - (target.getDay() || 7))
const year = target.getFullYear()
const yearStart = new Date(year, 0, 1)
const week = Math.ceil(((target - yearStart) / 86400000 + 1) / 7)
return { year, week }
}
const getPrevWeekKey = (weekKey) => {
const { year, week } = parseWeekKey(weekKey)
const currentWeekDate = getDateOfISOWeek(week, year)
const prevWeekDate = new Date(currentWeekDate.getTime())
prevWeekDate.setDate(prevWeekDate.getDate() - 7)
const prevWeekInfo = getISOWeekInfo(prevWeekDate)
return formatWeekKey(prevWeekInfo)
}
ChartJS.register( ChartJS.register(
CategoryScale, CategoryScale,
LinearScale, LinearScale,
@@ -94,22 +62,6 @@ function FullStatistics({ selectedProject, onClearSelection, data, loading, erro
projectsMap[projectName][weekKey] = parseFloat(item.total_score) projectsMap[projectName][weekKey] = parseFloat(item.total_score)
}) })
// Добавляем дополнительную неделю со значением 0,
// если первая неделя проекта имеет ненулевое значение
Object.values(projectsMap).forEach((weeks) => {
const projectWeeks = Object.keys(weeks)
if (!projectWeeks.length) return
const sortedProjectWeeks = projectWeeks.sort(compareWeekKeys)
const firstWeekKey = sortedProjectWeeks[0]
const firstScore = weeks[firstWeekKey]
if (firstScore !== 0) {
const zeroWeekKey = getPrevWeekKey(firstWeekKey)
weeks[zeroWeekKey] = 0
}
})
// Собираем все уникальные недели и сортируем их по году и неделе // Собираем все уникальные недели и сортируем их по году и неделе
const allWeeks = new Set() const allWeeks = new Set()
Object.values(projectsMap).forEach(weeks => { Object.values(projectsMap).forEach(weeks => {