primefaces / primeng

The Most Complete Angular UI Component Library
https://primeng.org
Other
10.61k stars 4.62k forks source link

Component: AutoComplete with virtual scroll #16727

Open rgolonko opened 2 weeks ago

rgolonko commented 2 weeks ago

Describe the bug

The bug occurs when a user searches in the autocomplete input component with virtual scroll and reaches a "No results found" or ex. 1 suggestion state. Upon partially clearing the search term to bring back multiple results, the dropdown panel height does not automatically expand to display all results, remaining limited to a single row height.

Environment

Windows, Chrome

Reproducer

No response

Angular version

18.2.8

PrimeNG version

17.18.11

Build / Runtime

Angular CLI App

Language

TypeScript

Node version (for AoT issues node --version)

22.4.0

Browser(s)

Chrome 130

Steps to reproduce the behavior

  1. Go to https://primeng.org/autocomplete#virtualscroll
  2. Expan list by clickin blue arrow
  3. Type in input "item 0"
  4. Delete "0" in input
  5. Overly panel not resize to default scrollHeight
  6. Optional step: blur Autocomplete (click out the component), focus on input or click on blue down arrow - dialog still doesn't have correct size

Expected behavior

Dropdown panel automatically expands it's height to display multiple results

rgolonko commented 2 weeks ago

In my case working solutions is:

  1. Add @ViewChild('autoComplete') autoComplete: AutoComplete;
  2. In callback method onShow i added a line:
    asyncScheduler.schedule(() => {
      autoComplete.scroller.unbindResizeListener();
      clearTimeout(autoComplete.scroller.resizeTimeout);
    });

    Wrapping in asyncScheduler is needed because onOverlayAnimationStart() when first time dropdown is open runs initView() after onShow(). Function onResize in scroller component imo is the source of the problem and it is not needed in case of AutoComplete/MultiSelect components. Invoked function calculateAutoSize() is enough and call onResize() just break the height of panel, by setting different defaultContentHeight and defaultHeight values which later are not handle well in calculateAutoSize().

Another soulition is for example ovveride function in @ViewChild setter for example if we wrapper component is used.

github-actions[bot] commented 1 week ago

Due to PrimeNG team's busy roadmap, this issue is available for anyone to work on. Make sure to reference this issue in your pull request. :sparkles: Thank you for your contribution! :sparkles: