Skip to content

Commit f37ae3f

Browse files
authored
[pickers] Migrate PickersTransition to emotion
1 parent 572fd06 commit f37ae3f

File tree

2 files changed

+68
-63
lines changed

2 files changed

+68
-63
lines changed
Lines changed: 29 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
import * as React from 'react';
22
import clsx from 'clsx';
3-
import { MuiStyles, WithStyles, withStyles, StyleRules } from '@material-ui/core/styles';
3+
import { experimentalStyled as styled } from '@material-ui/core/styles';
4+
import { generateUtilityClasses } from '@material-ui/unstyled';
45
import { CSSTransition, TransitionGroup } from 'react-transition-group';
6+
import { TransitionGroupProps } from 'react-transition-group/TransitionGroup';
57

68
interface FadeTransitionProps {
79
children: React.ReactElement;
@@ -10,52 +12,55 @@ interface FadeTransitionProps {
1012
transKey: React.Key;
1113
}
1214

13-
export type PickersFadeTransitionGroupClassKey =
14-
| 'root'
15-
| 'fadeEnter'
16-
| 'fadeEnterActive'
17-
| 'fadeExit'
18-
| 'fadeExitActive';
15+
const classes = generateUtilityClasses('PrivatePickersFadeTransitionGroup', [
16+
'root',
17+
'fadeEnter',
18+
'fadeEnterActive',
19+
'fadeExit',
20+
'fadeExitActive',
21+
]);
1922

2023
const animationDuration = 500;
21-
export const styles: MuiStyles<PickersFadeTransitionGroupClassKey> = (
22-
theme,
23-
): StyleRules<PickersFadeTransitionGroupClassKey> => ({
24-
root: {
25-
display: 'block',
26-
position: 'relative',
24+
25+
const PickersFadeTransitionGroupRoot = styled(
26+
TransitionGroup,
27+
{},
28+
{
29+
skipSx: true,
2730
},
28-
fadeEnter: {
31+
)<TransitionGroupProps>(({ theme }) => ({
32+
display: 'block',
33+
position: 'relative',
34+
[`& .${classes.fadeEnter}`]: {
2935
willChange: 'transform',
3036
opacity: 0,
3137
},
32-
fadeEnterActive: {
38+
[`& .${classes.fadeEnterActive}`]: {
3339
opacity: 1,
3440
transition: theme.transitions.create('opacity', {
3541
duration: animationDuration,
3642
}),
3743
},
38-
fadeExit: {
44+
[`& .${classes.fadeExit}`]: {
3945
opacity: 1,
4046
},
41-
fadeExitActive: {
47+
[`& .${classes.fadeExitActive}`]: {
4248
opacity: 0,
4349
transition: theme.transitions.create('opacity', {
4450
duration: animationDuration / 2,
4551
}),
4652
},
47-
});
53+
}));
4854

4955
/**
5056
* @ignore - do not document.
5157
*/
52-
const FadeTransitionGroup: React.FC<FadeTransitionProps & WithStyles<typeof styles>> = ({
53-
classes,
58+
const PickersFadeTransitionGroup = ({
5459
children,
5560
className,
5661
reduceAnimations,
5762
transKey,
58-
}) => {
63+
}: FadeTransitionProps) => {
5964
if (reduceAnimations) {
6065
return children;
6166
}
@@ -68,7 +73,7 @@ const FadeTransitionGroup: React.FC<FadeTransitionProps & WithStyles<typeof styl
6873
};
6974

7075
return (
71-
<TransitionGroup
76+
<PickersFadeTransitionGroupRoot
7277
className={clsx(classes.root, className)}
7378
childFactory={(element) =>
7479
React.cloneElement(element, {
@@ -85,10 +90,8 @@ const FadeTransitionGroup: React.FC<FadeTransitionProps & WithStyles<typeof styl
8590
>
8691
{children}
8792
</CSSTransition>
88-
</TransitionGroup>
93+
</PickersFadeTransitionGroupRoot>
8994
);
9095
};
9196

92-
export default withStyles(styles, { name: 'PrivatePickersFadeTransitionGroup' })(
93-
FadeTransitionGroup,
94-
);
97+
export default PickersFadeTransitionGroup;
Lines changed: 39 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
import * as React from 'react';
22
import clsx from 'clsx';
3-
import { MuiStyles, StyleRules, WithStyles, withStyles } from '@material-ui/core/styles';
3+
import { experimentalStyled as styled } from '@material-ui/core/styles';
4+
import { generateUtilityClasses } from '@material-ui/unstyled';
45
import { CSSTransition, TransitionGroup } from 'react-transition-group';
56
import { CSSTransitionProps } from 'react-transition-group/CSSTransition';
7+
import { TransitionGroupProps } from 'react-transition-group/TransitionGroup';
68

79
export type SlideDirection = 'right' | 'left';
810
export interface SlideTransitionProps extends Omit<CSSTransitionProps, 'timeout'> {
@@ -13,81 +15,81 @@ export interface SlideTransitionProps extends Omit<CSSTransitionProps, 'timeout'
1315
transKey: React.Key;
1416
}
1517

16-
export type PickersSlideTransitionClassKey =
17-
| 'root'
18-
| 'slideEnter-left'
19-
| 'slideEnter-right'
20-
| 'slideEnterActive'
21-
| 'slideEnterActive'
22-
| 'slideExit'
23-
| 'slideExitActiveLeft-left'
24-
| 'slideExitActiveLeft-right';
18+
const classes = generateUtilityClasses('PrivatePickersSlideTransition', [
19+
'root',
20+
'slideEnter-left',
21+
'slideEnter-right',
22+
'slideEnterActive',
23+
'slideEnterActive',
24+
'slideExit',
25+
'slideExitActiveLeft-left',
26+
'slideExitActiveLeft-right',
27+
]);
2528

2629
export const slideAnimationDuration = 350;
27-
export const styles: MuiStyles<PickersSlideTransitionClassKey> = (
28-
theme,
29-
): StyleRules<PickersSlideTransitionClassKey> => {
30+
31+
const PickersSlideTransitionRoot = styled(
32+
TransitionGroup,
33+
{},
34+
{ skipSx: true },
35+
)<TransitionGroupProps>(({ theme }) => {
3036
const slideTransition = theme.transitions.create('transform', {
3137
duration: slideAnimationDuration,
3238
easing: 'cubic-bezier(0.35, 0.8, 0.4, 1)',
3339
});
34-
3540
return {
36-
root: {
37-
display: 'block',
38-
position: 'relative',
39-
overflowX: 'hidden',
40-
'& > *': {
41-
position: 'absolute',
42-
top: 0,
43-
right: 0,
44-
left: 0,
45-
},
41+
display: 'block',
42+
position: 'relative',
43+
overflowX: 'hidden',
44+
'& > *': {
45+
position: 'absolute',
46+
top: 0,
47+
right: 0,
48+
left: 0,
4649
},
47-
'slideEnter-left': {
50+
[`& .${classes['slideEnter-left']}`]: {
4851
willChange: 'transform',
4952
transform: 'translate(100%)',
5053
zIndex: 1,
5154
},
52-
'slideEnter-right': {
55+
[`& .${classes['slideEnter-right']}`]: {
5356
willChange: 'transform',
5457
transform: 'translate(-100%)',
5558
zIndex: 1,
5659
},
57-
slideEnterActive: {
60+
[`& .${classes.slideEnterActive}`]: {
5861
transform: 'translate(0%)',
5962
transition: slideTransition,
6063
},
61-
slideExit: {
64+
[`& .${classes.slideExit}`]: {
6265
transform: 'translate(0%)',
6366
},
64-
'slideExitActiveLeft-left': {
67+
[`& .${classes['slideExitActiveLeft-left']}`]: {
6568
willChange: 'transform',
6669
transform: 'translate(-100%)',
6770
transition: slideTransition,
6871
zIndex: 0,
6972
},
70-
'slideExitActiveLeft-right': {
73+
[`& .${classes['slideExitActiveLeft-right']}`]: {
7174
willChange: 'transform',
7275
transform: 'translate(100%)',
7376
transition: slideTransition,
7477
zIndex: 0,
7578
},
7679
};
77-
};
80+
});
7881

7982
/**
8083
* @ignore - do not document.
8184
*/
82-
const SlideTransition: React.FC<SlideTransitionProps & WithStyles<typeof styles>> = ({
85+
const PickersSlideTransition = ({
8386
children,
84-
classes,
8587
className,
8688
reduceAnimations,
8789
slideDirection,
8890
transKey,
8991
...other
90-
}) => {
92+
}: SlideTransitionProps) => {
9193
if (reduceAnimations) {
9294
return <div className={clsx(classes.root, className)}>{children}</div>;
9395
}
@@ -105,7 +107,7 @@ const SlideTransition: React.FC<SlideTransitionProps & WithStyles<typeof styles>
105107
};
106108

107109
return (
108-
<TransitionGroup
110+
<PickersSlideTransitionRoot
109111
className={clsx(classes.root, className)}
110112
childFactory={(element) =>
111113
React.cloneElement(element, {
@@ -123,8 +125,8 @@ const SlideTransition: React.FC<SlideTransitionProps & WithStyles<typeof styles>
123125
>
124126
{children}
125127
</CSSTransition>
126-
</TransitionGroup>
128+
</PickersSlideTransitionRoot>
127129
);
128130
};
129131

130-
export default withStyles(styles, { name: 'PrivatePickersSlideTransition' })(SlideTransition);
132+
export default PickersSlideTransition;

0 commit comments

Comments
 (0)