Skip to content

feat: Add expanded view for canvas elements graph, table, view#3156

Merged
mtrezza merged 3 commits intoparse-community:alphafrom
mtrezza:feat/expand-canvas-element
Jan 27, 2026
Merged

feat: Add expanded view for canvas elements graph, table, view#3156
mtrezza merged 3 commits intoparse-community:alphafrom
mtrezza:feat/expand-canvas-element

Conversation

@mtrezza
Copy link
Member

@mtrezza mtrezza commented Jan 27, 2026

Pull Request

Summary by CodeRabbit

  • New Features

    • Tables, graphs, and views get an expand button to open full-screen modal views with consistent titles for improved visibility.
    • Modals support Escape key and backdrop click to close.
  • Style

    • Hover and positioning updates for the expand control improve discoverability and interaction when previewing content.
    • Expanded containers now use full-width/height layouts with proper scrolling for large content.

✏️ Tip: You can customize this high-level summary in your review settings.

@parse-github-assistant
Copy link

parse-github-assistant bot commented Jan 27, 2026

🚀 Thanks for opening this pull request!

@parseplatformorg
Copy link
Contributor

parseplatformorg commented Jan 27, 2026

Snyk checks have passed. No issues have been found so far.

Status Scanner Critical High Medium Low Total (0)
Open Source Security 0 0 0 0 0 issues

💻 Catch issues earlier using the plugins for VS Code, JetBrains IDEs, Visual Studio, and Eclipse.

@coderabbitai
Copy link

coderabbitai bot commented Jan 27, 2026

📝 Walkthrough

Walkthrough

Adds a portal-based ExpandModal and integrates it into DataTableElement, GraphElement, and ViewElement; each element gains local expansion state, an expand button, extracted render helpers, and styles for expanded containers and expandButton.

Changes

Cohort / File(s) Summary
ExpandModal (New Component)
src/dashboard/Data/CustomDashboard/elements/ExpandModal.react.js, src/dashboard/Data/CustomDashboard/elements/ExpandModal.scss
New modal component rendered via a DOM portal. Handles Escape key, backdrop click, body-scroll locking, lifecycle cleanup, and provides header/close UI and animations.
DataTableElement
src/dashboard/Data/CustomDashboard/elements/DataTableElement.react.js, src/dashboard/Data/CustomDashboard/elements/DataTableElement.scss
Adds isExpanded state, expand button that opens ExpandModal, extracts table rendering into renderTable, uses title helper; SCSS: refreshButtonexpandButton, adds expandedTableContainer.
GraphElement
src/dashboard/Data/CustomDashboard/elements/GraphElement.react.js, src/dashboard/Data/CustomDashboard/elements/GraphElement.scss
Adds isExpanded state and expand button, extracts renderGraph helper, conditionally wraps graph in ExpandModal when expanded; SCSS: refreshButtonexpandButton, adds expandedGraphContainer.
ViewElement
src/dashboard/Data/CustomDashboard/elements/ViewElement.react.js, src/dashboard/Data/CustomDashboard/elements/ViewElement.scss
Adds isExpanded state, title helper, renderTable extraction, expand button with ExpandModal for expanded table view; SCSS: refreshButtonexpandButton, adds expandedTableContainer.

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant Element as Dashboard Element
    participant Modal as ExpandModal
    participant Body as Document Body

    User->>Element: Click expand button
    Element->>Element: set isExpanded = true
    Element->>Modal: render(title, children, onClose)
    Modal->>Body: create portal container (append to body)
    Modal->>Body: disable body scroll (overflow = hidden)
    Modal->>Modal: attach Escape key listener

    User->>Modal: Click close / press Escape / click backdrop
    Modal->>Element: call onClose()
    Element->>Element: set isExpanded = false
    Modal->>Modal: remove key listener
    Modal->>Body: restore body scroll
    Modal->>Body: remove portal container
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 3 | ❌ 2
❌ Failed checks (2 warnings)
Check name Status Explanation Resolution
Description check ⚠️ Warning The PR description is incomplete; it only includes boilerplate text without filling in the required 'Issue', 'Approach', and 'Tasks' sections from the template. Complete the description by filling in the 'Closes' issue link, describing the approach/changes, and checking off completed tasks from the checklist.
Linked Issues check ⚠️ Warning The PR description does not include a link to the related GitHub issue; the 'Closes' field was not filled out as required by the template. Add the issue number or URL in the 'Closes' field of the PR description to properly link the issue.
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and concisely describes the main change: adding expanded view functionality to canvas elements (graph, table, and view components).
Out of Scope Changes check ✅ Passed The changes are focused on adding expand functionality to three canvas elements; styling updates and new modal component align with the stated objectives.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

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 and usage tips.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In `@src/dashboard/Data/CustomDashboard/elements/ExpandModal.react.js`:
- Around line 28-41: The effect currently sets document.body.style.overflow =
'hidden' and restores it to '' which can clobber a non-empty original value;
modify the useEffect in ExpandModal.react.js to capture the current body
overflow into a local variable (e.g., const previousOverflow =
document.body.style.overflow) before setting it to 'hidden', and then on cleanup
restore document.body.style.overflow = previousOverflow; keep the existing
removal of the keydown listener (handleKeyDown) and container cleanup as-is.
🧹 Nitpick comments (2)
src/dashboard/Data/CustomDashboard/elements/GraphElement.scss (1)

