As I was looking to implement the new Spaces feature (see
forem/forem#16842), I began looking at how to adjust the admin menu. I
found the Menu and AdminMenu. I wanted to add the "spaces" item under
the `:content_manager` scope. Looking at the implementation, I saw I
would need some additional branching logic.
To get an understanding of the implementation, I chose factor towards
classes.
This refactor does a few things:
1) Clarifies a method name (e.g. "children?" becomes
"has_multiple_children?")
2) Adds some tests of the menu implementation.
3) Removes deeply nested hashs in favor of first class objects.
4) Removes a complex method for determining menu visibility, instead
favoring a method that either takes a boolean OR a lambda.
There are further refactors to consider, especially in regards to the
helper methods and some of the coercion of strings into different
formats. But this refactor gets me the part I most am interested in:
Making it easier to specify a menu item as visible or not.
* Escape periods and display the group name properly
* Rename method to dom_safe_name and move to admin helper
* Replace beginning of string digit with underscore then digit
* chore: remove current_admin routes file
* feat: move all the admin routes into the admin file
* chore: remove conditionals for the sidebar and tabbed navbar
* remove some more notes where we use the admin_restructure feature flag
* chore: amend the tests now that the old routes and the admin_restructure flag are removed
* chore: remove more references to the admin_restructure flag
* chore: fix the tests
* chore: remove sidebar_spec
* chore: add slash back
* chore: comment it out for now whilst I try and figure out why its not passing
* feat: make the sidebar more dynamic
* refactor: use the action in the same controller instead of the whole path
* feat: remove hardcoded routes
* feat: move routes into file
* feat: use rails 6 draw for the admin routes
* add a helper method
* oops: fix super
* feat: add the hacky helper methods :( )
* WIP: created different path helpers for the new routes and point the old helpers to the new ones if the FF is toggled
* feat: update the module
* chore: add new paths
* feat: change link_to's use paths instead
* feat: feedback_messages to scoped admin route
* chore: update the feature flag urls helpers
* feat: feedback_messages issue
* chore: remove all the workarounds
* chore: rubucop
* fix: oops remove helper
* chore: comment out the tests that touch the tabbed navbar which is affected by the rails application needing to be reloaded
* feat: ensure that we chcek if the db table exists
* feat: add the nested sidebar with some elements
* feat: create a tabbed nav item menu
* feat: add the tabbed nav_item partial to the views that need tabbed nav items
* fix: change variable back
* feat: style the sidebar a bit more
* chore: add some more styles
* feat: add a spec for the nested navigational items
* refactor: a more dynamic tabbed admin helper
* feat: add some more nav items
* fix: controller for reports
* refactor: shorthand if statement
* chore: add the whitespace back
* refactor: rubocop fixes
* chore: use any
* chore: remove whitespace
* refactor: rename the variable
* refactor: use a DSL style admin helper
* chore: variable renaming and routes
* rubocop: fixes
* refactor: move files to more apt places
* chore: keep overview as it was previously
* Update app/views/admin/secrets/index.html.erb
Co-authored-by: Michael Kohl <me@citizen428.net>
* Update app/views/admin/shared/_tabbed_navbar.erb
Co-authored-by: Michael Kohl <me@citizen428.net>
* Update app/views/admin/badges/index.html.erb
Co-authored-by: Michael Kohl <me@citizen428.net>
* chore: disable blocklength
* refactor: move the logic to the model instead of in the view
* chore: remove get_ prefix
* chore: move the request mangling to a helper that finds the controller and scope
* Update app/helpers/admin_helper.rb
Co-authored-by: rhymes <rhymes@hey.com>
* Update app/helpers/admin_helper.rb
Co-authored-by: rhymes <rhymes@hey.com>
* refactor: Address feedback
* oops
* oops use tr
* feat: update specs
* fix: badge achievements
Co-authored-by: Michael Kohl <me@citizen428.net>
Co-authored-by: rhymes <rhymes@hey.com>
* feat: add tech_menu_items to the admin helper
* feat: add the tech resources to /admin if the user has the correct role
* feat: use a partial that will show the data update scripts in the navbar with the correct role
* chore: use a method
* test: chore
* feat: setup the data to need permission single_resource_admin with DataUpdateScript permissions
* chore: remove the if current_user.tech_admin?
* chore: remove line
* feat: add a DUS for single_resource_admin roles to be added to users with tech_admin roles
* fix: move all teh routes outside of the block where tech_admin is required.
* chore: use the constant and remove the method
* chore: add a comma
* Update config/routes.rb
Co-authored-by: rhymes <rhymes@hey.com>
* feat: add a tech admin role to the dropdown
* feat: add the tech admin role along with single_resource_admin
* chore: oops
* refactor: amend the spec to use let blocks
Co-authored-by: rhymes <rhymes@hey.com>
* Add feature flag for profile admin section
* Fix spec description
* Also remove profile admin link from sidebar
* Disable profile admin routes based on feature flag
* Minor fixes
* Remove unnecessary object from spec
* Refactor AdminHelper
* Fix specs
* Fix remaining specs