fix: version 2.18.1 -- Panel: barras alineadas en los popups de detalle
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,5 +1,10 @@
|
|||||||
# Changelog - project.linkedcorp.net
|
# Changelog - project.linkedcorp.net
|
||||||
|
|
||||||
|
## [2.18.1] - 2026-10-21
|
||||||
|
### Fixed
|
||||||
|
- Panel → popups de detalle: las barras de avance quedan alineadas una debajo de otra aunque la
|
||||||
|
fila no tenga etiqueta de vencimiento (la etiqueta ocupa siempre su columna).
|
||||||
|
|
||||||
## [2.18.0] - 2026-10-21
|
## [2.18.0] - 2026-10-21
|
||||||
### Changed
|
### Changed
|
||||||
- Panel: el detalle de cada tarjeta se abre en un **popup** en vez de reemplazar el bloque de
|
- Panel: el detalle de cada tarjeta se abre en un **popup** en vez de reemplazar el bloque de
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "project-linkedcorp-backend",
|
"name": "project-linkedcorp-backend",
|
||||||
"version": "2.18.0",
|
"version": "2.18.1",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "src/server.js",
|
"main": "src/server.js",
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "project-linkedcorp-frontend",
|
"name": "project-linkedcorp-frontend",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "2.18.0",
|
"version": "2.18.1",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite",
|
"dev": "vite",
|
||||||
|
|||||||
@@ -14,6 +14,11 @@ function ratioOf(part, total) {
|
|||||||
return { ratio, pct: Math.round(ratio * 100) };
|
return { ratio, pct: Math.round(ratio * 100) };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Columnas fijas en las filas de los popups: aunque una fila no tenga etiqueta de vencimiento,
|
||||||
|
// la barra de avance queda alineada con las demas (tabla "invisible").
|
||||||
|
const BAR_COL = { width: 120, flex: 'none' };
|
||||||
|
const BADGE_COL = { width: 96, flex: 'none', display: 'flex', justifyContent: 'flex-end' };
|
||||||
|
|
||||||
const dateOnly = (d) => (d ? String(d).slice(0, 10) : '—');
|
const dateOnly = (d) => (d ? String(d).slice(0, 10) : '—');
|
||||||
|
|
||||||
function ProjectRows({ projects, onOpen }) {
|
function ProjectRows({ projects, onOpen }) {
|
||||||
@@ -27,8 +32,8 @@ function ProjectRows({ projects, onOpen }) {
|
|||||||
{p.owner_name || '—'} · {dateOnly(p.estimated_end_date)}{p.status_name ? ` · ${p.status_name}` : ''}
|
{p.owner_name || '—'} · {dateOnly(p.estimated_end_date)}{p.status_name ? ` · ${p.status_name}` : ''}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div style={{ width: 120 }}><ProgressBar value={Number(p.progress_pct)} /></div>
|
<div style={BAR_COL}><ProgressBar value={Number(p.progress_pct)} /></div>
|
||||||
<DueBadge status={p.dueStatus} />
|
<div style={BADGE_COL}><DueBadge status={p.dueStatus} /></div>
|
||||||
</div>
|
</div>
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
@@ -44,8 +49,8 @@ function ActivityRows({ activities, onOpen }) {
|
|||||||
{a.project_code} — {a.project_name} · {a.responsible_name || '—'} · {dateOnly(a.due_date)}
|
{a.project_code} — {a.project_name} · {a.responsible_name || '—'} · {dateOnly(a.due_date)}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div style={{ width: 120 }}><ProgressBar value={Number(a.progress_pct)} /></div>
|
<div style={BAR_COL}><ProgressBar value={Number(a.progress_pct)} /></div>
|
||||||
<DueBadge status={a.dueStatus} />
|
<div style={BADGE_COL}><DueBadge status={a.dueStatus} /></div>
|
||||||
</div>
|
</div>
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user