Conversation
- Restore title visibility for desktop users only (hidden on mobile) - Remove max width constraint from header to allow full-width layout - Hide search input helper text when focused for cleaner appearance - Remove white border underlines from focused and expanded search states - Increase search dropdown max height from 60vh to 80vh - Fix z-index issues with search autocomplete dropdown
Created index.ts files inside modern/Header/components for clean imports.
# Conflicts: # package-lock.json # package.json
Reorganized some code and removed map menu for location. Moved location and zoom setting to map settings.
Removed tariff zone settings since it is no longer needed in new UI.
…the starting point of the new UI. Created first version of a GroupOfStopPlaces modern version.
Fixed environment badge not using correct theme. Removed tiamatEnv color override. Minor layout change for group of stop place edit box. Added a generic default logo.
Supports multiple themes, but when only one theme available no theme switching menu is available. Modernized the search result box. Changed search icon breakpoint.
…up link not working.
Updating expand collapse logic for edit boxes. Minor changes and updates.
Modern dialog boxes for parent stop place. First pass and implementation.
Better user experience with loading indicator when loading stop place.
|
Visit the preview URL for this PR (updated for commit 6f3a4e6): https://ent-ror-abzu-dev--pr1689-feature-modernize-ui-o2rlk60l.web.app (expires Thu, 30 Apr 2026 07:20:38 GMT) 🔥 via Firebase Hosting GitHub Action 🌎 Sign: 062563fce35e36a421ef531ddfc5db6c937ea3b1 |
# Conflicts: # src/config/ConfigContext.ts
Major refactoring of file structure to adhere to best practices and clean code. FareZone implementation. Add elements button to map. Loading animation fix for better user experience when selecting stop places.
Removed hard coded color values.
Fixed some errors with missing theme elements resulting in console log errors.
Updated some translations. Fixed some more errors. Fixed add children function for parent stop. Marker scaling for markers when zooming.
Removed some dead code.
Removing an unused file. Creating a black funicular svg. Updating the metro icon to an M in the modern UI. Supporting max native zoom in map libre.
Updated documentation for setting up theme.
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.




Summary
This PR is a revamping of the UI. The new UI, is responsive, modern and themable.
Issue
Motivation
The existing Abzu UI was built on an older stack (class-based React components, legacy MUI, hand-rolled CSS) that made it difficult to enforce consistent design, add theming support, or iterate on UX quickly. There
was no design system to speak of — styling was scattered across dozens of CSS files, and the component tree mixed presentation and data-fetching concerns freely.
The goal of this branch is to introduce a modern, parallel UI layer that can eventually replace the legacy one. By running both UIs side-by-side (controlled by a uiMode flag in Redux state), we avoid a big-bang
rewrite and allow gradual migration with no disruption to users currently on the legacy UI.
How the code works
All new code lives under src/components/modern/ and src/containers/modern/. The entry point is src/containers/modern/App.tsx, which is completely separate from the legacy LegacyApp.js.
The three main editing surfaces — EditStopPage (regular stop places), EditParentStopPlace (multimodal stops), and EditGroupOfStopPlaces (groups) — all follow the same structural pattern:
stop place view.
A new ReportPage was also built from scratch under src/components/modern/ReportPage/, with full filter/column/pagination/export support and URL-persisted state. This is not fully responsive yet, but is not a major priority at the moment.
Technical approach and design decisions
Parallel UI, zero legacy breakage. The uiMode flag in Redux (state.user.uiMode) gates which component tree renders. The legacy UI is untouched and continues to work. All new components are TypeScript; new containers
are thin wrappers that read Redux state and pass it down.
Hooks-per-component pattern. Each major component has a dedicated hooks/use.ts orchestrator that composes several focused sub-hooks (state, dialogs, CRUD, form, quays, parking). This keeps components
as pure presentational shells and makes business logic independently testable.
MUI v7 with configurable theming. The theme system reads a themeConfig / themeConfigs path from bootstrap.json at runtime, fetches a JSON theme file, and applies it on top of the MUI base. This lets deployments supply their own colours and logo without a code change. The Config interface in ConfigContext.ts was extended with themeConfig and themeConfigs to type-check this at compile time;
Shared component library. Reusable pieces — MinimizedBar, LoadingDialog, GroupMembership, ParentMembership, CopyIdButton, FavoriteButton, TagTray, ImportedId, and others — live in src/components/modern/Shared/ and
are used consistently across all three panel types, giving the UI a uniform look and behaviour.
Closes #1084
Unit tests
Manually testing for now, but we should look into UI testing frameworks in the future.