mirror of
https://github.com/rbalsleyMSFT/FFU.git
synced 2026-06-14 02:09:35 -06:00
Refactor UpdateInstallApps logic to use state object
- Moved the UpdateInstallAppsBasedOnUpdates function to the Controls section of the uiState object for better encapsulation. - Updated the function to accept a state parameter, reducing reliance on the script scope. - Adjusted event handlers to pass the state object, ensuring consistent access to UI state. - Removed the previous definition of the function from the script scope to streamline the code.
This commit is contained in:
@@ -37,7 +37,8 @@ $UserAgent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTM
|
|||||||
$script:uiState = [PSCustomObject]@{
|
$script:uiState = [PSCustomObject]@{
|
||||||
Window = $null;
|
Window = $null;
|
||||||
Controls = @{
|
Controls = @{
|
||||||
featureCheckBoxes = @{} # Moved from script scope
|
featureCheckBoxes = @{}; # Moved from script scope
|
||||||
|
UpdateInstallAppsBasedOnUpdates = $null # Placeholder for the scriptblock
|
||||||
};
|
};
|
||||||
Data = @{
|
Data = @{
|
||||||
allDriverModels = [System.Collections.Generic.List[PSCustomObject]]::new();
|
allDriverModels = [System.Collections.Generic.List[PSCustomObject]]::new();
|
||||||
@@ -826,26 +827,6 @@ function BuildFeaturesGrid {
|
|||||||
$parent.Children.Add($featuresGrid) | Out-Null
|
$parent.Children.Add($featuresGrid) | Out-Null
|
||||||
}
|
}
|
||||||
|
|
||||||
# Define the function in script scope to update Install Apps based on Updates tab
|
|
||||||
$script:uiState.Controls.UpdateInstallAppsBasedOnUpdates = {
|
|
||||||
$anyUpdateChecked = $window.FindName('chkUpdateLatestDefender').IsChecked -or $window.FindName('chkUpdateEdge').IsChecked -or $window.FindName('chkUpdateOneDrive').IsChecked -or $window.FindName('chkUpdateLatestMSRT').IsChecked
|
|
||||||
if ($anyUpdateChecked) {
|
|
||||||
if (-not $script:uiState.Flags.installAppsForcedByUpdates) {
|
|
||||||
$script:uiState.Flags.prevInstallAppsStateBeforeUpdates = $window.FindName('chkInstallApps').IsChecked
|
|
||||||
$script:uiState.Flags.installAppsForcedByUpdates = $true
|
|
||||||
}
|
|
||||||
$window.FindName('chkInstallApps').IsChecked = $true
|
|
||||||
$window.FindName('chkInstallApps').IsEnabled = $false
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
if ($script:uiState.Flags.installAppsForcedByUpdates) {
|
|
||||||
$window.FindName('chkInstallApps').IsChecked = $script:uiState.Flags.prevInstallAppsStateBeforeUpdates
|
|
||||||
$script:uiState.Flags.installAppsForcedByUpdates = $false
|
|
||||||
$script:uiState.Flags.prevInstallAppsStateBeforeUpdates = $null
|
|
||||||
}
|
|
||||||
$window.FindName('chkInstallApps').IsEnabled = $true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
# -----------------------------------------------------------------------------
|
# -----------------------------------------------------------------------------
|
||||||
# SECTION: Winget UI
|
# SECTION: Winget UI
|
||||||
# -----------------------------------------------------------------------------
|
# -----------------------------------------------------------------------------
|
||||||
@@ -2181,38 +2162,40 @@ $window.Add_Loaded({
|
|||||||
# Updates/InstallApps interplay (Keep existing logic)
|
# Updates/InstallApps interplay (Keep existing logic)
|
||||||
$script:uiState.Flags.installAppsForcedByUpdates = $false
|
$script:uiState.Flags.installAppsForcedByUpdates = $false
|
||||||
$script:uiState.Flags.prevInstallAppsStateBeforeUpdates = $null
|
$script:uiState.Flags.prevInstallAppsStateBeforeUpdates = $null
|
||||||
|
# Define the scriptblock within the Loaded event and assign it to the state object
|
||||||
$script:uiState.Controls.UpdateInstallAppsBasedOnUpdates = {
|
$script:uiState.Controls.UpdateInstallAppsBasedOnUpdates = {
|
||||||
$anyUpdateChecked = $window.FindName('chkUpdateLatestDefender').IsChecked -or $window.FindName('chkUpdateEdge').IsChecked -or $window.FindName('chkUpdateOneDrive').IsChecked -or $window.FindName('chkUpdateLatestMSRT').IsChecked
|
param($State) # Pass state object to avoid using $script: scope inside
|
||||||
|
$anyUpdateChecked = $State.Controls.chkUpdateLatestDefender.IsChecked -or $State.Controls.chkUpdateEdge.IsChecked -or $State.Controls.chkUpdateOneDrive.IsChecked -or $State.Controls.chkUpdateLatestMSRT.IsChecked
|
||||||
if ($anyUpdateChecked) {
|
if ($anyUpdateChecked) {
|
||||||
if (-not $script:uiState.Flags.installAppsForcedByUpdates) {
|
if (-not $State.Flags.installAppsForcedByUpdates) {
|
||||||
$script:uiState.Flags.prevInstallAppsStateBeforeUpdates = $window.FindName('chkInstallApps').IsChecked
|
$State.Flags.prevInstallAppsStateBeforeUpdates = $State.Controls.chkInstallApps.IsChecked
|
||||||
$script:uiState.Flags.installAppsForcedByUpdates = $true
|
$State.Flags.installAppsForcedByUpdates = $true
|
||||||
}
|
}
|
||||||
$window.FindName('chkInstallApps').IsChecked = $true
|
$State.Controls.chkInstallApps.IsChecked = $true
|
||||||
$window.FindName('chkInstallApps').IsEnabled = $false
|
$State.Controls.chkInstallApps.IsEnabled = $false
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if ($script:uiState.Flags.installAppsForcedByUpdates) {
|
if ($State.Flags.installAppsForcedByUpdates) {
|
||||||
$window.FindName('chkInstallApps').IsChecked = $script:uiState.Flags.prevInstallAppsStateBeforeUpdates
|
$State.Controls.chkInstallApps.IsChecked = $State.Flags.prevInstallAppsStateBeforeUpdates
|
||||||
$script:uiState.Flags.installAppsForcedByUpdates = $false
|
$State.Flags.installAppsForcedByUpdates = $false
|
||||||
$script:uiState.Flags.prevInstallAppsStateBeforeUpdates = $null
|
$State.Flags.prevInstallAppsStateBeforeUpdates = $null
|
||||||
}
|
}
|
||||||
# Only re-enable InstallApps if not forced by Office
|
# Only re-enable InstallApps if not forced by Office
|
||||||
if (-not $script:uiState.Controls.chkInstallOffice.IsChecked) {
|
if (-not $State.Controls.chkInstallOffice.IsChecked) {
|
||||||
$window.FindName('chkInstallApps').IsEnabled = $true
|
$State.Controls.chkInstallApps.IsEnabled = $true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$window.FindName('chkUpdateLatestDefender').Add_Checked({ & $script:uiState.Controls.UpdateInstallAppsBasedOnUpdates })
|
$window.FindName('chkUpdateLatestDefender').Add_Checked({ & $script:uiState.Controls.UpdateInstallAppsBasedOnUpdates -State $script:uiState })
|
||||||
$window.FindName('chkUpdateLatestDefender').Add_Unchecked({ & $script:uiState.Controls.UpdateInstallAppsBasedOnUpdates })
|
$window.FindName('chkUpdateLatestDefender').Add_Unchecked({ & $script:uiState.Controls.UpdateInstallAppsBasedOnUpdates -State $script:uiState })
|
||||||
$window.FindName('chkUpdateEdge').Add_Checked({ & $script:uiState.Controls.UpdateInstallAppsBasedOnUpdates })
|
$window.FindName('chkUpdateEdge').Add_Checked({ & $script:uiState.Controls.UpdateInstallAppsBasedOnUpdates -State $script:uiState })
|
||||||
$window.FindName('chkUpdateEdge').Add_Unchecked({ & $script:uiState.Controls.UpdateInstallAppsBasedOnUpdates })
|
$window.FindName('chkUpdateEdge').Add_Unchecked({ & $script:uiState.Controls.UpdateInstallAppsBasedOnUpdates -State $script:uiState })
|
||||||
$window.FindName('chkUpdateOneDrive').Add_Checked({ & $script:uiState.Controls.UpdateInstallAppsBasedOnUpdates })
|
$window.FindName('chkUpdateOneDrive').Add_Checked({ & $script:uiState.Controls.UpdateInstallAppsBasedOnUpdates -State $script:uiState })
|
||||||
$window.FindName('chkUpdateOneDrive').Add_Unchecked({ & $script:uiState.Controls.UpdateInstallAppsBasedOnUpdates })
|
$window.FindName('chkUpdateOneDrive').Add_Unchecked({ & $script:uiState.Controls.UpdateInstallAppsBasedOnUpdates -State $script:uiState })
|
||||||
$window.FindName('chkUpdateLatestMSRT').Add_Checked({ & $script:uiState.Controls.UpdateInstallAppsBasedOnUpdates })
|
$window.FindName('chkUpdateLatestMSRT').Add_Checked({ & $script:uiState.Controls.UpdateInstallAppsBasedOnUpdates -State $script:uiState })
|
||||||
$window.FindName('chkUpdateLatestMSRT').Add_Unchecked({ & $script:uiState.Controls.UpdateInstallAppsBasedOnUpdates })
|
$window.FindName('chkUpdateLatestMSRT').Add_Unchecked({ & $script:uiState.Controls.UpdateInstallAppsBasedOnUpdates -State $script:uiState })
|
||||||
# Initial check for Updates/InstallApps state
|
# Initial check for Updates/InstallApps state
|
||||||
& $script:uiState.Controls.UpdateInstallAppsBasedOnUpdates
|
& $script:uiState.Controls.UpdateInstallAppsBasedOnUpdates -State $script:uiState
|
||||||
|
|
||||||
# CU interplay (Keep existing logic)
|
# CU interplay (Keep existing logic)
|
||||||
$script:uiState.Controls.chkLatestCU.Add_Checked({ $script:uiState.Controls.chkPreviewCU.IsEnabled = $false })
|
$script:uiState.Controls.chkLatestCU.Add_Checked({ $script:uiState.Controls.chkPreviewCU.IsEnabled = $false })
|
||||||
|
|||||||
Reference in New Issue
Block a user