Repository navigation
refactor(communicator): rebuild the communicator builder as a board management dashboard - #2293
Open
RodriSanchez1 wants to merge 81 commits into
Open
RodriSanchez1 wants to merge 81 commits into
RodriSanchez1 wants to merge 81 commits into
Conversation
Introduce SECTIONS (MY_COMMUNICATOR / MY_BOARDS / COMMUNITY), SECTION_ORDER, VIEW_MODES and SECTION_TO_TAB (maps the new sections onto the legacy tab indexes so the tour keeps working) as the foundation for the dashboard UI. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Section titles/hints, search placeholder, view toggle labels, board actions, empty/error states and open-in-new-tab strings for the new layout. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
useBoardsFetcher: page-based pagination + debounced search per section, with local filtering for the communicator source and API fallback for the others. useBoardActions: all board/communicator business logic (recursive board clone, add/remove, set root, publish, delete, update, report) pulled out of the old container so it can be reused and unit-tested. Includes hook unit tests. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
DashboardToolbar (persistent search + grid/list toggle + overflow menu + mobile nav button), DashboardNav (sidebar / Drawer on xs), SectionHeader, BoardsView (grid/list + loading/empty/error + pagination), BoardCard, BoardRow, BoardActionsBar (primary action + overflow), BoardStatusIcons, BoardThumb and a boardLocale helper. Styled with makeStyles, theme-driven dark mode. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Single-instance dialogs controlled by the panel (BoardInfo, Confirm for delete/copy, Edit for name/description/image with SymbolSearch, Publish and Report), replacing the seven dialogs previously mounted per board item. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
CommunicatorDialog.component becomes a functional dashboard (sidebar nav + persistent search + grid/list toggle + section content) wiring the fetcher and action hooks and mounting the shared dialogs once. The container is reduced to a thin redux boundary (connect + injectIntl) keeping the open/onClose contract. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Point the Joyride walkthrough at the new selectors (nav items, search box, board actions container) and drop the steps for removed elements. Reduce CommunicatorDialog.css to the few classes the tour still renders. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Delete the 1k-line CommunicatorDialogBoardItem, the CommunicatorDialogButtons search/menu component and their now-unused test and snapshot, superseded by the dashboard components. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Replace the obsolete tab-based test with shell rendering/section-switch tests (messages mocked via Proxy since react-intl is auto-mocked) and refresh the snapshot. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Refactored BoardCard and BoardRow components to include new styles for better visual hierarchy and interaction feedback. - Introduced ContentToolbar for search and view mode selection, improving user experience in navigating boards. - Updated DashboardNav and SectionHeader to include navigation buttons and improved layout. - Added dashboardStyles for consistent styling across components, including hover effects and busy overlays. - Enhanced BoardInfoDialog and ConfirmDialog with better layout and responsiveness. - Improved PublishBoardDialog and ReportBoardDialog with consistent dialog sizing. - Added skeleton loading states in BoardsView for better loading feedback.
… the dialog bundle Export.helpers statically pulled in pdfmake + the 1.7MB vfs_fonts blob at module scope, so every CommunicatorDialog mount paid that cost and two unrelated test suites crashed under Jest's transform. Import the adapters dynamically inside exportBoard/exportBoardToPdf instead, and drop the jest.mock workarounds that papered over the crash.
…region Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The board-actions tour step for the quick access section was retargeted to the details panel, which only renders on the other two sections, so the step had no anchor on the section the dialog opens to.
…e announce timer A slow action finishing after the user started another one cleared the wrong board's spinner. The announce timeout could also fire after unmount.
…iveness and usability
… BoardDetailsSurface
…ource The dashboard refactor removed CommunicatorDialogBoardItem and CommunicatorDialogButtons, leaving 12 message descriptors unused, and added 3 more (boardActions, inQuickAccess, rootBoardChip) that were never wired up. Remove all 15 from the descriptors and from cboard.json. The new dashboard, quick access and export strings were never added to cboard.json, so Crowdin never saw them and every locale fell back to the English defaultMessage. Add the 37 missing ids. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EzdbbPnJQ2iuA853Vd5Ew1
The dashboard had two hand-rolled chip styles that meant the same thing — a tinted ground with a same-hue label — and neither survived the cascade: MUI injects .MuiChip-outlined after component styles, so a single-class override loses at equal specificity and the chip falls back to the default grey outline. TonalChip settles it by doubling its selectors, and derives the label shade from the theme so it keeps contrast in dark mode too. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EzdbbPnJQ2iuA853Vd5Ew1
The details panel stacked the meta caption and the status glyphs with no spacing, and the glyphs only carried meaning through a tooltip — which a keyboard user never reaches on a non-focusable <svg>. Give the header a gap, split the dot-separated meta into wrappable parts, and show the status as TonalChips instead. Quick access rows get the same chips in place of their unlabelled root Chip, limited to root and active: every board there is one of the user's own, so a Private badge on each row is noise. SectionHeader's count chip moves to TonalChip too, so a count and a status read as one component. Both surfaces build their statuses from one shared list, so a board can't read differently depending on where it is shown. The chips use new short message ids rather than editing publicBoard and friends in place, which are already translated on Crowdin; the full phrase stays as each chip's accessible name. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EzdbbPnJQ2iuA853Vd5Ew1
…and BoardsView components
…on showQuickAccess prop
… media query support
Collaborator
…access in card view
…access in list view
…cannot get stuck off screen
… options menu Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… refactor/communicatorBuild Keep the quick access row menu layout and section tours; take the home board, quick access star and plain-text search fixes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Oct 16, 2026
This branch has not been deployed
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.

