Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
e7db0c8
feat(dashboards): move tile editor to a drawer with docked settings p…
elizabetdev Jul 23, 2026
c175e9a
test(e2e): update ChartEditorComponent selectors for tile editor drawer
elizabetdev Jul 23, 2026
7aa704e
test(e2e): use displaySettingsContainer for group-by-columns toggle
elizabetdev Jul 27, 2026
55f0091
fix(dashboards): treat every settings-panel dismiss as cancel and sto…
elizabetdev Jul 27, 2026
1cfc7ac
fix(dashboards): don't let containing drawer swallow settings-panel Esc
elizabetdev Jul 27, 2026
6b514c2
Merge branch 'main' into elizabet/tile-editor-drawer
elizabetdev Jul 27, 2026
44048e0
fix(dashboards): let settings panel own Esc and stop discarding unapp…
elizabetdev Jul 28, 2026
92f6a54
fix(dashboards): rename wasOpened ref to satisfy ref-name lint rule
elizabetdev Jul 28, 2026
10e294b
Merge branch 'main' into elizabet/tile-editor-drawer
elizabetdev Jul 28, 2026
f6cfd10
fix(dashboards): let an open Select consume Esc before the settings p…
elizabetdev Jul 28, 2026
9ebe72b
fix(dashboards): stop docked settings panel from crushing the editor …
elizabetdev Jul 28, 2026
b09d7c9
fix(dashboards): don't let a focused code editor swallow the panel's Esc
elizabetdev Jul 28, 2026
70f17f6
fix(dashboards): stop native select Esc from closing the settings panel
elizabetdev Jul 28, 2026
31c49d5
fix(dashboards): use Mantine Select for number format so Esc doesn't …
elizabetdev Jul 28, 2026
979c476
fix(dashboards): fix CI for number format Select conversion
elizabetdev Jul 28, 2026
0413fc1
fix(dashboards): drive number format E2E via Mantine combobox
elizabetdev Jul 28, 2026
542264e
fix(dashboards): close Esc race that dismissed the whole tile editor
elizabetdev Jul 28, 2026
efc1f5f
fix(dashboards): address deep-review P2s on the docked settings panel
elizabetdev Jul 28, 2026
fa72ae5
fix(dashboards): let the docked settings panel own Esc over tile-sele…
elizabetdev Jul 28, 2026
f87b64f
Merge remote-tracking branch 'origin/main' into elizabet/tile-editor-…
elizabetdev Jul 28, 2026
d4395ab
fix(app): drop unsafe Dashboard cast in useTileSelection test to stay…
elizabetdev Jul 28, 2026
9141c68
fix(dashboards): stop kiosk-mode Esc hotkey from swallowing panel/dra…
elizabetdev Jul 28, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/tile-editor-drawer.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@hyperdx/app': patch
---

feat: Move dashboard tile creation/editing from a modal into a right-side drawer. Display Settings (including the heatmap variant) now dock as a full-height side panel next to the editor/preview instead of stacking a second drawer, so the tile stays visible while its display options are changed and a single Esc press just closes the panel rather than closing everything at once.
31 changes: 20 additions & 11 deletions packages/app/src/DBDashboardPage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -63,11 +63,11 @@ import {
Box,
Breadcrumbs,
Button,
Drawer,
Flex,
Group,
Indicator,
Menu,
Modal,
Paper,
Popover,
Portal,
Expand Down Expand Up @@ -1418,7 +1418,7 @@ const Tile = forwardRef(
},
);

const EditTileModal = ({
const EditTileDrawer = ({
dashboardId,
chart,
onClose,
Expand All @@ -1434,9 +1434,12 @@ const EditTileModal = ({
onSave: (chart: Tile) => void;
}) => {
const contextZIndex = useZIndex();
const modalZIndex = contextZIndex + 10;
const drawerZIndex = contextZIndex + 10;
const confirm = useConfirm();
const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false);
// While a settings side panel is docked, hand Esc over to the panel so it
// closes only the panel instead of dismissing the whole tile editor.
const [settingsPanelOpen, setSettingsPanelOpen] = useState(false);

// Reset dirty state only when a *different* tile is opened, not on every
// chart-object reference change (onSubmit recreates the chart object with
Expand Down Expand Up @@ -1469,18 +1472,23 @@ const EditTileModal = ({
}, [confirm, isSaving, hasUnsavedChanges, onClose]);

return (
<Modal
<Drawer
opened={chart != null}
onClose={handleClose}
closeOnEscape={!settingsPanelOpen}
withCloseButton={false}
centered
position="right"
size="90%"
padding="xs"
zIndex={modalZIndex}
padding={0}
zIndex={drawerZIndex}
// Full-height flex body: the editor column scrolls on its own and the
// Display Settings panel docks full-height beside it, so neither the body
// nor the panel shows a stray horizontal scrollbar.
styles={{ body: { height: '100%', padding: 0, overflow: 'hidden' } }}
>
{chart != null && (
<ZIndexContext.Provider value={modalZIndex + 10}>
{/* Isolate chart cross-syncing to this edit modal: the preview chart
<ZIndexContext.Provider value={drawerZIndex + 10}>
{/* Isolate chart cross-syncing to this edit drawer: the preview chart
must not drive shadow tooltips on the dashboard tiles behind it. */}
<IsolatedChartSyncProvider>
<EditTimeChartForm
Expand All @@ -1496,13 +1504,14 @@ const EditTileModal = ({
}}
onClose={handleClose}
onDirtyChange={setHasUnsavedChanges}
onSettingsPanelOpenChange={setSettingsPanelOpen}
isDashboardForm
autoRun
/>
</IsolatedChartSyncProvider>
</ZIndexContext.Provider>
)}
</Modal>
</Drawer>
);
};

Expand Down Expand Up @@ -2918,7 +2927,7 @@ function DBDashboardPage({ presetConfig }: { presetConfig?: Dashboard }) {
</Head>
{!isKioskMode && <OnboardingModal />}
{!isKioskMode && (
<EditTileModal
<EditTileDrawer
dashboardId={dashboardId}
chart={editedTile}
onClose={() => {
Expand Down
Loading
Loading