Projekte: zur Vorlage gemachtes Projekt verschwindet nicht mehr
Vorlagen stehen absichtlich nur in der Ansicht "Vorlagen" (Admins). Nach
dem Speichern als Vorlage fiel das Projekt deshalb kommentarlos aus
"Aktive Projekte" (SHK-vorlage, 04.10.2026).
- nach dem Bearbeiten in die Ansicht wechseln, in der das Projekt jetzt
steht, mit Hinweis ("steht jetzt unter Vorlagen")
- Suche zeigt Treffer in ausgeblendeten Ansichten (Vorlagen, Archiv) mit
Klick zum Wechseln
- Hilfen viewShowing / matchesSearch / hiddenMatches in lib/projectList.js
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
c262268015
commit
603d08c9c2
3 files changed
+140
-34
No files matched your search
@@ -26,3 +26,47 @@ export function projectsInView(projects, filter, { isAdmin = false } = {}) {
|
||||
if (filter === 'assigned') return act.filter((p) => Boolean(p.customerId))
|
||||
return act
|
||||
}
|
||||
|
||||
export const VIEW_LABELS = { all: 'Aktive Projekte', templates: 'Vorlagen', archived: 'Archiviert', everything: 'Alle inkl. Archiv' }
|
||||
|
||||
// Ansichten, die ein Projekt zeigen koennen - die Vorlagen-Ansicht gibt es nur fuer Admins
|
||||
const viewsFor = (isAdmin) => ['all', ...(isAdmin ? ['templates'] : []), 'archived', 'everything']
|
||||
|
||||
/**
|
||||
* Ansicht, in der ein Projekt (z. B. nach dem Bearbeiten) zu sehen ist: die aktuelle, wenn es dort
|
||||
* steht, sonst die erste passende. Ohne passende Ansicht bleibt es bei der aktuellen.
|
||||
* Hintergrund: SHK-vorlage zur Vorlage gemacht -> verschwand kommentarlos aus "Aktive Projekte".
|
||||
*/
|
||||
export function viewShowing(project, filter, { isAdmin = false } = {}) {
|
||||
if (!project) return filter
|
||||
for (const view of [filter, ...viewsFor(isAdmin)]) {
|
||||
if (view === 'templates' && !isAdmin) continue
|
||||
if (projectsInView([project], view, { isAdmin }).length) return view
|
||||
}
|
||||
return filter
|
||||
}
|
||||
|
||||
/** Textsuche ueber Titel, Subdomain und Repo (leer passt immer). */
|
||||
export function matchesSearch(project, search) {
|
||||
const q = String(search || '').trim().toLowerCase()
|
||||
if (!q) return true
|
||||
return [project.projectName, project.subdomain, project.repoFullName, project.giteaRepoName].some((v) =>
|
||||
String(v || '').toLowerCase().includes(q)
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Treffer, die die aktuelle Ansicht ausblendet (Vorlagen nur fuer Admins, Archiv), je Ansicht gezaehlt.
|
||||
* `matches` ist der Filter der Seite (Suche, Kunde, Mitarbeiter).
|
||||
*/
|
||||
export function hiddenMatches(projects, filter, matches, { isAdmin = false } = {}) {
|
||||
if (filter === 'everything') return []
|
||||
const shown = new Set(projectsInView(projects, filter, { isAdmin }).map((p) => p.$id))
|
||||
const out = []
|
||||
for (const view of [...(isAdmin ? ['templates'] : []), 'archived']) {
|
||||
if (view === filter) continue
|
||||
const count = projectsInView(projects, view, { isAdmin }).filter((p) => !shown.has(p.$id) && matches(p)).length
|
||||
if (count) out.push({ view, count })
|
||||
}
|
||||
return out
|
||||
}
|
||||
Reference in new issue
Block a user