4.16.0: Добавлен выбор цвета для проектов
All checks were successful
Build and Push Docker Image / build-and-push (push) Successful in 2m9s

This commit is contained in:
poignatov
2026-02-04 17:12:21 +03:00
parent c22e56e68a
commit 479ffb2483
12 changed files with 416 additions and 38 deletions

View File

@@ -1,5 +1,40 @@
// Утилиты для работы с проектами - обеспечивают единую сортировку и цвета
// Палитра из 30 контрастных цветов для проектов (HEX формат)
// Должна быть синхронизирована с backend (main.go)
export const PROJECT_COLORS_PALETTE = [
'#EF4444', // Красный
'#F97316', // Оранжевый
'#F59E0B', // Янтарный
'#EAB308', // Желтый
'#84CC16', // Лайм
'#22C55E', // Зеленый
'#10B981', // Изумрудный
'#14B8A6', // Бирюзовый
'#06B6D4', // Голубой
'#0EA5E9', // Небесный
'#3B82F6', // Синий
'#6366F1', // Индиго
'#8B5CF6', // Фиолетовый
'#A855F7', // Пурпурный
'#D946EF', // Фуксия
'#EC4899', // Розовый
'#F43F5E', // Розово-красный
'#DC2626', // Темно-красный
'#EA580C', // Темно-оранжевый
'#CA8A04', // Темно-желтый
'#65A30D', // Темно-лайм
'#16A34A', // Темно-зеленый
'#059669', // Темно-изумрудный
'#0D9488', // Темно-бирюзовый
'#0891B2', // Темно-голубой
'#0284C7', // Темно-небесный
'#2563EB', // Темно-синий
'#4F46E5', // Темно-индиго
'#7C3AED', // Темно-фиолетовый
'#9333EA', // Темно-пурпурный
]
// Функция для генерации цвета проекта на основе его индекса в отсортированном списке
export function getProjectColorByIndex(index) {
const hue = (index * 137.508) % 360 // Золотой угол для равномерного распределения цветов
@@ -39,13 +74,20 @@ export function getAllProjectsSorted(allProjectsData, currentWeekData = null) {
}
/**
* Получает цвет проекта на основе его названия
* Получает цвет проекта на основе его названия или цвета из БД
*
* @param {string} projectName - название проекта
* @param {Array} allProjectsSorted - отсортированный список всех проектов
* @returns {string} цвет в формате HSL
* @param {string|null} projectColorFromDB - цвет проекта из базы данных (HEX формат)
* @returns {string} цвет в формате HEX или HSL (fallback)
*/
export function getProjectColor(projectName, allProjectsSorted) {
export function getProjectColor(projectName, allProjectsSorted, projectColorFromDB = null) {
// Если передан цвет из БД и он не пустой - использовать его
if (projectColorFromDB && projectColorFromDB.trim() !== '') {
return projectColorFromDB
}
// Иначе использовать вычисляемый цвет (текущая логика) - это fallback для обратной совместимости
const projectIndex = allProjectsSorted.indexOf(projectName)
return projectIndex >= 0 ? getProjectColorByIndex(projectIndex) : '#9CA3AF'
}