-
Notifications
You must be signed in to change notification settings - Fork 535
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: dark theme support #148
Changes from 41 commits
f4a0327
a486e66
9634b22
024468f
2d964fb
1c6199d
36243d8
0f801b7
5354282
965044a
f71822f
e9e9070
3cf0786
587dacd
655eadc
9b667c9
f11b36b
b2de5f3
3134edf
0d5ac2b
3f9afc1
65cdef3
15c29a8
74527d5
12aaf61
70086dd
eb50f4f
f9644d3
afcd69b
5b89111
cefa5df
753d1d8
843db67
8ea90a7
07f1aba
8cb7269
e0c3cf7
baf0845
9210d2f
94bb35c
d6374ba
4df8b4c
fa2f586
7772411
df2db05
91c42b8
589c490
95694d3
2aee3e6
e46736a
7705e1e
8666c5e
e907615
521ce57
56e2d78
7c44280
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -5,19 +5,24 @@ import { useActionContext } from '../../context/browserActions'; | |
import MaxunLogo from "../../assets/maxunlogo.png"; | ||
import { useTranslation } from 'react-i18next'; | ||
|
||
const CustomBoxContainer = styled.div` | ||
interface CustomBoxContainerProps { | ||
isDarkMode: boolean; | ||
} | ||
|
||
Comment on lines
+8
to
+11
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Consider using MUI's theme system instead of prop drilling The Consider using MUI's theme system: interface CustomBoxContainerProps {
theme: Theme; // Use MUI's Theme type
} |
||
const CustomBoxContainer = styled.div<CustomBoxContainerProps>` | ||
position: relative; | ||
min-width: 250px; | ||
width: auto; | ||
min-height: 100px; | ||
height: auto; | ||
// border: 2px solid #ff00c3; | ||
border-radius: 5px; | ||
background-color: white; | ||
background-color: ${({ isDarkMode }) => (isDarkMode ? '#313438' : 'white')}; | ||
color: ${({ isDarkMode }) => (isDarkMode ? 'white' : 'black')}; | ||
Comment on lines
+19
to
+20
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Use theme tokens instead of hardcoded colors Hardcoded colors (#313438, white) should be replaced with theme tokens for better maintainability and consistency. Consider this implementation: - background-color: ${({ isDarkMode }) => (isDarkMode ? '#313438' : 'white')};
- color: ${({ isDarkMode }) => (isDarkMode ? 'white' : 'black')};
+ background-color: ${({ theme }) => theme.palette.background.paper};
+ color: ${({ theme }) => theme.palette.text.primary};
- border-bottom: 20px solid ${({ isDarkMode }) => (isDarkMode ? '#313438' : 'white')};
+ border-bottom: 20px solid ${({ theme }) => theme.palette.background.paper}; Also applies to: 33-33 |
||
margin: 80px 13px 25px 13px; | ||
box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1); | ||
`; | ||
|
||
const Triangle = styled.div` | ||
const Triangle = styled.div<CustomBoxContainerProps>` | ||
position: absolute; | ||
top: -15px; | ||
left: 50%; | ||
|
@@ -26,7 +31,7 @@ const Triangle = styled.div` | |
height: 0; | ||
border-left: 20px solid transparent; | ||
border-right: 20px solid transparent; | ||
border-bottom: 20px solid white; | ||
border-bottom: 20px solid ${({ isDarkMode }) => (isDarkMode ? '#313438' : 'white')}; | ||
`; | ||
|
||
const Logo = styled.img` | ||
|
@@ -44,7 +49,8 @@ const Content = styled.div` | |
text-align: left; | ||
`; | ||
|
||
const ActionDescriptionBox = () => { | ||
|
||
const ActionDescriptionBox = ({ isDarkMode }: { isDarkMode: boolean }) => { | ||
const { t } = useTranslation(); | ||
const { getText, getScreenshot, getList, captureStage } = useActionContext() as { | ||
getText: boolean; | ||
|
@@ -93,9 +99,19 @@ const ActionDescriptionBox = () => { | |
<Checkbox | ||
checked={index < currentStageIndex} | ||
disabled | ||
sx={{ | ||
color: isDarkMode ? 'white' : 'default', | ||
'&.Mui-checked': { | ||
color: isDarkMode ? '#90caf9' : '#1976d2', | ||
}, | ||
}} | ||
/> | ||
} | ||
label={<Typography variant="body2" gutterBottom>{text}</Typography>} | ||
label={ | ||
<Typography variant="body2" gutterBottom color={isDarkMode ? 'white' : 'textPrimary'}> | ||
{text} | ||
</Typography> | ||
} | ||
/> | ||
))} | ||
</Box> | ||
|
@@ -112,9 +128,9 @@ const ActionDescriptionBox = () => { | |
}; | ||
|
||
return ( | ||
<CustomBoxContainer> | ||
<Logo src={MaxunLogo} alt='maxun_logo' /> | ||
<Triangle /> | ||
<CustomBoxContainer isDarkMode={isDarkMode}> | ||
<Logo src={MaxunLogo} alt="Maxun Logo" /> | ||
<Triangle isDarkMode={isDarkMode} /> | ||
<Content> | ||
{renderActionDescription()} | ||
</Content> | ||
|
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -1,16 +1,15 @@ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import React, { useRef } from 'react'; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import styled from "styled-components"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import { Button } from "@mui/material"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
//import { ActionDescription } from "../organisms/RightSidePanel"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import * as Settings from "./action-settings"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import { useSocketStore } from "../../context/socket"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
interface ActionSettingsProps { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
action: string; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
darkMode?: boolean; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
export const ActionSettings = ({ action }: ActionSettingsProps) => { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
export const ActionSettings = ({ action, darkMode = false }: ActionSettingsProps) => { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const settingsRef = useRef<{ getSettings: () => object }>(null); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const { socket } = useSocketStore(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -20,30 +19,27 @@ export const ActionSettings = ({ action }: ActionSettingsProps) => { | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
return <Settings.ScreenshotSettings ref={settingsRef} />; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
case 'scroll': | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return <Settings.ScrollSettings ref={settingsRef} />; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
case 'scrape': | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return <Settings.ScrapeSettings ref={settingsRef} />; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
case 'scrape': | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return <Settings.ScrapeSettings ref={settingsRef} />; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
case 'scrapeSchema': | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return <Settings.ScrapeSchemaSettings ref={settingsRef} />; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
default: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return null; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const handleSubmit = (event: React.SyntheticEvent) => { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
event.preventDefault(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
//get the data from settings | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const settings = settingsRef.current?.getSettings(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
//Send notification to the server and generate the pair | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
socket?.emit(`action`, { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
action, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
settings | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
31
to
+38
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Add error handling for socket events The form submission doesn't handle potential socket connection errors. const handleSubmit = (event: React.SyntheticEvent) => {
event.preventDefault();
const settings = settingsRef.current?.getSettings();
- socket?.emit(`action`, {
- action,
- settings
- });
+ if (!socket?.connected) {
+ console.error('Socket not connected');
+ return;
+ }
+ try {
+ socket.emit(`action`, {
+ action,
+ settings
+ });
+ } catch (error) {
+ console.error('Failed to emit action:', error);
+ }
}; 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return ( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<div> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
{/* <ActionDescription>Action settings:</ActionDescription> */} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<ActionSettingsWrapper action={action}> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<ActionSettingsWrapper action={action} darkMode={darkMode}> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<form onSubmit={handleSubmit}> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<DisplaySettings /> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<Button | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -64,10 +60,13 @@ export const ActionSettings = ({ action }: ActionSettingsProps) => { | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const ActionSettingsWrapper = styled.div<{ action: string }>` | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// Ensure that the Wrapper accepts the darkMode prop for styling adjustments. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const ActionSettingsWrapper = styled.div<{ action: string; darkMode: boolean }>` | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
display: flex; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
flex-direction: column; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
align-items: ${({ action }) => action === 'script' ? 'stretch' : 'center'};; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
align-items: ${({ action }) => (action === 'script' ? 'stretch' : 'center')}; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
justify-content: center; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
margin-top: 20px; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
background-color: ${({ darkMode }) => (darkMode ? '#1E1E1E' : 'white')}; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
color: ${({ darkMode }) => (darkMode ? 'white' : 'black')}; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
`; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix style functions to correctly access the
mode
propIn the styled component, the template literals should access the
mode
prop correctly. Currently,background-color: ${mode => mode ? ...}
does not access themode
prop as intended.Apply this diff to fix the issue:
📝 Committable suggestion