Skip to content

[charts][draft] Explore selector typing #18362

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: master
Choose a base branch
from

Conversation

alexfauquette
Copy link
Member

@mui-bot
Copy link

mui-bot commented Jun 13, 2025

Deploy preview: https://deploy-preview-18362--material-ui-x.netlify.app/

Bundle size report

Total Size Change: 🔺+2.13KB(+0.02%) - Total Gzip Change: ▼-2.02KB(-0.05%)
Files: 122 total (0 added, 0 removed, 69 changed)

Show details for 100 more bundles (22 more not shown)

@mui/x-charts-pro/FunnelChartparsed: 🔺+391B(+0.19%) gzip: 🔺+30B(+0.04%)
@mui/x-charts-pro/BarChartProparsed: 🔺+144B(+0.07%) gzip: ▼-78B(-0.11%)
@mui/x-charts-pro/PieChartProparsed: 🔺+139B(+0.07%) gzip: ▼-66B(-0.10%)
@mui/x-charts/RadarChartparsed: 🔺+138B(+0.09%) gzip: ▼-54B(-0.10%)
@mui/x-charts/PieChartparsed: 🔺+137B(+0.08%) gzip: ▼-2B(0.00%)
@mui/x-charts/BarChartparsed: 🔺+136B(+0.08%) gzip: ▼-37B(-0.06%)
@mui/x-charts/ChartsTooltipparsed: 🔺+135B(+0.18%) gzip: ▼-15B(-0.06%)
@mui/x-charts-pro/ChartContainerProparsed: 🔺+132B(+0.09%) gzip: ▼-59B(-0.12%)
@mui/x-charts/Gaugeparsed: 🔺+131B(+0.12%) gzip: ▼-52B(-0.14%)
@mui/x-charts-pro/LineChartProparsed: 🔺+130B(+0.06%) gzip: ▼-21B(-0.03%)
@mui/x-charts-pro/ChartZoomSliderparsed: 🔺+128B(+0.19%) gzip: ▼-54B(-0.22%)
@mui/x-charts/SparkLineChartparsed: 🔺+128B(+0.07%) gzip: ▼-81B(-0.14%)
@mui/x-charts/ChartsAxisHighlightparsed: 🔺+127B(+0.21%) gzip: ▼-48B(-0.22%)
@mui/x-charts-pro/Heatmapparsed: 🔺+126B(+0.07%) gzip: ▼-76B(-0.12%)
@mui/x-charts/ChartContainerparsed: 🔺+124B(+0.11%) gzip: ▼-73B(-0.19%)
@mui/x-charts/ChartDataProviderparsed: 🔺+123B(+0.11%) gzip: ▼-68B(-0.19%)
@mui/x-charts/LineChartparsed: 🔺+122B(+0.06%) gzip: ▼-40B(-0.06%)
@mui/x-charts-pro/RadarChartProparsed: 🔺+120B(+0.07%) gzip: ▼-56B(-0.10%)
@mui/x-charts/ChartsLegendparsed: 🔺+118B(+0.16%) gzip: ▼-57B(-0.23%)
@mui/x-charts/ChartsReferenceLineparsed: 🔺+118B(+0.19%) gzip: ▼-56B(-0.25%)
@mui/x-charts/ChartsSurfaceparsed: 🔺+118B(+0.20%) gzip: ▼-30B(-0.14%)
@mui/x-charts-pro/ChartDataProviderProparsed: 🔺+116B(+0.09%) gzip: ▼-33B(-0.07%)
@mui/x-charts/ChartsGridparsed: 🔺+111B(+0.19%) gzip: ▼-51B(-0.24%)
@mui/x-charts-pro/ChartsToolbarProparsed: 🔺+104B(+0.16%) gzip: ▼-21B(-0.09%)
@mui/x-charts/ChartsAxisparsed: 🔺+100B(+0.14%) gzip: ▼-63B(-0.25%)
@mui/x-charts/ChartsXAxisparsed: 🔺+100B(+0.15%) gzip: ▼-55B(-0.22%)
@mui/x-charts/ChartsYAxisparsed: 🔺+100B(+0.15%) gzip: ▼-53B(-0.22%)
@mui/x-charts/ChartsClipPathparsed: 🔺+15B(+0.18%) gzip: ▼-31B(-0.93%)
@mui/x-charts/ChartsOverlayparsed: 🔺+8B(+0.08%) gzip: ▼-31B(-0.81%)
@mui/x-chartsparsed: ▼-415B(-0.15%) gzip: ▼-152B(-0.18%)
@mui/x-charts-pro/ScatterChartProparsed: ▼-241B(-0.12%) gzip: ▼-138B(-0.21%)
@mui/x-charts-proparsed: ▼-187B(-0.06%) gzip: ▼-120B(-0.11%)
@mui/x-charts/ScatterChartparsed: ▼-135B(-0.08%) gzip: ▼-126B(-0.24%)
@mui/x-date-pickersparsed: ▼-17B(-0.01%) gzip: ▼-4B(-0.01%)
@mui/x-date-pickers-proparsed: ▼-17B(-0.01%) gzip: ▼-4B(0.00%)
@mui/x-date-pickers-pro/DateRangePickerparsed: ▼-17B(-0.01%) gzip: ▼-6B(-0.01%)
@mui/x-date-pickers-pro/DateTimeRangePickerparsed: ▼-17B(-0.01%) gzip: ▼-4B(-0.01%)
@mui/x-date-pickers-pro/DesktopDateRangePickerparsed: ▼-17B(-0.01%) gzip: ▼-7B(-0.01%)
@mui/x-date-pickers-pro/DesktopDateTimeRangePickerparsed: ▼-17B(-0.01%) gzip: ▼-7B(-0.01%)
@mui/x-date-pickers-pro/DesktopTimeRangePickerparsed: ▼-17B(-0.01%) gzip: ▼-4B(-0.01%)
@mui/x-date-pickers-pro/MobileDateRangePickerparsed: ▼-17B(-0.01%) gzip: ▼-6B(-0.01%)
@mui/x-date-pickers-pro/MobileDateTimeRangePickerparsed: ▼-17B(-0.01%) gzip: ▼-13B(-0.02%)
@mui/x-date-pickers-pro/MobileTimeRangePickerparsed: ▼-17B(-0.01%) gzip: ▼-4B(-0.01%)
@mui/x-date-pickers-pro/MultiInputDateRangeFieldparsed: ▼-17B(-0.02%) gzip: ▼-3B(-0.01%)
@mui/x-date-pickers-pro/MultiInputDateTimeRangeFieldparsed: ▼-17B(-0.02%) gzip: ▼-2B(-0.01%)
@mui/x-date-pickers-pro/MultiInputTimeRangeFieldparsed: ▼-17B(-0.02%) gzip: ▼-3B(-0.01%)
@mui/x-date-pickers-pro/SingleInputDateRangeFieldparsed: ▼-17B(-0.02%) gzip: ▼-4B(-0.02%)
@mui/x-date-pickers-pro/SingleInputDateTimeRangeFieldparsed: ▼-17B(-0.02%) gzip: ▼-5B(-0.02%)
@mui/x-date-pickers-pro/SingleInputTimeRangeFieldparsed: ▼-17B(-0.02%) gzip: ▼-3B(-0.01%)
@mui/x-date-pickers-pro/TimeRangePickerparsed: ▼-17B(-0.01%) gzip: ▼-5B(-0.01%)
@mui/x-date-pickers/DateFieldparsed: ▼-17B(-0.02%) gzip: ▼-5B(-0.02%)
@mui/x-date-pickers/DatePickerparsed: ▼-17B(-0.01%) gzip: ▼-4B(-0.01%)
@mui/x-date-pickers/DateTimeFieldparsed: ▼-17B(-0.02%) gzip: ▼-5B(-0.02%)
@mui/x-date-pickers/DateTimePickerparsed: ▼-17B(-0.01%) gzip: ▼-9B(-0.02%)
@mui/x-date-pickers/DesktopDatePickerparsed: ▼-17B(-0.01%) gzip: ▼-4B(-0.01%)
@mui/x-date-pickers/DesktopDateTimePickerparsed: ▼-17B(-0.01%) gzip: ▼-6B(-0.01%)
@mui/x-date-pickers/DesktopTimePickerparsed: ▼-17B(-0.01%) gzip: ▼-7B(-0.02%)
@mui/x-date-pickers/MobileDatePickerparsed: ▼-17B(-0.01%) gzip: ▼-4B(-0.01%)
@mui/x-date-pickers/MobileDateTimePickerparsed: ▼-17B(-0.01%) gzip: ▼-5B(-0.01%)
@mui/x-date-pickers/MobileTimePickerparsed: ▼-17B(-0.01%) gzip: ▼-6B(-0.02%)
@mui/x-date-pickers/PickersTextFieldparsed: ▼-17B(-0.06%) gzip: ▼-4B(-0.05%)
@mui/x-date-pickers/TimeFieldparsed: ▼-17B(-0.02%) gzip: ▼-5B(-0.02%)
@mui/x-date-pickers/TimePickerparsed: ▼-17B(-0.01%) gzip: ▼-6B(-0.01%)
@mui/x-charts/ChartsLabelparsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/x-charts/ChartsLocalizationProviderparsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/x-charts/ChartsTextparsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/x-charts/Toolbarparsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/x-data-gridparsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/x-data-grid-premiumparsed: 0B(0.00%) gzip: 🔺+1B(0.00%)
@mui/x-data-grid-premium/DataGridPremiumparsed: 0B(0.00%) gzip: 🔺+1B(0.00%)
@mui/x-data-grid-proparsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/x-data-grid-pro/DataGridProparsed: 0B(0.00%) gzip: 🔺+1B(0.00%)
@mui/x-data-grid/DataGridparsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/x-date-pickers-pro/AdapterDateFnsparsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/x-date-pickers-pro/AdapterDateFnsJalaliparsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/x-date-pickers-pro/AdapterDayjsparsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/x-date-pickers-pro/AdapterLuxonparsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/x-date-pickers-pro/AdapterMomentparsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/x-date-pickers-pro/AdapterMomentHijriparsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/x-date-pickers-pro/AdapterMomentJalaaliparsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/x-date-pickers-pro/DateRangeCalendarparsed: 0B(0.00%) gzip: 🔺+1B(0.00%)
@mui/x-date-pickers-pro/DateRangePickerDayparsed: 0B(0.00%) gzip: 🔺+1B(+0.01%)
@mui/x-date-pickers-pro/DateRangePickerDay2parsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/x-date-pickers-pro/LocalizationProviderparsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/x-date-pickers-pro/PickersRangeCalendarHeaderparsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/x-date-pickers-pro/StaticDateRangePickerparsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/x-date-pickers/AdapterDateFnsparsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/x-date-pickers/AdapterDateFnsBaseparsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/x-date-pickers/AdapterDateFnsJalaliparsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/x-date-pickers/AdapterDayjsparsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/x-date-pickers/AdapterLuxonparsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/x-date-pickers/AdapterMomentparsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/x-date-pickers/AdapterMomentHijriparsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/x-date-pickers/AdapterMomentJalaaliparsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/x-date-pickers/DateCalendarparsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/x-date-pickers/DayCalendarSkeletonparsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/x-date-pickers/DigitalClockparsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/x-date-pickers/LocalizationProviderparsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/x-date-pickers/MonthCalendarparsed: 0B(0.00%) gzip: 0B(0.00%)
@mui/x-date-pickers/MultiSectionDigitalClockparsed: 0B(0.00%) gzip: 0B(0.00%)

Details of bundle changes

Generated by 🚫 dangerJS against 8eaa277

@alexfauquette alexfauquette added typescript scope: charts Changes or issues related to the charts product labels Jun 13, 2025
Copy link

codspeed-hq bot commented Jun 13, 2025

CodSpeed Performance Report

Merging #18362 will degrade performances by 14.6%

Comparing alexfauquette:type-selectors (8eaa277) with master (c4245ec)

Summary

❌ 4 regressions
✅ 5 untouched benchmarks

⚠️ Please fix the performance issues or acknowledge them on CodSpeed.

Benchmarks breakdown

Benchmark BASE HEAD Change
BarChartPro with big data amount 487.4 ms 541.5 ms -9.98%
LineChartPro with big data amount 84.4 ms 94 ms -10.18%
ScatterChartPro with big data amount 54.6 ms 64 ms -14.6%
ScatterChartPro with big data amount and zoomed in 49.6 ms 57.8 ms -14.13%

@bernardobelchior
Copy link
Member

This seems to work, but we're ditching createSelector which has some caching logic.

Looking at createSelector, it isn't generic. Should we make it generic on the state type so that we can specify it and fix this issue without losing createSelector's functionality, or are we ok with losing that?

@JCQuintas
Copy link
Member

This seems to work, but we're ditching createSelector which has some caching logic.

Looking at createSelector, it isn't generic. Should we make it generic on the state type so that we can specify it and fix this issue without losing createSelector's functionality, or are we ok with losing that?

It is generic though, it is typecast with as unknown as CreateSelectorFunction, and that is probably the main issue.

We could try to manually make it generic with our own typings, or we could try to make the type required, so whoever is calling the createSelector has to type the expected params/return.

@alexfauquette
Copy link
Member Author

I tried importing a simpler version of reselect type system. It effectively solves our issue without having to manually type any selector

Map<Parameters<typeof reselectCreateSelector>, any>
Map<
[
inputSelectors: [...SelectorArray<any>],
Copy link
Member

Choose a reason for hiding this comment

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

Isn't this enough?

Suggested change
inputSelectors: [...SelectorArray<any>],
inputSelectors: SelectorArray<any>,

Same in line 72.

Comment on lines +167 to +188
const xAxisFilter =
zoomMap &&
zoomOptions &&
createAxisFilterMapper({
zoomMap,
zoomOptions,
seriesConfig,
formattedSeries,
direction: 'x',
});
const yAxisFilter =
zoomMap &&
zoomOptions &&
createAxisFilterMapper({
zoomMap,
zoomOptions,
seriesConfig,
formattedSeries,
direction: 'y',
});

const getFilters = getZoomAxisFilters(xAxisFilter, yAxisFilter, xAxis, yAxis);
Copy link
Member

Choose a reason for hiding this comment

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

This change doesn't seem related to fixing types. Is it fixing something?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
scope: charts Changes or issues related to the charts product typescript
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants