Skip to content

feat: move show dashboard to mui#967

Open
priscila-moneo wants to merge 3 commits into
masterfrom
feature/move-show-dashboard-mui
Open

feat: move show dashboard to mui#967
priscila-moneo wants to merge 3 commits into
masterfrom
feature/move-show-dashboard-mui

Conversation

@priscila-moneo

@priscila-moneo priscila-moneo commented Jun 9, 2026

Copy link
Copy Markdown

ref: https://app.clickup.com/t/9014802374/86babejhm

image

Summary by CodeRabbit

  • New Features

    • Enhanced summit dashboard with improved date range display and registration statistics (orders, active tickets)
  • Refactor

    • Updated dashboard to modern Material-UI layout and component architecture
  • Style

    • Added light gray background color option to theme palette

@coderabbitai

coderabbitai Bot commented Jun 9, 2026

Copy link
Copy Markdown

Review Change Stack

Note

Currently processing new changes in this PR. This may take a few minutes, please wait...

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 8cca8e74-d082-405c-934a-6fe0a2bf9812

📥 Commits

Reviewing files that changed from the base of the PR and between 2a28aa4 and 3773dc5.

📒 Files selected for processing (1)
  • src/pages/summits/components/summit-dashboard-date-range.js
 ________________________________________________________________________
< Making the Death Star fully operational, with zero exhaust port flaws. >
 ------------------------------------------------------------------------
  \
   \   \
        \ /\
        ( )
      .( o ).
📝 Walkthrough

Walkthrough

This PR modernizes the summit dashboard by converting it from a legacy class component to a functional MUI-based layout, adding reusable dashboard components, extending the theme with a new background color, and inserting dashboard section localization strings.

Changes

Dashboard UI Redesign

