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()
{
QList<NamedFilter> globalFilters;
QList<NamedFilter> userFilters;
knownNamedFilters(&globalFilters, &userFilters);
QList<NamedFilter> globalFilters = knownNamedFiltersFor(m_currentPrefix, true);
QList<NamedFilter> 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::optional<Dto::ProjectInfoDt
button->setCheckable(true);
connect(button, &QToolButton::clicked, this, [this, prefix = kind.prefix]{
m_currentPrefix = prefix;
updateNamedFilters();
fetchTable();
});
m_typesButtonGroup->addButton(button, ++buttonId);

View File

@@ -338,17 +338,27 @@ void 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);
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<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 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);
bool handleCertificateIssue();