26-74: Consider extracting shared button styles to reduce duplication.

.expandButton and .refreshButton share nearly identical styling (display, alignment, sizing, background, border, cursor, border-radius, opacity, transition, z-index, and hover behavior). The only differences are margin-left: auto on expand and margin-left: -6px on refresh.

Proposed refactor using a shared base
+%headerButton {
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  width: 24px;
+  height: 24px;
+  background: transparent;
+  border: none;
+  cursor: pointer;
+  border-radius: 4px;
+  opacity: 0;
+  transition: background-color 0.15s ease, opacity 0.15s ease;
+  position: relative;
+  z-index: 10;
+
+  :global(.canvasElementWrapper):hover & {
+    opacity: 1;
+  }
+
+  &:hover {
+    background-color: rgba(0, 0, 0, 0.1);
+  }
+}
+
 .expandButton {
+  `@extend` %headerButton;
   margin-left: auto;
-  display: flex;
-  align-items: center;
-  ...
 }

 .refreshButton {
+  `@extend` %headerButton;
   margin-left: -6px;
-  display: flex;
-  align-items: center;
-  ...
 }
src/dashboard/Data/CustomDashboard/elements/DataTableElement.scss (1)

34-82: Same duplication pattern as GraphElement.scss.

The .expandButton and .refreshButton classes have near-identical styles. Consider applying the same shared base pattern suggested for GraphElement.scss to maintain consistency and reduce duplication across both files.

@mtrezza mtrezza merged commit 0ffd767 into parse-community:alpha Jan 27, 2026
12 checks passed
@mtrezza mtrezza deleted the feat/expand-canvas-element branch January 27, 2026 06:53
parseplatformorg pushed a commit that referenced this pull request Jan 27, 2026
# [8.3.0-alpha.33](8.3.0-alpha.32...8.3.0-alpha.33) (2026-01-27)

### Features