Layer / File(s) Summary
Theme background color and style overrides
src/components/CustomTheme.js
Adds palette.background.light_gray (#eaeaea) and updates MUI style override callback parameters to use local theme alias t for typography.subtitle2 and components.MuiAlert.standardInfo color references.
Reusable dashboard UI components
src/pages/summits/components/dashboard-section.js, src/pages/summits/components/summit-dashboard-stat.js, src/pages/summits/components/dashboard-stat-section.js, src/pages/summits/components/summit-dashboard-date-range.js
Introduces four new dashboard components: DashboardSection (card/box container), SummitDashboardStat (labeled stat display), DashboardStatSection (grouped stat grid), and SummitDashboardDateRange (timezone-formatted date range formatter). Each includes propTypes and defaultProps validation.
SummitDashboardPage: functional conversion and Redux integration
src/pages/summits/summit-dashboard-page.js
Converts SummitDashboardPage from class-based to functional component with useEffect hook for registration data fetching; renders MUI breadcrumb, tabs, and date-range/stat sections; updates propTypes to require getRegistrationData and add totalOrders/totalActiveTickets; updates Redux mapStateToProps to supply registration totals and the connected action.
Dashboard localization strings
src/i18n/en.json
Adds eight dashboard section translation keys for new dashboard labels and section titles.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

Suggested reviewers

  • martinquiroga-exo
  • smarcet

Poem

🐰 A dashboard reborn with hooks and MUI grace,
New components compose the dashboard's place,
From class to function, a theme so light-gray,
With stats and date ranges in elegant display,
Summit admin shines brighter every day!

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The PR title 'feat: move show dashboard to mui' directly and accurately describes the main change—converting the summit dashboard from its previous implementation to Material-UI components.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

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

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feature/move-show-dashboard-mui

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.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/pages/summits/summit-dashboard-page.js`:
- Around line 54-58: The useEffect currently calls fetchRegistrationData()
unconditionally on mount causing premature requests before summit context is
ready; update the useEffect (the hook that calls fetchRegistrationData) to only
invoke fetchRegistrationData when currentSummit.id and
currentSummit.time_zone?.name are present—either by adding those values to the
effect dependency array and checking them inside the effect or by gating the
call with an early return inside the effect (referencing useEffect,
fetchRegistrationData, and currentSummit).
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 3dbeee96-9399-43d7-b662-a19ca0afc281

📥 Commits

Reviewing files that changed from the base of the PR and between 8a7aee3 and 74702da.

📒 Files selected for processing (7)
  • src/components/CustomTheme.js
  • src/i18n/en.json
  • src/pages/summits/components/summit-dashboard-date-range.js
  • src/pages/summits/components/summit-dashboard-section-header.js
  • src/pages/summits/components/summit-dashboard-stat.js
  • src/pages/summits/summit-dashboard-page.js
  • src/styles/summit-dashboard-page.less
💤 Files with no reviewable changes (1)
  • src/styles/summit-dashboard-page.less

Comment thread src/pages/summits/summit-dashboard-page.js Outdated
Comment thread src/components/CustomTheme.js Outdated
background: {
light: "#F7F7F9"
light: "#F7F7F9",
secondary: "#eaeaea"

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

these two colors are almost exactly the same, are we sure we want this distinction ?

Image

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

in case we do want the two, name it something more meaningful like for example "light_gray"

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

The new color added to pallete (secondary) is for this headers
image

The other one (light) is for pages background
image

I will improve the name.

import RemoveIcon from "@mui/icons-material/Remove";
import moment from "moment-timezone";

function formatDate(ts, tzName) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

please use the method in utils/methods.js

import Box from "@mui/material/Box";
import Typography from "@mui/material/Typography";

function SummitDashboardSectionHeader({ children }) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

This component should be named DashboardSection - since its already inside summit dir , and take two props: title and children , then group everything inside a Box .

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Not addressed

<Card elevation={0}>
<CardHeader title={T.translate("dashboard.dates")} />
<Divider />
<SummitDashboardSectionHeader>

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

so this would be a DashboardSection

tzName={tz}
/>
{currentSummit.selection_plans.map((sp) => (
<Box key={`sp_${sp.id}`}>

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

These would be DashboardSections

</div>
);
}
<Card elevation={0}>

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

These cards repeat a lot, can we put them in a separate component that takes an array of touples {title, stat} ?

Signed-off-by: Priscila Moneo <priscila_moneo@hotmail.com.ar>
@priscila-moneo priscila-moneo force-pushed the feature/move-show-dashboard-mui branch from 74702da to 0d70957 Compare June 10, 2026 20:20

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🧹 Nitpick comments (2)
src/pages/summits/components/summit-dashboard-date-range.js (1)

8-8: 💤 Low value

Verify the double space in DATE_FORMAT is intentional.

The format string has two spaces between the date and time components: "YYYY/MM/DD hh:mm A". If this is unintentional, it should be corrected for consistency.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/pages/summits/components/summit-dashboard-date-range.js` at line 8, The
DATE_FORMAT constant currently reads "YYYY/MM/DD  hh:mm A" and contains a double
space between the date and time; verify whether the double space is intentional
and if not, change the constant DATE_FORMAT to use a single space ("YYYY/MM/DD
hh:mm A") so formatting is consistent across usages (search for DATE_FORMAT in
summit-dashboard-date-range.js and update its value accordingly).
src/pages/summits/components/dashboard-section.js (1)

20-27: ⚡ Quick win

Consider reusing SummitDashboardSectionHeader to avoid duplication.

Lines 22-24 duplicate the exact header implementation from SummitDashboardSectionHeader (Box with background.gray, padding, and Typography). Consider importing and using that component here instead of reimplementing it.

♻️ Proposed refactor to reuse existing component
+import SummitDashboardSectionHeader from "./summit-dashboard-section-header";

 function DashboardSection({ title, children, variant }) {
   if (variant === "card") {
     return (
       <Card elevation={0}>
         <CardHeader title={title} />
         <Divider />
         {children}
       </Card>
     );
   }

   return (
     <Box>
-      <Box sx={{ bgcolor: "background.gray", px: 2, py: 2 }}>
-        <Typography variant="body2">{title}</Typography>
-      </Box>
+      <SummitDashboardSectionHeader>{title}</SummitDashboardSectionHeader>
       {children}
     </Box>
   );
 }
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/pages/summits/components/dashboard-section.js` around lines 20 - 27, The
header Box in dashboard-section.js duplicates SummitDashboardSectionHeader;
import SummitDashboardSectionHeader and replace the manual Box block (the Box
with sx={{ bgcolor: "background.gray", px: 2, py: 2 }} and inner Typography)
with <SummitDashboardSectionHeader title={title} /> (or the component's expected
prop) so the section uses the shared SummitDashboardSectionHeader component and
removes duplicated markup.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/pages/summits/components/dashboard-section.js`:
- Around line 30-38: DashboardSection.propTypes currently restricts variant to
oneOf(["card"]) while DashboardSection.defaultProps sets variant to undefined,
causing PropTypes warnings; update the prop-type definition for variant to allow
both "card" and undefined (e.g., include null/undefined or make it optional) or
remove the oneOf restriction so runtime behavior matches validation, and ensure
DashboardSection.defaultProps still defines variant as undefined if you want the
non-card default.

In `@src/pages/summits/components/dashboard-stat-section.js`:
- Around line 13-28: The code assumes each group has items which can cause
runtime errors and invalid grid sizes for empty or non-dividing lengths; update
the rows.map callback to skip empty groups (if (group.length === 0) return
null), compute a safe integer column size with something like const size =
Math.max(1, Math.floor(GRID_COLUMNS / group.length)), and derive a robust key
for the fragment using a fallback (e.g., const key = group[0]?.title ||
`group-${i}`) so SummitDashboardStat/Grid2 rendering won't throw or produce
Infinity/non-integer sizes.

---

Nitpick comments:
In `@src/pages/summits/components/dashboard-section.js`:
- Around line 20-27: The header Box in dashboard-section.js duplicates
SummitDashboardSectionHeader; import SummitDashboardSectionHeader and replace
the manual Box block (the Box with sx={{ bgcolor: "background.gray", px: 2, py:
2 }} and inner Typography) with <SummitDashboardSectionHeader title={title} />
(or the component's expected prop) so the section uses the shared
SummitDashboardSectionHeader component and removes duplicated markup.

In `@src/pages/summits/components/summit-dashboard-date-range.js`:
- Line 8: The DATE_FORMAT constant currently reads "YYYY/MM/DD  hh:mm A" and
contains a double space between the date and time; verify whether the double
space is intentional and if not, change the constant DATE_FORMAT to use a single
space ("YYYY/MM/DD hh:mm A") so formatting is consistent across usages (search
for DATE_FORMAT in summit-dashboard-date-range.js and update its value
accordingly).
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 59f218f7-3df4-4e70-849c-f2fd109b2b1e

📥 Commits

Reviewing files that changed from the base of the PR and between 74702da and 0d70957.

📒 Files selected for processing (9)
  • src/components/CustomTheme.js
  • src/i18n/en.json
  • src/pages/summits/components/dashboard-section.js
  • src/pages/summits/components/dashboard-stat-section.js
  • src/pages/summits/components/summit-dashboard-date-range.js
  • src/pages/summits/components/summit-dashboard-section-header.js
  • src/pages/summits/components/summit-dashboard-stat.js
  • src/pages/summits/summit-dashboard-page.js
  • src/styles/summit-dashboard-page.less
💤 Files with no reviewable changes (1)
  • src/styles/summit-dashboard-page.less
✅ Files skipped from review due to trivial changes (1)
  • src/i18n/en.json
🚧 Files skipped from review as they are similar to previous changes (3)
  • src/pages/summits/components/summit-dashboard-section-header.js
  • src/pages/summits/components/summit-dashboard-stat.js
  • src/pages/summits/summit-dashboard-page.js

Comment on lines +30 to +38
DashboardSection.propTypes = {
title: PropTypes.string.isRequired,
children: PropTypes.node.isRequired,
variant: PropTypes.oneOf(["card"])
};

DashboardSection.defaultProps = {
variant: undefined
};

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Fix PropTypes inconsistency for variant.

Line 33 restricts variant to oneOf(["card"]), but Line 37 defaults it to undefined. This creates a PropTypes validation warning since undefined is not in the allowed values. The component logic (Line 10) correctly handles undefined by rendering the non-card variant.

🐛 Proposed fix

Option 1: Remove the oneOf restriction if only "card" is needed as an explicit signal:

 DashboardSection.propTypes = {
   title: PropTypes.string.isRequired,
   children: PropTypes.node.isRequired,
-  variant: PropTypes.oneOf(["card"])
+  variant: PropTypes.string
 };

Option 2: Make the PropTypes match the runtime behavior by allowing both "card" and undefined:

 DashboardSection.propTypes = {
   title: PropTypes.string.isRequired,
   children: PropTypes.node.isRequired,
-  variant: PropTypes.oneOf(["card"])
+  variant: PropTypes.oneOf(["card", undefined])
 };
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
DashboardSection.propTypes = {
title: PropTypes.string.isRequired,
children: PropTypes.node.isRequired,
variant: PropTypes.oneOf(["card"])
};
DashboardSection.defaultProps = {
variant: undefined
};
DashboardSection.propTypes = {
title: PropTypes.string.isRequired,
children: PropTypes.node.isRequired,
variant: PropTypes.string
};
DashboardSection.defaultProps = {
variant: undefined
};
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/pages/summits/components/dashboard-section.js` around lines 30 - 38,
DashboardSection.propTypes currently restricts variant to oneOf(["card"]) while
DashboardSection.defaultProps sets variant to undefined, causing PropTypes
warnings; update the prop-type definition for variant to allow both "card" and
undefined (e.g., include null/undefined or make it optional) or remove the oneOf
restriction so runtime behavior matches validation, and ensure
DashboardSection.defaultProps still defines variant as undefined if you want the
non-card default.

Comment thread src/pages/summits/components/dashboard-stat-section.js
Comment thread src/components/CustomTheme.js Outdated
background: {
light: "#F7F7F9"
light: "#F7F7F9",
gray: "#eaeaea"

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

@priscila-moneo please rename this to the proposed name "light_gray"

import RemoveIcon from "@mui/icons-material/Remove";
import { parseAndFormat } from "../../../utils/methods";

const DATE_FORMAT = "YYYY/MM/DD hh:mm A";

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

this is not standard US date format, and constants should go in constants.js

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

Ok, format is following Figma design:
image

import Box from "@mui/material/Box";
import Typography from "@mui/material/Typography";

function SummitDashboardSectionHeader({ children }) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Not addressed

};
this.onCollapseChange = this.onCollapseChange.bind(this);
}
if (!currentSummit.id || !currentSummit.time_zone?.name) return null;

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

So if timezone is not set you won't show the entire dashboard? seems too harsh

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Also check on currentSummit.id is redundant since its already guarded in SummitIdLayout

Signed-off-by: Priscila Moneo <priscila_moneo@hotmail.com.ar>
@priscila-moneo priscila-moneo force-pushed the feature/move-show-dashboard-mui branch from 0d70957 to 2a28aa4 Compare June 11, 2026 16:54

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/pages/summits/components/summit-dashboard-date-range.js`:
- Around line 27-31: The component calls parseAndFormat(String(startTs), "X",
DATETIME_FORMAT, "UTC", tzName) with tzName possibly undefined which causes
moment-timezone to treat .tz(undefined) as a getter; update the call site in the
SummitDashboardDateRange component (or alternatively inside parseAndFormat) to
normalize tzName to "UTC" when it is missing but not coerce valid falsy values
like 0 — e.g. compute a safeTz = (tzName === undefined ? "UTC" : tzName) and
pass safeTz to parseAndFormat so moment-timezone receives an explicit timezone
string.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 038d3385-2170-4db2-b78a-0e701bdf29cf

📥 Commits

Reviewing files that changed from the base of the PR and between 0d70957 and 2a28aa4.

📒 Files selected for processing (5)
  • src/components/CustomTheme.js
  • src/pages/summits/components/dashboard-section.js
  • src/pages/summits/components/dashboard-stat-section.js
  • src/pages/summits/components/summit-dashboard-date-range.js
  • src/pages/summits/summit-dashboard-page.js
🚧 Files skipped from review as they are similar to previous changes (4)
  • src/pages/summits/components/dashboard-stat-section.js
  • src/components/CustomTheme.js
  • src/pages/summits/summit-dashboard-page.js
  • src/pages/summits/components/dashboard-section.js

Comment thread src/pages/summits/components/summit-dashboard-date-range.js Outdated
<Typography variant="body2">{label}</Typography>
</Box>
<Typography variant="body1">
{parseAndFormat(String(startTs), "X", DATETIME_FORMAT, "UTC", tzName)}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

this method is intended to be used with a string date like "12/12/1983" , you have a number that is epoch . You should be using something like formatDate in utils/methods or epochToMomentTimezone in uicore

Signed-off-by: Priscila Moneo <priscila_moneo@hotmail.com.ar>
@coderabbitai

coderabbitai Bot commented Jun 17, 2026

Copy link
Copy Markdown

Caution

Failed to replace (edit) comment. This is likely due to insufficient permissions or the comment being deleted.

Error details
{"name":"HttpError","status":500,"request":{"method":"PATCH","url":"https://api.github.com/repos/fntechgit/summit-admin/issues/comments/4661769184","headers":{"accept":"application/vnd.github.v3+json","user-agent":"octokit.js/0.0.0-development octokit-core.js/7.0.6 Node.js/24","authorization":"token [REDACTED]","content-type":"application/json; charset=utf-8"},"body":{"body":"<!-- This is an auto-generated comment: summarize by coderabbit.ai -->\n<!-- review_stack_entry_start -->\n\n[![Review Change Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/fntechgit/summit-admin/pull/967?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack)\n\n<!-- review_stack_entry_end -->\n<!-- This is an auto-generated comment: failure by coderabbit.ai -->\n\n> [!CAUTION]\n> ## Review failed\n> \n> An error occurred during the review process. Please try again later.\n\n<!-- end of auto-generated comment: failure by coderabbit.ai -->\n\n<!-- walkthrough_start -->\n\n<details>\n<summary>📝 Walkthrough</summary>\n\n## Walkthrough\n\nThis PR modernizes the summit dashboard by converting it from a legacy class component to a functional MUI-based layout, adding reusable dashboard components, extending the theme with a new background color, and inserting dashboard section localization strings.\n\n## Changes\n\n**Dashboard UI Redesign**\n\n| Layer / File(s) | Summary |\n|---|---|\n| **Theme background color and style overrides** <br> `src/components/CustomTheme.js` | Adds `palette.background.light_gray` (`#eaeaea`) and updates MUI style override callback parameters to use local theme alias `t` for `typography.subtitle2` and `components.MuiAlert.standardInfo` color references. |\n| **Reusable dashboard UI components** <br> `src/pages/summits/components/dashboard-section.js`, `src/pages/summits/components/summit-dashboard-stat.js`, `src/pages/summits/components/dashboard-stat-section.js`, `src/pages/summits/components/summit-dashboard-date-range.js` | Introduces four new dashboard components: `DashboardSection` (card/box container), `SummitDashboardStat` (labeled stat display), `DashboardStatSection` (grouped stat grid), and `SummitDashboardDateRange` (timezone-formatted date range formatter). Each includes propTypes and defaultProps validation. |\n| **SummitDashboardPage: functional conversion and Redux integration** <br> `src/pages/summits/summit-dashboard-page.js` | Converts `SummitDashboardPage` from class-based to functional component with `useEffect` hook for registration data fetching; renders MUI breadcrumb, tabs, and date-range/stat sections; updates propTypes to require `getRegistrationData` and add `totalOrders`/`totalActiveTickets`; updates Redux `mapStateToProps` to supply registration totals and the connected action. |\n| **Dashboard localization strings** <br> `src/i18n/en.json` | Adds eight `dashboard` section translation keys for new dashboard labels and section titles. |\n\n## Estimated code review effort\n\n🎯 3 (Moderate) | ⏱️ ~25 minutes\n\n## Possibly related PRs\n\n- [fntechgit/summit-admin#896](https://github.com/fntechgit/summit-admin/pull/896): Both PRs modify `src/pages/summits/summit-dashboard-page.js`—#896 adjusts time/collapse rendering and propTypes, while this PR refactors it to a hook-based layout with new component integration and dashboard data wiring.\n\n## Suggested reviewers\n\n- martinquiroga-exo\n- smarcet\n\n## Poem\n\n> 🐰 A dashboard reborn with hooks and MUI grace,\n> New components compose the dashboard's place,\n> From class to function, a theme so light-gray,\n> With stats and date ranges in elegant display,\n> Summit admin shines brighter every day!\n\n</details>\n\n<!-- walkthrough_end -->\n<!-- pre_merge_checks_walkthrough_start -->\n\n<details>\n<summary>🚥 Pre-merge checks | ✅ 4 | ❌ 1</summary>\n\n### ❌ Failed checks (1 warning)\n\n|     Check name     | Status     | Explanation                                                                          | Resolution                                                                         |\n| :----------------: | :--------- | :----------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------- |\n| Docstring Coverage | ⚠️ Warning | Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. | Write docstrings for the functions missing them to satisfy the coverage threshold. |\n\n<details>\n<summary>✅ Passed checks (4 passed)</summary>\n\n|         Check name         | Status   | Explanation                                                                                                                                                                                   |\n| :------------------------: | :------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n|      Description Check     | ✅ Passed | Check skipped - CodeRabbit’s high-level summary is enabled.                                                                                                                                   |\n|         Title check        | ✅ Passed | The PR title 'feat: move show dashboard to mui' directly and accurately describes the main change—converting the summit dashboard from its previous implementation to Material-UI components. |\n|     Linked Issues check    | ✅ Passed | Check skipped because no linked issues were found for this pull request.                                                                                                                      |\n| Out of Scope Changes check | ✅ Passed | Check skipped because no linked issues were found for this pull request.                                                                                                                      |\n\n</details>\n\n<sub>✏️ Tip: You can configure your own custom pre-merge checks in the settings.</sub>\n\n</details>\n\n<!-- pre_merge_checks_walkthrough_end -->\n<!-- finishing_touch_checkbox_start -->\n\n<details>\n<summary>✨ Finishing Touches</summary>\n\n<details>\n<summary>🧪 Generate unit tests (beta)</summary>\n\n- [ ] <!-- {\"checkboxId\": \"f47ac10b-58cc-4372-a567-0e02b2c3d479\", \"radioGroupId\": \"utg-output-choice-group-unknown_comment_id\"} -->   Create PR with unit tests\n- [ ] <!-- {\"checkboxId\": \"6ba7b810-9dad-11d1-80b4-00c04fd430c8\", \"radioGroupId\": \"utg-output-choice-group-unknown_comment_id\"} -->   Commit unit tests in branch `feature/move-show-dashboard-mui`\n\n</details>\n\n</details>\n\n<!-- finishing_touch_checkbox_end -->\n<!-- tips_start -->\n\n---\n\nThanks for using [CodeRabbit](https://coderabbit.ai?utm_source=oss&utm_medium=github&utm_campaign=fntechgit/summit-admin&utm_content=967)! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.\n\n<details>\n<summary>❤️ Share</summary>\n\n- [X](https://twitter.com/intent/tweet?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A&url=https%3A//coderabbit.ai)\n- [Mastodon](https://mastodon.social/share?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A%20https%3A%2F%2Fcoderabbit.ai)\n- [Reddit](https://www.reddit.com/submit?title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&text=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code.%20Check%20it%20out%3A%20https%3A//coderabbit.ai)\n- [LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fcoderabbit.ai&mini=true&title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&summary=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code)\n\n</details>\n\n\n<sub>Comment `@coderabbitai help` to get the list of available commands and usage tips.</sub>\n\n<!-- tips_end -->\n<!-- internal state start -->\n\n\n<!-- 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 -->\n\n<!-- internal state end -->"},"request":{"retryCount":3,"signal":{},"retries":3,"retryAfter":16}}}

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.

3 participants