Closes #2292.
Rewrites the communicator builder as a dashboard: a sidebar, a section header, and a board area that is the only thing that scrolls. Boards are selected first and acted on second, so every action ships with a visible label instead of hiding behind a
⋮menu.Quick access
The communicator section is no longer a second card grid. It is a short ordered tray — thumbnail, name, Home badge — with labelled Set as home board, Remove from quick access, Move up and Move down on each row, plus a dashed Add a board from My Boards row that jumps to the board library. Rows render in
communicator.boardsorder and skip ids with no matching entry inavailableBoards; a move reorders only the visible ids in place, so a board the user cannot currently see is never dropped from the communicator.CommunicatorToolbar.container.jsnow maps overcurrentCommunicator.boardsand looks each id up inavailableBoards, instead of filteringavailableBoardsthroughincludes(). The communicator bar and the tray finally agree on order, so reordering in the tray is immediately visible in the bar.Board details
getBoardActions()returns one flat array of{ key, label, icon, onClick, disabled, premium, destructive }descriptors.BoardDetailsrenders it, andBoardDetailsSurfacepicks the presentation — a sticky panel beside the list, or a bottom sheet on narrow viewports. There is no second surface that can drift out of sync.Actions: Show, Edit, Clone, Export, Save as PDF, Publish / Unpublish, Set as home board, Add / Remove quick access, Delete, Info. Show sits first and closes the dialog; Delete sits last as the destructive one.
Clone ships disabled on purpose. The descriptor, icon, label and position land now; the handler is deliberately left for a follow-up. A labelled button that appears to work and silently does nothing is worse than a disabled one.
Export and PDF now report through
showNotificationon both success and failure — they previously disappeared into silentcatch {}blocks — and run through arunBusywrapper that disables the panel's action list while one is in flight, scoped so a slow action finishing late cannot clear the spinner of a different board.Dialog layout
The dashboard never claimed the height of the dialog, so it grew as ordinary content inside
FullScreenDialog's scroller and produced a scrollbar the content did not need:min-height: 100%, silently ignored becauseFullScreenDialog's content wrapper hasheight: auto— measured at 1280×800, the dashboard was 293px tall in an 800px dialog, which is also why the sidebar stopped mid-page;top: 72pxinside a container starting 64px down,max-height: calc(100vh - 96px)), putting its bottom at y=840 in an 800px viewport — ~40px of spurious scroll.Now
contentFullWidthcarriesheight: 100%(only this dialog passesfullWidth), the dashboard isheight: 100%; overflow: hidden, the content column is a flex column, and the board area is aflex: 1; min-height: 0; overflow-y: autoregion. The header is a plain non-shrinking flex item — nothing scrolls under it, so the sticky positioning and backdrop blur are gone. The panel's offsets are now relative to that board area, and the permanent Drawer'sdockedroot spans the full height.Verified in Chrome at 1280×800 and 400×740: dialog paper and container both report
scrollHeight === clientHeight. With 3000px of injected board content and 2000px of injected panel content, only the board area scrolls and the panel clamps inside the viewport.Accessibility
aria-currentwhen selected; activating one moves focus to the details heading, Escape returns focus to the originating card, and the phone sheet traps focus.aria-labelnaming both action and board, and a 44×44 target.prefers-reduced-motion.Tests
New suites cover
useBoardSelection,useBoardActions,useBoardsFetcher,boardActions,quickAccessOrder,QuickAccessTray,BoardDetails,BoardDetailsSurface,BoardCardandCommunicatorToolbar.container, plus the updated dashboard-shell snapshot.CommunicatorDialog,FullScreenDialogandCommunicatorToolbar: 15 suites, 81 tests, all passing.Out of scope
🤖 Generated with Claude Code