-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathprojectlist.go
56 lines (52 loc) · 1.69 KB
/
projectlist.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
package cproject
import (
"cmp"
"fmt"
"net/http"
"slices"
"strings"
"github.com/samber/lo"
"projectforge.dev/projectforge/app"
"projectforge.dev/projectforge/app/controller"
"projectforge.dev/projectforge/app/controller/cutil"
"projectforge.dev/projectforge/app/project"
"projectforge.dev/projectforge/app/util"
"projectforge.dev/projectforge/views/vproject"
)
func ProjectList(w http.ResponseWriter, r *http.Request) {
controller.Act("project.list", w, r, func(as *app.State, ps *cutil.PageState) (string, error) {
prjs := as.Services.Projects.Projects()
execs := as.Services.Exec.Execs
tags := util.StringSplitAndTrim(r.URL.Query().Get("tags"), ",")
if len(tags) > 0 {
prjs = prjs.WithTags(tags...)
}
switch r.URL.Query().Get("sort") {
case "package":
slices.SortFunc(prjs, func(l *project.Project, r *project.Project) int {
return cmp.Compare(l.Package, r.Package)
})
case "port":
slices.SortFunc(prjs, func(l *project.Project, r *project.Project) int {
return cmp.Compare(l.Port, r.Port)
})
}
ps.SetTitleAndData("All Projects", prjs)
switch r.URL.Query().Get("fmt") {
case "ports":
msgs := lo.Map(prjs, func(p *project.Project, _ int) string {
return fmt.Sprintf("%s: %d", p.Key, p.Port)
})
_, _ = w.Write([]byte(strings.Join(msgs, util.StringDefaultLinebreak)))
return "", nil
case "versions":
msgs := lo.Map(prjs, func(p *project.Project, _ int) string {
return fmt.Sprintf("%s: %s", p.Key, p.Version)
})
_, _ = w.Write([]byte(strings.Join(msgs, util.StringDefaultLinebreak)))
return "", nil
default:
return controller.Render(w, r, as, &vproject.List{Projects: prjs, Execs: execs, Tags: tags}, ps, "projects")
}
})
}