Skip to content

Commit e2ad6f0

Browse files
committed
Refactor MenuItems to use styled components
1 parent 9643df1 commit e2ad6f0

4 files changed

Lines changed: 47 additions & 39 deletions

File tree

src/components/MenuItems/MenuItems.scss

Lines changed: 0 additions & 20 deletions
This file was deleted.

src/components/MenuItems/MenuItems.tsx

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { useEffect, useRef, useState } from "react";
22
import useSystemSettings from "../../stores/systemSettingsStore";
33

4-
import "./MenuItems.scss";
4+
import { StyledItemsContent, StyledItems, StyledMenuItem } from "./styles";
55

66
export interface MenuItemsProps {
77
items: Array<MenuItemProps>;
@@ -15,31 +15,32 @@ export interface MenuItemProps {
1515
items?: Array<MenuItemProps>;
1616
}
1717

18-
function MenuItems({ items, position, positionType }: MenuItemsProps) {
18+
function MenuItems({
19+
items,
20+
position: { x, y },
21+
positionType,
22+
}: MenuItemsProps) {
1923
const settings = useSystemSettings();
2024
return (
21-
<div
22-
className="menu-items"
23-
style={{
24-
left: position.x,
25-
top: position.y,
26-
backgroundColor: settings.mainColor,
27-
position: positionType,
28-
}}
25+
<StyledItems
26+
left={x}
27+
top={y}
28+
backgroundColor={settings.mainColor}
29+
position={positionType}
2930
>
30-
<div className="menu-items__content">
31+
<StyledItemsContent>
3132
{items.map((item, i) => (
3233
<MenuItem
3334
title={item.title}
3435
action={item.action}
3536
items={item.items}
3637
itemNo={i + 1}
37-
position={{ ...position }}
38+
position={{ x, y }}
3839
key={`${item.title}-${i}`}
3940
/>
4041
))}
41-
</div>
42-
</div>
42+
</StyledItemsContent>
43+
</StyledItems>
4344
);
4445
}
4546

@@ -124,22 +125,21 @@ function MenuItem({
124125
}
125126

126127
return (
127-
<div
128+
<StyledMenuItem
128129
ref={elementRef}
129-
className="menu-item"
130130
onClick={handleOnClick}
131131
onMouseEnter={handleOnMouseEnter}
132132
onMouseLeave={handleOnMouseLeave}
133133
>
134-
<span className="menu-item__title">{title}</span>
134+
<span>{title}</span>
135135
{items && open && (
136136
<MenuItems
137137
items={items}
138138
position={{ ...elementPosition.current }}
139139
positionType="absolute"
140140
/>
141141
)}
142-
</div>
142+
</StyledMenuItem>
143143
);
144144
}
145145

src/components/MenuItems/styles.ts

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import styled from "@emotion/styled";
2+
3+
interface StyledMenuItemsProps {
4+
position: "relative" | "absolute";
5+
left: number;
6+
top: number;
7+
backgroundColor: string;
8+
}
9+
10+
export const StyledItems = styled.div<StyledMenuItemsProps>`
11+
width: auto;
12+
white-space: nowrap;
13+
box-sizing: border-box;
14+
box-shadow: 0 0 2px rgb(0, 0, 0, 0.5);
15+
left: ${(props) => props.left}px;
16+
top: ${(props) => props.top}px;
17+
background-color: ${(props) => props.backgroundColor};
18+
position: ${(props) => props.position};
19+
`;
20+
21+
export const StyledItemsContent = styled.div`
22+
box-sizing: border-box;
23+
`;
24+
25+
export const StyledMenuItem = styled.div`
26+
padding: 5px 12px;
27+
height: 20px;
28+
`;

tsconfig.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
"noUnusedLocals": true,
2020
"noUnusedParameters": true,
2121
"noFallthroughCasesInSwitch": true,
22-
"types": ["@emotion/react/types/css-prop"]
22+
"types": ["@emotion/react/types/css-prop", "@types/node"]
2323
},
2424
"include": ["src"],
2525
"references": [{ "path": "./tsconfig.node.json" }]

0 commit comments

Comments
 (0)