Axivion: Respect filter restrictions

Filters may have restrictions for which issue kinds they
are available.
Respect these restrictions and display only available
filters.

Change-Id: Ie667409af9a2ea493898e2abee208237d85eb84c
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Reviewed-by: Mohammad Mehdi Salem Naraghi <mehdi.salem@qt.io>
Reviewed-by: Jarek Kobus <jaroslaw.kobus@qt.io>
This commit is contained in:
Christian Stenger
2025-01-27 08:16:33 +01:00
parent 0ee1df8235
commit 56eafe56ee
3 changed files with 23 additions and 13 deletions

View File

@@ -461,9 +461,8 @@ void IssuesWidget::resetDashboard()
void IssuesWidget::updateNamedFilters() void IssuesWidget::updateNamedFilters()
{ {
QList<NamedFilter> globalFilters; QList<NamedFilter> globalFilters = knownNamedFiltersFor(m_currentPrefix, true);
QList<NamedFilter> userFilters; QList<NamedFilter> userFilters = knownNamedFiltersFor(m_currentPrefix, false);
knownNamedFilters(&globalFilters, &userFilters);
Utils::sort(globalFilters, [](const NamedFilter &lhs, const NamedFilter &rhs) { Utils::sort(globalFilters, [](const NamedFilter &lhs, const NamedFilter &rhs) {
return lhs.displayName < rhs.displayName; return lhs.displayName < rhs.displayName;
@@ -778,6 +777,7 @@ void IssuesWidget::updateBasicProjectInfo(const std::optional<Dto::ProjectInfoDt
button->setCheckable(true); button->setCheckable(true);
connect(button, &QToolButton::clicked, this, [this, prefix = kind.prefix]{ connect(button, &QToolButton::clicked, this, [this, prefix = kind.prefix]{
m_currentPrefix = prefix; m_currentPrefix = prefix;
updateNamedFilters();
fetchTable(); fetchTable();
}); });
m_typesButtonGroup->addButton(button, ++buttonId); m_typesButtonGroup->addButton(button, ++buttonId);

View File

@@ -338,17 +338,27 @@ void fetchNamedFilters()
dd->fetchNamedFilters(); dd->fetchNamedFilters();
} }
void knownNamedFilters(QList<NamedFilter> *global, QList<NamedFilter> *user) static QList<Dto::NamedFilterInfoDto> withoutRestricted(const QString &kind, const QList<Dto::NamedFilterInfoDto> &f)
{ {
QTC_ASSERT(dd, return); return Utils::filtered(f, [kind](const Dto::NamedFilterInfoDto &dto) {
QTC_ASSERT(global, return); if (dto.supportsAllIssueKinds)
QTC_ASSERT(user, return); return true;
return !dto.issueKindRestrictions || dto.issueKindRestrictions->contains(kind)
*global = Utils::transform(dd->m_globalNamedFilters, [](const Dto::NamedFilterInfoDto &dto) { || dto.issueKindRestrictions->contains("UNIVERSAL");
return NamedFilter{dto.key, dto.displayName, true};
}); });
*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<NamedFilter> 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};
}); });
} }

View File

@@ -113,7 +113,7 @@ struct NamedFilter
}; };
void fetchNamedFilters(); void fetchNamedFilters();
void knownNamedFilters(QList<NamedFilter> *global, QList<NamedFilter> *user); QList<NamedFilter> knownNamedFiltersFor(const QString &issueKind, bool global);
std::optional<Dto::NamedFilterInfoDto> namedFilterInfoForKey(const QString &key, bool global); std::optional<Dto::NamedFilterInfoDto> namedFilterInfoForKey(const QString &key, bool global);
bool handleCertificateIssue(); bool handleCertificateIssue();