fix(setup): apply type filter in package wizard
Co-Authored-By: Virgil <virgil@lethean.io>
This commit is contained in:
parent
24fd01dc26
commit
b5d32ade33
2 changed files with 69 additions and 1 deletions
|
|
@ -7,9 +7,9 @@ import (
|
|||
"os"
|
||||
"slices"
|
||||
|
||||
"forge.lthn.ai/core/cli/pkg/cli"
|
||||
"dappco.re/go/core/i18n"
|
||||
"dappco.re/go/core/scm/repos"
|
||||
"forge.lthn.ai/core/cli/pkg/cli"
|
||||
"golang.org/x/term"
|
||||
)
|
||||
|
||||
|
|
@ -39,6 +39,9 @@ func promptProjectName(defaultName string) (string, error) {
|
|||
// runPackageWizard presents an interactive multi-select UI for package selection.
|
||||
func runPackageWizard(reg *repos.Registry, preselectedTypes []string) ([]string, error) {
|
||||
allRepos := reg.List()
|
||||
if len(preselectedTypes) > 0 {
|
||||
allRepos = filterReposByTypes(allRepos, preselectedTypes)
|
||||
}
|
||||
|
||||
// Build options
|
||||
var options []string
|
||||
|
|
@ -57,6 +60,10 @@ func runPackageWizard(reg *repos.Registry, preselectedTypes []string) ([]string,
|
|||
options = append(options, label)
|
||||
}
|
||||
|
||||
if len(options) == 0 {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
fmt.Println(cli.TitleStyle.Render(i18n.T("cmd.setup.wizard.package_selection")))
|
||||
fmt.Println(i18n.T("cmd.setup.wizard.selection_hint"))
|
||||
|
||||
|
|
@ -87,6 +94,33 @@ func runPackageWizard(reg *repos.Registry, preselectedTypes []string) ([]string,
|
|||
return selected, nil
|
||||
}
|
||||
|
||||
func filterReposByTypes(repos []*repos.Repo, allowedTypes []string) []*repos.Repo {
|
||||
if len(allowedTypes) == 0 {
|
||||
return repos
|
||||
}
|
||||
|
||||
allowed := make(map[string]struct{}, len(allowedTypes))
|
||||
for _, repoType := range allowedTypes {
|
||||
if repoType == "" {
|
||||
continue
|
||||
}
|
||||
allowed[repoType] = struct{}{}
|
||||
}
|
||||
|
||||
if len(allowed) == 0 {
|
||||
return repos
|
||||
}
|
||||
|
||||
filtered := make([]*repos.Repo, 0, len(repos))
|
||||
for _, repo := range repos {
|
||||
if _, ok := allowed[repo.Type]; ok {
|
||||
filtered = append(filtered, repo)
|
||||
}
|
||||
}
|
||||
|
||||
return filtered
|
||||
}
|
||||
|
||||
// confirmClone asks for confirmation before cloning.
|
||||
func confirmClone(count int, target string) (bool, error) {
|
||||
confirmed := cli.Confirm(i18n.T("cmd.setup.wizard.confirm_clone", map[string]any{"Count": count, "Target": target}))
|
||||
|
|
|
|||
34
cmd/setup/cmd_wizard_test.go
Normal file
34
cmd/setup/cmd_wizard_test.go
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
package setup
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"dappco.re/go/core/scm/repos"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestFilterReposByTypes_Good(t *testing.T) {
|
||||
reposList := []*repos.Repo{
|
||||
{Name: "foundation-a", Type: "foundation"},
|
||||
{Name: "module-a", Type: "module"},
|
||||
{Name: "product-a", Type: "product"},
|
||||
}
|
||||
|
||||
filtered := filterReposByTypes(reposList, []string{"module", "product"})
|
||||
|
||||
require.Len(t, filtered, 2)
|
||||
require.Equal(t, "module-a", filtered[0].Name)
|
||||
require.Equal(t, "product-a", filtered[1].Name)
|
||||
}
|
||||
|
||||
func TestFilterReposByTypes_EmptyFilter_Good(t *testing.T) {
|
||||
reposList := []*repos.Repo{
|
||||
{Name: "foundation-a", Type: "foundation"},
|
||||
{Name: "module-a", Type: "module"},
|
||||
}
|
||||
|
||||
filtered := filterReposByTypes(reposList, nil)
|
||||
|
||||
require.Len(t, filtered, 2)
|
||||
require.Equal(t, reposList, filtered)
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue