Skip to content

Commit 20be00a

Browse files
committed
use flexbox hack
1 parent c170ba1 commit 20be00a

File tree

6 files changed

+36
-94
lines changed

6 files changed

+36
-94
lines changed

packages/react-components/react-menu/library/src/components/MenuItem/renderMenuItem.tsx

+5-2
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,11 @@ export const renderMenuItem_unstable = (state: MenuItemState) => {
1313
<state.root>
1414
{state.checkmark && <state.checkmark />}
1515
{state.icon && <state.icon />}
16-
{state.content && <state.content />}
17-
{state.subText && <state.subText />}
16+
{state.content && (
17+
<state.content>
18+
{state.content.children} {state.subText && <state.subText />}
19+
</state.content>
20+
)}
1821
{state.secondaryContent && <state.secondaryContent />}
1922
{state.submenuIndicator && <state.submenuIndicator />}
2023
</state.root>

packages/react-components/react-menu/library/src/components/MenuItem/useMenuItemStyles.styles.ts

+5-78
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,6 @@ import type { MenuItemCheckboxState } from '../MenuItemCheckbox/index';
77
import type { MenuItemSlots, MenuItemState } from './MenuItem.types';
88
import type { SlotClassNames } from '@fluentui/react-utilities';
99

10-
const cssVars = {
11-
menuItemMultilineGridAreas: '--fui-MenuItem-grid-areas',
12-
menuItemMultilineGridColumns: '--fui-MenuItem-grid-columns',
13-
};
14-
1510
export const menuItemClassNames: SlotClassNames<MenuItemSlots> = {
1611
root: 'fui-MenuItem',
1712
icon: 'fui-MenuItem__icon',
@@ -119,8 +114,6 @@ const useSubmenuIndicatorBaseStyles = makeResetStyles({
119114

120115
const useSubtextBaseStyles = makeResetStyles({
121116
...typographyStyles.caption2,
122-
paddingLeft: '2px',
123-
paddingRight: '2px',
124117
});
125118

126119
const useStyles = makeStyles({
@@ -188,62 +181,20 @@ const useStyles = makeStyles({
188181
});
189182

190183
const useMultilineStyles = makeStyles({
191-
root: {
192-
display: 'grid',
193-
gridTemplateColumns: `var(${cssVars.menuItemMultilineGridColumns})`,
194-
gridTemplateAreas: `var(${cssVars.menuItemMultilineGridAreas})`,
195-
},
196-
197-
checkmark: {
198-
gridArea: 'checkmark',
199-
},
200-
201-
icon: {
202-
gridArea: 'icon',
203-
},
204-
205184
content: {
206-
gridArea: 'content',
185+
display: 'flex',
186+
flexDirection: 'column',
207187
},
208188

209189
secondaryContent: {
210-
gridArea: 'secondaryContent',
211190
alignSelf: 'center',
212191
},
213192

214-
subText: {
215-
gridArea: 'subText',
216-
},
217-
218193
submenuIndicator: {
219194
alignSelf: 'center',
220-
gridArea: 'submenuIndicator',
221195
},
222196
});
223197

224-
const buildMultilineGridArea = (slots: MenuItemSlots, hasSubmenu: boolean) => {
225-
const checkmark = slots.checkmark ? 'checkmark' : '';
226-
const icon = slots.icon ? 'icon' : '';
227-
const secondaryContent = slots.secondaryContent ? 'secondaryContent' : '';
228-
const submenuIndicator = slots.submenuIndicator || hasSubmenu ? 'submenuIndicator' : '';
229-
230-
return `
231-
"${checkmark} ${icon} content ${secondaryContent} ${submenuIndicator}"
232-
"${checkmark} ${icon} subText ${secondaryContent} ${submenuIndicator}"
233-
`;
234-
};
235-
236-
const buildMultilineGridColumns = (slots: MenuItemSlots, hasSubmenu: boolean) => {
237-
const checkmark = slots.checkmark ? 'auto' : '';
238-
const icon = slots.icon ? 'auto' : '';
239-
const secondaryContent = slots.secondaryContent ? 'auto' : '';
240-
const submenuIndicator = slots.submenuIndicator || hasSubmenu ? 'auto' : '';
241-
242-
return `
243-
${checkmark} ${icon} 1fr ${secondaryContent} ${submenuIndicator}
244-
`;
245-
};
246-
247198
/** Applies style classnames to slots */
248199
export const useMenuItemStyles_unstable = (state: MenuItemState): MenuItemState => {
249200
'use no memo';
@@ -261,18 +212,9 @@ export const useMenuItemStyles_unstable = (state: MenuItemState): MenuItemState
261212
menuItemClassNames.root,
262213
rootBaseStyles,
263214
state.disabled && styles.disabled,
264-
multiline && multilineStyles.root,
265215
state.root.className,
266216
);
267217

268-
if (multiline) {
269-
state.root.style ??= {};
270-
Object.assign(state.root.style, {
271-
[cssVars.menuItemMultilineGridAreas]: buildMultilineGridArea(state, state.hasSubmenu),
272-
[cssVars.menuItemMultilineGridColumns]: buildMultilineGridColumns(state, state.hasSubmenu),
273-
});
274-
}
275-
276218
if (state.content) {
277219
state.content.className = mergeClasses(
278220
menuItemClassNames.content,
@@ -283,12 +225,7 @@ export const useMenuItemStyles_unstable = (state: MenuItemState): MenuItemState
283225
}
284226

285227
if (state.checkmark) {
286-
state.checkmark.className = mergeClasses(
287-
menuItemClassNames.checkmark,
288-
styles.checkmark,
289-
state.checkmark.className,
290-
multiline && multilineStyles.checkmark,
291-
);
228+
state.checkmark.className = mergeClasses(menuItemClassNames.checkmark, styles.checkmark, state.checkmark.className);
292229
}
293230

294231
if (state.secondaryContent) {
@@ -301,12 +238,7 @@ export const useMenuItemStyles_unstable = (state: MenuItemState): MenuItemState
301238
}
302239

303240
if (state.icon) {
304-
state.icon.className = mergeClasses(
305-
menuItemClassNames.icon,
306-
iconBaseStyles,
307-
state.icon.className,
308-
multiline && multilineStyles.icon,
309-
);
241+
state.icon.className = mergeClasses(menuItemClassNames.icon, iconBaseStyles, state.icon.className);
310242
}
311243

312244
if (state.submenuIndicator) {
@@ -319,12 +251,7 @@ export const useMenuItemStyles_unstable = (state: MenuItemState): MenuItemState
319251
}
320252

321253
if (state.subText) {
322-
state.subText.className = mergeClasses(
323-
menuItemClassNames.subText,
324-
state.subText.className,
325-
subtextBaseStyles,
326-
multiline && multilineStyles.subText,
327-
);
254+
state.subText.className = mergeClasses(menuItemClassNames.subText, state.subText.className, subtextBaseStyles);
328255
}
329256

330257
useCheckmarkStyles_unstable(state as MenuItemCheckboxState);

packages/react-components/react-menu/library/src/components/MenuItemCheckbox/renderMenuItemCheckbox.tsx

+5-2
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,11 @@ export const renderMenuItemCheckbox_unstable = (state: MenuItemCheckboxState) =>
1212
<state.root>
1313
{state.checkmark && <state.checkmark />}
1414
{state.icon && <state.icon />}
15-
{state.content && <state.content />}
16-
{state.subText && <state.subText />}
15+
{state.content && (
16+
<state.content>
17+
{state.content.children} {state.subText && <state.subText />}
18+
</state.content>
19+
)}
1720
{state.secondaryContent && <state.secondaryContent />}
1821
</state.root>
1922
);

packages/react-components/react-menu/library/src/components/MenuItemRadio/renderMenuItemRadio.tsx

+5-2
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,11 @@ export const renderMenuItemRadio_unstable = (state: MenuItemRadioState) => {
1515
<state.root>
1616
{state.checkmark && <state.checkmark />}
1717
{state.icon && <state.icon />}
18-
{state.content && <state.content />}
19-
{state.subText && <state.subText />}
18+
{state.content && (
19+
<state.content>
20+
{state.content.children} {state.subText && <state.subText />}
21+
</state.content>
22+
)}
2023
{state.secondaryContent && <state.secondaryContent />}
2124
</state.root>
2225
);

packages/react-components/react-menu/library/src/components/MenuItemSwitch/renderMenuItemSwitch.tsx

+5-2
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,11 @@ export const renderMenuItemSwitch_unstable = (state: MenuItemSwitchState) => {
1212
return (
1313
<state.root>
1414
{state.icon && <state.icon />}
15-
{state.content && <state.content />}
16-
{state.subText && <state.subText />}
15+
{state.content && (
16+
<state.content>
17+
{state.content.children} {state.subText && <state.subText />}
18+
</state.content>
19+
)}
1720
{state.secondaryContent && <state.secondaryContent />}
1821
{state.switchIndicator && <state.switchIndicator />}
1922
</state.root>

packages/react-components/react-menu/library/src/components/MenuItemSwitch/useMenuItemSwitchStyles.styles.ts

+11-8
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,6 @@ const trackWidth = 40;
2222
const thumbSize = trackHeight - spaceBetweenThumbAndTrack;
2323

2424
const useSwitchIndicatorBaseClassName = makeResetStyles({
25-
// Switch items should not have submenus, we put it in the same grid area
26-
// as the submenu indicator in multiline
27-
gridArea: 'submenuIndicator',
28-
2925
borderRadius: tokens.borderRadiusCircular,
3026
border: `${tokens.strokeWidthThin} solid ${tokens.colorNeutralStrokeAccessible}`,
3127
lineHeight: 0,
@@ -89,15 +85,23 @@ const useSwitchIndicatorStyles = makeStyles({
8985
},
9086
});
9187

88+
const useMultilineStyles = makeStyles({
89+
switch: {
90+
alignSelf: 'center',
91+
},
92+
});
93+
9294
/**
9395
* Apply styling to the MenuItemSwitch slots based on the state
9496
*/
9597
export const useMenuItemSwitchStyles_unstable = (state: MenuItemSwitchState): MenuItemSwitchState => {
9698
'use no memo';
9799

98-
const { checked } = state;
100+
const { checked, subText } = state;
101+
const multiline = !!subText;
99102
const switchIndicatorStyles = useSwitchIndicatorStyles();
100103
const switchIndicatorBaseStyles = useSwitchIndicatorBaseClassName();
104+
const multilineStyles = useMultilineStyles();
101105
state.root.className = mergeClasses(menuItemSwitchClassNames.root, state.root.className);
102106
if (state.content) {
103107
state.content.className = mergeClasses(menuItemSwitchClassNames.content, state.content.className);
@@ -124,6 +128,7 @@ export const useMenuItemSwitchStyles_unstable = (state: MenuItemSwitchState): Me
124128
switchIndicatorBaseStyles,
125129
checked && switchIndicatorStyles.checked,
126130
state.switchIndicator.className,
131+
multiline && multilineStyles.switch,
127132
);
128133
}
129134

@@ -136,9 +141,7 @@ export const useMenuItemSwitchStyles_unstable = (state: MenuItemSwitchState): Me
136141
},
137142
checkmark: undefined,
138143
submenuIndicator: undefined,
139-
// Since switch items should not have submenus, we put it in the same grid area
140-
// as the submen in multiline
141-
hasSubmenu: !!state.subText,
144+
hasSubmenu: false,
142145
persistOnClick: true,
143146
});
144147

0 commit comments

Comments
 (0)