mirror of
https://github.com/modrinth/code.git
synced 2026-08-25 09:04:55 +00:00
feat: implement dependent projects + members breakdown/filter (#6395)
* feat: implement dependent project breakdown * implement dependent project type filter * feat: show dependent on column if there are multiple projects selected * feat: different tooltip for when both project version and dependent breakdowns are on * feat: implement dependents query filter * feat: add project icon to query filter * fix: dont show dependent on column when project breakdown is selected * feat: add org icon * remove: dependent on project column and project version project column * refactor: pnpm prepr * fix: all project selection gets unselected when reload page * pnpm prepr * fix: still using old search formatter * feat: implement projects in table click to link to project page * feat: handle analytics values that dont have a dependent project as a "No dependent" row * pnpm prepr * feat: remove org icon for dependents projects and change unknown label * feat: do not include unknown rows for showing top 8 * feat: separate out no dependents based on download reason * fix: use compatible dependencies for query filter options * feat: implement members breakdown/filter frontend (#6470) * feat: add link to user in table * fix: do not allow breakdowns to occur without shared stats * pnpm prepr * fix: i18n and passing params for formatter
This commit is contained in:
@@ -823,3 +823,32 @@ function getParamValuesAsArray(x: LocationQueryValue | LocationQueryValue[]): st
|
||||
return x.filter((x) => x !== null)
|
||||
}
|
||||
}
|
||||
|
||||
export function buildDependentsSearchFilters(
|
||||
projectTypes: readonly ProjectType[],
|
||||
dependencyProjectIds: readonly string[],
|
||||
): string {
|
||||
const parts: string[] = []
|
||||
const mappedProjectTypes = projectTypes.map(mapProjectTypeToSearch)
|
||||
|
||||
if (mappedProjectTypes.length === 1) {
|
||||
parts.push(`project_types = ${formatSearchFilterValue(mappedProjectTypes[0])}`)
|
||||
} else if (mappedProjectTypes.length > 1) {
|
||||
const quoted = mappedProjectTypes.map(formatSearchFilterValue).join(', ')
|
||||
parts.push(`project_types IN [${quoted}]`)
|
||||
}
|
||||
|
||||
const normalizedProjectIds = Array.from(
|
||||
new Set(dependencyProjectIds.map((projectId) => projectId.trim()).filter(Boolean)),
|
||||
)
|
||||
if (normalizedProjectIds.length === 1) {
|
||||
parts.push(
|
||||
`compatible_dependency_project_ids = ${formatSearchFilterValue(normalizedProjectIds[0])}`,
|
||||
)
|
||||
} else if (normalizedProjectIds.length > 1) {
|
||||
const quoted = normalizedProjectIds.map(formatSearchFilterValue).join(', ')
|
||||
parts.push(`compatible_dependency_project_ids IN [${quoted}]`)
|
||||
}
|
||||
|
||||
return parts.join(' AND ')
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user