Skip to content

Commit

Permalink
Add FXIOS-10031 [Menu] Redux for menu detail view controller (#22375)
Browse files Browse the repository at this point in the history
* add some state, sprinkle some salt

* honestly, this is probably iffy code

* Am I a Redux Jedi Master? No. But Definitely a Knight, now

* Redux improvements.... I think?!

* "taking care" of the top padding problem

* bad, messy middleware! go clean up your room

* Clear current tab info when it's not needed

* Remove comments

* Fix things

* Start again?

* I have no idea what's happening... maybe

* ladida

* Is redux broked?

* Remove unnecessary things

* renames to not confuse peeps

* oops

* typo

* fix padding

* recursion defeated

* load the correct menu

* fix the issue

* delete unused file BEGONE FOUL THING

* who even lets me work on this stuff, really

* i broke some tests, who even do I think I am

* this PR is close to defeating me

* make minor change and also missed rename what
  • Loading branch information
adudenamedruby authored Oct 7, 2024
1 parent 8b84b9b commit 762bc7f
Show file tree
Hide file tree
Showing 19 changed files with 475 additions and 195 deletions.
26 changes: 24 additions & 2 deletions BrowserKit/Sources/MenuKit/MenuTableView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@ public protocol MenuTableViewDataDelegate: AnyObject {
class MenuTableView: UIView,
UITableViewDelegate,
UITableViewDataSource, ThemeApplicable {
struct UX {
static let topPadding: CGFloat = 10
}

private var tableView: UITableView
private var menuData: [MenuSection]
private var theme: Theme?
Expand Down Expand Up @@ -54,11 +58,18 @@ class MenuTableView: UIView,
)
}

// MARK: - UITableViewDataSource
// MARK: - UITableView Methods
func numberOfSections(in tableView: UITableView) -> Int {
return menuData.count
}

func tableView(
_ tableView: UITableView,
heightForHeaderInSection section: Int
) -> CGFloat {
return section == 0 ? UX.topPadding : UITableView.automaticDimension
}

func tableView(
_ tableView: UITableView,
numberOfRowsInSection section: Int
Expand All @@ -80,7 +91,6 @@ class MenuTableView: UIView,
return cell
}

// MARK: - UITableViewDelegate Methods
func tableView(
_ tableView: UITableView,
didSelectRowAt indexPath: IndexPath
Expand All @@ -92,6 +102,18 @@ class MenuTableView: UIView,
}
}

func tableView(
_ tableView: UITableView,
viewForHeaderInSection section: Int
) -> UIView? {
if section == 0 {
let headerView = UIView()
headerView.backgroundColor = .clear
return headerView
}
return nil
}

func reloadTableView(with data: [MenuSection]) {
menuData = data
tableView.reloadData()
Expand Down
16 changes: 12 additions & 4 deletions firefox-ios/Client.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -612,13 +612,15 @@
812581962C947CD4003DFA7C /* MainMenuDetailsViewControllerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 812581952C947CD4003DFA7C /* MainMenuDetailsViewControllerTests.swift */; };
814A62462B587A3E00608195 /* DefaultThemeManagerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 814A62452B587A3E00608195 /* DefaultThemeManagerTests.swift */; };
814B60F52C90C0A0000997BE /* MainMenuConfigurationUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 814B60F42C90C0A0000997BE /* MainMenuConfigurationUtility.swift */; };
818302D82C988DFD009645EC /* MainMenuDetailState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 818302D72C988DFD009645EC /* MainMenuDetailState.swift */; };
8187561A2BB4618500DCD1F3 /* OnboardingViewControllerState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 818756192BB4618500DCD1F3 /* OnboardingViewControllerState.swift */; };
819656152C80C55300E62323 /* MainMenuState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 819656142C80C55300E62323 /* MainMenuState.swift */; };
819656172C80C6F300E62323 /* MenuKit in Frameworks */ = {isa = PBXBuildFile; productRef = 819656162C80C6F300E62323 /* MenuKit */; };
819656192C80ECFE00E62323 /* MainMenuMiddleware.swift in Sources */ = {isa = PBXBuildFile; fileRef = 819656182C80ECFE00E62323 /* MainMenuMiddleware.swift */; };
81A3F6F02C2DAEE200BDD86B /* MainMenuCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81A3F6EF2C2DAEE200BDD86B /* MainMenuCoordinator.swift */; };
81A3F6F22C2DB00900BDD86B /* MainMenuViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81A3F6F12C2DB00900BDD86B /* MainMenuViewController.swift */; };
81C3E6092C93261A00A19A5A /* MainMenuDetailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81C3E6082C93261A00A19A5A /* MainMenuDetailViewController.swift */; };
81C297F92CA3117200B8BE78 /* MenuNavigationDestination.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81C297F82CA3117200B8BE78 /* MenuNavigationDestination.swift */; };
81C3E6092C93261A00A19A5A /* MainMenuDetailsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81C3E6082C93261A00A19A5A /* MainMenuDetailsViewController.swift */; };
81CAE4DB2B1A2C220040C78A /* BrowserViewControllerState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81CAE4DA2B1A2C220040C78A /* BrowserViewControllerState.swift */; };
81DAB2F12C88F02500F4BE98 /* MainMenuViewControllerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81DAB2F02C88F02500F4BE98 /* MainMenuViewControllerTests.swift */; };
81DAB2F32C88F14400F4BE98 /* MainMenuCoordinatorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81DAB2F22C88F14400F4BE98 /* MainMenuCoordinatorTests.swift */; };
Expand Down Expand Up @@ -6658,14 +6660,16 @@
81584D62B22049E40FC78F93 /* sl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sl; path = sl.lproj/3DTouchActions.strings; sourceTree = "<group>"; };
816D458CBEAE2A6721134028 /* dsb */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = dsb; path = dsb.lproj/ClearPrivateData.strings; sourceTree = "<group>"; };
81754147A06566E64C025F70 /* nn */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nn; path = "nn.lproj/Default Browser.strings"; sourceTree = "<group>"; };
818302D72C988DFD009645EC /* MainMenuDetailState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainMenuDetailState.swift; sourceTree = "<group>"; };
818756192BB4618500DCD1F3 /* OnboardingViewControllerState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingViewControllerState.swift; sourceTree = "<group>"; };
819656142C80C55300E62323 /* MainMenuState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainMenuState.swift; sourceTree = "<group>"; };
819656182C80ECFE00E62323 /* MainMenuMiddleware.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainMenuMiddleware.swift; sourceTree = "<group>"; };
81A244F4A7C6FC8976DC21F0 /* br */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = br; path = br.lproj/InfoPlist.strings; sourceTree = "<group>"; };
81A3F6EF2C2DAEE200BDD86B /* MainMenuCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainMenuCoordinator.swift; sourceTree = "<group>"; };
81A3F6F12C2DB00900BDD86B /* MainMenuViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainMenuViewController.swift; sourceTree = "<group>"; };
81C14765AA7C25DF1817AC04 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/Today.strings; sourceTree = "<group>"; };
81C3E6082C93261A00A19A5A /* MainMenuDetailViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainMenuDetailViewController.swift; sourceTree = "<group>"; };
81C297F82CA3117200B8BE78 /* MenuNavigationDestination.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuNavigationDestination.swift; sourceTree = "<group>"; };
81C3E6082C93261A00A19A5A /* MainMenuDetailsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainMenuDetailsViewController.swift; sourceTree = "<group>"; };
81CAE4DA2B1A2C220040C78A /* BrowserViewControllerState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BrowserViewControllerState.swift; sourceTree = "<group>"; };
81DAB2F02C88F02500F4BE98 /* MainMenuViewControllerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainMenuViewControllerTests.swift; sourceTree = "<group>"; };
81DAB2F22C88F14400F4BE98 /* MainMenuCoordinatorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainMenuCoordinatorTests.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -10467,14 +10471,16 @@
819656142C80C55300E62323 /* MainMenuState.swift */,
819656182C80ECFE00E62323 /* MainMenuMiddleware.swift */,
81F617C82C8755AB003799BF /* MainMenuAction.swift */,
81C297F82CA3117200B8BE78 /* MenuNavigationDestination.swift */,
818302D72C988DFD009645EC /* MainMenuDetailState.swift */,
);
path = Redux;
sourceTree = "<group>";
};
81F617C72C875583003799BF /* Views */ = {
isa = PBXGroup;
children = (
81C3E6082C93261A00A19A5A /* MainMenuDetailViewController.swift */,
81C3E6082C93261A00A19A5A /* MainMenuDetailsViewController.swift */,
81A3F6F12C2DB00900BDD86B /* MainMenuViewController.swift */,
);
path = Views;
Expand Down Expand Up @@ -15352,6 +15358,7 @@
8A4593C72BF7BECA002758DE /* MicrosurveyTableViewCell.swift in Sources */,
8A07910F278F62F2005529CB /* AdjustHelper.swift in Sources */,
967A028E28FA026F003C35E3 /* SceneDelegate.swift in Sources */,
81C297F92CA3117200B8BE78 /* MenuNavigationDestination.swift in Sources */,
C8B07A4128199500000AFCE7 /* NimbusFlaggableFeature.swift in Sources */,
0B62EFD21AD63CD100ACB9CD /* Clearables.swift in Sources */,
0AFF7F6C2C7C7BBA00265214 /* CertificatesCell.swift in Sources */,
Expand Down Expand Up @@ -15622,6 +15629,7 @@
8C29627C2B1F473800571655 /* AdEventsResponse.swift in Sources */,
962021E128B8078400BDF3D9 /* ContextualHintCopyProvider.swift in Sources */,
8AE1E1D227B1ADC40024C45E /* TopBottomInterchangeable.swift in Sources */,
818302D82C988DFD009645EC /* MainMenuDetailState.swift in Sources */,
8C2937712BF79F0300146613 /* EditAddressViewController.swift in Sources */,
8A7653BD28A2C61D00924ABF /* PocketDataAdaptor.swift in Sources */,
8A093D7D2A4B3E4F0099ABA5 /* DebugSettingsDelegate.swift in Sources */,
Expand Down Expand Up @@ -15996,7 +16004,7 @@
9609F4CA26B57CE800F81493 /* Calendar+Extension.swift in Sources */,
E663D5781BB341C4001EF30E /* ToggleButton.swift in Sources */,
DFA51481275FFEE500266AA0 /* HistoryHighlightsManager.swift in Sources */,
81C3E6092C93261A00A19A5A /* MainMenuDetailViewController.swift in Sources */,
81C3E6092C93261A00A19A5A /* MainMenuDetailsViewController.swift in Sources */,
8ADC2A182A33775F00543DAA /* FxASignInViewParameters.swift in Sources */,
EBA3B2D22268F57E00728BDB /* BadgeWithBackdrop.swift in Sources */,
8AB5958828413F6C0090F4AE /* BookmarksCell.swift in Sources */,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,20 @@ struct MainMenuConfigurationUtility: Equatable {
static let saveAsPDF = StandardImageIdentifiers.Large.folder
}

func generateMenuElements(
public func generateMenuElements(
with configuration: MainMenuTabInfo?,
for viewType: MainMenuDetailsViewType?,
and uuid: WindowUUID
) -> [MenuSection] {
switch viewType {
case .tools: return getToolsSubmenu(with: uuid)
case .save: return getSaveSubmenu(with: uuid)
default: return getMainMenuElements(with: uuid, andInfo: configuration)
}
}

// MARK: - Main Menu
private func getMainMenuElements(
with uuid: WindowUUID,
andInfo configuration: MainMenuTabInfo?
) -> [MenuSection] {
Expand Down Expand Up @@ -76,8 +89,8 @@ struct MainMenuConfigurationUtility: Equatable {
store.dispatch(
MainMenuAction(
windowUUID: uuid,
actionType: MainMenuActionType.show,
navigationDestination: .newTab
actionType: MainMenuActionType.closeMenuAndNavigateToDestination,
navigationDestination: MenuNavigationDestination(.newTab)
)
)
}
Expand All @@ -94,8 +107,8 @@ struct MainMenuConfigurationUtility: Equatable {
store.dispatch(
MainMenuAction(
windowUUID: uuid,
actionType: MainMenuActionType.show,
navigationDestination: .newPrivateTab
actionType: MainMenuActionType.closeMenuAndNavigateToDestination,
navigationDestination: MenuNavigationDestination(.newPrivateTab)
)
)
}
Expand Down Expand Up @@ -142,8 +155,8 @@ struct MainMenuConfigurationUtility: Equatable {
store.dispatch(
MainMenuAction(
windowUUID: uuid,
actionType: MainMenuActionType.show,
navigationDestination: .findInPage
actionType: MainMenuActionType.closeMenuAndNavigateToDestination,
navigationDestination: MenuNavigationDestination(.findInPage)
)
)
}
Expand All @@ -161,9 +174,8 @@ struct MainMenuConfigurationUtility: Equatable {
store.dispatch(
MainMenuAction(
windowUUID: uuid,
actionType: MainMenuActionType.show,
navigationDestination: .detailsView(with: getToolsSubmenu(with: uuid),
title: .MainMenu.ToolsSection.Tools)
actionType: MainMenuActionType.showDetailsView,
changeMenuViewTo: .tools
)
)
}
Expand All @@ -181,9 +193,8 @@ struct MainMenuConfigurationUtility: Equatable {
store.dispatch(
MainMenuAction(
windowUUID: uuid,
actionType: MainMenuActionType.show,
navigationDestination: .detailsView(with: getSaveSubmenu(with: uuid),
title: .MainMenu.ToolsSection.Save)
actionType: MainMenuActionType.showDetailsView,
changeMenuViewTo: .save
)
)
}
Expand Down Expand Up @@ -213,6 +224,7 @@ struct MainMenuConfigurationUtility: Equatable {
}
}

// MARK: - Submenus
private func getToolsSubmenu(with uuid: WindowUUID) -> [MenuSection] {
return [
MenuSection(
Expand Down Expand Up @@ -435,8 +447,8 @@ struct MainMenuConfigurationUtility: Equatable {
store.dispatch(
MainMenuAction(
windowUUID: uuid,
actionType: MainMenuActionType.show,
navigationDestination: .bookmarks
actionType: MainMenuActionType.closeMenuAndNavigateToDestination,
navigationDestination: MenuNavigationDestination(.bookmarks)
)
)
}
Expand All @@ -453,8 +465,8 @@ struct MainMenuConfigurationUtility: Equatable {
store.dispatch(
MainMenuAction(
windowUUID: uuid,
actionType: MainMenuActionType.show,
navigationDestination: .history
actionType: MainMenuActionType.closeMenuAndNavigateToDestination,
navigationDestination: MenuNavigationDestination(.history)
)
)
}
Expand All @@ -471,8 +483,8 @@ struct MainMenuConfigurationUtility: Equatable {
store.dispatch(
MainMenuAction(
windowUUID: uuid,
actionType: MainMenuActionType.show,
navigationDestination: .downloads
actionType: MainMenuActionType.closeMenuAndNavigateToDestination,
navigationDestination: MenuNavigationDestination(.downloads)
)
)
}
Expand All @@ -489,8 +501,8 @@ struct MainMenuConfigurationUtility: Equatable {
store.dispatch(
MainMenuAction(
windowUUID: uuid,
actionType: MainMenuActionType.show,
navigationDestination: .passwords
actionType: MainMenuActionType.closeMenuAndNavigateToDestination,
navigationDestination: MenuNavigationDestination(.passwords)
)
)
}
Expand All @@ -516,8 +528,8 @@ struct MainMenuConfigurationUtility: Equatable {
store.dispatch(
MainMenuAction(
windowUUID: uuid,
actionType: MainMenuActionType.show,
navigationDestination: .customizeHomepage
actionType: MainMenuActionType.closeMenuAndNavigateToDestination,
navigationDestination: MenuNavigationDestination(.customizeHomepage)
)
)
}
Expand All @@ -537,8 +549,11 @@ struct MainMenuConfigurationUtility: Equatable {
store.dispatch(
MainMenuAction(
windowUUID: uuid,
actionType: MainMenuActionType.show,
navigationDestination: .goToURL(SupportUtils.URLForWhatsNew)
actionType: MainMenuActionType.closeMenuAndNavigateToDestination,
navigationDestination: MenuNavigationDestination(
.goToURL,
urlToVisit: SupportUtils.URLForWhatsNew
)
)
)
}
Expand All @@ -558,8 +573,11 @@ struct MainMenuConfigurationUtility: Equatable {
store.dispatch(
MainMenuAction(
windowUUID: uuid,
actionType: MainMenuActionType.show,
navigationDestination: .goToURL(SupportUtils.URLForGetHelp)
actionType: MainMenuActionType.closeMenuAndNavigateToDestination,
navigationDestination: MenuNavigationDestination(
.goToURL,
urlToVisit: SupportUtils.URLForGetHelp
)
)
)
}
Expand All @@ -576,8 +594,8 @@ struct MainMenuConfigurationUtility: Equatable {
store.dispatch(
MainMenuAction(
windowUUID: uuid,
actionType: MainMenuActionType.show,
navigationDestination: .settings
actionType: MainMenuActionType.closeMenuAndNavigateToDestination,
navigationDestination: MenuNavigationDestination(.settings)
)
)
}
Expand Down
Loading

0 comments on commit 762bc7f

Please sign in to comment.