Skip to content

feat(admin-ui): implement bottom navigation bar for the mobile view (#2917)#2918

Merged
moabu merged 3 commits into
mainfrom
admin-ui-issue-2917
Jul 7, 2026
Merged

feat(admin-ui): implement bottom navigation bar for the mobile view (#2917)#2918
moabu merged 3 commits into
mainfrom
admin-ui-issue-2917

Conversation

@faisalsiddique4400

@faisalsiddique4400 faisalsiddique4400 commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

feat(admin-ui): implement bottom navigation bar for the mobile view (#2917)

Summary

This PR introduces a bottom navigation bar for the mobile view of the Admin UI to improve navigation and accessibility on smaller screens.

The new navigation provides quick access to primary application sections while complementing the existing responsive layout. The implementation follows the Admin UI design system and maintains a consistent user experience across mobile devices.


Fix Summary

  • Added a bottom navigation bar for mobile devices
  • Implemented responsive rendering based on screen size
  • Added quick access to primary application navigation items
  • Integrated the bottom navigation with the existing routing system
  • Highlighted the active navigation item based on the current route
  • Preserved existing desktop and tablet navigation behavior
  • Improved usability and navigation experience on mobile devices
  • Maintained consistency with the Admin UI design language

Verification

npm run check:all

passes successfully.

  • Verified the bottom navigation is displayed only in the mobile view
  • Verified navigation items route to the correct pages
  • Verified the active navigation state updates correctly
  • Verified desktop and tablet navigation remain unchanged
  • Verified responsive behavior across supported screen sizes
  • Verified no regressions in existing navigation flows

🔗 Ticket

Closes: #2917

Summary by CodeRabbit

  • New Features
    • Added a mobile bottom navigation bar with a slide-up “More” menu and expandable/drill-down navigation.
    • Added new mobile navigation UI labels across supported languages.
  • Bug Fixes
    • Improved mobile layout spacing to prevent content from being covered by the fixed bottom navigation (including safe-area support).
    • Fully hides the desktop sidebar on small screens.
  • Tests
    • Added/extended unit and interaction tests for the mobile bottom navigation and its menus.
  • Chores
    • Removed React Query devtools from the app entrypoint in production.

…2917)

Signed-off-by: faisalsiddique4400 <faisalsiddique10886@gmail.com>
@mo-auto mo-auto added comp-admin-ui Component affected by issue or PR kind-feature Issue or PR is a new feature request labels Jul 7, 2026
@coderabbitai

coderabbitai Bot commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Warning

Review limit reached

@faisalsiddique4400, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 16 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 16c3a913-7396-4f3e-998a-42fac29ed81d

📥 Commits

Reviewing files that changed from the base of the PR and between 37e54e2 and cfd8063.

📒 Files selected for processing (2)
  • admin-ui/app/components/MobileBottomNav/constants.ts
  • admin-ui/app/components/MobileBottomNav/sheetIcons.tsx
📝 Walkthrough

Walkthrough

Adds a mobile-only bottom navigation and sheet for the admin UI, wires it into layout and mobile spacing, adds locale labels and tests, and removes React Query devtools from the app bootstrap.

Changes

Mobile Bottom Navigation Feature

Layer / File(s) Summary
Shared contracts and tokens
admin-ui/app/components/MobileBottomNav/types.ts, constants.ts, sheetConstants.ts, sheetIcons.tsx, admin-ui/app/constants/ui.ts, admin-ui/app/customColors.ts
Defines tab and sheet types, route/config constants, icon mappings, sizing tokens, border radius, and mobile color values used by the nav UI.
Bottom nav component and styles
admin-ui/app/components/MobileBottomNav/MobileBottomNav.style.ts, MobileBottomNav.tsx
Adds the mobile bottom tab bar, its theme-driven styling, route-based active state, and sheet toggling/navigation behavior.
Mobile sheet component and styles
admin-ui/app/components/MobileBottomNav/MobileNavSheet.style.ts, MobileNavSheet.tsx
Adds the portal-rendered sheet with scrim/dialog styling, drill-down tiles, expandable sections, route-aware active state, and close handling.
Layout, mobile spacing, and locale labels
admin-ui/app/layout/default.tsx, admin-ui/app/components/Layout/LayoutContent.tsx, admin-ui/app/styles/miltonbo/scss/_layout.scss, admin-ui/app/locales/{en,es,fr,pt}/translation.json, admin-ui/app/layout/__tests__/default.test.tsx
Renders the bottom nav in layout, exposes its height to CSS, adjusts mobile spacing, and adds the related menu labels across locales.
Nav component and constant tests
admin-ui/app/components/MobileBottomNav/__tests__/MobileBottomNav.test.tsx, admin-ui/app/components/MobileBottomNav/__tests__/MobileNavSheet.test.tsx, admin-ui/app/components/MobileBottomNav/__tests__/sheetConstants.test.ts, admin-ui/app/components/MobileBottomNav/__tests__/sheetIcons.test.tsx
Adds coverage for tab rendering, sheet interactions, route matching, constants, icon mapping, and active state behavior.
Mobile nav data wiring
admin-ui/app/components/MobileBottomNav/sheetConstants.ts, sheetIcons.tsx
Centralizes the sheet menu definitions and icon registry consumed by the nav components.
Theme and layout constants
admin-ui/app/components/MobileBottomNav/constants.ts, admin-ui/app/constants/ui.ts, admin-ui/app/customColors.ts
Supplies the mobile breakpoint, nav height, layout sizing, and palette entries used by the new mobile UI.

React Query Devtools Removal

Layer / File(s) Summary
Remove devtools bootstrap code
admin-ui/app/index.tsx
Removes the React Query devtools imports and render path from the app entrypoint.

Estimated code review effort: 4 (Complex) | ~45 minutes

Sequence Diagram(s)

sequenceDiagram
  participant User
  participant MobileBottomNav
  participant MobileNavSheet
  participant Router

  User->>MobileBottomNav: Tap tab
  alt directNav tab
    MobileBottomNav->>Router: navigate(path)
    MobileBottomNav->>MobileBottomNav: close sheet
  else non-direct tab
    MobileBottomNav->>MobileBottomNav: toggle openSheet(key)
    MobileBottomNav->>MobileNavSheet: render with openKey
    User->>MobileNavSheet: Tap tile/item
    alt tile has children
      MobileNavSheet->>MobileNavSheet: drill into tile
    else selectable item
      MobileNavSheet->>MobileBottomNav: onSelect(item)
      MobileBottomNav->>Router: navigate(item.path)
      MobileBottomNav->>MobileBottomNav: close sheet
    end
  end
Loading

Suggested labels: comp-admin-ui, kind-feature

Suggested reviewers: duttarnab, moabu

Poem

A bunny built a bar for tiny paws,
With sheets and tabs and routes that gently pause. 🐇
The sidebar hid, the bottom nav took flight,
And labels bloomed in four tongues bright.
Devtools hopped off the entryway,
بينما the mobile menus found their way.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Out of Scope Changes check ⚠️ Warning The PR also removes React Query devtools from the app entrypoint, which is unrelated to the mobile bottom navigation work. Move the React Query devtools cleanup into a separate PR or restore it here to keep the changeset scoped to mobile bottom navigation.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly describes the mobile bottom navigation feature added in this PR.
Linked Issues check ✅ Passed The changes implement a mobile bottom navigation bar and route-aware behavior requested by issue #2917.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch admin-ui-issue-2917

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 6

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@admin-ui/app/components/MobileBottomNav/MobileBottomNav.tsx`:
- Around line 101-105: The MobileBottomNav <nav> landmark is mislabeled because
its aria-label uses t('menus.home'), which only describes one tab instead of the
whole navigation region. Update the label in MobileBottomNav to a generic
navigation title by reusing an existing translation key or adding a new one
across locales, so screen readers announce the landmark as the full bottom
navigation rather than “Home.”

In `@admin-ui/app/components/MobileBottomNav/MobileNavSheet.style.ts`:
- Around line 19-33: The MobileNavSheet.style.ts sheet spacing only accounts for
BOTTOM_NAV.HEIGHT, so update the sheet style in the MobileNavSheet sheet object
to include the iOS safe-area bottom inset as well. Adjust the paddingBottom in
the sheet style so the bottom content clears both the fixed bottom nav and
env(safe-area-inset-bottom), keeping the existing SHEET/BOTTOM_NAV sizing logic
intact.

In `@admin-ui/app/components/MobileBottomNav/MobileNavSheet.tsx`:
- Line 92: The `MobileNavSheet` lookup is bypassing TypeScript’s exhaustiveness
checks by casting `openKey` to a narrower union when reading from
`SECTION_MENUS`. Replace the cast in `MobileNavSheet` with proper narrowing
based on `SHEET_KEYS` (for example, guard out `SHEET_KEYS.MORE` before indexing)
or change the map to be keyed only by `SectionKey` so `SECTION_MENUS[openKey]`
is type-safe and new `SHEET_KEYS` entries fail at compile time.
- Around line 133-166: The MobileNavSheet dialog is marked with role="dialog"
and aria-modal="true" but never receives initial focus, so it doesn’t behave
like a modal for keyboard/screen reader users. Update MobileNavSheet to move
focus into the sheet when it opens, ideally onto the close button (or the dialog
container), using the existing dialog/header elements and their refs if needed.
Make the focus move happen on open and keep it tied to the sheet’s open state so
the first tabbable focus starts inside the dialog.

In `@admin-ui/app/components/MobileBottomNav/sheetIcons.tsx`:
- Around line 16-28: The icon-key mapping is duplicated between
SHEET_ICON_BY_KEY and the bottom-nav ICON_BY_KEY, which can drift when icons
change. Move the shared entries for home, oauthserver, and usersmanagement into
a single reusable icon map and have both MobileBottomNav.tsx and sheetIcons.tsx
consume it, keeping the existing icon components and keys aligned in one place.

In `@admin-ui/app/styles/miltonbo/scss/_layout.scss`:
- Around line 63-69: The mobile breakpoint and bottom-nav height are duplicated
in the SCSS layout rules and the JS constants, which can drift over time. Update
the layout styles in _layout.scss to consume a shared source of truth from
constants.ts, ideally via CSS custom properties or a shared imported variable
file, and make sure the desktop sidebar hide rule and the bottom padding/offset
rules reference the same MOBILE_MEDIA_QUERY and BOTTOM_NAV.HEIGHT values.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: a74ca06d-c942-402b-b16f-2cc0d736f366

📥 Commits

Reviewing files that changed from the base of the PR and between c0cc69b and 97eb775.

📒 Files selected for processing (22)
  • admin-ui/app/components/MobileBottomNav/MobileBottomNav.style.ts
  • admin-ui/app/components/MobileBottomNav/MobileBottomNav.tsx
  • admin-ui/app/components/MobileBottomNav/MobileNavSheet.style.ts
  • admin-ui/app/components/MobileBottomNav/MobileNavSheet.tsx
  • admin-ui/app/components/MobileBottomNav/__tests__/MobileBottomNav.test.tsx
  • admin-ui/app/components/MobileBottomNav/__tests__/MobileNavSheet.test.tsx
  • admin-ui/app/components/MobileBottomNav/__tests__/sheetConstants.test.ts
  • admin-ui/app/components/MobileBottomNav/__tests__/sheetIcons.test.tsx
  • admin-ui/app/components/MobileBottomNav/constants.ts
  • admin-ui/app/components/MobileBottomNav/sheetConstants.ts
  • admin-ui/app/components/MobileBottomNav/sheetIcons.tsx
  • admin-ui/app/components/MobileBottomNav/types.ts
  • admin-ui/app/constants/ui.ts
  • admin-ui/app/customColors.ts
  • admin-ui/app/index.tsx
  • admin-ui/app/layout/__tests__/default.test.tsx
  • admin-ui/app/layout/default.tsx
  • admin-ui/app/locales/en/translation.json
  • admin-ui/app/locales/es/translation.json
  • admin-ui/app/locales/fr/translation.json
  • admin-ui/app/locales/pt/translation.json
  • admin-ui/app/styles/miltonbo/scss/_layout.scss
💤 Files with no reviewable changes (1)
  • admin-ui/app/index.tsx

Comment thread admin-ui/app/components/MobileBottomNav/MobileBottomNav.tsx
Comment thread admin-ui/app/components/MobileBottomNav/MobileNavSheet.style.ts
Comment thread admin-ui/app/components/MobileBottomNav/MobileNavSheet.tsx Outdated
Comment thread admin-ui/app/components/MobileBottomNav/MobileNavSheet.tsx
Comment thread admin-ui/app/components/MobileBottomNav/sheetIcons.tsx
Comment thread admin-ui/app/styles/miltonbo/scss/_layout.scss
Signed-off-by: faisalsiddique4400 <faisalsiddique10886@gmail.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@admin-ui/app/components/MobileBottomNav/MobileBottomNav.tsx`:
- Line 14: Tighten the typing of PRIMARY_ICON_BY_KEY in sheetIcons so it is
keyed by the same literal union used by PRIMARY_TAB_DEFS instead of
Record<string, JSX.Element>, then update MobileBottomNav to index it through
that stricter key type. This should make missing or renamed iconKey entries fail
at compile time, and you should keep the PRIMARY_TAB_DEFS iconKey type and
PRIMARY_ICON_BY_KEY definition aligned so future tabs cannot silently resolve to
undefined.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 7e8f35ea-c85f-4656-88e1-39ddc88e7963

📥 Commits

Reviewing files that changed from the base of the PR and between 97eb775 and 37e54e2.

📒 Files selected for processing (15)
  • admin-ui/app/components/Layout/LayoutContent.tsx
  • admin-ui/app/components/MobileBottomNav/MobileBottomNav.tsx
  • admin-ui/app/components/MobileBottomNav/MobileNavSheet.style.ts
  • admin-ui/app/components/MobileBottomNav/MobileNavSheet.tsx
  • admin-ui/app/components/MobileBottomNav/__tests__/MobileNavSheet.test.tsx
  • admin-ui/app/components/MobileBottomNav/__tests__/sheetIcons.test.tsx
  • admin-ui/app/components/MobileBottomNav/constants.ts
  • admin-ui/app/components/MobileBottomNav/sheetConstants.ts
  • admin-ui/app/components/MobileBottomNav/sheetIcons.tsx
  • admin-ui/app/constants/ui.ts
  • admin-ui/app/locales/en/translation.json
  • admin-ui/app/locales/es/translation.json
  • admin-ui/app/locales/fr/translation.json
  • admin-ui/app/locales/pt/translation.json
  • admin-ui/app/styles/miltonbo/scss/_layout.scss

Comment thread admin-ui/app/components/MobileBottomNav/MobileBottomNav.tsx
Signed-off-by: faisalsiddique4400 <faisalsiddique10886@gmail.com>
@sonarqubecloud

sonarqubecloud Bot commented Jul 7, 2026

Copy link
Copy Markdown

@moabu moabu merged commit badc905 into main Jul 7, 2026
8 checks passed
@moabu moabu deleted the admin-ui-issue-2917 branch July 7, 2026 15:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

comp-admin-ui Component affected by issue or PR kind-feature Issue or PR is a new feature request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat(admin-ui) Implement the Bottom navigation bar in the mobile view of the Admin ui

4 participants