Volver a la wiki

Tasks s56: multi-asignado, notas vinculadas y mejoras de UI

Resumen

Sprint 56 (11-05-2026) introduce cuatro mejoras coordinadas en el módulo de Tareas del Workspace interno de CreaRack:

#MejoraArchivos principales
1Vinculación tarea ↔ nota del Cuaderno (linked_note_ids)migrations/0023_tasks_linked_notes.sql, functions/api/tasks/index.ts, functions/api/tasks/[id]/index.ts
2Multi-asignado (selector de toggle por persona)src/components/tasks/TaskModal.tsx, src/lib/constants.ts
3TasksWidget ampliado (limit 5→20, scroll contenedor)src/components/dashboard/TasksWidget.tsx
4Fix font-size: Tailwind overrides para que la preferencia de tamaño escale en todas las páginassrc/styles/globals.css

1. Vinculación tarea ↔ nota del Cuaderno

Migración D1 — 0023_tasks_linked_notes.sql

ALTER TABLE tasks ADD COLUMN linked_note_ids TEXT DEFAULT '[]';

API

POST /api/tasks — nuevo campo opcional linked_note_ids?: number[]. Se serializa a JSON antes de insertar:

const linkedNoteIdsJson = JSON.stringify(
  Array.isArray(body.linked_note_ids)
    ? body.linked_note_ids.filter((n) => typeof n === 'number' && Number.isFinite(n))
    : [],
);
// INSERT ... linked_note_ids VALUES (?, ..., linkedNoteIdsJson)

PUT /api/tasks/:id — mismo campo. Lógica COALESCE: si el caller no envía linked_note_ids (undefined), se pasa null a COALESCE(?, linked_note_ids) y la columna no se toca.

UI — TaskModal.tsx


2. Multi-asignado

src/lib/constants.ts

// 'Equipo'      → ['Edu', 'Dani', 'Txell']   (legacy expand)
// 'Edu, Dani'   → ['Edu', 'Dani']             (multi)
// 'Edu'         → ['Edu']                     (single)
// null / ''     → []

TaskModal.tsx

TaskManager.tsx — filtro de asignado

El filtro filterAssignee ahora hace matching por nombre contenido en la cadena CSV:

const isLegacyTeam = t.assignee === 'Equipo';
const explicitNames = (t.assignee || '').split(',').map(s => s.trim());
const matches = isLegacyTeam || explicitNames.includes(filterAssignee);

Además, el borderRight del segmentado de filtros usa TEAM_FILTER[TEAM_FILTER.length - 1] en lugar del hardcoded 'Equipo'.


3. TasksWidget — límite ampliado y scroll

src/components/dashboard/TasksWidget.tsx:


4. Fix font-size — Tailwind overrides

src/styles/globals.css:

Problema: la preferencia de tamaño de fuente (data-font-size) solo afectaba a font-size del body base. Las páginas que usan clases Tailwind explícitas (text-sm, text-base, etc.) quedaban con el tamaño fijo de Tailwind, ignorando la preferencia.

Solución: overrides CSS por data-font-size × clase Tailwind:

body[data-font-size="sm"] .text-sm  { font-size: 0.8125rem; }
body[data-font-size="lg"] .text-sm  { font-size: 0.95rem; }
body[data-font-size="xl"] .text-sm  { font-size: 1.05rem; }
/* ... idem para text-xs, text-base, text-lg, text-xl */

Los valores base también se ajustaron (sm: 15→13 px, lg: 15.5→16 px, xl: 17→19 px) para una escala más coherente.


Notas de compatibilidad


Véase también

Subir