feat(web): las extensiones de cliente pueden ocultar campos y columnas y dejarlos de solo lectura (documentos y maestros)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
f077a61d08
commit
8dc4a8eaab
20 files changed
+374
-38
No files matched your search
@@ -23,6 +23,8 @@ export interface GridColumn {
|
||||
decimals?: number;
|
||||
/** No editable (siempre, o según la línea). */
|
||||
readonly?: boolean | ((line: GridLine) => boolean);
|
||||
/** Se ve pero el usuario no la edita; a diferencia de `readonly`, su valor sí se envía a SAP (ej. una dimensión copiada del origen). */
|
||||
locked?: boolean;
|
||||
required?: boolean;
|
||||
/** Lo elegido en la primera fila se copia a las filas de abajo (almacén, impuesto); desde la 2.ª fila no se replica. */
|
||||
propagate?: boolean;
|
||||
|
||||
@@ -441,3 +441,26 @@ describe('LinesGrid: ancho de la tabla', () => {
|
||||
expect(parseFloat(table.style.minWidth)).toBe(100 + 60 + 220 + 34 + 30);
|
||||
});
|
||||
});
|
||||
|
||||
describe('LinesGrid: columnas bloqueadas', () => {
|
||||
it('una columna bloqueada se ve con su valor pero no se puede editar', async () => {
|
||||
await TestBed.configureTestingModule({
|
||||
imports: [Host],
|
||||
providers: [provideHttpClient(), provideHttpClientTesting()],
|
||||
}).compileComponents();
|
||||
const fixture = TestBed.createComponent(Host);
|
||||
fixture.componentInstance.columns = [
|
||||
{ key: 'ItemCode', title: 'Artículo' },
|
||||
{ key: 'CostingCode', title: 'Dim. 1', locked: true },
|
||||
];
|
||||
fixture.componentInstance.lines.set([{ ItemCode: 'A', CostingCode: 'CC1' }]);
|
||||
fixture.detectChanges();
|
||||
await fixture.whenStable();
|
||||
fixture.detectChanges();
|
||||
const el = fixture.nativeElement as HTMLElement;
|
||||
const locked = el.querySelector<HTMLInputElement>('input[data-r="0"][data-c="1"]')!;
|
||||
expect(locked.value).toBe('CC1');
|
||||
expect(locked.readOnly).toBe(true);
|
||||
expect(el.querySelector<HTMLInputElement>('input[data-r="0"][data-c="0"]')!.readOnly).toBe(false);
|
||||
});
|
||||
});
|
||||
@@ -78,7 +78,7 @@ export class LinesGrid {
|
||||
}
|
||||
|
||||
protected isReadonly(line: GridLine, column: GridColumn): boolean {
|
||||
if (this.readonly() || column.format) return true;
|
||||
if (this.readonly() || column.format || column.locked) return true;
|
||||
return typeof column.readonly === 'function' ? column.readonly(line) : !!column.readonly;
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user