@@ -2,17 +2,17 @@ package list
22
33import (
44 "fmt"
5- "github.com/opf/openproject-cli/components/requests"
6- "github.com/opf/openproject-cli/components/resources"
7- "github.com/opf/openproject-cli/components/resources/work_packages/filters"
85 "os"
96 "regexp"
107 "strconv"
118
129 "github.com/opf/openproject-cli/components/common"
1310 "github.com/opf/openproject-cli/components/printer"
11+ "github.com/opf/openproject-cli/components/requests"
12+ "github.com/opf/openproject-cli/components/resources"
1413 "github.com/opf/openproject-cli/components/resources/projects"
1514 "github.com/opf/openproject-cli/components/resources/work_packages"
15+ "github.com/opf/openproject-cli/components/resources/work_packages/filters"
1616 "github.com/opf/openproject-cli/models"
1717 "github.com/spf13/cobra"
1818)
@@ -24,10 +24,11 @@ var showTotal bool
2424var statusFilter string
2525var typeFilter string
2626var includeSubProjects bool
27- var subProject string
2827
29- var activeFilters = []resources.Filter {
30- filters .NewTimestampFilter (),
28+ var activeFilters = map [string ]resources.Filter {
29+ "timestamp" : filters .NewTimestampFilter (),
30+ "subProject" : filters .NewSubProjectFilter (),
31+ "notSubProject" : filters .NewNotSubProjectFilter (),
3132}
3233
3334var workPackagesCmd = & cobra.Command {
@@ -40,7 +41,7 @@ var workPackagesCmd = &cobra.Command{
4041
4142func listWorkPackages (_ * cobra.Command , _ []string ) {
4243 // This needs to be removed, once all filters are built the "new" way
43- if errorText := validateCommandFlags (); len (errorText ) > 0 {
44+ if errorText := validateCommandFlagComposition (); len (errorText ) > 0 {
4445 printer .ErrorText (errorText )
4546 return
4647 }
@@ -62,21 +63,29 @@ func listWorkPackages(_ *cobra.Command, _ []string) {
6263 }
6364}
6465
65- func validateCommandFlags () (errorText string ) {
66+ func validateCommandFlagComposition () (errorText string ) {
6667 switch {
6768 case len (version ) != 0 && projectId == 0 :
6869 return "Version flag (--version) can only be used in conjunction with projectId flag (-p or --project-id)."
69- case len (subProject ) > 0 && (! includeSubProjects || projectId == 0 ):
70- return "Sub project filter flag (--sub-project) can only be used in conjunction with setting the flag--include-sub-projects and setting a project with the projectId flag (-p or --project-id)."
71- default :
72- return ""
70+ case len (activeFilters ["subProject" ].Value ()) > 0 || len (activeFilters ["notSubProject" ].Value ()) > 0 :
71+ if ! includeSubProjects || projectId == 0 {
72+ return `Sub project filter flags (--sub-project or --not-sub-project) can only be used
73+ in conjunction with setting the flag --include-sub-projects and setting a
74+ project with the projectId flag (-p or --project-id).`
75+ }
7376 }
77+
78+ return ""
7479}
7580
7681func buildQuery () (requests.Query , error ) {
7782 var q requests.Query
7883
7984 for _ , filter := range activeFilters {
85+ if filter .Value () == filter .DefaultValue () {
86+ continue
87+ }
88+
8089 err := filter .ValidateInput ()
8190 if err != nil {
8291 return requests .NewEmptyQuery (), err
@@ -109,10 +118,6 @@ func filterOptions() *map[work_packages.FilterOption]string {
109118 options [work_packages .Type ] = validateFilterValue (work_packages .Type , typeFilter )
110119 }
111120
112- if len (subProject ) > 0 {
113- options [work_packages .SubProject ] = validateFilterValue (work_packages .SubProject , subProject )
114- }
115-
116121 if len (version ) > 0 {
117122 options [work_packages .Version ] = validatedVersionId (version )
118123 }
0 commit comments