diff --git a/src/plugins/axivion/axivionperspective.cpp b/src/plugins/axivion/axivionperspective.cpp index fe56601bb84..6c9c393491b 100644 --- a/src/plugins/axivion/axivionperspective.cpp +++ b/src/plugins/axivion/axivionperspective.cpp @@ -461,9 +461,8 @@ void IssuesWidget::resetDashboard() void IssuesWidget::updateNamedFilters() { - QList globalFilters; - QList userFilters; - knownNamedFilters(&globalFilters, &userFilters); + QList globalFilters = knownNamedFiltersFor(m_currentPrefix, true); + QList userFilters = knownNamedFiltersFor(m_currentPrefix, false); Utils::sort(globalFilters, [](const NamedFilter &lhs, const NamedFilter &rhs) { return lhs.displayName < rhs.displayName; @@ -778,6 +777,7 @@ void IssuesWidget::updateBasicProjectInfo(const std::optionalsetCheckable(true); connect(button, &QToolButton::clicked, this, [this, prefix = kind.prefix]{ m_currentPrefix = prefix; + updateNamedFilters(); fetchTable(); }); m_typesButtonGroup->addButton(button, ++buttonId); diff --git a/src/plugins/axivion/axivionplugin.cpp b/src/plugins/axivion/axivionplugin.cpp index 9a192ef48c9..747eaf50c22 100644 --- a/src/plugins/axivion/axivionplugin.cpp +++ b/src/plugins/axivion/axivionplugin.cpp @@ -338,17 +338,27 @@ void fetchNamedFilters() dd->fetchNamedFilters(); } -void knownNamedFilters(QList *global, QList *user) +static QList withoutRestricted(const QString &kind, const QList &f) { - QTC_ASSERT(dd, return); - QTC_ASSERT(global, return); - QTC_ASSERT(user, return); - - *global = Utils::transform(dd->m_globalNamedFilters, [](const Dto::NamedFilterInfoDto &dto) { - return NamedFilter{dto.key, dto.displayName, true}; + return Utils::filtered(f, [kind](const Dto::NamedFilterInfoDto &dto) { + if (dto.supportsAllIssueKinds) + return true; + return !dto.issueKindRestrictions || dto.issueKindRestrictions->contains(kind) + || dto.issueKindRestrictions->contains("UNIVERSAL"); }); - *user = Utils::transform(dd->m_userNamedFilters, [](const Dto::NamedFilterInfoDto &dto) { - return NamedFilter{dto.key, dto.displayName, false}; +}; + +// TODO: Introduce FilterScope enum { Global, User } and use it instead of bool global. +QList knownNamedFiltersFor(const QString &issueKind, bool global) +{ + QTC_ASSERT(dd, return {}); + + if (issueKind.isEmpty()) // happens after initial dashboad and filters fetch + return {}; + + return Utils::transform(withoutRestricted(issueKind, global ? dd->m_globalNamedFilters : dd->m_userNamedFilters), + [global](const Dto::NamedFilterInfoDto &dto) { + return NamedFilter{dto.key, dto.displayName, global}; }); } diff --git a/src/plugins/axivion/axivionplugin.h b/src/plugins/axivion/axivionplugin.h index eadc755867c..65d00dc6e4e 100644 --- a/src/plugins/axivion/axivionplugin.h +++ b/src/plugins/axivion/axivionplugin.h @@ -113,7 +113,7 @@ struct NamedFilter }; void fetchNamedFilters(); -void knownNamedFilters(QList *global, QList *user); +QList knownNamedFiltersFor(const QString &issueKind, bool global); std::optional namedFilterInfoForKey(const QString &key, bool global); bool handleCertificateIssue();