feat(product-ticket-selector): simplify row selection handling and improve test coverage for variant selection

This commit is contained in:
2026-08-18 08:51:33 -03:00
parent 30bfd9eff8
commit 207c979f71
3 changed files with 8 additions and 6 deletions

View File

@@ -27,7 +27,7 @@
<select
class="form-select variant-selector__select"
[attr.aria-label]="selector.label"
[disabled]="rowDisabled(row) || !selector.enabled"
[disabled]="rowDisabled(row)"
[value]="selectedOptionKey(row, selector.key)"
(change)="onSelectionKeyChange(row.id, selector, $any($event.target).value)"
>

View File

@@ -133,9 +133,15 @@ describe('ProductTicketSelectorComponent', () => {
fixture.componentRef.setInput('title', 'Entrada');
fixture.detectChanges();
await fixture.whenStable();
fixture.detectChanges();
expect(catalogService.getVariantOptions).toHaveBeenCalledTimes(1);
expect(catalogService.withoutLoading).toHaveBeenCalled();
expect(
Array.from<HTMLSelectElement>(fixture.nativeElement.querySelectorAll('select')).every(
(select) => !select.disabled,
),
).toBe(true);
fixture.componentInstance['onSelectionChange'](1, 'sector', {
value: 'a',

View File

@@ -206,11 +206,7 @@ export class ProductTicketSelectorComponent {
const row = this.findRow(rowId);
if (!row || this.isBusy(row)) return;
const selectorIndex = row.selectors.findIndex((selector) => selector.key === selectorKey);
const retainedKeys = new Set(row.selectors.slice(0, selectorIndex + 1).map(({ key }) => key));
const selectedValues = Object.fromEntries(
Object.entries(row.selectedValues).filter(([key]) => retainedKeys.has(key)),
);
const selectedValues = { ...row.selectedValues };
if (value === null) delete selectedValues[selectorKey];
else selectedValues[selectorKey] = this.normalizeValue(value);