@@ -38,10 +38,6 @@ Launches the Module Explorer and filters the initial list to show only modules
3838named "BurnToast".
3939
4040. NOTES
41- This function depends on several cmdlets from a PowerShell module providing Spectre.Console integration
42- (e.g., Write-SpectreFigletText, Read-SpectreSelection, Write-SpectreHost, Write-SpectreRule, Read-SpectrePause, Get-SpectreEscapedText)
43- for its user interface. Ensure this module and its dependencies are installed and available.
44-
4541Upon selecting a module, this function calls `Show-ModuleCommandViewer` to display
4642the commands within that module.
4743
@@ -57,7 +53,8 @@ This function does not accept input from the pipeline.
5753
5854. OUTPUTS
5955None
60- This function does not return any objects to the pipeline. It provides an interactive display in the console.
56+ This function does not return any objects to the pipeline.
57+ It provides an interactive display in the console.
6158
6259. LINK
6360None
@@ -71,42 +68,52 @@ function Show-ModuleExplorer {
7168 try {
7269 $moduleLookup = @ {} # Initialize hashtable to map display names to module objects
7370 $minModulesForCategory = 10
71+ $hideGroupedModules = $false
7472
7573 while ($true ) {
7674 Clear-Host
7775 Write-SpectreFigletText - Text " Module Explorer" - Alignment " Center"
76+
7877 $moduleQuery = @ { ListAvailable = $true }
7978 if ($Filter ) {
8079 $moduleQuery.Name = $Filter
8180 }
82- $availableModules = Get-Module @moduleQuery | Select-Object Name, Version, Path, ModuleBase, RootModule, @ {Name = ' Prefix' ; Expression = { ($_.Name -split ' \.' )[0 ] } } | Sort-Object Name
83- $categories = $availableModules | Group-object Prefix | Where-object Count -ge $minModulesForCategory
8481
85- if ($hideBigModules ) {
82+ Invoke-SpectreCommandWithStatus - ScriptBlock { $availableModules = Get-Module @moduleQuery |
83+ Select-Object Name, Version, Path, ModuleBase, RootModule,
84+ @ {Name = ' Prefix' ; Expression = { ($_.Name -split ' \.' )[0 ] } } |
85+ Sort-Object Name
86+ $availableModules | Out-Null
87+ } - Title " Loading PowerShell Modules..." - Spinner " Shark"
88+
89+ $categories = $availableModules |
90+ Group-object Prefix |
91+ Where-object Count -ge $minModulesForCategory
92+
93+ $exitChoiceString = " [mediumpurple3_1]<-- Exit[/]"
94+ $refreshChoiceString = " [steelblue1_1]Refresh List[/]"
95+
96+ if ($hideGroupedModules ) {
8697 $availableModules = $availableModules |
8798 Where-Object { $_.Prefix -notin $categories.Name } |
8899 Sort-Object Name
100+ $groupedModulesChoiceString = " [grey]Show Grouped Modules[/]"
101+ } else {
102+ $groupedModulesChoiceString = " [grey]Hide Grouped Modules[/]"
89103 }
90104
91-
92105 if (-not $availableModules ) {
93106 Write-SpectreHost " [bold red]No PowerShell modules found.[/]"
94107 Read-SpectrePause - Message " [grey]Press Enter to continue...[/]" - NoNewline
95108 return
96109 }
97110
98- $exitChoiceString = " [cyan]<-- Exit[/]"
99- $refreshChoiceString = " [cyan]Refresh List[/]"
100- $hideGroupedModulesString = " [grey]Toggle Grouped Modules[/]"
101111 # Reset the main loop if modules changes (install/remove)
102112 $moduleLookup.Clear ()
103- $moduleChoices = @ ($exitChoiceString , $refreshChoiceString , $hideGroupedModulesString )
104-
113+ $moduleChoices = @ ($exitChoiceString , $refreshChoiceString , $groupedModulesChoiceString )
105114 $processedDisplayNames = @ {}
106115
107116 foreach ($module in $availableModules ) {
108-
109-
110117 $versionString = if ($module.Version ) { " v$ ( $module.Version ) " } else { " Version N/A" }
111118 $displayName = " $ ( $module.Name ) ($versionString )"
112119
@@ -118,9 +125,15 @@ function Show-ModuleExplorer {
118125 }
119126
120127 $promptTitle = " [yellow bold]Select a PowerShell Module to Explore (or Exit):[/]"
121- Write-SpectreRule - Title " [grey] Installed Modules: $ ( $availableModules.Count ) [/]" - Alignment Center
122- $selectedModuleDisplay = Read-SpectreSelection - Message $promptTitle - PageSize 15 - Choices $moduleChoices - EnableSearch
128+ Write-SpectreRule - Title " [grey]Available Modules: $ ( $availableModules.Count ) [/]" - Alignment Center
129+ $spectreSelectionQuery = @ {
130+ Message = $promptTitle ;
131+ PageSize = 15 ;
132+ Choices = $moduleChoices ;
133+ EnableSearch = $true
134+ }
123135
136+ $selectedModuleDisplay = Read-SpectreSelection @spectreSelectionQuery
124137
125138 if (-not $selectedModuleDisplay -or $selectedModuleDisplay -eq $exitChoiceString ) {
126139 Write-SpectreHost " [yellow]Exiting Module Explorer.[/]"
@@ -132,36 +145,37 @@ function Show-ModuleExplorer {
132145 continue
133146 }
134147
135- if ($selectedModuleDisplay -eq $hideGroupedModulesString ) {
148+ if ($selectedModuleDisplay -eq $groupedModulesChoiceString ) {
136149 Write-SpectreHost " [italic green]Toggling the large modules...[/]"
137- if ($hideBigModules -eq $true ) {
150+ if ($hideGroupedModules -eq $true ) {
138151 Write-SpectreHost " [italic green]Showing the large modules...[/]"
139- $hideBigModules = $false
152+ $hideGroupedModules = $false
140153 }
141154 else {
142- $hideBigModules = $true
155+ $hideGroupedModules = $true
143156 Write-SpectreHost " [italic green]Hiding the large modules...[/]"
144157 }
145158 continue
146159 }
147-
160+
148161 # Use the lookup table
149162 $selectedModuleObject = $moduleLookup [$selectedModuleDisplay ]
150163
151164 if (-not $selectedModuleObject ) {
152165 # This condition should not be met if $selectedModuleDisplay is from $moduleChoices
153- Write-SpectreHost " [bold red]Error: Could not retrieve details for selected module: '$ ( $selectedModuleDisplay | Get-SpectreEscapedText ) '. This is unexpected.[/]"
166+ Write-SpectreHost " [bold red]Error: Could not retrieve details for selected module: '
167+ $ ( $selectedModuleDisplay | Get-SpectreEscapedText ) '. This is unexpected.[/]"
154168 Read-SpectrePause - Message " [grey]Press Enter to continue...[/]" - NoNewline
155169 continue
156170 }
157171
158172 Clear-Host
159173 Show-ModuleCommandViewer - SelectedModule $selectedModuleObject
160-
161174 } # End of main loop
162175 }
163176 catch {
164- Write-SpectreHost " [bold red]An unexpected error occurred in Module Explorer: $ ( $_.Exception.ToString () | Get-SpectreEscapedText ) [/]"
177+ Write-SpectreHost " [bold red]An unexpected error occurred in Module Explorer:
178+ $ ( $_.Exception.ToString () | Get-SpectreEscapedText ) [/]"
165179 Read-SpectrePause - Message " [grey]Press Enter to acknowledge error and exit...[/]" - NoNewline
166180 }
167181 finally {
0 commit comments