fix(web): la grilla de líneas no aprieta las columnas (ancho mínimo = suma de anchos), el total va tras el impuesto y el proyecto de la cabecera abre su ventana
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
f66ef108cf
commit
f077a61d08
11 files changed
+90
-13
No files matched your search
@@ -10,7 +10,7 @@
|
||||
</div>
|
||||
|
||||
<div class="gridwrap">
|
||||
<table class="grid">
|
||||
<table class="grid" [style.min-width.px]="tableMinWidth()">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="rn">#</th>
|
||||
|
||||
@@ -422,3 +422,22 @@ describe('LinesGrid', () => {
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('LinesGrid: ancho de la tabla', () => {
|
||||
it('el ancho mínimo es la suma de los anchos de sus columnas, para no apretarlas', async () => {
|
||||
await TestBed.configureTestingModule({
|
||||
imports: [Host],
|
||||
providers: [provideHttpClient(), provideHttpClientTesting()],
|
||||
}).compileComponents();
|
||||
const fixture = TestBed.createComponent(Host);
|
||||
fixture.componentInstance.columns = [
|
||||
{ key: 'A', title: 'A', width: '100px' },
|
||||
{ key: 'B', title: 'B', width: '60px' },
|
||||
{ key: 'C', title: 'C' }, // sin ancho: reserva 220
|
||||
];
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
const table = (fixture.nativeElement as HTMLElement).querySelector<HTMLElement>('table.grid')!;
|
||||
expect(parseFloat(table.style.minWidth)).toBe(100 + 60 + 220 + 34 + 30);
|
||||
});
|
||||
});
|
||||
@@ -55,6 +55,19 @@ export class LinesGrid {
|
||||
protected readonly lookupTarget = signal<LookupTarget | null>(null);
|
||||
protected readonly multiOpen = signal(false);
|
||||
protected readonly lookup = computed(() => this.lookupTarget()?.column.lookup?.config);
|
||||
|
||||
/**
|
||||
* Ancho mínimo de la tabla: la suma de los anchos de sus columnas (las que no declaran uno, como la
|
||||
* descripción, reservan 220 px), más el número de fila y el botón de quitar. Si no cabe en pantalla, la
|
||||
* grilla se desplaza en horizontal en lugar de apretar las columnas hasta cortar su contenido.
|
||||
*/
|
||||
protected readonly tableMinWidth = computed(() => {
|
||||
const px = (c: GridColumn): number => {
|
||||
const w = parseFloat(c.width ?? '');
|
||||
return Number.isFinite(w) ? w : 220;
|
||||
};
|
||||
return this.columns().reduce((sum, c) => sum + px(c), 34 + (this.readonly() ? 0 : 30));
|
||||
});
|
||||
protected readonly lookupMultiple = computed(() => !!this.lookupTarget()?.column.lookup?.multiple);
|
||||
|
||||
protected cellText(line: GridLine, column: GridColumn): string {
|
||||
|
||||
Reference in new issue
Block a user