The reason that users can open more than one filter at a time is for UX purposes. When there are multiple filters applied to the dataset, opening multiple filters at the same time gives them a way to see all of the filter values if they need to.
We do have an enhancement in the backlog that will improve the filtering experience once it's implemented.
If you really want or need to programmatically manage the open / closed state of the filters you could add custom clr-dg-filter
's and tie into the @Output
clrDgFilterOpenChange. Alternatively, you could add a #myFilter
template ref and grab it with an @ViewChild
in your code to manage its open/closed state with the toggle method.