* Add expanded view for canvas elements graph, table, view ([#3156](#3156)) ([0ffd767](0ffd767))
@parseplatformorg
Copy link
Contributor

🎉 This change has been released in version 8.3.0-alpha.33

@parseplatformorg parseplatformorg added the state:released-alpha Released as alpha version label Jan 27, 2026
parseplatformorg pushed a commit that referenced this pull request Feb 5, 2026
# [8.3.0](8.2.0...8.3.0) (2026-02-05)

### Bug Fixes

* Canvas graph element does not apply data filter option ([#3128](#3128)) ([00ff1aa](00ff1aa))
* Canvas is not expandable or scrollable beyond current view size ([#3140](#3140)) ([cb73122](cb73122))
* Cloud Config parameter modal cannot scroll when content scales beyond visible area ([#3124](#3124)) ([bb6de31](bb6de31))
* Context menu of header cell in info panel does not group related records by class name ([#3122](#3122)) ([230c1e2](230c1e2))
* Context menu sub-menu in data browser vertically misaligned when scrolling in parent menu ([#3120](#3120)) ([2acaa27](2acaa27))
* Dashboard crashes when adding Parse Pointer JSON to array field in data browser ([#3125](#3125)) ([70bf081](70bf081))
* Data browser graph requires value field even when calculated value is defined ([#3127](#3127)) ([53e4f2b](53e4f2b))
* Graph in canvas ignores date filter constraints ([#3137](#3137)) ([6d8b8e6](6d8b8e6))
* Group-by not using custom aggregation type for single-series graph ([#3159](#3159)) ([b8e8891](b8e8891))
* Incorrect percentage and average calculation for calculated values in graphs ([#3152](#3152)) ([14b4d48](14b4d48))
* Info panel auto-scrolling not pausing during UI interaction like text selection or context menu display ([#3165](#3165)) ([bfe4e8a](bfe4e8a))
* Name of calculated value in data browser graph allows leading and trailing spaces ([#3132](#3132)) ([9493b18](9493b18))
* Optimize data browser cell context menu grouping and readability ([#3141](#3141)) ([5c711e1](5c711e1))
* Security upgrade react-router and react-router-dom ([#3107](#3107)) ([b76b9d1](b76b9d1))
* Setting a keyboard shortcut to its default value creates an unnecessary dashboard config storage entry ([#3173](#3173)) ([4949053](4949053))

### Features

* Add auto-scrolling for info panels ([#3149](#3149)) ([3cd8197](3cd8197))
* Add canvas tree to sidebar instead of loading dialog and favorite functionality ([#3146](#3146)) ([e58dc82](e58dc82))
* Add cloning of element in canvas ([#3144](#3144)) ([dec06ad](dec06ad))
* Add context menu in data browser to add cell content or selected text to Cloud Config parameter ([#3123](#3123)) ([9bc5197](9bc5197))
* Add context menu in data browser to get related records from String and Number fields ([#3118](#3118)) ([824bebd](824bebd))
* Add context menu item to get related records for selected text in data browser cell ([#3142](#3142)) ([33d3595](33d3595))
* Add custom dashboard canvas with graphs and data tables ([#3126](#3126)) ([d45c27b](d45c27b))
* Add customizable styles for line and bar series in data browser graph ([#3131](#3131)) ([501dd4b](501dd4b))
* Add customizable Y-axis titles for data browser graphs ([#3130](#3130)) ([2946e64](2946e64))
* Add dialog to execute Cloud Job with parameters ([#3158](#3158)) ([da419e0](da419e0))
* Add expanded view for canvas elements graph, table, view ([#3156](#3156)) ([0ffd767](0ffd767))
* Add field `objectId` to get related records context menu in data browser ([#3161](#3161)) ([2847ccf](2847ccf))
* Add formula-based calculated value to data browser graph ([#3129](#3129)) ([7c5d1b3](7c5d1b3))
* Add keyboard shortcut for executing script on selected rows in data browser ([#3171](#3171)) ([75389ad](75389ad))
* Add more customization options for graphs in canvas ([#3134](#3134)) ([ddbd666](ddbd666))
* Add non-alphanumeric character detection in Cloud Config parameters ([#3143](#3143)) ([1594ec8](1594ec8))
* Add quick-remove button to array parameter in Cloud Config ([#3121](#3121)) ([b632074](b632074))
* Add support for server side storage of Cloud Config parameter history ([#3169](#3169)) ([964e540](964e540))
* Allow adding View elements to canvas ([#3133](#3133)) ([2f2ae9a](2f2ae9a))
* Allow to favorite canvas for quick-access via sidebar menu ([#3135](#3135)) ([1e3a3c7](1e3a3c7))
* Allow to pause auto-scroll of info panel by holding the Option key ([#3160](#3160)) ([db38f14](db38f14))
* Allow to use ESC key to cancel, Cmd + Enter key to submit, Tab key to navigate a modal dialog ([#3172](#3172)) ([debdc09](debdc09))
* Detect and warn about unprintable characters in Cloud Config parameter values ([#3119](#3119)) ([26c909c](26c909c))
* Improve usability and layout of canvas and elements ([#3148](#3148)) ([cd654dc](cd654dc))
* Optimize appearance of graph tick labels on x-axis for date values ([#3147](#3147)) ([a9edcaf](a9edcaf))
* Optimize canvas menu organization ([#3145](#3145)) ([1558826](1558826))
* Replace graph fields with graph series for more customization ([#3157](#3157)) ([51feba4](51feba4))
* Various improvements for auto-scrolling info panel ([#3151](#3151)) ([423d83a](423d83a))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

state:released-alpha Released as alpha version

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants