Skip to content

Commit ef960bb

Browse files
committed
[CircularProgress] Apply useSlot()
1 parent 8367e02 commit ef960bb

File tree

2 files changed

+44
-32
lines changed

2 files changed

+44
-32
lines changed

packages/mui-joy/src/CircularProgress/CircularProgress.tsx

Lines changed: 24 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { unstable_composeClasses as composeClasses } from '@mui/base';
2-
import { useSlotProps } from '@mui/base/utils';
32
import { css, keyframes } from '@mui/system';
43
import { OverridableComponent } from '@mui/types';
54
import { unstable_capitalize as capitalize } from '@mui/utils';
@@ -8,6 +7,7 @@ import PropTypes from 'prop-types';
87
import * as React from 'react';
98
import styled from '../styles/styled';
109
import useThemeProps from '../styles/useThemeProps';
10+
import useSlot from '../utils/useSlot';
1111
import { getCircularProgressUtilityClass } from './circularProgressClasses';
1212
import {
1313
CircularProgressOwnerState,
@@ -189,8 +189,6 @@ const CircularProgress = React.forwardRef(function CircularProgress(inProps, ref
189189
});
190190

191191
const {
192-
componentsProps = {},
193-
component = 'span',
194192
children,
195193
className,
196194
color = 'primary',
@@ -215,59 +213,57 @@ const CircularProgress = React.forwardRef(function CircularProgress(inProps, ref
215213

216214
const classes = useUtilityClasses(ownerState);
217215

218-
const rootProps = useSlotProps({
216+
const [SlotRoot, rootProps] = useSlot('root', {
217+
ref,
218+
className: clsx(classes.root, className),
219219
elementType: CircularProgressRoot,
220-
externalSlotProps: componentsProps.root,
221220
externalForwardedProps: other,
222221
ownerState,
223222
additionalProps: {
224-
ref,
225-
as: component,
226223
role: 'progressbar',
227224
style: {
228225
// Setting this CSS varaible via inline-style
229226
// prevents the generation of new CSS every time
230227
// `value` prop updates
231228
'--CircularProgress-percent': value,
232229
},
230+
...(value &&
231+
determinate && {
232+
'aria-valuenow':
233+
typeof value === 'number' ? Math.round(value) : Math.round(Number(value || 0)),
234+
}),
233235
},
234-
className: clsx(classes.root, className),
235-
...(value &&
236-
determinate && {
237-
'aria-valuenow':
238-
typeof value === 'number' ? Math.round(value) : Math.round(Number(value || 0)),
239-
}),
240236
});
241237

242-
const svgProps = useSlotProps({
238+
const [SlotSvg, svgProps] = useSlot('svg', {
239+
className: classes.svg,
243240
elementType: CircularProgressSvg,
244-
externalSlotProps: componentsProps.svg,
241+
externalForwardedProps: other,
245242
ownerState,
246-
className: classes.svg,
247243
});
248244

249-
const trackProps = useSlotProps({
245+
const [SlotTrack, trackProps] = useSlot('track', {
246+
className: classes.track,
250247
elementType: CircularProgressTrack,
251-
externalSlotProps: componentsProps.track,
248+
externalForwardedProps: other,
252249
ownerState,
253-
className: classes.track,
254250
});
255251

256-
const progressProps = useSlotProps({
252+
const [SlotProgress, progressProps] = useSlot('progress', {
253+
className: classes.progress,
257254
elementType: CircularProgressProgress,
258-
externalSlotProps: componentsProps.progress,
255+
externalForwardedProps: other,
259256
ownerState,
260-
className: classes.progress,
261257
});
262258

263259
return (
264-
<CircularProgressRoot {...rootProps}>
265-
<CircularProgressSvg {...svgProps}>
266-
<CircularProgressTrack {...trackProps} />
267-
<CircularProgressProgress {...progressProps} />
268-
</CircularProgressSvg>
260+
<SlotRoot {...rootProps}>
261+
<SlotSvg {...svgProps}>
262+
<SlotTrack {...trackProps} />
263+
<SlotProgress {...progressProps} />
264+
</SlotSvg>
269265
{children}
270-
</CircularProgressRoot>
266+
</SlotRoot>
271267
);
272268
}) as OverridableComponent<CircularProgressTypeMap>;
273269

packages/mui-joy/src/CircularProgress/CircularProgressProps.ts

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,26 @@ export interface CircularProgressPropsSizeOverrides {}
1010
export interface CircularProgressPropsVariantOverrides {}
1111

1212
interface ComponentsProps {
13-
root?: SlotComponentProps<'span', { sx?: SxProps }, CircularProgressOwnerState>;
14-
svg?: SlotComponentProps<'svg', { sx?: SxProps }, CircularProgressOwnerState>;
15-
track?: SlotComponentProps<'circle', { sx?: SxProps }, CircularProgressOwnerState>;
16-
progress?: SlotComponentProps<'circle', { sx?: SxProps }, CircularProgressOwnerState>;
13+
root?: SlotComponentProps<
14+
'span',
15+
{ component?: React.ElementType; sx?: SxProps },
16+
CircularProgressOwnerState
17+
>;
18+
svg?: SlotComponentProps<
19+
'svg',
20+
{ component?: React.ElementType; sx?: SxProps },
21+
CircularProgressOwnerState
22+
>;
23+
track?: SlotComponentProps<
24+
'circle',
25+
{ component?: React.ElementType; sx?: SxProps },
26+
CircularProgressOwnerState
27+
>;
28+
progress?: SlotComponentProps<
29+
'circle',
30+
{ component?: React.ElementType; sx?: SxProps },
31+
CircularProgressOwnerState
32+
>;
1733
}
1834

1935
export interface CircularProgressTypeMap<P = {}, D extends React.ElementType = 'span'> {

0 commit comments

Comments
 (0)