mui-x icon indicating copy to clipboard operation
mui-x copied to clipboard

[charts][draft] Explore selector typing

Open alexfauquette opened this issue 7 months ago • 5 comments

alexfauquette avatar Jun 13 '25 14:06 alexfauquette

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

Bundle size report

:information_source: Using snapshot from parent commit 45c9e35ebfd522d3fba3e84c0ffec0e0b6f017dd (fallback from 206128ae28c2c2e4ed0a2f112d21bb843ae848a6).

Total Size Change: ▼-1.38KB(-0.01%) - Total Gzip Change: ▼-1.57KB(-0.04%) Files: 122 total (0 added, 0 removed, 38 changed)

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

@mui/x-charts/ChartsClipPathparsed: 🔺+18B(+0.21%) gzip: ▼-33B(-0.99%) @mui/x-charts/ChartsOverlayparsed: 🔺+11B(+0.11%) gzip: ▼-32B(-0.84%) @mui/x-charts-pro/BarChartProparsed: 🔺+8B(0.00%) gzip: ▼-67B(-0.09%) @mui/x-charts-pro/PieChartProparsed: 🔺+3B(0.00%) gzip: ▼-62B(-0.10%) @mui/x-charts-proparsed: ▼-445B(-0.13%) gzip: ▼-100B(-0.10%) @mui/x-chartsparsed: ▼-304B(-0.11%) gzip: ▼-68B(-0.08%) @mui/x-charts-pro/ScatterChartProparsed: ▼-155B(-0.08%) gzip: ▼-41B(-0.06%) @mui/x-charts-pro/FunnelChartparsed: ▼-114B(-0.05%) gzip: ▼-58B(-0.09%) @mui/x-charts/ChartsAxisparsed: ▼-33B(-0.05%) gzip: ▼-56B(-0.22%) @mui/x-charts/ChartsXAxisparsed: ▼-33B(-0.05%) gzip: ▼-48B(-0.20%) @mui/x-charts/ChartsYAxisparsed: ▼-33B(-0.05%) gzip: ▼-47B(-0.19%) @mui/x-charts-pro/ChartsToolbarProparsed: ▼-29B(-0.05%) gzip: ▼-18B(-0.08%) @mui/x-charts/ChartsGridparsed: ▼-29B(-0.05%) gzip: ▼-46B(-0.22%) @mui/x-charts/ScatterChartparsed: ▼-24B(-0.01%) gzip: ▼-32B(-0.06%) @mui/x-charts/ChartsLegendparsed: ▼-22B(-0.03%) gzip: ▼-50B(-0.20%) @mui/x-charts/ChartsReferenceLineparsed: ▼-22B(-0.04%) gzip: ▼-50B(-0.23%) @mui/x-charts/ChartsSurfaceparsed: ▼-22B(-0.04%) gzip: ▼-27B(-0.13%) @mui/x-charts-pro/RadarChartProparsed: ▼-20B(-0.01%) gzip: ▼-57B(-0.10%) @mui/x-charts-pro/ChartDataProviderProparsed: ▼-17B(-0.01%) gzip: ▼-31B(-0.07%) @mui/x-charts/ChartDataProviderparsed: ▼-17B(-0.02%) gzip: ▼-52B(-0.14%) @mui/x-charts/ChartContainerparsed: ▼-16B(-0.01%) gzip: ▼-63B(-0.16%) @mui/x-charts/ChartsAxisHighlightparsed: ▼-13B(-0.02%) gzip: ▼-44B(-0.20%) @mui/x-charts-pro/ChartZoomSliderparsed: ▼-12B(-0.02%) gzip: ▼-64B(-0.27%) @mui/x-charts/LineChartparsed: ▼-11B(-0.01%) gzip: ▼-46B(-0.07%) @mui/x-charts/Gaugeparsed: ▼-9B(-0.01%) gzip: ▼-37B(-0.10%) @mui/x-charts-pro/ChartContainerProparsed: ▼-8B(-0.01%) gzip: ▼-56B(-0.12%) @mui/x-charts/SparkLineChartparsed: ▼-8B(0.00%) gzip: ▼-68B(-0.12%) @mui/x-charts-pro/Heatmapparsed: ▼-7B(0.00%) gzip: ▼-78B(-0.12%) @mui/x-charts/ChartsTooltipparsed: ▼-5B(-0.01%) gzip: ▼-17B(-0.06%) @mui/x-charts-pro/LineChartProparsed: ▼-3B(0.00%) gzip: ▼-24B(-0.03%) @mui/x-charts/PieChartparsed: ▼-3B(0.00%) gzip: ▼-6B(-0.01%) @mui/x-charts/RadarChartparsed: ▼-2B(0.00%) gzip: ▼-55B(-0.11%) @mui/x-charts/BarChartparsed: 0B(0.00%) gzip: ▼-36B(-0.06%) @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: 0B(0.00%) @mui/x-data-grid-premium/DataGridPremiumparsed: 0B(0.00%) gzip: 0B(0.00%) @mui/x-data-grid-proparsed: 0B(0.00%) gzip: 0B(0.00%) @mui/x-data-grid-pro/DataGridProparsed: 0B(0.00%) gzip: 0B(0.00%) @mui/x-data-grid/DataGridparsed: 0B(0.00%) gzip: 0B(0.00%) @mui/x-date-pickersparsed: 0B(0.00%) gzip: 0B(0.00%) @mui/x-date-pickers-proparsed: 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: 0B(0.00%) @mui/x-date-pickers-pro/DateRangePickerparsed: 0B(0.00%) gzip: 🔺+2B(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/DateTimeRangePickerparsed: 0B(0.00%) gzip: 0B(0.00%) @mui/x-date-pickers-pro/DesktopDateRangePickerparsed: 0B(0.00%) gzip: 0B(0.00%) @mui/x-date-pickers-pro/DesktopDateTimeRangePickerparsed: 0B(0.00%) gzip: 0B(0.00%) @mui/x-date-pickers-pro/DesktopTimeRangePickerparsed: 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/MobileDateRangePickerparsed: 0B(0.00%) gzip: 🔺+2B(0.00%) @mui/x-date-pickers-pro/MobileDateTimeRangePickerparsed: 0B(0.00%) gzip: ▼-1B(0.00%) @mui/x-date-pickers-pro/MobileTimeRangePickerparsed: 0B(0.00%) gzip: 0B(0.00%) @mui/x-date-pickers-pro/MultiInputDateRangeFieldparsed: 0B(0.00%) gzip: 0B(0.00%) @mui/x-date-pickers-pro/MultiInputDateTimeRangeFieldparsed: 0B(0.00%) gzip: 0B(0.00%) @mui/x-date-pickers-pro/MultiInputTimeRangeFieldparsed: 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/SingleInputDateRangeFieldparsed: 0B(0.00%) gzip: 0B(0.00%) @mui/x-date-pickers-pro/SingleInputDateTimeRangeFieldparsed: 0B(0.00%) gzip: 0B(0.00%) @mui/x-date-pickers-pro/SingleInputTimeRangeFieldparsed: 0B(0.00%) gzip: 0B(0.00%) @mui/x-date-pickers-pro/StaticDateRangePickerparsed: 0B(0.00%) gzip: 0B(0.00%) @mui/x-date-pickers-pro/TimeRangePickerparsed: 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/DateFieldparsed: 0B(0.00%) gzip: 0B(0.00%) @mui/x-date-pickers/DatePickerparsed: 0B(0.00%) gzip: 0B(0.00%) @mui/x-date-pickers/DateTimeFieldparsed: 0B(0.00%) gzip: 0B(0.00%) @mui/x-date-pickers/DateTimePickerparsed: 0B(0.00%) gzip: 0B(0.00%) @mui/x-date-pickers/DayCalendarSkeletonparsed: 0B(0.00%) gzip: 0B(0.00%) @mui/x-date-pickers/DesktopDatePickerparsed: 0B(0.00%) gzip: 0B(0.00%) @mui/x-date-pickers/DesktopDateTimePickerparsed: 0B(0.00%) gzip: 0B(0.00%) @mui/x-date-pickers/DesktopTimePickerparsed: 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/MobileDatePickerparsed: 0B(0.00%) gzip: 0B(0.00%) @mui/x-date-pickers/MobileDateTimePickerparsed: 0B(0.00%) gzip: 0B(0.00%) @mui/x-date-pickers/MobileTimePickerparsed: 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%) @mui/x-date-pickers/PickerDay2parsed: 0B(0.00%) gzip: 0B(0.00%) @mui/x-date-pickers/PickersActionBarparsed: 0B(0.00%) gzip: 0B(0.00%) @mui/x-date-pickers/PickersCalendarHeaderparsed: 0B(0.00%) gzip: 0B(0.00%)

Details of bundle changes

Generated by :no_entry_sign: dangerJS against fdc491a52539c4aa8994ec913f5bbb082d4283a2

mui-bot avatar Jun 13 '25 14:06 mui-bot

CodSpeed Performance Report

Merging #18362 will not alter performance

Comparing alexfauquette:type-selectors (fdc491a) with master (c4245ec)

Summary

✅ 9 untouched benchmarks

codspeed-hq[bot] avatar Jun 13 '25 16:06 codspeed-hq[bot]

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?

bernardobelchior avatar Jun 16 '25 08:06 bernardobelchior

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.

JCQuintas avatar Jun 16 '25 09:06 JCQuintas

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

alexfauquette avatar Jun 16 '25 13:06 alexfauquette

Superb improvement, great work! 🙏

LukasTy avatar Jun 17 '25 14:06 LukasTy