Skip to content

fix(web): keep PWA bottom nav visible and overhaul torrent details modal - #46

Merged
pavelpikta merged 32 commits into
masterfrom
fix/pwa-modal-nav-and-hero
Oct 13, 2026
Merged

pavelpikta merged 32 commits into
masterfrom
fix/pwa-modal-nav-and-hero

Conversation

@pavelpikta

@pavelpikta pavelpikta commented Oct 13, 2026 •

Copy link
Copy Markdown
Member

Summary

Fixes the PWA bottom nav disappearing when poster/action menus are open, and ships a broader mobile-first pass on the torrent details modal: tighter phone hero, clearer actions for film vs series, and removal of unused chrome.

PWA bottom nav

  • Poster card menus were registered via useSyncModalOpen, so opening a dropdown set data-modal-open and hid the tab bar under overlays.
  • Only real confirm modals sync modal-open state now; menus no longer steal bottom-nav visibility.

Details modal (phone + desktop)

  • Compact hero: larger poster beside the title, even stats grid, and a torrent progress strip for loading/buffering feedback.
  • Dropped the separate Swarm tab; swarm/transfer metrics live in the remaining stats/cache surfaces.
  • Refined dialog sizing, edit/close control placement, and file-panel min-heights so series footers don’t crush content.
  • Cache map dialog header shows live torrent stats (speed, peers, seeders).

Playback & actions

  • TorrentActions / FileRowActions / FilesDataGrid distinguish single-file (film) vs multi-file (series) controls.
  • External player deep links (e.g. Infuse) and playlist affordances follow playable-file count; row actions expose Open-in players more consistently.
  • Confirm dialogs (delete/drop, remove-all, close server) use centered, larger touch targets.

Cleanup

  • Removed unmounted Now Playing bar and related dead code/exports.
  • Dropped unused @react-aria/i18n and leftover locale keys.
  • Small hardening: SSL cert “expiring soon” helper for HTTPS settings; SpeedCharts history/averages.
  • Rebuilt and committed static web assets + service worker hashes.

Test plan

  • PWA / mobile chrome: On a phone-width viewport (or installed PWA), open a torrent card poster menu — bottom nav stays visible and tappable. Open a real modal (details, confirm delete) — bottom nav correctly yields to the overlay.
  • Details hero (phone): Open torrent details — poster is larger beside the title, stats grid reads cleanly, progress strip updates while getting info / buffering.
  • Tabs: Files / Stats / Cache work; Swarm tab is gone and transfer metrics are still reachable.
  • Film vs series: Single playable file shows primary play + externals; multi-file shows series/playlist controls without duplicating confusing inline players.
  • File row actions: Desktop and mobile row actions open external players / copy / play as expected; toasts on clipboard failure.
  • Confirm UX: Delete/drop torrent, remove-all, and close-server confirms are centered with large Cancel/OK targets.
  • Cache map: Open cache view from details — header stats match torrent state.
  • HTTPS settings: Cert near expiry still surfaces the warning correctly.
  • Regression: Desktop details layout, video player launch, and bottom nav / sidebar navigation unchanged for non-modal flows.
  • Static build: Hard-refresh after deploy (or clear SW) so new hashed assets load.

Poster menus were treated as open modals, which hid the tab bar. Confirm actions are centered and larger, and the compact details header shows a bigger poster with four stats.
Signed-off-by: Pavel Pikta <devops@pavelpikta.com>
…et in DetailsDialog

Eliminated the flow prop from StatWidget, simplifying its usage. Adjusted the layout for better responsiveness and visual consistency in the DetailsDialog component, including changes to title row line clamping and the arrangement of hero stats.

Signed-off-by: Pavel Pikta <devops@pavelpikta.com>
…oved responsiveness

Updated the layout of the poster button in the DetailsDialog component to enhance responsiveness and visual consistency. The button now occupies full height and a wider width, ensuring better alignment within the grid structure.

Signed-off-by: Pavel Pikta <devops@pavelpikta.com>
…ed hero display

Removed the category stat from the DetailsDialog and adjusted the layout to accommodate an 8-tile hero grid. Enhanced responsiveness by modifying the dimensions of the dialog, ensuring it maintains sufficient height for the cache display.

Signed-off-by: Pavel Pikta <devops@pavelpikta.com>
… FileRowActions

Adjusted the positioning of the edit button in DetailsDialog for better alignment with the HeroUI close button. Updated the layout of secondary action buttons in FileRowActions to use a flex container for improved spacing and responsiveness.

Signed-off-by: Pavel Pikta <devops@pavelpikta.com>
…entActions

Updated the layout of the DetailsDialog component to enhance responsiveness and visual consistency. Adjusted the flex properties for better alignment of elements within the tabs. Modified comments in TorrentActions to reflect the correct context for the action block.

Signed-off-by: Pavel Pikta <devops@pavelpikta.com>
…tegration

Updated the TorrentActions component to improve the handling of single and series file playback. Introduced a new method for building external player links for series, ensuring better integration with Infuse and other players. Adjusted the logic for displaying external players based on the number of playable files.

Signed-off-by: Pavel Pikta <devops@pavelpikta.com>
…bility

Updated the DetailsDialog component to adjust the minimum height of the file panel, ensuring better visibility of content when the series footer is tall. Modified the layout of the torrent actions section for improved overflow handling.

Signed-off-by: Pavel Pikta <devops@pavelpikta.com>
…r improved layout

Modified the TorrentActions component to reduce button minimum heights and adjust spacing for better visual consistency. Updated the layout of various elements to enhance responsiveness and ensure a more streamlined user experience.

Signed-off-by: Pavel Pikta <devops@pavelpikta.com>
…tailsDialog and TorrentActions

Refactored the DetailsDialog component to improve the layout of the file panel and torrent actions, ensuring better content visibility and responsiveness. Adjusted minimum heights and overflow handling for a more consistent user experience.

Signed-off-by: Pavel Pikta <devops@pavelpikta.com>
…cing layout

Removed the Swarm tab from the DetailsDialog component to streamline the user interface. Adjusted the layout for improved content visibility and responsiveness, ensuring a more cohesive experience when interacting with the file and cache panels.

Signed-off-by: Pavel Pikta <devops@pavelpikta.com>
…tricRows, and SwarmStatsPanel

Updated the layout of the DetailsDialog to improve content visibility and responsiveness by adjusting flex properties and minimum heights. Enhanced the MetricRows component to support a new 'spread' prop for better height distribution. Modified the SwarmStatsPanel to incorporate the 'spread' prop in MetricRows, ensuring a more cohesive layout.

Signed-off-by: Pavel Pikta <devops@pavelpikta.com>
… and functionality

Updated the MetricRows component to clarify the purpose of the 'dense' prop and removed the 'spread' prop for a cleaner implementation. Enhanced the SpeedCharts component by increasing the history length and adding average speed calculations, improving the display of download and upload metrics. Adjusted the layout for better responsiveness and visual consistency across components.

Signed-off-by: Pavel Pikta <devops@pavelpikta.com>
…gress strip and layout adjustments

Updated the DetailsDialog to incorporate a new TorrentProgressStrip component for improved visual feedback on loading and buffering status. Adjusted the layout of hero stats to reflect a 3×2 grid, enhancing content organization. Refactored the SwarmStatsPanel to streamline transfer metrics and removed redundant progress calculations, ensuring a cleaner implementation.

Signed-off-by: Pavel Pikta <devops@pavelpikta.com>
Refactored multiple components including DetailsDialog, FileRowActions, SpeedCharts, and SwarmStatsPanel to enhance layout consistency and readability. Adjusted className formatting for better clarity and removed redundant line breaks. Improved the handling of props and streamlined the implementation of utility functions for a cleaner codebase.

Signed-off-by: Pavel Pikta <devops@pavelpikta.com>
Introduced a new utility function, isExpiringSoon, to determine if an SSL certificate is nearing expiration. This change improves code readability and maintains render idempotency by using a snapshot of the current time. Updated the HTTPSSettingsPanel component to utilize this function for better clarity in expiration logic.

Signed-off-by: Pavel Pikta <devops@pavelpikta.com>
Signed-off-by: Pavel Pikta <devops@pavelpikta.com>
Updated the CacheMapDialog component to include additional torrent statistics such as download speed, active peers, total peers, and connected seeders. Improved the layout of the modal header for better content organization and visibility. Adjusted prop types to accommodate the new torrent data.

Signed-off-by: Pavel Pikta <devops@pavelpikta.com>
Signed-off-by: Pavel Pikta <devops@pavelpikta.com>
Drop the unmounted Now Playing bar, dead exports, unused locale keys, and @react-aria/i18n. Point screenshot scripts at the current details tabs and Vite port.
Refactored the TorrentActions component to improve button layout and functionality based on torrent type. Added a new button for deleting torrents and adjusted the display logic for playlist buttons. Updated localization files to include new translations for "FromLatestUnavailable" in multiple languages, enhancing user experience across different locales.

Signed-off-by: Pavel Pikta <devops@pavelpikta.com>
… improved player handling

Refactored the FileRowActions component to enhance the display of external player links, ensuring they are accessible on both desktop and mobile layouts. Removed the external player handling from the FilesDataGrid component to streamline its functionality. Updated localization files to include the new "OpenIn" translation across multiple languages, improving user experience.

Signed-off-by: Pavel Pikta <devops@pavelpikta.com>
…le handling

Refactored the DetailsDialog component to enhance the loading state logic for torrents, ensuring a more accurate representation of file availability. Updated the TorrentActions component to clarify the distinction between single and multi-file torrents, improving the user interface for series controls. Adjusted related UI elements for better responsiveness and clarity.

Signed-off-by: Pavel Pikta <devops@pavelpikta.com>
…player handling

Updated the FileRowActions component to differentiate player display for films and series, introducing an inline player option. Adjusted the FilesDataGrid to conditionally set the inlinePlayers prop based on the number of playable files, ensuring a more intuitive user experience. Improved documentation comments for clarity.

Signed-off-by: Pavel Pikta <devops@pavelpikta.com>
… player display

Refactored the FileRowActions component to remove the inlinePlayers prop and streamline the external player button rendering. Updated the FilesDataGrid to clarify player display logic for desktop layouts. Improved documentation comments for better understanding of player handling across devices.

Signed-off-by: Pavel Pikta <devops@pavelpikta.com>
Signed-off-by: Pavel Pikta <devops@pavelpikta.com>
…nctionality

Replaced the delete icon with a rotate icon for better clarity in the TorrentActions component. Adjusted button layout to ensure icons remain fixed while allowing the playlist to grow on mobile devices. Updated documentation comments for enhanced understanding of button behavior across different screen sizes.

Signed-off-by: Pavel Pikta <devops@pavelpikta.com>
… styling

Updated the DetailsDialog component to refine the button rendering for the edit action, ensuring better accessibility and visual consistency. Adjusted CSS styles in index.css to standardize the dimensions and layout of the edit trigger buttons within modals, enhancing the overall user interface.

Signed-off-by: Pavel Pikta <devops@pavelpikta.com>
…erformance

Updated references in index.html and service worker (sw.js) to new static asset filenames, ensuring the latest versions are loaded. Added new dialog components for enhanced user interactions, including AboutDialog, AddDialog, and various other UI elements. Removed outdated DetailsDialog to streamline the codebase and improve maintainability.

Signed-off-by: Pavel Pikta <devops@pavelpikta.com>
…playback experience

Updated the FilesDataGrid component to integrate the useConfiguredPlayAction hook, allowing for enhanced playback handling and clipboard functionality. Improved the onPlay method to include error handling for clipboard actions and user feedback via toast notifications. Simplified the TorrentActions component by removing unnecessary class names for better readability.

Signed-off-by: Pavel Pikta <devops@pavelpikta.com>
Signed-off-by: Pavel Pikta <devops@pavelpikta.com>
@pavelpikta
pavelpikta merged commit 82912a2 into master Oct 13, 2026
4 checks passed
@pavelpikta
pavelpikta deleted the fix/pwa-modal-nav-and-hero branch October 13, 2026 06:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant